posthog-js 1.291.0 → 1.292.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/all-external-dependencies.js.map +1 -1
  2. package/dist/array.full.es5.js +1 -1
  3. package/dist/array.full.es5.js.map +1 -1
  4. package/dist/array.full.js +1 -1
  5. package/dist/array.full.js.map +1 -1
  6. package/dist/array.full.no-external.js +1 -1
  7. package/dist/array.full.no-external.js.map +1 -1
  8. package/dist/array.js +1 -1
  9. package/dist/array.js.map +1 -1
  10. package/dist/array.no-external.js +1 -1
  11. package/dist/array.no-external.js.map +1 -1
  12. package/dist/customizations.full.js +1 -1
  13. package/dist/dead-clicks-autocapture.js.map +1 -1
  14. package/dist/lazy-recorder.js +1 -1
  15. package/dist/main.js +1 -1
  16. package/dist/main.js.map +1 -1
  17. package/dist/module.d.ts +29 -10
  18. package/dist/module.full.d.ts +29 -10
  19. package/dist/module.full.js +1 -1
  20. package/dist/module.full.js.map +1 -1
  21. package/dist/module.full.no-external.d.ts +29 -10
  22. package/dist/module.full.no-external.js +1 -1
  23. package/dist/module.full.no-external.js.map +1 -1
  24. package/dist/module.js +1 -1
  25. package/dist/module.js.map +1 -1
  26. package/dist/module.no-external.d.ts +29 -10
  27. package/dist/module.no-external.js +1 -1
  28. package/dist/module.no-external.js.map +1 -1
  29. package/dist/posthog-recorder.js +1 -1
  30. package/dist/src/extensions/rageclick.d.ts +6 -1
  31. package/dist/src/types.d.ts +15 -0
  32. package/dist/surveys-preview.d.ts +29 -10
  33. package/lib/package.json +1 -1
  34. package/lib/src/autocapture.js +1 -1
  35. package/lib/src/autocapture.js.map +1 -1
  36. package/lib/src/extensions/rageclick.d.ts +6 -1
  37. package/lib/src/extensions/rageclick.js +18 -9
  38. package/lib/src/extensions/rageclick.js.map +1 -1
  39. package/lib/src/heatmaps.js +1 -1
  40. package/lib/src/heatmaps.js.map +1 -1
  41. package/lib/src/types.d.ts +15 -0
  42. package/lib/src/types.js.map +1 -1
  43. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"all-external-dependencies.js","sources":["../../../node_modules/.pnpm/@rrweb+record@2.0.0-alpha.17_patch_hash=4a974d451d029e3ef6c302f641dfaf41fb0881146b6d5198ccdbe8d50776b64f/node_modules/@rrweb/record/dist/record.js","../../../node_modules/.pnpm/@rrweb+rrweb-plugin-console-record@2.0.0-alpha.17_patch_hash=70915838e13e38a12d8b9a5e9f_363713bc1c3579cf0582b3fbb3420dde/node_modules/@rrweb/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.js","../../core/dist/utils/string-utils.mjs","../../core/dist/utils/type-utils.mjs","../../core/dist/utils/index.mjs","../../core/dist/error-tracking/chunk-ids.mjs","../../core/dist/error-tracking/parsers/base.mjs","../../core/dist/error-tracking/parsers/safari.mjs","../../core/dist/error-tracking/parsers/chrome.mjs","../../core/dist/error-tracking/parsers/gecko.mjs","../../core/dist/error-tracking/parsers/index.mjs","../../core/dist/error-tracking/error-properties-builder.mjs","../../core/dist/error-tracking/coercers/dom-exception-coercer.mjs","../../core/dist/error-tracking/coercers/error-coercer.mjs","../../core/dist/error-tracking/coercers/error-event-coercer.mjs","../../core/dist/error-tracking/coercers/string-coercer.mjs","../../core/dist/error-tracking/types.mjs","../../core/dist/error-tracking/coercers/utils.mjs","../../core/dist/error-tracking/coercers/object-coercer.mjs","../../core/dist/error-tracking/coercers/event-coercer.mjs","../../core/dist/error-tracking/coercers/primitive-coercer.mjs","../../core/dist/error-tracking/coercers/promise-rejection-event.mjs","../src/utils/globals.ts","../src/utils/type-utils.ts","../src/utils/logger.ts","../src/utils/index.ts","../src/utils/request-utils.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/external/denylist.ts","../src/utils/element-utils.ts","../src/autocapture-utils.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/network-plugin.ts","../src/entrypoints/recorder.ts","../../../node_modules/.pnpm/preact@10.19.3/node_modules/preact/dist/preact.module.js","../../../node_modules/.pnpm/preact@10.19.3/node_modules/preact/hooks/dist/hooks.module.js","../src/posthog-surveys-types.ts","../src/utils/survey-utils.ts","../src/uuidv7.ts","../src/utils/user-agent-utils.ts","../src/request.ts","../src/utils/regex-utils.ts","../src/utils/property-utils.ts","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/surveys.tsx","../src/utils/survey-url-prefill.ts","../src/entrypoints/surveys.ts","../src/entrypoints/exception-autocapture.ts","../src/posthog-exceptions.ts","../src/entrypoints/tracing-headers.ts","../src/constants.ts","../../../node_modules/.pnpm/web-vitals@4.2.4/node_modules/web-vitals/dist/web-vitals.attribution.js","../src/entrypoints/web-vitals.ts","../src/autocapture.ts","../src/utils/prototype-utils.ts","../src/entrypoints/dead-clicks-autocapture.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a;\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$2 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType$2 || {});\nconst testableAccessors$1 = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods$1 = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\n\n/*\nAngular zone patches many things and can pass the untainted checks below, causing performance issues\nAngular zone, puts the unpatched originals on the window, and the names for hose on the zone object.\nSo, we get the unpatched versions from the window object if they exist.\nYou can rename Zone, but this is a good enough proxy to avoid going to an iframe to get the untainted versions.\nsee: https://github.com/angular/angular/issues/26948\n*/\nfunction angularZoneUnpatchedAlternative(key) {\n const angularUnpatchedVersionSymbol = (\n globalThis\n )?.Zone?.__symbol__?.(key);\n if (\n angularUnpatchedVersionSymbol &&\n (globalThis)[angularUnpatchedVersionSymbol]\n ) {\n return (globalThis)[\n angularUnpatchedVersionSymbol\n ];\n } else {\n return undefined;\n }\n}\n\nconst untaintedBasePrototype$1 = {};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key])\n return untaintedBasePrototype$1[key];\n const defaultObj = angularZoneUnpatchedAlternative(key) || globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultObj.prototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch {\n return defaultObj.prototype;\n }\n}\nconst untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache$1[cacheKey])\n return untaintedAccessorCache$1[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache$1[cacheKey])\n return untaintedMethodCache$1[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nconst index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n const hostEl = (\n // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null\n );\n return Boolean(\n hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2\n );\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(\n /\\sbackground-clip:\\s*text;/g,\n \" -webkit-background-clip: text; background-clip: text;\"\n );\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n const { cssText } = rule2;\n if (cssText.split('\"').length < 3) return cssText;\n const statement = [\"@import\", `url(${JSON.stringify(rule2.href)})`];\n if (rule2.layerName === \"\") {\n statement.push(`layer`);\n } else if (rule2.layerName) {\n statement.push(`layer(${rule2.layerName})`);\n }\n if (rule2.supportsText) {\n statement.push(`supports(${rule2.supportsText})`);\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n const rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n const stringifiedRules = Array.from(\n rules2,\n (rule2) => stringifyRule(rule2, s2.href)\n ).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n let importStringified;\n try {\n importStringified = // for same-origin stylesheets,\n // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n let ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nfunction findStylesheet(doc, href) {\n return Array.from(doc.styleSheets).find((s) => s.href === href);\n}\nclass Mirror {\n constructor() {\n __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue({\n element,\n maskInputOptions,\n tagName,\n type,\n value,\n maskInputFn\n}) {\n let text = value || \"\";\n const actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n const chunkSize = 50;\n for (let x2 = 0; x2 < canvas.width; x2 += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n const pixelBuffer = new Uint32Array(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(\n ctx,\n x2,\n y,\n Math.min(chunkSize, canvas.width - x2),\n Math.min(chunkSize, canvas.height - y)\n ).data.buffer\n );\n if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n ) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, baseURL ?? window.location.href);\n } catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return (match == null ? void 0 : match[1]) ?? null;\n}\nfunction extractOrigin(url) {\n let origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(\n URL_IN_CSS_REF,\n (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === \"/\") {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split(\"/\");\n const parts = filePath.split(\"/\");\n stack.pop();\n for (const part of parts) {\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n }\n );\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (element instanceof HTMLFormElement) {\n return \"form\";\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nlet canvasService;\nlet canvasCtx;\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars2;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n let descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n let a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for (let eIndex = element.classList.length; eIndex--; ) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {\n }\n return false;\n}\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n }\n for (let eIndex = node2.classList.length; eIndex--; ) {\n const className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n let el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(`.${maskTextClass}`)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {\n }\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false\n } = options;\n const rootId = getRootId(doc, mirror2);\n switch (n2.nodeType) {\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$2.Document,\n childNodes: [],\n compatMode: n2.compatMode\n // probably \"BackCompat\"\n };\n } else {\n return {\n type: NodeType$2.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$2.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc,\n needsMask,\n maskTextFn,\n rootId\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$2.CDATA,\n textContent: \"\",\n rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$2.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n const docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var _a2;\n const { needsMask, maskTextFn, rootId } = options;\n const parent = index$1.parentNode(n2);\n const parentTagName = parent && parent.tagName;\n let text = index$1.textContent(n2);\n const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isStyle && text) {\n try {\n if (n2.nextSibling || n2.previousSibling) {\n } else if ((_a2 = parent.sheet) == null ? void 0 : _a2.cssRules) {\n text = stringifyStylesheet(parent.sheet);\n }\n } catch (err) {\n console.warn(\n `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n n2\n );\n }\n text = absolutifyURLs(text, getHref(options.doc));\n }\n if (isScript) {\n text = \"SCRIPT_PLACEHOLDER\";\n }\n if (!isStyle && !isScript && text && needsMask) {\n text = maskTextFn ? maskTextFn(text, index$1.parentElement(n2)) : text.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$2.Text,\n textContent: text || \"\",\n isStyle,\n rootId\n };\n}\n\n/**\n * in production, we've seen elements like\n * `<link type=\"text/css\" rel=\"stylesheet\" id=\"dark-mode-custom-link\"></link>`\n * while HTMLLinkElement suggests an href is always present\n * the w3c spec is less specific\n * and regardless we've seen at least one instance of this in the wild\n * let's be defensive and make sure this is typed as possibly undefined\n */\nfunction hrefFrom(n) {\n return n?.href;\n}\n\nfunction serializeElementNode(n2, options) {\n const {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions = {},\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false,\n rootId\n } = options;\n const needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n const tagName = getValidTagName$1(n2);\n let attributes = {};\n const len = n2.attributes.length;\n for (let i2 = 0; i2 < len; i2++) {\n const attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(\n doc,\n tagName,\n toLowerCase(attr.name),\n attr.value\n );\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n const href = hrefFrom(n2);\n if (href) {\n let stylesheet = findStylesheet(doc, href);\n if (!stylesheet && href.includes('.css')) {\n const rootDomain = window.location.origin;\n const stylesheetPath = href.replace(window.location.href, '');\n const potentialStylesheetHref = rootDomain + '/' + stylesheetPath;\n stylesheet = findStylesheet(doc, potentialStylesheetHref);\n }\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n }\n if (tagName === \"style\" && n2.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n !(n2.innerText || index$1.textContent(n2) || \"\").trim().length) {\n const cssText = stringifyStylesheet(\n n2.sheet\n );\n if (cssText) {\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n const value = n2.value;\n const checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName,\n value,\n maskInputOptions,\n maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n try {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n } catch {\n // likely this is safari not able to deal with the `:modal` selector\n // we can't detect whether the dialog is modal or non-modal open, so have to guess\n // hopefully this is only safari 15.4 and 15.5\n attributes.rr_open_mode = \"modal\"\n attributes.ph_rr_could_not_detect_modal = true\n }\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n }\n } else if (!(\"__context\" in n2)) {\n const canvasDataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n const blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n const image = n2;\n const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n const priorCrossOrigin = image.crossOrigin;\n const recordInlineImage = () => {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\n `Cannot inline img src=${imageSrc}! Error: ${err}`\n );\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n const mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n2.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {\n }\n return {\n type: NodeType$2.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock,\n rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$2.Comment) {\n return true;\n } else if (sn.type === NodeType$2.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") && sn.attributes.as === \"script\" || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n /^msapplication-tile(image|color)$/\n ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild = false,\n inlineStylesheet = true,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions = {},\n inlineImages = false,\n recordCanvas = false,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout = 5e3,\n onStylesheetLoad,\n stylesheetLoadTimeout = 5e3,\n keepIframeSrcFn = () => false,\n newlyAddedElement = false\n } = options;\n let { needsMask } = options;\n let { preserveWhiteSpace = true } = options;\n if (!needsMask) {\n const checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(\n n2,\n maskTextClass,\n maskTextSelector,\n checkAncestors\n );\n }\n const _serializedNode = serializeNode(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n let id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$2.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$2.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$2.Document || serializedNode.type === NodeType$2.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n };\n if (serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n for (const childN of Array.from(index$1.childNodes(n2))) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n let shadowRootEl = null;\n if (isElement(n2) && (shadowRootEl = index$1.shadowRoot(n2))) {\n for (const childN of Array.from(index$1.childNodes(shadowRootEl))) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(shadowRootEl) && (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n const parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(\n n2,\n () => {\n const iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(\n n2,\n serializedIframeNode\n );\n }\n }\n },\n iframeLoadTimeout\n );\n }\n if (serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(\n n2,\n () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(\n n2,\n serializedLinkNode\n );\n }\n }\n },\n stylesheetLoadTimeout\n );\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n const {\n mirror: mirror2 = new Mirror(),\n blockClass = \"rr-block\",\n blockSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n inlineImages = false,\n recordCanvas = false,\n maskAllInputs = false,\n maskTextFn,\n maskInputFn,\n slimDOM = false,\n dataURLOptions,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn = () => false\n } = options || {};\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n }\n ) : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (this instanceof a22) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", { value: true });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function() {\n return n2[k];\n }\n });\n });\n return a2;\n}\n// Removed postcss\nclass BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n constructor(..._args) {\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n get childNodes() {\n const childNodes2 = [];\n let childIterator = this.firstChild;\n while (childIterator) {\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n contains(node2) {\n if (!(node2 instanceof BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while (node2.parentNode) {\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appendChild(_newChild) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n insertBefore(_newChild, _refChild) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removeChild(_node) {\n throw new Error(\n `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n toString() {\n return \"RRNode\";\n }\n}\nconst testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\n/*\nAngular zone patches many things and can pass the untainted checks below, causing performance issues\nAngular zone, puts the unpatched originals on the window, and the names for hose on the zone object.\nSo, we get the unpatched versions from the window object if they exist.\nYou can rename Zone, but this is a good enough proxy to avoid going to an iframe to get the untainted versions.\nsee: https://github.com/angular/angular/issues/26948\n*/\nfunction angularZoneUnpatchedAlternative$1(key) {\n const angularUnpatchedVersionSymbol = (\n globalThis\n )?.Zone?.__symbol__?.(key);\n if (\n angularUnpatchedVersionSymbol &&\n (globalThis)[angularUnpatchedVersionSymbol]\n ) {\n return (globalThis)[\n angularUnpatchedVersionSymbol\n ];\n } else {\n return undefined;\n }\n}\n\nconst untaintedBasePrototype = {};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = angularZoneUnpatchedAlternative$1(key) ||globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentElement\");\n}\nfunction textContent(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"textContent\");\n}\nfunction contains(n2, other) {\n return getUntaintedMethod(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode(n2) {\n return getUntaintedMethod(\"Node\", n2, \"getRootNode\")();\n}\nfunction host(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function(...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked ? d : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n }\n );\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n const doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n const el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n const el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {\n }\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n const parent = index.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(\n n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n );\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (n2 instanceof BaseRRNode && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index.shadowRoot(n2));\n}\nclass StyleSheetMirror {\n constructor() {\n __publicField(this, \"id\", 1);\n __publicField(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n getId(stylesheet) {\n return this.styleIDMap.get(stylesheet) ?? -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */\n add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n let newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n2) {\n var _a2;\n let shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index.host(index.getRootNode(n2)))\n shadowHost = index.host(index.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n let rootShadowHost = n2;\n let shadowHost;\n while (shadowHost = getShadowHost(rootShadowHost))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n const shadowHost = getRootShadowHost(n2);\n return index.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n return index.contains(doc, n2) || shadowHostInDom(n2);\n}\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n constructor() {\n __publicField(this, \"length\", 0);\n __publicField(this, \"head\", null);\n __publicField(this, \"tail\", null);\n }\n get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n let current = this.head;\n for (let index2 = 0; index2 < position; index2++) {\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n }\n addNode(n2) {\n const node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n const current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n const current = n2.nextSibling.__ln.previous;\n node2.previous = current;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current) {\n current.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n }\n removeNode(n2) {\n const current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"texts\", []);\n __publicField(this, \"attributes\", []);\n __publicField(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"removes\", []);\n __publicField(this, \"mapRemoves\", []);\n __publicField(this, \"movedMap\", {});\n __publicField(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"blockClass\");\n __publicField(this, \"blockSelector\");\n __publicField(this, \"maskTextClass\");\n __publicField(this, \"maskTextSelector\");\n __publicField(this, \"inlineStylesheet\");\n __publicField(this, \"maskInputOptions\");\n __publicField(this, \"maskTextFn\");\n __publicField(this, \"maskInputFn\");\n __publicField(this, \"keepIframeSrcFn\");\n __publicField(this, \"recordCanvas\");\n __publicField(this, \"inlineImages\");\n __publicField(this, \"slimDOMOptions\");\n __publicField(this, \"dataURLOptions\");\n __publicField(this, \"doc\");\n __publicField(this, \"mirror\");\n __publicField(this, \"iframeManager\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"shadowDomManager\");\n __publicField(this, \"canvasManager\");\n __publicField(this, \"processedNodeManager\");\n __publicField(this, \"unattachedDoc\");\n __publicField(this, \"processMutations\", (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n });\n __publicField(this, \"emit\", () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = /* @__PURE__ */ new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n2) => {\n let ns = n2;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n2) => {\n const parent = index.parentNode(n2);\n if (!parent || !inDom(n2) || parent.tagName === \"TEXTAREA\") {\n return;\n }\n const parentId = isShadowRoot(parent) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(parent);\n const nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n const sn = serializeNodeWithId(n2, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskTextClass: this.maskTextClass,\n maskTextSelector: this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(\n currentN\n );\n }\n if (hasShadowRoot(n2)) {\n this.shadowDomManager.addShadowRoot(index.shadowRoot(n2), this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n }\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n2 of this.movedSet) {\n if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(index.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for (const n2 of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {\n pushAdd(n2);\n } else if (isAncestorInSet(this.movedSet, n2)) {\n pushAdd(n2);\n } else {\n this.droppedSet.add(n2);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node2 = null;\n if (candidate) {\n const parentId = this.mirror.getId(index.parentNode(candidate.value));\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(index.parentNode(_node.value));\n const nextId = getNextId(_node.value);\n if (nextId === -1) continue;\n else if (parentId !== -1) {\n node2 = _node;\n break;\n } else {\n const unhandledNode = _node.value;\n const parent = index.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = index.host(parent);\n const parentId2 = this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n const payload = {\n texts: this.texts.map((text) => {\n const n2 = text.node;\n const parent = index.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(parent);\n }\n return {\n id: this.mirror.getId(n2),\n value: text.value\n };\n }).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes.map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === \"string\") {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes\n };\n }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.attributeMap = /* @__PURE__ */ new WeakMap();\n this.removes = [];\n this.addedSet = /* @__PURE__ */ new Set();\n this.movedSet = /* @__PURE__ */ new Set();\n this.droppedSet = /* @__PURE__ */ new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n });\n __publicField(this, \"genTextAreaValueMutation\", (textarea) => {\n let item = this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(textarea, item);\n }\n item.attributes.value = Array.from(\n index.childNodes(textarea),\n (cn) => index.textContent(cn) || \"\"\n ).join(\"\");\n });\n __publicField(this, \"processMutation\", (m) => {\n if (isIgnored(m.target, this.mirror, this.slimDOMOptions)) {\n return;\n }\n switch (m.type) {\n case \"characterData\": {\n const value = index.textContent(m.target);\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) && value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(\n m.target,\n this.maskTextClass,\n this.maskTextSelector,\n true\n // checkAncestors\n ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\": {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === \"value\") {\n const type = getInputType(target);\n value = maskInputValue({\n element: target,\n maskInputOptions: this.maskInputOptions,\n tagName: target.tagName,\n type,\n value,\n maskInputFn: this.maskInputFn\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || value === m.oldValue) {\n return;\n }\n let item = this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(\n this.doc,\n toLowerCase(target.tagName),\n toLowerCase(attributeName),\n value\n );\n if (attributeName === \"style\") {\n if (!this.unattachedDoc) {\n try {\n this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n } else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === \"\") {\n item.styleDiff[pname] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\": {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\n return;\n if (m.target.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n m.removedNodes.forEach((n2) => {\n const nodeId = this.mirror.getId(n2);\n const parentId = isShadowRoot(m.target) ? this.mirror.getId(index.host(m.target)) : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || isIgnored(n2, this.mirror, this.slimDOMOptions) || !isSerialized(n2, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n2)) {\n deepDelete(this.addedSet, n2);\n this.droppedSet.add(n2);\n } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n2);\n } else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n }\n this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n __publicField(this, \"genAdds\", (n2, target) => {\n if (this.processedNodeManager.inOtherBuffer(n2, this)) return;\n if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;\n if (this.mirror.hasNode(n2)) {\n if (isIgnored(n2, this.mirror, this.slimDOMOptions)) {\n return;\n }\n this.movedSet.add(n2);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n this.addedSet.add(n2);\n this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, this.blockClass, this.blockSelector, false)) {\n index.childNodes(n2).forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n2)) {\n index.childNodes(index.shadowRoot(n2)).forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n2);\n });\n }\n }\n });\n }\n init(options) {\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index.childNodes(n2).forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.length === 0) return false;\n return _isParentRemoved(removes, n2, mirror2);\n}\nfunction _isParentRemoved(removes, n2, mirror2) {\n let node2 = index.parentNode(n2);\n while (node2) {\n const parentId = mirror2.getId(node2);\n if (removes.some((r2) => r2.id === parentId)) {\n return true;\n }\n node2 = index.parentNode(node2);\n }\n return false;\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n const parent = index.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = (...rest) => {\n try {\n return cb(...rest);\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n const observer = new (mutationObserverCtor())(\n callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer))\n );\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction initMoveObserver({\n mousemoveCb,\n sampling,\n doc,\n mirror: mirror2\n}) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle(\n callbackWrapper(\n (source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(\n positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }),\n source\n );\n positions = [];\n timeBaseline = null;\n }\n ),\n callbackThreshold\n );\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(\n typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n );\n }),\n threshold,\n {\n trailing: false\n }\n )\n );\n const handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({\n mouseInteractionCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch (event.pointerType) {\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n const id = mirror2.getId(target);\n const { clientX, clientY } = e2;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...pointerType !== null && { pointerType }\n });\n };\n };\n Object.keys(MouseInteractions).filter(\n (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n ).forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\n \"mouse\",\n \"pointer\"\n );\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({\n scrollCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }),\n sampling.scroll || 100\n )\n );\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(\n throttle(\n callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }),\n 200\n )\n );\n return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n inputCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n ignoreClass,\n ignoreSelector,\n maskInputOptions,\n maskInputFn,\n sampling,\n userTriggeredOnInput\n}) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n let text = target.value;\n let isChecked = false;\n const type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions,\n tagName,\n type,\n value: text,\n maskInputFn\n });\n }\n cbWithDedup(\n target,\n userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n );\n const name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el) => {\n if (el !== target) {\n const text2 = el.value;\n cbWithDedup(\n el,\n userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n );\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n const id = mirror2.getId(target);\n callbackWrapper(inputCb)({\n ...v2,\n id\n });\n }\n }\n const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n const handlers = events.map(\n (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n );\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n );\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, \"value\"],\n [currentWindow.HTMLInputElement.prototype, \"checked\"],\n [currentWindow.HTMLSelectElement.prototype, \"value\"],\n [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n // Some UI library use selectedIndex to set select value\n [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(\n ...hookProperties.map(\n (p) => hookSetter(\n p[0],\n p[1],\n {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n // userTriggered to false as this could well be programmatic\n });\n }\n },\n false,\n currentWindow\n )\n )\n );\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n const positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n const rules2 = Array.from(\n childRule.parentRule.cssRules\n );\n const index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n const index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n let id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule2, index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule: rule2, index: index2 }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2 = this.cssRules.length) {\n const rule2 = `${selector} { ${styleBlock} }`;\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [rule2, index2]);\n };\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index: index2 }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [index2]);\n };\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(\n unmodifiedFunctions[typeKey].insertRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule2, index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule: rule2,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index2 || 0\n // defaults to 0\n ]\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n type.prototype.deleteRule = new Proxy(\n unmodifiedFunctions[typeKey].deleteRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index2] }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({\n mirror: mirror2,\n stylesheetManager\n}, host2) {\n var _a2, _b, _c;\n let hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index.host(host2));\n const patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n const originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(\n patchTarget == null ? void 0 : patchTarget.prototype,\n \"adoptedStyleSheets\"\n ) : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set(sheets) {\n var _a3;\n const result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {\n }\n }\n return result2;\n }\n });\n return callbackWrapper(() => {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver({\n styleDeclarationCb,\n mirror: mirror2,\n ignoreCSSAttributes,\n stylesheetManager\n}, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({\n mediaInteractionCb,\n blockClass,\n blockSelector,\n mirror: mirror2,\n sampling,\n doc\n}) {\n const handler = callbackWrapper(\n (type) => throttle(\n callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate, loop } = target;\n mediaInteractionCb({\n type,\n id: mirror2.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n loop\n });\n }),\n sampling.media || 500\n )\n );\n const handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = /* @__PURE__ */ new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== \"string\",\n descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n const restoreHandler = patch(\n doc.fonts,\n \"add\",\n function(original) {\n return function(fontFace) {\n setTimeout(\n callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }),\n 0\n );\n return original.apply(this, [fontFace]);\n };\n }\n );\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror: mirror2, blockClass, blockSelector, selectionCb } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i2 = 0; i2 < count; i2++) {\n const range = selection.getRangeAt(i2);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset,\n end: mirror2.getId(endContainer),\n endOffset\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n doc,\n customElementCb\n}) {\n const win = doc.defaultView;\n if (!win || !win.customElements) return () => {\n };\n const restoreHandler = patch(\n win.customElements,\n \"define\",\n function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name\n }\n });\n } catch (e2) {\n console.warn(`Custom element callback failed for ${name}`);\n }\n return original.apply(this, [name, constructor, options]);\n };\n }\n );\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n const {\n mutationCb,\n mousemoveCb,\n mouseInteractionCb,\n scrollCb,\n viewportResizeCb,\n inputCb,\n mediaInteractionCb,\n styleSheetRuleCb,\n styleDeclarationCb,\n canvasMutationCb,\n fontCb,\n selectionCb,\n customElementCb\n } = o2;\n o2.mutationCb = (...p) => {\n if (hooks.mutation) {\n hooks.mutation(...p);\n }\n mutationCb(...p);\n };\n o2.mousemoveCb = (...p) => {\n if (hooks.mousemove) {\n hooks.mousemove(...p);\n }\n mousemoveCb(...p);\n };\n o2.mouseInteractionCb = (...p) => {\n if (hooks.mouseInteraction) {\n hooks.mouseInteraction(...p);\n }\n mouseInteractionCb(...p);\n };\n o2.scrollCb = (...p) => {\n if (hooks.scroll) {\n hooks.scroll(...p);\n }\n scrollCb(...p);\n };\n o2.viewportResizeCb = (...p) => {\n if (hooks.viewportResize) {\n hooks.viewportResize(...p);\n }\n viewportResizeCb(...p);\n };\n o2.inputCb = (...p) => {\n if (hooks.input) {\n hooks.input(...p);\n }\n inputCb(...p);\n };\n o2.mediaInteractionCb = (...p) => {\n if (hooks.mediaInteaction) {\n hooks.mediaInteaction(...p);\n }\n mediaInteractionCb(...p);\n };\n o2.styleSheetRuleCb = (...p) => {\n if (hooks.styleSheetRule) {\n hooks.styleSheetRule(...p);\n }\n styleSheetRuleCb(...p);\n };\n o2.styleDeclarationCb = (...p) => {\n if (hooks.styleDeclaration) {\n hooks.styleDeclaration(...p);\n }\n styleDeclarationCb(...p);\n };\n o2.canvasMutationCb = (...p) => {\n if (hooks.canvasMutation) {\n hooks.canvasMutation(...p);\n }\n canvasMutationCb(...p);\n };\n o2.fontCb = (...p) => {\n if (hooks.font) {\n hooks.font(...p);\n }\n fontCb(...p);\n };\n o2.selectionCb = (...p) => {\n if (hooks.selection) {\n hooks.selection(...p);\n }\n selectionCb(...p);\n };\n o2.customElementCb = (...c2) => {\n if (hooks.customElement) {\n hooks.customElement(...c2);\n }\n customElementCb(...c2);\n };\n}\nfunction initObservers(o2, hooks = {}) {\n const currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n mergeHooks(o2, hooks);\n let mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n const mousemoveHandler = initMoveObserver(o2);\n const mouseInteractionHandler = initMouseInteractionObserver(o2);\n const scrollHandler = initScrollObserver(o2);\n const viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n const inputHandler = initInputObserver(o2);\n const mediaInteractionHandler = initMediaInteractionObserver(o2);\n let styleSheetObserver = () => {\n };\n let adoptedStyleSheetObserver = () => {\n };\n let styleDeclarationObserver = () => {\n };\n let fontObserver = () => {\n };\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n const selectionObserver = initSelectionObserver(o2);\n const customElementObserver = initCustomElementObserver(o2);\n const pluginHandlers = [];\n for (const plugin3 of o2.plugins) {\n pluginHandlers.push(\n plugin3.observer(plugin3.callback, currentWindow, plugin3.options)\n );\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(\n typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n );\n}\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n __publicField(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(\n (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n );\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\nclass IframeManager {\n constructor(options) {\n __publicField(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField(this, \"crossOriginIframeStyleMirror\");\n __publicField(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"wrappedEmit\");\n __publicField(this, \"loadListener\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n this.stylesheetManager.styleMirror.generateId.bind(\n this.stylesheetManager.styleMirror\n )\n );\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (this.recordCrossOriginIframes)\n (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\n \"message\",\n this.handleMessage.bind(this)\n );\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(\n iframeEl.contentDocument.adoptedStyleSheets,\n this.mirror.getId(iframeEl.contentDocument)\n );\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n const transformedEvent = this.transformCrossOriginEvent(\n iframeEl,\n crossOriginMessageEvent.data.event\n );\n if (transformedEvent)\n this.wrappedEmit(\n transformedEvent,\n crossOriginMessageEvent.data.isCheckout\n );\n }\n transformCrossOriginEvent(iframeEl, e2) {\n var _a2;\n switch (e2.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n const rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e2;\n }\n case EventType.Custom: {\n this.replaceIds(\n e2.data.payload,\n iframeEl,\n [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n );\n return e2;\n }\n case EventType.IncrementalSnapshot: {\n switch (e2.data.source) {\n case IncrementalSource.Mutation: {\n e2.data.adds.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n this.replaceIdOnNode(n2.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n });\n e2.data.attributes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n e2.data.texts.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e2.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n return e2;\n }\n case IncrementalSource.Font: {\n return e2;\n }\n case IncrementalSource.Selection: {\n e2.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach((style) => {\n this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(\n iframeEl,\n obj[key]\n );\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node2, iframeEl) {\n this.replaceIds(node2, iframeEl, [\"id\", \"rootId\"]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node2, rootId) {\n if (node2.type !== NodeType$2.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n __publicField(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"scrollCb\");\n __publicField(this, \"bypassOptions\");\n __publicField(this, \"mirror\");\n __publicField(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot2, doc) {\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n const observer = initMutationObserver(\n {\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n },\n shadowRoot2\n );\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(\n initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })\n );\n setTimeout(() => {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(\n shadowRoot2.adoptedStyleSheets,\n this.mirror.getId(index.host(shadowRoot2))\n );\n this.restoreHandlers.push(\n initAdoptedStyleSheetObserver(\n {\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager\n },\n shadowRoot2\n )\n );\n }, 0);\n }\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(\n iframeElement.contentWindow.Element,\n iframeElement.contentDocument\n );\n }\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(\n patch(\n element.prototype,\n \"attachShadow\",\n function(original) {\n return function(option) {\n const sRoot = original.call(this, option);\n const shadowRootEl = index.shadowRoot(this);\n if (shadowRootEl && inDom(this))\n manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }\n )\n );\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n } catch (e2) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for (i2 = 0; i2 < len; i2 += 3) {\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n let contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n return;\n const name = value.constructor.name;\n const list2 = variableListFor$1(ctx, name);\n let index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (value instanceof Array) {\n return value.map((arg) => serializeArg(arg, win, ctx));\n } else if (value === null) {\n return value;\n } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [Object.values(value)]\n };\n } else if (\n // SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n value instanceof ArrayBuffer\n ) {\n const name = value.constructor.name;\n const base64 = encode(value);\n return {\n rr_type: name,\n base64\n };\n } else if (value instanceof DataView) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (value instanceof HTMLImageElement) {\n const name = value.constructor.name;\n const { src } = value;\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof HTMLCanvasElement) {\n const name = \"HTMLImageElement\";\n const src = value.toDataURL();\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof ImageData) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [serializeArg(value.data, win, ctx), value.width, value.height]\n };\n } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n const name = value.constructor.name;\n const index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name,\n index: index2\n };\n }\n return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n const webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n (name) => typeof win[name] === \"function\"\n );\n return Boolean(\n supportedWebGLConstructorNames.find(\n (name) => value instanceof win[name]\n )\n );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n const handlers = [];\n const props2D = Object.getOwnPropertyNames(\n win.CanvasRenderingContext2D.prototype\n );\n for (const prop of props2D) {\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n win.CanvasRenderingContext2D.prototype,\n prop,\n function(original) {\n return function(...args) {\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(() => {\n const recordArgs = serializeArgs(args, win, this);\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(\n win.CanvasRenderingContext2D.prototype,\n prop,\n {\n set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [v2],\n setter: true\n });\n }\n }\n );\n handlers.push(hookHandler);\n }\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n const handlers = [];\n try {\n const restoreHandler = patch(\n win.HTMLCanvasElement.prototype,\n \"getContext\",\n function(original) {\n return function(contextType, ...args) {\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n const ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n if (args[0] && typeof args[0] === \"object\") {\n const contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [contextType, ...args]);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n const handlers = [];\n const props = Object.getOwnPropertyNames(prototype);\n for (const prop of props) {\n if (\n //prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)\n ) {\n continue;\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n prototype,\n prop,\n function(original) {\n return function(...args) {\n const result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n const recordArgs = serializeArgs(args, win, this);\n const mutation = {\n type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(prototype, prop, {\n set(v2) {\n cb(this.canvas, {\n type,\n property: prop,\n args: [v2],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n }\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n const handlers = [];\n handlers.push(\n ...patchGLPrototype(\n win.WebGLRenderingContext.prototype,\n CanvasContext.WebGL,\n cb,\n blockClass,\n blockSelector,\n win\n )\n );\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n handlers.push(\n ...patchGLPrototype(\n win.WebGL2RenderingContext.prototype,\n CanvasContext.WebGL2,\n cb,\n blockClass,\n blockSelector,\n win\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nconst encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nconst decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));\nconst blob = typeof window !== \"undefined\" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\nfunction WorkerWrapper(options) {\n let objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n const worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", () => {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\n \"data:text/javascript;base64,\" + encodedJs,\n {\n name: options == null ? void 0 : options.name\n }\n );\n } finally {\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nclass CanvasManager {\n constructor(options) {\n __publicField(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField(this, \"rafStamps\", { latestId: 0, invokeId: null });\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"resetObservers\");\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"processMutation\", (target, mutation) => {\n const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n if (newFrame || !this.rafStamps.invokeId)\n this.rafStamps.invokeId = this.rafStamps.latestId;\n if (!this.pendingCanvasMutations.has(target)) {\n this.pendingCanvasMutations.set(target, []);\n }\n this.pendingCanvasMutations.get(target).push(mutation);\n });\n const {\n sampling = \"all\",\n win,\n blockClass,\n blockSelector,\n recordCanvas,\n dataURLOptions\n } = options;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\")\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\")\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions\n });\n }\n reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n }\n freeze() {\n this.frozen = true;\n }\n unfreeze() {\n this.frozen = false;\n }\n lock() {\n this.locked = true;\n }\n unlock() {\n this.locked = false;\n }\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n true\n );\n const snapshotInProgressMap = /* @__PURE__ */ new Map();\n const worker = new WorkerWrapper();\n worker.onmessage = (e2) => {\n const { id } = e2.data;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n const { base64, type, width, height } = e2.data;\n this.mutationCb({\n id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [0, 0, width, height]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [{ rr_type: \"ArrayBuffer\", base64 }],\n type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n const timeBetweenSnapshots = 1e3 / fps;\n let lastSnapshotTime = 0;\n let rafId;\n const getCanvas = () => {\n const matchedCanvas = [];\n const searchCanvas = (root) => {\n root.querySelectorAll(\"canvas\").forEach((canvas) => {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n root.querySelectorAll(\"*\").forEach((elem) => {\n if (elem.shadowRoot) {\n searchCanvas(elem.shadowRoot);\n }\n });\n };\n searchCanvas(win.document);\n return matchedCanvas;\n };\n const takeCanvasSnapshots = (timestamp) => {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n getCanvas().forEach(async (canvas) => {\n var _a2;\n const id = this.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return;\n if (canvas.width === 0 || canvas.height === 0) return;\n snapshotInProgressMap.set(id, true);\n if ([\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n const context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n // createImageBitmap throws if resizing to 0\n // Fallback to intrinsic size if canvas has not yet rendered\n const width = canvas.clientWidth || canvas.width;\n const height = canvas.clientHeight || canvas.height;\n const bitmap = await createImageBitmap(canvas, {\n resizeWidth: width,\n resizeHeight: height\n });\n worker.postMessage(\n {\n id,\n bitmap,\n width: width,\n height: height,\n dataURLOptions: options.dataURLOptions\n },\n [bitmap]\n );\n });\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = () => {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n }\n initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n false\n );\n const canvas2DReset = initCanvas2DMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n this.resetObservers = () => {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n }\n startPendingCanvasMutationFlusher() {\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n startRAFTimestamping() {\n const setLatestRAFTimestamp = (timestamp) => {\n this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n }\n flushPendingCanvasMutations() {\n this.pendingCanvasMutations.forEach(\n (_values, canvas) => {\n const id = this.mirror.getId(canvas);\n this.flushPendingCanvasMutationFor(canvas, id);\n }\n );\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n const values = valuesWithType.map((value) => {\n const { type: type2, ...rest } = value;\n return rest;\n });\n const { type } = valuesWithType[0];\n this.mutationCb({ id, type, commands: values });\n this.pendingCanvasMutations.delete(canvas);\n }\n}\nclass StylesheetManager {\n constructor(options) {\n __publicField(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"adoptedStyleSheetCb\");\n __publicField(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0) return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r2, index2) => ({\n rule: stringifyRule(r2, sheet.href),\n index: index2\n }))\n });\n } else styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n }\n // TODO: take snapshot on stylesheet reload by applying event listener\n trackStylesheetInLinkElement(_linkEl) {\n }\n}\nclass ProcessedNodeManager {\n constructor() {\n __publicField(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"active\", false);\n }\n inOtherBuffer(node2, thisBuffer) {\n const buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n }\n add(node2, buffer) {\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(() => {\n this.nodeMap = /* @__PURE__ */ new WeakMap();\n this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n }\n destroy() {\n }\n}\nlet wrappedEmit;\nlet takeFullSnapshot$1;\nlet canvasManager;\nlet recording = false;\ntry {\n if (Array.from([1], (x2) => x2 * 2)[0] !== 2) {\n const cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror$2();\nfunction record(options = {}) {\n const {\n emit,\n checkoutEveryNms,\n checkoutEveryNth,\n blockClass = \"rr-block\",\n blockSelector = null,\n ignoreClass = \"rr-ignore\",\n ignoreSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n maskAllInputs,\n maskInputOptions: _maskInputOptions,\n slimDOMOptions: _slimDOMOptions,\n maskInputFn,\n maskTextFn,\n hooks,\n packFn,\n sampling = {},\n dataURLOptions = {},\n mousemoveWait,\n recordDOM = true,\n recordCanvas = false,\n recordCrossOriginIframes = false,\n recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n userTriggeredOnInput = false,\n collectFonts = false,\n inlineImages = false,\n plugins,\n keepIframeSrcFn = () => false,\n ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n errorHandler: errorHandler2\n } = options;\n registerErrorHandler(errorHandler2);\n const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return () => {\n };\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : { password: true };\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e2) => {\n for (const plugin3 of plugins || []) {\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = (r2, isCheckout) => {\n var _a2;\n const e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n const message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout\n };\n window.parent.postMessage(message, \"*\");\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m\n }\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p\n }\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p\n }\n });\n const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a2\n }\n });\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n const iframeManager = new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit\n });\n for (const plugin3 of plugins || []) {\n if (plugin3.getMirror)\n plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass,\n blockSelector,\n mirror,\n sampling: sampling.canvas,\n dataURLOptions\n });\n const shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager\n },\n mirror\n });\n takeFullSnapshot$1 = (isCheckout = false) => {\n if (!recordDOM) {\n return;\n }\n wrappedEmit(\n {\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n },\n isCheckout\n );\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node2 = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n2) => {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index.shadowRoot(n2), document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit(\n {\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n },\n isCheckout\n );\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(\n document.adoptedStyleSheets,\n mirror.getId(document)\n );\n };\n try {\n const handlers = [];\n const observe = (doc) => {\n var _a2;\n return callbackWrapper(initObservers)(\n {\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions\n }\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d\n }\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d\n }\n }),\n inputCb: (v2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v2\n }\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p\n }\n }),\n styleSheetRuleCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r2\n }\n }),\n styleDeclarationCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r2\n }\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p\n }\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p\n }\n });\n },\n customElementCb: (c2) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c2\n }\n });\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskTextClass,\n maskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordDOM,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter((p) => p.observer)) == null ? void 0 : _a2.map((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload\n }\n })\n }))) || []\n },\n hooks\n );\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n } catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(\n on(\"DOMContentLoaded\", () => {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n })\n );\n handlers.push(\n on(\n \"load\",\n () => {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n },\n window\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = (tag, payload) => {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag,\n payload\n }\n });\n};\nrecord.freezePage = () => {\n mutationBuffers.forEach((buf) => buf.freeze());\n};\nrecord.takeFullSnapshot = (isCheckout) => {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nexport {\n record\n};\n//# sourceMappingURL=record.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField2 = (obj, key, value) => __defNormalProp2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a;\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nconst testableAccessors$1 = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods$1 = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype$1 = {};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key])\n return untaintedBasePrototype$1[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache$1[cacheKey])\n return untaintedAccessorCache$1[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache$1[cacheKey])\n return untaintedMethodCache$1[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nconst index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1\n};\nfunction isShadowRoot(n2) {\n const hostEl = (\n // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null\n );\n return Boolean(\n hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2\n );\n}\nclass Mirror {\n constructor() {\n __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction createMirror$2() {\n return new Mirror();\n}\nconst IGNORED_NODE = -2;\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n }\n for (let eIndex = node2.classList.length; eIndex--; ) {\n const className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (this instanceof a22) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", { value: true });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function() {\n return n2[k];\n }\n });\n });\n return a2;\n}\n// Removed postcss here\nclass BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n constructor(..._args) {\n __publicField22(this, \"parentElement\", null);\n __publicField22(this, \"parentNode\", null);\n __publicField22(this, \"ownerDocument\");\n __publicField22(this, \"firstChild\", null);\n __publicField22(this, \"lastChild\", null);\n __publicField22(this, \"previousSibling\", null);\n __publicField22(this, \"nextSibling\", null);\n __publicField22(this, \"ELEMENT_NODE\", 1);\n __publicField22(this, \"TEXT_NODE\", 3);\n __publicField22(this, \"nodeType\");\n __publicField22(this, \"nodeName\");\n __publicField22(this, \"RRNodeType\");\n }\n get childNodes() {\n const childNodes2 = [];\n let childIterator = this.firstChild;\n while (childIterator) {\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n contains(node2) {\n if (!(node2 instanceof BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while (node2.parentNode) {\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appendChild(_newChild) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n insertBefore(_newChild, _refChild) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removeChild(_node) {\n throw new Error(\n `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n toString() {\n return \"RRNode\";\n }\n}\nconst testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentElement\");\n}\nfunction textContent(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"textContent\");\n}\nfunction contains(n2, other) {\n return getUntaintedMethod(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode(n2) {\n return getUntaintedMethod(\"Node\", n2, \"getRootNode\")();\n}\nfunction host(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function(...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked ? d : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n }\n );\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n const doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n const el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n const el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {\n }\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n const parent = index.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction queueToResolveTrees(queue) {\n const queueNodeMap = {};\n const putIntoMap = (m, parent) => {\n const nodeInTree = {\n value: m,\n parent,\n children: []\n };\n queueNodeMap[m.node.id] = nodeInTree;\n return nodeInTree;\n };\n const queueNodeTrees = [];\n for (const mutation of queue) {\n const { nextId, parentId } = mutation;\n if (nextId && nextId in queueNodeMap) {\n const nextInTree = queueNodeMap[nextId];\n if (nextInTree.parent) {\n const idx = nextInTree.parent.children.indexOf(nextInTree);\n nextInTree.parent.children.splice(\n idx,\n 0,\n putIntoMap(mutation, nextInTree.parent)\n );\n } else {\n const idx = queueNodeTrees.indexOf(nextInTree);\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n }\n continue;\n }\n if (parentId in queueNodeMap) {\n const parentInTree = queueNodeMap[parentId];\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\n continue;\n }\n queueNodeTrees.push(putIntoMap(mutation, null));\n }\n return queueNodeTrees;\n}\nfunction iterateResolveTree(tree, cb) {\n cb(tree.value);\n for (let i2 = tree.children.length - 1; i2 >= 0; i2--) {\n iterateResolveTree(tree.children[i2], cb);\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(\n n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n );\n}\nfunction getBaseDimension(node2, rootIframe) {\n var _a2, _b;\n const frameElement = (_b = (_a2 = node2.ownerDocument) == null ? void 0 : _a2.defaultView) == null ? void 0 : _b.frameElement;\n if (!frameElement || frameElement === rootIframe) {\n return {\n x: 0,\n y: 0,\n relativeScale: 1,\n absoluteScale: 1\n };\n }\n const frameDimension = frameElement.getBoundingClientRect();\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n const relativeScale = frameDimension.height / frameElement.clientHeight;\n return {\n x: frameDimension.x * frameBaseDimension.relativeScale + frameBaseDimension.x,\n y: frameDimension.y * frameBaseDimension.relativeScale + frameBaseDimension.y,\n relativeScale,\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale\n };\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (n2 instanceof BaseRRNode && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index.shadowRoot(n2));\n}\nfunction getNestedRule(rules2, position) {\n const rule2 = rules2[position[0]];\n if (position.length === 1) {\n return rule2;\n } else {\n return getNestedRule(\n rule2.cssRules[position[1]].cssRules,\n position.slice(2)\n );\n }\n}\nfunction getPositionsAndIndex(nestedIndex) {\n const positions = [...nestedIndex];\n const index2 = positions.pop();\n return { positions, index: index2 };\n}\nfunction uniqueTextMutations(mutations) {\n const idSet = /* @__PURE__ */ new Set();\n const uniqueMutations = [];\n for (let i2 = mutations.length; i2--; ) {\n const mutation = mutations[i2];\n if (!idSet.has(mutation.id)) {\n uniqueMutations.push(mutation);\n idSet.add(mutation.id);\n }\n }\n return uniqueMutations;\n}\nclass StyleSheetMirror {\n constructor() {\n __publicField2(this, \"id\", 1);\n __publicField2(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField2(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n getId(stylesheet) {\n return this.styleIDMap.get(stylesheet) ?? -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */\n add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n let newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n2) {\n var _a2;\n let shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index.host(index.getRootNode(n2)))\n shadowHost = index.host(index.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n let rootShadowHost = n2;\n let shadowHost;\n while (shadowHost = getShadowHost(rootShadowHost))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n const shadowHost = getRootShadowHost(n2);\n return index.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n return index.contains(doc, n2) || shadowHostInDom(n2);\n}\nconst utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n StyleSheetMirror,\n get _mirror() {\n return _mirror;\n },\n closestElementOfNode,\n getBaseDimension,\n getNestedRule,\n getPositionsAndIndex,\n getRootShadowHost,\n getShadowHost,\n getWindowHeight,\n getWindowScroll,\n getWindowWidth,\n hasShadowRoot,\n hookSetter,\n inDom,\n isAncestorRemoved,\n isBlocked,\n isIgnored,\n isSerialized,\n isSerializedIframe,\n isSerializedStylesheet,\n iterateResolveTree,\n legacy_isTouchEvent,\n get nowTimestamp() {\n return nowTimestamp;\n },\n on,\n patch,\n polyfill: polyfill$1,\n queueToResolveTrees,\n shadowHostInDom,\n throttle,\n uniqueTextMutations\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nconst encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nconst decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));\ntypeof window !== \"undefined\" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\ntry {\n if (Array.from([1], (x2) => x2 * 2)[0] !== 2) {\n const cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\ncreateMirror$2();\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nclass StackFrame {\n constructor(obj) {\n __publicField(this, \"fileName\");\n __publicField(this, \"functionName\");\n __publicField(this, \"lineNumber\");\n __publicField(this, \"columnNumber\");\n this.fileName = obj.fileName || \"\";\n this.functionName = obj.functionName || \"\";\n this.lineNumber = obj.lineNumber;\n this.columnNumber = obj.columnNumber;\n }\n toString() {\n const lineNumber = this.lineNumber || \"\";\n const columnNumber = this.columnNumber || \"\";\n if (this.functionName)\n return `${this.functionName} (${this.fileName}:${lineNumber}:${columnNumber})`;\n return `${this.fileName}:${lineNumber}:${columnNumber}`;\n }\n}\nconst FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\nconst CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nconst SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nconst ErrorStackParser = {\n /**\n * Given an Error object, extract the most information from it.\n */\n parse: function(error) {\n if (!error) {\n return [];\n }\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error.stacktrace !== \"undefined\" || // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error[\"opera#sourceloc\"] !== \"undefined\"\n ) {\n return this.parseOpera(\n error\n );\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n console.warn(\n \"[console-record-plugin]: Failed to parse error object:\",\n error\n );\n return [];\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function(urlLike) {\n if (urlLike.indexOf(\":\") === -1) {\n return [urlLike];\n }\n const regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n const parts = regExp.exec(urlLike.replace(/[()]/g, \"\"));\n if (!parts) throw new Error(`Cannot parse given url: ${urlLike}`);\n return [parts[1], parts[2] || void 0, parts[3] || void 0];\n },\n parseV8OrIE: function(error) {\n const filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\"(eval \") > -1) {\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g, \"\");\n }\n let sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\");\n const location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n const tokens = sanitizedLine.split(/\\s+/).slice(1);\n const locationParts = this.extractLocation(\n location ? location[1] : tokens.pop()\n );\n const functionName = tokens.join(\" \") || void 0;\n const fileName = [\"eval\", \"<anonymous>\"].indexOf(locationParts[0]) > -1 ? void 0 : locationParts[0];\n return new StackFrame({\n functionName,\n fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n },\n parseFFOrSafari: function(error) {\n const filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\" > eval\") > -1) {\n line = line.replace(\n / line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g,\n \":$1\"\n );\n }\n if (line.indexOf(\"@\") === -1 && line.indexOf(\":\") === -1) {\n return new StackFrame({\n functionName: line\n });\n } else {\n const functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n const matches = line.match(functionNameRegex);\n const functionName = matches && matches[1] ? matches[1] : void 0;\n const locationParts = this.extractLocation(\n line.replace(functionNameRegex, \"\")\n );\n return new StackFrame({\n functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }\n }, this);\n },\n parseOpera: function(e) {\n if (!e.stacktrace || e.message.indexOf(\"\\n\") > -1 && e.message.split(\"\\n\").length > e.stacktrace.split(\"\\n\").length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function(e) {\n const lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n const lines = e.message.split(\"\\n\");\n const result2 = [];\n for (let i = 2, len = lines.length; i < len; i += 2) {\n const match = lineRE.exec(lines[i]);\n if (match) {\n result2.push(\n new StackFrame({\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n })\n );\n }\n }\n return result2;\n },\n parseOpera10: function(e) {\n const lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n const lines = e.stacktrace.split(\"\\n\");\n const result2 = [];\n for (let i = 0, len = lines.length; i < len; i += 2) {\n const match = lineRE.exec(lines[i]);\n if (match) {\n result2.push(\n new StackFrame({\n functionName: match[3] || void 0,\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n })\n );\n }\n }\n return result2;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function(error) {\n const filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function(line) {\n const tokens = line.split(\"@\");\n const locationParts = this.extractLocation(tokens.pop());\n const functionCall = tokens.shift() || \"\";\n const functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, \"$2\").replace(/\\([^)]*\\)/g, \"\") || void 0;\n return new StackFrame({\n functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n }\n};\nfunction pathToSelector(node2) {\n if (!node2 || !node2.outerHTML) {\n return \"\";\n }\n let path = \"\";\n while (node2.parentElement) {\n let name = node2.localName;\n if (!name) {\n break;\n }\n name = name.toLowerCase();\n const parent = node2.parentElement;\n const domSiblings = [];\n if (parent.children && parent.children.length > 0) {\n for (let i = 0; i < parent.children.length; i++) {\n const sibling = parent.children[i];\n if (sibling.localName && sibling.localName.toLowerCase) {\n if (sibling.localName.toLowerCase() === name) {\n domSiblings.push(sibling);\n }\n }\n }\n }\n if (domSiblings.length > 1) {\n name += `:eq(${domSiblings.indexOf(node2)})`;\n }\n path = name + (path ? \">\" + path : \"\");\n node2 = parent;\n }\n return path;\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isObjTooDeep(obj, limit) {\n if (limit === 0) {\n return true;\n }\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n return true;\n }\n }\n return false;\n}\nfunction stringify(obj, stringifyOptions) {\n const options = {\n numOfKeysLimit: 50,\n depthOfLimit: 4\n };\n Object.assign(options, stringifyOptions);\n const stack = [];\n const keys = [];\n return JSON.stringify(\n obj,\n function(key, value) {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) {\n if (stack[0] === value) {\n value = \"[Circular ~]\";\n } else {\n value = \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n }\n }\n } else {\n stack.push(value);\n }\n if (value === null) return value;\n if (value === void 0) return \"undefined\";\n if (shouldIgnore(value)) {\n return toString(value);\n }\n if (typeof value === \"bigint\") {\n return value.toString() + \"n\";\n }\n if (value instanceof Event) {\n const eventResult = {};\n for (const eventKey in value) {\n const eventValue = value[eventKey];\n if (Array.isArray(eventValue)) {\n eventResult[eventKey] = pathToSelector(\n eventValue.length ? eventValue[0] : null\n );\n } else {\n eventResult[eventKey] = eventValue;\n }\n }\n return eventResult;\n } else if (value instanceof Node) {\n if (value instanceof HTMLElement) {\n return value ? value.outerHTML : \"\";\n }\n return value.nodeName;\n } else if (value instanceof Error) {\n return value.stack ? value.stack + \"\\nEnd of stack for Error object\" : value.name + \": \" + value.message;\n }\n return value;\n }\n );\n function shouldIgnore(_obj) {\n if (isObject(_obj) && Object.keys(_obj).length > options.numOfKeysLimit) {\n return true;\n }\n if (typeof _obj === \"function\") {\n return true;\n }\n if (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n return true;\n }\n return false;\n }\n function toString(_obj) {\n let str = _obj.toString();\n if (options.stringLengthLimit && str.length > options.stringLengthLimit) {\n str = `${str.slice(0, options.stringLengthLimit)}...`;\n }\n return str;\n }\n}\nconst defaultLogOptions = {\n level: [\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"info\",\n \"log\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"trace\",\n \"warn\"\n ],\n lengthThreshold: 1e3,\n logger: \"console\"\n};\nfunction initLogObserver(cb, win, options) {\n const logOptions = options ? Object.assign({}, defaultLogOptions, options) : defaultLogOptions;\n const loggerType = logOptions.logger;\n if (!loggerType) {\n return () => {\n };\n }\n let logger;\n if (typeof loggerType === \"string\") {\n logger = win[loggerType];\n } else {\n logger = loggerType;\n }\n let logCount = 0;\n let inStack = false;\n const cancelHandlers = [];\n if (logOptions.level.includes(\"error\")) {\n const errorHandler = (event) => {\n const message = event.message, error = event.error;\n const trace = ErrorStackParser.parse(error).map(\n (stackFrame) => stackFrame.toString()\n );\n const payload = [stringify(message, logOptions.stringifyOptions)];\n cb({\n level: \"error\",\n trace,\n payload\n });\n };\n win.addEventListener(\"error\", errorHandler);\n cancelHandlers.push(() => {\n win.removeEventListener(\"error\", errorHandler);\n });\n const unhandledrejectionHandler = (event) => {\n let error;\n let payload;\n if (event.reason instanceof Error) {\n error = event.reason;\n payload = [\n stringify(\n `Uncaught (in promise) ${error.name}: ${error.message}`,\n logOptions.stringifyOptions\n )\n ];\n } else {\n error = new Error();\n payload = [\n stringify(\"Uncaught (in promise)\", logOptions.stringifyOptions),\n stringify(event.reason, logOptions.stringifyOptions)\n ];\n }\n const trace = ErrorStackParser.parse(error).map(\n (stackFrame) => stackFrame.toString()\n );\n cb({\n level: \"error\",\n trace,\n payload\n });\n };\n win.addEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n cancelHandlers.push(() => {\n win.removeEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n });\n }\n for (const levelType of logOptions.level) {\n cancelHandlers.push(replace(logger, levelType));\n }\n return () => {\n cancelHandlers.forEach((h) => h());\n };\n function replace(_logger, level) {\n if (!_logger[level]) {\n return () => {\n };\n }\n return utils.patch(\n _logger,\n level,\n (original) => {\n return (...args) => {\n original.apply(this, args);\n if (level === \"assert\" && !!args[0]) {\n return;\n }\n if (inStack) {\n return;\n }\n inStack = true;\n try {\n const trace = ErrorStackParser.parse(new Error()).map((stackFrame) => stackFrame.toString()).splice(1);\n const argsForPayload = level === \"assert\" ? args.slice(1) : args;\n const payload = argsForPayload.map(\n (s) => stringify(s, logOptions.stringifyOptions)\n );\n logCount++;\n if (logCount < logOptions.lengthThreshold) {\n cb({\n level,\n trace,\n payload\n });\n } else if (logCount === logOptions.lengthThreshold) {\n cb({\n level: \"warn\",\n trace: [],\n payload: [\n stringify(\"The number of log records reached the threshold.\")\n ]\n });\n }\n } catch (error) {\n original(\"rrweb logger error:\", error, ...args);\n } finally {\n inStack = false;\n }\n };\n }\n );\n }\n}\nconst PLUGIN_NAME = \"rrweb/console@1\";\nconst getRecordConsolePlugin = (options) => ({\n name: PLUGIN_NAME,\n observer: initLogObserver,\n options\n});\nexport {\n PLUGIN_NAME,\n getRecordConsolePlugin\n};\n//# sourceMappingURL=rrweb-plugin-console-record.js.map\n","function includes(str, needle) {\n return -1 !== str.indexOf(needle);\n}\nconst trim = function(str) {\n return str.trim();\n};\nconst stripLeadingDollar = function(s) {\n return s.replace(/^\\$/, '');\n};\nfunction isDistinctIdStringLike(value) {\n return [\n 'distinct_id',\n 'distinctid'\n ].includes(value.toLowerCase());\n}\nexport { includes, isDistinctIdStringLike, stripLeadingDollar, trim };\n","import { knownUnsafeEditableEvent } from \"../types.mjs\";\nimport { includes } from \"./string-utils.mjs\";\nconst nativeIsArray = Array.isArray;\nconst ObjProto = Object.prototype;\nconst type_utils_hasOwnProperty = ObjProto.hasOwnProperty;\nconst type_utils_toString = ObjProto.toString;\nconst isArray = nativeIsArray || function(obj) {\n return '[object Array]' === type_utils_toString.call(obj);\n};\nconst isFunction = (x)=>'function' == typeof x;\nconst isNativeFunction = (x)=>isFunction(x) && -1 !== x.toString().indexOf('[native code]');\nconst isObject = (x)=>x === Object(x) && !isArray(x);\nconst isEmptyObject = (x)=>{\n if (isObject(x)) {\n for(const key in x)if (type_utils_hasOwnProperty.call(x, key)) return false;\n return true;\n }\n return false;\n};\nconst isUndefined = (x)=>void 0 === x;\nconst isString = (x)=>'[object String]' == type_utils_toString.call(x);\nconst isEmptyString = (x)=>isString(x) && 0 === x.trim().length;\nconst isNull = (x)=>null === x;\nconst isNullish = (x)=>isUndefined(x) || isNull(x);\nconst isNumber = (x)=>'[object Number]' == type_utils_toString.call(x);\nconst isBoolean = (x)=>'[object Boolean]' === type_utils_toString.call(x);\nconst isFormData = (x)=>x instanceof FormData;\nconst isFile = (x)=>x instanceof File;\nconst isPlainError = (x)=>x instanceof Error;\nconst isKnownUnsafeEditableEvent = (x)=>includes(knownUnsafeEditableEvent, x);\nfunction isInstanceOf(candidate, base) {\n try {\n return candidate instanceof base;\n } catch {\n return false;\n }\n}\nfunction isPrimitive(value) {\n return null === value || 'object' != typeof value;\n}\nfunction isBuiltin(candidate, className) {\n return Object.prototype.toString.call(candidate) === `[object ${className}]`;\n}\nfunction isError(candidate) {\n switch(Object.prototype.toString.call(candidate)){\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object DOMError]':\n case '[object WebAssembly.Exception]':\n return true;\n default:\n return isInstanceOf(candidate, Error);\n }\n}\nfunction isErrorEvent(event) {\n return isBuiltin(event, 'ErrorEvent');\n}\nfunction isEvent(candidate) {\n return !isUndefined(Event) && isInstanceOf(candidate, Event);\n}\nfunction isPlainObject(candidate) {\n return isBuiltin(candidate, 'Object');\n}\nconst yesLikeValues = [\n true,\n 'true',\n 1,\n '1',\n 'yes'\n];\nconst isYesLike = (val)=>includes(yesLikeValues, val);\nconst noLikeValues = [\n false,\n 'false',\n 0,\n '0',\n 'no'\n];\nconst isNoLike = (val)=>includes(noLikeValues, val);\nexport { type_utils_hasOwnProperty as hasOwnProperty, isArray, isBoolean, isBuiltin, isEmptyObject, isEmptyString, isError, isErrorEvent, isEvent, isFile, isFormData, isFunction, isInstanceOf, isKnownUnsafeEditableEvent, isNativeFunction, isNoLike, isNull, isNullish, isNumber, isObject, isPlainError, isPlainObject, isPrimitive, isString, isUndefined, isYesLike, noLikeValues, yesLikeValues };\n","export * from \"./bot-detection.mjs\";\nexport * from \"./bucketed-rate-limiter.mjs\";\nexport * from \"./number-utils.mjs\";\nexport * from \"./string-utils.mjs\";\nexport * from \"./type-utils.mjs\";\nexport * from \"./promise-queue.mjs\";\nconst STRING_FORMAT = 'utf8';\nfunction assert(truthyValue, message) {\n if (!truthyValue || 'string' != typeof truthyValue || isEmpty(truthyValue)) throw new Error(message);\n}\nfunction isEmpty(truthyValue) {\n if (0 === truthyValue.trim().length) return true;\n return false;\n}\nfunction removeTrailingSlash(url) {\n return url?.replace(/\\/+$/, '');\n}\nasync function retriable(fn, props) {\n let lastError = null;\n for(let i = 0; i < props.retryCount + 1; i++){\n if (i > 0) await new Promise((r)=>setTimeout(r, props.retryDelay));\n try {\n const res = await fn();\n return res;\n } catch (e) {\n lastError = e;\n if (!props.retryCheck(e)) throw e;\n }\n }\n throw lastError;\n}\nfunction currentTimestamp() {\n return new Date().getTime();\n}\nfunction currentISOTime() {\n return new Date().toISOString();\n}\nfunction safeSetTimeout(fn, timeout) {\n const t = setTimeout(fn, timeout);\n t?.unref && t?.unref();\n return t;\n}\nconst isPromise = (obj)=>obj && 'function' == typeof obj.then;\nconst isError = (x)=>x instanceof Error;\nfunction getFetch() {\n return 'undefined' != typeof fetch ? fetch : void 0 !== globalThis.fetch ? globalThis.fetch : void 0;\n}\nfunction allSettled(promises) {\n return Promise.all(promises.map((p)=>(p ?? Promise.resolve()).then((value)=>({\n status: 'fulfilled',\n value\n }), (reason)=>({\n status: 'rejected',\n reason\n }))));\n}\nexport { STRING_FORMAT, allSettled, assert, currentISOTime, currentTimestamp, getFetch, isError, isPromise, removeTrailingSlash, retriable, safeSetTimeout };\n","let parsedStackResults;\nlet lastKeysCount;\nlet cachedFilenameChunkIds;\nfunction getFilenameToChunkIdMap(stackParser) {\n const chunkIdMap = globalThis._posthogChunkIds;\n if (!chunkIdMap) return;\n const chunkIdKeys = Object.keys(chunkIdMap);\n if (cachedFilenameChunkIds && chunkIdKeys.length === lastKeysCount) return cachedFilenameChunkIds;\n lastKeysCount = chunkIdKeys.length;\n cachedFilenameChunkIds = chunkIdKeys.reduce((acc, stackKey)=>{\n if (!parsedStackResults) parsedStackResults = {};\n const result = parsedStackResults[stackKey];\n if (result) acc[result[0]] = result[1];\n else {\n const parsedStack = stackParser(stackKey);\n for(let i = parsedStack.length - 1; i >= 0; i--){\n const stackFrame = parsedStack[i];\n const filename = stackFrame?.filename;\n const chunkId = chunkIdMap[stackKey];\n if (filename && chunkId) {\n acc[filename] = chunkId;\n parsedStackResults[stackKey] = [\n filename,\n chunkId\n ];\n break;\n }\n }\n }\n return acc;\n }, {});\n return cachedFilenameChunkIds;\n}\nexport { getFilenameToChunkIdMap };\n","import { isUndefined } from \"../../utils/index.mjs\";\nconst UNKNOWN_FUNCTION = '?';\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\n platform: \"web:javascript\",\n filename,\n function: '<anonymous>' === func ? UNKNOWN_FUNCTION : func,\n in_app: true\n };\n if (!isUndefined(lineno)) frame.lineno = lineno;\n if (!isUndefined(colno)) frame.colno = colno;\n return frame;\n}\nexport { UNKNOWN_FUNCTION, createFrame };\n","import { UNKNOWN_FUNCTION } from \"./base.mjs\";\nconst extractSafariExtensionDetails = (func, filename)=>{\n const isSafariExtension = -1 !== func.indexOf('safari-extension');\n const isSafariWebExtension = -1 !== func.indexOf('safari-web-extension');\n return isSafariExtension || isSafariWebExtension ? [\n -1 !== func.indexOf('@') ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`\n ] : [\n func,\n filename\n ];\n};\nexport { extractSafariExtensionDetails };\n","import { UNKNOWN_FUNCTION, createFrame } from \"./base.mjs\";\nimport { extractSafariExtensionDetails } from \"./safari.mjs\";\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\nconst chromeRegex = /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nconst chromeStackLineParser = (line)=>{\n const noFnParts = chromeRegexNoFnName.exec(line);\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n const parts = chromeRegex.exec(line);\n if (parts) {\n const isEval = parts[2] && 0 === parts[2].indexOf('eval');\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n if (subMatch) {\n parts[2] = subMatch[1];\n parts[3] = subMatch[2];\n parts[4] = subMatch[3];\n }\n }\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);\n }\n};\nexport { chromeStackLineParser };\n","import { UNKNOWN_FUNCTION, createFrame } from \"./base.mjs\";\nimport { extractSafariExtensionDetails } from \"./safari.mjs\";\nconst geckoREgex = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst geckoStackLineParser = (line)=>{\n const parts = geckoREgex.exec(line);\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n if (subMatch) {\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = '';\n }\n }\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);\n }\n};\nexport { geckoStackLineParser };\n","import { UNKNOWN_FUNCTION } from \"./base.mjs\";\nimport { chromeStackLineParser } from \"./chrome.mjs\";\nimport { winjsStackLineParser } from \"./winjs.mjs\";\nimport { geckoStackLineParser } from \"./gecko.mjs\";\nimport { opera10StackLineParser, opera11StackLineParser } from \"./opera.mjs\";\nimport { nodeStackLineParser } from \"./node.mjs\";\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STACKTRACE_FRAME_LIMIT = 50;\nfunction reverseAndStripFrames(stack) {\n if (!stack.length) return [];\n const localStack = Array.from(stack);\n localStack.reverse();\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map((frame)=>({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION\n }));\n}\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\nfunction createStackParser(...parsers) {\n return (stack, skipFirstLines = 0)=>{\n const frames = [];\n const lines = stack.split('\\n');\n for(let i = skipFirstLines; i < lines.length; i++){\n const line = lines[i];\n if (line.length > 1024) continue;\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n if (!cleanedLine.match(/\\S*Error: /)) {\n for (const parser of parsers){\n const frame = parser(cleanedLine);\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n if (frames.length >= STACKTRACE_FRAME_LIMIT) break;\n }\n }\n return reverseAndStripFrames(frames);\n };\n}\nexport { chromeStackLineParser, createStackParser, geckoStackLineParser, nodeStackLineParser, opera10StackLineParser, opera11StackLineParser, reverseAndStripFrames, winjsStackLineParser };\n","import { isArray } from \"../utils/index.mjs\";\nimport { getFilenameToChunkIdMap } from \"./chunk-ids.mjs\";\nimport { createStackParser } from \"./parsers/index.mjs\";\nconst MAX_CAUSE_RECURSION = 4;\nclass ErrorPropertiesBuilder {\n constructor(coercers = [], parsers = [], modifiers = []){\n this.coercers = coercers;\n this.modifiers = modifiers;\n this.stackParser = createStackParser(...parsers);\n }\n buildFromUnknown(input, hint = {}) {\n const providedMechanism = hint && hint.mechanism;\n const mechanism = providedMechanism || {\n handled: true,\n type: 'generic'\n };\n const coercingContext = this.buildCoercingContext(mechanism, hint, 0);\n const exceptionWithCause = coercingContext.apply(input);\n const parsingContext = this.buildParsingContext();\n const exceptionWithStack = this.parseStacktrace(exceptionWithCause, parsingContext);\n const exceptionList = this.convertToExceptionList(exceptionWithStack, mechanism);\n return {\n $exception_list: exceptionList,\n $exception_level: 'error'\n };\n }\n async modifyFrames(exceptionList) {\n for (const exc of exceptionList)if (exc.stacktrace && exc.stacktrace.frames && isArray(exc.stacktrace.frames)) exc.stacktrace.frames = await this.applyModifiers(exc.stacktrace.frames);\n return exceptionList;\n }\n coerceFallback(ctx) {\n return {\n type: 'Error',\n value: 'Unknown error',\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n parseStacktrace(err, ctx) {\n let cause;\n if (null != err.cause) cause = this.parseStacktrace(err.cause, ctx);\n let stack;\n if ('' != err.stack && null != err.stack) stack = this.applyChunkIds(this.stackParser(err.stack, err.synthetic ? 1 : 0), ctx.chunkIdMap);\n return {\n ...err,\n cause,\n stack\n };\n }\n applyChunkIds(frames, chunkIdMap) {\n return frames.map((frame)=>{\n if (frame.filename && chunkIdMap) frame.chunk_id = chunkIdMap[frame.filename];\n return frame;\n });\n }\n applyCoercers(input, ctx) {\n for (const adapter of this.coercers)if (adapter.match(input)) return adapter.coerce(input, ctx);\n return this.coerceFallback(ctx);\n }\n async applyModifiers(frames) {\n let newFrames = frames;\n for (const modifier of this.modifiers)newFrames = await modifier(newFrames);\n return newFrames;\n }\n convertToExceptionList(exceptionWithStack, mechanism) {\n const currentException = {\n type: exceptionWithStack.type,\n value: exceptionWithStack.value,\n mechanism: {\n type: mechanism.type ?? 'generic',\n handled: mechanism.handled ?? true,\n synthetic: exceptionWithStack.synthetic ?? false\n }\n };\n if (exceptionWithStack.stack) currentException.stacktrace = {\n type: 'raw',\n frames: exceptionWithStack.stack\n };\n const exceptionList = [\n currentException\n ];\n if (null != exceptionWithStack.cause) exceptionList.push(...this.convertToExceptionList(exceptionWithStack.cause, {\n ...mechanism,\n handled: true\n }));\n return exceptionList;\n }\n buildParsingContext() {\n const context = {\n chunkIdMap: getFilenameToChunkIdMap(this.stackParser)\n };\n return context;\n }\n buildCoercingContext(mechanism, hint, depth = 0) {\n const coerce = (input, depth)=>{\n if (!(depth <= MAX_CAUSE_RECURSION)) return;\n {\n const ctx = this.buildCoercingContext(mechanism, hint, depth);\n return this.applyCoercers(input, ctx);\n }\n };\n const context = {\n ...hint,\n syntheticException: 0 == depth ? hint.syntheticException : void 0,\n mechanism,\n apply: (input)=>coerce(input, depth),\n next: (input)=>coerce(input, depth + 1)\n };\n return context;\n }\n}\nexport { ErrorPropertiesBuilder };\n","import { isBuiltin, isString } from \"../../utils/index.mjs\";\nclass DOMExceptionCoercer {\n match(err) {\n return this.isDOMException(err) || this.isDOMError(err);\n }\n coerce(err, ctx) {\n const hasStack = isString(err.stack);\n return {\n type: this.getType(err),\n value: this.getValue(err),\n stack: hasStack ? err.stack : void 0,\n cause: err.cause ? ctx.next(err.cause) : void 0,\n synthetic: false\n };\n }\n getType(candidate) {\n return this.isDOMError(candidate) ? 'DOMError' : 'DOMException';\n }\n getValue(err) {\n const name = err.name || (this.isDOMError(err) ? 'DOMError' : 'DOMException');\n const message = err.message ? `${name}: ${err.message}` : name;\n return message;\n }\n isDOMException(err) {\n return isBuiltin(err, 'DOMException');\n }\n isDOMError(err) {\n return isBuiltin(err, 'DOMError');\n }\n}\nexport { DOMExceptionCoercer };\n","import { isPlainError } from \"../../utils/index.mjs\";\nclass ErrorCoercer {\n match(err) {\n return isPlainError(err);\n }\n coerce(err, ctx) {\n return {\n type: this.getType(err),\n value: this.getMessage(err, ctx),\n stack: this.getStack(err),\n cause: err.cause ? ctx.next(err.cause) : void 0,\n synthetic: false\n };\n }\n getType(err) {\n return err.name || err.constructor.name;\n }\n getMessage(err, _ctx) {\n const message = err.message;\n if (message.error && 'string' == typeof message.error.message) return String(message.error.message);\n return String(message);\n }\n getStack(err) {\n return err.stacktrace || err.stack || void 0;\n }\n}\nexport { ErrorCoercer };\n","import { isErrorEvent } from \"../../utils/index.mjs\";\nclass ErrorEventCoercer {\n constructor(){}\n match(err) {\n return isErrorEvent(err) && void 0 != err.error;\n }\n coerce(err, ctx) {\n const exceptionLike = ctx.apply(err.error);\n if (!exceptionLike) return {\n type: 'ErrorEvent',\n value: err.message,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n return exceptionLike;\n }\n}\nexport { ErrorEventCoercer };\n","const ERROR_TYPES_PATTERN = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\nclass StringCoercer {\n match(input) {\n return 'string' == typeof input;\n }\n coerce(input, ctx) {\n const [type, value] = this.getInfos(input);\n return {\n type: type ?? 'Error',\n value: value ?? input,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n getInfos(candidate) {\n let type = 'Error';\n let value = candidate;\n const groups = candidate.match(ERROR_TYPES_PATTERN);\n if (groups) {\n type = groups[1];\n value = groups[2];\n }\n return [\n type,\n value\n ];\n }\n}\nexport { StringCoercer };\n","const severityLevels = [\n 'fatal',\n 'error',\n 'warning',\n 'log',\n 'info',\n 'debug'\n];\nexport { severityLevels };\n","function truncate(str, max = 0) {\n if ('string' != typeof str || 0 === max) return str;\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\nfunction extractExceptionKeysForMessage(err, maxLength = 40) {\n const keys = Object.keys(err);\n keys.sort();\n if (!keys.length) return '[object has no keys]';\n for(let i = keys.length; i > 0; i--){\n const serialized = keys.slice(0, i).join(', ');\n if (!(serialized.length > maxLength)) {\n if (i === keys.length) return serialized;\n return serialized.length <= maxLength ? serialized : `${serialized.slice(0, maxLength)}...`;\n }\n }\n return '';\n}\nexport { extractExceptionKeysForMessage, truncate };\n","import { isEmptyString, isError, isEvent, isString } from \"../../utils/index.mjs\";\nimport { severityLevels } from \"../types.mjs\";\nimport { extractExceptionKeysForMessage } from \"./utils.mjs\";\nclass ObjectCoercer {\n match(candidate) {\n return 'object' == typeof candidate && null !== candidate;\n }\n coerce(candidate, ctx) {\n const errorProperty = this.getErrorPropertyFromObject(candidate);\n if (errorProperty) return ctx.apply(errorProperty);\n return {\n type: this.getType(candidate),\n value: this.getValue(candidate),\n stack: ctx.syntheticException?.stack,\n level: this.isSeverityLevel(candidate.level) ? candidate.level : 'error',\n synthetic: true\n };\n }\n getType(err) {\n return isEvent(err) ? err.constructor.name : 'Error';\n }\n getValue(err) {\n if ('name' in err && 'string' == typeof err.name) {\n let message = `'${err.name}' captured as exception`;\n if ('message' in err && 'string' == typeof err.message) message += ` with message: '${err.message}'`;\n return message;\n }\n if ('message' in err && 'string' == typeof err.message) return err.message;\n const className = this.getObjectClassName(err);\n const keys = extractExceptionKeysForMessage(err);\n return `${className && 'Object' !== className ? `'${className}'` : 'Object'} captured as exception with keys: ${keys}`;\n }\n isSeverityLevel(x) {\n return isString(x) && !isEmptyString(x) && severityLevels.indexOf(x) >= 0;\n }\n getErrorPropertyFromObject(obj) {\n for(const prop in obj)if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (isError(value)) return value;\n }\n }\n getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : void 0;\n } catch (e) {\n return;\n }\n }\n}\nexport { ObjectCoercer };\n","import { isEvent } from \"../../utils/index.mjs\";\nimport { extractExceptionKeysForMessage } from \"./utils.mjs\";\nclass EventCoercer {\n match(err) {\n return isEvent(err);\n }\n coerce(evt, ctx) {\n const constructorName = evt.constructor.name;\n return {\n type: constructorName,\n value: `${constructorName} captured as exception with keys: ${extractExceptionKeysForMessage(evt)}`,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n}\nexport { EventCoercer };\n","import { isPrimitive } from \"../../utils/index.mjs\";\nclass PrimitiveCoercer {\n match(candidate) {\n return isPrimitive(candidate);\n }\n coerce(value, ctx) {\n return {\n type: 'Error',\n value: `Primitive value captured as exception: ${String(value)}`,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n}\nexport { PrimitiveCoercer };\n","import { isBuiltin, isPrimitive } from \"../../utils/index.mjs\";\nclass PromiseRejectionEventCoercer {\n match(err) {\n return isBuiltin(err, 'PromiseRejectionEvent');\n }\n coerce(err, ctx) {\n const reason = this.getUnhandledRejectionReason(err);\n if (isPrimitive(reason)) return {\n type: 'UnhandledRejection',\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n return ctx.apply(reason);\n }\n getUnhandledRejectionReason(error) {\n if (isPrimitive(error)) return error;\n try {\n if ('reason' in error) return error.reason;\n if ('detail' in error && 'reason' in error.detail) return error.detail.reason;\n } catch {}\n return error;\n }\n}\nexport { PromiseRejectionEventCoercer };\n","import type { PostHog } from '../posthog-core'\nimport { SessionIdManager } from '../sessionid'\nimport {\n DeadClicksAutoCaptureConfig,\n ExternalIntegrationKind,\n Properties,\n RemoteConfig,\n SiteAppLoader,\n SessionStartReason,\n} from '../types'\n// only importing types here, so won't affect the bundle\n// eslint-disable-next-line posthog-js/no-external-replay-imports\nimport type { SessionRecordingStatus, TriggerType } from '../extensions/replay/external/triggerMatching'\nimport { eventWithTime } from '../extensions/replay/types/rrweb-types'\nimport { ErrorTracking } from '@posthog/core'\n\n/*\n * Global helpers to protect access to browser globals in a way that is safer for different targets\n * like DOM, SSR, Web workers etc.\n *\n * NOTE: Typically we want the \"window\" but globalThis works for both the typical browser context as\n * well as other contexts such as the web worker context. Window is still exported for any bits that explicitly require it.\n * If in doubt - export the global you need from this file and use that as an optional value. This way the code path is forced\n * to handle the case where the global is not available.\n */\n\n// eslint-disable-next-line no-restricted-globals\nconst win: (Window & typeof globalThis) | undefined = typeof window !== 'undefined' ? window : undefined\n\nexport type AssignableWindow = Window &\n typeof globalThis & {\n /*\n * Main PostHog instance\n */\n posthog: any\n\n /*\n * This is our contract between (potentially) lazily loaded extensions and the SDK\n */\n __PosthogExtensions__?: PostHogExtensions\n\n /**\n * When loading remote config, we assign it to this global configuration\n * for ease of sharing it with the rest of the SDK\n */\n _POSTHOG_REMOTE_CONFIG?: Record<\n string,\n {\n config: RemoteConfig\n siteApps: SiteAppLoader[]\n }\n >\n\n /**\n * If this is set on the window, our logger will log to the console\n * for ease of debugging. Used for testing purposes only.\n *\n * @see {Config.DEBUG} from config.ts\n */\n POSTHOG_DEBUG: any\n\n // Exposed by the browser\n doNotTrack: any\n\n // See entrypoints/customizations.full.ts\n posthogCustomizations: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/exception-autocapture.ts\n *\n * @deprecated use `__PosthogExtensions__.errorWrappingFunctions` instead\n */\n posthogErrorWrappingFunctions: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/posthog-recorder.ts\n *\n * @deprecated use `__PosthogExtensions__.rrweb` instead\n */\n rrweb: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/posthog-recorder.ts\n *\n * @deprecated use `__PosthogExtensions__.rrwebConsoleRecord` instead\n */\n rrwebConsoleRecord: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/posthog-recorder.ts\n *\n * @deprecated use `__PosthogExtensions__.getRecordNetworkPlugin` instead\n */\n getRecordNetworkPlugin: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/web-vitals.ts\n *\n * @deprecated use `__PosthogExtensions__.postHogWebVitalsCallbacks` instead\n */\n postHogWebVitalsCallbacks: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/tracing-headers.ts\n *\n * @deprecated use `__PosthogExtensions__.postHogTracingHeadersPatchFns` instead\n */\n postHogTracingHeadersPatchFns: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/surveys.ts\n *\n * @deprecated use `__PosthogExtensions__.generateSurveys` instead\n */\n extendPostHogWithSurveys: any\n\n /*\n * These are used to handle our toolbar state.\n * @see {Toolbar} from extensions/toolbar.ts\n */\n ph_load_toolbar: any\n ph_load_editor: any\n ph_toolbar_state: any\n } & Record<`__$$ph_site_app_${string}`, any>\n\n/**\n * This is our contract between (potentially) lazily loaded extensions and the SDK\n * changes to this interface can be breaking changes for users of the SDK\n */\n\nexport type ExternalExtensionKind = 'intercom-integration' | 'crisp-chat-integration'\n\nexport type PostHogExtensionKind =\n | 'toolbar'\n | 'exception-autocapture'\n | 'web-vitals'\n | 'recorder'\n | 'lazy-recorder'\n | 'tracing-headers'\n | 'surveys'\n | 'dead-clicks-autocapture'\n | 'remote-config'\n | ExternalExtensionKind\n\nexport interface LazyLoadedSessionRecordingInterface {\n start: (startReason?: SessionStartReason) => void\n stop: () => void\n sessionId: string\n status: SessionRecordingStatus\n onRRwebEmit: (rawEvent: eventWithTime) => void\n log: (message: string, level: 'log' | 'warn' | 'error') => void\n sdkDebugProperties: Properties\n overrideLinkedFlag: () => void\n overrideSampling: () => void\n overrideTrigger: (triggerType: TriggerType) => void\n isStarted: boolean\n tryAddCustomEvent(tag: string, payload: any): boolean\n}\n\nexport interface LazyLoadedDeadClicksAutocaptureInterface {\n start: (observerTarget: Node) => void\n stop: () => void\n}\n\ninterface PostHogExtensions {\n loadExternalDependency?: (\n posthog: PostHog,\n kind: PostHogExtensionKind,\n callback: (error?: string | Event, event?: Event) => void\n ) => void\n\n loadSiteApp?: (posthog: PostHog, appUrl: string, callback: (error?: string | Event, event?: Event) => void) => void\n\n errorWrappingFunctions?: {\n wrapOnError: (captureFn: (props: ErrorTracking.ErrorProperties) => void) => () => void\n wrapUnhandledRejection: (captureFn: (props: ErrorTracking.ErrorProperties) => void) => () => void\n wrapConsoleError: (captureFn: (props: ErrorTracking.ErrorProperties) => void) => () => void\n }\n rrweb?: { record: any; version: string }\n rrwebPlugins?: { getRecordConsolePlugin: any; getRecordNetworkPlugin?: any }\n generateSurveys?: (posthog: PostHog, isSurveysEnabled: boolean) => any | undefined\n postHogWebVitalsCallbacks?: {\n onLCP: (metric: any) => void\n onCLS: (metric: any) => void\n onFCP: (metric: any) => void\n onINP: (metric: any) => void\n }\n tracingHeadersPatchFns?: {\n _patchFetch: (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager) => () => void\n _patchXHR: (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager) => () => void\n }\n initDeadClicksAutocapture?: (\n ph: PostHog,\n config: DeadClicksAutoCaptureConfig\n ) => LazyLoadedDeadClicksAutocaptureInterface\n integrations?: {\n [K in ExternalIntegrationKind]?: { start: (posthog: PostHog) => void; stop: () => void }\n }\n initSessionRecording?: (ph: PostHog) => LazyLoadedSessionRecordingInterface\n}\n\nconst global: typeof globalThis | undefined = typeof globalThis !== 'undefined' ? globalThis : win\n\nexport const ArrayProto = Array.prototype\nexport const nativeForEach = ArrayProto.forEach\nexport const nativeIndexOf = ArrayProto.indexOf\n\nexport const navigator = global?.navigator\nexport const document = global?.document\nexport const location = global?.location\nexport const fetch = global?.fetch\nexport const XMLHttpRequest =\n global?.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest() ? global.XMLHttpRequest : undefined\nexport const AbortController = global?.AbortController\nexport const userAgent = navigator?.userAgent\nexport const assignableWindow: AssignableWindow = win ?? ({} as any)\n\nexport { win as window }\n","import { window } from './globals'\n\n// When angular patches functions they pass the above `isNativeFunction` check (at least the MutationObserver)\nexport const isAngularZonePresent = (): boolean => {\n return !!(window as any).Zone\n}\n\nexport const isDocument = (x: unknown): x is Document => {\n // eslint-disable-next-line posthog-js/no-direct-document-check\n return x instanceof Document\n}\n","import Config from '../config'\nimport { isUndefined } from '@posthog/core'\nimport { assignableWindow, window } from './globals'\nimport type { Logger } from '@posthog/core'\n\ntype PosthogJsLogger = Omit<Logger, 'createLogger'> & {\n _log: (level: 'log' | 'warn' | 'error', ...args: any[]) => void\n uninitializedWarning: (methodName: string) => void\n createLogger: (prefix: string) => PosthogJsLogger\n}\n\nconst _createLogger = (prefix: string): PosthogJsLogger => {\n const logger: PosthogJsLogger = {\n _log: (level: 'log' | 'warn' | 'error', ...args: any[]) => {\n if (\n window &&\n (Config.DEBUG || assignableWindow.POSTHOG_DEBUG) &&\n !isUndefined(window.console) &&\n window.console\n ) {\n const consoleLog =\n '__rrweb_original__' in window.console[level]\n ? (window.console[level] as any)['__rrweb_original__']\n : window.console[level]\n\n // eslint-disable-next-line no-console\n consoleLog(prefix, ...args)\n }\n },\n\n info: (...args: any[]) => {\n logger._log('log', ...args)\n },\n\n warn: (...args: any[]) => {\n logger._log('warn', ...args)\n },\n\n error: (...args: any[]) => {\n logger._log('error', ...args)\n },\n\n critical: (...args: any[]) => {\n // Critical errors are always logged to the console\n // eslint-disable-next-line no-console\n console.error(prefix, ...args)\n },\n\n uninitializedWarning: (methodName: string) => {\n logger.error(`You must initialize PostHog before calling ${methodName}`)\n },\n\n createLogger: (additionalPrefix: string) => _createLogger(`${prefix} ${additionalPrefix}`),\n }\n return logger\n}\n\nexport const logger = _createLogger('[PostHog.js]')\n\nexport const createLogger = logger.createLogger\n","import { Breaker, Properties } from '../types'\nimport { nativeForEach, nativeIndexOf } from './globals'\nimport { logger } from './logger'\nimport { isFormData, isNull, isNullish, isNumber, isString, isUndefined, hasOwnProperty, isArray } from '@posthog/core'\n\nconst breaker: Breaker = {}\n\nexport function eachArray<E = any>(\n obj: E[] | null | undefined,\n iterator: (value: E, key: number) => void | Breaker,\n thisArg?: any\n): void {\n if (isArray(obj)) {\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, thisArg)\n } else if ('length' in obj && obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(thisArg, obj[i], i) === breaker) {\n return\n }\n }\n }\n }\n}\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} thisArg\n */\nexport function each(obj: any, iterator: (value: any, key: any) => void | Breaker, thisArg?: any): void {\n if (isNullish(obj)) {\n return\n }\n if (isArray(obj)) {\n return eachArray(obj, iterator, thisArg)\n }\n if (isFormData(obj)) {\n for (const pair of obj.entries()) {\n if (iterator.call(thisArg, pair[1], pair[0]) === breaker) {\n return\n }\n }\n return\n }\n for (const key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n if (iterator.call(thisArg, obj[key], key) === breaker) {\n return\n }\n }\n }\n}\n\nexport const extend = function (obj: Record<string, any>, ...args: Record<string, any>[]): Record<string, any> {\n eachArray(args, function (source) {\n for (const prop in source) {\n if (source[prop] !== void 0) {\n obj[prop] = source[prop]\n }\n }\n })\n return obj\n}\n\nexport const extendArray = function <T>(obj: T[], ...args: T[][]): T[] {\n eachArray(args, function (source) {\n eachArray(source, function (item) {\n obj.push(item)\n })\n })\n return obj\n}\n\nexport const include = function (\n obj: null | string | Array<any> | Record<string, any>,\n target: any\n): boolean | Breaker {\n let found = false\n if (isNull(obj)) {\n return found\n }\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n return obj.indexOf(target) != -1\n }\n each(obj, function (value) {\n if (found || (found = value === target)) {\n return breaker\n }\n return\n })\n return found\n}\n\n/**\n * Object.entries() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n */\nexport function entries<T = any>(obj: Record<string, T>): [string, T][] {\n const ownProps = Object.keys(obj)\n let i = ownProps.length\n const resArray = new Array(i) // preallocate the Array\n\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]]\n }\n return resArray\n}\n\nexport const trySafe = function <T>(fn: () => T): T | undefined {\n try {\n return fn()\n } catch {\n return undefined\n }\n}\n\nexport const safewrap = function <F extends (...args: any[]) => any = (...args: any[]) => any>(f: F): F {\n return function (...args) {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return f.apply(this, args)\n } catch (e) {\n logger.critical(\n 'Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.'\n )\n logger.critical(e)\n }\n } as F\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const safewrapClass = function (klass: Function, functions: string[]): void {\n for (let i = 0; i < functions.length; i++) {\n klass.prototype[functions[i]] = safewrap(klass.prototype[functions[i]])\n }\n}\n\nexport const stripEmptyProperties = function (p: Properties): Properties {\n const ret: Properties = {}\n each(p, function (v, k) {\n if ((isString(v) && v.length > 0) || isNumber(v)) {\n ret[k] = v\n }\n })\n return ret\n}\n\n/**\n * Deep copies an object.\n * It handles cycles by replacing all references to them with `undefined`\n * Also supports customizing native values\n *\n * @param value\n * @param customizer\n * @returns {{}|undefined|*}\n */\nfunction deepCircularCopy<T extends Record<string, any> = Record<string, any>>(\n value: T,\n customizer?: <K extends keyof T = keyof T>(value: T[K], key?: K) => T[K]\n): T | undefined {\n const COPY_IN_PROGRESS_SET = new Set()\n\n function internalDeepCircularCopy(value: T, key?: string): T | undefined {\n if (value !== Object(value)) return customizer ? customizer(value as any, key) : value // primitive value\n\n if (COPY_IN_PROGRESS_SET.has(value)) return undefined\n COPY_IN_PROGRESS_SET.add(value)\n let result: T\n\n if (isArray(value)) {\n result = [] as any as T\n eachArray(value, (it) => {\n result.push(internalDeepCircularCopy(it))\n })\n } else {\n result = {} as T\n each(value, (val, key) => {\n if (!COPY_IN_PROGRESS_SET.has(val)) {\n ;(result as any)[key] = internalDeepCircularCopy(val, key)\n }\n })\n }\n return result\n }\n return internalDeepCircularCopy(value)\n}\n\nexport function _copyAndTruncateStrings<T extends Record<string, any> = Record<string, any>>(\n object: T,\n maxStringLength: number | null\n): T {\n return deepCircularCopy(object, (value: any) => {\n if (isString(value) && !isNull(maxStringLength)) {\n return (value as string).slice(0, maxStringLength)\n }\n return value\n }) as T\n}\n\n// NOTE: Update PostHogConfig docs if you change this list\n// We will not try to catch all bullets here, but we should make an effort to catch the most common ones\n// You should be highly against adding more to this list, because ultimately customers can configure\n// their `cross_subdomain_cookie` setting to anything they want.\nconst EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE = ['herokuapp.com', 'vercel.app', 'netlify.app']\nexport function isCrossDomainCookie(documentLocation: Location | undefined) {\n const hostname = documentLocation?.hostname\n\n if (!isString(hostname)) {\n return false\n }\n // split and slice isn't a great way to match arbitrary domains,\n // but it's good enough for ensuring we only match herokuapp.com when it is the TLD\n // for the hostname\n const lastTwoParts = hostname.split('.').slice(-2).join('.')\n\n for (const excluded of EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE) {\n if (lastTwoParts === excluded) {\n return false\n }\n }\n\n return true\n}\n\nexport function find<T>(value: T[], predicate: (value: T) => boolean): T | undefined {\n for (let i = 0; i < value.length; i++) {\n if (predicate(value[i])) {\n return value[i]\n }\n }\n return undefined\n}\n\n// Use this instead of element.addEventListener to avoid eslint errors\n// this properly implements the default options for passive event listeners\nexport function addEventListener(\n element: Window | Document | Element | undefined,\n event: string,\n callback: EventListener,\n options?: AddEventListenerOptions\n): void {\n const { capture = false, passive = true } = options ?? {}\n\n // This is the only place where we are allowed to call this function\n // because the whole idea is that we should be calling this instead of the built-in one\n // eslint-disable-next-line posthog-js/no-add-event-listener\n element?.addEventListener(event, callback, { capture, passive })\n}\n\n/**\n * Helper to migrate deprecated config fields to new field names with appropriate warnings\n * @param config - The config object to check\n * @param newField - The new field name to use\n * @param oldField - The deprecated field name to check for\n * @param defaultValue - The default value if neither field is set\n * @param loggerInstance - Optional logger instance for deprecation warnings\n * @returns The value to use (new field takes precedence over old field)\n */\nexport function migrateConfigField<T>(\n config: Record<string, any>,\n newField: string,\n oldField: string,\n defaultValue: T,\n loggerInstance?: { warn: (message: string) => void }\n): T {\n const hasNewField = newField in config && !isUndefined(config[newField])\n const hasOldField = oldField in config && !isUndefined(config[oldField])\n\n if (hasNewField) {\n return config[newField]\n }\n\n if (hasOldField) {\n if (loggerInstance) {\n loggerInstance.warn(\n `Config field '${oldField}' is deprecated. Please use '${newField}' instead. ` +\n `The old field will be removed in a future major version.`\n )\n }\n return config[oldField]\n }\n\n return defaultValue\n}\n","import { each } from './'\n\nimport { isArray, isFile, isUndefined } from '@posthog/core'\nimport { logger } from './logger'\nimport { document } from './globals'\n\nconst localDomains = ['localhost', '127.0.0.1']\n\n/**\n * IE11 doesn't support `new URL`\n * so we can create an anchor element and use that to parse the URL\n * there's a lot of overlap between HTMLHyperlinkElementUtils and URL\n * meaning useful properties like `pathname` are available on both\n */\nexport const convertToURL = (url: string): HTMLAnchorElement | null => {\n const location = document?.createElement('a')\n if (isUndefined(location)) {\n return null\n }\n\n location.href = url\n return location\n}\n\nexport const formDataToQuery = function (formdata: Record<string, any> | FormData, arg_separator = '&'): string {\n let use_val: string\n let use_key: string\n const tph_arr: string[] = []\n\n each(formdata, function (val: File | string | undefined, key: string | undefined) {\n // the key might be literally the string undefined for e.g. if {undefined: 'something'}\n if (isUndefined(val) || isUndefined(key) || key === 'undefined') {\n return\n }\n\n use_val = encodeURIComponent(isFile(val) ? val.name : val.toString())\n use_key = encodeURIComponent(key)\n tph_arr[tph_arr.length] = use_key + '=' + use_val\n })\n\n return tph_arr.join(arg_separator)\n}\n\n// NOTE: Once we get rid of IE11/op_mini we can start using URLSearchParams\nexport const getQueryParam = function (url: string, param: string): string {\n const withoutHash: string = url.split('#')[0] || ''\n\n // Split only on the first ? to sort problem out for those with multiple ?s\n // and then remove them\n const queryParams: string = withoutHash.split(/\\?(.*)/)[1] || ''\n const cleanedQueryParams = queryParams.replace(/^\\?+/g, '')\n\n const queryParts = cleanedQueryParams.split('&')\n let keyValuePair\n\n for (let i = 0; i < queryParts.length; i++) {\n const parts = queryParts[i].split('=')\n if (parts[0] === param) {\n keyValuePair = parts\n break\n }\n }\n\n if (!isArray(keyValuePair) || keyValuePair.length < 2) {\n return ''\n } else {\n let result = keyValuePair[1]\n try {\n result = decodeURIComponent(result)\n } catch {\n logger.error('Skipping decoding for malformed query param: ' + result)\n }\n return result.replace(/\\+/g, ' ')\n }\n}\n\n// replace any query params in the url with the provided mask value. Tries to keep the URL as instant as possible,\n// including preserving malformed text in most cases\nexport const maskQueryParams = function <T extends string | undefined>(\n url: T,\n maskedParams: string[] | undefined,\n mask: string\n): T extends string ? string : undefined {\n if (!url || !maskedParams || !maskedParams.length) {\n return url as any\n }\n\n const splitHash = url.split('#')\n const withoutHash: string = splitHash[0] || ''\n const hash = splitHash[1]\n\n const splitQuery: string[] = withoutHash.split('?')\n const queryString: string = splitQuery[1]\n const urlWithoutQueryAndHash: string = splitQuery[0]\n const queryParts = (queryString || '').split('&')\n\n // use an array of strings rather than an object to preserve ordering and duplicates\n const paramStrings: string[] = []\n\n for (let i = 0; i < queryParts.length; i++) {\n const keyValuePair = queryParts[i].split('=')\n if (!isArray(keyValuePair)) {\n continue\n } else if (maskedParams.includes(keyValuePair[0])) {\n paramStrings.push(keyValuePair[0] + '=' + mask)\n } else {\n paramStrings.push(queryParts[i])\n }\n }\n\n let result = urlWithoutQueryAndHash\n if (queryString != null) {\n result += '?' + paramStrings.join('&')\n }\n if (hash != null) {\n result += '#' + hash\n }\n\n return result as any\n}\n\nexport const _getHashParam = function (hash: string, param: string): string | null {\n const matches = hash.match(new RegExp(param + '=([^&]*)'))\n return matches ? matches[1] : null\n}\n\nexport const isLocalhost = (): boolean => {\n return localDomains.includes(location.hostname)\n}\n","// import { patch } from 'rrweb/typings/utils'\n// copied from https://github.com/rrweb-io/rrweb/blob/8aea5b00a4dfe5a6f59bd2ae72bb624f45e51e81/packages/rrweb/src/utils.ts#L129\n// which was copied from https://github.com/getsentry/sentry-javascript/blob/b2109071975af8bf0316d3b5b38f519bdaf5dc15/packages/utils/src/object.ts\nimport { isFunction } from '@posthog/core'\n\nexport function patch(\n source: { [key: string]: any },\n name: string,\n replacement: (...args: unknown[]) => unknown\n): () => void {\n try {\n if (!(name in source)) {\n return () => {\n //\n }\n }\n\n const original = source[name] as () => unknown\n const wrapped = replacement(original)\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (isFunction(wrapped)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n wrapped.prototype = wrapped.prototype || {}\n Object.defineProperties(wrapped, {\n __posthog_wrapped__: {\n enumerable: false,\n value: true,\n },\n })\n }\n\n source[name] = wrapped\n\n return () => {\n source[name] = original\n }\n } catch {\n return () => {\n //\n }\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n}\n","import { NetworkRecordOptions } from '../../../types'\n\nfunction hostnameFromURL(url: string | URL | RequestInfo): string | null {\n try {\n if (typeof url === 'string') {\n return new URL(url).hostname\n }\n if ('url' in url) {\n return new URL(url.url).hostname\n }\n return url.hostname\n } catch {\n return null\n }\n}\n\nexport function isHostOnDenyList(url: string | URL | Request, options: NetworkRecordOptions) {\n const hostname = hostnameFromURL(url)\n const defaultNotDenied = { hostname, isHostDenied: false }\n\n if (!options.payloadHostDenyList?.length || !hostname?.trim().length) {\n return defaultNotDenied\n }\n\n for (const deny of options.payloadHostDenyList) {\n if (hostname.endsWith(deny)) {\n return { hostname, isHostDenied: true }\n }\n }\n\n return defaultNotDenied\n}\n","import { TOOLBAR_CONTAINER_CLASS, TOOLBAR_ID } from '../constants'\n\nexport function isElementInToolbar(el: EventTarget | null): boolean {\n if (el instanceof Element) {\n // closest isn't available in IE11, but we'll polyfill when bundling\n return el.id === TOOLBAR_ID || !!el.closest?.('.' + TOOLBAR_CONTAINER_CLASS)\n }\n return false\n}\n\n/*\n * Check whether an element has nodeType Node.ELEMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isElementNode(el: Node | Element | undefined | null): el is Element {\n return !!el && el.nodeType === 1 // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nexport function isTag(el: Element | undefined | null, tag: string): el is HTMLElement {\n return !!el && !!el.tagName && el.tagName.toLowerCase() === tag.toLowerCase()\n}\n\n/*\n * Check whether an element has nodeType Node.TEXT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isTextNode(el: Element | undefined | null): el is HTMLElement {\n return !!el && el.nodeType === 3 // Node.TEXT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element has nodeType Node.DOCUMENT_FRAGMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isDocumentFragment(el: Element | ParentNode | undefined | null): el is DocumentFragment {\n return !!el && el.nodeType === 11 // Node.DOCUMENT_FRAGMENT_NODE - use integer constant for browser portability\n}\n","import { AutocaptureConfig, PostHogConfig, Properties } from './types'\nimport { each, entries } from './utils'\n\nimport { isNullish, isString, isUndefined, isArray, isBoolean } from '@posthog/core'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\nimport { isDocumentFragment, isElementNode, isTag, isTextNode } from './utils/element-utils'\nimport { includes, trim } from '@posthog/core'\n\nexport function splitClassString(s: string): string[] {\n return s ? trim(s).split(/\\s+/) : []\n}\n\nfunction checkForURLMatches(urlsList: (string | RegExp)[]): boolean {\n const url = window?.location.href\n return !!(url && urlsList && urlsList.some((regex) => url.match(regex)))\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n *\n * Because this is a string it can contain unexpected characters\n * So, this method safely splits the className and returns that array.\n */\nexport function getClassNames(el: Element): string[] {\n let className = ''\n switch (typeof el.className) {\n case 'string':\n className = el.className\n break\n // TODO: when is this ever used?\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n className =\n (el.className && 'baseVal' in el.className ? (el.className as any).baseVal : null) ||\n el.getAttribute('class') ||\n ''\n break\n default:\n className = ''\n }\n\n return splitClassString(className)\n}\n\nexport function makeSafeText(s: string | null | undefined): string | null {\n if (isNullish(s)) {\n return null\n }\n\n return (\n trim(s)\n // scrub potentially sensitive values\n .split(/(\\s+)/)\n .filter((s) => shouldCaptureValue(s))\n .join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255)\n )\n}\n\n/*\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @returns {string} the element's direct text content\n */\nexport function getSafeText(el: Element): string {\n let elText = ''\n\n if (shouldCaptureElement(el) && !isSensitiveElement(el) && el.childNodes && el.childNodes.length) {\n each(el.childNodes, function (child) {\n if (isTextNode(child) && child.textContent) {\n elText += makeSafeText(child.textContent) ?? ''\n }\n })\n }\n\n return trim(elText)\n}\n\nexport function getEventTarget(e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (isUndefined(e.target)) {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n}\n\nexport const autocaptureCompatibleElements = ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then only elements in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesElementAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.element_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((elementType) => el.tagName.toLowerCase() === elementType)) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\n/*\n if there is no selector list (i.e. it is undefined), then any elements matches\n if there is an empty list, then no elements match\n if there is a selector list, then check it against each element provided\n */\nfunction checkIfElementsMatchCSSSelector(elements: Element[], selectorList: string[] | undefined): boolean {\n if (isUndefined(selectorList)) {\n // everything is allowed, when there is no selector list\n return true\n }\n\n for (const el of elements) {\n if (selectorList.some((selector) => el.matches(selector))) {\n return true\n }\n }\n\n return false\n}\n\nexport function getParentElement(curEl: Element): Element | false {\n const parentNode = curEl.parentNode\n if (!parentNode || !isElementNode(parentNode)) return false\n return parentNode\n}\n\n// autocapture check will already filter for ph-no-capture,\n// but we include it here to protect against future changes accidentally removing that check\nconst DEFAULT_RAGE_CLICK_IGNORE_LIST = ['.ph-no-rageclick', '.ph-no-capture']\nexport function shouldCaptureRageclick(el: Element | null, _config: PostHogConfig['rageclick']) {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n let selectorIgnoreList: string[] | boolean\n if (isBoolean(_config)) {\n selectorIgnoreList = _config ? DEFAULT_RAGE_CLICK_IGNORE_LIST : false\n } else {\n selectorIgnoreList = _config?.css_selector_ignorelist ?? DEFAULT_RAGE_CLICK_IGNORE_LIST\n }\n\n if (selectorIgnoreList === false) {\n return false\n }\n\n const { targetElementList } = getElementAndParentsForElement(el, false)\n // we don't capture if we match the ignore list\n return !checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)\n}\n\nconst cannotCheckForAutocapture = (el: Element | null) => {\n return !el || isTag(el, 'html') || !isElementNode(el)\n}\n\nconst getElementAndParentsForElement = (el: Element, captureOnAnyElement: false | true | undefined) => {\n if (!window || cannotCheckForAutocapture(el)) {\n return { parentIsUsefulElement: false, targetElementList: [] }\n }\n\n let parentIsUsefulElement = false\n const targetElementList: Element[] = [el]\n let curEl: Element = el\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n // If element is a shadow root, we skip it\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n const parentNode = getParentElement(curEl)\n if (!parentNode) break\n if (captureOnAnyElement || autocaptureCompatibleElements.indexOf(parentNode.tagName.toLowerCase()) > -1) {\n parentIsUsefulElement = true\n } else {\n const compStyles = window.getComputedStyle(parentNode)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {\n parentIsUsefulElement = true\n }\n }\n\n targetElementList.push(parentNode)\n curEl = parentNode\n }\n return { parentIsUsefulElement, targetElementList }\n}\n\n/*\n * Check whether a DOM event should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} event - event to check\n * @param {Object} autocaptureConfig - autocapture config\n * @param {boolean} captureOnAnyElement - whether to capture on any element, clipboard autocapture doesn't restrict to \"clickable\" elements\n * @param {string[]} allowedEventTypes - event types to capture, normally just 'click', but some autocapture types react to different events, some elements have fixed events (e.g., form has \"submit\")\n * @returns {boolean} whether the event should be captured\n */\nexport function shouldCaptureDomEvent(\n el: Element,\n event: Event,\n autocaptureConfig: AutocaptureConfig | undefined = undefined,\n captureOnAnyElement?: boolean,\n allowedEventTypes?: string[]\n): boolean {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n if (autocaptureConfig?.url_allowlist) {\n // if the current URL is not in the allow list, don't capture\n if (!checkForURLMatches(autocaptureConfig.url_allowlist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.url_ignorelist) {\n // if the current URL is in the ignore list, don't capture\n if (checkForURLMatches(autocaptureConfig.url_ignorelist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.dom_event_allowlist) {\n const allowlist = autocaptureConfig.dom_event_allowlist\n if (allowlist && !allowlist.some((eventType) => event.type === eventType)) {\n return false\n }\n }\n\n const { parentIsUsefulElement, targetElementList } = getElementAndParentsForElement(el, captureOnAnyElement)\n\n if (!checkIfElementTreePassesElementAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n if (!checkIfElementsMatchCSSSelector(targetElementList, autocaptureConfig?.css_selector_allowlist)) {\n return false\n }\n\n const compStyles = window.getComputedStyle(el)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {\n return true\n }\n\n const tag = el.tagName.toLowerCase()\n switch (tag) {\n case 'html':\n return false\n case 'form':\n return (allowedEventTypes || ['submit']).indexOf(event.type) >= 0\n case 'input':\n case 'select':\n case 'textarea':\n return (allowedEventTypes || ['change', 'click']).indexOf(event.type) >= 0\n default:\n if (parentIsUsefulElement) return (allowedEventTypes || ['click']).indexOf(event.type) >= 0\n return (\n (allowedEventTypes || ['click']).indexOf(event.type) >= 0 &&\n (autocaptureCompatibleElements.indexOf(tag) > -1 || el.getAttribute('contenteditable') === 'true')\n )\n }\n}\n\n/*\n * Check whether a DOM element should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureElement(el: Element): boolean {\n for (let curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode as Element) {\n const classes = getClassNames(curEl)\n if (includes(classes, 'ph-sensitive') || includes(classes, 'ph-no-capture')) {\n return false\n }\n }\n\n if (includes(getClassNames(el), 'ph-include')) {\n return true\n }\n\n // don't include hidden or password fields\n const type = (el as HTMLInputElement).type || ''\n if (isString(type)) {\n // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch (type.toLowerCase()) {\n case 'hidden':\n return false\n case 'password':\n return false\n }\n }\n\n // filter out data from fields that look like sensitive fields\n const name = (el as HTMLInputElement).name || el.id || ''\n // See https://github.com/posthog/posthog-js/issues/165\n // Under specific circumstances a bug caused .replace to be called on a DOM element\n // instead of a string, removing the element from the page. Ensure this issue is mitigated.\n if (isString(name)) {\n // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n const sensitiveNameRegex =\n /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether a DOM element is 'sensitive' and we should only capture limited data\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function isSensitiveElement(el: Element): boolean {\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n const allowedInputTypes = ['button', 'checkbox', 'submit', 'reset']\n if (\n (isTag(el, 'input') && !allowedInputTypes.includes((el as HTMLInputElement).type)) ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return true\n }\n return false\n}\n\n// Define the core pattern for matching credit card numbers\nconst coreCCPattern = `(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredCCRegex = new RegExp(`^(?:${coreCCPattern})$`)\n// The Unanchored version is essentially the core pattern, usable as is for partial matches\nconst unanchoredCCRegex = new RegExp(coreCCPattern)\n\n// Define the core pattern for matching SSNs with optional dashes\nconst coreSSNPattern = `\\\\d{3}-?\\\\d{2}-?\\\\d{4}`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredSSNRegex = new RegExp(`^(${coreSSNPattern})$`)\n// The Unanchored version is essentially the core pattern itself, usable for partial matches\nconst unanchoredSSNRegex = new RegExp(`(${coreSSNPattern})`)\n\n/*\n * Check whether a string value should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @param {boolean} anchorRegexes - whether to anchor the regexes to the start and end of the string\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureValue(value: string, anchorRegexes = true): boolean {\n if (isNullish(value)) {\n return false\n }\n\n if (isString(value)) {\n value = trim(value)\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n const ccRegex = anchorRegexes ? anchoredCCRegex : unanchoredCCRegex\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false\n }\n\n // check to see if input value looks like a social security number\n const ssnRegex = anchorRegexes ? anchoredSSNRegex : unanchoredSSNRegex\n if (ssnRegex.test(value)) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether an attribute name is an Angular style attr (either _ngcontent or _nghost)\n * These update on each build and lead to noise in the element chain\n * More details on the attributes here: https://angular.io/guide/view-encapsulation\n * @param {string} attributeName - string value to check\n * @returns {boolean} whether the element is an angular tag\n */\nexport function isAngularStyleAttr(attributeName: string): boolean {\n if (isString(attributeName)) {\n return attributeName.substring(0, 10) === '_ngcontent' || attributeName.substring(0, 7) === '_nghost'\n }\n return false\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces,\n * along with the direct text content of the target element\n * @param {Element} target - element to check\n * @returns {string} text content of the target element and its child span tags\n */\nexport function getDirectAndNestedSpanText(target: Element): string {\n let text = getSafeText(target)\n text = `${text} ${getNestedSpanText(target)}`.trim()\n return shouldCaptureValue(text) ? text : ''\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces\n * @param {Element} target - element to check\n * @returns {string} text content of span tags\n */\nexport function getNestedSpanText(target: Element): string {\n let text = ''\n if (target && target.childNodes && target.childNodes.length) {\n each(target.childNodes, function (child) {\n if (child && child.tagName?.toLowerCase() === 'span') {\n try {\n const spanText = getSafeText(child)\n text = `${text} ${spanText}`.trim()\n\n if (child.childNodes && child.childNodes.length) {\n text = `${text} ${getNestedSpanText(child)}`.trim()\n }\n } catch (e) {\n logger.error('[AutoCapture]', e)\n }\n }\n })\n }\n return text\n}\n\n/*\nBack in the day storing events in Postgres we use Elements for autocapture events.\nNow we're using elements_chain. We used to do this parsing/processing during ingestion.\nThis code is just copied over from ingestion, but we should optimize it\nto create elements_chain string directly.\n*/\nexport function getElementsChainString(elements: Properties[]): string {\n return elementsToString(extractElements(elements))\n}\n\n// This interface is called 'Element' in plugin-scaffold https://github.com/PostHog/plugin-scaffold/blob/b07d3b879796ecc7e22deb71bf627694ba05386b/src/types.ts#L200\n// However 'Element' is a DOM Element when run in the browser, so we have to rename it\ninterface PHElement {\n text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\n\nfunction escapeQuotes(input: string): string {\n return input.replace(/\"|\\\\\"/g, '\\\\\"')\n}\n\nfunction elementsToString(elements: PHElement[]): string {\n const ret = elements.map((element) => {\n let el_string = ''\n if (element.tag_name) {\n el_string += element.tag_name\n }\n if (element.attr_class) {\n element.attr_class.sort()\n for (const single_class of element.attr_class) {\n el_string += `.${single_class.replace(/\"/g, '')}`\n }\n }\n const attributes: Record<string, any> = {\n ...(element.text ? { text: element.text } : {}),\n 'nth-child': element.nth_child ?? 0,\n 'nth-of-type': element.nth_of_type ?? 0,\n ...(element.href ? { href: element.href } : {}),\n ...(element.attr_id ? { attr_id: element.attr_id } : {}),\n ...element.attributes,\n }\n const sortedAttributes: Record<string, any> = {}\n entries(attributes)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(\n ([key, value]) => (sortedAttributes[escapeQuotes(key.toString())] = escapeQuotes(value.toString()))\n )\n el_string += ':'\n el_string += entries(sortedAttributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('')\n return el_string\n })\n return ret.join(';')\n}\n\nfunction extractElements(elements: Properties[]): PHElement[] {\n return elements.map((el) => {\n const response = {\n text: el['$el_text']?.slice(0, 400),\n tag_name: el['tag_name'],\n href: el['attr__href']?.slice(0, 2048),\n attr_class: extractAttrClass(el),\n attr_id: el['attr__id'],\n nth_child: el['nth_child'],\n nth_of_type: el['nth_of_type'],\n attributes: {} as { [id: string]: any },\n }\n\n entries(el)\n .filter(([key]) => key.indexOf('attr__') === 0)\n .forEach(([key, value]) => (response.attributes[key] = value))\n return response\n })\n}\n\nfunction extractAttrClass(el: Properties): PHElement['attr_class'] {\n const attr_class = el['attr__class']\n if (!attr_class) {\n return undefined\n } else if (isArray(attr_class)) {\n return attr_class\n } else {\n return splitClassString(attr_class)\n }\n}\n","import { CapturedNetworkRequest, NetworkRecordOptions, PostHogConfig } from '../../../types'\nimport { isFunction, isNullish, isString, isUndefined } from '@posthog/core'\nimport { convertToURL } from '../../../utils/request-utils'\nimport { logger } from '../../../utils/logger'\nimport { shouldCaptureValue } from '../../../autocapture-utils'\nimport { each } from '../../../utils'\n\nconst LOGGER_PREFIX = '[SessionRecording]'\n\nconst REDACTED = 'redacted'\n\nexport const defaultNetworkOptions: Required<NetworkRecordOptions> = {\n initiatorTypes: [\n 'audio',\n 'beacon',\n 'body',\n 'css',\n 'early-hint',\n 'embed',\n 'fetch',\n 'frame',\n 'iframe',\n 'icon',\n 'image',\n 'img',\n 'input',\n 'link',\n 'navigation',\n 'object',\n 'ping',\n 'script',\n 'track',\n 'video',\n 'xmlhttprequest',\n ],\n maskRequestFn: (data: CapturedNetworkRequest) => data,\n recordHeaders: false,\n recordBody: false,\n recordInitialRequests: false,\n recordPerformance: false,\n performanceEntryTypeToObserve: [\n // 'event', // This is too noisy as it covers all browser events\n 'first-input',\n // 'mark', // Mark is used too liberally. We would need to filter for specific marks\n // 'measure', // Measure is used too liberally. We would need to filter for specific measures\n 'navigation',\n 'paint',\n 'resource',\n ],\n payloadSizeLimitBytes: 1000000,\n payloadHostDenyList: [\n '.lr-ingest.io',\n '.ingest.sentry.io',\n '.clarity.ms',\n // NB no leading dot here\n 'analytics.google.com',\n 'bam.nr-data.net',\n ],\n}\n\nconst HEADER_DENY_LIST = [\n 'authorization',\n 'x-forwarded-for',\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'x-api-key',\n 'x-real-ip',\n 'remote-addr',\n 'forwarded',\n 'proxy-authorization',\n 'x-csrf-token',\n 'x-csrftoken',\n 'x-xsrf-token',\n]\n\nconst PAYLOAD_CONTENT_DENY_LIST = [\n 'password',\n 'secret',\n 'passwd',\n 'api_key',\n 'apikey',\n 'auth',\n 'credentials',\n 'mysql_pwd',\n 'privatekey',\n 'private_key',\n 'token',\n]\n\n// we always remove headers on the deny list because we never want to capture this sensitive data\nconst removeAuthorizationHeader = (data: CapturedNetworkRequest): CapturedNetworkRequest => {\n const headers = data.requestHeaders\n if (!isNullish(headers)) {\n each(Object.keys(headers ?? {}), (header) => {\n if (HEADER_DENY_LIST.includes(header.toLowerCase())) {\n headers[header] = REDACTED\n }\n })\n }\n return data\n}\n\nconst POSTHOG_PATHS_TO_IGNORE = ['/s/', '/e/', '/i/']\n// want to ignore posthog paths when capturing requests, or we can get trapped in a loop\n// because calls to PostHog would be reported using a call to PostHog which would be reported....\nconst ignorePostHogPaths = (\n data: CapturedNetworkRequest,\n apiHostConfig: PostHogConfig['api_host']\n): CapturedNetworkRequest | undefined => {\n const url = convertToURL(data.name)\n\n // we need to account for api host config as e.g. pathname could be /ingest/s/ and we want to ignore that\n let replaceValue = apiHostConfig.indexOf('http') === 0 ? convertToURL(apiHostConfig)?.pathname : apiHostConfig\n if (replaceValue === '/') {\n replaceValue = ''\n }\n const pathname = url?.pathname.replace(replaceValue || '', '')\n\n if (url && pathname && POSTHOG_PATHS_TO_IGNORE.some((path) => pathname.indexOf(path) === 0)) {\n return undefined\n }\n return data\n}\n\nfunction estimateBytes(payload: string): number {\n return new Blob([payload]).size\n}\n\nfunction enforcePayloadSizeLimit(\n payload: string | null | undefined,\n headers: Record<string, any> | undefined,\n limit: number,\n description: string\n): string | null | undefined {\n if (isNullish(payload)) {\n return payload\n }\n\n let requestContentLength: string | number = headers?.['content-length'] || estimateBytes(payload)\n if (isString(requestContentLength)) {\n requestContentLength = parseInt(requestContentLength)\n }\n\n if (requestContentLength > limit) {\n return LOGGER_PREFIX + ` ${description} body too large to record (${requestContentLength} bytes)`\n }\n\n return payload\n}\n\n// people can have arbitrarily large payloads on their site, but we don't want to ingest them\nconst limitPayloadSize = (\n options: NetworkRecordOptions\n): ((data: CapturedNetworkRequest | undefined) => CapturedNetworkRequest | undefined) => {\n // the smallest of 1MB or the specified limit if there is one\n const limit = Math.min(1000000, options.payloadSizeLimitBytes ?? 1000000)\n\n return (data) => {\n if (data?.requestBody) {\n data.requestBody = enforcePayloadSizeLimit(data.requestBody, data.requestHeaders, limit, 'Request')\n }\n\n if (data?.responseBody) {\n data.responseBody = enforcePayloadSizeLimit(data.responseBody, data.responseHeaders, limit, 'Response')\n }\n\n return data\n }\n}\n\nfunction scrubPayload(payload: string | null | undefined, label: 'Request' | 'Response'): string | null | undefined {\n if (isNullish(payload)) {\n return payload\n }\n let scrubbed = payload\n\n if (!shouldCaptureValue(scrubbed, false)) {\n scrubbed = LOGGER_PREFIX + ' ' + label + ' body ' + REDACTED\n }\n each(PAYLOAD_CONTENT_DENY_LIST, (text) => {\n if (scrubbed?.length && scrubbed?.indexOf(text) !== -1) {\n scrubbed = LOGGER_PREFIX + ' ' + label + ' body ' + REDACTED + ' as might contain: ' + text\n }\n })\n\n return scrubbed\n}\n\nfunction scrubPayloads(capturedRequest: CapturedNetworkRequest | undefined): CapturedNetworkRequest | undefined {\n if (isUndefined(capturedRequest)) {\n return undefined\n }\n\n capturedRequest.requestBody = scrubPayload(capturedRequest.requestBody, 'Request')\n capturedRequest.responseBody = scrubPayload(capturedRequest.responseBody, 'Response')\n\n return capturedRequest\n}\n\n/**\n * whether a maskRequestFn is provided or not,\n * we ensure that we remove the denied header from requests\n * we _never_ want to record that header by accident\n * if someone complains then we'll add an opt-in to let them override it\n */\nexport const buildNetworkRequestOptions = (\n instanceConfig: PostHogConfig,\n remoteNetworkOptions: Pick<\n NetworkRecordOptions,\n 'recordHeaders' | 'recordBody' | 'recordPerformance' | 'payloadHostDenyList'\n >\n): NetworkRecordOptions => {\n const config: NetworkRecordOptions = {\n payloadSizeLimitBytes: defaultNetworkOptions.payloadSizeLimitBytes,\n performanceEntryTypeToObserve: [...defaultNetworkOptions.performanceEntryTypeToObserve],\n payloadHostDenyList: [\n ...(remoteNetworkOptions.payloadHostDenyList || []),\n ...defaultNetworkOptions.payloadHostDenyList,\n ],\n }\n // client can always disable despite remote options\n const canRecordHeaders =\n instanceConfig.session_recording.recordHeaders === false ? false : remoteNetworkOptions.recordHeaders\n const canRecordBody =\n instanceConfig.session_recording.recordBody === false ? false : remoteNetworkOptions.recordBody\n const canRecordPerformance =\n instanceConfig.capture_performance === false ? false : remoteNetworkOptions.recordPerformance\n\n const payloadLimiter = limitPayloadSize(config)\n\n const enforcedCleaningFn: NetworkRecordOptions['maskRequestFn'] = (d: CapturedNetworkRequest) =>\n payloadLimiter(ignorePostHogPaths(removeAuthorizationHeader(d), instanceConfig.api_host))\n\n const hasDeprecatedMaskFunction = isFunction(instanceConfig.session_recording.maskNetworkRequestFn)\n\n if (hasDeprecatedMaskFunction && isFunction(instanceConfig.session_recording.maskCapturedNetworkRequestFn)) {\n logger.warn(\n 'Both `maskNetworkRequestFn` and `maskCapturedNetworkRequestFn` are defined. `maskNetworkRequestFn` will be ignored.'\n )\n }\n\n if (hasDeprecatedMaskFunction) {\n instanceConfig.session_recording.maskCapturedNetworkRequestFn = (data: CapturedNetworkRequest) => {\n const cleanedURL = instanceConfig.session_recording.maskNetworkRequestFn!({ url: data.name })\n return {\n ...data,\n name: cleanedURL?.url,\n } as CapturedNetworkRequest\n }\n }\n\n config.maskRequestFn = isFunction(instanceConfig.session_recording.maskCapturedNetworkRequestFn)\n ? (data) => {\n const cleanedRequest = enforcedCleaningFn(data)\n return cleanedRequest\n ? (instanceConfig.session_recording.maskCapturedNetworkRequestFn?.(cleanedRequest) ?? undefined)\n : undefined\n }\n : (data) => scrubPayloads(enforcedCleaningFn(data))\n\n return {\n ...defaultNetworkOptions,\n ...config,\n recordHeaders: canRecordHeaders,\n recordBody: canRecordBody,\n recordPerformance: canRecordPerformance,\n recordInitialRequests: canRecordPerformance,\n }\n}\n","/// <reference lib=\"dom\" />\n\n// rrweb/network@1 code starts\n// most of what is below here will be removed when rrweb release their code for this\n// see https://github.com/rrweb-io/rrweb/pull/1105\n\n// NB adopted from https://github.com/rrweb-io/rrweb/pull/1105 which looks like it will be accepted into rrweb\n// however, in the PR, it throws when the performance observer data is not available\n// and assumes it is running in a browser with the Request API (i.e. not IE11)\n// copying here so that we can use it before rrweb adopt it\n\nimport type { IWindow, listenerHandler, RecordPlugin } from '../types/rrweb-types'\nimport { CapturedNetworkRequest, Headers, InitiatorType, NetworkRecordOptions } from '../../../types'\nimport { isArray, isBoolean, isFormData, isNull, isNullish, isString, isUndefined, isObject } from '@posthog/core'\nimport { isDocument } from '../../../utils/type-utils'\nimport { createLogger } from '../../../utils/logger'\nimport { formDataToQuery } from '../../../utils/request-utils'\nimport { patch } from '../rrweb-plugins/patch'\nimport { isHostOnDenyList } from '../../../extensions/replay/external/denylist'\nimport { defaultNetworkOptions } from './config'\n\nconst logger = createLogger('[Recorder]')\n\nexport type NetworkData = {\n requests: CapturedNetworkRequest[]\n isInitial?: boolean\n}\n\ntype networkCallback = (data: NetworkData) => void\n\nconst isNavigationTiming = (entry: PerformanceEntry): entry is PerformanceNavigationTiming =>\n entry.entryType === 'navigation'\nconst isResourceTiming = (entry: PerformanceEntry): entry is PerformanceResourceTiming => entry.entryType === 'resource'\n\ntype ObservedPerformanceEntry = (PerformanceNavigationTiming | PerformanceResourceTiming) & {\n responseStatus?: number\n}\n\nexport function findLast<T>(array: Array<T>, predicate: (value: T) => boolean): T | undefined {\n const length = array.length\n for (let i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i]\n }\n }\n return undefined\n}\n\nfunction initPerformanceObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>) {\n // if we are only observing timings then we could have a single observer for all types, with buffer true,\n // but we are going to filter by initiatorType _if we are wrapping fetch and xhr as the wrapped functions\n // will deal with those.\n // so we have a block which captures requests from before fetch/xhr is wrapped\n // these are marked `isInitial` so playback can display them differently if needed\n // they will never have method/status/headers/body because they are pre-wrapping that provides that\n if (options.recordInitialRequests) {\n const initialPerformanceEntries = win.performance\n .getEntries()\n .filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) && options.initiatorTypes.includes(entry.initiatorType as InitiatorType))\n )\n cb({\n requests: initialPerformanceEntries.flatMap((entry) =>\n prepareRequest({ entry, method: undefined, status: undefined, networkRequest: {}, isInitial: true })\n ),\n isInitial: true,\n })\n }\n const observer = new win.PerformanceObserver((entries) => {\n // if recordBody or recordHeaders is true then we don't want to record fetch or xhr here\n // as the wrapped functions will do that. Otherwise, this filter becomes a noop\n // because we do want to record them here\n const wrappedInitiatorFilter = (entry: ObservedPerformanceEntry) =>\n options.recordBody || options.recordHeaders\n ? entry.initiatorType !== 'xmlhttprequest' && entry.initiatorType !== 'fetch'\n : true\n\n const performanceEntries = entries.getEntries().filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType as InitiatorType) &&\n // TODO if we are _only_ capturing timing we don't want to filter initiator here\n wrappedInitiatorFilter(entry))\n )\n\n cb({\n requests: performanceEntries.flatMap((entry) =>\n prepareRequest({ entry, method: undefined, status: undefined, networkRequest: {} })\n ),\n })\n })\n // compat checked earlier\n // eslint-disable-next-line compat/compat\n const entryTypes = PerformanceObserver.supportedEntryTypes.filter((x) =>\n options.performanceEntryTypeToObserve.includes(x)\n )\n // initial records are gathered above, so we don't need to observe and buffer each type separately\n observer.observe({ entryTypes })\n return () => {\n observer.disconnect()\n }\n}\n\nfunction shouldRecordHeaders(type: 'request' | 'response', recordHeaders: NetworkRecordOptions['recordHeaders']) {\n return !!recordHeaders && (isBoolean(recordHeaders) || recordHeaders[type])\n}\n\nexport function shouldRecordBody({\n type,\n recordBody,\n headers,\n url,\n}: {\n type: 'request' | 'response'\n headers: Headers\n url: string | URL | RequestInfo\n recordBody: NetworkRecordOptions['recordBody']\n}) {\n function matchesContentType(contentTypes: string[]) {\n const contentTypeHeader = Object.keys(headers).find((key) => key.toLowerCase() === 'content-type')\n const contentType = contentTypeHeader && headers[contentTypeHeader]\n return contentTypes.some((ct) => contentType?.includes(ct))\n }\n\n /**\n * particularly in canvas applications we see many requests to blob URLs\n * e.g. blob:https://video_url\n * these blob/object URLs are local to the browser, we can never capture that body\n * so we can just return false here\n */\n function isBlobURL(url: string | URL | RequestInfo) {\n try {\n if (typeof url === 'string') {\n return url.startsWith('blob:')\n }\n if (url instanceof URL) {\n return url.protocol === 'blob:'\n }\n if (url instanceof Request) {\n return isBlobURL(url.url)\n }\n return false\n } catch {\n return false\n }\n }\n if (!recordBody) return false\n if (isBlobURL(url)) return false\n if (isBoolean(recordBody)) return true\n if (isArray(recordBody)) return matchesContentType(recordBody)\n const recordBodyType = recordBody[type]\n if (isBoolean(recordBodyType)) return recordBodyType\n return matchesContentType(recordBodyType)\n}\n\nasync function getRequestPerformanceEntry(\n win: IWindow,\n initiatorType: string,\n url: string,\n start?: number,\n end?: number,\n attempt = 0\n): Promise<PerformanceResourceTiming | null> {\n if (attempt > 10) {\n logger.warn('Failed to get performance entry for request', { url, initiatorType })\n return null\n }\n const urlPerformanceEntries = win.performance.getEntriesByName(url) as PerformanceResourceTiming[]\n const performanceEntry = findLast(\n urlPerformanceEntries,\n (entry) =>\n isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (isUndefined(start) || entry.startTime >= start) &&\n (isUndefined(end) || entry.startTime <= end)\n )\n if (!performanceEntry) {\n await new Promise((resolve) => setTimeout(resolve, 50 * attempt))\n return getRequestPerformanceEntry(win, initiatorType, url, start, end, attempt + 1)\n }\n return performanceEntry\n}\n\n/**\n * According to MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/response\n * xhr response is typed as any but can be an ArrayBuffer, a Blob, a Document, a JavaScript object,\n * or a string, depending on the value of XMLHttpRequest.responseType, that contains the response entity body.\n *\n * XHR request body is Document | XMLHttpRequestBodyInit | null | undefined\n */\nfunction _tryReadXHRBody({\n body,\n options,\n url,\n}: {\n body: Document | XMLHttpRequestBodyInit | any | null | undefined\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (isNullish(body)) {\n return null\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n if (isString(body)) {\n return body\n }\n\n if (isDocument(body)) {\n return body.textContent\n }\n\n if (isFormData(body)) {\n return formDataToQuery(body)\n }\n\n if (isObject(body)) {\n try {\n return JSON.stringify(body)\n } catch {\n return '[SessionReplay] Failed to stringify response object'\n }\n }\n\n return '[SessionReplay] Cannot read body of type ' + toString.call(body)\n}\n\nfunction initXhrObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>): listenerHandler {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n\n const restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let start: number | undefined\n let end: number | undefined\n\n const requestHeaders: Headers = {}\n const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr)\n xhr.setRequestHeader = (header: string, value: string) => {\n requestHeaders[header] = value\n return originalSetRequestHeader(header, value)\n }\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n\n const originalSend = xhr.send.bind(xhr)\n xhr.send = (body) => {\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = _tryReadXHRBody({ body, options, url })\n }\n start = win.performance.now()\n return originalSend(body)\n }\n\n const readyStateListener = () => {\n if (xhr.readyState !== xhr.DONE) {\n return\n }\n\n // Clean up the listener immediately when done to prevent memory leaks\n xhr.removeEventListener('readystatechange', readyStateListener)\n\n end = win.performance.now()\n const responseHeaders: Headers = {}\n const rawHeaders = xhr.getAllResponseHeaders()\n const headers = rawHeaders.trim().split(/[\\r\\n]+/)\n headers.forEach((line) => {\n const parts = line.split(': ')\n const header = parts.shift()\n const value = parts.join(': ')\n if (header) {\n responseHeaders[header] = value\n }\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = _tryReadXHRBody({ body: xhr.response, options, url })\n }\n getRequestPerformanceEntry(win, 'xmlhttprequest', req.url, start, end)\n .then((entry) => {\n const requests = prepareRequest({\n entry,\n method: method,\n status: xhr?.status,\n networkRequest,\n start,\n end,\n url: url.toString(),\n initiatorType: 'xmlhttprequest',\n })\n cb({ requests })\n })\n .catch(() => {\n //\n })\n }\n\n // This is very tricky code, and making it passive won't bring many performance benefits,\n // so let's ignore the rule here.\n // eslint-disable-next-line posthog-js/no-add-event-listener\n xhr.addEventListener('readystatechange', readyStateListener)\n\n originalOpen.call(xhr, method, url.toString(), async, username, password)\n }\n }\n )\n return () => {\n restorePatch()\n }\n}\n\n/**\n * Check if this PerformanceEntry is either a PerformanceResourceTiming or a PerformanceNavigationTiming\n * NB PerformanceNavigationTiming extends PerformanceResourceTiming\n * Here we don't care which interface it implements as both expose `serverTimings`\n */\nconst exposesServerTiming = (event: PerformanceEntry | null): event is PerformanceResourceTiming =>\n !isNull(event) && (event.entryType === 'navigation' || event.entryType === 'resource')\n\nfunction prepareRequest({\n entry,\n method,\n status,\n networkRequest,\n isInitial,\n start,\n end,\n url,\n initiatorType,\n}: {\n entry: PerformanceResourceTiming | null\n method: string | undefined\n status: number | undefined\n networkRequest: Partial<CapturedNetworkRequest>\n isInitial?: boolean\n start?: number\n end?: number\n // if there is no performance observer entry, we still need to know the url\n url?: string\n // if there is no performance observer entry, we can provide the initiatorType\n initiatorType?: string\n}): CapturedNetworkRequest[] {\n start = entry ? entry.startTime : start\n end = entry ? entry.responseEnd : end\n\n // kudos to sentry javascript sdk for excellent background on why to use Date.now() here\n // https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L70\n // can't start observer if performance.now() is not available\n // eslint-disable-next-line compat/compat\n const timeOrigin = Math.floor(Date.now() - performance.now())\n // clickhouse can't ingest timestamps that are floats\n // (in this case representing fractions of a millisecond we don't care about anyway)\n // use timeOrigin if we really can't gather a start time\n const timestamp = Math.floor(timeOrigin + (start || 0))\n\n const entryJSON = entry ? entry.toJSON() : { name: url }\n\n const requests: CapturedNetworkRequest[] = [\n {\n ...entryJSON,\n startTime: isUndefined(start) ? undefined : Math.round(start),\n endTime: isUndefined(end) ? undefined : Math.round(end),\n timeOrigin,\n timestamp,\n method: method,\n initiatorType: initiatorType ? initiatorType : entry ? (entry.initiatorType as InitiatorType) : undefined,\n status,\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n isInitial,\n },\n ]\n\n if (exposesServerTiming(entry)) {\n for (const timing of entry.serverTiming || []) {\n requests.push({\n timeOrigin,\n timestamp,\n startTime: Math.round(entry.startTime),\n name: timing.name,\n duration: timing.duration,\n // the spec has a closed list of possible types\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType\n // but, we need to know this was a server timing so that we know to\n // match it to the appropriate navigation or resource timing\n // that matching will have to be on timestamp and $current_url\n entryType: 'serverTiming',\n })\n }\n }\n\n return requests\n}\n\nconst contentTypePrefixDenyList = ['video/', 'audio/']\n\nfunction _checkForCannotReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (r.headers.get('Transfer-Encoding') === 'chunked') {\n return 'Chunked Transfer-Encoding is not supported'\n }\n\n // `get` and `has` are case-insensitive\n // but return the header value with the casing that was supplied\n const contentType = r.headers.get('Content-Type')?.toLowerCase()\n const contentTypeIsDenied = contentTypePrefixDenyList.some((prefix) => contentType?.startsWith(prefix))\n if (contentType && contentTypeIsDenied) {\n return `Content-Type ${contentType} is not supported`\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n return null\n}\n\nfunction _tryReadBody(r: Request | Response): Promise<string> {\n // there are now already multiple places where we're using Promise...\n // eslint-disable-next-line compat/compat\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => resolve('[SessionReplay] Timeout while trying to read body'), 500)\n try {\n r.clone()\n .text()\n .then(\n (txt) => resolve(txt),\n (reason) => reject(reason)\n )\n .finally(() => clearTimeout(timeout))\n } catch {\n clearTimeout(timeout)\n resolve('[SessionReplay] Failed to read body')\n }\n })\n}\n\nasync function _tryReadRequestBody({\n r,\n options,\n url,\n}: {\n r: Request\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return Promise.resolve(hostname + ' is in deny list')\n }\n\n return _tryReadBody(r)\n}\n\nasync function _tryReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const cannotReadBodyReason: string | null = _checkForCannotReadResponseBody({ r, options, url })\n if (!isNull(cannotReadBodyReason)) {\n return Promise.resolve(cannotReadBodyReason)\n }\n\n return _tryReadBody(r)\n}\n\nfunction initFetchObserver(\n cb: networkCallback,\n win: IWindow,\n options: Required<NetworkRecordOptions>\n): listenerHandler {\n if (!options.initiatorTypes.includes('fetch')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const restorePatch = patch(win, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n let res: Response | undefined\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let start: number | undefined\n let end: number | undefined\n\n try {\n const requestHeaders: Headers = {}\n req.headers.forEach((value: string, header: string | number) => {\n requestHeaders[header] = value\n })\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = await _tryReadRequestBody({ r: req, options, url })\n }\n\n start = win.performance.now()\n res = await originalFetch(req)\n end = win.performance.now()\n\n const responseHeaders: Headers = {}\n res.headers.forEach((value: string, header: string | number) => {\n responseHeaders[header] = value\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = await _tryReadResponseBody({ r: res, options, url })\n }\n\n return res\n } finally {\n getRequestPerformanceEntry(win, 'fetch', req.url, start, end)\n .then((entry) => {\n const requests = prepareRequest({\n entry,\n method: req.method,\n status: res?.status,\n networkRequest,\n start,\n end,\n url: req.url,\n initiatorType: 'fetch',\n })\n cb({ requests })\n })\n .catch(() => {\n //\n })\n }\n }\n })\n return () => {\n restorePatch()\n }\n}\n\nlet initialisedHandler: listenerHandler | null = null\n\nfunction initNetworkObserver(\n callback: networkCallback,\n win: IWindow, // top window or in an iframe\n options: NetworkRecordOptions\n): listenerHandler {\n if (!('performance' in win)) {\n return () => {\n //\n }\n }\n\n if (initialisedHandler) {\n logger.warn('Network observer already initialised, doing nothing')\n return () => {\n // the first caller should already have this handler and will be responsible for teardown\n }\n }\n\n const networkOptions = (\n options ? Object.assign({}, defaultNetworkOptions, options) : defaultNetworkOptions\n ) as Required<NetworkRecordOptions>\n\n const cb: networkCallback = (data) => {\n const requests: CapturedNetworkRequest[] = []\n data.requests.forEach((request) => {\n const maskedRequest = networkOptions.maskRequestFn(request)\n if (maskedRequest) {\n requests.push(maskedRequest)\n }\n })\n\n if (requests.length > 0) {\n callback({ ...data, requests })\n }\n }\n const performanceObserver = initPerformanceObserver(cb, win, networkOptions)\n\n // only wrap fetch and xhr if headers or body are being recorded\n let xhrObserver: listenerHandler = () => {}\n let fetchObserver: listenerHandler = () => {}\n if (networkOptions.recordHeaders || networkOptions.recordBody) {\n xhrObserver = initXhrObserver(cb, win, networkOptions)\n fetchObserver = initFetchObserver(cb, win, networkOptions)\n }\n\n initialisedHandler = () => {\n performanceObserver()\n xhrObserver()\n fetchObserver()\n }\n return initialisedHandler\n}\n\n// use the plugin name so that when this functionality is adopted into rrweb\n// we can remove this plugin and use the core functionality with the same data\nexport const NETWORK_PLUGIN_NAME = 'rrweb/network@1'\n\n// TODO how should this be typed?\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const getRecordNetworkPlugin: (options?: NetworkRecordOptions) => RecordPlugin = (options) => {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n }\n}\n\n// rrweb/networ@1 ends\n","import { record as rrwebRecord } from '@rrweb/record'\nimport { getRecordConsolePlugin } from '@rrweb/rrweb-plugin-console-record'\nimport { getRecordNetworkPlugin } from '../extensions/replay/external/network-plugin'\nimport { assignableWindow } from '../utils/globals'\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.rrwebPlugins = { getRecordConsolePlugin, getRecordNetworkPlugin }\nassignableWindow.__PosthogExtensions__.rrweb = { record: rrwebRecord, version: 'v2' }\n\n// we used to put all of these items directly on window, and now we put it on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put them directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.rrweb = { record: rrwebRecord, version: 'v2' }\nassignableWindow.rrwebConsoleRecord = { getRecordConsolePlugin }\nassignableWindow.getRecordNetworkPlugin = getRecordNetworkPlugin\n\nexport default rrwebRecord\n","var n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function g(n){return n.children}function b(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?m(n):null}function k(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k(n)}}function w(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!x.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(x)}function x(){var n,u,t,o,r,e,c,s,a;for(i.sort(f);n=i.shift();)n.__d&&(u=i.length,o=void 0,e=(r=(t=n).__v).__e,s=[],a=[],(c=t.__P)&&((o=v({},r)).__v=r.__v+1,l.vnode&&l.vnode(o),L(c,o,r,t.__n,void 0!==c.ownerSVGElement,32&r.__u?[e]:null,s,null==e?m(r):e,!!(32&r.__u),a),o.__.__k[o.__i]=o,M(s,o,a),o.__e!=e&&k(o)),i.length>u&&i.sort(f));x.__r=0}function C(n,l,u,t,i,o,r,f,e,a,h){var v,p,y,d,_,g=t&&t.__k||s,b=l.length;for(u.__d=e,P(u,l,g),e=u.__d,v=0;v<b;v++)null!=(y=u.__k[v])&&\"boolean\"!=typeof y&&\"function\"!=typeof y&&(p=-1===y.__i?c:g[y.__i]||c,y.__i=v,L(n,y,p,i,o,r,f,e,a,h),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&z(p.ref,null,y),h.push(y.ref,y.__c||d,y)),null==_&&null!=d&&(_=d),65536&y.__u||p.__k===y.__k?e=S(y,e,n):\"function\"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=_}function P(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)null!=(i=n.__k[t]=null==(i=l[t])||\"boolean\"==typeof i||\"function\"==typeof i?null:\"string\"==typeof i||\"number\"==typeof i||\"bigint\"==typeof i||i.constructor==String?d(null,i,null,null,i):h(i)?d(g,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?d(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=H(i,u,r=t+a,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:a=f<r&&f==r-1?f-r:0,f!==t+a&&(i.__u|=65536))):(o=u[t])&&null==o.key&&o.__e&&(o.__e==n.__d&&(n.__d=m(o)),N(o,o,!1),u[t]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=m(o)),N(o,o))}function S(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=S(t[i],l,u));return l}return n.__e!=l&&(u.insertBefore(n.__e,l||null),l=n.__e),l&&l.nextSibling}function $(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(h(n)?n.some(function(n){$(n,l)}):l.push(n)),l}function H(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++}}return-1}function I(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function T(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||I(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||I(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/,\"$1\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=Date.now(),n.addEventListener(l,o?D:A,o)):n.removeEventListener(l,o?D:A,o);else{if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&\"role\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function A(n){var u=this.l[n.type+!1];if(n.t){if(n.t<=u.u)return}else n.t=Date.now();return u(l.event?l.event(n):n)}function D(n){return this.l[n.type+!0](l.event?l.event(n):n)}function L(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,m,k,w,x,P,S,$,H,I,T,A=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof A)try{if(w=u.props,x=(a=A.contextType)&&i[a.__c],P=a?x?x.props.value:a.__:i,t.__c?k=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in A&&A.prototype.render?u.__c=p=new A(w,P):(u.__c=p=new b(w,P),p.constructor=A,p.render=O),x&&x.sub(p),p.props=w,p.state||(p.state={}),p.context=P,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=A.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v({},p.__s)),v(p.__s,A.getDerivedStateFromProps(w,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==A.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(null==A.getDerivedStateFromProps&&w!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(w,P),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(w,p.__s,P)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=w,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(w,p.__s,P),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,m)})}if(p.context=P,p.props=w,p.__P=n,p.__e=!1,$=l.__r,H=0,\"prototype\"in A&&A.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),I=0;I<p._sb.length;I++)p.__h.push(p._sb[I]);p._sb=[]}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=v(v({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(m=p.getSnapshotBeforeUpdate(d,_)),C(n,h(T=null!=a&&a.type===g&&null==a.key?a.props.children:a)?T:[T],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__u&=-161,p.__h.length&&f.push(p),k&&(p.__E=p.__=null)}catch(n){u.__v=null,c||null!=r?(u.__e=e,u.__u|=c?160:32,r[r.indexOf(e)]=null):(u.__e=t.__e,u.__k=t.__k),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=j(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function M(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)z(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function j(l,u,t,i,o,r,f,e,s){var a,v,y,d,_,g,b,k=t.props,w=u.props,x=u.type;if(\"svg\"===x&&(o=!0),null!=r)for(a=0;a<r.length;a++)if((_=r[a])&&\"setAttribute\"in _==!!x&&(x?_.localName===x:3===_.nodeType)){l=_,r[a]=null;break}if(null==l){if(null===x)return document.createTextNode(w);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",x):document.createElement(x,w.is&&w),r=null,e=!1}if(null===x)k===w||e&&l.data===w||(l.data=w);else{if(r=r&&n.call(l.childNodes),k=t.props||c,!e&&null!=r)for(k={},a=0;a<l.attributes.length;a++)k[(_=l.attributes[a]).name]=_.value;for(a in k)_=k[a],\"children\"==a||(\"dangerouslySetInnerHTML\"==a?y=_:\"key\"===a||a in w||T(l,a,null,_,o));for(a in w)_=w[a],\"children\"==a?d=_:\"dangerouslySetInnerHTML\"==a?v=_:\"value\"==a?g=_:\"checked\"==a?b=_:\"key\"===a||e&&\"function\"!=typeof _||k[a]===_||T(l,a,_,k[a],o);if(v)e||y&&(v.__html===y.__html||v.__html===l.innerHTML)||(l.innerHTML=v.__html),u.__k=[];else if(y&&(l.innerHTML=\"\"),C(l,h(d)?d:[d],u,t,i,o&&\"foreignObject\"!==x,r,f,r?r[0]:t.__k&&m(t,0),e,s),null!=r)for(a=r.length;a--;)null!=r[a]&&p(r[a]);e||(a=\"value\",void 0!==g&&(g!==l[a]||\"progress\"===x&&!g||\"option\"===x&&g!==k[a])&&T(l,a,g,k[a],!1),a=\"checked\",void 0!==b&&b!==l[a]&&T(l,a,b,k[a],!1))}return l}function z(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function N(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||z(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null,n.__c=void 0}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&N(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p(n.__e),n.__=n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function q(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],L(t,u=(!o&&i||t).__k=y(g,null,[u]),r||c,c,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),M(f,u,e)}function B(n,l){q(n,l,B)}function E(l,u,t){var i,o,r,f,e=v({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function F(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w(this))},b.prototype.render=g,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},x.__r=0,e=0;export{b as Component,g as Fragment,E as cloneElement,F as createContext,y as createElement,_ as createRef,y as h,B as hydrate,t as isValidElement,l as options,q as render,$ as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n.__b,a=n.__r,v=n.diffed,l=n.__c,m=n.unmount;function d(t,u){n.__h&&n.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c}),i.__[t]}function h(n){return o=1,s(B,n)}function s(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function p(u,i){var o=d(t++,3);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o))}function y(u,i){var o=d(t++,4);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o))}function _(n){return o=5,F(function(){return{current:n}},[])}function A(n,t,r){o=6,y(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function F(n,r){var u=d(t++,7);return z(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T(n,t){return o=8,F(function(){return n},t)}function q(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x(t,r){n.useDebugValue&&n.useDebugValue(r?r(t):t)}function P(n){var u=d(t++,10),i=h();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function V(){var n=d(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w),t.__H.__h=[]}catch(r){t.__H.__h=[],n.__e(r,t.__v)}}n.__b=function(n){r=null,e&&e(n)},n.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(k),i.__h.forEach(w),i.__h=[],t=0)),u=r},n.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===n.requestAnimationFrame||((i=n.requestAnimationFrame)||j)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},n.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return!n.__||w(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],n.__e(u,t.__v)}}),l&&l(t,r)},n.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n)}catch(n){r=n}}),u.__H=void 0,r&&n.__e(r,u.__v))};var g=\"function\"==typeof requestAnimationFrame;function j(n){var t,r=function(){clearTimeout(u),g&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g&&(t=requestAnimationFrame(r))}function k(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function w(n){var t=r;n.__c=n.__(),r=t}function z(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B(n,t){return\"function\"==typeof t?t(n):t}export{T as useCallback,q as useContext,x as useDebugValue,p as useEffect,P as useErrorBoundary,V as useId,A as useImperativeHandle,y as useLayoutEffect,F as useMemo,s as useReducer,_ as useRef,h as useState};\n//# sourceMappingURL=hooks.module.js.map\n","/**\n * Having Survey types in types.ts was confusing tsc\n * and generating an invalid module.d.ts\n * See https://github.com/PostHog/posthog-js/issues/698\n */\n\nimport type { PropertyMatchType } from './types'\n\nexport enum SurveyWidgetType {\n Button = 'button',\n Tab = 'tab',\n Selector = 'selector',\n}\n\nexport enum SurveyPosition {\n TopLeft = 'top_left',\n TopRight = 'top_right',\n TopCenter = 'top_center',\n MiddleLeft = 'middle_left',\n MiddleRight = 'middle_right',\n MiddleCenter = 'middle_center',\n Left = 'left',\n Center = 'center',\n Right = 'right',\n NextToTrigger = 'next_to_trigger',\n}\n\nexport interface SurveyAppearance {\n // keep in sync with frontend/src/types.ts -> SurveyAppearance\n backgroundColor?: string\n submitButtonColor?: string\n // text color is deprecated, use auto contrast text color instead\n textColor?: string\n // deprecate submit button text eventually\n submitButtonText?: string\n submitButtonTextColor?: string\n descriptionTextColor?: string\n ratingButtonColor?: string\n ratingButtonActiveColor?: string\n ratingButtonHoverColor?: string\n whiteLabel?: boolean\n autoDisappear?: boolean\n displayThankYouMessage?: boolean\n thankYouMessageHeader?: string\n thankYouMessageDescription?: string\n thankYouMessageDescriptionContentType?: SurveyQuestionDescriptionContentType\n thankYouMessageCloseButtonText?: string\n borderColor?: string\n position?: SurveyPosition\n placeholder?: string\n shuffleQuestions?: boolean\n surveyPopupDelaySeconds?: number\n // widget options\n widgetType?: SurveyWidgetType\n widgetSelector?: string\n widgetLabel?: string\n widgetColor?: string\n fontFamily?: string\n // questionable: Not in frontend/src/types.ts -> SurveyAppearance, but used in site app\n maxWidth?: string\n zIndex?: string\n disabledButtonOpacity?: string\n boxPadding?: string\n}\n\nexport enum SurveyType {\n Popover = 'popover',\n API = 'api',\n Widget = 'widget',\n ExternalSurvey = 'external_survey',\n}\n\nexport type SurveyQuestion = BasicSurveyQuestion | LinkSurveyQuestion | RatingSurveyQuestion | MultipleSurveyQuestion\n\nexport type SurveyQuestionDescriptionContentType = 'html' | 'text'\n\ninterface SurveyQuestionBase {\n question: string\n id?: string\n description?: string | null\n descriptionContentType?: SurveyQuestionDescriptionContentType\n optional?: boolean\n buttonText?: string\n branching?: NextQuestionBranching | EndBranching | ResponseBasedBranching | SpecificQuestionBranching\n}\n\nexport interface BasicSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.Open\n}\n\nexport interface LinkSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.Link\n link?: string | null\n}\n\nexport interface RatingSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.Rating\n display: 'number' | 'emoji'\n scale: 3 | 5 | 7 | 10\n lowerBoundLabel: string\n upperBoundLabel: string\n skipSubmitButton?: boolean\n}\n\nexport interface MultipleSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.SingleChoice | SurveyQuestionType.MultipleChoice\n choices: string[]\n hasOpenChoice?: boolean\n shuffleOptions?: boolean\n skipSubmitButton?: boolean\n}\n\nexport enum SurveyQuestionType {\n Open = 'open',\n MultipleChoice = 'multiple_choice',\n SingleChoice = 'single_choice',\n Rating = 'rating',\n Link = 'link',\n}\n\nexport enum SurveyQuestionBranchingType {\n NextQuestion = 'next_question',\n End = 'end',\n ResponseBased = 'response_based',\n SpecificQuestion = 'specific_question',\n}\n\ninterface NextQuestionBranching {\n type: SurveyQuestionBranchingType.NextQuestion\n}\n\ninterface EndBranching {\n type: SurveyQuestionBranchingType.End\n}\n\ninterface ResponseBasedBranching {\n type: SurveyQuestionBranchingType.ResponseBased\n responseValues: Record<string, any>\n}\n\ninterface SpecificQuestionBranching {\n type: SurveyQuestionBranchingType.SpecificQuestion\n index: number\n}\n\nexport type SurveyCallback = (surveys: Survey[], context?: { isLoaded: boolean; error?: string }) => void\n\nexport interface SurveyElement {\n text?: string\n $el_text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\nexport interface SurveyRenderReason {\n visible: boolean\n disabledReason?: string\n}\n\nexport enum SurveySchedule {\n Once = 'once',\n Recurring = 'recurring',\n Always = 'always',\n}\n\nexport interface Survey {\n // Sync this with the backend's SurveyAPISerializer!\n id: string\n name: string\n description: string\n type: SurveyType\n feature_flag_keys:\n | {\n key: string\n value?: string\n }[]\n | null\n // the linked flag key is the flag key that is used to link the survey to a flag\n linked_flag_key: string | null\n targeting_flag_key: string | null\n // the internal targeting flag key is the flag key that is used to target users who have seen the survey\n // eg survey-targeting-<survey-id>\n internal_targeting_flag_key: string | null\n questions: SurveyQuestion[]\n appearance: SurveyAppearance | null\n conditions: {\n url?: string\n selector?: string\n seenSurveyWaitPeriodInDays?: number\n urlMatchType?: PropertyMatchType\n events: {\n repeatedActivation?: boolean\n values: {\n name: string\n /** Property filters for event matching */\n propertyFilters?: {\n [propertyName: string]: {\n values: string[]\n operator: PropertyMatchType\n }\n }\n }[]\n } | null\n actions: {\n values: SurveyActionType[]\n } | null\n deviceTypes?: string[]\n deviceTypesMatchType?: PropertyMatchType\n linkedFlagVariant?: string\n } | null\n start_date: string | null\n end_date: string | null\n current_iteration: number | null\n current_iteration_start_date: string | null\n schedule?: SurveySchedule | null\n enable_partial_responses?: boolean | null\n}\n\nexport type SurveyWithTypeAndAppearance = Pick<Survey, 'id' | 'type' | 'appearance'>\n\nexport interface SurveyActionType {\n id: number\n name: string | null\n steps?: ActionStepType[]\n}\n\n/** Sync with plugin-server/src/types.ts */\nexport type ActionStepStringMatching = 'contains' | 'exact' | 'regex'\n\nexport interface ActionStepType {\n event?: string | null\n selector?: string | null\n /** @deprecated Only `selector` should be used now. */\n tag_name?: string\n text?: string | null\n /** @default StringMatching.Exact */\n text_matching?: ActionStepStringMatching | null\n href?: string | null\n /** @default ActionStepStringMatching.Exact */\n href_matching?: ActionStepStringMatching | null\n url?: string | null\n /** @default StringMatching.Contains */\n url_matching?: ActionStepStringMatching | null\n}\n\nexport enum SurveyEventName {\n SHOWN = 'survey shown',\n DISMISSED = 'survey dismissed',\n SENT = 'survey sent',\n}\n\nexport enum SurveyEventProperties {\n SURVEY_ID = '$survey_id',\n SURVEY_NAME = '$survey_name',\n SURVEY_RESPONSE = '$survey_response',\n SURVEY_ITERATION = '$survey_iteration',\n SURVEY_ITERATION_START_DATE = '$survey_iteration_start_date',\n SURVEY_PARTIALLY_COMPLETED = '$survey_partially_completed',\n SURVEY_SUBMISSION_ID = '$survey_submission_id',\n SURVEY_QUESTIONS = '$survey_questions',\n SURVEY_COMPLETED = '$survey_completed',\n}\n\nexport enum DisplaySurveyType {\n Popover = 'popover',\n Inline = 'inline',\n}\n\ninterface DisplaySurveyOptionsBase {\n ignoreConditions: boolean\n ignoreDelay: boolean\n displayType: DisplaySurveyType\n}\n\ninterface DisplaySurveyPopoverOptions extends DisplaySurveyOptionsBase {\n displayType: DisplaySurveyType.Popover\n}\n\ninterface DisplaySurveyInlineOptions extends DisplaySurveyOptionsBase {\n displayType: DisplaySurveyType.Inline\n selector: string\n}\n\nexport type DisplaySurveyOptions = DisplaySurveyPopoverOptions | DisplaySurveyInlineOptions\n\nexport interface SurveyConfig {\n prefillFromUrl?: boolean\n autoSubmitIfComplete?: boolean\n autoSubmitDelay?: number\n}\n","import { DisplaySurveyOptions, DisplaySurveyType, Survey, SurveyType } from '../posthog-surveys-types'\nimport { createLogger } from '../utils/logger'\n\nexport const SURVEY_LOGGER = createLogger('[Surveys]')\n\nexport function isSurveyRunning(survey: Survey): boolean {\n return !!(survey.start_date && !survey.end_date)\n}\n\nexport function doesSurveyActivateByEvent(survey: Pick<Survey, 'conditions'>): boolean {\n return !!survey.conditions?.events?.values?.length\n}\n\nexport function doesSurveyActivateByAction(survey: Pick<Survey, 'conditions'>): boolean {\n return !!survey.conditions?.actions?.values?.length\n}\n\nexport const SURVEY_SEEN_PREFIX = 'seenSurvey_'\nexport const SURVEY_IN_PROGRESS_PREFIX = 'inProgressSurvey_'\n\nexport const getSurveyInteractionProperty = (\n survey: Pick<Survey, 'id' | 'current_iteration'>,\n action: 'responded' | 'dismissed'\n): string => {\n let surveyProperty = `$survey_${action}/${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveyProperty = `$survey_${action}/${survey.id}/${survey.current_iteration}`\n }\n\n return surveyProperty\n}\n\nexport const getSurveySeenKey = (survey: Pick<Survey, 'id' | 'current_iteration'>): string => {\n let surveySeenKey = `${SURVEY_SEEN_PREFIX}${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveySeenKey = `${SURVEY_SEEN_PREFIX}${survey.id}_${survey.current_iteration}`\n }\n\n return surveySeenKey\n}\n\nexport const setSurveySeenOnLocalStorage = (survey: Pick<Survey, 'id' | 'current_iteration'>) => {\n const isSurveySeen = localStorage.getItem(getSurveySeenKey(survey))\n // if survey is already seen, no need to set it again\n if (isSurveySeen) {\n return\n }\n\n localStorage.setItem(getSurveySeenKey(survey), 'true')\n}\n\n// These surveys are relevant for the getActiveMatchingSurveys method. They are used to\n// display surveys in our customer's application. Any new in-app survey type should be added here.\nexport const IN_APP_SURVEY_TYPES = [SurveyType.Popover, SurveyType.Widget, SurveyType.API]\n\nexport const DEFAULT_DISPLAY_SURVEY_OPTIONS: DisplaySurveyOptions = {\n ignoreConditions: false,\n ignoreDelay: false,\n displayType: DisplaySurveyType.Popover,\n}\n","/**\n * uuidv7: An experimental implementation of the proposed UUID Version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2023 LiosK\n * @packageDocumentation\n *\n * from https://github.com/LiosK/uuidv7/blob/e501462ea3d23241de13192ceae726956f9b3b7d/src/index.ts\n */\n\n// polyfill for IE11\nimport { window } from './utils/globals'\n\nimport { isNumber, isUndefined } from '@posthog/core'\n\nif (!Math.trunc) {\n Math.trunc = function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v)\n }\n}\n\n// polyfill for IE11\nif (!Number.isInteger) {\n Number.isInteger = function (value) {\n return isNumber(value) && isFinite(value) && Math.floor(value) === value\n }\n}\n\nconst DIGITS = '0123456789abcdef'\n\n/** Represents a UUID as a 16-byte byte array. */\nexport class UUID {\n /** @param bytes - The 16-byte byte array representation. */\n constructor(readonly bytes: Readonly<Uint8Array>) {\n if (bytes.length !== 16) {\n throw new TypeError('not 128-bit length')\n }\n }\n\n /**\n * Builds a byte array from UUIDv7 field values.\n *\n * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n * @param randA - A 12-bit `rand_a` field value.\n * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n */\n static fromFieldsV7(unixTsMs: number, randA: number, randBHi: number, randBLo: number): UUID {\n if (\n !Number.isInteger(unixTsMs) ||\n !Number.isInteger(randA) ||\n !Number.isInteger(randBHi) ||\n !Number.isInteger(randBLo) ||\n unixTsMs < 0 ||\n randA < 0 ||\n randBHi < 0 ||\n randBLo < 0 ||\n unixTsMs > 0xffff_ffff_ffff ||\n randA > 0xfff ||\n randBHi > 0x3fff_ffff ||\n randBLo > 0xffff_ffff\n ) {\n throw new RangeError('invalid field value')\n }\n\n const bytes = new Uint8Array(16)\n bytes[0] = unixTsMs / 2 ** 40\n bytes[1] = unixTsMs / 2 ** 32\n bytes[2] = unixTsMs / 2 ** 24\n bytes[3] = unixTsMs / 2 ** 16\n bytes[4] = unixTsMs / 2 ** 8\n bytes[5] = unixTsMs\n bytes[6] = 0x70 | (randA >>> 8)\n bytes[7] = randA\n bytes[8] = 0x80 | (randBHi >>> 24)\n bytes[9] = randBHi >>> 16\n bytes[10] = randBHi >>> 8\n bytes[11] = randBHi\n bytes[12] = randBLo >>> 24\n bytes[13] = randBLo >>> 16\n bytes[14] = randBLo >>> 8\n bytes[15] = randBLo\n return new UUID(bytes)\n }\n\n /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n toString(): string {\n let text = ''\n for (let i = 0; i < this.bytes.length; i++) {\n text = text + DIGITS.charAt(this.bytes[i] >>> 4) + DIGITS.charAt(this.bytes[i] & 0xf)\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n text += '-'\n }\n }\n\n if (text.length !== 36) {\n // We saw one customer whose bundling code was mangling the UUID generation\n // rather than accept a bad UUID, we throw an error here.\n throw new Error('Invalid UUIDv7 was generated')\n }\n return text\n }\n\n /** Creates an object from `this`. */\n clone(): UUID {\n return new UUID(this.bytes.slice(0))\n }\n\n /** Returns true if `this` is equivalent to `other`. */\n equals(other: UUID): boolean {\n return this.compareTo(other) === 0\n }\n\n /**\n * Returns a negative integer, zero, or positive integer if `this` is less\n * than, equal to, or greater than `other`, respectively.\n */\n compareTo(other: UUID): number {\n for (let i = 0; i < 16; i++) {\n const diff = this.bytes[i] - other.bytes[i]\n if (diff !== 0) {\n return Math.sign(diff)\n }\n }\n return 0\n }\n}\n\n/** Encapsulates the monotonic counter state. */\nclass V7Generator {\n private _timestamp = 0\n private _counter = 0\n private readonly _random = new DefaultRandom()\n\n /**\n * Generates a new UUIDv7 object from the current timestamp, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method returns monotonically increasing UUIDs unless the up-to-date\n * timestamp is significantly (by ten seconds or more) smaller than the one\n * embedded in the immediately preceding UUID. If such a significant clock\n * rollback is detected, this method resets the generator and returns a new\n * UUID based on the current timestamp.\n */\n generate(): UUID {\n const value = this.generateOrAbort()\n if (!isUndefined(value)) {\n return value\n } else {\n // reset state and resume\n this._timestamp = 0\n const valueAfterReset = this.generateOrAbort()\n if (isUndefined(valueAfterReset)) {\n throw new Error('Could not generate UUID after timestamp reset')\n }\n return valueAfterReset\n }\n }\n\n /**\n * Generates a new UUIDv7 object from the current timestamp, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method returns monotonically increasing UUIDs unless the up-to-date\n * timestamp is significantly (by ten seconds or more) smaller than the one\n * embedded in the immediately preceding UUID. If such a significant clock\n * rollback is detected, this method aborts and returns `undefined`.\n */\n generateOrAbort(): UUID | undefined {\n const MAX_COUNTER = 0x3ff_ffff_ffff\n const ROLLBACK_ALLOWANCE = 10_000 // 10 seconds\n\n const ts = Date.now()\n if (ts > this._timestamp) {\n this._timestamp = ts\n this._resetCounter()\n } else if (ts + ROLLBACK_ALLOWANCE > this._timestamp) {\n // go on with previous timestamp if new one is not much smaller\n this._counter++\n if (this._counter > MAX_COUNTER) {\n // increment timestamp at counter overflow\n this._timestamp++\n this._resetCounter()\n }\n } else {\n // abort if clock went backwards to unbearable extent\n return undefined\n }\n\n return UUID.fromFieldsV7(\n this._timestamp,\n Math.trunc(this._counter / 2 ** 30),\n this._counter & (2 ** 30 - 1),\n this._random.nextUint32()\n )\n }\n\n /** Initializes the counter at a 42-bit random integer. */\n private _resetCounter(): void {\n this._counter = this._random.nextUint32() * 0x400 + (this._random.nextUint32() & 0x3ff)\n }\n}\n\n/** A global flag to force use of cryptographically strong RNG. */\ndeclare const UUIDV7_DENY_WEAK_RNG: boolean\n\n/** Stores `crypto.getRandomValues()` available in the environment. */\nlet getRandomValues: <T extends Uint8Array | Uint32Array>(buffer: T) => T = (buffer) => {\n // fall back on Math.random() unless the flag is set to true\n // TRICKY: don't use the isUndefined method here as can't pass the reference\n if (typeof UUIDV7_DENY_WEAK_RNG !== 'undefined' && UUIDV7_DENY_WEAK_RNG) {\n throw new Error('no cryptographically strong RNG available')\n }\n\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] = Math.trunc(Math.random() * 0x1_0000) * 0x1_0000 + Math.trunc(Math.random() * 0x1_0000)\n }\n return buffer\n}\n\n// detect Web Crypto API\nif (window && !isUndefined(window.crypto) && crypto.getRandomValues) {\n getRandomValues = (buffer) => crypto.getRandomValues(buffer)\n}\n\n/**\n * Wraps `crypto.getRandomValues()` and compatibles to enable buffering; this\n * uses a small buffer by default to avoid unbearable throughput decline in some\n * environments as well as the waste of time and space for unused values.\n */\nclass DefaultRandom {\n private readonly _buffer = new Uint32Array(8)\n private _cursor = Infinity\n nextUint32(): number {\n if (this._cursor >= this._buffer.length) {\n getRandomValues(this._buffer)\n this._cursor = 0\n }\n return this._buffer[this._cursor++]\n }\n}\n\nlet defaultGenerator: V7Generator | undefined\n\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv7 = (): string => uuidv7obj().toString()\n\n/** Generates a UUIDv7 object. */\nconst uuidv7obj = (): UUID => (defaultGenerator || (defaultGenerator = new V7Generator())).generate()\n\nexport const uuid7ToTimestampMs = (uuid: string): number => {\n // remove hyphens\n const hex = uuid.replace(/-/g, '')\n // ensure that it's a version 7 UUID\n if (hex.length !== 32) {\n throw new Error('Not a valid UUID')\n }\n if (hex[12] !== '7') {\n throw new Error('Not a UUIDv7')\n }\n // the first 6 bytes are the timestamp, which means that we can read only the first 12 hex characters\n return parseInt(hex.substring(0, 12), 16)\n}\n","import { isFunction, isUndefined, includes } from '@posthog/core'\n\n/**\n * this device detection code is (at time of writing) about 3% of the size of the entire library\n * this is mostly because the identifiers user in regexes and results can't be minified away since\n * they have meaning\n *\n * so, there are some pre-uglifying choices in the code to help reduce the size\n * e.g. many repeated strings are stored as variables and then old-fashioned concatenated together\n *\n * TL;DR here be dragons\n */\nconst FACEBOOK = 'Facebook'\nconst MOBILE = 'Mobile'\nconst IOS = 'iOS'\nconst ANDROID = 'Android'\nconst TABLET = 'Tablet'\nconst ANDROID_TABLET = ANDROID + ' ' + TABLET\nconst IPAD = 'iPad'\nconst APPLE = 'Apple'\nconst APPLE_WATCH = APPLE + ' Watch'\nconst SAFARI = 'Safari'\nconst BLACKBERRY = 'BlackBerry'\nconst SAMSUNG = 'Samsung'\nconst SAMSUNG_BROWSER = SAMSUNG + 'Browser'\nconst SAMSUNG_INTERNET = SAMSUNG + ' Internet'\nconst CHROME = 'Chrome'\nconst CHROME_OS = CHROME + ' OS'\nconst CHROME_IOS = CHROME + ' ' + IOS\nconst INTERNET_EXPLORER = 'Internet Explorer'\nconst INTERNET_EXPLORER_MOBILE = INTERNET_EXPLORER + ' ' + MOBILE\nconst OPERA = 'Opera'\nconst OPERA_MINI = OPERA + ' Mini'\nconst EDGE = 'Edge'\nconst MICROSOFT_EDGE = 'Microsoft ' + EDGE\nconst FIREFOX = 'Firefox'\nconst FIREFOX_IOS = FIREFOX + ' ' + IOS\nconst NINTENDO = 'Nintendo'\nconst PLAYSTATION = 'PlayStation'\nconst XBOX = 'Xbox'\nconst ANDROID_MOBILE = ANDROID + ' ' + MOBILE\nconst MOBILE_SAFARI = MOBILE + ' ' + SAFARI\nconst WINDOWS = 'Windows'\nconst WINDOWS_PHONE = WINDOWS + ' Phone'\nconst NOKIA = 'Nokia'\nconst OUYA = 'Ouya'\nconst GENERIC = 'Generic'\nconst GENERIC_MOBILE = GENERIC + ' ' + MOBILE.toLowerCase()\nconst GENERIC_TABLET = GENERIC + ' ' + TABLET.toLowerCase()\nconst KONQUEROR = 'Konqueror'\n\nconst BROWSER_VERSION_REGEX_SUFFIX = '(\\\\d+(\\\\.\\\\d+)?)'\nconst DEFAULT_BROWSER_VERSION_REGEX = new RegExp('Version/' + BROWSER_VERSION_REGEX_SUFFIX)\n\nconst XBOX_REGEX = new RegExp(XBOX, 'i')\nconst PLAYSTATION_REGEX = new RegExp(PLAYSTATION + ' \\\\w+', 'i')\nconst NINTENDO_REGEX = new RegExp(NINTENDO + ' \\\\w+', 'i')\nconst BLACKBERRY_REGEX = new RegExp(BLACKBERRY + '|PlayBook|BB10', 'i')\n\nconst windowsVersionMap: Record<string, string> = {\n 'NT3.51': 'NT 3.11',\n 'NT4.0': 'NT 4.0',\n '5.0': '2000',\n '5.1': 'XP',\n '5.2': 'XP',\n '6.0': 'Vista',\n '6.1': '7',\n '6.2': '8',\n '6.3': '8.1',\n '6.4': '10',\n '10.0': '10',\n}\n\n/**\n * Safari detection turns out to be complicated. For e.g. https://stackoverflow.com/a/29696509\n * We can be slightly loose because some options have been ruled out (e.g. firefox on iOS)\n * before this check is made\n */\nfunction isSafari(userAgent: string): boolean {\n return includes(userAgent, SAFARI) && !includes(userAgent, CHROME) && !includes(userAgent, ANDROID)\n}\n\nconst safariCheck = (ua: string, vendor?: string) => (vendor && includes(vendor, APPLE)) || isSafari(ua)\n\n/**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include keywords used in later checks.\n */\nexport const detectBrowser = function (user_agent: string, vendor: string | undefined): string {\n vendor = vendor || '' // vendor is undefined for at least IE9\n\n if (includes(user_agent, ' OPR/') && includes(user_agent, 'Mini')) {\n return OPERA_MINI\n } else if (includes(user_agent, ' OPR/')) {\n return OPERA\n } else if (BLACKBERRY_REGEX.test(user_agent)) {\n return BLACKBERRY\n } else if (includes(user_agent, 'IE' + MOBILE) || includes(user_agent, 'WPDesktop')) {\n return INTERNET_EXPLORER_MOBILE\n }\n // https://developer.samsung.com/internet/user-agent-string-format\n else if (includes(user_agent, SAMSUNG_BROWSER)) {\n return SAMSUNG_INTERNET\n } else if (includes(user_agent, EDGE) || includes(user_agent, 'Edg/')) {\n return MICROSOFT_EDGE\n } else if (includes(user_agent, 'FBIOS')) {\n return FACEBOOK + ' ' + MOBILE\n } else if (includes(user_agent, 'UCWEB') || includes(user_agent, 'UCBrowser')) {\n return 'UC Browser'\n } else if (includes(user_agent, 'CriOS')) {\n return CHROME_IOS // why not just Chrome?\n } else if (includes(user_agent, 'CrMo')) {\n return CHROME\n } else if (includes(user_agent, CHROME)) {\n return CHROME\n } else if (includes(user_agent, ANDROID) && includes(user_agent, SAFARI)) {\n return ANDROID_MOBILE\n } else if (includes(user_agent, 'FxiOS')) {\n return FIREFOX_IOS\n } else if (includes(user_agent.toLowerCase(), KONQUEROR.toLowerCase())) {\n return KONQUEROR\n } else if (safariCheck(user_agent, vendor)) {\n return includes(user_agent, MOBILE) ? MOBILE_SAFARI : SAFARI\n } else if (includes(user_agent, FIREFOX)) {\n return FIREFOX\n } else if (includes(user_agent, 'MSIE') || includes(user_agent, 'Trident/')) {\n return INTERNET_EXPLORER\n } else if (includes(user_agent, 'Gecko')) {\n return FIREFOX\n }\n\n return ''\n}\n\nconst versionRegexes: Record<string, RegExp[]> = {\n [INTERNET_EXPLORER_MOBILE]: [new RegExp('rv:' + BROWSER_VERSION_REGEX_SUFFIX)],\n [MICROSOFT_EDGE]: [new RegExp(EDGE + '?\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [CHROME]: [new RegExp('(' + CHROME + '|CrMo)\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [CHROME_IOS]: [new RegExp('CriOS\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n 'UC Browser': [new RegExp('(UCBrowser|UCWEB)\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [SAFARI]: [DEFAULT_BROWSER_VERSION_REGEX],\n [MOBILE_SAFARI]: [DEFAULT_BROWSER_VERSION_REGEX],\n [OPERA]: [new RegExp('(' + OPERA + '|OPR)\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [FIREFOX]: [new RegExp(FIREFOX + '\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [FIREFOX_IOS]: [new RegExp('FxiOS\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [KONQUEROR]: [new RegExp('Konqueror[:/]?' + BROWSER_VERSION_REGEX_SUFFIX, 'i')],\n // not every blackberry user agent has the version after the name\n [BLACKBERRY]: [new RegExp(BLACKBERRY + ' ' + BROWSER_VERSION_REGEX_SUFFIX), DEFAULT_BROWSER_VERSION_REGEX],\n [ANDROID_MOBILE]: [new RegExp('android\\\\s' + BROWSER_VERSION_REGEX_SUFFIX, 'i')],\n [SAMSUNG_INTERNET]: [new RegExp(SAMSUNG_BROWSER + '\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [INTERNET_EXPLORER]: [new RegExp('(rv:|MSIE )' + BROWSER_VERSION_REGEX_SUFFIX)],\n Mozilla: [new RegExp('rv:' + BROWSER_VERSION_REGEX_SUFFIX)],\n}\n\n/**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n *\n * `navigator.vendor` is passed in and used to help with detecting certain browsers\n * NB `navigator.vendor` is deprecated and not present in every browser\n */\nexport const detectBrowserVersion = function (userAgent: string, vendor: string | undefined): number | null {\n const browser = detectBrowser(userAgent, vendor)\n const regexes: RegExp[] | undefined = versionRegexes[browser as keyof typeof versionRegexes]\n if (isUndefined(regexes)) {\n return null\n }\n\n for (let i = 0; i < regexes.length; i++) {\n const regex = regexes[i]\n const matches = userAgent.match(regex)\n if (matches) {\n return parseFloat(matches[matches.length - 2])\n }\n }\n return null\n}\n\n// to avoid repeating regexes or calling them twice, we have an array of matches\n// the first regex that matches uses its matcher function to return the result\nconst osMatchers: [\n RegExp,\n [string, string] | ((match: RegExpMatchArray | null, user_agent: string) => [string, string]),\n][] = [\n [\n new RegExp(XBOX + '; ' + XBOX + ' (.*?)[);]', 'i'),\n (match) => {\n return [XBOX, (match && match[1]) || '']\n },\n ],\n [new RegExp(NINTENDO, 'i'), [NINTENDO, '']],\n [new RegExp(PLAYSTATION, 'i'), [PLAYSTATION, '']],\n [BLACKBERRY_REGEX, [BLACKBERRY, '']],\n [\n new RegExp(WINDOWS, 'i'),\n (_, user_agent) => {\n if (/Phone/.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return [WINDOWS_PHONE, '']\n }\n // not all JS versions support negative lookbehind, so we need two checks here\n if (new RegExp(MOBILE).test(user_agent) && !/IEMobile\\b/.test(user_agent)) {\n return [WINDOWS + ' ' + MOBILE, '']\n }\n const match = /Windows NT ([0-9.]+)/i.exec(user_agent)\n if (match && match[1]) {\n const version = match[1]\n let osVersion = windowsVersionMap[version] || ''\n if (/arm/i.test(user_agent)) {\n osVersion = 'RT'\n }\n return [WINDOWS, osVersion]\n }\n return [WINDOWS, '']\n },\n ],\n [\n /((iPhone|iPad|iPod).*?OS (\\d+)_(\\d+)_?(\\d+)?|iPhone)/,\n (match) => {\n if (match && match[3]) {\n const versionParts = [match[3], match[4], match[5] || '0']\n return [IOS, versionParts.join('.')]\n }\n return [IOS, '']\n },\n ],\n [\n /(watch.*\\/(\\d+\\.\\d+\\.\\d+)|watch os,(\\d+\\.\\d+),)/i,\n (match) => {\n // e.g. Watch4,3/5.3.8 (16U680)\n let version = ''\n if (match && match.length >= 3) {\n version = isUndefined(match[2]) ? match[3] : match[2]\n }\n return ['watchOS', version]\n },\n ],\n [\n new RegExp('(' + ANDROID + ' (\\\\d+)\\\\.(\\\\d+)\\\\.?(\\\\d+)?|' + ANDROID + ')', 'i'),\n (match) => {\n if (match && match[2]) {\n const versionParts = [match[2], match[3], match[4] || '0']\n return [ANDROID, versionParts.join('.')]\n }\n return [ANDROID, '']\n },\n ],\n [\n /Mac OS X (\\d+)[_.](\\d+)[_.]?(\\d+)?/i,\n (match) => {\n const result: [string, string] = ['Mac OS X', '']\n if (match && match[1]) {\n const versionParts = [match[1], match[2], match[3] || '0']\n result[1] = versionParts.join('.')\n }\n return result\n },\n ],\n [\n /Mac/i,\n // mop up a few non-standard UAs that should match mac\n ['Mac OS X', ''],\n ],\n [/CrOS/, [CHROME_OS, '']],\n [/Linux|debian/i, ['Linux', '']],\n]\n\nexport const detectOS = function (user_agent: string): [string, string] {\n for (let i = 0; i < osMatchers.length; i++) {\n const [rgex, resultOrFn] = osMatchers[i]\n const match = rgex.exec(user_agent)\n const result = match && (isFunction(resultOrFn) ? resultOrFn(match, user_agent) : resultOrFn)\n if (result) {\n return result\n }\n }\n return ['', '']\n}\n\nexport const detectDevice = function (user_agent: string): string {\n if (NINTENDO_REGEX.test(user_agent)) {\n return NINTENDO\n } else if (PLAYSTATION_REGEX.test(user_agent)) {\n return PLAYSTATION\n } else if (XBOX_REGEX.test(user_agent)) {\n return XBOX\n } else if (new RegExp(OUYA, 'i').test(user_agent)) {\n return OUYA\n } else if (new RegExp('(' + WINDOWS_PHONE + '|WPDesktop)', 'i').test(user_agent)) {\n return WINDOWS_PHONE\n } else if (/iPad/.test(user_agent)) {\n return IPAD\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch'\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone'\n } else if (/(watch)(?: ?os[,/]|\\d,\\d\\/)[\\d.]+/i.test(user_agent)) {\n return APPLE_WATCH\n } else if (BLACKBERRY_REGEX.test(user_agent)) {\n return BLACKBERRY\n } else if (/(kobo)\\s(ereader|touch)/i.test(user_agent)) {\n return 'Kobo'\n } else if (new RegExp(NOKIA, 'i').test(user_agent)) {\n return NOKIA\n } else if (\n // Kindle Fire without Silk / Echo Show\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i.test(user_agent) ||\n // Kindle Fire HD\n /(kf[a-z]+)( bui|\\)).+silk\\//i.test(user_agent)\n ) {\n return 'Kindle Fire'\n } else if (/(Android|ZTE)/i.test(user_agent)) {\n if (\n !new RegExp(MOBILE).test(user_agent) ||\n /(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(user_agent)\n ) {\n if (\n (/pixel[\\daxl ]{1,6}/i.test(user_agent) && !/pixel c/i.test(user_agent)) ||\n /(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(user_agent) ||\n (/lmy47v/i.test(user_agent) && !/QTAQZ3/i.test(user_agent))\n ) {\n return ANDROID\n }\n return ANDROID_TABLET\n } else {\n return ANDROID\n }\n } else if (new RegExp('(pda|' + MOBILE + ')', 'i').test(user_agent)) {\n return GENERIC_MOBILE\n } else if (new RegExp(TABLET, 'i').test(user_agent) && !new RegExp(TABLET + ' pc', 'i').test(user_agent)) {\n return GENERIC_TABLET\n } else {\n return ''\n }\n}\n\nexport const detectDeviceType = function (user_agent: string): string {\n const device = detectDevice(user_agent)\n if (\n device === IPAD ||\n device === ANDROID_TABLET ||\n device === 'Kobo' ||\n device === 'Kindle Fire' ||\n device === GENERIC_TABLET\n ) {\n return TABLET\n } else if (device === NINTENDO || device === XBOX || device === PLAYSTATION || device === OUYA) {\n return 'Console'\n } else if (device === APPLE_WATCH) {\n return 'Wearable'\n } else if (device) {\n return MOBILE\n } else {\n return 'Desktop'\n }\n}\n","import { each, find } from './utils'\nimport Config from './config'\nimport { Compression, RequestWithOptions, RequestResponse } from './types'\nimport { formDataToQuery } from './utils/request-utils'\n\nimport { logger } from './utils/logger'\nimport { AbortController, fetch, navigator, XMLHttpRequest } from './utils/globals'\nimport { gzipSync, strToU8 } from 'fflate'\n\nimport { _base64Encode } from './utils/encode-utils'\n\n// eslint-disable-next-line compat/compat\nexport const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch\n\nconst CONTENT_TYPE_PLAIN = 'text/plain'\nconst CONTENT_TYPE_JSON = 'application/json'\nconst CONTENT_TYPE_FORM = 'application/x-www-form-urlencoded'\nconst SIXTY_FOUR_KILOBYTES = 64 * 1024\n/*\n fetch will fail if we request keepalive with a body greater than 64kb\n sets the threshold lower than that so that\n any overhead doesn't push over the threshold after checking here\n*/\nconst KEEP_ALIVE_THRESHOLD = SIXTY_FOUR_KILOBYTES * 0.8\ntype EncodedBody = {\n contentType: string\n body: string | BlobPart\n estimatedSize: number\n}\n\n/**\n * Extends a URL with additional query parameters\n * @param url - The URL to extend\n * @param params - The parameters to add\n * @param replace - When true (default), new params overwrite existing ones with same key. When false, existing params are preserved.\n * @returns The URL with extended parameters\n */\nexport const extendURLParams = (url: string, params: Record<string, any>, replace: boolean = true): string => {\n const [baseUrl, search] = url.split('?')\n const newParams = { ...params }\n\n const updatedSearch =\n search?.split('&').map((pair) => {\n const [key, origValue] = pair.split('=')\n const value = replace ? (newParams[key] ?? origValue) : origValue\n delete newParams[key]\n return `${key}=${value}`\n }) ?? []\n\n const remaining = formDataToQuery(newParams)\n if (remaining) {\n updatedSearch.push(remaining)\n }\n\n return `${baseUrl}?${updatedSearch.join('&')}`\n}\n\nexport const jsonStringify = (data: any, space?: string | number): string => {\n // With plain JSON.stringify, we get an exception when a property is a BigInt. This has caused problems for some users,\n // see https://github.com/PostHog/posthog-js/issues/1440\n // To work around this, we convert BigInts to strings before stringifying the data. This is not ideal, as we lose\n // information that this was originally a number, but given ClickHouse doesn't support BigInts, the customer\n // would not be able to operate on these numerically anyway.\n return JSON.stringify(data, (_, value) => (typeof value === 'bigint' ? value.toString() : value), space)\n}\n\nconst encodeToDataString = (data: string | Record<string, any>): string => {\n return 'data=' + encodeURIComponent(typeof data === 'string' ? data : jsonStringify(data))\n}\n\nconst encodePostData = ({ data, compression }: RequestWithOptions): EncodedBody | undefined => {\n if (!data) {\n return\n }\n\n if (compression === Compression.GZipJS) {\n const gzipData = gzipSync(strToU8(jsonStringify(data)), { mtime: 0 })\n const blob = new Blob([gzipData], { type: CONTENT_TYPE_PLAIN })\n return {\n contentType: CONTENT_TYPE_PLAIN,\n body: blob,\n estimatedSize: blob.size,\n }\n }\n\n if (compression === Compression.Base64) {\n const b64data = _base64Encode(jsonStringify(data))\n const encodedBody = encodeToDataString(b64data)\n\n return {\n contentType: CONTENT_TYPE_FORM,\n body: encodedBody,\n estimatedSize: new Blob([encodedBody]).size,\n }\n }\n\n const jsonBody = jsonStringify(data)\n return {\n contentType: CONTENT_TYPE_JSON,\n body: jsonBody,\n estimatedSize: new Blob([jsonBody]).size,\n }\n}\n\nconst xhr = (options: RequestWithOptions) => {\n const req = new XMLHttpRequest!()\n req.open(options.method || 'GET', options.url, true)\n const { contentType, body } = encodePostData(options) ?? {}\n\n each(options.headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (contentType) {\n req.setRequestHeader('Content-Type', contentType)\n }\n\n if (options.timeout) {\n req.timeout = options.timeout\n }\n if (!options.disableXHRCredentials) {\n // send the ph_optout cookie\n // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n req.withCredentials = true\n }\n req.onreadystatechange = () => {\n // XMLHttpRequest.DONE == 4, except in safari 4\n if (req.readyState === 4) {\n const response: RequestResponse = {\n statusCode: req.status,\n text: req.responseText,\n }\n if (req.status === 200) {\n try {\n response.json = JSON.parse(req.responseText)\n } catch {\n // logger.error(e)\n }\n }\n\n options.callback?.(response)\n }\n }\n req.send(body)\n}\n\nconst _fetch = (options: RequestWithOptions) => {\n const { contentType, body, estimatedSize } = encodePostData(options) ?? {}\n\n // eslint-disable-next-line compat/compat\n const headers = new Headers()\n each(options.headers, function (headerValue, headerName) {\n headers.append(headerName, headerValue)\n })\n\n if (contentType) {\n headers.append('Content-Type', contentType)\n }\n\n const url = options.url\n let aborter: { signal: any; timeout: ReturnType<typeof setTimeout> } | null = null\n\n if (AbortController) {\n const controller = new AbortController()\n aborter = {\n signal: controller.signal,\n timeout: setTimeout(() => controller.abort(), options.timeout),\n }\n }\n\n fetch!(url, {\n method: options?.method || 'GET',\n headers,\n // if body is greater than 64kb, then fetch with keepalive will error\n // see 8:10:5 at https://fetch.spec.whatwg.org/#http-network-or-cache-fetch,\n // but we do want to set keepalive sometimes as it can help with success\n // when e.g. a page is being closed\n // so let's get the best of both worlds and only set keepalive for POST requests\n // where the body is less than 64kb\n // NB this is fetch keepalive and not http keepalive\n keepalive: options.method === 'POST' && (estimatedSize || 0) < KEEP_ALIVE_THRESHOLD,\n body,\n signal: aborter?.signal,\n ...options.fetchOptions,\n })\n .then((response) => {\n return response.text().then((responseText) => {\n const res: RequestResponse = {\n statusCode: response.status,\n text: responseText,\n }\n\n if (response.status === 200) {\n try {\n res.json = JSON.parse(responseText)\n } catch (e) {\n logger.error(e)\n }\n }\n\n options.callback?.(res)\n })\n })\n .catch((error) => {\n logger.error(error)\n options.callback?.({ statusCode: 0, text: error })\n })\n .finally(() => (aborter ? clearTimeout(aborter.timeout) : null))\n\n return\n}\n\nconst _sendBeacon = (options: RequestWithOptions) => {\n // beacon documentation https://w3c.github.io/beacon/\n // beacons format the message and use the type property\n\n const url = extendURLParams(options.url, {\n beacon: '1',\n })\n\n try {\n const { contentType, body } = encodePostData(options) ?? {}\n // sendBeacon requires a blob so we convert it\n const sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body\n navigator!.sendBeacon!(url, sendBeaconBody)\n } catch {\n // send beacon is a best-effort, fire-and-forget mechanism on page unload,\n // we don't want to throw errors here\n }\n}\n\nconst AVAILABLE_TRANSPORTS: {\n transport: RequestWithOptions['transport']\n method: (options: RequestWithOptions) => void\n}[] = []\n\n// We add the transports in order of preference\nif (fetch) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'fetch',\n method: _fetch,\n })\n}\n\nif (XMLHttpRequest) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'XHR',\n method: xhr,\n })\n}\n\nif (navigator?.sendBeacon) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'sendBeacon',\n method: _sendBeacon,\n })\n}\n\n// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.\nexport const request = (_options: RequestWithOptions) => {\n // Clone the options so we don't modify the original object\n const options = { ..._options }\n options.timeout = options.timeout || 60000\n\n options.url = extendURLParams(options.url, {\n _: new Date().getTime().toString(),\n ver: Config.LIB_VERSION,\n compression: options.compression,\n })\n\n const transport = options.transport ?? 'fetch'\n\n const availableTransports = AVAILABLE_TRANSPORTS.filter(\n (t) => !options.disableTransport || !t.transport || !options.disableTransport.includes(t.transport)\n )\n\n const transportMethod =\n find(availableTransports, (t) => t.transport === transport)?.method ?? availableTransports[0].method\n\n if (!transportMethod) {\n throw new Error('No available transport method')\n }\n\n transportMethod(options)\n}\n","export const isValidRegex = function (str: string): boolean {\n try {\n new RegExp(str)\n } catch {\n return false\n }\n return true\n}\n\nexport const isMatchingRegex = function (value: string, pattern: string): boolean {\n if (!isValidRegex(pattern)) return false\n\n try {\n return new RegExp(pattern).test(value)\n } catch {\n return false\n }\n}\n","import { jsonStringify } from '../request'\nimport type { Properties, PropertyMatchType } from '../types'\nimport { isMatchingRegex } from './regex-utils'\n\nexport function getPersonPropertiesHash(\n distinct_id: string,\n userPropertiesToSet?: Properties,\n userPropertiesToSetOnce?: Properties\n): string {\n return jsonStringify({ distinct_id, userPropertiesToSet, userPropertiesToSetOnce })\n}\n\nexport const propertyComparisons: Record<PropertyMatchType, (targets: string[], values: string[]) => boolean> = {\n exact: (targets, values) => values.some((value) => targets.some((target) => value === target)),\n is_not: (targets, values) => values.every((value) => targets.every((target) => value !== target)),\n regex: (targets, values) => values.some((value) => targets.some((target) => isMatchingRegex(value, target))),\n not_regex: (targets, values) => values.every((value) => targets.every((target) => !isMatchingRegex(value, target))),\n icontains: (targets, values) =>\n values.map(toLowerCase).some((value) => targets.map(toLowerCase).some((target) => value.includes(target))),\n not_icontains: (targets, values) =>\n values.map(toLowerCase).every((value) => targets.map(toLowerCase).every((target) => !value.includes(target))),\n}\n\nconst toLowerCase = (v: string): string => v.toLowerCase()\n","import { PostHog } from '../../posthog-core'\nimport { createLogger } from '../../utils/logger'\n\nconst logger = createLogger('[Stylesheet Loader]')\n\nexport const prepareStylesheet = (document: Document, innerText: string, posthog?: PostHog) => {\n // Forcing the existence of `document` requires this function to be called in a browser environment\n let stylesheet: HTMLStyleElement | null = document.createElement('style')\n stylesheet.innerText = innerText\n\n if (posthog?.config?.prepare_external_dependency_stylesheet) {\n stylesheet = posthog.config.prepare_external_dependency_stylesheet(stylesheet)\n }\n\n if (!stylesheet) {\n logger.error('prepare_external_dependency_stylesheet returned null')\n return null\n }\n\n return stylesheet\n}\n","import { VNode, cloneElement, createContext } from 'preact'\nimport { PostHog } from '../../posthog-core'\nimport {\n MultipleSurveyQuestion,\n Survey,\n SurveyAppearance,\n SurveyEventName,\n SurveyEventProperties,\n SurveyPosition,\n SurveyQuestion,\n SurveySchedule,\n SurveyType,\n SurveyWidgetType,\n} from '../../posthog-surveys-types'\nimport { document as _document, window as _window, userAgent } from '../../utils/globals'\nimport {\n getSurveyInteractionProperty,\n getSurveySeenKey,\n SURVEY_LOGGER as logger,\n setSurveySeenOnLocalStorage,\n SURVEY_IN_PROGRESS_PREFIX,\n} from '../../utils/survey-utils'\nimport { isArray, isNullish } from '@posthog/core'\n\nimport { detectDeviceType } from '../../utils/user-agent-utils'\nimport { propertyComparisons } from '../../utils/property-utils'\nimport { PropertyMatchType } from '../../types'\nimport { prepareStylesheet } from '../utils/stylesheet-loader'\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window & typeof globalThis\nconst document = _document as Document\nimport surveyStyles from './survey.css'\nimport { useContext } from 'preact/hooks'\n\nexport function getFontFamily(fontFamily?: string): string {\n if (fontFamily === 'inherit') {\n return 'inherit'\n }\n\n const defaultFontStack =\n 'BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"'\n return fontFamily ? `${fontFamily}, ${defaultFontStack}` : `-apple-system, ${defaultFontStack}`\n}\n\nexport function getSurveyResponseKey(questionId: string) {\n return `$survey_response_${questionId}`\n}\n\nconst BLACK_TEXT_COLOR = '#020617' // Maps out to text-slate-950 from tailwind colors. Intended for text use outside interactive elements like buttons\n\n// Keep in sync with defaultSurveyAppearance on the main app\nexport const defaultSurveyAppearance = {\n fontFamily: 'inherit',\n backgroundColor: '#eeeded',\n submitButtonColor: 'black',\n submitButtonTextColor: 'white',\n ratingButtonColor: 'white',\n ratingButtonActiveColor: 'black',\n borderColor: '#c9c6c6',\n placeholder: 'Start typing...',\n whiteLabel: false,\n displayThankYouMessage: true,\n thankYouMessageHeader: 'Thank you for your feedback!',\n position: SurveyPosition.Right,\n widgetType: SurveyWidgetType.Tab,\n widgetLabel: 'Feedback',\n widgetColor: 'black',\n zIndex: '2147483647',\n disabledButtonOpacity: '0.6',\n maxWidth: '300px',\n textSubtleColor: '#939393',\n boxPadding: '20px 24px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n borderRadius: '10px',\n shuffleQuestions: false,\n surveyPopupDelaySeconds: undefined,\n // Not customizable atm\n outlineColor: 'rgba(59, 130, 246, 0.8)',\n inputBackground: 'white',\n inputTextColor: BLACK_TEXT_COLOR,\n scrollbarThumbColor: 'var(--ph-survey-border-color)',\n scrollbarTrackColor: 'var(--ph-survey-background-color)',\n} as const\n\nexport const addSurveyCSSVariablesToElement = (\n element: HTMLElement,\n type: SurveyType,\n appearance?: SurveyAppearance | null\n) => {\n const effectiveAppearance = { ...defaultSurveyAppearance, ...appearance }\n const hostStyle = element.style\n\n const surveyHasBottomBorder =\n ![SurveyPosition.Center, SurveyPosition.Left, SurveyPosition.Right].includes(effectiveAppearance.position) ||\n (type === SurveyType.Widget && appearance?.widgetType === SurveyWidgetType.Tab)\n\n hostStyle.setProperty('--ph-survey-font-family', getFontFamily(effectiveAppearance.fontFamily))\n hostStyle.setProperty('--ph-survey-box-padding', effectiveAppearance.boxPadding)\n hostStyle.setProperty('--ph-survey-max-width', effectiveAppearance.maxWidth)\n hostStyle.setProperty('--ph-survey-z-index', effectiveAppearance.zIndex)\n hostStyle.setProperty('--ph-survey-border-color', effectiveAppearance.borderColor)\n // Non-bottom surveys or tab surveys have the border bottom\n if (surveyHasBottomBorder) {\n hostStyle.setProperty('--ph-survey-border-radius', effectiveAppearance.borderRadius)\n hostStyle.setProperty('--ph-survey-border-bottom', '1.5px solid var(--ph-survey-border-color)')\n } else {\n hostStyle.setProperty('--ph-survey-border-bottom', 'none')\n hostStyle.setProperty(\n '--ph-survey-border-radius',\n `${effectiveAppearance.borderRadius} ${effectiveAppearance.borderRadius} 0 0`\n )\n }\n hostStyle.setProperty('--ph-survey-background-color', effectiveAppearance.backgroundColor)\n hostStyle.setProperty('--ph-survey-box-shadow', effectiveAppearance.boxShadow)\n hostStyle.setProperty('--ph-survey-disabled-button-opacity', effectiveAppearance.disabledButtonOpacity)\n hostStyle.setProperty('--ph-survey-submit-button-color', effectiveAppearance.submitButtonColor)\n hostStyle.setProperty(\n '--ph-survey-submit-button-text-color',\n appearance?.submitButtonTextColor || getContrastingTextColor(effectiveAppearance.submitButtonColor)\n )\n hostStyle.setProperty('--ph-survey-rating-bg-color', effectiveAppearance.ratingButtonColor)\n hostStyle.setProperty(\n '--ph-survey-rating-text-color',\n getContrastingTextColor(effectiveAppearance.ratingButtonColor)\n )\n hostStyle.setProperty('--ph-survey-rating-active-bg-color', effectiveAppearance.ratingButtonActiveColor)\n hostStyle.setProperty(\n '--ph-survey-rating-active-text-color',\n getContrastingTextColor(effectiveAppearance.ratingButtonActiveColor)\n )\n hostStyle.setProperty(\n '--ph-survey-text-primary-color',\n getContrastingTextColor(effectiveAppearance.backgroundColor)\n )\n hostStyle.setProperty('--ph-survey-text-subtle-color', effectiveAppearance.textSubtleColor)\n hostStyle.setProperty('--ph-widget-color', effectiveAppearance.widgetColor)\n hostStyle.setProperty('--ph-widget-text-color', getContrastingTextColor(effectiveAppearance.widgetColor))\n hostStyle.setProperty('--ph-widget-z-index', effectiveAppearance.zIndex)\n\n // Adjust input/choice background slightly if main background is white\n if (effectiveAppearance.backgroundColor === 'white') {\n hostStyle.setProperty('--ph-survey-input-background', '#f8f8f8')\n }\n\n hostStyle.setProperty('--ph-survey-input-background', effectiveAppearance.inputBackground)\n hostStyle.setProperty('--ph-survey-input-text-color', getContrastingTextColor(effectiveAppearance.inputBackground))\n hostStyle.setProperty('--ph-survey-scrollbar-thumb-color', effectiveAppearance.scrollbarThumbColor)\n hostStyle.setProperty('--ph-survey-scrollbar-track-color', effectiveAppearance.scrollbarTrackColor)\n hostStyle.setProperty('--ph-survey-outline-color', effectiveAppearance.outlineColor)\n}\n\nfunction nameToHex(name: string) {\n return {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n 'indianred ': '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n }[name.toLowerCase()]\n}\n\nfunction hex2rgb(c: string) {\n if (c[0] === '#') {\n const hexColor = c.replace(/^#/, '')\n const r = parseInt(hexColor.slice(0, 2), 16)\n const g = parseInt(hexColor.slice(2, 4), 16)\n const b = parseInt(hexColor.slice(4, 6), 16)\n return 'rgb(' + r + ',' + g + ',' + b + ')'\n }\n return 'rgb(255, 255, 255)'\n}\n\nfunction getContrastingTextColor(color: string = defaultSurveyAppearance.backgroundColor) {\n let rgb\n if (color[0] === '#') {\n rgb = hex2rgb(color)\n }\n if (color.startsWith('rgb')) {\n rgb = color\n }\n // otherwise it's a color name\n const nameColorToHex = nameToHex(color)\n if (nameColorToHex) {\n rgb = hex2rgb(nameColorToHex)\n }\n if (!rgb) {\n return BLACK_TEXT_COLOR\n }\n const colorMatch = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/)\n if (colorMatch) {\n const r = parseInt(colorMatch[1])\n const g = parseInt(colorMatch[2])\n const b = parseInt(colorMatch[3])\n const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))\n return hsp > 127.5 ? BLACK_TEXT_COLOR : 'white'\n }\n return BLACK_TEXT_COLOR\n}\n\nexport function getSurveyStylesheet(posthog?: PostHog) {\n const stylesheet = prepareStylesheet(document, typeof surveyStyles === 'string' ? surveyStyles : '', posthog)\n stylesheet?.setAttribute('data-ph-survey-style', 'true')\n return stylesheet\n}\n\nexport const retrieveSurveyShadow = (\n survey: Pick<Survey, 'id' | 'appearance' | 'type'>,\n posthog?: PostHog,\n element?: Element\n) => {\n const widgetClassName = getSurveyContainerClass(survey)\n const existingDiv = document.querySelector(`.${widgetClassName}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n // If it doesn't exist, create it\n const div = document.createElement('div')\n addSurveyCSSVariablesToElement(div, survey.type, survey.appearance)\n div.className = widgetClassName\n const shadow = div.attachShadow({ mode: 'open' })\n const stylesheet = getSurveyStylesheet(posthog)\n if (stylesheet) {\n const existingStylesheet = shadow.querySelector('style')\n if (existingStylesheet) {\n shadow.removeChild(existingStylesheet)\n }\n shadow.appendChild(stylesheet)\n }\n ;(element ? element : document.body).appendChild(div)\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\ninterface SendSurveyEventArgs {\n responses: Record<string, string | number | string[] | null>\n survey: Survey\n surveySubmissionId: string\n isSurveyCompleted: boolean\n posthog?: PostHog\n}\n\nconst getSurveyResponseValue = (responses: Record<string, string | number | string[] | null>, questionId?: string) => {\n if (!questionId) {\n return null\n }\n const response = responses[getSurveyResponseKey(questionId)]\n if (isArray(response)) {\n return [...response]\n }\n return response\n}\n\nexport const sendSurveyEvent = ({\n responses,\n survey,\n surveySubmissionId,\n posthog,\n isSurveyCompleted,\n}: SendSurveyEventArgs) => {\n if (!posthog) {\n logger.error('[survey sent] event not captured, PostHog instance not found.')\n return\n }\n setSurveySeenOnLocalStorage(survey)\n posthog.capture(SurveyEventName.SENT, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(responses, question.id),\n })),\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: surveySubmissionId,\n [SurveyEventProperties.SURVEY_COMPLETED]: isSurveyCompleted,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...responses,\n $set: {\n [getSurveyInteractionProperty(survey, 'responded')]: true,\n },\n })\n if (isSurveyCompleted) {\n // Only dispatch PHSurveySent if the survey is completed, as that removes the survey from focus\n window.dispatchEvent(new CustomEvent('PHSurveySent', { detail: { surveyId: survey.id } }))\n clearInProgressSurveyState(survey)\n }\n}\n\nexport const dismissedSurveyEvent = (survey: Survey, posthog?: PostHog, readOnly?: boolean) => {\n if (!posthog) {\n logger.error('[survey dismissed] event not captured, PostHog instance not found.')\n return\n }\n if (readOnly) {\n return\n }\n\n const inProgressSurvey = getInProgressSurveyState(survey)\n posthog.capture(SurveyEventName.DISMISSED, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n // check if the survey is partially completed\n [SurveyEventProperties.SURVEY_PARTIALLY_COMPLETED]:\n Object.values(inProgressSurvey?.responses || {}).filter((resp) => !isNullish(resp)).length > 0,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...inProgressSurvey?.responses,\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: inProgressSurvey?.surveySubmissionId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(inProgressSurvey?.responses || {}, question.id),\n })),\n $set: {\n [getSurveyInteractionProperty(survey, 'dismissed')]: true,\n },\n })\n // Clear in-progress state on dismissal\n clearInProgressSurveyState(survey)\n setSurveySeenOnLocalStorage(survey)\n window.dispatchEvent(new CustomEvent('PHSurveyClosed', { detail: { surveyId: survey.id } }))\n}\n\n// Use the Fisher-yates algorithm to shuffle this array\n// https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\nexport const shuffle = (array: any[]) => {\n return array\n .map((a) => ({ sort: Math.floor(Math.random() * 10), value: a }))\n .sort((a, b) => a.sort - b.sort)\n .map((a) => a.value)\n}\n\nconst reverseIfUnshuffled = (unshuffled: any[], shuffled: any[]): any[] => {\n if (unshuffled.length === shuffled.length && unshuffled.every((val, index) => val === shuffled[index])) {\n return shuffled.reverse()\n }\n\n return shuffled\n}\n\nexport const getDisplayOrderChoices = (question: MultipleSurveyQuestion): string[] => {\n if (!question.shuffleOptions) {\n return question.choices\n }\n\n const displayOrderChoices = question.choices\n let openEndedChoice = ''\n if (question.hasOpenChoice) {\n // if the question has an open-ended choice, its always the last element in the choices array.\n openEndedChoice = displayOrderChoices.pop()!\n }\n\n const shuffledOptions = reverseIfUnshuffled(displayOrderChoices, shuffle(displayOrderChoices))\n\n if (question.hasOpenChoice) {\n question.choices.push(openEndedChoice)\n shuffledOptions.push(openEndedChoice)\n }\n\n return shuffledOptions\n}\n\nexport const getDisplayOrderQuestions = (survey: Survey): SurveyQuestion[] => {\n if (!survey.appearance || !survey.appearance.shuffleQuestions || survey.enable_partial_responses) {\n return survey.questions\n }\n\n return reverseIfUnshuffled(survey.questions, shuffle(survey.questions))\n}\n\nexport const hasEvents = (survey: Pick<Survey, 'conditions'>): boolean => {\n return survey.conditions?.events?.values?.length != undefined && survey.conditions?.events?.values?.length > 0\n}\n\nexport const canActivateRepeatedly = (\n survey: Pick<Survey, 'schedule' | 'conditions' | 'id' | 'current_iteration'>\n): boolean => {\n return (\n !!(survey.conditions?.events?.repeatedActivation && hasEvents(survey)) ||\n survey.schedule === SurveySchedule.Always ||\n isSurveyInProgress(survey)\n )\n}\n\n/**\n * getSurveySeen checks local storage for the surveySeen Key a\n * and overrides this value if the survey can be repeatedly activated by its events.\n * @param survey\n */\nexport const getSurveySeen = (survey: Survey): boolean => {\n const surveySeen = localStorage.getItem(getSurveySeenKey(survey))\n if (surveySeen) {\n // if a survey has already been seen,\n // we will override it with the event repeated activation value.\n return !canActivateRepeatedly(survey)\n }\n\n return false\n}\n\nconst LAST_SEEN_SURVEY_DATE_KEY = 'lastSeenSurveyDate'\n\nexport const hasWaitPeriodPassed = (waitPeriodInDays: number | undefined): boolean => {\n const lastSeenSurveyDate = localStorage.getItem(LAST_SEEN_SURVEY_DATE_KEY)\n if (!waitPeriodInDays || !lastSeenSurveyDate) {\n return true\n }\n\n const today = new Date()\n const diff = Math.abs(today.getTime() - new Date(lastSeenSurveyDate).getTime())\n const diffDaysFromToday = Math.ceil(diff / (1000 * 3600 * 24))\n return diffDaysFromToday > waitPeriodInDays\n}\n\ninterface SurveyContextProps {\n isPreviewMode: boolean\n previewPageIndex: number | undefined\n onPopupSurveyDismissed: () => void\n isPopup: boolean\n onPreviewSubmit: (res: string | string[] | number | null) => void\n surveySubmissionId: string\n}\n\nexport const SurveyContext = createContext<SurveyContextProps>({\n isPreviewMode: false,\n previewPageIndex: 0,\n onPopupSurveyDismissed: () => {},\n isPopup: true,\n onPreviewSubmit: () => {},\n surveySubmissionId: '',\n})\n\nexport const useSurveyContext = () => {\n return useContext(SurveyContext)\n}\n\ninterface RenderProps {\n component: VNode<{ className: string }>\n children: string\n renderAsHtml?: boolean\n style?: React.CSSProperties\n}\n\nexport const renderChildrenAsTextOrHtml = ({ component, children, renderAsHtml, style }: RenderProps) => {\n return renderAsHtml\n ? cloneElement(component, {\n dangerouslySetInnerHTML: { __html: children },\n style,\n })\n : cloneElement(component, {\n children,\n style,\n })\n}\n\nfunction defaultMatchType(matchType?: PropertyMatchType): PropertyMatchType {\n return matchType ?? 'icontains'\n}\n\n// use urlMatchType to validate url condition, fallback to contains for backwards compatibility\nexport function doesSurveyUrlMatch(survey: Pick<Survey, 'conditions'>): boolean {\n if (!survey.conditions?.url) {\n return true\n }\n // if we dont know the url, assume it is not a match\n const href = window?.location?.href\n if (!href) {\n return false\n }\n const targets = [survey.conditions.url]\n const matchType = defaultMatchType(survey.conditions?.urlMatchType)\n return propertyComparisons[matchType](targets, [href])\n}\n\nexport function doesSurveyDeviceTypesMatch(survey: Survey): boolean {\n if (!survey.conditions?.deviceTypes || survey.conditions?.deviceTypes.length === 0) {\n return true\n }\n // if we dont know the device type, assume it is not a match\n if (!userAgent) {\n return false\n }\n\n const deviceType = detectDeviceType(userAgent)\n return propertyComparisons[defaultMatchType(survey.conditions?.deviceTypesMatchType)](\n survey.conditions.deviceTypes,\n [deviceType]\n )\n}\n\nexport function doesSurveyMatchSelector(survey: Survey): boolean {\n if (!survey.conditions?.selector) {\n return true\n }\n return !!document?.querySelector(survey.conditions.selector)\n}\n\ninterface InProgressSurveyState {\n surveySubmissionId: string\n lastQuestionIndex: number\n responses: Record<string, string | number | string[] | null>\n}\n\nconst getInProgressSurveyStateKey = (survey: Pick<Survey, 'id' | 'current_iteration'>): string => {\n let key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}_${survey.current_iteration}`\n }\n return key\n}\n\nexport const setInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>,\n state: InProgressSurveyState\n): void => {\n try {\n localStorage.setItem(getInProgressSurveyStateKey(survey), JSON.stringify(state))\n } catch (e) {\n logger.error('Error setting in-progress survey state in localStorage', e)\n }\n}\n\nexport const getInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>\n): InProgressSurveyState | null => {\n try {\n const stateString = localStorage.getItem(getInProgressSurveyStateKey(survey))\n if (stateString) {\n return JSON.parse(stateString) as InProgressSurveyState\n }\n } catch (e) {\n logger.error('Error getting in-progress survey state from localStorage', e)\n }\n return null\n}\n\nexport const isSurveyInProgress = (survey: Pick<Survey, 'id' | 'current_iteration'>): boolean => {\n const state = getInProgressSurveyState(survey)\n return !isNullish(state?.surveySubmissionId)\n}\n\nexport const clearInProgressSurveyState = (survey: Pick<Survey, 'id' | 'current_iteration'>): void => {\n try {\n localStorage.removeItem(getInProgressSurveyStateKey(survey))\n } catch (e) {\n logger.error('Error clearing in-progress survey state from localStorage', e)\n }\n}\n\nexport function getSurveyContainerClass(survey: Pick<Survey, 'id'>, asSelector = false): string {\n const className = `PostHogSurvey-${survey.id}`\n return asSelector ? `.${className}` : className\n}\n","export const satisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M626-533q22.5 0 38.25-15.75T680-587q0-22.5-15.75-38.25T626-641q-22.5 0-38.25 15.75T572-587q0 22.5 15.75 38.25T626-533Zm-292 0q22.5 0 38.25-15.75T388-587q0-22.5-15.75-38.25T334-641q-22.5 0-38.25 15.75T280-587q0 22.5 15.75 38.25T334-533Zm146 272q66 0 121.5-35.5T682-393h-52q-23 40-63 61.5T480.5-310q-46.5 0-87-21T331-393h-53q26 61 81 96.5T480-261Zm0 181q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const neutralEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M626-533q22.5 0 38.25-15.75T680-587q0-22.5-15.75-38.25T626-641q-22.5 0-38.25 15.75T572-587q0 22.5 15.75 38.25T626-533Zm-292 0q22.5 0 38.25-15.75T388-587q0-22.5-15.75-38.25T334-641q-22.5 0-38.25 15.75T280-587q0 22.5 15.75 38.25T334-533Zm20 194h253v-49H354v49ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const dissatisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M626-533q22.5 0 38.25-15.75T680-587q0-22.5-15.75-38.25T626-641q-22.5 0-38.25 15.75T572-587q0 22.5 15.75 38.25T626-533Zm-292 0q22.5 0 38.25-15.75T388-587q0-22.5-15.75-38.25T334-641q-22.5 0-38.25 15.75T280-587q0 22.5 15.75 38.25T334-533Zm146.174 116Q413-417 358.5-379.5T278-280h53q22-42 62.173-65t87.5-23Q528-368 567.5-344.5T630-280h52q-25-63-79.826-100-54.826-37-122-37ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const veryDissatisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M480-417q-67 0-121.5 37.5T278-280h404q-25-63-80-100t-122-37Zm-183-72 50-45 45 45 31-36-45-45 45-45-31-36-45 45-50-45-31 36 45 45-45 45 31 36Zm272 0 44-45 51 45 31-36-45-45 45-45-31-36-51 45-44-45-31 36 44 45-44 45 31 36ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142 0 241-99t99-241q0-142-99-241t-241-99q-142 0-241 99t-99 241q0 142 99 241t241 99Z\" />\n </svg>\n)\nexport const verySatisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M479.504-261Q537-261 585.5-287q48.5-26 78.5-72.4 6-11.6-.75-22.6-6.75-11-20.25-11H316.918Q303-393 296.5-382t-.5 22.6q30 46.4 78.5 72.4 48.5 26 105.004 26ZM347-578l27 27q7.636 8 17.818 8Q402-543 410-551q8-8 8-18t-8-18l-42-42q-8.8-9-20.9-9-12.1 0-21.1 9l-42 42q-8 7.636-8 17.818Q276-559 284-551q8 8 18 8t18-8l27-27Zm267 0 27 27q7.714 8 18 8t18-8q8-7.636 8-17.818Q685-579 677-587l-42-42q-8.8-9-20.9-9-12.1 0-21.1 9l-42 42q-8 7.714-8 18t8 18q7.636 8 17.818 8Q579-543 587-551l27-27ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const cancelSVG = (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-labelledby=\"close-survey-title\"\n >\n <title id=\"close-survey-title\">Close survey</title>\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.164752 0.164752C0.384422 -0.0549175 0.740578 -0.0549175 0.960248 0.164752L6 5.20451L11.0398 0.164752C11.2594 -0.0549175 11.6156 -0.0549175 11.8352 0.164752C12.0549 0.384422 12.0549 0.740578 11.8352 0.960248L6.79549 6L11.8352 11.0398C12.0549 11.2594 12.0549 11.6156 11.8352 11.8352C11.6156 12.0549 11.2594 12.0549 11.0398 11.8352L6 6.79549L0.960248 11.8352C0.740578 12.0549 0.384422 12.0549 0.164752 11.8352C-0.0549175 11.6156 -0.0549175 11.2594 0.164752 11.0398L5.20451 6L0.164752 0.960248C-0.0549175 0.740578 -0.0549175 0.384422 0.164752 0.164752Z\"\n fill=\"black\"\n />\n </svg>\n)\nexport const IconPosthogLogo = (\n <svg width=\"77\" height=\"14\" viewBox=\"0 0 77 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_2415_6911)\">\n <mask\n id=\"mask0_2415_6911\"\n style={{ maskType: 'luminance' }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"77\"\n height=\"14\"\n >\n <path d=\"M0.5 0H76.5V14H0.5V0Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_2415_6911)\">\n <path\n d=\"M5.77226 8.02931C5.59388 8.37329 5.08474 8.37329 4.90634 8.02931L4.4797 7.20672C4.41155 7.07535 4.41155 6.9207 4.4797 6.78933L4.90634 5.96669C5.08474 5.62276 5.59388 5.62276 5.77226 5.96669L6.19893 6.78933C6.26709 6.9207 6.26709 7.07535 6.19893 7.20672L5.77226 8.02931ZM5.77226 12.6946C5.59388 13.0386 5.08474 13.0386 4.90634 12.6946L4.4797 11.872C4.41155 11.7406 4.41155 11.586 4.4797 11.4546L4.90634 10.632C5.08474 10.288 5.59388 10.288 5.77226 10.632L6.19893 11.4546C6.26709 11.586 6.26709 11.7406 6.19893 11.872L5.77226 12.6946Z\"\n fill=\"#1D4AFF\"\n />\n <path\n d=\"M0.5 10.9238C0.5 10.508 1.02142 10.2998 1.32637 10.5938L3.54508 12.7327C3.85003 13.0267 3.63405 13.5294 3.20279 13.5294H0.984076C0.716728 13.5294 0.5 13.3205 0.5 13.0627V10.9238ZM0.5 8.67083C0.5 8.79459 0.551001 8.91331 0.641783 9.00081L5.19753 13.3927C5.28831 13.4802 5.41144 13.5294 5.53982 13.5294H8.0421C8.47337 13.5294 8.68936 13.0267 8.3844 12.7327L1.32637 5.92856C1.02142 5.63456 0.5 5.84278 0.5 6.25854V8.67083ZM0.5 4.00556C0.5 4.12932 0.551001 4.24802 0.641783 4.33554L10.0368 13.3927C10.1276 13.4802 10.2508 13.5294 10.3791 13.5294H12.8814C13.3127 13.5294 13.5287 13.0267 13.2237 12.7327L1.32637 1.26329C1.02142 0.969312 0.5 1.17752 0.5 1.59327V4.00556ZM5.33931 4.00556C5.33931 4.12932 5.39033 4.24802 5.4811 4.33554L14.1916 12.7327C14.4965 13.0267 15.0179 12.8185 15.0179 12.4028V9.99047C15.0179 9.86671 14.9669 9.74799 14.8762 9.66049L6.16568 1.26329C5.86071 0.969307 5.33931 1.17752 5.33931 1.59327V4.00556ZM11.005 1.26329C10.7 0.969307 10.1786 1.17752 10.1786 1.59327V4.00556C10.1786 4.12932 10.2296 4.24802 10.3204 4.33554L14.1916 8.06748C14.4965 8.36148 15.0179 8.15325 15.0179 7.7375V5.3252C15.0179 5.20144 14.9669 5.08272 14.8762 4.99522L11.005 1.26329Z\"\n fill=\"#F9BD2B\"\n />\n <path\n d=\"M21.0852 10.981L16.5288 6.58843C16.2238 6.29443 15.7024 6.50266 15.7024 6.91841V13.0627C15.7024 13.3205 15.9191 13.5294 16.1865 13.5294H23.2446C23.5119 13.5294 23.7287 13.3205 23.7287 13.0627V12.5032C23.7287 12.2455 23.511 12.0396 23.2459 12.0063C22.4323 11.9042 21.6713 11.546 21.0852 10.981ZM18.0252 12.0365C17.5978 12.0365 17.251 11.7021 17.251 11.2901C17.251 10.878 17.5978 10.5436 18.0252 10.5436C18.4527 10.5436 18.7996 10.878 18.7996 11.2901C18.7996 11.7021 18.4527 12.0365 18.0252 12.0365Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0.5 13.0627C0.5 13.3205 0.716728 13.5294 0.984076 13.5294H3.20279C3.63405 13.5294 3.85003 13.0267 3.54508 12.7327L1.32637 10.5938C1.02142 10.2998 0.5 10.508 0.5 10.9238V13.0627ZM5.33931 5.13191L1.32637 1.26329C1.02142 0.969306 0.5 1.17752 0.5 1.59327V4.00556C0.5 4.12932 0.551001 4.24802 0.641783 4.33554L5.33931 8.86412V5.13191ZM1.32637 5.92855C1.02142 5.63455 0.5 5.84278 0.5 6.25853V8.67083C0.5 8.79459 0.551001 8.91331 0.641783 9.00081L5.33931 13.5294V9.79717L1.32637 5.92855Z\"\n fill=\"#1D4AFF\"\n />\n <path\n d=\"M10.1787 5.3252C10.1787 5.20144 10.1277 5.08272 10.0369 4.99522L6.16572 1.26329C5.8608 0.969306 5.33936 1.17752 5.33936 1.59327V4.00556C5.33936 4.12932 5.39037 4.24802 5.48114 4.33554L10.1787 8.86412V5.3252ZM5.33936 13.5294H8.04214C8.47341 13.5294 8.6894 13.0267 8.38443 12.7327L5.33936 9.79717V13.5294ZM5.33936 5.13191V8.67083C5.33936 8.79459 5.39037 8.91331 5.48114 9.00081L10.1787 13.5294V9.99047C10.1787 9.86671 10.1277 9.74803 10.0369 9.66049L5.33936 5.13191Z\"\n fill=\"#F54E00\"\n />\n <path\n d=\"M29.375 11.6667H31.3636V8.48772H33.0249C34.8499 8.48772 36.0204 7.4443 36.0204 5.83052C36.0204 4.21681 34.8499 3.17334 33.0249 3.17334H29.375V11.6667ZM31.3636 6.84972V4.81136H32.8236C33.5787 4.81136 34.0318 5.19958 34.0318 5.83052C34.0318 6.4615 33.5787 6.84972 32.8236 6.84972H31.3636ZM39.618 11.7637C41.5563 11.7637 42.9659 10.429 42.9659 8.60905C42.9659 6.78905 41.5563 5.45438 39.618 5.45438C37.6546 5.45438 36.2701 6.78905 36.2701 8.60905C36.2701 10.429 37.6546 11.7637 39.618 11.7637ZM38.1077 8.60905C38.1077 7.63838 38.7118 6.97105 39.618 6.97105C40.5116 6.97105 41.1157 7.63838 41.1157 8.60905C41.1157 9.57972 40.5116 10.2471 39.618 10.2471C38.7118 10.2471 38.1077 9.57972 38.1077 8.60905ZM46.1482 11.7637C47.6333 11.7637 48.6402 10.8658 48.6402 9.81025C48.6402 7.33505 45.2294 8.13585 45.2294 7.16518C45.2294 6.8983 45.5189 6.72843 45.9342 6.72843C46.3622 6.72843 46.8782 6.98318 47.0418 7.54132L48.527 6.94678C48.2375 6.06105 47.1677 5.45438 45.8713 5.45438C44.4743 5.45438 43.6058 6.25518 43.6058 7.21372C43.6058 9.53118 46.9663 8.88812 46.9663 9.84665C46.9663 10.1864 46.6391 10.417 46.1482 10.417C45.4434 10.417 44.9525 9.94376 44.8015 9.3735L43.3164 9.93158C43.6436 10.8537 44.6001 11.7637 46.1482 11.7637ZM53.4241 11.606L53.2982 10.0651C53.0843 10.1743 52.8074 10.2106 52.5808 10.2106C52.1278 10.2106 51.8257 9.89523 51.8257 9.34918V7.03172H53.3612V5.55145H51.8257V3.78001H49.9755V5.55145H48.9687V7.03172H49.9755V9.57972C49.9755 11.06 51.0202 11.7637 52.3921 11.7637C52.7696 11.7637 53.122 11.7031 53.4241 11.606ZM59.8749 3.17334V6.47358H56.376V3.17334H54.3874V11.6667H56.376V8.11158H59.8749V11.6667H61.8761V3.17334H59.8749ZM66.2899 11.7637C68.2281 11.7637 69.6378 10.429 69.6378 8.60905C69.6378 6.78905 68.2281 5.45438 66.2899 5.45438C64.3265 5.45438 62.942 6.78905 62.942 8.60905C62.942 10.429 64.3265 11.7637 66.2899 11.7637ZM64.7796 8.60905C64.7796 7.63838 65.3837 6.97105 66.2899 6.97105C67.1835 6.97105 67.7876 7.63838 67.7876 8.60905C67.7876 9.57972 67.1835 10.2471 66.2899 10.2471C65.3837 10.2471 64.7796 9.57972 64.7796 8.60905ZM73.2088 11.4725C73.901 11.4725 74.5177 11.242 74.845 10.8416V11.424C74.845 12.1034 74.2786 12.5767 73.4102 12.5767C72.7935 12.5767 72.2523 12.2854 72.1642 11.788L70.4776 12.0428C70.7042 13.1955 71.925 13.972 73.4102 13.972C75.361 13.972 76.6574 12.8679 76.6574 11.2298V5.55145H74.8324V6.07318C74.4926 5.69705 73.9136 5.45438 73.171 5.45438C71.409 5.45438 70.3014 6.61918 70.3014 8.46345C70.3014 10.3077 71.409 11.4725 73.2088 11.4725ZM72.1012 8.46345C72.1012 7.55345 72.655 6.97105 73.5109 6.97105C74.3793 6.97105 74.9331 7.55345 74.9331 8.46345C74.9331 9.37345 74.3793 9.95585 73.5109 9.95585C72.655 9.95585 72.1012 9.37345 72.1012 8.46345Z\"\n fill=\"currentColor\"\n />\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_2415_6911\">\n <rect width=\"76\" height=\"14\" fill=\"white\" transform=\"translate(0.5)\" />\n </clipPath>\n </defs>\n </svg>\n)\nexport const checkSVG = (\n <svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.30769 10.6923L4.77736 11.2226C4.91801 11.3633 5.10878 11.4423 5.30769 11.4423C5.5066 11.4423 5.69737 11.3633 5.83802 11.2226L5.30769 10.6923ZM15.5303 1.53033C15.8232 1.23744 15.8232 0.762563 15.5303 0.46967C15.2374 0.176777 14.7626 0.176777 14.4697 0.46967L15.5303 1.53033ZM1.53033 5.85429C1.23744 5.56139 0.762563 5.56139 0.46967 5.85429C0.176777 6.14718 0.176777 6.62205 0.46967 6.91495L1.53033 5.85429ZM5.83802 11.2226L15.5303 1.53033L14.4697 0.46967L4.77736 10.162L5.83802 11.2226ZM0.46967 6.91495L4.77736 11.2226L5.83802 10.162L1.53033 5.85429L0.46967 6.91495Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n","import { IconPosthogLogo } from '../icons'\n\nexport function PostHogLogo() {\n return (\n <a href=\"https://posthog.com/surveys\" target=\"_blank\" rel=\"noopener\" className=\"footer-branding\">\n Survey by {IconPosthogLogo}\n </a>\n )\n}\n","import { window } from '../../../utils/globals'\n\nimport { SurveyAppearance } from '../../../posthog-surveys-types'\n\nimport { useContext } from 'preact/hooks'\nimport { SurveyContext } from '../surveys-extension-utils'\nimport { PostHogLogo } from './PostHogLogo'\n\nexport function BottomSection({\n text,\n submitDisabled,\n appearance,\n onSubmit,\n link,\n onPreviewSubmit,\n skipSubmitButton,\n}: {\n text: string\n submitDisabled: boolean\n appearance: SurveyAppearance\n onSubmit: () => void\n link?: string | null\n onPreviewSubmit?: () => void\n skipSubmitButton?: boolean\n}) {\n const { isPreviewMode } = useContext(SurveyContext)\n return (\n <div className=\"bottom-section\">\n {!skipSubmitButton && (\n <button\n className=\"form-submit\"\n disabled={submitDisabled}\n aria-label=\"Submit survey\"\n type=\"button\"\n onClick={() => {\n if (link) {\n window?.open(link)\n }\n if (isPreviewMode) {\n onPreviewSubmit?.()\n } else {\n onSubmit()\n }\n }}\n >\n {text}\n </button>\n )}\n {!appearance.whiteLabel && <PostHogLogo />}\n </div>\n )\n}\n","import { h } from 'preact'\nimport { useContext } from 'preact/hooks'\nimport { SurveyQuestion, SurveyQuestionType } from '../../../posthog-surveys-types'\nimport { cancelSVG } from '../icons'\nimport { SurveyContext, renderChildrenAsTextOrHtml } from '../surveys-extension-utils'\n\nexport function QuestionHeader({\n question,\n forceDisableHtml,\n htmlFor,\n}: {\n question: Pick<SurveyQuestion, 'question' | 'description' | 'descriptionContentType' | 'type'>\n forceDisableHtml: boolean\n htmlFor?: string\n}) {\n const TitleComponent = question.type === SurveyQuestionType.Open ? 'label' : 'h3'\n return (\n <div class=\"question-header\">\n <TitleComponent className=\"survey-question\" htmlFor={htmlFor}>\n {question.question}\n </TitleComponent>\n {question.description &&\n renderChildrenAsTextOrHtml({\n component: h('p', { className: 'survey-question-description' }),\n children: question.description,\n renderAsHtml: !forceDisableHtml && question.descriptionContentType !== 'text',\n })}\n </div>\n )\n}\n\nexport function Cancel({ onClick }: { onClick: () => void }) {\n const { isPreviewMode } = useContext(SurveyContext)\n\n return (\n <button\n className=\"form-cancel\"\n onClick={onClick}\n disabled={isPreviewMode}\n aria-label=\"Close survey\"\n type=\"button\"\n >\n {cancelSVG}\n </button>\n )\n}\n","import { h } from 'preact'\nimport { SurveyAppearance, SurveyQuestionDescriptionContentType } from '../../../posthog-surveys-types'\nimport { renderChildrenAsTextOrHtml } from '../surveys-extension-utils'\nimport { BottomSection } from './BottomSection'\nimport { Cancel } from './QuestionHeader'\n\nimport { useContext, useEffect } from 'preact/hooks'\nimport { SurveyContext } from '../surveys-extension-utils'\nimport { addEventListener } from '../../../utils'\nimport { window as _window } from '../../../utils/globals'\n\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window\n\nexport function ConfirmationMessage({\n header,\n description,\n contentType,\n forceDisableHtml,\n appearance,\n onClose,\n}: {\n header: string\n description: string\n forceDisableHtml: boolean\n contentType?: SurveyQuestionDescriptionContentType\n appearance: SurveyAppearance\n onClose: () => void\n}) {\n const { isPopup } = useContext(SurveyContext)\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === 'Escape') {\n event.preventDefault()\n onClose()\n }\n }\n addEventListener(window, 'keydown', handleKeyDown as EventListener)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [onClose])\n\n return (\n <div className=\"thank-you-message\" role=\"status\" tabIndex={0} aria-atomic=\"true\">\n {isPopup && <Cancel onClick={() => onClose()} />}\n <h3 className=\"thank-you-message-header\">{header}</h3>\n {description &&\n renderChildrenAsTextOrHtml({\n component: h('p', { className: 'thank-you-message-body' }),\n children: description,\n renderAsHtml: !forceDisableHtml && contentType !== 'text',\n })}\n {isPopup && (\n <BottomSection\n text={appearance.thankYouMessageCloseButtonText || 'Close'}\n submitDisabled={false}\n appearance={appearance}\n onSubmit={() => onClose()}\n />\n )}\n </div>\n )\n}\n","import { Fragment } from 'preact'\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport {\n BasicSurveyQuestion,\n LinkSurveyQuestion,\n MultipleSurveyQuestion,\n RatingSurveyQuestion,\n SurveyAppearance,\n SurveyQuestionType,\n} from '../../../posthog-surveys-types'\nimport { isArray, isNull, isNumber, isString } from '@posthog/core'\nimport { dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, veryDissatisfiedEmoji, verySatisfiedEmoji } from '../icons'\nimport { getDisplayOrderChoices, useSurveyContext } from '../surveys-extension-utils'\nimport { BottomSection } from './BottomSection'\nimport { QuestionHeader } from './QuestionHeader'\n\nexport interface CommonQuestionProps {\n forceDisableHtml: boolean\n appearance: SurveyAppearance\n onSubmit: (res: string | string[] | number | null) => void\n onPreviewSubmit: (res: string | string[] | number | null) => void\n initialValue?: string | string[] | number | null\n displayQuestionIndex: number\n}\n\ninterface OpenEndedInputState {\n isSelected: boolean\n inputValue: string\n}\n\nconst isValidStringArray = (value: unknown): value is string[] => {\n return isArray(value) && value.every((item) => isString(item))\n}\n\nconst initializeSelectedChoices = (\n initialValue: string | string[] | number | null | undefined,\n questionType: SurveyQuestionType\n): string | string[] | null => {\n if (isString(initialValue)) {\n return initialValue\n }\n if (isValidStringArray(initialValue)) {\n return initialValue\n }\n return questionType === SurveyQuestionType.SingleChoice ? null : []\n}\n\nconst initializeOpenEndedState = (\n initialValue: string | string[] | number | null | undefined,\n choices: string[]\n): OpenEndedInputState => {\n if (isString(initialValue) && !choices.includes(initialValue)) {\n return {\n isSelected: true,\n inputValue: initialValue,\n }\n }\n if (isValidStringArray(initialValue)) {\n const openEndedValue = initialValue.find((choice) => !choices.includes(choice))\n if (openEndedValue) {\n return {\n isSelected: true,\n inputValue: openEndedValue,\n }\n }\n }\n return {\n isSelected: false,\n inputValue: '',\n }\n}\n\nexport function OpenTextQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n onPreviewSubmit,\n displayQuestionIndex,\n initialValue,\n}: CommonQuestionProps & {\n question: BasicSurveyQuestion\n}) {\n const { isPreviewMode } = useSurveyContext()\n const inputRef = useRef<HTMLTextAreaElement>(null)\n const [text, setText] = useState<string>(() => {\n if (isString(initialValue)) {\n return initialValue\n }\n return ''\n })\n\n useEffect(() => {\n setTimeout(() => {\n if (!isPreviewMode) {\n inputRef.current?.focus()\n }\n }, 100)\n }, [isPreviewMode])\n\n const htmlFor = `surveyQuestion${displayQuestionIndex}`\n\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} htmlFor={htmlFor} />\n <textarea\n ref={inputRef}\n id={htmlFor}\n rows={4}\n placeholder={appearance?.placeholder}\n onInput={(e) => {\n setText(e.currentTarget.value)\n e.stopPropagation()\n }}\n onKeyDown={(e) => {\n e.stopPropagation()\n }}\n value={text}\n />\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={!text && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(text)}\n onPreviewSubmit={() => onPreviewSubmit(text)}\n />\n </Fragment>\n )\n}\n\nexport function LinkQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n onPreviewSubmit,\n}: CommonQuestionProps & {\n question: LinkSurveyQuestion\n}) {\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} />\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={false}\n link={question.link}\n appearance={appearance}\n onSubmit={() => onSubmit('link clicked')}\n onPreviewSubmit={() => onPreviewSubmit('link clicked')}\n />\n </Fragment>\n )\n}\n\nexport function RatingQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n onPreviewSubmit,\n initialValue,\n}: CommonQuestionProps & {\n question: RatingSurveyQuestion\n}) {\n const scale = question.scale\n const starting = question.scale === 10 ? 0 : 1\n const [rating, setRating] = useState<number | null>(() => {\n if (isNumber(initialValue)) {\n return initialValue\n }\n if (isArray(initialValue) && initialValue.length > 0 && isNumber(parseInt(initialValue[0]))) {\n return parseInt(initialValue[0])\n }\n if (isString(initialValue) && isNumber(parseInt(initialValue))) {\n return parseInt(initialValue)\n }\n return null\n })\n\n const { isPreviewMode } = useSurveyContext()\n\n const handleSubmit = (num: number) => {\n if (isPreviewMode) {\n return onPreviewSubmit(num)\n }\n return onSubmit(num)\n }\n\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} />\n <div className=\"rating-section\">\n <div className=\"rating-options\">\n {question.display === 'emoji' && (\n <div className=\"rating-options-emoji\">\n {(question.scale === 3 ? threeScaleEmojis : fiveScaleEmojis).map((emoji, idx) => {\n const active = idx + 1 === rating\n return (\n <button\n aria-label={`Rate ${idx + 1}`}\n className={`ratings-emoji question-${displayQuestionIndex}-rating-${idx} ${\n active ? 'rating-active' : ''\n }`}\n value={idx + 1}\n key={idx}\n type=\"button\"\n onClick={() => {\n const response = idx + 1\n setRating(response)\n if (question.skipSubmitButton) {\n handleSubmit(response)\n }\n }}\n >\n {emoji}\n </button>\n )\n })}\n </div>\n )}\n {question.display === 'number' && (\n <div\n className=\"rating-options-number\"\n style={{ gridTemplateColumns: `repeat(${scale - starting + 1}, minmax(0, 1fr))` }}\n >\n {getScaleNumbers(question.scale).map((number, idx) => {\n const active = rating === number\n return (\n <RatingButton\n key={idx}\n displayQuestionIndex={displayQuestionIndex}\n active={active}\n appearance={appearance}\n num={number}\n setActiveNumber={(response) => {\n setRating(response)\n if (question.skipSubmitButton) {\n handleSubmit(response)\n }\n }}\n />\n )\n })}\n </div>\n )}\n </div>\n <div className=\"rating-text\">\n <div>{question.lowerBoundLabel}</div>\n <div>{question.upperBoundLabel}</div>\n </div>\n </div>\n </div>\n <BottomSection\n text={question.buttonText || appearance?.submitButtonText || 'Submit'}\n submitDisabled={isNull(rating) && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(rating)}\n onPreviewSubmit={() => onPreviewSubmit(rating)}\n skipSubmitButton={question.skipSubmitButton}\n />\n </Fragment>\n )\n}\n\nexport function RatingButton({\n num,\n active,\n displayQuestionIndex,\n setActiveNumber,\n}: {\n num: number\n active: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n setActiveNumber: (num: number) => void\n}) {\n return (\n <button\n aria-label={`Rate ${num}`}\n className={`ratings-number question-${displayQuestionIndex}-rating-${num} ${active ? 'rating-active' : ''}`}\n type=\"button\"\n onClick={() => {\n setActiveNumber(num)\n }}\n >\n {num}\n </button>\n )\n}\n\nexport function MultipleChoiceQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n onPreviewSubmit,\n initialValue,\n}: CommonQuestionProps & {\n question: MultipleSurveyQuestion\n}) {\n const openChoiceInputRef = useRef<HTMLInputElement>(null)\n const choices = useMemo(() => getDisplayOrderChoices(question), [question])\n const [selectedChoices, setSelectedChoices] = useState<string | string[] | null>(() =>\n initializeSelectedChoices(initialValue, question.type)\n )\n const [openEndedState, setOpenEndedState] = useState<OpenEndedInputState>(() =>\n initializeOpenEndedState(initialValue, choices)\n )\n\n const { isPreviewMode } = useSurveyContext()\n\n const isSingleChoiceQuestion = question.type === SurveyQuestionType.SingleChoice\n const isMultipleChoiceQuestion = question.type === SurveyQuestionType.MultipleChoice\n\n const shouldSkipSubmit = question.skipSubmitButton && isSingleChoiceQuestion && !question.hasOpenChoice\n\n const handleChoiceChange = (val: string, isOpenChoice: boolean) => {\n if (isOpenChoice) {\n const newOpenSelected = !openEndedState.isSelected\n setOpenEndedState((prev) => ({\n ...prev,\n isSelected: newOpenSelected,\n inputValue: newOpenSelected ? prev.inputValue : '',\n }))\n\n if (isSingleChoiceQuestion) {\n setSelectedChoices('')\n }\n\n // Focus the input when open choice is selected, slight delay because of the animation\n if (newOpenSelected) {\n setTimeout(() => openChoiceInputRef.current?.focus(), 75)\n }\n return\n }\n\n if (isSingleChoiceQuestion) {\n setSelectedChoices(val)\n // Deselect open choice when selecting another option\n setOpenEndedState((prev) => ({\n ...prev,\n isSelected: false,\n inputValue: '',\n }))\n\n if (shouldSkipSubmit) {\n onSubmit(val)\n if (isPreviewMode) {\n onPreviewSubmit(val)\n }\n }\n return\n }\n\n if (isMultipleChoiceQuestion && isArray(selectedChoices)) {\n if (selectedChoices.includes(val)) {\n setSelectedChoices(selectedChoices.filter((choice) => choice !== val))\n } else {\n setSelectedChoices([...selectedChoices, val])\n }\n }\n }\n\n const handleOpenEndedInputChange = (e: React.FormEvent<HTMLInputElement>) => {\n e.stopPropagation()\n const newValue = e.currentTarget.value\n\n setOpenEndedState((prev) => ({\n ...prev,\n inputValue: newValue,\n }))\n\n if (isSingleChoiceQuestion) {\n setSelectedChoices(newValue)\n }\n }\n\n const handleOpenEndedKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n e.stopPropagation()\n\n // Handle Enter key to submit form if valid\n if (e.key === 'Enter' && !isSubmitDisabled()) {\n e.preventDefault()\n handleSubmit()\n }\n\n // Handle Escape key to clear input and deselect\n if (e.key === 'Escape') {\n e.preventDefault()\n setOpenEndedState((prev) => ({\n ...prev,\n isSelected: false,\n inputValue: '',\n }))\n if (isSingleChoiceQuestion) {\n setSelectedChoices(null)\n }\n }\n }\n\n const isSubmitDisabled = (): boolean => {\n if (question.optional) {\n return false\n }\n if (isNull(selectedChoices)) {\n return true\n }\n if (isArray(selectedChoices)) {\n if (!openEndedState.isSelected && selectedChoices.length === 0) {\n return true\n }\n }\n if (openEndedState.isSelected && openEndedState.inputValue.trim() === '') {\n return true\n }\n return false\n }\n\n const handleSubmit = () => {\n if (openEndedState.isSelected && isMultipleChoiceQuestion) {\n if (isArray(selectedChoices)) {\n isPreviewMode\n ? onPreviewSubmit([...selectedChoices, openEndedState.inputValue])\n : onSubmit([...selectedChoices, openEndedState.inputValue])\n }\n } else {\n isPreviewMode ? onPreviewSubmit(selectedChoices) : onSubmit(selectedChoices)\n }\n }\n\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} />\n <fieldset className=\"multiple-choice-options limit-height\">\n <legend className=\"sr-only\">\n {isMultipleChoiceQuestion ? ' Select all that apply' : ' Select one'}\n </legend>\n {choices.map((choice: string, idx: number) => {\n const isOpenChoice = !!question.hasOpenChoice && idx === question.choices.length - 1\n const inputId = `surveyQuestion${displayQuestionIndex}Choice${idx}`\n const openInputId = `${inputId}Open`\n\n const isChecked = isOpenChoice\n ? openEndedState.isSelected\n : isSingleChoiceQuestion\n ? selectedChoices === choice\n : isArray(selectedChoices) && selectedChoices.includes(choice)\n\n return (\n <label className={isOpenChoice ? 'choice-option-open' : ''} key={idx}>\n <div className=\"response-choice\">\n <input\n type={isSingleChoiceQuestion ? 'radio' : 'checkbox'}\n name={inputId}\n checked={isChecked}\n onChange={() => handleChoiceChange(choice, isOpenChoice)}\n id={inputId}\n aria-controls={openInputId}\n />\n <span>{isOpenChoice ? `${choice}:` : choice}</span>\n </div>\n {isOpenChoice && (\n <input\n type=\"text\"\n ref={openChoiceInputRef}\n id={openInputId}\n name={`question${displayQuestionIndex}Open`}\n value={openEndedState.inputValue}\n onKeyDown={handleOpenEndedKeyDown}\n onInput={handleOpenEndedInputChange}\n onClick={(e) => {\n // Ensure the checkbox/radio gets checked when clicking the input\n if (!openEndedState.isSelected) {\n handleChoiceChange(choice, true)\n }\n e.stopPropagation()\n }}\n aria-label={`${choice} - please specify`}\n />\n )}\n </label>\n )\n })}\n </fieldset>\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={isSubmitDisabled()}\n appearance={appearance}\n onSubmit={handleSubmit}\n onPreviewSubmit={handleSubmit}\n skipSubmitButton={shouldSkipSubmit}\n />\n </Fragment>\n )\n}\n\nconst threeScaleEmojis = [dissatisfiedEmoji, neutralEmoji, satisfiedEmoji]\nconst fiveScaleEmojis = [veryDissatisfiedEmoji, dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, verySatisfiedEmoji]\nconst fiveScaleNumbers = [1, 2, 3, 4, 5]\nconst sevenScaleNumbers = [1, 2, 3, 4, 5, 6, 7]\nconst tenScaleNumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\nfunction getScaleNumbers(scale: number): number[] {\n switch (scale) {\n case 5:\n return fiveScaleNumbers\n case 7:\n return sevenScaleNumbers\n case 10:\n return tenScaleNumbers\n default:\n return fiveScaleNumbers\n }\n}\n","import * as Preact from 'preact'\nimport { useContext, useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport { PostHog } from '../posthog-core'\nimport {\n Survey,\n SurveyCallback,\n SurveyEventName,\n SurveyEventProperties,\n SurveyPosition,\n SurveyQuestion,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveySchedule,\n SurveyType,\n SurveyWidgetType,\n SurveyWithTypeAndAppearance,\n} from '../posthog-surveys-types'\nimport { addEventListener } from '../utils'\nimport { document as _document, window as _window } from '../utils/globals'\nimport {\n doesSurveyActivateByAction,\n doesSurveyActivateByEvent,\n IN_APP_SURVEY_TYPES,\n isSurveyRunning,\n SURVEY_LOGGER as logger,\n} from '../utils/survey-utils'\nimport { isNull, isUndefined } from '@posthog/core'\nimport { uuidv7 } from '../uuidv7'\nimport { ConfirmationMessage } from './surveys/components/ConfirmationMessage'\nimport { Cancel } from './surveys/components/QuestionHeader'\nimport {\n CommonQuestionProps,\n LinkQuestion,\n MultipleChoiceQuestion,\n OpenTextQuestion,\n RatingQuestion,\n} from './surveys/components/QuestionTypes'\nimport {\n canActivateRepeatedly,\n retrieveSurveyShadow,\n defaultSurveyAppearance,\n dismissedSurveyEvent,\n doesSurveyDeviceTypesMatch,\n doesSurveyMatchSelector,\n doesSurveyUrlMatch,\n getDisplayOrderQuestions,\n getInProgressSurveyState,\n getSurveyContainerClass,\n getSurveyResponseKey,\n getSurveySeen,\n hasWaitPeriodPassed,\n isSurveyInProgress,\n sendSurveyEvent,\n setInProgressSurveyState,\n SurveyContext,\n getSurveyStylesheet,\n addSurveyCSSVariablesToElement,\n} from './surveys/surveys-extension-utils'\nimport {\n extractPrefillParamsFromUrl,\n convertPrefillToResponses,\n allRequiredQuestionsFilled,\n} from '../utils/survey-url-prefill'\n\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window & typeof globalThis\nconst document = _document as Document\n\nconst DISPATCH_FEEDBACK_WIDGET_EVENT = 'ph:show_survey_widget'\nconst WIDGET_LISTENER_ATTRIBUTE = 'PHWidgetSurveyClickListener'\n\nfunction getRatingBucketForResponseValue(responseValue: number, scale: number) {\n if (scale === 3) {\n if (responseValue < 1 || responseValue > 3) {\n throw new Error('The response must be in range 1-3')\n }\n\n return responseValue === 1 ? 'negative' : responseValue === 2 ? 'neutral' : 'positive'\n } else if (scale === 5) {\n if (responseValue < 1 || responseValue > 5) {\n throw new Error('The response must be in range 1-5')\n }\n\n return responseValue <= 2 ? 'negative' : responseValue === 3 ? 'neutral' : 'positive'\n } else if (scale === 7) {\n if (responseValue < 1 || responseValue > 7) {\n throw new Error('The response must be in range 1-7')\n }\n\n return responseValue <= 3 ? 'negative' : responseValue === 4 ? 'neutral' : 'positive'\n } else if (scale === 10) {\n if (responseValue < 0 || responseValue > 10) {\n throw new Error('The response must be in range 0-10')\n }\n\n return responseValue <= 6 ? 'detractors' : responseValue <= 8 ? 'passives' : 'promoters'\n }\n\n throw new Error('The scale must be one of: 3, 5, 7, 10')\n}\n\nexport function getNextSurveyStep(\n survey: Survey,\n currentQuestionIndex: number,\n response: string | string[] | number | null\n) {\n const question = survey.questions[currentQuestionIndex]\n const nextQuestionIndex = currentQuestionIndex + 1\n\n if (!question.branching?.type) {\n if (currentQuestionIndex === survey.questions.length - 1) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n\n if (question.branching.type === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n } else if (question.branching.type === SurveyQuestionBranchingType.SpecificQuestion) {\n if (Number.isInteger(question.branching.index)) {\n return question.branching.index\n }\n } else if (question.branching.type === SurveyQuestionBranchingType.ResponseBased) {\n // Single choice\n if (question.type === SurveyQuestionType.SingleChoice) {\n // :KLUDGE: for now, look up the choiceIndex based on the response\n // TODO: once QuestionTypes.MultipleChoiceQuestion is refactored, pass the selected choiceIndex into this method\n let selectedChoiceIndex = question.choices.indexOf(`${response}`)\n\n if (selectedChoiceIndex === -1 && question.hasOpenChoice) {\n // if the response is not found in the choices, it must be the open choice,\n // which is always the last choice\n selectedChoiceIndex = question.choices.length - 1\n }\n\n if (question.branching?.responseValues?.hasOwnProperty(selectedChoiceIndex)) {\n const nextStep = question.branching.responseValues[selectedChoiceIndex]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n } else if (question.type === SurveyQuestionType.Rating) {\n if (typeof response !== 'number' || !Number.isInteger(response)) {\n throw new Error('The response type must be an integer')\n }\n\n const ratingBucket = getRatingBucketForResponseValue(response, question.scale)\n\n if (question.branching?.responseValues?.hasOwnProperty(ratingBucket)) {\n const nextStep = question.branching.responseValues[ratingBucket]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n }\n\n return nextQuestionIndex\n }\n\n logger.warn('Falling back to next question index due to unexpected branching type')\n return nextQuestionIndex\n}\n\nconst SURVEY_NEXT_TO_TRIGGER_PARAMS = {\n ESTIMATED_MIN_HEIGHT: 250,\n HORIZONTAL_PADDING: 20,\n TRIGGER_SPACING: 12,\n} as const\n\nfunction getNextToTriggerPosition(target: HTMLElement, surveyWidth: number): React.CSSProperties | null {\n try {\n const buttonRect = target.getBoundingClientRect()\n const viewportHeight = window.innerHeight\n const viewportWidth = window.innerWidth\n const estimatedMinSurveyHeight = SURVEY_NEXT_TO_TRIGGER_PARAMS.ESTIMATED_MIN_HEIGHT\n const buttonCenterX = buttonRect.left + buttonRect.width / 2\n let left = buttonCenterX - surveyWidth / 2\n const horizontalPadding = SURVEY_NEXT_TO_TRIGGER_PARAMS.HORIZONTAL_PADDING\n if (left + surveyWidth > viewportWidth - horizontalPadding) {\n left = viewportWidth - surveyWidth - horizontalPadding\n }\n if (left < horizontalPadding) {\n left = horizontalPadding\n }\n const spacing = SURVEY_NEXT_TO_TRIGGER_PARAMS.TRIGGER_SPACING\n const spaceBelow = viewportHeight - buttonRect.bottom\n const spaceAbove = buttonRect.top\n const showAbove = spaceBelow < estimatedMinSurveyHeight && spaceAbove > spaceBelow\n\n return {\n position: 'fixed',\n top: showAbove ? 'auto' : `${buttonRect.bottom + spacing}px`,\n left: `${left}px`,\n right: 'auto',\n bottom: showAbove ? `${viewportHeight - buttonRect.top + spacing}px` : 'auto',\n zIndex: defaultSurveyAppearance.zIndex,\n } satisfies React.CSSProperties\n } catch (error) {\n logger.warn('Failed to calculate trigger position:', error)\n return null\n }\n}\n\n// Keep in sync with posthog/constants.py on main repo\nconst SURVEY_TARGETING_FLAG_PREFIX = 'survey-targeting-'\n\nexport class SurveyManager {\n private _posthog: PostHog\n private _surveyInFocus: string | null\n private _surveyTimeouts: Map<string, NodeJS.Timeout> = new Map()\n private _autoSubmitTimeout?: NodeJS.Timeout\n private _widgetSelectorListeners: Map<string, { element: Element; listener: EventListener; survey: Survey }> =\n new Map()\n private _prefillHandledSurveys: Set<string> = new Set()\n\n constructor(posthog: PostHog) {\n this._posthog = posthog\n // This is used to track the survey that is currently in focus. We only show one survey at a time.\n this._surveyInFocus = null\n }\n\n private _clearSurveyTimeout(surveyId: string) {\n const timeout = this._surveyTimeouts.get(surveyId)\n if (timeout) {\n clearTimeout(timeout)\n this._surveyTimeouts.delete(surveyId)\n }\n }\n\n public handlePopoverSurvey = (survey: Survey): void => {\n this._clearSurveyTimeout(survey.id)\n this._addSurveyToFocus(survey)\n const delaySeconds = survey.appearance?.surveyPopupDelaySeconds || 0\n const { shadow } = retrieveSurveyShadow(survey, this._posthog)\n if (delaySeconds <= 0) {\n return Preact.render(\n <SurveyPopup\n posthog={this._posthog}\n survey={survey}\n removeSurveyFromFocus={this._removeSurveyFromFocus}\n />,\n shadow\n )\n }\n const timeoutId = setTimeout(() => {\n if (!doesSurveyUrlMatch(survey)) {\n return this._removeSurveyFromFocus(survey)\n }\n // rendering with surveyPopupDelaySeconds = 0 because we're already handling the timeout here\n Preact.render(\n <SurveyPopup\n posthog={this._posthog}\n survey={{ ...survey, appearance: { ...survey.appearance, surveyPopupDelaySeconds: 0 } }}\n removeSurveyFromFocus={this._removeSurveyFromFocus}\n />,\n shadow\n )\n }, delaySeconds * 1000)\n this._surveyTimeouts.set(survey.id, timeoutId)\n }\n\n private _handleWidget = (survey: Survey): void => {\n // Ensure widget container exists if it doesn't\n const { shadow, isNewlyCreated } = retrieveSurveyShadow(survey, this._posthog)\n\n // If the widget is already rendered, do nothing. Otherwise the widget will be re-rendered every second\n if (!isNewlyCreated) {\n return\n }\n\n Preact.render(<FeedbackWidget posthog={this._posthog} survey={survey} key={survey.id} />, shadow)\n }\n\n private _removeWidgetSelectorListener = (survey: Pick<Survey, 'id' | 'type' | 'appearance'>): void => {\n this._removeSurveyFromDom(survey)\n const existing = this._widgetSelectorListeners.get(survey.id)\n if (existing) {\n existing.element.removeEventListener('click', existing.listener)\n existing.element.removeAttribute(WIDGET_LISTENER_ATTRIBUTE)\n this._widgetSelectorListeners.delete(survey.id)\n logger.info(`Removed click listener for survey ${survey.id}`)\n }\n }\n\n private _manageWidgetSelectorListener = (survey: Survey, selector: string): void => {\n const currentElement = document.querySelector(selector)\n const existingListenerData = this._widgetSelectorListeners.get(survey.id)\n\n if (!currentElement) {\n if (existingListenerData) {\n this._removeWidgetSelectorListener(survey)\n }\n return\n }\n\n this._handleWidget(survey)\n\n if (existingListenerData) {\n // Listener exists, check if element changed\n if (currentElement !== existingListenerData.element) {\n logger.info(`Selector element changed for survey ${survey.id}. Re-attaching listener.`)\n this._removeWidgetSelectorListener(survey)\n // Continue to attach listener to the new element below\n } else {\n // Element is the same, listener already attached, do nothing\n return\n }\n }\n\n // Element found, and no listener attached (or it was just removed from old element)\n if (!currentElement.hasAttribute(WIDGET_LISTENER_ATTRIBUTE)) {\n const listener = (event: Event) => {\n event.stopPropagation() // Prevent bubbling\n\n const positionStyles =\n survey.appearance?.position === SurveyPosition.NextToTrigger\n ? getNextToTriggerPosition(\n event.currentTarget as HTMLElement,\n parseInt(survey.appearance?.maxWidth || defaultSurveyAppearance.maxWidth)\n )\n : {}\n\n window.dispatchEvent(\n new CustomEvent(DISPATCH_FEEDBACK_WIDGET_EVENT, {\n detail: { surveyId: survey.id, position: positionStyles },\n })\n )\n }\n\n addEventListener(currentElement, 'click', listener)\n currentElement.setAttribute(WIDGET_LISTENER_ATTRIBUTE, 'true')\n this._widgetSelectorListeners.set(survey.id, { element: currentElement, listener, survey })\n logger.info(`Attached click listener for feedback button survey ${survey.id}`)\n }\n }\n\n /**\n * Sorts surveys by their appearance delay in ascending order. If a survey does not have an appearance delay,\n * it is considered to have a delay of 0.\n * @param surveys\n * @returns The surveys sorted by their appearance delay\n */\n private _sortSurveysByAppearanceDelay(surveys: Survey[]): Survey[] {\n return surveys.sort((a, b) => {\n const isSurveyInProgressA = isSurveyInProgress(a)\n const isSurveyInProgressB = isSurveyInProgress(b)\n if (isSurveyInProgressA && !isSurveyInProgressB) {\n return -1 // a comes before b (in progress surveys first)\n }\n if (!isSurveyInProgressA && isSurveyInProgressB) {\n return 1 // a comes after b (in progress surveys first)\n }\n const aIsAlways = a.schedule === SurveySchedule.Always\n const bIsAlways = b.schedule === SurveySchedule.Always\n\n if (aIsAlways && !bIsAlways) {\n return 1 // a comes after b\n }\n if (!aIsAlways && bIsAlways) {\n return -1 // a comes before b\n }\n // If both are Always or neither is Always, sort by delay\n return (a.appearance?.surveyPopupDelaySeconds || 0) - (b.appearance?.surveyPopupDelaySeconds || 0)\n })\n }\n\n public renderPopover = (survey: Survey): void => {\n const { shadow } = retrieveSurveyShadow(survey, this._posthog)\n Preact.render(\n <SurveyPopup posthog={this._posthog} survey={survey} removeSurveyFromFocus={this._removeSurveyFromFocus} />,\n shadow\n )\n }\n\n public renderSurvey = (survey: Survey, selector: Element): void => {\n if (this._posthog.config?.surveys?.prefillFromUrl) {\n this._handleUrlPrefill(survey)\n }\n\n Preact.render(\n <SurveyPopup\n posthog={this._posthog}\n survey={survey}\n removeSurveyFromFocus={this._removeSurveyFromFocus}\n isPopup={false}\n />,\n selector\n )\n }\n\n private _handleUrlPrefill(survey: Survey): void {\n // Only handle prefill once per survey session to avoid overwriting in-progress responses\n if (this._prefillHandledSurveys.has(survey.id)) {\n return\n }\n\n try {\n const { params, autoSubmit } = extractPrefillParamsFromUrl(window.location.search)\n\n if (Object.keys(params).length === 0) {\n return\n }\n\n logger.info('[Survey Prefill] Detected URL prefill parameters')\n\n const responses = convertPrefillToResponses(survey, params)\n\n if (Object.keys(responses).length === 0) {\n logger.warn('[Survey Prefill] No valid responses after conversion')\n return\n }\n\n const submissionId = uuidv7()\n\n setInProgressSurveyState(survey, {\n surveySubmissionId: submissionId,\n responses: responses,\n lastQuestionIndex: 0,\n })\n\n logger.info('[Survey Prefill] Stored prefilled responses in localStorage')\n\n const shouldAutoSubmit =\n autoSubmit &&\n this._posthog.config.surveys?.autoSubmitIfComplete &&\n allRequiredQuestionsFilled(survey, responses)\n\n if (shouldAutoSubmit) {\n this._scheduleAutoSubmit(survey, responses, submissionId)\n }\n\n // Mark this survey as having been prefilled\n this._prefillHandledSurveys.add(survey.id)\n } catch (error) {\n logger.error('[Survey Prefill] Error handling URL prefill:', error)\n }\n }\n\n private _scheduleAutoSubmit(survey: Survey, responses: Record<string, any>, submissionId: string): void {\n const delay = this._posthog.config.surveys?.autoSubmitDelay ?? 800\n\n logger.info('[Survey Prefill] Auto-submit scheduled')\n\n this._autoSubmitTimeout = setTimeout(() => {\n logger.info('[Survey Prefill] Auto-submitting survey')\n\n sendSurveyEvent({\n responses,\n survey,\n surveySubmissionId: submissionId,\n posthog: this._posthog,\n isSurveyCompleted: true,\n })\n }, delay)\n }\n\n private _isSurveyFeatureFlagEnabled(flagKey: string | null, flagVariant: string | undefined = undefined) {\n if (!flagKey) {\n return true\n }\n const isFeatureEnabled = !!this._posthog.featureFlags.isFeatureEnabled(flagKey, {\n send_event: !flagKey.startsWith(SURVEY_TARGETING_FLAG_PREFIX),\n })\n let flagVariantCheck = true\n if (flagVariant) {\n const flagVariantValue = this._posthog.featureFlags.getFeatureFlag(flagKey, { send_event: false })\n flagVariantCheck = flagVariantValue === flagVariant || flagVariant === 'any'\n }\n return isFeatureEnabled && flagVariantCheck\n }\n\n private _isSurveyConditionMatched(survey: Survey): boolean {\n if (!survey.conditions) {\n return true\n }\n return doesSurveyUrlMatch(survey) && doesSurveyDeviceTypesMatch(survey) && doesSurveyMatchSelector(survey)\n }\n\n private _internalFlagCheckSatisfied(survey: Survey): boolean {\n return (\n canActivateRepeatedly(survey) ||\n this._isSurveyFeatureFlagEnabled(survey.internal_targeting_flag_key) ||\n isSurveyInProgress(survey)\n )\n }\n\n public checkSurveyEligibility(survey: Survey): { eligible: boolean; reason?: string } {\n const eligibility = { eligible: true, reason: undefined as string | undefined }\n\n if (!isSurveyRunning(survey)) {\n eligibility.eligible = false\n eligibility.reason = `Survey is not running. It was completed on ${survey.end_date}`\n return eligibility\n }\n\n if (!IN_APP_SURVEY_TYPES.includes(survey.type)) {\n eligibility.eligible = false\n eligibility.reason = `Surveys of type ${survey.type} are never eligible to be shown in the app`\n return eligibility\n }\n\n const linkedFlagVariant = survey.conditions?.linkedFlagVariant\n if (!this._isSurveyFeatureFlagEnabled(survey.linked_flag_key, linkedFlagVariant)) {\n eligibility.eligible = false\n if (!linkedFlagVariant) {\n eligibility.reason = `Survey linked feature flag is not enabled`\n } else {\n eligibility.reason = `Survey linked feature flag is not enabled for variant ${linkedFlagVariant}`\n }\n return eligibility\n }\n\n if (!this._isSurveyFeatureFlagEnabled(survey.targeting_flag_key)) {\n eligibility.eligible = false\n eligibility.reason = `Survey targeting feature flag is not enabled`\n return eligibility\n }\n\n if (!this._internalFlagCheckSatisfied(survey)) {\n eligibility.eligible = false\n eligibility.reason =\n 'Survey internal targeting flag is not enabled and survey cannot activate repeatedly and survey is not in progress'\n return eligibility\n }\n\n if (!hasWaitPeriodPassed(survey.conditions?.seenSurveyWaitPeriodInDays)) {\n eligibility.eligible = false\n eligibility.reason = `Survey wait period has not passed`\n return eligibility\n }\n\n if (getSurveySeen(survey)) {\n eligibility.eligible = false\n eligibility.reason = `Survey has already been seen and it can't be activated again`\n return eligibility\n }\n\n return eligibility\n }\n\n /**\n * Surveys can be activated by events or actions. This method checks if the survey has events and actions,\n * and if so, it checks if the survey has been activated.\n * @param survey\n */\n private _hasActionOrEventTriggeredSurvey(survey: Survey): boolean {\n if (!doesSurveyActivateByEvent(survey) && !doesSurveyActivateByAction(survey)) {\n // If survey doesn't depend on events/actions, it's considered \"triggered\" by default\n return true\n }\n const surveysActivatedByEventsOrActions: string[] | undefined =\n this._posthog.surveys._surveyEventReceiver?.getSurveys()\n return !!surveysActivatedByEventsOrActions?.includes(survey.id)\n }\n\n private _checkFlags(survey: Survey): boolean {\n if (!survey.feature_flag_keys?.length) {\n return true\n }\n\n return survey.feature_flag_keys.every(({ key, value }) => {\n if (!key || !value) {\n return true\n }\n return this._isSurveyFeatureFlagEnabled(value)\n })\n }\n\n public getActiveMatchingSurveys = (callback: SurveyCallback, forceReload = false): void => {\n this._posthog?.surveys.getSurveys((surveys) => {\n const targetingMatchedSurveys = surveys.filter((survey) => {\n const eligibility = this.checkSurveyEligibility(survey)\n return (\n eligibility.eligible &&\n this._isSurveyConditionMatched(survey) &&\n this._hasActionOrEventTriggeredSurvey(survey) &&\n this._checkFlags(survey)\n )\n })\n\n callback(targetingMatchedSurveys)\n }, forceReload)\n }\n\n public callSurveysAndEvaluateDisplayLogic = (forceReload: boolean = false): void => {\n this.getActiveMatchingSurveys((surveys) => {\n const inAppSurveysWithDisplayLogic = surveys.filter(\n (survey) => survey.type === SurveyType.Popover || survey.type === SurveyType.Widget\n )\n\n // Create a queue of surveys sorted by their appearance delay. We will evaluate the display logic\n // for each survey in the queue in order, and only display one survey at a time.\n const inAppSurveysQueue = this._sortSurveysByAppearanceDelay(inAppSurveysWithDisplayLogic)\n\n // Keep track of surveys processed this cycle to remove listeners for inactive ones\n const activeSelectorSurveys = new Set<string>()\n\n inAppSurveysQueue.forEach((survey) => {\n // Widget Type Logic\n if (survey.type === SurveyType.Widget) {\n if (survey.appearance?.widgetType === SurveyWidgetType.Tab) {\n this._handleWidget(survey)\n return\n }\n\n // For selector widget types, we need to manage the listener attachment/detachment dynamically\n if (\n survey.appearance?.widgetType === SurveyWidgetType.Selector &&\n survey.appearance?.widgetSelector\n ) {\n activeSelectorSurveys.add(survey.id)\n this._manageWidgetSelectorListener(survey, survey.appearance?.widgetSelector)\n }\n }\n\n // Popover Type Logic (only one shown at a time)\n if (isNull(this._surveyInFocus) && survey.type === SurveyType.Popover) {\n this.handlePopoverSurvey(survey)\n }\n })\n\n // Clean up listeners for surveys that are no longer active or matched\n this._widgetSelectorListeners.forEach(({ survey }) => {\n if (!activeSelectorSurveys.has(survey.id)) {\n this._removeWidgetSelectorListener(survey)\n }\n })\n }, forceReload)\n }\n\n private _addSurveyToFocus = (survey: Pick<Survey, 'id'>): void => {\n if (!isNull(this._surveyInFocus)) {\n logger.error(`Survey ${this._surveyInFocus} already in focus. Cannot add survey ${survey.id}.`)\n }\n this._surveyInFocus = survey.id\n }\n\n private _removeSurveyFromDom(survey: Pick<Survey, 'id' | 'type' | 'appearance'>): void {\n try {\n const shadowContainer = document.querySelector(getSurveyContainerClass(survey, true))\n if (shadowContainer?.shadowRoot) {\n Preact.render(null, shadowContainer.shadowRoot)\n }\n shadowContainer?.remove()\n } catch (error) {\n logger.warn(`Failed to remove survey ${survey.id} from DOM:`, error)\n }\n }\n\n private _removeSurveyFromFocus = (survey: SurveyWithTypeAndAppearance): void => {\n if (this._surveyInFocus !== survey.id) {\n logger.error(`Survey ${survey.id} is not in focus. Cannot remove survey ${survey.id}.`)\n }\n this._clearSurveyTimeout(survey.id)\n this._clearAutoSubmitTimeout()\n this._surveyInFocus = null\n this._removeSurveyFromDom(survey)\n }\n\n private _clearAutoSubmitTimeout(): void {\n if (this._autoSubmitTimeout) {\n clearTimeout(this._autoSubmitTimeout)\n this._autoSubmitTimeout = undefined\n }\n }\n\n // Expose internal state and methods for testing\n public getTestAPI() {\n return {\n addSurveyToFocus: this._addSurveyToFocus,\n removeSurveyFromFocus: this._removeSurveyFromFocus,\n surveyInFocus: this._surveyInFocus,\n surveyTimeouts: this._surveyTimeouts,\n handleWidget: this._handleWidget,\n handlePopoverSurvey: this.handlePopoverSurvey,\n manageWidgetSelectorListener: this._manageWidgetSelectorListener,\n sortSurveysByAppearanceDelay: this._sortSurveysByAppearanceDelay,\n checkFlags: this._checkFlags.bind(this),\n isSurveyFeatureFlagEnabled: this._isSurveyFeatureFlagEnabled.bind(this),\n }\n }\n}\n\nconst DEFAULT_PREVIEW_POSITION_STYLES: React.CSSProperties = {\n position: 'relative',\n left: 'unset',\n right: 'unset',\n top: 'unset',\n bottom: 'unset',\n transform: 'unset',\n}\n\nexport const renderSurveysPreview = ({\n survey,\n parentElement,\n previewPageIndex,\n forceDisableHtml,\n onPreviewSubmit,\n positionStyles = DEFAULT_PREVIEW_POSITION_STYLES,\n}: {\n survey: Survey\n parentElement: HTMLElement\n previewPageIndex: number\n forceDisableHtml?: boolean\n onPreviewSubmit?: (res: string | string[] | number | null) => void\n posthog?: PostHog\n positionStyles?: React.CSSProperties\n}) => {\n const currentStyle = parentElement.querySelector('style[data-ph-survey-style]')\n if (currentStyle) {\n currentStyle.remove()\n }\n const stylesheet = getSurveyStylesheet()\n if (stylesheet) {\n parentElement.appendChild(stylesheet)\n addSurveyCSSVariablesToElement(parentElement, survey.type, survey.appearance)\n }\n Preact.render(\n <SurveyPopup\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={positionStyles}\n onPreviewSubmit={onPreviewSubmit}\n previewPageIndex={previewPageIndex}\n removeSurveyFromFocus={() => {}}\n />,\n parentElement\n )\n}\n\nexport const renderFeedbackWidgetPreview = ({\n survey,\n root,\n forceDisableHtml,\n}: {\n survey: Survey\n root: HTMLElement\n forceDisableHtml?: boolean\n}) => {\n const stylesheet = getSurveyStylesheet()\n if (stylesheet) {\n root.appendChild(stylesheet)\n addSurveyCSSVariablesToElement(root, survey.type, survey.appearance)\n }\n\n Preact.render(<FeedbackWidget forceDisableHtml={forceDisableHtml} survey={survey} readOnly={true} />, root)\n}\n\n// This is the main exported function\nexport function generateSurveys(posthog: PostHog, isSurveysEnabled: boolean | undefined) {\n // NOTE: Important to ensure we never try and run surveys without a window environment\n if (!document || !window) {\n return\n }\n\n const surveyManager = new SurveyManager(posthog)\n if (posthog.config.disable_surveys_automatic_display) {\n logger.info('Surveys automatic display is disabled. Skipping call surveys and evaluate display logic.')\n return surveyManager\n }\n\n // NOTE: The `generateSurveys` function used to accept just a single parameter, without any `isSurveysEnabled` parameter.\n // To keep compatibility with old clients, we'll consider `undefined` the same as `true`\n if (isSurveysEnabled === false) {\n logger.info('There are no surveys to load or Surveys is disabled in the project settings.')\n return surveyManager\n }\n\n surveyManager.callSurveysAndEvaluateDisplayLogic(true)\n\n let intervalId: number | undefined\n\n const startInterval = () => {\n if (!isUndefined(intervalId)) {\n return\n }\n intervalId = setInterval(() => {\n surveyManager.callSurveysAndEvaluateDisplayLogic(false)\n }, 1000) as unknown as number\n }\n\n const stopInterval = () => {\n if (!isUndefined(intervalId)) {\n clearInterval(intervalId)\n intervalId = undefined\n }\n }\n\n startInterval()\n\n addEventListener(document, 'visibilitychange', () => {\n if (document.hidden) {\n stopInterval()\n } else {\n surveyManager.callSurveysAndEvaluateDisplayLogic(false)\n startInterval()\n }\n })\n\n return surveyManager\n}\n\ntype UseHideSurveyOnURLChangeProps = {\n survey: Pick<Survey, 'id' | 'conditions' | 'type' | 'appearance'>\n removeSurveyFromFocus?: (survey: SurveyWithTypeAndAppearance) => void\n setSurveyVisible: (visible: boolean) => void\n isPreviewMode?: boolean\n}\n\n/**\n * This hook handles URL-based survey visibility after the initial mount.\n * The initial URL check is handled by the `getActiveMatchingSurveys` method in the `PostHogSurveys` class,\n * which ensures the URL matches before displaying a survey for the first time.\n * That is the method that is called every second to see if there's a matching survey.\n *\n * This separation of concerns means:\n * 1. Initial URL matching is done by `getActiveMatchingSurveys` before displaying the survey\n * 2. Subsequent URL changes are handled here to hide the survey as the user navigates\n */\nexport function useHideSurveyOnURLChange({\n survey,\n removeSurveyFromFocus = () => {},\n setSurveyVisible,\n isPreviewMode = false,\n}: UseHideSurveyOnURLChangeProps) {\n useEffect(() => {\n if (isPreviewMode || !survey.conditions?.url) {\n return\n }\n\n const checkUrlMatch = () => {\n const isSurveyTypeWidget = survey.type === SurveyType.Widget\n const doesSurveyMatchUrlCondition = doesSurveyUrlMatch(survey)\n const isSurveyWidgetTypeTab = survey.appearance?.widgetType === SurveyWidgetType.Tab && isSurveyTypeWidget\n\n if (doesSurveyMatchUrlCondition) {\n if (isSurveyWidgetTypeTab) {\n logger.info(`Showing survey ${survey.id} because it is a feedback button tab and URL matches`)\n setSurveyVisible(true)\n }\n return\n }\n\n logger.info(`Hiding survey ${survey.id} because URL does not match`)\n setSurveyVisible(false)\n return removeSurveyFromFocus(survey)\n }\n\n // Listen for browser back/forward browser history changes\n addEventListener(window, 'popstate', checkUrlMatch)\n // Listen for hash changes, for SPA frameworks that use hash-based routing\n // The hashchange event is fired when the fragment identifier of the URL has changed (the part of the URL beginning with and following the # symbol).\n addEventListener(window, 'hashchange', checkUrlMatch)\n\n // Listen for SPA navigation\n const originalPushState = window.history.pushState\n const originalReplaceState = window.history.replaceState\n\n window.history.pushState = function (...args) {\n originalPushState.apply(this, args)\n checkUrlMatch()\n }\n\n window.history.replaceState = function (...args) {\n originalReplaceState.apply(this, args)\n checkUrlMatch()\n }\n\n return () => {\n window.removeEventListener('popstate', checkUrlMatch)\n window.removeEventListener('hashchange', checkUrlMatch)\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n }\n }, [isPreviewMode, survey, removeSurveyFromFocus, setSurveyVisible])\n}\n\nexport function usePopupVisibility(\n survey: Survey,\n posthog: PostHog | undefined,\n millisecondDelay: number,\n isPreviewMode: boolean,\n removeSurveyFromFocus: (survey: SurveyWithTypeAndAppearance) => void,\n surveyContainerRef?: React.RefObject<HTMLDivElement>\n) {\n const [isPopupVisible, setIsPopupVisible] = useState(\n isPreviewMode || millisecondDelay === 0 || survey.type === SurveyType.ExternalSurvey\n )\n const [isSurveySent, setIsSurveySent] = useState(false)\n\n const hidePopupWithViewTransition = () => {\n const removeDOMAndHidePopup = () => {\n if (survey.type === SurveyType.Popover) {\n removeSurveyFromFocus(survey)\n }\n setIsPopupVisible(false)\n }\n\n if (!document.startViewTransition) {\n removeDOMAndHidePopup()\n return\n }\n\n const transition = document.startViewTransition(() => {\n surveyContainerRef?.current?.remove()\n })\n\n transition.finished.then(() => {\n setTimeout(() => {\n removeDOMAndHidePopup()\n }, 100)\n })\n }\n\n const handleSurveyClosed = (event: CustomEvent) => {\n if (event.detail.surveyId !== survey.id) {\n return\n }\n hidePopupWithViewTransition()\n }\n\n useEffect(() => {\n if (!posthog) {\n logger.error('usePopupVisibility hook called without a PostHog instance.')\n return\n }\n if (isPreviewMode) {\n return\n }\n\n const handleSurveySent = (event: CustomEvent) => {\n if (event.detail.surveyId !== survey.id) {\n return\n }\n if (!survey.appearance?.displayThankYouMessage) {\n return hidePopupWithViewTransition()\n }\n setIsSurveySent(true)\n if (survey.appearance?.autoDisappear) {\n setTimeout(() => {\n hidePopupWithViewTransition()\n }, 5000)\n }\n }\n\n const showSurvey = () => {\n // check if the url is still matching, necessary for delayed surveys, as the URL may have changed\n if (!doesSurveyUrlMatch(survey)) {\n return\n }\n setIsPopupVisible(true)\n window.dispatchEvent(new Event('PHSurveyShown'))\n posthog.capture(SurveyEventName.SHOWN, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n })\n localStorage.setItem('lastSeenSurveyDate', new Date().toISOString())\n }\n\n addEventListener(window, 'PHSurveyClosed', handleSurveyClosed as EventListener)\n addEventListener(window, 'PHSurveySent', handleSurveySent as EventListener)\n\n if (millisecondDelay > 0) {\n // This path is only used for direct usage of SurveyPopup,\n // not for surveys managed by SurveyManager\n const timeoutId = setTimeout(showSurvey, millisecondDelay)\n return () => {\n clearTimeout(timeoutId)\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed as EventListener)\n window.removeEventListener('PHSurveySent', handleSurveySent as EventListener)\n }\n } else {\n // This is the path used for surveys managed by SurveyManager\n showSurvey()\n return () => {\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed as EventListener)\n window.removeEventListener('PHSurveySent', handleSurveySent as EventListener)\n }\n }\n }, [])\n\n useHideSurveyOnURLChange({\n survey,\n removeSurveyFromFocus,\n setSurveyVisible: setIsPopupVisible,\n isPreviewMode,\n })\n\n return { isPopupVisible, isSurveySent, setIsPopupVisible, hidePopupWithViewTransition }\n}\n\ninterface SurveyPopupProps {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n style?: React.CSSProperties\n previewPageIndex?: number | undefined\n removeSurveyFromFocus?: (survey: SurveyWithTypeAndAppearance) => void\n isPopup?: boolean\n onPreviewSubmit?: (res: string | string[] | number | null) => void\n onPopupSurveyDismissed?: () => void\n onCloseConfirmationMessage?: () => void\n}\n\nfunction getPopoverPosition(\n type: SurveyType,\n position: SurveyPosition = SurveyPosition.Right,\n surveyWidgetType?: SurveyWidgetType\n) {\n if (type === SurveyType.ExternalSurvey) {\n return {}\n }\n\n switch (position) {\n case SurveyPosition.TopLeft:\n return { top: '0', left: '0', transform: 'translate(30px, 30px)' }\n case SurveyPosition.TopRight:\n return { top: '0', right: '0', transform: 'translate(-30px, 30px)' }\n case SurveyPosition.TopCenter:\n return { top: '0', left: '50%', transform: 'translate(-50%, 30px)' }\n case SurveyPosition.MiddleLeft:\n return { top: '50%', left: '0', transform: 'translate(30px, -50%)' }\n case SurveyPosition.MiddleRight:\n return { top: '50%', right: '0', transform: 'translate(-30px, -50%)' }\n case SurveyPosition.MiddleCenter:\n return { top: '50%', left: '50%', transform: 'translate(-50%, -50%)' }\n case SurveyPosition.Left:\n return { left: '30px' }\n case SurveyPosition.Center:\n return {\n left: '50%',\n transform: 'translateX(-50%)',\n }\n default:\n case SurveyPosition.Right:\n return { right: type === SurveyType.Widget && surveyWidgetType === SurveyWidgetType.Tab ? '60px' : '30px' }\n }\n}\n\nexport function SurveyPopup({\n survey,\n forceDisableHtml,\n posthog,\n style = {},\n previewPageIndex,\n removeSurveyFromFocus = () => {},\n isPopup = true,\n onPreviewSubmit = () => {},\n onPopupSurveyDismissed = () => {},\n onCloseConfirmationMessage = () => {},\n}: SurveyPopupProps) {\n const surveyContainerRef = useRef<HTMLDivElement>(null)\n const isPreviewMode = Number.isInteger(previewPageIndex)\n // NB: The client-side code passes the millisecondDelay in seconds, but setTimeout expects milliseconds, so we multiply by 1000\n const surveyPopupDelayMilliseconds = survey.appearance?.surveyPopupDelaySeconds\n ? survey.appearance.surveyPopupDelaySeconds * 1000\n : 0\n const { isPopupVisible, isSurveySent, hidePopupWithViewTransition } = usePopupVisibility(\n survey,\n posthog,\n surveyPopupDelayMilliseconds,\n isPreviewMode,\n removeSurveyFromFocus,\n surveyContainerRef\n )\n\n const shouldShowConfirmation = isSurveySent || previewPageIndex === survey.questions.length\n const surveyContextValue = useMemo(() => {\n const getInProgressSurvey = getInProgressSurveyState(survey)\n return {\n isPreviewMode,\n previewPageIndex: previewPageIndex,\n onPopupSurveyDismissed: () => {\n dismissedSurveyEvent(survey, posthog, isPreviewMode)\n onPopupSurveyDismissed()\n },\n isPopup: isPopup || false,\n surveySubmissionId: getInProgressSurvey?.surveySubmissionId || uuidv7(),\n onPreviewSubmit,\n posthog,\n }\n }, [isPreviewMode, previewPageIndex, isPopup, posthog, survey, onPopupSurveyDismissed, onPreviewSubmit])\n\n if (!isPopupVisible) {\n return null\n }\n\n return (\n <SurveyContext.Provider value={surveyContextValue}>\n <div\n className=\"ph-survey\"\n style={{\n ...getPopoverPosition(survey.type, survey.appearance?.position, survey.appearance?.widgetType),\n ...style,\n }}\n ref={surveyContainerRef}\n >\n {!shouldShowConfirmation ? (\n <Questions survey={survey} forceDisableHtml={!!forceDisableHtml} posthog={posthog} />\n ) : (\n <ConfirmationMessage\n header={survey.appearance?.thankYouMessageHeader || 'Thank you!'}\n description={survey.appearance?.thankYouMessageDescription || ''}\n forceDisableHtml={!!forceDisableHtml}\n contentType={survey.appearance?.thankYouMessageDescriptionContentType}\n appearance={survey.appearance || defaultSurveyAppearance}\n onClose={() => {\n hidePopupWithViewTransition()\n onCloseConfirmationMessage()\n }}\n />\n )}\n </div>\n </SurveyContext.Provider>\n )\n}\n\nexport function Questions({\n survey,\n forceDisableHtml,\n posthog,\n}: {\n survey: Survey\n forceDisableHtml: boolean\n posthog?: PostHog\n}) {\n // Initialize responses from localStorage or empty object\n const [questionsResponses, setQuestionsResponses] = useState(() => {\n const inProgressSurveyData = getInProgressSurveyState(survey)\n if (inProgressSurveyData?.responses) {\n logger.info('Survey is already in progress, filling in initial responses')\n }\n return inProgressSurveyData?.responses || {}\n })\n const { previewPageIndex, onPopupSurveyDismissed, isPopup, onPreviewSubmit, surveySubmissionId, isPreviewMode } =\n useContext(SurveyContext)\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(() => {\n const inProgressSurveyData = getInProgressSurveyState(survey)\n return previewPageIndex || inProgressSurveyData?.lastQuestionIndex || 0\n })\n const surveyQuestions = useMemo(() => getDisplayOrderQuestions(survey), [survey])\n\n // Sync preview state\n useEffect(() => {\n if (isPreviewMode && !isUndefined(previewPageIndex)) {\n setCurrentQuestionIndex(previewPageIndex)\n }\n }, [previewPageIndex, isPreviewMode])\n\n const onNextButtonClick = ({\n res,\n displayQuestionIndex,\n questionId,\n }: {\n res: string | string[] | number | null\n displayQuestionIndex: number\n questionId?: string\n }) => {\n if (!posthog) {\n logger.error('onNextButtonClick called without a PostHog instance.')\n return\n }\n\n if (!questionId) {\n logger.error('onNextButtonClick called without a questionId.')\n return\n }\n\n const responseKey = getSurveyResponseKey(questionId)\n\n const newResponses = { ...questionsResponses, [responseKey]: res }\n setQuestionsResponses(newResponses)\n\n const nextStep = getNextSurveyStep(survey, displayQuestionIndex, res)\n const isSurveyCompleted = nextStep === SurveyQuestionBranchingType.End\n\n if (!isSurveyCompleted) {\n setCurrentQuestionIndex(nextStep)\n setInProgressSurveyState(survey, {\n surveySubmissionId: surveySubmissionId,\n responses: newResponses,\n lastQuestionIndex: nextStep,\n })\n }\n\n // If partial responses are enabled, send the survey sent event with with the responses,\n // otherwise only send the event when the survey is completed\n if (survey.enable_partial_responses || isSurveyCompleted) {\n sendSurveyEvent({\n responses: newResponses,\n survey,\n surveySubmissionId,\n isSurveyCompleted,\n posthog,\n })\n }\n }\n\n const currentQuestion = surveyQuestions.at(currentQuestionIndex)\n\n if (!currentQuestion) {\n return null\n }\n\n return (\n <form className=\"survey-form\" name=\"surveyForm\">\n {isPopup && (\n <Cancel\n onClick={() => {\n onPopupSurveyDismissed()\n }}\n />\n )}\n <div className=\"survey-box\">\n {getQuestionComponent({\n question: currentQuestion,\n forceDisableHtml,\n displayQuestionIndex: currentQuestionIndex,\n appearance: survey.appearance || defaultSurveyAppearance,\n onSubmit: (res) =>\n onNextButtonClick({\n res,\n displayQuestionIndex: currentQuestionIndex,\n questionId: currentQuestion.id,\n }),\n onPreviewSubmit,\n initialValue: currentQuestion.id\n ? questionsResponses[getSurveyResponseKey(currentQuestion.id)]\n : undefined,\n })}\n </div>\n </form>\n )\n}\n\nexport function FeedbackWidget({\n survey,\n forceDisableHtml,\n posthog,\n readOnly,\n}: {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n readOnly?: boolean\n}): JSX.Element | null {\n const [isFeedbackButtonVisible, setIsFeedbackButtonVisible] = useState(true)\n const [showSurvey, setShowSurvey] = useState(false)\n const [styleOverrides, setStyleOverrides] = useState<React.CSSProperties>({})\n\n const toggleSurvey = () => {\n setShowSurvey(!showSurvey)\n }\n\n useEffect(() => {\n if (!posthog) {\n logger.error('FeedbackWidget called without a PostHog instance.')\n return\n }\n if (readOnly) {\n return\n }\n\n if (survey.appearance?.widgetType === 'tab') {\n setStyleOverrides({\n top: '50%',\n bottom: 'auto',\n })\n }\n const handleShowSurvey = (event: Event) => {\n const customEvent = event as CustomEvent\n // Check if the event is for this specific survey instance\n if (customEvent.detail?.surveyId === survey.id) {\n logger.info(`Received show event for feedback button survey ${survey.id}`)\n setStyleOverrides(customEvent.detail.position || {})\n toggleSurvey()\n }\n }\n\n addEventListener(window, DISPATCH_FEEDBACK_WIDGET_EVENT, handleShowSurvey)\n\n // Cleanup listener on component unmount\n return () => {\n window.removeEventListener(DISPATCH_FEEDBACK_WIDGET_EVENT, handleShowSurvey)\n }\n }, [\n posthog,\n readOnly,\n survey.id,\n survey.appearance?.widgetType,\n survey.appearance?.widgetSelector,\n survey.appearance?.borderColor,\n ])\n\n useHideSurveyOnURLChange({\n survey,\n setSurveyVisible: setIsFeedbackButtonVisible,\n })\n\n if (!isFeedbackButtonVisible) {\n return null\n }\n\n const resetShowSurvey = () => {\n // hide the feedback button after answering or closing the survey if it's not always show\n if (survey.schedule !== SurveySchedule.Always) {\n setIsFeedbackButtonVisible(false)\n }\n // important so our view transition has time to run\n setTimeout(() => {\n setShowSurvey(false)\n }, 200)\n }\n\n return (\n <Preact.Fragment>\n {survey.appearance?.widgetType === 'tab' && (\n <button className=\"ph-survey-widget-tab\" onClick={toggleSurvey} disabled={readOnly}>\n {survey.appearance?.widgetLabel || ''}\n </button>\n )}\n {showSurvey && (\n <SurveyPopup\n posthog={posthog}\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={styleOverrides}\n onPopupSurveyDismissed={resetShowSurvey}\n onCloseConfirmationMessage={resetShowSurvey}\n />\n )}\n </Preact.Fragment>\n )\n}\n\ninterface GetQuestionComponentProps extends CommonQuestionProps {\n question: SurveyQuestion\n displayQuestionIndex: number\n}\n\nconst getQuestionComponent = ({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n onPreviewSubmit,\n initialValue,\n}: GetQuestionComponentProps): JSX.Element | null => {\n const baseProps = {\n forceDisableHtml,\n appearance,\n onPreviewSubmit: (res: string | string[] | number | null) => {\n onPreviewSubmit(res)\n },\n onSubmit: (res: string | string[] | number | null) => {\n onSubmit(res)\n },\n initialValue,\n displayQuestionIndex,\n }\n\n switch (question.type) {\n case SurveyQuestionType.Open:\n return <OpenTextQuestion {...baseProps} question={question} key={question.id} />\n case SurveyQuestionType.Link:\n return <LinkQuestion {...baseProps} question={question} key={question.id} />\n case SurveyQuestionType.Rating:\n return <RatingQuestion {...baseProps} question={question} key={question.id} />\n case SurveyQuestionType.SingleChoice:\n case SurveyQuestionType.MultipleChoice:\n return <MultipleChoiceQuestion {...baseProps} question={question} key={question.id} />\n default:\n logger.error(`Unsupported question type: ${(question as any).type}`)\n return null\n }\n}\n","import { Survey, SurveyQuestion, SurveyQuestionType } from '../posthog-surveys-types'\nimport { getSurveyResponseKey } from '../extensions/surveys/surveys-extension-utils'\nimport { logger } from './logger'\nimport { isUndefined } from '@posthog/core'\n\n/**\n * Extracted URL prefill parameters by question index\n */\nexport interface PrefillParams {\n [questionIndex: number]: string[]\n}\n\n/**\n * Extract prefill parameters from URL search string\n * Format: ?q0=1&q1=8&q2=0&q2=2&auto_submit=true\n * NOTE: Manual parsing for IE11/op_mini compatibility (no URLSearchParams)\n */\nexport function extractPrefillParamsFromUrl(searchString: string): {\n params: PrefillParams\n autoSubmit: boolean\n} {\n const params: PrefillParams = {}\n let autoSubmit = false\n\n // Remove leading ? if present\n const cleanSearch = searchString.replace(/^\\?/, '')\n if (!cleanSearch) {\n return { params, autoSubmit }\n }\n\n // Split by & to get key-value pairs\n const pairs = cleanSearch.split('&')\n\n for (const pair of pairs) {\n const [key, value] = pair.split('=')\n if (!key || isUndefined(value)) {\n continue\n }\n\n const decodedKey = decodeURIComponent(key)\n const decodedValue = decodeURIComponent(value)\n\n // Check for auto_submit parameter\n if (decodedKey === 'auto_submit' && decodedValue === 'true') {\n autoSubmit = true\n continue\n }\n\n // Check for question parameters (q0, q1, etc.)\n const match = decodedKey.match(/^q(\\d+)$/)\n if (match) {\n const questionIndex = parseInt(match[1], 10)\n if (!params[questionIndex]) {\n params[questionIndex] = []\n }\n params[questionIndex].push(decodedValue)\n }\n }\n\n return { params, autoSubmit }\n}\n\n/**\n * Convert URL prefill values to SDK response format\n */\nexport function convertPrefillToResponses(survey: Survey, prefillParams: PrefillParams): Record<string, any> {\n const responses: Record<string, any> = {}\n\n survey.questions.forEach((question: SurveyQuestion, index: number) => {\n if (!prefillParams[index] || !question.id) {\n return\n }\n\n const values = prefillParams[index]\n const responseKey = getSurveyResponseKey(question.id)\n\n try {\n switch (question.type) {\n case SurveyQuestionType.SingleChoice: {\n if (!question.choices || question.choices.length === 0) {\n logger.warn(`[Survey Prefill] Question ${index} has no choices`)\n return\n }\n const choiceIndex = parseInt(values[0], 10)\n if (isNaN(choiceIndex) || choiceIndex < 0 || choiceIndex >= question.choices.length) {\n logger.warn(`[Survey Prefill] Invalid choice index for q${index}: ${values[0]}`)\n return\n }\n responses[responseKey] = question.choices[choiceIndex]\n break\n }\n\n case SurveyQuestionType.MultipleChoice: {\n if (!question.choices || question.choices.length === 0) {\n logger.warn(`[Survey Prefill] Question ${index} has no choices`)\n return\n }\n const choiceIndices = values\n .map((v) => parseInt(v, 10))\n .filter((i) => !isNaN(i) && i >= 0 && i < question.choices.length)\n\n if (choiceIndices.length === 0) {\n logger.warn(`[Survey Prefill] No valid choices for q${index}`)\n return\n }\n\n // Remove duplicates and map to choice values\n const uniqueChoices = [...new Set(choiceIndices.map((i) => question.choices[i]))]\n if (uniqueChoices.length < choiceIndices.length) {\n logger.warn(`[Survey Prefill] Removed duplicate choices for q${index}`)\n }\n responses[responseKey] = uniqueChoices\n break\n }\n\n case SurveyQuestionType.Rating: {\n const rating = parseInt(values[0], 10)\n const scale = question.scale || 10\n\n if (isNaN(rating) || rating < 0 || rating > scale) {\n logger.warn(`[Survey Prefill] Invalid rating for q${index}: ${values[0]} (scale: 0-${scale})`)\n return\n }\n responses[responseKey] = rating\n break\n }\n\n default:\n logger.info(`[Survey Prefill] Question type ${question.type} does not support prefill`)\n }\n } catch (error) {\n logger.error(`[Survey Prefill] Error converting q${index}:`, error)\n }\n })\n\n return responses\n}\n\n/**\n * Check if all REQUIRED questions that support prefill are filled\n */\nexport function allRequiredQuestionsFilled(survey: Survey, responses: Record<string, any>): boolean {\n return survey.questions.every((question: SurveyQuestion) => {\n // Optional questions don't block auto-submit\n if (question.optional) {\n return true\n }\n\n // Link and open questions don't support prefill currently, so they don't block auto-submit\n // If support is added in the future, they will be checked like other question types below\n if (question.type === SurveyQuestionType.Link || question.type === SurveyQuestionType.Open) {\n return true\n }\n\n // Required question must have a valid ID and response\n if (!question.id) {\n return false\n }\n\n const responseKey = getSurveyResponseKey(question.id)\n const hasResponse = responses.hasOwnProperty(responseKey)\n\n // For question types that support prefill, require a response\n return hasResponse\n })\n}\n","import { generateSurveys } from '../extensions/surveys'\n\nimport { assignableWindow } from '../utils/globals'\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.generateSurveys = generateSurveys\n\n// this used to be directly on window, but we moved it to __PosthogExtensions__\n// it is still on window for backwards compatibility\nassignableWindow.extendPostHogWithSurveys = generateSurveys\n\nexport default generateSurveys\n","import { assignableWindow, window } from '../utils/globals'\nimport { ErrorEventArgs } from '../types'\nimport { createLogger } from '../utils/logger'\nimport type { ErrorTracking } from '@posthog/core'\nimport { buildErrorPropertiesBuilder } from '../posthog-exceptions'\n\nconst logger = createLogger('[ExceptionAutocapture]')\nconst errorPropertiesBuilder = buildErrorPropertiesBuilder()\n\nfunction errorToProperties({ event, error }: { event: Event | string; error?: Error }) {\n return errorPropertiesBuilder.buildFromUnknown(error || event, {\n mechanism: {\n handled: false,\n },\n })\n}\n\nconst wrapOnError = (captureFn: (props: ErrorTracking.ErrorProperties) => void) => {\n const win = window as any\n if (!win) {\n logger.info('window not available, cannot wrap onerror')\n }\n const originalOnError = win.onerror\n\n win.onerror = function (...args: ErrorEventArgs): boolean {\n const errorProperties = errorToProperties({ event: args[0], error: args[4] })\n captureFn(errorProperties)\n return originalOnError?.(...args) ?? false\n }\n win.onerror.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete win.onerror?.__POSTHOG_INSTRUMENTED__\n win.onerror = originalOnError\n }\n}\n\nconst wrapUnhandledRejection = (captureFn: (props: ErrorTracking.ErrorProperties) => void) => {\n const win = window as any\n if (!win) {\n logger.info('window not available, cannot wrap onUnhandledRejection')\n }\n\n const originalOnUnhandledRejection = win.onunhandledrejection\n\n win.onunhandledrejection = function (ev: PromiseRejectionEvent): boolean {\n const errorProperties = errorToProperties({ event: ev })\n captureFn(errorProperties)\n return originalOnUnhandledRejection?.apply(win, [ev]) ?? false\n }\n win.onunhandledrejection.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete win.onunhandledrejection?.__POSTHOG_INSTRUMENTED__\n win.onunhandledrejection = originalOnUnhandledRejection\n }\n}\n\nconst wrapConsoleError = (captureFn: (props: ErrorTracking.ErrorProperties) => void) => {\n const con = console as any\n if (!con) {\n logger.info('console not available, cannot wrap console.error')\n }\n\n const originalConsoleError = con.error\n\n con.error = function (...args: any[]): void {\n const event = args.join(' ')\n const error = args.find((arg) => arg instanceof Error)\n const errorProperties = errorToProperties({ error, event })\n captureFn(errorProperties)\n return originalConsoleError?.(...args)\n }\n con.error.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete con.error?.__POSTHOG_INSTRUMENTED__\n con.error = originalConsoleError\n }\n}\n\nconst posthogErrorWrappingFunctions = {\n wrapOnError,\n wrapUnhandledRejection,\n wrapConsoleError,\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.errorWrappingFunctions = posthogErrorWrappingFunctions\n\n// we used to put these on window, and now we put them on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put them directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.posthogErrorWrappingFunctions = posthogErrorWrappingFunctions\n\nexport default posthogErrorWrappingFunctions\n","import { ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS, ERROR_TRACKING_SUPPRESSION_RULES } from './constants'\nimport { PostHog } from './posthog-core'\nimport { CaptureResult, ErrorTrackingSuppressionRule, Properties, RemoteConfig } from './types'\nimport { createLogger } from './utils/logger'\nimport { propertyComparisons } from './utils/property-utils'\nimport { isString, isArray, ErrorTracking, isNullish } from '@posthog/core'\n\nconst logger = createLogger('[Error tracking]')\n\nexport function buildErrorPropertiesBuilder() {\n return new ErrorTracking.ErrorPropertiesBuilder(\n [\n new ErrorTracking.DOMExceptionCoercer(),\n new ErrorTracking.PromiseRejectionEventCoercer(),\n new ErrorTracking.ErrorEventCoercer(),\n new ErrorTracking.ErrorCoercer(),\n new ErrorTracking.EventCoercer(),\n new ErrorTracking.ObjectCoercer(),\n new ErrorTracking.StringCoercer(),\n new ErrorTracking.PrimitiveCoercer(),\n ],\n [ErrorTracking.chromeStackLineParser, ErrorTracking.geckoStackLineParser]\n )\n}\nexport class PostHogExceptions {\n private readonly _instance: PostHog\n private _suppressionRules: ErrorTrackingSuppressionRule[] = []\n private _errorPropertiesBuilder: ErrorTracking.ErrorPropertiesBuilder = buildErrorPropertiesBuilder()\n\n constructor(instance: PostHog) {\n this._instance = instance\n this._suppressionRules = this._instance.persistence?.get_property(ERROR_TRACKING_SUPPRESSION_RULES) ?? []\n }\n\n onRemoteConfig(response: RemoteConfig) {\n const suppressionRules = response.errorTracking?.suppressionRules ?? []\n const captureExtensionExceptions = response.errorTracking?.captureExtensionExceptions\n\n // store this in-memory in case persistence is disabled\n this._suppressionRules = suppressionRules\n\n if (this._instance.persistence) {\n this._instance.persistence.register({\n [ERROR_TRACKING_SUPPRESSION_RULES]: this._suppressionRules,\n [ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS]: captureExtensionExceptions,\n })\n }\n }\n\n private get _captureExtensionExceptions() {\n const enabled_server_side = !!this._instance.get_property(ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS)\n const enabled_client_side = this._instance.config.error_tracking.captureExtensionExceptions\n return enabled_client_side ?? enabled_server_side ?? false\n }\n\n buildProperties(\n input: unknown,\n metadata?: { handled?: boolean; syntheticException?: Error }\n ): ErrorTracking.ErrorProperties {\n return this._errorPropertiesBuilder.buildFromUnknown(input, {\n syntheticException: metadata?.syntheticException,\n mechanism: {\n handled: metadata?.handled,\n },\n })\n }\n\n sendExceptionEvent(properties: Properties): CaptureResult | undefined {\n const exceptionList = properties.$exception_list\n\n if (this._isExceptionList(exceptionList)) {\n if (this._matchesSuppressionRule(exceptionList)) {\n logger.info('Skipping exception capture because a suppression rule matched')\n return\n }\n\n if (!this._captureExtensionExceptions && this._isExtensionException(exceptionList)) {\n logger.info('Skipping exception capture because it was thrown by an extension')\n return\n }\n\n if (\n !this._instance.config.error_tracking.__capturePostHogExceptions &&\n this._isPostHogException(exceptionList)\n ) {\n logger.info('Skipping exception capture because it was thrown by the PostHog SDK')\n return\n }\n }\n\n return this._instance.capture('$exception', properties, {\n _noTruncate: true,\n _batchKey: 'exceptionEvent',\n })\n }\n\n private _matchesSuppressionRule(exceptionList: ErrorTracking.ExceptionList): boolean {\n if (exceptionList.length === 0) {\n return false\n }\n\n const exceptionValues = exceptionList.reduce(\n (acc, { type, value }) => {\n if (isString(type) && type.length > 0) {\n acc['$exception_types'].push(type)\n }\n if (isString(value) && value.length > 0) {\n acc['$exception_values'].push(value)\n }\n return acc\n },\n {\n $exception_types: [] as string[],\n $exception_values: [] as string[],\n }\n )\n\n return this._suppressionRules.some((rule) => {\n const results = rule.values.map((v) => {\n const compare = propertyComparisons[v.operator]\n const targets = isArray(v.value) ? v.value : [v.value]\n const values = exceptionValues[v.key] ?? []\n return targets.length > 0 ? compare(targets, values) : false\n })\n return rule.type === 'OR' ? results.some(Boolean) : results.every(Boolean)\n })\n }\n\n private _isExtensionException(exceptionList: ErrorTracking.ExceptionList): boolean {\n const frames = exceptionList.flatMap((e) => e.stacktrace?.frames ?? [])\n return frames.some((f) => f.filename && f.filename.startsWith('chrome-extension://'))\n }\n\n private _isPostHogException(exceptionList: ErrorTracking.ExceptionList): boolean {\n if (exceptionList.length > 0) {\n const exception = exceptionList[0]\n const frames = exception.stacktrace?.frames ?? []\n const lastFrame = frames[frames.length - 1]\n return lastFrame?.filename?.includes('posthog.com/static') ?? false\n }\n\n return false\n }\n\n private _isExceptionList(candidate: unknown): candidate is ErrorTracking.ExceptionList {\n return !isNullish(candidate) && isArray(candidate)\n }\n}\n","import { SessionIdManager } from '../sessionid'\nimport { patch } from '../extensions/replay/rrweb-plugins/patch'\nimport { assignableWindow, window } from '../utils/globals'\nimport { COOKIELESS_SENTINEL_VALUE } from '../constants'\nimport { isArray } from '@posthog/core'\n\nconst addTracingHeaders = (\n hostnames: string[],\n distinctId: string,\n sessionManager: SessionIdManager | undefined,\n req: Request\n) => {\n let reqHostname: string\n try {\n // we don't need to support IE11 here\n // eslint-disable-next-line compat/compat\n reqHostname = new URL(req.url).hostname\n } catch {\n // If the URL is invalid, we skip adding tracing headers\n return\n }\n if (isArray(hostnames) && !hostnames.includes(reqHostname)) {\n // Skip if the hostname is not in the list (also skip if hostnames is not an array,\n // because in the earliest version of this __add_tracing_headers was a bool)\n return\n }\n\n if (sessionManager) {\n const { sessionId, windowId } = sessionManager.checkAndGetSessionAndWindowId(true)\n req.headers.set('X-POSTHOG-SESSION-ID', sessionId)\n req.headers.set('X-POSTHOG-WINDOW-ID', windowId)\n }\n if (distinctId !== COOKIELESS_SENTINEL_VALUE) {\n req.headers.set('X-POSTHOG-DISTINCT-ID', distinctId)\n }\n}\n\nconst patchFetch = (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager): (() => void) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return patch(window, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n\n addTracingHeaders(hostnames, distinctId, sessionManager, req)\n\n return originalFetch(req)\n }\n })\n}\n\nconst patchXHR = (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager): (() => void) => {\n return patch(\n // we can assert this is present because we've checked previously\n window!.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n\n addTracingHeaders(hostnames, distinctId, sessionManager, req)\n\n return originalOpen.call(xhr, method, req.url, async, username, password)\n }\n }\n )\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nconst patchFns = {\n _patchFetch: patchFetch,\n _patchXHR: patchXHR,\n}\nassignableWindow.__PosthogExtensions__.tracingHeadersPatchFns = patchFns\n\n// we used to put tracingHeadersPatchFns on window, and now we put it on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put it directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.postHogTracingHeadersPatchFns = patchFns\n\nexport default patchFns\n","/*\n * Constants\n */\n\n/* PROPERTY KEYS */\n\n// This key is deprecated, but we want to check for it to see whether aliasing is allowed.\nexport const PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'\nexport const DISTINCT_ID = 'distinct_id'\nexport const ALIAS_ID_KEY = '__alias'\nexport const CAMPAIGN_IDS_KEY = '__cmpns'\nexport const EVENT_TIMERS_KEY = '__timers'\nexport const AUTOCAPTURE_DISABLED_SERVER_SIDE = '$autocapture_disabled_server_side'\nexport const HEATMAPS_ENABLED_SERVER_SIDE = '$heatmaps_enabled_server_side'\nexport const EXCEPTION_CAPTURE_ENABLED_SERVER_SIDE = '$exception_capture_enabled_server_side'\nexport const ERROR_TRACKING_SUPPRESSION_RULES = '$error_tracking_suppression_rules'\nexport const ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS = '$error_tracking_capture_extension_exceptions'\nexport const WEB_VITALS_ENABLED_SERVER_SIDE = '$web_vitals_enabled_server_side'\nexport const DEAD_CLICKS_ENABLED_SERVER_SIDE = '$dead_clicks_enabled_server_side'\nexport const WEB_VITALS_ALLOWED_METRICS = '$web_vitals_allowed_metrics'\nexport const SESSION_RECORDING_REMOTE_CONFIG = '$session_recording_remote_config'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_ENABLED_SERVER_SIDE = '$session_recording_enabled_server_side'\n// @deprecated can be removed along with eager loaded replay\nexport const CONSOLE_LOG_RECORDING_ENABLED_SERVER_SIDE = '$console_log_recording_enabled_server_side'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_NETWORK_PAYLOAD_CAPTURE = '$session_recording_network_payload_capture'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_MASKING = '$session_recording_masking'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_CANVAS_RECORDING = '$session_recording_canvas_recording'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_SAMPLE_RATE = '$replay_sample_rate'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_MINIMUM_DURATION = '$replay_minimum_duration'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_SCRIPT_CONFIG = '$replay_script_config'\nexport const SESSION_RECORDING_OVERRIDE_SAMPLING = '$replay_override_sampling'\nexport const SESSION_RECORDING_OVERRIDE_LINKED_FLAG = '$replay_override_linked_flag'\nexport const SESSION_RECORDING_OVERRIDE_URL_TRIGGER = '$replay_override_url_trigger'\nexport const SESSION_RECORDING_OVERRIDE_EVENT_TRIGGER = '$replay_override_event_trigger'\nexport const SESSION_ID = '$sesid'\nexport const SESSION_RECORDING_IS_SAMPLED = '$session_is_sampled'\nexport const SESSION_RECORDING_PAST_MINIMUM_DURATION = '$session_past_minimum_duration'\nexport const SESSION_RECORDING_URL_TRIGGER_ACTIVATED_SESSION = '$session_recording_url_trigger_activated_session'\nexport const SESSION_RECORDING_EVENT_TRIGGER_ACTIVATED_SESSION = '$session_recording_event_trigger_activated_session'\nexport const ENABLED_FEATURE_FLAGS = '$enabled_feature_flags'\nexport const PERSISTENCE_EARLY_ACCESS_FEATURES = '$early_access_features'\nexport const PERSISTENCE_FEATURE_FLAG_DETAILS = '$feature_flag_details'\nexport const STORED_PERSON_PROPERTIES_KEY = '$stored_person_properties'\nexport const STORED_GROUP_PROPERTIES_KEY = '$stored_group_properties'\nexport const SURVEYS = '$surveys'\nexport const SURVEYS_ACTIVATED = '$surveys_activated'\nexport const FLAG_CALL_REPORTED = '$flag_call_reported'\nexport const USER_STATE = '$user_state'\nexport const CLIENT_SESSION_PROPS = '$client_session_props'\nexport const CAPTURE_RATE_LIMIT = '$capture_rate_limit'\n\n/** @deprecated Delete this when INITIAL_PERSON_INFO has been around for long enough to ignore backwards compat */\nexport const INITIAL_CAMPAIGN_PARAMS = '$initial_campaign_params'\n/** @deprecated Delete this when INITIAL_PERSON_INFO has been around for long enough to ignore backwards compat */\nexport const INITIAL_REFERRER_INFO = '$initial_referrer_info'\nexport const INITIAL_PERSON_INFO = '$initial_person_info'\nexport const ENABLE_PERSON_PROCESSING = '$epp'\nexport const TOOLBAR_ID = '__POSTHOG_TOOLBAR__'\nexport const TOOLBAR_CONTAINER_CLASS = 'toolbar-global-fade-container'\n\n/**\n * PREVIEW - MAY CHANGE WITHOUT WARNING - DO NOT USE IN PRODUCTION\n * Sentinel value for distinct id, device id, session id. Signals that the server should generate the value\n * */\nexport const COOKIELESS_SENTINEL_VALUE = '$posthog_cookieless'\nexport const COOKIELESS_MODE_FLAG_PROPERTY = '$cookieless_mode'\n\nexport const WEB_EXPERIMENTS = '$web_experiments'\n\n// These are properties that are reserved and will not be automatically included in events\nexport const PERSISTENCE_RESERVED_PROPERTIES = [\n PEOPLE_DISTINCT_ID_KEY,\n ALIAS_ID_KEY,\n CAMPAIGN_IDS_KEY,\n EVENT_TIMERS_KEY,\n SESSION_RECORDING_ENABLED_SERVER_SIDE,\n HEATMAPS_ENABLED_SERVER_SIDE,\n SESSION_ID,\n ENABLED_FEATURE_FLAGS,\n ERROR_TRACKING_SUPPRESSION_RULES,\n USER_STATE,\n PERSISTENCE_EARLY_ACCESS_FEATURES,\n PERSISTENCE_FEATURE_FLAG_DETAILS,\n STORED_GROUP_PROPERTIES_KEY,\n STORED_PERSON_PROPERTIES_KEY,\n SURVEYS,\n FLAG_CALL_REPORTED,\n CLIENT_SESSION_PROPS,\n CAPTURE_RATE_LIMIT,\n INITIAL_CAMPAIGN_PARAMS,\n INITIAL_REFERRER_INFO,\n ENABLE_PERSON_PROCESSING,\n INITIAL_PERSON_INFO,\n]\n\nexport const SURVEYS_REQUEST_TIMEOUT_MS = 10000\n","var t,e,n=function(){var t=self.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0];if(t&&t.responseStart>0&&t.responseStart<performance.now())return t},r=function(t){if(\"loading\"===document.readyState)return\"loading\";var e=n();if(e){if(t<e.domInteractive)return\"loading\";if(0===e.domContentLoadedEventStart||t<e.domContentLoadedEventStart)return\"dom-interactive\";if(0===e.domComplete||t<e.domComplete)return\"dom-content-loaded\"}return\"complete\"},i=function(t){var e=t.nodeName;return 1===t.nodeType?e.toLowerCase():e.toUpperCase().replace(/^#/,\"\")},a=function(t,e){var n=\"\";try{for(;t&&9!==t.nodeType;){var r=t,a=r.id?\"#\"+r.id:i(r)+(r.classList&&r.classList.value&&r.classList.value.trim()&&r.classList.value.trim().length?\".\"+r.classList.value.trim().replace(/\\s+/g,\".\"):\"\");if(n.length+a.length>(e||100)-1)return n||a;if(n=n?a+\">\"+n:a,r.id)break;t=r.parentNode}}catch(t){}return n},o=-1,c=function(){return o},u=function(t){addEventListener(\"pageshow\",(function(e){e.persisted&&(o=e.timeStamp,t(e))}),!0)},s=function(){var t=n();return t&&t.activationStart||0},f=function(t,e){var r=n(),i=\"navigate\";c()>=0?i=\"back-forward-cache\":r&&(document.prerendering||s()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":r.type&&(i=r.type.replace(/_/g,\"-\")));return{name:t,value:void 0===e?-1:e,rating:\"good\",delta:0,entries:[],id:\"v4-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},d=function(t,e,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var r=new PerformanceObserver((function(t){Promise.resolve().then((function(){e(t.getEntries())}))}));return r.observe(Object.assign({type:t,buffered:!0},n||{})),r}}catch(t){}},l=function(t,e,n,r){var i,a;return function(o){e.value>=0&&(o||r)&&((a=e.value-(i||0))||void 0===i)&&(i=e.value,e.delta=a,e.rating=function(t,e){return t>e[1]?\"poor\":t>e[0]?\"needs-improvement\":\"good\"}(e.value,n),t(e))}},m=function(t){requestAnimationFrame((function(){return requestAnimationFrame((function(){return t()}))}))},p=function(t){document.addEventListener(\"visibilitychange\",(function(){\"hidden\"===document.visibilityState&&t()}))},v=function(t){var e=!1;return function(){e||(t(),e=!0)}},g=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},T=function(t){\"hidden\"===document.visibilityState&&g>-1&&(g=\"visibilitychange\"===t.type?t.timeStamp:0,E())},y=function(){addEventListener(\"visibilitychange\",T,!0),addEventListener(\"prerenderingchange\",T,!0)},E=function(){removeEventListener(\"visibilitychange\",T,!0),removeEventListener(\"prerenderingchange\",T,!0)},S=function(){return g<0&&(g=h(),y(),u((function(){setTimeout((function(){g=h(),y()}),0)}))),{get firstHiddenTime(){return g}}},b=function(t){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return t()}),!0):t()},L=[1800,3e3],C=function(t,e){e=e||{},b((function(){var n,r=S(),i=f(\"FCP\"),a=d(\"paint\",(function(t){t.forEach((function(t){\"first-contentful-paint\"===t.name&&(a.disconnect(),t.startTime<r.firstHiddenTime&&(i.value=Math.max(t.startTime-s(),0),i.entries.push(t),n(!0)))}))}));a&&(n=l(t,i,L,e.reportAllChanges),u((function(r){i=f(\"FCP\"),n=l(t,i,L,e.reportAllChanges),m((function(){i.value=performance.now()-r.timeStamp,n(!0)}))})))}))},M=[.1,.25],D=function(t,e){!function(t,e){e=e||{},C(v((function(){var n,r=f(\"CLS\",0),i=0,a=[],o=function(t){t.forEach((function(t){if(!t.hadRecentInput){var e=a[0],n=a[a.length-1];i&&t.startTime-n.startTime<1e3&&t.startTime-e.startTime<5e3?(i+=t.value,a.push(t)):(i=t.value,a=[t])}})),i>r.value&&(r.value=i,r.entries=a,n())},c=d(\"layout-shift\",o);c&&(n=l(t,r,M,e.reportAllChanges),p((function(){o(c.takeRecords()),n(!0)})),u((function(){i=0,r=f(\"CLS\",0),n=l(t,r,M,e.reportAllChanges),m((function(){return n()}))})),setTimeout(n,0))})))}((function(e){var n=function(t){var e,n={};if(t.entries.length){var i=t.entries.reduce((function(t,e){return t&&t.value>e.value?t:e}));if(i&&i.sources&&i.sources.length){var o=(e=i.sources).find((function(t){return t.node&&1===t.node.nodeType}))||e[0];o&&(n={largestShiftTarget:a(o.node),largestShiftTime:i.startTime,largestShiftValue:i.value,largestShiftSource:o,largestShiftEntry:i,loadState:r(i.startTime)})}}return Object.assign(t,{attribution:n})}(e);t(n)}),e)},w=function(t,e){C((function(e){var i=function(t){var e={timeToFirstByte:0,firstByteToFCP:t.value,loadState:r(c())};if(t.entries.length){var i=n(),a=t.entries[t.entries.length-1];if(i){var o=i.activationStart||0,u=Math.max(0,i.responseStart-o);e={timeToFirstByte:u,firstByteToFCP:t.value-u,loadState:r(t.entries[0].startTime),navigationEntry:i,fcpEntry:a}}}return Object.assign(t,{attribution:e})}(e);t(i)}),e)},x=0,I=1/0,k=0,A=function(t){t.forEach((function(t){t.interactionId&&(I=Math.min(I,t.interactionId),k=Math.max(k,t.interactionId),x=k?(k-I)/7+1:0)}))},F=function(){return t?x:performance.interactionCount||0},P=function(){\"interactionCount\"in performance||t||(t=d(\"event\",A,{type:\"event\",buffered:!0,durationThreshold:0}))},B=[],O=new Map,R=0,j=function(){var t=Math.min(B.length-1,Math.floor((F()-R)/50));return B[t]},q=[],H=function(t){if(q.forEach((function(e){return e(t)})),t.interactionId||\"first-input\"===t.entryType){var e=B[B.length-1],n=O.get(t.interactionId);if(n||B.length<10||t.duration>e.latency){if(n)t.duration>n.latency?(n.entries=[t],n.latency=t.duration):t.duration===n.latency&&t.startTime===n.entries[0].startTime&&n.entries.push(t);else{var r={id:t.interactionId,latency:t.duration,entries:[t]};O.set(r.id,r),B.push(r)}B.sort((function(t,e){return e.latency-t.latency})),B.length>10&&B.splice(10).forEach((function(t){return O.delete(t.id)}))}}},N=function(t){var e=self.requestIdleCallback||self.setTimeout,n=-1;return t=v(t),\"hidden\"===document.visibilityState?t():(n=e(t),p(t)),n},W=[200,500],z=function(t,e){\"PerformanceEventTiming\"in self&&\"interactionId\"in PerformanceEventTiming.prototype&&(e=e||{},b((function(){var n;P();var r,i=f(\"INP\"),a=function(t){N((function(){t.forEach(H);var e=j();e&&e.latency!==i.value&&(i.value=e.latency,i.entries=e.entries,r())}))},o=d(\"event\",a,{durationThreshold:null!==(n=e.durationThreshold)&&void 0!==n?n:40});r=l(t,i,W,e.reportAllChanges),o&&(o.observe({type:\"first-input\",buffered:!0}),p((function(){a(o.takeRecords()),r(!0)})),u((function(){R=F(),B.length=0,O.clear(),i=f(\"INP\"),r=l(t,i,W,e.reportAllChanges)})))})))},U=[],V=[],_=0,G=new WeakMap,J=new Map,K=-1,Q=function(t){U=U.concat(t),X()},X=function(){K<0&&(K=N(Y))},Y=function(){J.size>10&&J.forEach((function(t,e){O.has(e)||J.delete(e)}));var t=B.map((function(t){return G.get(t.entries[0])})),e=V.length-50;V=V.filter((function(n,r){return r>=e||t.includes(n)}));for(var n=new Set,r=0;r<V.length;r++){var i=V[r];nt(i.startTime,i.processingEnd).forEach((function(t){n.add(t)}))}var a=U.length-1-50;U=U.filter((function(t,e){return t.startTime>_&&e>a||n.has(t)})),K=-1};q.push((function(t){t.interactionId&&t.target&&!J.has(t.interactionId)&&J.set(t.interactionId,t.target)}),(function(t){var e,n=t.startTime+t.duration;_=Math.max(_,t.processingEnd);for(var r=V.length-1;r>=0;r--){var i=V[r];if(Math.abs(n-i.renderTime)<=8){(e=i).startTime=Math.min(t.startTime,e.startTime),e.processingStart=Math.min(t.processingStart,e.processingStart),e.processingEnd=Math.max(t.processingEnd,e.processingEnd),e.entries.push(t);break}}e||(e={startTime:t.startTime,processingStart:t.processingStart,processingEnd:t.processingEnd,renderTime:n,entries:[t]},V.push(e)),(t.interactionId||\"first-input\"===t.entryType)&&G.set(t,e),X()}));var Z,$,tt,et,nt=function(t,e){for(var n,r=[],i=0;n=U[i];i++)if(!(n.startTime+n.duration<t)){if(n.startTime>e)break;r.push(n)}return r},rt=function(t,n){e||(e=d(\"long-animation-frame\",Q)),z((function(e){var n=function(t){var e=t.entries[0],n=G.get(e),i=e.processingStart,o=n.processingEnd,c=n.entries.sort((function(t,e){return t.processingStart-e.processingStart})),u=nt(e.startTime,o),s=t.entries.find((function(t){return t.target})),f=s&&s.target||J.get(e.interactionId),d=[e.startTime+e.duration,o].concat(u.map((function(t){return t.startTime+t.duration}))),l=Math.max.apply(Math,d),m={interactionTarget:a(f),interactionTargetElement:f,interactionType:e.name.startsWith(\"key\")?\"keyboard\":\"pointer\",interactionTime:e.startTime,nextPaintTime:l,processedEventEntries:c,longAnimationFrameEntries:u,inputDelay:i-e.startTime,processingDuration:o-i,presentationDelay:Math.max(l-o,0),loadState:r(e.startTime)};return Object.assign(t,{attribution:m})}(e);t(n)}),n)},it=[2500,4e3],at={},ot=function(t,e){!function(t,e){e=e||{},b((function(){var n,r=S(),i=f(\"LCP\"),a=function(t){e.reportAllChanges||(t=t.slice(-1)),t.forEach((function(t){t.startTime<r.firstHiddenTime&&(i.value=Math.max(t.startTime-s(),0),i.entries=[t],n())}))},o=d(\"largest-contentful-paint\",a);if(o){n=l(t,i,it,e.reportAllChanges);var c=v((function(){at[i.id]||(a(o.takeRecords()),o.disconnect(),at[i.id]=!0,n(!0))}));[\"keydown\",\"click\"].forEach((function(t){addEventListener(t,(function(){return N(c)}),{once:!0,capture:!0})})),p(c),u((function(r){i=f(\"LCP\"),n=l(t,i,it,e.reportAllChanges),m((function(){i.value=performance.now()-r.timeStamp,at[i.id]=!0,n(!0)}))}))}}))}((function(e){var r=function(t){var e={timeToFirstByte:0,resourceLoadDelay:0,resourceLoadDuration:0,elementRenderDelay:t.value};if(t.entries.length){var r=n();if(r){var i=r.activationStart||0,o=t.entries[t.entries.length-1],c=o.url&&performance.getEntriesByType(\"resource\").filter((function(t){return t.name===o.url}))[0],u=Math.max(0,r.responseStart-i),s=Math.max(u,c?(c.requestStart||c.startTime)-i:0),f=Math.max(s,c?c.responseEnd-i:0),d=Math.max(f,o.startTime-i);e={element:a(o.element),timeToFirstByte:u,resourceLoadDelay:s-u,resourceLoadDuration:f-s,elementRenderDelay:d-f,navigationEntry:r,lcpEntry:o},o.url&&(e.url=o.url),c&&(e.lcpResourceEntry=c)}}return Object.assign(t,{attribution:e})}(e);t(r)}),e)},ct=[800,1800],ut=function t(e){document.prerendering?b((function(){return t(e)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return t(e)}),!0):setTimeout(e,0)},st=function(t,e){e=e||{};var r=f(\"TTFB\"),i=l(t,r,ct,e.reportAllChanges);ut((function(){var a=n();a&&(r.value=Math.max(a.responseStart-s(),0),r.entries=[a],i(!0),u((function(){r=f(\"TTFB\",0),(i=l(t,r,ct,e.reportAllChanges))(!0)})))}))},ft=function(t,e){st((function(e){var n=function(t){var e={waitingDuration:0,cacheDuration:0,dnsDuration:0,connectionDuration:0,requestDuration:0};if(t.entries.length){var n=t.entries[0],r=n.activationStart||0,i=Math.max((n.workerStart||n.fetchStart)-r,0),a=Math.max(n.domainLookupStart-r,0),o=Math.max(n.connectStart-r,0),c=Math.max(n.connectEnd-r,0);e={waitingDuration:i,cacheDuration:a-i,dnsDuration:o-a,connectionDuration:c-o,requestDuration:t.value-c,navigationEntry:n}}return Object.assign(t,{attribution:e})}(e);t(n)}),e)},dt={passive:!0,capture:!0},lt=new Date,mt=function(t,e){Z||(Z=e,$=t,tt=new Date,gt(removeEventListener),pt())},pt=function(){if($>=0&&$<tt-lt){var t={entryType:\"first-input\",name:Z.type,target:Z.target,cancelable:Z.cancelable,startTime:Z.timeStamp,processingStart:Z.timeStamp+$};et.forEach((function(e){e(t)})),et=[]}},vt=function(t){if(t.cancelable){var e=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;\"pointerdown\"==t.type?function(t,e){var n=function(){mt(t,e),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",n,dt),removeEventListener(\"pointercancel\",r,dt)};addEventListener(\"pointerup\",n,dt),addEventListener(\"pointercancel\",r,dt)}(e,t):mt(e,t)}},gt=function(t){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(e){return t(e,vt,dt)}))},ht=[100,300],Tt=function(t,e){e=e||{},b((function(){var n,r=S(),i=f(\"FID\"),a=function(t){t.startTime<r.firstHiddenTime&&(i.value=t.processingStart-t.startTime,i.entries.push(t),n(!0))},o=function(t){t.forEach(a)},c=d(\"first-input\",o);n=l(t,i,ht,e.reportAllChanges),c&&(p(v((function(){o(c.takeRecords()),c.disconnect()}))),u((function(){var r;i=f(\"FID\"),n=l(t,i,ht,e.reportAllChanges),et=[],$=-1,Z=null,gt(addEventListener),r=a,et.push(r),pt()})))}))},yt=function(t,e){Tt((function(e){var n=function(t){var e=t.entries[0],n={eventTarget:a(e.target),eventType:e.name,eventTime:e.startTime,eventEntry:e,loadState:r(e.startTime)};return Object.assign(t,{attribution:n})}(e);t(n)}),e)};export{M as CLSThresholds,L as FCPThresholds,ht as FIDThresholds,W as INPThresholds,it as LCPThresholds,ct as TTFBThresholds,D as onCLS,w as onFCP,yt as onFID,rt as onINP,ot as onLCP,ft as onTTFB};\n","import { onINP, onLCP, onCLS, onFCP } from 'web-vitals/attribution'\nimport { assignableWindow } from '../utils/globals'\n\nconst postHogWebVitalsCallbacks = {\n onLCP,\n onCLS,\n onFCP,\n onINP,\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.postHogWebVitalsCallbacks = postHogWebVitalsCallbacks\n\n// we used to put posthogWebVitalsCallbacks on window, and now we put it on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put it directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.postHogWebVitalsCallbacks = postHogWebVitalsCallbacks\n\nexport default postHogWebVitalsCallbacks\n","import { addEventListener, each, extend } from './utils'\nimport {\n autocaptureCompatibleElements,\n getClassNames,\n getDirectAndNestedSpanText,\n getElementsChainString,\n getEventTarget,\n getSafeText,\n isAngularStyleAttr,\n isSensitiveElement,\n makeSafeText,\n shouldCaptureDomEvent,\n shouldCaptureElement,\n shouldCaptureRageclick,\n shouldCaptureValue,\n splitClassString,\n} from './autocapture-utils'\n\nimport RageClick from './extensions/rageclick'\nimport { AutocaptureConfig, COPY_AUTOCAPTURE_EVENT, EventName, Properties, RemoteConfig } from './types'\nimport { PostHog } from './posthog-core'\nimport { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants'\n\nimport { isBoolean, isFunction, isNull, isObject } from '@posthog/core'\nimport { createLogger } from './utils/logger'\nimport { document, window } from './utils/globals'\nimport { convertToURL } from './utils/request-utils'\nimport { isDocumentFragment, isElementNode, isTag, isTextNode } from './utils/element-utils'\nimport { includes } from '@posthog/core'\n\nconst logger = createLogger('[AutoCapture]')\n\nfunction limitText(length: number, text: string): string {\n if (text.length > length) {\n return text.slice(0, length) + '...'\n }\n return text\n}\n\nexport function getAugmentPropertiesFromElement(elem: Element): Properties {\n const shouldCaptureEl = shouldCaptureElement(elem)\n if (!shouldCaptureEl) {\n return {}\n }\n\n const props: Properties = {}\n\n each(elem.attributes, function (attr: Attr) {\n if (attr.name && attr.name.indexOf('data-ph-capture-attribute') === 0) {\n const propertyKey = attr.name.replace('data-ph-capture-attribute-', '')\n const propertyValue = attr.value\n if (propertyKey && propertyValue && shouldCaptureValue(propertyValue)) {\n props[propertyKey] = propertyValue\n }\n }\n })\n\n return props\n}\n\nexport function previousElementSibling(el: Element): Element | null {\n if (el.previousElementSibling) {\n return el.previousElementSibling\n }\n let _el: Element | null = el\n do {\n _el = _el.previousSibling as Element | null // resolves to ChildNode->Node, which is Element's parent class\n } while (_el && !isElementNode(_el))\n return _el\n}\n\nexport function getDefaultProperties(eventType: string): Properties {\n return {\n $event_type: eventType,\n $ce_version: 1,\n }\n}\n\nexport function getPropertiesFromElement(\n elem: Element,\n maskAllAttributes: boolean,\n maskText: boolean,\n elementAttributeIgnorelist: string[] | undefined\n): Properties {\n const tag_name = elem.tagName.toLowerCase()\n const props: Properties = {\n tag_name: tag_name,\n }\n if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {\n if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {\n props['$el_text'] = limitText(1024, getDirectAndNestedSpanText(elem))\n } else {\n props['$el_text'] = limitText(1024, getSafeText(elem))\n }\n }\n\n const classes = getClassNames(elem)\n if (classes.length > 0)\n props['classes'] = classes.filter(function (c) {\n return c !== ''\n })\n\n // capture the deny list here because this not-a-class class makes it tricky to use this.config in the function below\n each(elem.attributes, function (attr: Attr) {\n // Only capture attributes we know are safe\n if (isSensitiveElement(elem) && ['name', 'id', 'class', 'aria-label'].indexOf(attr.name) === -1) return\n\n if (elementAttributeIgnorelist?.includes(attr.name)) return\n\n if (!maskAllAttributes && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {\n let value = attr.value\n if (attr.name === 'class') {\n // html attributes can _technically_ contain linebreaks,\n // but we're very intolerant of them in the class string,\n // so we strip them.\n value = splitClassString(value).join(' ')\n }\n props['attr__' + attr.name] = limitText(1024, value)\n }\n })\n\n let nthChild = 1\n let nthOfType = 1\n let currentElem: Element | null = elem\n while ((currentElem = previousElementSibling(currentElem))) {\n // eslint-disable-line no-cond-assign\n nthChild++\n if (currentElem.tagName === elem.tagName) {\n nthOfType++\n }\n }\n props['nth_child'] = nthChild\n props['nth_of_type'] = nthOfType\n\n return props\n}\n\nexport function autocapturePropertiesForElement(\n target: Element,\n {\n e,\n maskAllElementAttributes,\n maskAllText,\n elementAttributeIgnoreList,\n elementsChainAsString,\n }: {\n e: Event\n maskAllElementAttributes: boolean\n maskAllText: boolean\n elementAttributeIgnoreList?: string[] | undefined\n elementsChainAsString: boolean\n }\n): { props: Properties; explicitNoCapture?: boolean } {\n const targetElementList = [target]\n let curEl = target\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n targetElementList.push(curEl.parentNode as Element)\n curEl = curEl.parentNode as Element\n }\n\n const elementsJson: Properties[] = []\n const autocaptureAugmentProperties: Properties = {}\n let href: string | false = false\n let explicitNoCapture = false\n\n each(targetElementList, (el) => {\n const shouldCaptureEl = shouldCaptureElement(el)\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href')\n href = shouldCaptureEl && href && shouldCaptureValue(href) && href\n }\n\n // allow users to programmatically prevent capturing of elements by adding class 'ph-no-capture'\n const classes = getClassNames(el)\n if (includes(classes, 'ph-no-capture')) {\n explicitNoCapture = true\n }\n\n elementsJson.push(\n getPropertiesFromElement(el, maskAllElementAttributes, maskAllText, elementAttributeIgnoreList)\n )\n\n const augmentProperties = getAugmentPropertiesFromElement(el)\n extend(autocaptureAugmentProperties, augmentProperties)\n })\n\n if (explicitNoCapture) {\n return { props: {}, explicitNoCapture }\n }\n\n if (!maskAllText) {\n // if the element is a button or anchor tag get the span text from any\n // children and include it as/with the text property on the parent element\n if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'button') {\n elementsJson[0]['$el_text'] = getDirectAndNestedSpanText(target)\n } else {\n elementsJson[0]['$el_text'] = getSafeText(target)\n }\n }\n\n let externalHref: string | undefined\n if (href) {\n elementsJson[0]['attr__href'] = href\n const hrefHost = convertToURL(href)?.host\n const locationHost = window?.location?.host\n if (hrefHost && locationHost && hrefHost !== locationHost) {\n externalHref = href\n }\n }\n\n const props = extend(\n getDefaultProperties(e.type),\n // Sending \"$elements\" is deprecated. Only one client on US cloud uses this.\n !elementsChainAsString ? { $elements: elementsJson } : {},\n // Always send $elements_chain, as it's needed downstream in site app filtering\n { $elements_chain: getElementsChainString(elementsJson) },\n elementsJson[0]?.['$el_text'] ? { $el_text: elementsJson[0]?.['$el_text'] } : {},\n externalHref && e.type === 'click' ? { $external_click_url: externalHref } : {},\n autocaptureAugmentProperties\n )\n\n return { props }\n}\n\nexport class Autocapture {\n instance: PostHog\n _initialized: boolean = false\n _isDisabledServerSide: boolean | null = null\n _elementSelectors: Set<string> | null\n rageclicks = new RageClick()\n _elementsChainAsString = false\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._elementSelectors = null\n }\n\n private get _config(): AutocaptureConfig {\n const config = isObject(this.instance.config.autocapture) ? this.instance.config.autocapture : {}\n // precompile the regex\n config.url_allowlist = config.url_allowlist?.map((url) => new RegExp(url))\n config.url_ignorelist = config.url_ignorelist?.map((url) => new RegExp(url))\n return config\n }\n\n _addDomEventHandlers(): void {\n if (!this.isBrowserSupported()) {\n logger.info('Disabling Automatic Event Collection because this browser is not supported')\n return\n }\n\n if (!window || !document) {\n return\n }\n\n const handler = (e: Event) => {\n e = e || window?.event\n try {\n this._captureEvent(e)\n } catch (error) {\n logger.error('Failed to capture event', error)\n }\n }\n\n addEventListener(document, 'submit', handler, { capture: true })\n addEventListener(document, 'change', handler, { capture: true })\n addEventListener(document, 'click', handler, { capture: true })\n\n if (this._config.capture_copied_text) {\n const copiedTextHandler = (e: Event) => {\n e = e || window?.event\n this._captureEvent(e, COPY_AUTOCAPTURE_EVENT)\n }\n\n addEventListener(document, 'copy', copiedTextHandler, { capture: true })\n addEventListener(document, 'cut', copiedTextHandler, { capture: true })\n }\n }\n\n public startIfEnabled() {\n if (this.isEnabled && !this._initialized) {\n this._addDomEventHandlers()\n this._initialized = true\n }\n }\n\n public onRemoteConfig(response: RemoteConfig) {\n if (response.elementsChainAsString) {\n this._elementsChainAsString = response.elementsChainAsString\n }\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [AUTOCAPTURE_DISABLED_SERVER_SIDE]: !!response['autocapture_opt_out'],\n })\n }\n // store this in-memory in case persistence is disabled\n this._isDisabledServerSide = !!response['autocapture_opt_out']\n this.startIfEnabled()\n }\n\n public setElementSelectors(selectors: Set<string>): void {\n this._elementSelectors = selectors\n }\n\n public getElementSelectors(element: Element | null): string[] | null {\n const elementSelectors: string[] = []\n\n this._elementSelectors?.forEach((selector) => {\n const matchedElements = document?.querySelectorAll(selector)\n matchedElements?.forEach((matchedElement: Element) => {\n if (element === matchedElement) {\n elementSelectors.push(selector)\n }\n })\n })\n\n return elementSelectors\n }\n\n public get isEnabled(): boolean {\n const persistedServerDisabled = this.instance.persistence?.props[AUTOCAPTURE_DISABLED_SERVER_SIDE]\n const memoryDisabled = this._isDisabledServerSide\n\n if (isNull(memoryDisabled) && !isBoolean(persistedServerDisabled) && !this.instance._shouldDisableFlags()) {\n // We only enable if we know that the server has not disabled it (unless /flags is disabled)\n return false\n }\n\n const disabledServer = this._isDisabledServerSide ?? !!persistedServerDisabled\n const disabledClient = !this.instance.config.autocapture\n return !disabledClient && !disabledServer\n }\n\n private _captureEvent(e: Event, eventName: EventName = '$autocapture'): boolean | void {\n if (!this.isEnabled) {\n return\n }\n\n /*** Don't mess with this code without running IE8 tests on it ***/\n let target = getEventTarget(e)\n if (isTextNode(target)) {\n // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = (target.parentNode || null) as Element | null\n }\n\n if (eventName === '$autocapture' && e.type === 'click' && e instanceof MouseEvent) {\n if (\n !!this.instance.config.rageclick &&\n this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime())\n ) {\n if (shouldCaptureRageclick(target, this.instance.config.rageclick)) {\n this._captureEvent(e, '$rageclick')\n }\n }\n }\n\n const isCopyAutocapture = eventName === COPY_AUTOCAPTURE_EVENT\n if (\n target &&\n shouldCaptureDomEvent(\n target,\n e,\n this._config,\n // mostly this method cares about the target element, but in the case of copy events,\n // we want some of the work this check does without insisting on the target element's type\n isCopyAutocapture,\n // we also don't want to restrict copy checks to clicks,\n // so we pass that knowledge in here, rather than add the logic inside the check\n isCopyAutocapture ? ['copy', 'cut'] : undefined\n )\n ) {\n const { props, explicitNoCapture } = autocapturePropertiesForElement(target, {\n e,\n maskAllElementAttributes: this.instance.config.mask_all_element_attributes,\n maskAllText: this.instance.config.mask_all_text,\n elementAttributeIgnoreList: this._config.element_attribute_ignorelist,\n elementsChainAsString: this._elementsChainAsString,\n })\n\n if (explicitNoCapture) {\n return false\n }\n\n const elementSelectors = this.getElementSelectors(target)\n if (elementSelectors && elementSelectors.length > 0) {\n props['$element_selectors'] = elementSelectors\n }\n\n if (eventName === COPY_AUTOCAPTURE_EVENT) {\n // you can't read the data from the clipboard event,\n // but you can guess that you can read it from the window's current selection\n const selectedContent = makeSafeText(window?.getSelection()?.toString())\n const clipType = (e as ClipboardEvent).type || 'clipboard'\n if (!selectedContent) {\n return false\n }\n props['$selected_content'] = selectedContent\n props['$copy_type'] = clipType\n }\n\n this.instance.capture(eventName, props)\n return true\n }\n }\n\n isBrowserSupported(): boolean {\n return isFunction(document?.querySelectorAll)\n }\n}\n","/**\n * adapted from https://github.com/getsentry/sentry-javascript/blob/72751dacb88c5b970d8bac15052ee8e09b28fd5d/packages/browser-utils/src/getNativeImplementation.ts#L27\n * and https://github.com/PostHog/rrweb/blob/804380afbb1b9bed70b8792cb5a25d827f5c0cb5/packages/utils/src/index.ts#L31\n * after a number of performance reports from Angular users\n */\n\nimport { AssignableWindow } from './globals'\nimport { isAngularZonePresent } from './type-utils'\nimport { isFunction, isNativeFunction } from '@posthog/core'\nimport { logger } from './logger'\n\ninterface NativeImplementationsCache {\n MutationObserver: typeof MutationObserver\n}\n\nconst cachedImplementations: Partial<NativeImplementationsCache> = {}\n\nexport function getNativeImplementation<T extends keyof NativeImplementationsCache>(\n name: T,\n assignableWindow: AssignableWindow\n): NativeImplementationsCache[T] {\n const cached = cachedImplementations[name]\n if (cached) {\n return cached\n }\n\n let impl = assignableWindow[name] as NativeImplementationsCache[T]\n\n if (isNativeFunction(impl) && !isAngularZonePresent()) {\n return (cachedImplementations[name] = impl.bind(assignableWindow) as NativeImplementationsCache[T])\n }\n\n const document = assignableWindow.document\n if (document && isFunction(document.createElement)) {\n try {\n const sandbox = document.createElement('iframe')\n sandbox.hidden = true\n document.head.appendChild(sandbox)\n const contentWindow = sandbox.contentWindow\n if (contentWindow && (contentWindow as any)[name]) {\n impl = (contentWindow as any)[name] as NativeImplementationsCache[T]\n }\n document.head.removeChild(sandbox)\n } catch (e) {\n // Could not create sandbox iframe, just use assignableWindow.xxx\n logger.warn(`Could not create sandbox iframe for ${name} check, bailing to assignableWindow.${name}: `, e)\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl || !isFunction(impl)) {\n return impl\n }\n\n return (cachedImplementations[name] = impl.bind(assignableWindow) as NativeImplementationsCache[T])\n}\n\nexport function getNativeMutationObserverImplementation(assignableWindow: AssignableWindow): typeof MutationObserver {\n return getNativeImplementation('MutationObserver', assignableWindow)\n}\n","import { assignableWindow, LazyLoadedDeadClicksAutocaptureInterface } from '../utils/globals'\nimport { PostHog } from '../posthog-core'\nimport { isNull, isNumber, isUndefined } from '@posthog/core'\nimport { autocaptureCompatibleElements, getEventTarget } from '../autocapture-utils'\nimport { DeadClickCandidate, DeadClicksAutoCaptureConfig, Properties } from '../types'\nimport { autocapturePropertiesForElement } from '../autocapture'\nimport { isElementInToolbar, isElementNode, isTag } from '../utils/element-utils'\nimport { getNativeMutationObserverImplementation } from '../utils/prototype-utils'\nimport { addEventListener } from '../utils'\n\nfunction asClick(event: MouseEvent): DeadClickCandidate | null {\n const eventTarget = getEventTarget(event)\n if (eventTarget) {\n return {\n node: eventTarget,\n originalEvent: event,\n timestamp: Date.now(),\n }\n }\n return null\n}\n\nfunction checkTimeout(value: number | undefined, thresholdMs: number) {\n return isNumber(value) && value >= thresholdMs\n}\n\nclass LazyLoadedDeadClicksAutocapture implements LazyLoadedDeadClicksAutocaptureInterface {\n private _mutationObserver: MutationObserver | undefined\n private _lastMutation: number | undefined\n private _lastSelectionChanged: number | undefined\n private _clicks: DeadClickCandidate[] = []\n private _checkClickTimer: number | undefined\n private _config: Required<DeadClicksAutoCaptureConfig>\n private _onCapture: (click: DeadClickCandidate, properties: Properties) => void\n\n private _defaultConfig = (defaultOnCapture: (click: DeadClickCandidate, properties: Properties) => void) => ({\n element_attribute_ignorelist: [],\n scroll_threshold_ms: 100,\n selection_change_threshold_ms: 100,\n mutation_threshold_ms: 2500,\n __onCapture: defaultOnCapture,\n })\n\n private _asRequiredConfig(providedConfig?: DeadClicksAutoCaptureConfig): Required<DeadClicksAutoCaptureConfig> {\n const defaultConfig = this._defaultConfig(providedConfig?.__onCapture || this._captureDeadClick.bind(this))\n return {\n element_attribute_ignorelist:\n providedConfig?.element_attribute_ignorelist ?? defaultConfig.element_attribute_ignorelist,\n scroll_threshold_ms: providedConfig?.scroll_threshold_ms ?? defaultConfig.scroll_threshold_ms,\n selection_change_threshold_ms:\n providedConfig?.selection_change_threshold_ms ?? defaultConfig.selection_change_threshold_ms,\n mutation_threshold_ms: providedConfig?.mutation_threshold_ms ?? defaultConfig.mutation_threshold_ms,\n __onCapture: defaultConfig.__onCapture,\n }\n }\n\n constructor(\n readonly instance: PostHog,\n config?: DeadClicksAutoCaptureConfig\n ) {\n this._config = this._asRequiredConfig(config)\n this._onCapture = this._config.__onCapture\n }\n\n start(observerTarget: Node) {\n this._startClickObserver()\n this._startScrollObserver()\n this._startSelectionChangedObserver()\n this._startMutationObserver(observerTarget)\n }\n\n private _startMutationObserver(observerTarget: Node) {\n if (!this._mutationObserver) {\n const NativeMutationObserver = getNativeMutationObserverImplementation(assignableWindow)\n this._mutationObserver = new NativeMutationObserver((mutations) => {\n this._onMutation(mutations)\n })\n this._mutationObserver.observe(observerTarget, {\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true,\n })\n }\n }\n\n stop() {\n this._mutationObserver?.disconnect()\n this._mutationObserver = undefined\n assignableWindow.removeEventListener('click', this._onClick)\n assignableWindow.removeEventListener('scroll', this._onScroll, { capture: true })\n assignableWindow.removeEventListener('selectionchange', this._onSelectionChange)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _onMutation(_mutations: MutationRecord[]): void {\n // we don't actually care about the content of the mutations, right now\n this._lastMutation = Date.now()\n }\n\n private _startClickObserver() {\n addEventListener(assignableWindow, 'click', this._onClick)\n }\n\n private _onClick = (event: Event): void => {\n const click = asClick(event as MouseEvent)\n if (!isNull(click) && !this._ignoreClick(click)) {\n this._clicks.push(click)\n }\n\n if (this._clicks.length && isUndefined(this._checkClickTimer)) {\n this._checkClickTimer = assignableWindow.setTimeout(() => {\n this._checkClicks()\n }, 1000)\n }\n }\n\n // `capture: true` is required to get scroll events for other scrollable elements\n // on the page, not just the window\n // see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#usecapture\n //\n // `passive: true` is used to tell the browser that the scroll event handler will not call `preventDefault()`\n // This allows the browser to optimize scrolling performance by not waiting for our handling of the scroll event\n // see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#passive\n private _startScrollObserver() {\n addEventListener(assignableWindow, 'scroll', this._onScroll, { capture: true })\n }\n\n private _onScroll = (): void => {\n const candidateNow = Date.now()\n // very naive throttle\n if (candidateNow % 50 === 0) {\n // we can see many scrolls between scheduled checks,\n // so we update scroll delay as we see them\n // to avoid false positives\n this._clicks.forEach((click) => {\n if (isUndefined(click.scrollDelayMs)) {\n click.scrollDelayMs = candidateNow - click.timestamp\n }\n })\n }\n }\n\n private _startSelectionChangedObserver() {\n addEventListener(assignableWindow, 'selectionchange', this._onSelectionChange)\n }\n\n private _onSelectionChange = (): void => {\n this._lastSelectionChanged = Date.now()\n }\n\n private _ignoreClick(click: DeadClickCandidate | null): boolean {\n if (!click) {\n return true\n }\n\n if (isElementInToolbar(click.node)) {\n return true\n }\n\n const alreadyClickedInLastSecond = this._clicks.some((c) => {\n return c.node === click.node && Math.abs(c.timestamp - click.timestamp) < 1000\n })\n\n if (alreadyClickedInLastSecond) {\n return true\n }\n\n if (\n isTag(click.node, 'html') ||\n !isElementNode(click.node) ||\n autocaptureCompatibleElements.includes(click.node.tagName.toLowerCase())\n ) {\n return true\n }\n\n return false\n }\n\n private _checkClicks() {\n if (!this._clicks.length) {\n return\n }\n\n clearTimeout(this._checkClickTimer)\n this._checkClickTimer = undefined\n\n const clicksToCheck = this._clicks\n this._clicks = []\n\n for (const click of clicksToCheck) {\n click.mutationDelayMs =\n click.mutationDelayMs ??\n (this._lastMutation && click.timestamp <= this._lastMutation\n ? this._lastMutation - click.timestamp\n : undefined)\n click.absoluteDelayMs = Date.now() - click.timestamp\n click.selectionChangedDelayMs =\n this._lastSelectionChanged && click.timestamp <= this._lastSelectionChanged\n ? this._lastSelectionChanged - click.timestamp\n : undefined\n\n const scrollTimeout = checkTimeout(click.scrollDelayMs, this._config.scroll_threshold_ms)\n const selectionChangedTimeout = checkTimeout(\n click.selectionChangedDelayMs,\n this._config.selection_change_threshold_ms\n )\n const mutationTimeout = checkTimeout(click.mutationDelayMs, this._config.mutation_threshold_ms)\n // we want to timeout eventually even if nothing else catches it...\n // we leave a little longer than the maximum threshold to give the other checks a chance to catch it\n const absoluteTimeout = checkTimeout(click.absoluteDelayMs, this._config.mutation_threshold_ms * 1.1)\n\n const hadScroll = isNumber(click.scrollDelayMs) && click.scrollDelayMs < this._config.scroll_threshold_ms\n const hadMutation =\n isNumber(click.mutationDelayMs) && click.mutationDelayMs < this._config.mutation_threshold_ms\n const hadSelectionChange =\n isNumber(click.selectionChangedDelayMs) &&\n click.selectionChangedDelayMs < this._config.selection_change_threshold_ms\n\n if (hadScroll || hadMutation || hadSelectionChange) {\n // ignore clicks that had a scroll or mutation\n continue\n }\n\n if (scrollTimeout || mutationTimeout || absoluteTimeout || selectionChangedTimeout) {\n this._onCapture(click, {\n $dead_click_last_mutation_timestamp: this._lastMutation,\n $dead_click_event_timestamp: click.timestamp,\n $dead_click_scroll_timeout: scrollTimeout,\n $dead_click_mutation_timeout: mutationTimeout,\n $dead_click_absolute_timeout: absoluteTimeout,\n $dead_click_selection_changed_timeout: selectionChangedTimeout,\n })\n } else if (click.absoluteDelayMs < this._config.mutation_threshold_ms) {\n // keep waiting until next check\n this._clicks.push(click)\n }\n }\n\n if (this._clicks.length && isUndefined(this._checkClickTimer)) {\n this._checkClickTimer = assignableWindow.setTimeout(() => {\n this._checkClicks()\n }, 1000)\n }\n }\n\n private _captureDeadClick(click: DeadClickCandidate, properties: Properties) {\n // TODO need to check safe and captur-able as with autocapture\n // TODO autocaputure config\n this.instance.capture(\n '$dead_click',\n {\n ...properties,\n ...autocapturePropertiesForElement(click.node, {\n e: click.originalEvent,\n maskAllElementAttributes: this.instance.config.mask_all_element_attributes,\n maskAllText: this.instance.config.mask_all_text,\n elementAttributeIgnoreList: this._config.element_attribute_ignorelist,\n // TRICKY: it appears that we were moving to elementsChainAsString, but the UI still depends on elements, so :shrug:\n elementsChainAsString: false,\n }).props,\n $dead_click_scroll_delay_ms: click.scrollDelayMs,\n $dead_click_mutation_delay_ms: click.mutationDelayMs,\n $dead_click_absolute_delay_ms: click.absoluteDelayMs,\n $dead_click_selection_changed_delay_ms: click.selectionChangedDelayMs,\n },\n {\n timestamp: new Date(click.timestamp),\n }\n )\n }\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.initDeadClicksAutocapture = (ph, config) =>\n new LazyLoadedDeadClicksAutocapture(ph, config)\n\nexport default LazyLoadedDeadClicksAutocapture\n"],"names":["_a","__defProp","Object","defineProperty","__publicField","obj","key","value","__defNormalProp","enumerable","configurable","writable","__defProp$1","__publicField$1","__defNormalProp$1","NodeType$2","NodeType2","testableAccessors$1","Node","ShadowRoot","Element","MutationObserver","testableMethods$1","untaintedBasePrototype$1","getUntaintedPrototype$1","defaultObj","_globalThis$Zone","angularUnpatchedVersionSymbol","globalThis","Zone","__symbol__","angularZoneUnpatchedAlternative","defaultPrototype","prototype","accessorNames","isUntaintedAccessors","Boolean","every","accessor","_a2","_b","getOwnPropertyDescriptor","get","toString","includes","methodNames","isUntaintedMethods","method","iframeEl","document","createElement","body","appendChild","win","contentWindow","untaintedObject","removeChild","_unused","untaintedAccessorCache$1","getUntaintedAccessor$1","instance","cacheKey","String","call","untaintedPrototype","untaintedAccessor","untaintedMethodCache$1","getUntaintedMethod$1","bind","untaintedMethod","index$1","childNodes","n2","parentNode","parentElement","textContent","contains","other","getRootNode","host","styleSheets","shadowRoot","querySelector","selectors","querySelectorAll","mutationObserver","constructor","isElement","nodeType","ELEMENT_NODE","isShadowRoot","hostEl","isNativeShadowDom","shadowRoot2","stringifyStylesheet","s2","rules2","rules","cssRules","stringifiedRules","Array","from","rule2","stringifyRule","href","join","cssText","replace","error","sheetHref","isCSSImportRule","importStringified","styleSheet","split","length","statement","JSON","stringify","layerName","push","supportsText","media","mediaText","escapeImportStatement","absolutifyURLs","regex","ruleStringified","isCSSStyleRule","selectorText","findStylesheet","doc","find","s","Mirror$1","Map","WeakMap","getId","id","this","getMeta","getNode","idNodeMap","getIds","keys","nodeMetaMap","removeNodeFromMap","delete","forEach","childNode","has","hasNode","node2","add","meta","set","oldNode","reset","maskInputValue","_ref","element","maskInputOptions","tagName","type","maskInputFn","text","actualType","toLowerCase","repeat","str","ORIGINAL_ATTRIBUTE_NAME","getInputType","hasAttribute","extractFileExtension","path","baseURL","_ref2","url","URL","window","location","err","match","pathname","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","origin","quote1","path1","quote2","path2","path3","filePath","maybeQuote","test","indexOf","slice","stack","parts","part","pop","canvasService","canvasCtx","_id","tagNameRegex","RegExp","IGNORED_NODE","genId","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","cachedDocument","absoluteToDoc","attributeValue","trim","getHref","isSVGElement","el","ownerSVGElement","customHref","a2","startsWith","setAttribute","transformAttribute","name","pos","collectCharacters","regEx","chars2","exec","substring","output","descriptorsStr","inParens","c2","charAt","getAbsoluteSrcsetString","ignoreAttribute","_value","classMatchesRegex","checkAncestors","eIndex","classList","className","needMaskingText","maskTextClass","maskTextSelector","closest","matches","e2","serializeNode","options","mirror","mirror2","blockClass","blockSelector","needsMask","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","docId","getRootId","DOCUMENT_NODE","compatMode","Document","DOCUMENT_TYPE_NODE","DocumentType","publicId","systemId","isCustomElement","needBlock","_isBlockedElement","HTMLFormElement","processedTagName","getValidTagName$1","attributes","len","i2","attr","n","hrefFrom","stylesheet","rel","_cssText","sheet","innerText","checked","selected","open","rr_open_mode","_unused2","ph_rr_could_not_detect_modal","__context","canvas","ctx","getContext","x2","width","y","height","getImageData","originalGetImageData","Uint32Array","Math","min","data","buffer","some","pixel","is2DCanvasBlank","rr_dataURL","toDataURL","quality","canvasDataURL","blankCanvas","image","imageSrc","currentSrc","getAttribute","priorCrossOrigin","crossOrigin","recordInlineImage","removeEventListener","naturalWidth","naturalHeight","drawImage","complete","addEventListener","console","warn","removeAttribute","mediaAttributes","rr_mediaState","paused","rr_mediaCurrentTime","currentTime","rr_mediaPlaybackRate","playbackRate","rr_mediaMuted","muted","rr_mediaLoop","loop","rr_mediaVolume","volume","scrollLeft","rr_scrollLeft","scrollTop","rr_scrollTop","getBoundingClientRect","class","rr_width","rr_height","src","contentDocument","rr_src","customElements","isSVG","isCustom","serializeElementNode","TEXT_NODE","parent","parentTagName","isStyle","isScript","nextSibling","previousSibling","Text","serializeTextNode","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","lowerIfExists","maybeAttr","serializeNodeWithId","skipChild","slimDOMOptions","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","sn","comment","script","as","headFavicon","headMetaDescKeywords","headMetaSocial","property","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","slimDOMExcluded","serializedNode","assign","recordChild","shadowRootEl","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isShadow","listener","readyState","fired","blankUrl","setTimeout","timer","clearTimeout","onceIframeLoaded","iframeDoc","serializedIframeNode","link","styleSheetLoadTimeout","styleSheetLoaded","onceStylesheetLoaded","serializedLinkNode","BaseRRNode$1","BaseRRNode","__publicField2","childNodes2","childIterator","firstChild","ownerDocument","_newChild","Error","insertBefore","_refChild","_node","testableAccessors","testableMethods","untaintedBasePrototype","getUntaintedPrototype","_globalThis$Zone2","angularZoneUnpatchedAlternative$1","_unused3","untaintedAccessorCache","getUntaintedAccessor","untaintedMethodCache","getUntaintedMethod","mutationObserverCtor","index","on","fn","target","capture","passive","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","map","throttle","func","wait","timeout","previous","_len","arguments","args","_key","now","Date","leading","remaining","context","apply","trailing","hookSetter","d","isRevoked","original","patch","source","replacement","wrapped","defineProperties","__rrweb_original__","_unused4","Proxy","Reflect","prop","receiver","nowTimestamp","getWindowScroll","_c","_d","left","scrollingElement","pageXOffset","documentElement","top","pageYOffset","getWindowHeight","innerHeight","clientHeight","getWindowWidth","innerWidth","clientWidth","closestElementOfNode","isBlocked","isIgnored","headTitleMutations","isAncestorRemoved","legacy_isTouchEvent","event","changedTouches","isSerializedIframe","nodeName","isSerializedStylesheet","hasShadowRoot","getTime","StyleSheetMirror$1","_this$styleIDMap$get","styleIDMap","newId","idStyleMap","getStyle","generateId","getShadowHost","shadowHost","DOCUMENT_FRAGMENT_NODE","shadowHostInDom","rootShadowHost","getRootShadowHost","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","isNodeInLinkedList","DoubleLinkedList","position","current","head","index2","next","addNode","__ln","tail","removeNode","errorHandler","moveKey","parentId","MutationBuffer","Set","mutations","processMutation","emit","frozen","locked","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","iframe","childSn","attachIframe","observeAttachShadow","attachLinkElement","node","mapRemoves","shift","movedSet","isParentRemoved","removes","addedSet","isAncestorInSet","droppedSet","candidate","tailNode","unhandledNode","payload","texts","genTextAreaValueMutation","filter","attribute","style","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","attributeMap","movedMap","mutationCb","textarea","item","cn","m","oldValue","attributeName","unattachedDoc","implementation","createHTMLDocument","old","pname","newValue","getPropertyValue","newPriority","getPropertyPriority","addedNodes","genAdds","removedNodes","nodeId","isSerialized","deepDelete","processedNodeManager","inOtherBuffer","targetId","init","freeze","canvasManager","unfreeze","isFrozen","lock","unlock","addsSet","_ret","_loop","r2","v","_isParentRemoved","size","_isAncestorInSet","callbackWrapper","cb","mutationBuffers","getEventTarget","composedPath","_unused5","initMutationObserver","rootEl","mutationBuffer","observer","processMutations","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","initMouseInteractionObserver","_ref4","mouseInteractionCb","sampling","mouseInteraction","disableMap","handlers","currentPointerType","Number","isNaN","endsWith","eventKey","eventName","handler","pointerType","thisEventKey","Mouse","Touch","Pen","MouseDown","MouseUp","Click","clientX","clientY","_extends","x","getHandler","PointerEvent","TouchStart","TouchEnd","h","initScrollObserver","_ref5","scrollCb","evt","defaultView","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","getNestedCSSRulePositions","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","unshift","parentStyleSheet","recurse","getIdAndStyleId","styleMirror","styleId","ownerNode","initAdoptedStyleSheetObserver","_ref11","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","result2","adoptStyleSheets","initObservers","o2","hooks","currentWindow","mousemoveCb","viewportResizeCb","inputCb","mediaInteractionCb","styleSheetRuleCb","styleDeclarationCb","canvasMutationCb","fontCb","selectionCb","customElementCb","mutation","mousemove","viewportResize","input","mediaInteaction","styleSheetRule","styleDeclaration","canvasMutation","font","selection","customElement","mergeHooks","recordDOM","mousemoveHandler","_ref3","timeBaseline","threshold","callbackThreshold","mousemoveCallback","positions","wrappedCb","totalOffset","p","timeOffset","updatePosition","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","initMoveObserver","mouseInteractionHandler","scrollHandler","viewportResizeHandler","_ref6","_ref7","lastH","lastW","initViewportResizeObserver","inputHandler","_ref8","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","isChecked","cbWithDedup","text2","v2","lastInputValue","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","initInputObserver","mediaInteractionHandler","_ref14","Play","Pause","Seeked","VolumeChange","RateChange","initMediaInteractionObserver","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","_ref9","_ref0","CSSStyleSheet","insertRule","thisArg","argumentsList","rule","addRule","selector","styleBlock","replaceSync","deleteRule","removeRule","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","entries","_ref1","typeKey","_ref10","initStyleSheetObserver","_ref12","_ref13","ignoreCSSAttributes","setProperty","CSSStyleDeclaration","priority","removeProperty","remove","initStyleDeclarationObserver","collectFonts","_ref15","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","Uint8Array","restoreHandler","fonts","initFontObserver","selectionObserver","param","collapsed","updateSelection","getSelection","isCollapsed","ranges","count","rangeCount","range","getRangeAt","startContainer","startOffset","endContainer","endOffset","start","end","initSelectionObserver","customElementObserver","_ref16","define","initCustomElementObserver","pluginHandlers","plugin3","plugins","callback","b","disconnect","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","ids","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","IframeManager","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","iframes","crossOriginIframeMap","addLoadListener","loadListener","isAttachIframe","adoptedStyleSheets","message","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","crossOriginIframeMirror","replaceIdOnNode","crossOriginIframeRootIdMap","patchRootIdOnNode","timestamp","IncrementalSnapshot","Mutation","Meta","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","Scroll","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","AdoptedStyleSheet","styles","iframeMirror","isArray","child","ShadowDomManager","WeakSet","patchAttachShadow","shadowDoms","restoreHandlers","iframeElement","manager","option","sRoot","chars","lookup","i$1","charCodeAt","canvasVarMap","saveWebGLVar","isInstanceOfWebGLObject","list2","ctor","contextMap","variableListFor$1","serializeArg","arg","Float32Array","Float64Array","Int32Array","Uint16Array","Int16Array","Int8Array","Uint8ClampedArray","rr_type","values","ArrayBuffer","base64","arraybuffer","bytes","encode","DataView","byteOffset","byteLength","HTMLImageElement","HTMLCanvasElement","ImageData","serializeArgs","supportedWebGLConstructorNames","initCanvasContextObserver","setPreserveDrawingBufferToTrue","contextType","_len3","_key3","ctxName","getNormalizedContextName","contextAttributes","preserveDrawingBuffer","splice","_unused7","patchGLPrototype","props","getOwnPropertyNames","_loop3","_len4","_key4","recordArgs","_unused8","hookHandler","setter","takeFullSnapshot$1","encodedJs","blob","Blob","atob","WorkerWrapper","objURL","webkitURL","createObjectURL","worker","Worker","revokeObjectURL","CanvasManager","latestId","invokeId","rafStamps","pendingCanvasMutations","initCanvasMutationObserver","initCanvasFPSObserver","clear","resetObservers","fps","_this","canvasContextReset","snapshotInProgressMap","onmessage","commands","rafId","timeBetweenSnapshots","lastSnapshotTime","takeCanvasSnapshots","getCanvas","matchedCanvas","searchCanvas","requestAnimationFrame","root","elem","_ref17","_asyncToGenerator","getContextAttributes","COLOR_BUFFER_BIT","bitmap","createImageBitmap","resizeWidth","resizeHeight","postMessage","_x","cancelAnimationFrame","startRAFTimestamping","startPendingCanvasMutationFlusher","canvas2DReset","props2D","CanvasRenderingContext2D","_loop2","_len2","_key2","_unused6","initCanvas2DMutationObserver","canvasWebGL1and2Reset","WebGLRenderingContext","WebGL","WebGL2RenderingContext","WebGL2","initCanvasWebGLMutationObserver","flushPendingCanvasMutations","setLatestRAFTimestamp","_values","flushPendingCanvasMutationFor","valuesWithType","rest","_objectWithoutPropertiesLoose","_excluded","StylesheetManager","StyleSheetMirror","adoptedStyleSheetCb","linkEl","trackedLinkElements","trackStylesheetInLinkElement","_this2","adoptedStyleSheetData","styleIds","_loop4","CSSRule","_linkEl","ProcessedNodeManager","thisBuffer","buffers","nodeMap","active","destroy","recording","cleanFrame","debug","t2","Mirror","record","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordAfter","errorHandler2","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","color","date","email","month","number","search","tel","time","week","select","password","NodeList","DOMTokenList","polyfill$1","incrementalSnapshotCount","eventProcessor","buf","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","getMirror","nodeMirror","slimDOM","snapshot","initialOffset","CustomElement","plugin","addCustomEvent","tag","freezePage","takeFullSnapshot","NotStarted","Running","Stopped","__defProp2","__defNormalProp2","__publicField22","utils","__proto__","getBaseDimension","rootIframe","frameElement","relativeScale","absoluteScale","frameDimension","frameBaseDimension","getNestedRule","getPositionsAndIndex","nestedIndex","iterateResolveTree","tree","children","polyfill","queueToResolveTrees","queue","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","nextInTree","idx","parentInTree","uniqueTextMutations","idSet","uniqueMutations","Symbol","toStringTag","decodeBase64","StackFrame","fileName","functionName","lineNumber","columnNumber","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","ErrorStackParser","parse","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","line","sanitizedLine","tokens","locationParts","functionNameRegex","e","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","i","parseFloat","pathToSelector","outerHTML","localName","domSiblings","sibling","isObject","isObjTooDeep","limit","stringifyOptions","numOfKeysLimit","depthOfLimit","thisPos","Infinity","_obj","shouldIgnore","stringLengthLimit","Event","eventResult","eventValue","HTMLElement","defaultLogOptions","level","lengthThreshold","logger","initLogObserver","logOptions","loggerType","logCount","inStack","cancelHandlers","trace","stackFrame","unhandledrejectionHandler","reason","levelType","_logger","getRecordConsolePlugin","needle","nativeIsArray","ObjProto","type_utils_hasOwnProperty","hasOwnProperty","type_utils_toString","isFunction","isNativeFunction","isUndefined","isString","isNull","isNullish","isNumber","isBoolean","isFormData","FormData","isPrimitive","isBuiltin","isEvent","base","isInstanceOf","parsedStackResults","lastKeysCount","cachedFilenameChunkIds","isError","getFilenameToChunkIdMap","stackParser","chunkIdMap","_posthogChunkIds","chunkIdKeys","reduce","acc","stackKey","result","parsedStack","filename","chunkId","UNKNOWN_FUNCTION","createFrame","lineno","colno","frame","platform","function","in_app","extractSafariExtensionDetails","isSafariExtension","isSafariWebExtension","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackLineParser","noFnParts","col","subMatch","geckoREgex","geckoEvalRegex","geckoStackLineParser","WEBPACK_ERROR_REGEXP","STACKTRACE_FRAME_LIMIT","createStackParser","parsers","skipFirstLines","frames","cleanedLine","parser","localStack","reverse","arr","reverseAndStripFrames","ErrorPropertiesBuilder","coercers","modifiers","buildFromUnknown","hint","mechanism","handled","exceptionWithCause","buildCoercingContext","parsingContext","buildParsingContext","exceptionWithStack","parseStacktrace","$exception_list","convertToExceptionList","$exception_level","modifyFrames","exceptionList","exc","applyModifiers","coerceFallback","_ctx$syntheticExcepti","syntheticException","synthetic","cause","applyChunkIds","chunk_id","applyCoercers","adapter","coerce","newFrames","modifier","_mechanism$type","_mechanism$handled","_exceptionWithStack$s","currentException","depth","DOMExceptionCoercer","isDOMException","isDOMError","hasStack","getType","getValue","ErrorCoercer","isPlainError","getMessage","getStack","_ctx","ErrorEventCoercer","exceptionLike","ERROR_TYPES_PATTERN","StringCoercer","getInfos","groups","severityLevels","extractExceptionKeysForMessage","maxLength","sort","serialized","ObjectCoercer","errorProperty","getErrorPropertyFromObject","isSeverityLevel","getObjectClassName","isEmptyString","getPrototypeOf","EventCoercer","constructorName","PrimitiveCoercer","PromiseRejectionEventCoercer","getUnhandledRejectionReason","detail","undefined","global","nativeForEach","navigator","fetch","XMLHttpRequest","AbortController","userAgent","assignableWindow","isAngularZonePresent","isDocument","_createLogger","prefix","_log","consoleLog","info","critical","_len5","_key5","uninitializedWarning","methodName","createLogger","additionalPrefix","breaker","eachArray","iterator","l","each","pair","extend","ownProps","resArray","formDataToQuery","formdata","arg_separator","use_val","use_key","tph_arr","val","encodeURIComponent","File","isFile","__posthog_wrapped__","isHostOnDenyList","_options$payloadHostD","hostname","hostnameFromURL","defaultNotDenied","isHostDenied","payloadHostDenyList","deny","isElementNode","isTag","splitClassString","getClassNames","baseVal","getSafeText","elText","shouldCaptureElement","isSensitiveElement","_makeSafeText","isTextNode","shouldCaptureValue","makeSafeText","autocaptureCompatibleElements","curEl","classes","coreCCPattern","anchoredCCRegex","unanchoredCCRegex","coreSSNPattern","anchoredSSNRegex","unanchoredSSNRegex","anchorRegexes","getDirectAndNestedSpanText","getNestedSpanText","_child$tagName","spanText","getElementsChainString","elements","ret","_element$nth_child","_element$nth_of_type","el_string","tag_name","attr_class","single_class","nth_child","nth_of_type","attr_id","sortedAttributes","a","localeCompare","escapeQuotes","elementsToString","_el$$el_text","_el$attr__href","response","extractAttrClass","extractElements","defaultNetworkOptions","initiatorTypes","maskRequestFn","recordHeaders","recordBody","recordInitialRequests","recordPerformance","performanceEntryTypeToObserve","payloadSizeLimitBytes","isNavigationTiming","entry","entryType","isResourceTiming","initPerformanceObserver","initialPerformanceEntries","performance","getEntries","initiatorType","requests","flatMap","prepareRequest","status","networkRequest","isInitial","PerformanceObserver","performanceEntries","wrappedInitiatorFilter","entryTypes","supportedEntryTypes","shouldRecordHeaders","shouldRecordBody","headers","matchesContentType","contentTypes","contentTypeHeader","contentType","ct","isBlobURL","protocol","Request","recordBodyType","getRequestPerformanceEntry","_x2","_x3","_x4","_x5","_x6","_getRequestPerformanceEntry","attempt","performanceEntry","array","predicate","findLast","getEntriesByName","startTime","Promise","resolve","_tryReadXHRBody","exposesServerTiming","responseEnd","timeOrigin","floor","toJSON","round","endTime","requestHeaders","requestBody","responseHeaders","responseBody","timing","serverTiming","duration","contentTypePrefixDenyList","_tryReadBody","r","reject","clone","then","txt","finally","_tryReadRequestBody2","_tryReadResponseBody2","cannotReadBodyReason","_r$headers$get","contentTypeIsDenied","_checkForCannotReadResponseBody","initFetchObserver","recordRequestHeaders","recordResponseHeaders","restorePatch","originalFetch","res","req","header","_x7","_tryReadRequestBody","_x8","_tryReadResponseBody","_res","catch","_x9","_x0","initialisedHandler","initNetworkObserver","networkOptions","request","maskedRequest","performanceObserver","xhrObserver","fetchObserver","originalOpen","async","username","xhr","originalSetRequestHeader","setRequestHeader","originalSend","send","readyStateListener","DONE","getAllResponseHeaders","initXhrObserver","getRecordNetworkPlugin","__PosthogExtensions__","rrwebPlugins","rrweb","rrwebRecord","version","rrwebConsoleRecord","c","t","u","o","f","__b","__r","diffed","__c","unmount","__h","__H","__","__V","B","__N","setState","shouldComponentUpdate","componentWillUpdate","__e","__s","z","_","F","q","sub","__P","k","w","__v","j","g","SurveyWidgetType","SurveyPosition","SurveyType","SurveyQuestionType","SurveyQuestionBranchingType","SurveySchedule","SurveyEventName","SurveyEventProperties","SURVEY_LOGGER","SURVEY_SEEN_PREFIX","SURVEY_IN_PROGRESS_PREFIX","getSurveyInteractionProperty","survey","action","surveyProperty","current_iteration","getSurveySeenKey","surveySeenKey","setSurveySeenOnLocalStorage","localStorage","getItem","setItem","IN_APP_SURVEY_TYPES","Popover","Widget","API","trunc","ceil","isInteger","isFinite","DIGITS","UUID","TypeError","fromFieldsV7","unixTsMs","randA","randBHi","randBLo","RangeError","pow","equals","compareTo","diff","sign","V7Generator","_timestamp","_counter","_random","DefaultRandom","generate","generateOrAbort","valueAfterReset","ts","_resetCounter","nextUint32","defaultGenerator","getRandomValues","UUIDV7_DENY_WEAK_RNG","random","crypto","_buffer","_cursor","uuidv7","uuidv7obj","MOBILE","ANDROID","TABLET","ANDROID_TABLET","IPAD","APPLE_WATCH","APPLE","BLACKBERRY","NINTENDO","PLAYSTATION","XBOX","WINDOWS_PHONE","WINDOWS","NOKIA","OUYA","GENERIC","GENERIC_MOBILE","GENERIC_TABLET","XBOX_REGEX","PLAYSTATION_REGEX","NINTENDO_REGEX","BLACKBERRY_REGEX","detectDeviceType","user_agent","device","detectDevice","sendBeacon","isMatchingRegex","pattern","isValidRegex","propertyComparisons","exact","targets","is_not","not_regex","icontains","not_icontains","_window","_document","getSurveyResponseKey","questionId","BLACK_TEXT_COLOR","defaultSurveyAppearance","fontFamily","backgroundColor","submitButtonColor","submitButtonTextColor","ratingButtonColor","ratingButtonActiveColor","borderColor","placeholder","whiteLabel","displayThankYouMessage","thankYouMessageHeader","Right","widgetType","Tab","widgetLabel","widgetColor","zIndex","disabledButtonOpacity","maxWidth","textSubtleColor","boxPadding","boxShadow","borderRadius","shuffleQuestions","surveyPopupDelaySeconds","outlineColor","inputBackground","inputTextColor","scrollbarThumbColor","scrollbarTrackColor","hex2rgb","hexColor","parseInt","getContrastingTextColor","rgb","nameColorToHex","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","colorMatch","sqrt","getSurveyStylesheet","posthog","prepareStylesheet","_posthog$config","config","prepare_external_dependency_stylesheet","retrieveSurveyShadow","widgetClassName","getSurveyContainerClass","existingDiv","shadow","isNewlyCreated","div","addSurveyCSSVariablesToElement","appearance","effectiveAppearance","hostStyle","surveyHasBottomBorder","Center","Left","defaultFontStack","getFontFamily","attachShadow","mode","existingStylesheet","getSurveyResponseValue","responses","sendSurveyEvent","surveySubmissionId","isSurveyCompleted","SENT","SURVEY_NAME","SURVEY_ID","SURVEY_ITERATION","SURVEY_ITERATION_START_DATE","current_iteration_start_date","SURVEY_QUESTIONS","questions","question","SURVEY_SUBMISSION_ID","SURVEY_COMPLETED","sessionRecordingUrl","get_session_replay_url","$set","dispatchEvent","CustomEvent","surveyId","clearInProgressSurveyState","dismissedSurveyEvent","readOnly","inProgressSurvey","getInProgressSurveyState","DISMISSED","SURVEY_PARTIALLY_COMPLETED","resp","shuffle","reverseIfUnshuffled","unshuffled","shuffled","getDisplayOrderQuestions","enable_partial_responses","canActivateRepeatedly","_survey$conditions3","conditions","events","repeatedActivation","_survey$conditions","_survey$conditions2","hasEvents","schedule","Always","isSurveyInProgress","SurveyContext","createContext","isPreviewMode","previewPageIndex","onPopupSurveyDismissed","isPopup","onPreviewSubmit","useSurveyContext","useContext","renderChildrenAsTextOrHtml","component","renderAsHtml","cloneElement","dangerouslySetInnerHTML","__html","defaultMatchType","matchType","doesSurveyUrlMatch","_survey$conditions4","_window$location","_survey$conditions5","urlMatchType","getInProgressSurveyStateKey","setInProgressSurveyState","state","stateString","removeItem","asSelector","satisfiedEmoji","_jsx","xmlns","viewBox","neutralEmoji","dissatisfiedEmoji","veryDissatisfiedEmoji","verySatisfiedEmoji","cancelSVG","_jsxs","fill","IconPosthogLogo","maskType","maskUnits","mask","transform","PostHogLogo","BottomSection","submitDisabled","onSubmit","skipSubmitButton","disabled","onClick","QuestionHeader","forceDisableHtml","htmlFor","Open","description","descriptionContentType","Cancel","ConfirmationMessage","onClose","useEffect","handleKeyDown","preventDefault","role","tabIndex","thankYouMessageCloseButtonText","isValidStringArray","OpenTextQuestion","displayQuestionIndex","initialValue","inputRef","useRef","setText","useState","_inputRef$current","focus","Fragment","ref","rows","onInput","currentTarget","stopPropagation","onKeyDown","buttonText","optional","LinkQuestion","RatingQuestion","scale","starting","rating","setRating","handleSubmit","num","display","threeScaleEmojis","fiveScaleEmojis","emoji","gridTemplateColumns","getScaleNumbers","RatingButton","setActiveNumber","lowerBoundLabel","upperBoundLabel","submitButtonText","MultipleChoiceQuestion","openChoiceInputRef","choices","useMemo","shuffleOptions","displayOrderChoices","openEndedChoice","hasOpenChoice","shuffledOptions","getDisplayOrderChoices","selectedChoices","setSelectedChoices","initializeSelectedChoices","questionType","SingleChoice","openEndedState","setOpenEndedState","initializeOpenEndedState","isSelected","inputValue","openEndedValue","choice","isSingleChoiceQuestion","isMultipleChoiceQuestion","MultipleChoice","shouldSkipSubmit","handleChoiceChange","isOpenChoice","newOpenSelected","prev","_openChoiceInputRef$c","handleOpenEndedInputChange","handleOpenEndedKeyDown","isSubmitDisabled","inputId","openInputId","onChange","fiveScaleNumbers","sevenScaleNumbers","tenScaleNumbers","DISPATCH_FEEDBACK_WIDGET_EVENT","WIDGET_LISTENER_ATTRIBUTE","getNextSurveyStep","currentQuestionIndex","_question$branching","nextQuestionIndex","branching","End","SpecificQuestion","ResponseBased","_question$branching2","selectedChoiceIndex","responseValues","nextStep","Rating","_question$branching3","ratingBucket","responseValue","getRatingBucketForResponseValue","SURVEY_NEXT_TO_TRIGGER_PARAMS","SurveyManager","_surveyTimeouts","_widgetSelectorListeners","_prefillHandledSurveys","handlePopoverSurvey","_survey$appearance","_clearSurveyTimeout","_addSurveyToFocus","delaySeconds","_posthog","Preact","SurveyPopup","removeSurveyFromFocus","_removeSurveyFromFocus","timeoutId","_handleWidget","FeedbackWidget","_removeWidgetSelectorListener","_removeSurveyFromDom","existing","_manageWidgetSelectorListener","currentElement","existingListenerData","_survey$appearance2","_survey$appearance3","positionStyles","NextToTrigger","surveyWidth","buttonRect","viewportHeight","viewportWidth","estimatedMinSurveyHeight","spacing","spaceBelow","bottom","spaceAbove","showAbove","right","getNextToTriggerPosition","renderPopover","renderSurvey","_this$_posthog$config","surveys","prefillFromUrl","_handleUrlPrefill","getActiveMatchingSurveys","forceReload","_this$_posthog","getSurveys","targetingMatchedSurveys","checkSurveyEligibility","eligible","_isSurveyConditionMatched","_hasActionOrEventTriggeredSurvey","_checkFlags","callSurveysAndEvaluateDisplayLogic","inAppSurveysWithDisplayLogic","inAppSurveysQueue","_sortSurveysByAppearanceDelay","activeSelectorSurveys","_survey$appearance4","_survey$appearance5","_survey$appearance6","_survey$appearance7","Selector","widgetSelector","_surveyInFocus","_clearAutoSubmitTimeout","_a$appearance","_b$appearance","isSurveyInProgressA","isSurveyInProgressB","aIsAlways","bIsAlways","_this$_posthog$config2","params","autoSubmit","searchString","cleanSearch","pairs","decodedKey","decodeURIComponent","decodedValue","questionIndex","extractPrefillParamsFromUrl","prefillParams","responseKey","choiceIndex","choiceIndices","uniqueChoices","convertPrefillToResponses","submissionId","lastQuestionIndex","shouldAutoSubmit","autoSubmitIfComplete","Link","allRequiredQuestionsFilled","_scheduleAutoSubmit","_this$_posthog$config3","_this$_posthog$config4","delay","autoSubmitDelay","_autoSubmitTimeout","_isSurveyFeatureFlagEnabled","flagKey","flagVariant","isFeatureEnabled","featureFlags","send_event","flagVariantCheck","getFeatureFlag","_survey$conditions6","_survey$conditions7","_survey$conditions8","deviceTypes","deviceType","deviceTypesMatchType","doesSurveyDeviceTypesMatch","_survey$conditions9","doesSurveyMatchSelector","_internalFlagCheckSatisfied","internal_targeting_flag_key","eligibility","start_date","end_date","isSurveyRunning","linkedFlagVariant","linked_flag_key","targeting_flag_key","waitPeriodInDays","lastSeenSurveyDate","today","abs","hasWaitPeriodPassed","seenSurveyWaitPeriodInDays","getSurveySeen","_this$_posthog$survey","doesSurveyActivateByEvent","actions","doesSurveyActivateByAction","surveysActivatedByEventsOrActions","_surveyEventReceiver","_survey$feature_flag_","feature_flag_keys","shadowContainer","getTestAPI","addSurveyToFocus","surveyInFocus","surveyTimeouts","handleWidget","manageWidgetSelectorListener","sortSurveysByAppearanceDelay","checkFlags","isSurveyFeatureFlagEnabled","generateSurveys","isSurveysEnabled","intervalId","surveyManager","disable_surveys_automatic_display","startInterval","setInterval","hidden","clearInterval","useHideSurveyOnURLChange","setSurveyVisible","checkUrlMatch","_survey$appearance8","isSurveyTypeWidget","doesSurveyMatchUrlCondition","isSurveyWidgetTypeTab","originalPushState","history","pushState","originalReplaceState","replaceState","getPopoverPosition","surveyWidgetType","ExternalSurvey","TopLeft","TopRight","TopCenter","MiddleLeft","MiddleRight","MiddleCenter","_survey$appearance1","_survey$appearance10","_survey$appearance11","_survey$appearance12","_survey$appearance13","_survey$appearance14","onCloseConfirmationMessage","surveyContainerRef","surveyPopupDelayMilliseconds","isPopupVisible","isSurveySent","hidePopupWithViewTransition","millisecondDelay","setIsPopupVisible","setIsSurveySent","removeDOMAndHidePopup","startViewTransition","_surveyContainerRef$c","finished","handleSurveyClosed","handleSurveySent","_survey$appearance9","_survey$appearance0","autoDisappear","showSurvey","SHOWN","toISOString","usePopupVisibility","shouldShowConfirmation","surveyContextValue","getInProgressSurvey","Provider","thankYouMessageDescription","thankYouMessageDescriptionContentType","Questions","questionsResponses","setQuestionsResponses","inProgressSurveyData","setCurrentQuestionIndex","surveyQuestions","currentQuestion","at","getQuestionComponent","newResponses","onNextButtonClick","_survey$appearance16","_survey$appearance17","_survey$appearance18","_survey$appearance19","_survey$appearance20","isFeedbackButtonVisible","setIsFeedbackButtonVisible","setShowSurvey","styleOverrides","setStyleOverrides","toggleSurvey","_survey$appearance15","handleShowSurvey","_customEvent$detail","customEvent","resetShowSurvey","baseProps","_createElement","extendPostHogWithSurveys","errorPropertiesBuilder","ErrorTracking","errorToProperties","posthogErrorWrappingFunctions","wrapOnError","captureFn","originalOnError","onerror","_originalOnError","errorProperties","__POSTHOG_INSTRUMENTED__","_win$onerror","wrapUnhandledRejection","originalOnUnhandledRejection","onunhandledrejection","ev","_originalOnUnhandledR","_win$onunhandledrejec","wrapConsoleError","con","originalConsoleError","_con$error","errorWrappingFunctions","addTracingHeaders","hostnames","distinctId","sessionManager","reqHostname","sessionId","windowId","checkAndGetSessionAndWindowId","patchFns","_patchFetch","patchFetch","_patchXHR","patchXHR","tracingHeadersPatchFns","postHogTracingHeadersPatchFns","self","getEntriesByType","responseStart","domInteractive","domContentLoadedEventStart","domComplete","toUpperCase","persisted","timeStamp","activationStart","prerendering","wasDiscarded","delta","concat","navigationType","buffered","visibilityState","T","E","S","firstHiddenTime","L","C","max","reportAllChanges","M","I","A","interactionId","interactionCount","P","durationThreshold","O","R","H","latency","N","requestIdleCallback","W","PerformanceEventTiming","takeRecords","U","V","G","J","K","Q","X","Y","nt","processingEnd","renderTime","processingStart","it","postHogWebVitalsCallbacks","once","timeToFirstByte","resourceLoadDelay","resourceLoadDuration","elementRenderDelay","requestStart","navigationEntry","lcpEntry","lcpResourceEntry","attribution","hadRecentInput","sources","largestShiftTarget","largestShiftTime","largestShiftValue","largestShiftSource","largestShiftEntry","loadState","firstByteToFCP","fcpEntry","onINP","interactionTarget","interactionTargetElement","interactionType","interactionTime","nextPaintTime","processedEventEntries","longAnimationFrameEntries","inputDelay","processingDuration","presentationDelay","limitText","previousElementSibling","_el","getPropertiesFromElement","maskAllAttributes","maskText","elementAttributeIgnorelist","nthChild","nthOfType","currentElem","autocapturePropertiesForElement","_elementsJson$","_elementsJson$2","maskAllElementAttributes","maskAllText","elementAttributeIgnoreList","targetElementList","externalHref","elementsJson","autocaptureAugmentProperties","explicitNoCapture","shouldCaptureEl","augmentProperties","propertyKey","propertyValue","getAugmentPropertiesFromElement","_convertToURL","hrefHost","locationHost","$event_type","$ce_version","$elements","$elements_chain","$el_text","$external_click_url","cachedImplementations","getNativeMutationObserverImplementation","cached","impl","sandbox","getNativeImplementation","asClick","eventTarget","srcElement","_e$target","originalEvent","checkTimeout","thresholdMs","LazyLoadedDeadClicksAutocapture","_asRequiredConfig","providedConfig","_providedConfig$eleme","_providedConfig$scrol","_providedConfig$selec","_providedConfig$mutat","defaultConfig","_defaultConfig","__onCapture","_captureDeadClick","element_attribute_ignorelist","scroll_threshold_ms","selection_change_threshold_ms","mutation_threshold_ms","_clicks","defaultOnCapture","_onClick","click","_ignoreClick","_checkClickTimer","_checkClicks","_onScroll","candidateNow","scrollDelayMs","_onSelectionChange","_lastSelectionChanged","_config","_onCapture","observerTarget","_startClickObserver","_startScrollObserver","_startSelectionChangedObserver","_startMutationObserver","_mutationObserver","NativeMutationObserver","_onMutation","stop","_this$_mutationObserv","_mutations","_lastMutation","alreadyClickedInLastSecond","clicksToCheck","_click$mutationDelayM","mutationDelayMs","absoluteDelayMs","selectionChangedDelayMs","scrollTimeout","selectionChangedTimeout","mutationTimeout","absoluteTimeout","hadScroll","hadMutation","hadSelectionChange","$dead_click_last_mutation_timestamp","$dead_click_event_timestamp","$dead_click_scroll_timeout","$dead_click_mutation_timeout","$dead_click_absolute_timeout","$dead_click_selection_changed_timeout","properties","mask_all_element_attributes","mask_all_text","$dead_click_scroll_delay_ms","$dead_click_mutation_delay_ms","$dead_click_absolute_delay_ms","$dead_click_selection_changed_delay_ms","initDeadClicksAutocapture","ph"],"mappings":"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","x_google_ignoreList":[0,1,34,35,58]}
1
+ {"version":3,"file":"all-external-dependencies.js","sources":["../../../node_modules/.pnpm/@rrweb+record@2.0.0-alpha.17_patch_hash=4a974d451d029e3ef6c302f641dfaf41fb0881146b6d5198ccdbe8d50776b64f/node_modules/@rrweb/record/dist/record.js","../../../node_modules/.pnpm/@rrweb+rrweb-plugin-console-record@2.0.0-alpha.17_patch_hash=70915838e13e38a12d8b9a5e9f_363713bc1c3579cf0582b3fbb3420dde/node_modules/@rrweb/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.js","../../core/dist/utils/string-utils.mjs","../../core/dist/utils/type-utils.mjs","../../core/dist/utils/index.mjs","../../core/dist/error-tracking/chunk-ids.mjs","../../core/dist/error-tracking/parsers/base.mjs","../../core/dist/error-tracking/parsers/safari.mjs","../../core/dist/error-tracking/parsers/chrome.mjs","../../core/dist/error-tracking/parsers/gecko.mjs","../../core/dist/error-tracking/parsers/index.mjs","../../core/dist/error-tracking/error-properties-builder.mjs","../../core/dist/error-tracking/coercers/dom-exception-coercer.mjs","../../core/dist/error-tracking/coercers/error-coercer.mjs","../../core/dist/error-tracking/coercers/error-event-coercer.mjs","../../core/dist/error-tracking/coercers/string-coercer.mjs","../../core/dist/error-tracking/types.mjs","../../core/dist/error-tracking/coercers/utils.mjs","../../core/dist/error-tracking/coercers/object-coercer.mjs","../../core/dist/error-tracking/coercers/event-coercer.mjs","../../core/dist/error-tracking/coercers/primitive-coercer.mjs","../../core/dist/error-tracking/coercers/promise-rejection-event.mjs","../src/utils/globals.ts","../src/utils/type-utils.ts","../src/utils/logger.ts","../src/utils/index.ts","../src/utils/request-utils.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/external/denylist.ts","../src/utils/element-utils.ts","../src/autocapture-utils.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/network-plugin.ts","../src/entrypoints/recorder.ts","../../../node_modules/.pnpm/preact@10.19.3/node_modules/preact/dist/preact.module.js","../../../node_modules/.pnpm/preact@10.19.3/node_modules/preact/hooks/dist/hooks.module.js","../src/posthog-surveys-types.ts","../src/utils/survey-utils.ts","../src/uuidv7.ts","../src/utils/user-agent-utils.ts","../src/request.ts","../src/utils/regex-utils.ts","../src/utils/property-utils.ts","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/surveys.tsx","../src/utils/survey-url-prefill.ts","../src/entrypoints/surveys.ts","../src/entrypoints/exception-autocapture.ts","../src/posthog-exceptions.ts","../src/entrypoints/tracing-headers.ts","../src/constants.ts","../../../node_modules/.pnpm/web-vitals@4.2.4/node_modules/web-vitals/dist/web-vitals.attribution.js","../src/entrypoints/web-vitals.ts","../src/autocapture.ts","../src/utils/prototype-utils.ts","../src/entrypoints/dead-clicks-autocapture.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a;\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$2 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType$2 || {});\nconst testableAccessors$1 = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods$1 = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\n\n/*\nAngular zone patches many things and can pass the untainted checks below, causing performance issues\nAngular zone, puts the unpatched originals on the window, and the names for hose on the zone object.\nSo, we get the unpatched versions from the window object if they exist.\nYou can rename Zone, but this is a good enough proxy to avoid going to an iframe to get the untainted versions.\nsee: https://github.com/angular/angular/issues/26948\n*/\nfunction angularZoneUnpatchedAlternative(key) {\n const angularUnpatchedVersionSymbol = (\n globalThis\n )?.Zone?.__symbol__?.(key);\n if (\n angularUnpatchedVersionSymbol &&\n (globalThis)[angularUnpatchedVersionSymbol]\n ) {\n return (globalThis)[\n angularUnpatchedVersionSymbol\n ];\n } else {\n return undefined;\n }\n}\n\nconst untaintedBasePrototype$1 = {};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key])\n return untaintedBasePrototype$1[key];\n const defaultObj = angularZoneUnpatchedAlternative(key) || globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultObj.prototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch {\n return defaultObj.prototype;\n }\n}\nconst untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache$1[cacheKey])\n return untaintedAccessorCache$1[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache$1[cacheKey])\n return untaintedMethodCache$1[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nconst index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1\n};\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n const hostEl = (\n // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null\n );\n return Boolean(\n hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2\n );\n}\nfunction isNativeShadowDom(shadowRoot2) {\n return Object.prototype.toString.call(shadowRoot2) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(\n /\\sbackground-clip:\\s*text;/g,\n \" -webkit-background-clip: text; background-clip: text;\"\n );\n }\n return cssText;\n}\nfunction escapeImportStatement(rule2) {\n const { cssText } = rule2;\n if (cssText.split('\"').length < 3) return cssText;\n const statement = [\"@import\", `url(${JSON.stringify(rule2.href)})`];\n if (rule2.layerName === \"\") {\n statement.push(`layer`);\n } else if (rule2.layerName) {\n statement.push(`layer(${rule2.layerName})`);\n }\n if (rule2.supportsText) {\n statement.push(`supports(${rule2.supportsText})`);\n }\n if (rule2.media.length) {\n statement.push(rule2.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n const rules2 = s2.rules || s2.cssRules;\n if (!rules2) {\n return null;\n }\n const stringifiedRules = Array.from(\n rules2,\n (rule2) => stringifyRule(rule2, s2.href)\n ).join(\"\");\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule2, sheetHref) {\n if (isCSSImportRule(rule2)) {\n let importStringified;\n try {\n importStringified = // for same-origin stylesheets,\n // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule2);\n } catch (error) {\n importStringified = rule2.cssText;\n }\n if (rule2.styleSheet.href) {\n return absolutifyURLs(importStringified, rule2.styleSheet.href);\n }\n return importStringified;\n } else {\n let ruleStringified = rule2.cssText;\n if (isCSSStyleRule(rule2) && rule2.selectorText.includes(\":\")) {\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule2) {\n return \"styleSheet\" in rule2;\n}\nfunction isCSSStyleRule(rule2) {\n return \"selectorText\" in rule2;\n}\nfunction findStylesheet(doc, href) {\n return Array.from(doc.styleSheets).find((s) => s.href === href);\n}\nclass Mirror {\n constructor() {\n __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue({\n element,\n maskInputOptions,\n tagName,\n type,\n value,\n maskInputFn\n}) {\n let text = value || \"\";\n const actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return true;\n const chunkSize = 50;\n for (let x2 = 0; x2 < canvas.width; x2 += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n const pixelBuffer = new Uint32Array(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(\n ctx,\n x2,\n y,\n Math.min(chunkSize, canvas.width - x2),\n Math.min(chunkSize, canvas.height - y)\n ).data.buffer\n );\n if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n ) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, baseURL ?? window.location.href);\n } catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return (match == null ? void 0 : match[1]) ?? null;\n}\nfunction extractOrigin(url) {\n let origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absolutifyURLs(cssText, href) {\n return (cssText || \"\").replace(\n URL_IN_CSS_REF,\n (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === \"/\") {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split(\"/\");\n const parts = filePath.split(\"/\");\n stack.pop();\n for (const part of parts) {\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n }\n );\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (element instanceof HTMLFormElement) {\n return \"form\";\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nlet canvasService;\nlet canvasCtx;\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars2;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n let descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n let a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absolutifyURLs(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for (let eIndex = element.classList.length; eIndex--; ) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {\n }\n return false;\n}\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n }\n for (let eIndex = node2.classList.length; eIndex--; ) {\n const className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction needMaskingText(node2, maskTextClass, maskTextSelector, checkAncestors) {\n let el;\n if (isElement(node2)) {\n el = node2;\n if (!index$1.childNodes(el).length) {\n return false;\n }\n } else if (index$1.parentElement(node2) === null) {\n return false;\n } else {\n el = index$1.parentElement(node2);\n }\n try {\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(`.${maskTextClass}`)) return true;\n } else {\n if (el.classList.contains(maskTextClass)) return true;\n }\n } else {\n if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector)) return true;\n } else {\n if (el.matches(maskTextSelector)) return true;\n }\n }\n } catch (e2) {\n }\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded) return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false\n } = options;\n const rootId = getRootId(doc, mirror2);\n switch (n2.nodeType) {\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$2.Document,\n childNodes: [],\n compatMode: n2.compatMode\n // probably \"BackCompat\"\n };\n } else {\n return {\n type: NodeType$2.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$2.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc,\n needsMask,\n maskTextFn,\n rootId\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$2.CDATA,\n textContent: \"\",\n rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$2.Comment,\n textContent: index$1.textContent(n2) || \"\",\n rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc)) return void 0;\n const docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var _a2;\n const { needsMask, maskTextFn, rootId } = options;\n const parent = index$1.parentNode(n2);\n const parentTagName = parent && parent.tagName;\n let text = index$1.textContent(n2);\n const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isStyle && text) {\n try {\n if (n2.nextSibling || n2.previousSibling) {\n } else if ((_a2 = parent.sheet) == null ? void 0 : _a2.cssRules) {\n text = stringifyStylesheet(parent.sheet);\n }\n } catch (err) {\n console.warn(\n `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n n2\n );\n }\n text = absolutifyURLs(text, getHref(options.doc));\n }\n if (isScript) {\n text = \"SCRIPT_PLACEHOLDER\";\n }\n if (!isStyle && !isScript && text && needsMask) {\n text = maskTextFn ? maskTextFn(text, index$1.parentElement(n2)) : text.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$2.Text,\n textContent: text || \"\",\n isStyle,\n rootId\n };\n}\n\n/**\n * in production, we've seen elements like\n * `<link type=\"text/css\" rel=\"stylesheet\" id=\"dark-mode-custom-link\"></link>`\n * while HTMLLinkElement suggests an href is always present\n * the w3c spec is less specific\n * and regardless we've seen at least one instance of this in the wild\n * let's be defensive and make sure this is typed as possibly undefined\n */\nfunction hrefFrom(n) {\n return n?.href;\n}\n\nfunction serializeElementNode(n2, options) {\n const {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions = {},\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false,\n rootId\n } = options;\n const needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n const tagName = getValidTagName$1(n2);\n let attributes = {};\n const len = n2.attributes.length;\n for (let i2 = 0; i2 < len; i2++) {\n const attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(\n doc,\n tagName,\n toLowerCase(attr.name),\n attr.value\n );\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n const href = hrefFrom(n2);\n if (href) {\n let stylesheet = findStylesheet(doc, href);\n if (!stylesheet && href.includes('.css')) {\n const rootDomain = window.location.origin;\n const stylesheetPath = href.replace(window.location.href, '');\n const potentialStylesheetHref = rootDomain + '/' + stylesheetPath;\n stylesheet = findStylesheet(doc, potentialStylesheetHref);\n }\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = cssText;\n }\n }\n }\n if (tagName === \"style\" && n2.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n !(n2.innerText || index$1.textContent(n2) || \"\").trim().length) {\n const cssText = stringifyStylesheet(\n n2.sheet\n );\n if (cssText) {\n attributes._cssText = cssText;\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n const value = n2.value;\n const checked = n2.checked;\n if (attributes.type !== \"radio\" && attributes.type !== \"checkbox\" && attributes.type !== \"submit\" && attributes.type !== \"button\" && value) {\n attributes.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName,\n value,\n maskInputOptions,\n maskInputFn\n });\n } else if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes.selected = true;\n } else {\n delete attributes.selected;\n }\n }\n if (tagName === \"dialog\" && n2.open) {\n try {\n attributes.rr_open_mode = n2.matches(\"dialog:modal\") ? \"modal\" : \"non-modal\";\n } catch {\n // likely this is safari not able to deal with the `:modal` selector\n // we can't detect whether the dialog is modal or non-modal open, so have to guess\n // hopefully this is only safari 15.4 and 15.5\n attributes.rr_open_mode = \"modal\"\n attributes.ph_rr_could_not_detect_modal = true\n }\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes.rr_dataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n }\n } else if (!(\"__context\" in n2)) {\n const canvasDataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n const blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n const image = n2;\n const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n const priorCrossOrigin = image.crossOrigin;\n const recordInlineImage = () => {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\n `Cannot inline img src=${imageSrc}! Error: ${err}`\n );\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n else image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n const mediaAttributes = attributes;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n2.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes.src)) {\n if (!n2.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName)) isCustomElement = true;\n } catch (e2) {\n }\n return {\n type: NodeType$2.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock,\n rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$2.Comment) {\n return true;\n } else if (sn.type === NodeType$2.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") && sn.attributes.as === \"script\" || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n /^msapplication-tile(image|color)$/\n ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild = false,\n inlineStylesheet = true,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions = {},\n inlineImages = false,\n recordCanvas = false,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout = 5e3,\n onStylesheetLoad,\n stylesheetLoadTimeout = 5e3,\n keepIframeSrcFn = () => false,\n newlyAddedElement = false\n } = options;\n let { needsMask } = options;\n let { preserveWhiteSpace = true } = options;\n if (!needsMask) {\n const checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(\n n2,\n maskTextClass,\n maskTextSelector,\n checkAncestors\n );\n }\n const _serializedNode = serializeNode(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n let id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$2.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror2.add(n2, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$2.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRootEl = index$1.shadowRoot(n2);\n if (shadowRootEl && isNativeShadowDom(shadowRootEl))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$2.Document || serializedNode.type === NodeType$2.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n };\n if (serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"textarea\" && serializedNode.attributes.value !== void 0) ;\n else {\n for (const childN of Array.from(index$1.childNodes(n2))) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n let shadowRootEl = null;\n if (isElement(n2) && (shadowRootEl = index$1.shadowRoot(n2))) {\n for (const childN of Array.from(index$1.childNodes(shadowRootEl))) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(shadowRootEl) && (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n const parent = index$1.parentNode(n2);\n if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"iframe\") {\n onceIframeLoaded(\n n2,\n () => {\n const iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(\n n2,\n serializedIframeNode\n );\n }\n }\n },\n iframeLoadTimeout\n );\n }\n if (serializedNode.type === NodeType$2.Element && serializedNode.tagName === \"link\" && typeof serializedNode.attributes.rel === \"string\" && (serializedNode.attributes.rel === \"stylesheet\" || serializedNode.attributes.rel === \"preload\" && typeof serializedNode.attributes.href === \"string\" && extractFileExtension(serializedNode.attributes.href) === \"css\")) {\n onceStylesheetLoaded(\n n2,\n () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(\n n2,\n serializedLinkNode\n );\n }\n }\n },\n stylesheetLoadTimeout\n );\n }\n return serializedNode;\n}\nfunction snapshot(n2, options) {\n const {\n mirror: mirror2 = new Mirror(),\n blockClass = \"rr-block\",\n blockSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n inlineImages = false,\n recordCanvas = false,\n maskAllInputs = false,\n maskTextFn,\n maskInputFn,\n slimDOM = false,\n dataURLOptions,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn = () => false\n } = options || {};\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n }\n ) : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (this instanceof a22) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", { value: true });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function() {\n return n2[k];\n }\n });\n });\n return a2;\n}\n// Removed postcss\nclass BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n constructor(..._args) {\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n get childNodes() {\n const childNodes2 = [];\n let childIterator = this.firstChild;\n while (childIterator) {\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n contains(node2) {\n if (!(node2 instanceof BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while (node2.parentNode) {\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appendChild(_newChild) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n insertBefore(_newChild, _refChild) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removeChild(_node) {\n throw new Error(\n `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n toString() {\n return \"RRNode\";\n }\n}\nconst testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\n/*\nAngular zone patches many things and can pass the untainted checks below, causing performance issues\nAngular zone, puts the unpatched originals on the window, and the names for hose on the zone object.\nSo, we get the unpatched versions from the window object if they exist.\nYou can rename Zone, but this is a good enough proxy to avoid going to an iframe to get the untainted versions.\nsee: https://github.com/angular/angular/issues/26948\n*/\nfunction angularZoneUnpatchedAlternative$1(key) {\n const angularUnpatchedVersionSymbol = (\n globalThis\n )?.Zone?.__symbol__?.(key);\n if (\n angularUnpatchedVersionSymbol &&\n (globalThis)[angularUnpatchedVersionSymbol]\n ) {\n return (globalThis)[\n angularUnpatchedVersionSymbol\n ];\n } else {\n return undefined;\n }\n}\n\nconst untaintedBasePrototype = {};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = angularZoneUnpatchedAlternative$1(key) ||globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentElement\");\n}\nfunction textContent(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"textContent\");\n}\nfunction contains(n2, other) {\n return getUntaintedMethod(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode(n2) {\n return getUntaintedMethod(\"Node\", n2, \"getRootNode\")();\n}\nfunction host(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function(...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked ? d : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n }\n );\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n const doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n const el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n const el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {\n }\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n const parent = index.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(\n n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n );\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (n2 instanceof BaseRRNode && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index.shadowRoot(n2));\n}\nclass StyleSheetMirror {\n constructor() {\n __publicField(this, \"id\", 1);\n __publicField(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n getId(stylesheet) {\n return this.styleIDMap.get(stylesheet) ?? -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */\n add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n let newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n2) {\n var _a2;\n let shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index.host(index.getRootNode(n2)))\n shadowHost = index.host(index.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n let rootShadowHost = n2;\n let shadowHost;\n while (shadowHost = getShadowHost(rootShadowHost))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n const shadowHost = getRootShadowHost(n2);\n return index.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n return index.contains(doc, n2) || shadowHostInDom(n2);\n}\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n constructor() {\n __publicField(this, \"length\", 0);\n __publicField(this, \"head\", null);\n __publicField(this, \"tail\", null);\n }\n get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n let current = this.head;\n for (let index2 = 0; index2 < position; index2++) {\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n }\n addNode(n2) {\n const node2 = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node2;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n const current = n2.previousSibling.__ln.next;\n node2.next = current;\n node2.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node2;\n if (current) {\n current.previous = node2;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n const current = n2.nextSibling.__ln.previous;\n node2.previous = current;\n node2.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node2;\n if (current) {\n current.next = node2;\n }\n } else {\n if (this.head) {\n this.head.previous = node2;\n }\n node2.next = this.head;\n this.head = node2;\n }\n if (node2.next === null) {\n this.tail = node2;\n }\n this.length++;\n }\n removeNode(n2) {\n const current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"texts\", []);\n __publicField(this, \"attributes\", []);\n __publicField(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"removes\", []);\n __publicField(this, \"mapRemoves\", []);\n __publicField(this, \"movedMap\", {});\n __publicField(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"blockClass\");\n __publicField(this, \"blockSelector\");\n __publicField(this, \"maskTextClass\");\n __publicField(this, \"maskTextSelector\");\n __publicField(this, \"inlineStylesheet\");\n __publicField(this, \"maskInputOptions\");\n __publicField(this, \"maskTextFn\");\n __publicField(this, \"maskInputFn\");\n __publicField(this, \"keepIframeSrcFn\");\n __publicField(this, \"recordCanvas\");\n __publicField(this, \"inlineImages\");\n __publicField(this, \"slimDOMOptions\");\n __publicField(this, \"dataURLOptions\");\n __publicField(this, \"doc\");\n __publicField(this, \"mirror\");\n __publicField(this, \"iframeManager\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"shadowDomManager\");\n __publicField(this, \"canvasManager\");\n __publicField(this, \"processedNodeManager\");\n __publicField(this, \"unattachedDoc\");\n __publicField(this, \"processMutations\", (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n });\n __publicField(this, \"emit\", () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = /* @__PURE__ */ new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n2) => {\n let ns = n2;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n2) => {\n const parent = index.parentNode(n2);\n if (!parent || !inDom(n2) || parent.tagName === \"TEXTAREA\") {\n return;\n }\n const parentId = isShadowRoot(parent) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(parent);\n const nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n const sn = serializeNodeWithId(n2, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskTextClass: this.maskTextClass,\n maskTextSelector: this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(\n currentN\n );\n }\n if (hasShadowRoot(n2)) {\n this.shadowDomManager.addShadowRoot(index.shadowRoot(n2), this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n }\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n2 of this.movedSet) {\n if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(index.parentNode(n2))) {\n continue;\n }\n pushAdd(n2);\n }\n for (const n2 of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {\n pushAdd(n2);\n } else if (isAncestorInSet(this.movedSet, n2)) {\n pushAdd(n2);\n } else {\n this.droppedSet.add(n2);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node2 = null;\n if (candidate) {\n const parentId = this.mirror.getId(index.parentNode(candidate.value));\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node2 = candidate;\n }\n }\n if (!node2) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(index.parentNode(_node.value));\n const nextId = getNextId(_node.value);\n if (nextId === -1) continue;\n else if (parentId !== -1) {\n node2 = _node;\n break;\n } else {\n const unhandledNode = _node.value;\n const parent = index.parentNode(unhandledNode);\n if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = index.host(parent);\n const parentId2 = this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node2 = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node2) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node2.previous;\n addList.removeNode(node2.value);\n pushAdd(node2.value);\n }\n const payload = {\n texts: this.texts.map((text) => {\n const n2 = text.node;\n const parent = index.parentNode(n2);\n if (parent && parent.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(parent);\n }\n return {\n id: this.mirror.getId(n2),\n value: text.value\n };\n }).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes.map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === \"string\") {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes\n };\n }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.attributeMap = /* @__PURE__ */ new WeakMap();\n this.removes = [];\n this.addedSet = /* @__PURE__ */ new Set();\n this.movedSet = /* @__PURE__ */ new Set();\n this.droppedSet = /* @__PURE__ */ new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n });\n __publicField(this, \"genTextAreaValueMutation\", (textarea) => {\n let item = this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(textarea, item);\n }\n item.attributes.value = Array.from(\n index.childNodes(textarea),\n (cn) => index.textContent(cn) || \"\"\n ).join(\"\");\n });\n __publicField(this, \"processMutation\", (m) => {\n if (isIgnored(m.target, this.mirror, this.slimDOMOptions)) {\n return;\n }\n switch (m.type) {\n case \"characterData\": {\n const value = index.textContent(m.target);\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) && value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(\n m.target,\n this.maskTextClass,\n this.maskTextSelector,\n true\n // checkAncestors\n ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\": {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === \"value\") {\n const type = getInputType(target);\n value = maskInputValue({\n element: target,\n maskInputOptions: this.maskInputOptions,\n tagName: target.tagName,\n type,\n value,\n maskInputFn: this.maskInputFn\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || value === m.oldValue) {\n return;\n }\n let item = this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(\n this.doc,\n toLowerCase(target.tagName),\n toLowerCase(attributeName),\n value\n );\n if (attributeName === \"style\") {\n if (!this.unattachedDoc) {\n try {\n this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n } else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === \"\") {\n item.styleDiff[pname] = false;\n }\n }\n } else if (attributeName === \"open\" && target.tagName === \"DIALOG\") {\n if (target.matches(\"dialog:modal\")) {\n item.attributes[\"rr_open_mode\"] = \"modal\";\n } else {\n item.attributes[\"rr_open_mode\"] = \"non-modal\";\n }\n }\n }\n break;\n }\n case \"childList\": {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\n return;\n if (m.target.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n m.removedNodes.forEach((n2) => {\n const nodeId = this.mirror.getId(n2);\n const parentId = isShadowRoot(m.target) ? this.mirror.getId(index.host(m.target)) : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || isIgnored(n2, this.mirror, this.slimDOMOptions) || !isSerialized(n2, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n2)) {\n deepDelete(this.addedSet, n2);\n this.droppedSet.add(n2);\n } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n2);\n } else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n }\n this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n __publicField(this, \"genAdds\", (n2, target) => {\n if (this.processedNodeManager.inOtherBuffer(n2, this)) return;\n if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;\n if (this.mirror.hasNode(n2)) {\n if (isIgnored(n2, this.mirror, this.slimDOMOptions)) {\n return;\n }\n this.movedSet.add(n2);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n this.addedSet.add(n2);\n this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, this.blockClass, this.blockSelector, false)) {\n index.childNodes(n2).forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n2)) {\n index.childNodes(index.shadowRoot(n2)).forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n2);\n });\n }\n }\n });\n }\n init(options) {\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n index.childNodes(n2).forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.length === 0) return false;\n return _isParentRemoved(removes, n2, mirror2);\n}\nfunction _isParentRemoved(removes, n2, mirror2) {\n let node2 = index.parentNode(n2);\n while (node2) {\n const parentId = mirror2.getId(node2);\n if (removes.some((r2) => r2.id === parentId)) {\n return true;\n }\n node2 = index.parentNode(node2);\n }\n return false;\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0) return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n const parent = index.parentNode(n2);\n if (!parent) {\n return false;\n }\n if (set.has(parent)) {\n return true;\n }\n return _isAncestorInSet(set, parent);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = (...rest) => {\n try {\n return cb(...rest);\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n const observer = new (mutationObserverCtor())(\n callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer))\n );\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction initMoveObserver({\n mousemoveCb,\n sampling,\n doc,\n mirror: mirror2\n}) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle(\n callbackWrapper(\n (source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(\n positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }),\n source\n );\n positions = [];\n timeBaseline = null;\n }\n ),\n callbackThreshold\n );\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(\n typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n );\n }),\n threshold,\n {\n trailing: false\n }\n )\n );\n const handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({\n mouseInteractionCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch (event.pointerType) {\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen) ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n const id = mirror2.getId(target);\n const { clientX, clientY } = e2;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...pointerType !== null && { pointerType }\n });\n };\n };\n Object.keys(MouseInteractions).filter(\n (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n ).forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\n \"mouse\",\n \"pointer\"\n );\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({\n scrollCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }),\n sampling.scroll || 100\n )\n );\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(\n throttle(\n callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }),\n 200\n )\n );\n return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n inputCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n ignoreClass,\n ignoreSelector,\n maskInputOptions,\n maskInputFn,\n sampling,\n userTriggeredOnInput\n}) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = index.parentElement(target);\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n let text = target.value;\n let isChecked = false;\n const type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions,\n tagName,\n type,\n value: text,\n maskInputFn\n });\n }\n cbWithDedup(\n target,\n userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n );\n const name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el) => {\n if (el !== target) {\n const text2 = el.value;\n cbWithDedup(\n el,\n userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n );\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n const id = mirror2.getId(target);\n callbackWrapper(inputCb)({\n ...v2,\n id\n });\n }\n }\n const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n const handlers = events.map(\n (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n );\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n );\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, \"value\"],\n [currentWindow.HTMLInputElement.prototype, \"checked\"],\n [currentWindow.HTMLSelectElement.prototype, \"value\"],\n [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n // Some UI library use selectedIndex to set select value\n [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(\n ...hookProperties.map(\n (p) => hookSetter(\n p[0],\n p[1],\n {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n // userTriggered to false as this could well be programmatic\n });\n }\n },\n false,\n currentWindow\n )\n )\n );\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule2) {\n const positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n const rules2 = Array.from(\n childRule.parentRule.cssRules\n );\n const index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n } else if (childRule.parentStyleSheet) {\n const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n const index2 = rules2.indexOf(childRule);\n pos.unshift(index2);\n }\n return pos;\n }\n return recurse(rule2, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n let id, styleId;\n if (!sheet) return {};\n if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n else styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule2, index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule: rule2, index: index2 }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n win.CSSStyleSheet.prototype.addRule = function(selector, styleBlock, index2 = this.cssRules.length) {\n const rule2 = `${selector} { ${styleBlock} }`;\n return win.CSSStyleSheet.prototype.insertRule.apply(this, [rule2, index2]);\n };\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index: index2 }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n win.CSSStyleSheet.prototype.removeRule = function(index2) {\n return win.CSSStyleSheet.prototype.deleteRule.apply(this, [index2]);\n };\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(\n unmodifiedFunctions[typeKey].insertRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule2, index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule: rule2,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index2 || 0\n // defaults to 0\n ]\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n type.prototype.deleteRule = new Proxy(\n unmodifiedFunctions[typeKey].deleteRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index2] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index2] }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({\n mirror: mirror2,\n stylesheetManager\n}, host2) {\n var _a2, _b, _c;\n let hostId = null;\n if (host2.nodeName === \"#document\") hostId = mirror2.getId(host2);\n else hostId = mirror2.getId(index.host(host2));\n const patchTarget = host2.nodeName === \"#document\" ? (_a2 = host2.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host2.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n const originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(\n patchTarget == null ? void 0 : patchTarget.prototype,\n \"adoptedStyleSheets\"\n ) : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set(sheets) {\n var _a3;\n const result2 = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {\n }\n }\n return result2;\n }\n });\n return callbackWrapper(() => {\n Object.defineProperty(host2, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver({\n styleDeclarationCb,\n mirror: mirror2,\n ignoreCSSAttributes,\n stylesheetManager\n}, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({\n mediaInteractionCb,\n blockClass,\n blockSelector,\n mirror: mirror2,\n sampling,\n doc\n}) {\n const handler = callbackWrapper(\n (type) => throttle(\n callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate, loop } = target;\n mediaInteractionCb({\n type,\n id: mirror2.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n loop\n });\n }),\n sampling.media || 500\n )\n );\n const handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = /* @__PURE__ */ new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== \"string\",\n descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n const restoreHandler = patch(\n doc.fonts,\n \"add\",\n function(original) {\n return function(fontFace) {\n setTimeout(\n callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }),\n 0\n );\n return original.apply(this, [fontFace]);\n };\n }\n );\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror: mirror2, blockClass, blockSelector, selectionCb } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed)) return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i2 = 0; i2 < count; i2++) {\n const range = selection.getRangeAt(i2);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked) continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset,\n end: mirror2.getId(endContainer),\n endOffset\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n doc,\n customElementCb\n}) {\n const win = doc.defaultView;\n if (!win || !win.customElements) return () => {\n };\n const restoreHandler = patch(\n win.customElements,\n \"define\",\n function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name\n }\n });\n } catch (e2) {\n console.warn(`Custom element callback failed for ${name}`);\n }\n return original.apply(this, [name, constructor, options]);\n };\n }\n );\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n const {\n mutationCb,\n mousemoveCb,\n mouseInteractionCb,\n scrollCb,\n viewportResizeCb,\n inputCb,\n mediaInteractionCb,\n styleSheetRuleCb,\n styleDeclarationCb,\n canvasMutationCb,\n fontCb,\n selectionCb,\n customElementCb\n } = o2;\n o2.mutationCb = (...p) => {\n if (hooks.mutation) {\n hooks.mutation(...p);\n }\n mutationCb(...p);\n };\n o2.mousemoveCb = (...p) => {\n if (hooks.mousemove) {\n hooks.mousemove(...p);\n }\n mousemoveCb(...p);\n };\n o2.mouseInteractionCb = (...p) => {\n if (hooks.mouseInteraction) {\n hooks.mouseInteraction(...p);\n }\n mouseInteractionCb(...p);\n };\n o2.scrollCb = (...p) => {\n if (hooks.scroll) {\n hooks.scroll(...p);\n }\n scrollCb(...p);\n };\n o2.viewportResizeCb = (...p) => {\n if (hooks.viewportResize) {\n hooks.viewportResize(...p);\n }\n viewportResizeCb(...p);\n };\n o2.inputCb = (...p) => {\n if (hooks.input) {\n hooks.input(...p);\n }\n inputCb(...p);\n };\n o2.mediaInteractionCb = (...p) => {\n if (hooks.mediaInteaction) {\n hooks.mediaInteaction(...p);\n }\n mediaInteractionCb(...p);\n };\n o2.styleSheetRuleCb = (...p) => {\n if (hooks.styleSheetRule) {\n hooks.styleSheetRule(...p);\n }\n styleSheetRuleCb(...p);\n };\n o2.styleDeclarationCb = (...p) => {\n if (hooks.styleDeclaration) {\n hooks.styleDeclaration(...p);\n }\n styleDeclarationCb(...p);\n };\n o2.canvasMutationCb = (...p) => {\n if (hooks.canvasMutation) {\n hooks.canvasMutation(...p);\n }\n canvasMutationCb(...p);\n };\n o2.fontCb = (...p) => {\n if (hooks.font) {\n hooks.font(...p);\n }\n fontCb(...p);\n };\n o2.selectionCb = (...p) => {\n if (hooks.selection) {\n hooks.selection(...p);\n }\n selectionCb(...p);\n };\n o2.customElementCb = (...c2) => {\n if (hooks.customElement) {\n hooks.customElement(...c2);\n }\n customElementCb(...c2);\n };\n}\nfunction initObservers(o2, hooks = {}) {\n const currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n mergeHooks(o2, hooks);\n let mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n const mousemoveHandler = initMoveObserver(o2);\n const mouseInteractionHandler = initMouseInteractionObserver(o2);\n const scrollHandler = initScrollObserver(o2);\n const viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n const inputHandler = initInputObserver(o2);\n const mediaInteractionHandler = initMediaInteractionObserver(o2);\n let styleSheetObserver = () => {\n };\n let adoptedStyleSheetObserver = () => {\n };\n let styleDeclarationObserver = () => {\n };\n let fontObserver = () => {\n };\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n const selectionObserver = initSelectionObserver(o2);\n const customElementObserver = initCustomElementObserver(o2);\n const pluginHandlers = [];\n for (const plugin3 of o2.plugins) {\n pluginHandlers.push(\n plugin3.observer(plugin3.callback, currentWindow, plugin3.options)\n );\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(\n typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n );\n}\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n __publicField(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(\n (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n );\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\") return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId) return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\nclass IframeManager {\n constructor(options) {\n __publicField(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField(this, \"crossOriginIframeStyleMirror\");\n __publicField(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"wrappedEmit\");\n __publicField(this, \"loadListener\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n this.stylesheetManager.styleMirror.generateId.bind(\n this.stylesheetManager.styleMirror\n )\n );\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (this.recordCrossOriginIframes)\n (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\n \"message\",\n this.handleMessage.bind(this)\n );\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(\n iframeEl.contentDocument.adoptedStyleSheets,\n this.mirror.getId(iframeEl.contentDocument)\n );\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow) return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl) return;\n const transformedEvent = this.transformCrossOriginEvent(\n iframeEl,\n crossOriginMessageEvent.data.event\n );\n if (transformedEvent)\n this.wrappedEmit(\n transformedEvent,\n crossOriginMessageEvent.data.isCheckout\n );\n }\n transformCrossOriginEvent(iframeEl, e2) {\n var _a2;\n switch (e2.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n const rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e2;\n }\n case EventType.Custom: {\n this.replaceIds(\n e2.data.payload,\n iframeEl,\n [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n );\n return e2;\n }\n case EventType.IncrementalSnapshot: {\n switch (e2.data.source) {\n case IncrementalSource.Mutation: {\n e2.data.adds.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n this.replaceIdOnNode(n2.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n });\n e2.data.attributes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n e2.data.texts.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e2.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n return e2;\n }\n case IncrementalSource.Font: {\n return e2;\n }\n case IncrementalSource.Selection: {\n e2.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach((style) => {\n this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(\n iframeEl,\n obj[key]\n );\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node2, iframeEl) {\n this.replaceIds(node2, iframeEl, [\"id\", \"rootId\"]);\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node2, rootId) {\n if (node2.type !== NodeType$2.Document && !node2.rootId) node2.rootId = rootId;\n if (\"childNodes\" in node2) {\n node2.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n __publicField(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"scrollCb\");\n __publicField(this, \"bypassOptions\");\n __publicField(this, \"mirror\");\n __publicField(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot2, doc) {\n if (!isNativeShadowDom(shadowRoot2)) return;\n if (this.shadowDoms.has(shadowRoot2)) return;\n this.shadowDoms.add(shadowRoot2);\n const observer = initMutationObserver(\n {\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n },\n shadowRoot2\n );\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(\n initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot2,\n mirror: this.mirror\n })\n );\n setTimeout(() => {\n if (shadowRoot2.adoptedStyleSheets && shadowRoot2.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(\n shadowRoot2.adoptedStyleSheets,\n this.mirror.getId(index.host(shadowRoot2))\n );\n this.restoreHandlers.push(\n initAdoptedStyleSheetObserver(\n {\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager\n },\n shadowRoot2\n )\n );\n }, 0);\n }\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument) return;\n this.patchAttachShadow(\n iframeElement.contentWindow.Element,\n iframeElement.contentDocument\n );\n }\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(\n patch(\n element.prototype,\n \"attachShadow\",\n function(original) {\n return function(option) {\n const sRoot = original.call(this, option);\n const shadowRootEl = index.shadowRoot(this);\n if (shadowRootEl && inDom(this))\n manager.addShadowRoot(shadowRootEl, doc);\n return sRoot;\n };\n }\n )\n );\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n } catch (e2) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for (i2 = 0; i2 < len; i2 += 3) {\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n let contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n return;\n const name = value.constructor.name;\n const list2 = variableListFor$1(ctx, name);\n let index2 = list2.indexOf(value);\n if (index2 === -1) {\n index2 = list2.length;\n list2.push(value);\n }\n return index2;\n};\nfunction serializeArg(value, win, ctx) {\n if (value instanceof Array) {\n return value.map((arg) => serializeArg(arg, win, ctx));\n } else if (value === null) {\n return value;\n } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [Object.values(value)]\n };\n } else if (\n // SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n value instanceof ArrayBuffer\n ) {\n const name = value.constructor.name;\n const base64 = encode(value);\n return {\n rr_type: name,\n base64\n };\n } else if (value instanceof DataView) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (value instanceof HTMLImageElement) {\n const name = value.constructor.name;\n const { src } = value;\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof HTMLCanvasElement) {\n const name = \"HTMLImageElement\";\n const src = value.toDataURL();\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof ImageData) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [serializeArg(value.data, win, ctx), value.width, value.height]\n };\n } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n const name = value.constructor.name;\n const index2 = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name,\n index: index2\n };\n }\n return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n const webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n (name) => typeof win[name] === \"function\"\n );\n return Boolean(\n supportedWebGLConstructorNames.find(\n (name) => value instanceof win[name]\n )\n );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\n const handlers = [];\n const props2D = Object.getOwnPropertyNames(\n win.CanvasRenderingContext2D.prototype\n );\n for (const prop of props2D) {\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n win.CanvasRenderingContext2D.prototype,\n prop,\n function(original) {\n return function(...args) {\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\n setTimeout(() => {\n const recordArgs = serializeArgs(args, win, this);\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(\n win.CanvasRenderingContext2D.prototype,\n prop,\n {\n set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [v2],\n setter: true\n });\n }\n }\n );\n handlers.push(hookHandler);\n }\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n const handlers = [];\n try {\n const restoreHandler = patch(\n win.HTMLCanvasElement.prototype,\n \"getContext\",\n function(original) {\n return function(contextType, ...args) {\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n const ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this)) this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n if (args[0] && typeof args[0] === \"object\") {\n const contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [contextType, ...args]);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, win) {\n const handlers = [];\n const props = Object.getOwnPropertyNames(prototype);\n for (const prop of props) {\n if (\n //prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)\n ) {\n continue;\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n prototype,\n prop,\n function(original) {\n return function(...args) {\n const result2 = original.apply(this, args);\n saveWebGLVar(result2, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, true)) {\n const recordArgs = serializeArgs(args, win, this);\n const mutation = {\n type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result2;\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(prototype, prop, {\n set(v2) {\n cb(this.canvas, {\n type,\n property: prop,\n args: [v2],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n }\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector) {\n const handlers = [];\n handlers.push(\n ...patchGLPrototype(\n win.WebGLRenderingContext.prototype,\n CanvasContext.WebGL,\n cb,\n blockClass,\n blockSelector,\n win\n )\n );\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n handlers.push(\n ...patchGLPrototype(\n win.WebGL2RenderingContext.prototype,\n CanvasContext.WebGL2,\n cb,\n blockClass,\n blockSelector,\n win\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nconst encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nconst decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));\nconst blob = typeof window !== \"undefined\" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\nfunction WorkerWrapper(options) {\n let objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL) throw \"\";\n const worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", () => {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\n \"data:text/javascript;base64,\" + encodedJs,\n {\n name: options == null ? void 0 : options.name\n }\n );\n } finally {\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nclass CanvasManager {\n constructor(options) {\n __publicField(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField(this, \"rafStamps\", { latestId: 0, invokeId: null });\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"resetObservers\");\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"processMutation\", (target, mutation) => {\n const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n if (newFrame || !this.rafStamps.invokeId)\n this.rafStamps.invokeId = this.rafStamps.latestId;\n if (!this.pendingCanvasMutations.has(target)) {\n this.pendingCanvasMutations.set(target, []);\n }\n this.pendingCanvasMutations.get(target).push(mutation);\n });\n const {\n sampling = \"all\",\n win,\n blockClass,\n blockSelector,\n recordCanvas,\n dataURLOptions\n } = options;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\")\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\")\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions\n });\n }\n reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n }\n freeze() {\n this.frozen = true;\n }\n unfreeze() {\n this.frozen = false;\n }\n lock() {\n this.locked = true;\n }\n unlock() {\n this.locked = false;\n }\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n true\n );\n const snapshotInProgressMap = /* @__PURE__ */ new Map();\n const worker = new WorkerWrapper();\n worker.onmessage = (e2) => {\n const { id } = e2.data;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data)) return;\n const { base64, type, width, height } = e2.data;\n this.mutationCb({\n id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [0, 0, width, height]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [{ rr_type: \"ArrayBuffer\", base64 }],\n type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n const timeBetweenSnapshots = 1e3 / fps;\n let lastSnapshotTime = 0;\n let rafId;\n const getCanvas = () => {\n const matchedCanvas = [];\n const searchCanvas = (root) => {\n root.querySelectorAll(\"canvas\").forEach((canvas) => {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n root.querySelectorAll(\"*\").forEach((elem) => {\n if (elem.shadowRoot) {\n searchCanvas(elem.shadowRoot);\n }\n });\n };\n searchCanvas(win.document);\n return matchedCanvas;\n };\n const takeCanvasSnapshots = (timestamp) => {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n getCanvas().forEach(async (canvas) => {\n var _a2;\n const id = this.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id)) return;\n if (canvas.width === 0 || canvas.height === 0) return;\n snapshotInProgressMap.set(id, true);\n if ([\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n const context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n // createImageBitmap throws if resizing to 0\n // Fallback to intrinsic size if canvas has not yet rendered\n const width = canvas.clientWidth || canvas.width;\n const height = canvas.clientHeight || canvas.height;\n const bitmap = await createImageBitmap(canvas, {\n resizeWidth: width,\n resizeHeight: height\n });\n worker.postMessage(\n {\n id,\n bitmap,\n width: width,\n height: height,\n dataURLOptions: options.dataURLOptions\n },\n [bitmap]\n );\n });\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = () => {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n }\n initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n false\n );\n const canvas2DReset = initCanvas2DMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n this.resetObservers = () => {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n }\n startPendingCanvasMutationFlusher() {\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n startRAFTimestamping() {\n const setLatestRAFTimestamp = (timestamp) => {\n this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n }\n flushPendingCanvasMutations() {\n this.pendingCanvasMutations.forEach(\n (_values, canvas) => {\n const id = this.mirror.getId(canvas);\n this.flushPendingCanvasMutationFor(canvas, id);\n }\n );\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1) return;\n const values = valuesWithType.map((value) => {\n const { type: type2, ...rest } = value;\n return rest;\n });\n const { type } = valuesWithType[0];\n this.mutationCb({ id, type, commands: values });\n this.pendingCanvasMutations.delete(canvas);\n }\n}\nclass StylesheetManager {\n constructor(options) {\n __publicField(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"adoptedStyleSheetCb\");\n __publicField(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl)) return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0) return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r2, index2) => ({\n rule: stringifyRule(r2, sheet.href),\n index: index2\n }))\n });\n } else styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n }\n // TODO: take snapshot on stylesheet reload by applying event listener\n trackStylesheetInLinkElement(_linkEl) {\n }\n}\nclass ProcessedNodeManager {\n constructor() {\n __publicField(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"active\", false);\n }\n inOtherBuffer(node2, thisBuffer) {\n const buffers = this.nodeMap.get(node2);\n return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n }\n add(node2, buffer) {\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(() => {\n this.nodeMap = /* @__PURE__ */ new WeakMap();\n this.active = false;\n });\n }\n this.nodeMap.set(node2, (this.nodeMap.get(node2) || /* @__PURE__ */ new Set()).add(buffer));\n }\n destroy() {\n }\n}\nlet wrappedEmit;\nlet takeFullSnapshot$1;\nlet canvasManager;\nlet recording = false;\ntry {\n if (Array.from([1], (x2) => x2 * 2)[0] !== 2) {\n const cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror$2();\nfunction record(options = {}) {\n const {\n emit,\n checkoutEveryNms,\n checkoutEveryNth,\n blockClass = \"rr-block\",\n blockSelector = null,\n ignoreClass = \"rr-ignore\",\n ignoreSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n maskAllInputs,\n maskInputOptions: _maskInputOptions,\n slimDOMOptions: _slimDOMOptions,\n maskInputFn,\n maskTextFn,\n hooks,\n packFn,\n sampling = {},\n dataURLOptions = {},\n mousemoveWait,\n recordDOM = true,\n recordCanvas = false,\n recordCrossOriginIframes = false,\n recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n userTriggeredOnInput = false,\n collectFonts = false,\n inlineImages = false,\n plugins,\n keepIframeSrcFn = () => false,\n ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n errorHandler: errorHandler2\n } = options;\n registerErrorHandler(errorHandler2);\n const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return () => {\n };\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : { password: true };\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e2) => {\n for (const plugin3 of plugins || []) {\n if (plugin3.eventProcessor) {\n e2 = plugin3.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = (r2, isCheckout) => {\n var _a2;\n const e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n const message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout\n };\n window.parent.postMessage(message, \"*\");\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot$1(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m\n }\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p\n }\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p\n }\n });\n const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a2\n }\n });\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n const iframeManager = new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit\n });\n for (const plugin3 of plugins || []) {\n if (plugin3.getMirror)\n plugin3.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass,\n blockSelector,\n mirror,\n sampling: sampling.canvas,\n dataURLOptions\n });\n const shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager\n },\n mirror\n });\n takeFullSnapshot$1 = (isCheckout = false) => {\n if (!recordDOM) {\n return;\n }\n wrappedEmit(\n {\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n },\n isCheckout\n );\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node2 = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n2) => {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(index.shadowRoot(n2), document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn\n });\n if (!node2) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit(\n {\n type: EventType.FullSnapshot,\n data: {\n node: node2,\n initialOffset: getWindowScroll(window)\n }\n },\n isCheckout\n );\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(\n document.adoptedStyleSheets,\n mirror.getId(document)\n );\n };\n try {\n const handlers = [];\n const observe = (doc) => {\n var _a2;\n return callbackWrapper(initObservers)(\n {\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions\n }\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d\n }\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d\n }\n }),\n inputCb: (v2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v2\n }\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p\n }\n }),\n styleSheetRuleCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r2\n }\n }),\n styleDeclarationCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r2\n }\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p\n }\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p\n }\n });\n },\n customElementCb: (c2) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c2\n }\n });\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskTextClass,\n maskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordDOM,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter((p) => p.observer)) == null ? void 0 : _a2.map((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload\n }\n })\n }))) || []\n },\n hooks\n );\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n } catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot$1();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(\n on(\"DOMContentLoaded\", () => {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\") init();\n })\n );\n handlers.push(\n on(\n \"load\",\n () => {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\") init();\n },\n window\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = (tag, payload) => {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag,\n payload\n }\n });\n};\nrecord.freezePage = () => {\n mutationBuffers.forEach((buf) => buf.freeze());\n};\nrecord.takeFullSnapshot = (isCheckout) => {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot$1(isCheckout);\n};\nrecord.mirror = mirror;\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nexport {\n record\n};\n//# sourceMappingURL=record.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField2 = (obj, key, value) => __defNormalProp2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar _a;\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nconst testableAccessors$1 = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods$1 = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype$1 = {};\nfunction getUntaintedPrototype$1(key) {\n if (untaintedBasePrototype$1[key])\n return untaintedBasePrototype$1[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors$1 ? testableAccessors$1[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods$1 ? testableMethods$1[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype$1[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype$1[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache$1 = {};\nfunction getUntaintedAccessor$1(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache$1[cacheKey])\n return untaintedAccessorCache$1[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache$1[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache$1 = {};\nfunction getUntaintedMethod$1(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache$1[cacheKey])\n return untaintedMethodCache$1[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype$1(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache$1[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"parentElement\");\n}\nfunction textContent$1(n2) {\n return getUntaintedAccessor$1(\"Node\", n2, \"textContent\");\n}\nfunction contains$1(n2, other) {\n return getUntaintedMethod$1(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode$1(n2) {\n return getUntaintedMethod$1(\"Node\", n2, \"getRootNode\")();\n}\nfunction host$1(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor$1(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets$1(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot$1(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor$1(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll$1(n2, selectors) {\n return getUntaintedAccessor$1(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor$1() {\n return getUntaintedPrototype$1(\"MutationObserver\").constructor;\n}\nconst index$1 = {\n childNodes: childNodes$1,\n parentNode: parentNode$1,\n parentElement: parentElement$1,\n textContent: textContent$1,\n contains: contains$1,\n getRootNode: getRootNode$1,\n host: host$1,\n styleSheets: styleSheets$1,\n shadowRoot: shadowRoot$1,\n querySelector: querySelector$1,\n querySelectorAll: querySelectorAll$1,\n mutationObserver: mutationObserverCtor$1\n};\nfunction isShadowRoot(n2) {\n const hostEl = (\n // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n n2 && \"host\" in n2 && \"mode\" in n2 && index$1.host(n2) || null\n );\n return Boolean(\n hostEl && \"shadowRoot\" in hostEl && index$1.shadowRoot(hostEl) === n2\n );\n}\nclass Mirror {\n constructor() {\n __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2) return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node2) {\n return this.nodeMetaMap.has(node2);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction createMirror$2() {\n return new Mirror();\n}\nconst IGNORED_NODE = -2;\nfunction classMatchesRegex(node2, regex, checkAncestors) {\n if (!node2) return false;\n if (node2.nodeType !== node2.ELEMENT_NODE) {\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n }\n for (let eIndex = node2.classList.length; eIndex--; ) {\n const className = node2.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors) return false;\n return classMatchesRegex(index$1.parentNode(node2), regex, checkAncestors);\n}\nfunction getDefaultExportFromCjs$1(x2) {\n return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, \"default\") ? x2[\"default\"] : x2;\n}\nfunction getAugmentedNamespace$1(n2) {\n if (n2.__esModule) return n2;\n var f2 = n2.default;\n if (typeof f2 == \"function\") {\n var a2 = function a22() {\n if (this instanceof a22) {\n return Reflect.construct(f2, arguments, this.constructor);\n }\n return f2.apply(this, arguments);\n };\n a2.prototype = f2.prototype;\n } else a2 = {};\n Object.defineProperty(a2, \"__esModule\", { value: true });\n Object.keys(n2).forEach(function(k) {\n var d = Object.getOwnPropertyDescriptor(n2, k);\n Object.defineProperty(a2, k, d.get ? d : {\n enumerable: true,\n get: function() {\n return n2[k];\n }\n });\n });\n return a2;\n}\n// Removed postcss here\nclass BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n constructor(..._args) {\n __publicField22(this, \"parentElement\", null);\n __publicField22(this, \"parentNode\", null);\n __publicField22(this, \"ownerDocument\");\n __publicField22(this, \"firstChild\", null);\n __publicField22(this, \"lastChild\", null);\n __publicField22(this, \"previousSibling\", null);\n __publicField22(this, \"nextSibling\", null);\n __publicField22(this, \"ELEMENT_NODE\", 1);\n __publicField22(this, \"TEXT_NODE\", 3);\n __publicField22(this, \"nodeType\");\n __publicField22(this, \"nodeName\");\n __publicField22(this, \"RRNodeType\");\n }\n get childNodes() {\n const childNodes2 = [];\n let childIterator = this.firstChild;\n while (childIterator) {\n childNodes2.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes2;\n }\n contains(node2) {\n if (!(node2 instanceof BaseRRNode)) return false;\n else if (node2.ownerDocument !== this.ownerDocument) return false;\n else if (node2 === this) return true;\n while (node2.parentNode) {\n if (node2.parentNode === this) return true;\n node2 = node2.parentNode;\n }\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appendChild(_newChild) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n insertBefore(_newChild, _refChild) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removeChild(_node) {\n throw new Error(\n `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n toString() {\n return \"RRNode\";\n }\n}\nconst testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a2, _b;\n return Boolean(\n (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a2;\n return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a2;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a2.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"parentElement\");\n}\nfunction textContent(n2) {\n return getUntaintedAccessor(\"Node\", n2, \"textContent\");\n}\nfunction contains(n2, other) {\n return getUntaintedMethod(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode(n2) {\n return getUntaintedMethod(\"Node\", n2, \"getRootNode\")();\n}\nfunction host(n2) {\n if (!n2 || !(\"host\" in n2)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets(n2) {\n return n2.styleSheets;\n}\nfunction shadowRoot(n2) {\n if (!n2 || !(\"shadowRoot\" in n2)) return null;\n return getUntaintedAccessor(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n2, selectors) {\n return getUntaintedAccessor(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function(...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked ? d : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n }\n );\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d;\n const doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc.documentElement.scrollLeft || (doc == null ? void 0 : doc.body) && ((_a2 = index.parentElement(doc.body)) == null ? void 0 : _a2.scrollLeft) || ((_b = doc == null ? void 0 : doc.body) == null ? void 0 : _b.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || (doc == null ? void 0 : doc.body) && ((_c = index.parentElement(doc.body)) == null ? void 0 : _c.scrollTop) || ((_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node2) {\n if (!node2) {\n return null;\n }\n const el = node2.nodeType === node2.ELEMENT_NODE ? node2 : index.parentElement(node2);\n return el;\n}\nfunction isBlocked(node2, blockClass, blockSelector, checkAncestors) {\n if (!node2) {\n return false;\n }\n const el = closestElementOfNode(node2);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass)) return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null) return true;\n } else {\n if (classMatchesRegex(el, blockClass, checkAncestors)) return true;\n }\n } catch (e2) {\n }\n if (blockSelector) {\n if (el.matches(blockSelector)) return true;\n if (checkAncestors && el.closest(blockSelector) !== null) return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n const parent = index.parentNode(target);\n if (parent && parent.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!parent) {\n return true;\n }\n return isAncestorRemoved(parent, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n}\nfunction queueToResolveTrees(queue) {\n const queueNodeMap = {};\n const putIntoMap = (m, parent) => {\n const nodeInTree = {\n value: m,\n parent,\n children: []\n };\n queueNodeMap[m.node.id] = nodeInTree;\n return nodeInTree;\n };\n const queueNodeTrees = [];\n for (const mutation of queue) {\n const { nextId, parentId } = mutation;\n if (nextId && nextId in queueNodeMap) {\n const nextInTree = queueNodeMap[nextId];\n if (nextInTree.parent) {\n const idx = nextInTree.parent.children.indexOf(nextInTree);\n nextInTree.parent.children.splice(\n idx,\n 0,\n putIntoMap(mutation, nextInTree.parent)\n );\n } else {\n const idx = queueNodeTrees.indexOf(nextInTree);\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n }\n continue;\n }\n if (parentId in queueNodeMap) {\n const parentInTree = queueNodeMap[parentId];\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\n continue;\n }\n queueNodeTrees.push(putIntoMap(mutation, null));\n }\n return queueNodeTrees;\n}\nfunction iterateResolveTree(tree, cb) {\n cb(tree.value);\n for (let i2 = tree.children.length - 1; i2 >= 0; i2--) {\n iterateResolveTree(tree.children[i2], cb);\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(\n n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n );\n}\nfunction getBaseDimension(node2, rootIframe) {\n var _a2, _b;\n const frameElement = (_b = (_a2 = node2.ownerDocument) == null ? void 0 : _a2.defaultView) == null ? void 0 : _b.frameElement;\n if (!frameElement || frameElement === rootIframe) {\n return {\n x: 0,\n y: 0,\n relativeScale: 1,\n absoluteScale: 1\n };\n }\n const frameDimension = frameElement.getBoundingClientRect();\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n const relativeScale = frameDimension.height / frameElement.clientHeight;\n return {\n x: frameDimension.x * frameBaseDimension.relativeScale + frameBaseDimension.x,\n y: frameDimension.y * frameBaseDimension.relativeScale + frameBaseDimension.y,\n relativeScale,\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale\n };\n}\nfunction hasShadowRoot(n2) {\n if (!n2) return false;\n if (n2 instanceof BaseRRNode && \"shadowRoot\" in n2) {\n return Boolean(n2.shadowRoot);\n }\n return Boolean(index.shadowRoot(n2));\n}\nfunction getNestedRule(rules2, position) {\n const rule2 = rules2[position[0]];\n if (position.length === 1) {\n return rule2;\n } else {\n return getNestedRule(\n rule2.cssRules[position[1]].cssRules,\n position.slice(2)\n );\n }\n}\nfunction getPositionsAndIndex(nestedIndex) {\n const positions = [...nestedIndex];\n const index2 = positions.pop();\n return { positions, index: index2 };\n}\nfunction uniqueTextMutations(mutations) {\n const idSet = /* @__PURE__ */ new Set();\n const uniqueMutations = [];\n for (let i2 = mutations.length; i2--; ) {\n const mutation = mutations[i2];\n if (!idSet.has(mutation.id)) {\n uniqueMutations.push(mutation);\n idSet.add(mutation.id);\n }\n }\n return uniqueMutations;\n}\nclass StyleSheetMirror {\n constructor() {\n __publicField2(this, \"id\", 1);\n __publicField2(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField2(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n getId(stylesheet) {\n return this.styleIDMap.get(stylesheet) ?? -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */\n add(stylesheet, id) {\n if (this.has(stylesheet)) return this.getId(stylesheet);\n let newId;\n if (id === void 0) {\n newId = this.id++;\n } else newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n2) {\n var _a2;\n let shadowHost = null;\n if (\"getRootNode\" in n2 && ((_a2 = index.getRootNode(n2)) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && index.host(index.getRootNode(n2)))\n shadowHost = index.host(index.getRootNode(n2));\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n let rootShadowHost = n2;\n let shadowHost;\n while (shadowHost = getShadowHost(rootShadowHost))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n const shadowHost = getRootShadowHost(n2);\n return index.contains(doc, shadowHost);\n}\nfunction inDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc) return false;\n return index.contains(doc, n2) || shadowHostInDom(n2);\n}\nconst utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n StyleSheetMirror,\n get _mirror() {\n return _mirror;\n },\n closestElementOfNode,\n getBaseDimension,\n getNestedRule,\n getPositionsAndIndex,\n getRootShadowHost,\n getShadowHost,\n getWindowHeight,\n getWindowScroll,\n getWindowWidth,\n hasShadowRoot,\n hookSetter,\n inDom,\n isAncestorRemoved,\n isBlocked,\n isIgnored,\n isSerialized,\n isSerializedIframe,\n isSerializedStylesheet,\n iterateResolveTree,\n legacy_isTouchEvent,\n get nowTimestamp() {\n return nowTimestamp;\n },\n on,\n patch,\n polyfill: polyfill$1,\n queueToResolveTrees,\n shadowHostInDom,\n throttle,\n uniqueTextMutations\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nconst encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\";\nconst decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));\ntypeof window !== \"undefined\" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\ntry {\n if (Array.from([1], (x2) => x2 * 2)[0] !== 2) {\n const cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\ncreateMirror$2();\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nclass StackFrame {\n constructor(obj) {\n __publicField(this, \"fileName\");\n __publicField(this, \"functionName\");\n __publicField(this, \"lineNumber\");\n __publicField(this, \"columnNumber\");\n this.fileName = obj.fileName || \"\";\n this.functionName = obj.functionName || \"\";\n this.lineNumber = obj.lineNumber;\n this.columnNumber = obj.columnNumber;\n }\n toString() {\n const lineNumber = this.lineNumber || \"\";\n const columnNumber = this.columnNumber || \"\";\n if (this.functionName)\n return `${this.functionName} (${this.fileName}:${lineNumber}:${columnNumber})`;\n return `${this.fileName}:${lineNumber}:${columnNumber}`;\n }\n}\nconst FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\nconst CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nconst SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nconst ErrorStackParser = {\n /**\n * Given an Error object, extract the most information from it.\n */\n parse: function(error) {\n if (!error) {\n return [];\n }\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error.stacktrace !== \"undefined\" || // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof error[\"opera#sourceloc\"] !== \"undefined\"\n ) {\n return this.parseOpera(\n error\n );\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n console.warn(\n \"[console-record-plugin]: Failed to parse error object:\",\n error\n );\n return [];\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function(urlLike) {\n if (urlLike.indexOf(\":\") === -1) {\n return [urlLike];\n }\n const regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n const parts = regExp.exec(urlLike.replace(/[()]/g, \"\"));\n if (!parts) throw new Error(`Cannot parse given url: ${urlLike}`);\n return [parts[1], parts[2] || void 0, parts[3] || void 0];\n },\n parseV8OrIE: function(error) {\n const filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\"(eval \") > -1) {\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g, \"\");\n }\n let sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\");\n const location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n const tokens = sanitizedLine.split(/\\s+/).slice(1);\n const locationParts = this.extractLocation(\n location ? location[1] : tokens.pop()\n );\n const functionName = tokens.join(\" \") || void 0;\n const fileName = [\"eval\", \"<anonymous>\"].indexOf(locationParts[0]) > -1 ? void 0 : locationParts[0];\n return new StackFrame({\n functionName,\n fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n },\n parseFFOrSafari: function(error) {\n const filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function(line) {\n if (line.indexOf(\" > eval\") > -1) {\n line = line.replace(\n / line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g,\n \":$1\"\n );\n }\n if (line.indexOf(\"@\") === -1 && line.indexOf(\":\") === -1) {\n return new StackFrame({\n functionName: line\n });\n } else {\n const functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n const matches = line.match(functionNameRegex);\n const functionName = matches && matches[1] ? matches[1] : void 0;\n const locationParts = this.extractLocation(\n line.replace(functionNameRegex, \"\")\n );\n return new StackFrame({\n functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }\n }, this);\n },\n parseOpera: function(e) {\n if (!e.stacktrace || e.message.indexOf(\"\\n\") > -1 && e.message.split(\"\\n\").length > e.stacktrace.split(\"\\n\").length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function(e) {\n const lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n const lines = e.message.split(\"\\n\");\n const result2 = [];\n for (let i = 2, len = lines.length; i < len; i += 2) {\n const match = lineRE.exec(lines[i]);\n if (match) {\n result2.push(\n new StackFrame({\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n })\n );\n }\n }\n return result2;\n },\n parseOpera10: function(e) {\n const lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n const lines = e.stacktrace.split(\"\\n\");\n const result2 = [];\n for (let i = 0, len = lines.length; i < len; i += 2) {\n const match = lineRE.exec(lines[i]);\n if (match) {\n result2.push(\n new StackFrame({\n functionName: match[3] || void 0,\n fileName: match[2],\n lineNumber: parseFloat(match[1])\n })\n );\n }\n }\n return result2;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function(error) {\n const filtered = error.stack.split(\"\\n\").filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function(line) {\n const tokens = line.split(\"@\");\n const locationParts = this.extractLocation(tokens.pop());\n const functionCall = tokens.shift() || \"\";\n const functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, \"$2\").replace(/\\([^)]*\\)/g, \"\") || void 0;\n return new StackFrame({\n functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2]\n });\n }, this);\n }\n};\nfunction pathToSelector(node2) {\n if (!node2 || !node2.outerHTML) {\n return \"\";\n }\n let path = \"\";\n while (node2.parentElement) {\n let name = node2.localName;\n if (!name) {\n break;\n }\n name = name.toLowerCase();\n const parent = node2.parentElement;\n const domSiblings = [];\n if (parent.children && parent.children.length > 0) {\n for (let i = 0; i < parent.children.length; i++) {\n const sibling = parent.children[i];\n if (sibling.localName && sibling.localName.toLowerCase) {\n if (sibling.localName.toLowerCase() === name) {\n domSiblings.push(sibling);\n }\n }\n }\n }\n if (domSiblings.length > 1) {\n name += `:eq(${domSiblings.indexOf(node2)})`;\n }\n path = name + (path ? \">\" + path : \"\");\n node2 = parent;\n }\n return path;\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isObjTooDeep(obj, limit) {\n if (limit === 0) {\n return true;\n }\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n return true;\n }\n }\n return false;\n}\nfunction stringify(obj, stringifyOptions) {\n const options = {\n numOfKeysLimit: 50,\n depthOfLimit: 4\n };\n Object.assign(options, stringifyOptions);\n const stack = [];\n const keys = [];\n return JSON.stringify(\n obj,\n function(key, value) {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) {\n if (stack[0] === value) {\n value = \"[Circular ~]\";\n } else {\n value = \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n }\n }\n } else {\n stack.push(value);\n }\n if (value === null) return value;\n if (value === void 0) return \"undefined\";\n if (shouldIgnore(value)) {\n return toString(value);\n }\n if (typeof value === \"bigint\") {\n return value.toString() + \"n\";\n }\n if (value instanceof Event) {\n const eventResult = {};\n for (const eventKey in value) {\n const eventValue = value[eventKey];\n if (Array.isArray(eventValue)) {\n eventResult[eventKey] = pathToSelector(\n eventValue.length ? eventValue[0] : null\n );\n } else {\n eventResult[eventKey] = eventValue;\n }\n }\n return eventResult;\n } else if (value instanceof Node) {\n if (value instanceof HTMLElement) {\n return value ? value.outerHTML : \"\";\n }\n return value.nodeName;\n } else if (value instanceof Error) {\n return value.stack ? value.stack + \"\\nEnd of stack for Error object\" : value.name + \": \" + value.message;\n }\n return value;\n }\n );\n function shouldIgnore(_obj) {\n if (isObject(_obj) && Object.keys(_obj).length > options.numOfKeysLimit) {\n return true;\n }\n if (typeof _obj === \"function\") {\n return true;\n }\n if (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n return true;\n }\n return false;\n }\n function toString(_obj) {\n let str = _obj.toString();\n if (options.stringLengthLimit && str.length > options.stringLengthLimit) {\n str = `${str.slice(0, options.stringLengthLimit)}...`;\n }\n return str;\n }\n}\nconst defaultLogOptions = {\n level: [\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"info\",\n \"log\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"trace\",\n \"warn\"\n ],\n lengthThreshold: 1e3,\n logger: \"console\"\n};\nfunction initLogObserver(cb, win, options) {\n const logOptions = options ? Object.assign({}, defaultLogOptions, options) : defaultLogOptions;\n const loggerType = logOptions.logger;\n if (!loggerType) {\n return () => {\n };\n }\n let logger;\n if (typeof loggerType === \"string\") {\n logger = win[loggerType];\n } else {\n logger = loggerType;\n }\n let logCount = 0;\n let inStack = false;\n const cancelHandlers = [];\n if (logOptions.level.includes(\"error\")) {\n const errorHandler = (event) => {\n const message = event.message, error = event.error;\n const trace = ErrorStackParser.parse(error).map(\n (stackFrame) => stackFrame.toString()\n );\n const payload = [stringify(message, logOptions.stringifyOptions)];\n cb({\n level: \"error\",\n trace,\n payload\n });\n };\n win.addEventListener(\"error\", errorHandler);\n cancelHandlers.push(() => {\n win.removeEventListener(\"error\", errorHandler);\n });\n const unhandledrejectionHandler = (event) => {\n let error;\n let payload;\n if (event.reason instanceof Error) {\n error = event.reason;\n payload = [\n stringify(\n `Uncaught (in promise) ${error.name}: ${error.message}`,\n logOptions.stringifyOptions\n )\n ];\n } else {\n error = new Error();\n payload = [\n stringify(\"Uncaught (in promise)\", logOptions.stringifyOptions),\n stringify(event.reason, logOptions.stringifyOptions)\n ];\n }\n const trace = ErrorStackParser.parse(error).map(\n (stackFrame) => stackFrame.toString()\n );\n cb({\n level: \"error\",\n trace,\n payload\n });\n };\n win.addEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n cancelHandlers.push(() => {\n win.removeEventListener(\"unhandledrejection\", unhandledrejectionHandler);\n });\n }\n for (const levelType of logOptions.level) {\n cancelHandlers.push(replace(logger, levelType));\n }\n return () => {\n cancelHandlers.forEach((h) => h());\n };\n function replace(_logger, level) {\n if (!_logger[level]) {\n return () => {\n };\n }\n return utils.patch(\n _logger,\n level,\n (original) => {\n return (...args) => {\n original.apply(this, args);\n if (level === \"assert\" && !!args[0]) {\n return;\n }\n if (inStack) {\n return;\n }\n inStack = true;\n try {\n const trace = ErrorStackParser.parse(new Error()).map((stackFrame) => stackFrame.toString()).splice(1);\n const argsForPayload = level === \"assert\" ? args.slice(1) : args;\n const payload = argsForPayload.map(\n (s) => stringify(s, logOptions.stringifyOptions)\n );\n logCount++;\n if (logCount < logOptions.lengthThreshold) {\n cb({\n level,\n trace,\n payload\n });\n } else if (logCount === logOptions.lengthThreshold) {\n cb({\n level: \"warn\",\n trace: [],\n payload: [\n stringify(\"The number of log records reached the threshold.\")\n ]\n });\n }\n } catch (error) {\n original(\"rrweb logger error:\", error, ...args);\n } finally {\n inStack = false;\n }\n };\n }\n );\n }\n}\nconst PLUGIN_NAME = \"rrweb/console@1\";\nconst getRecordConsolePlugin = (options) => ({\n name: PLUGIN_NAME,\n observer: initLogObserver,\n options\n});\nexport {\n PLUGIN_NAME,\n getRecordConsolePlugin\n};\n//# sourceMappingURL=rrweb-plugin-console-record.js.map\n","function includes(str, needle) {\n return -1 !== str.indexOf(needle);\n}\nconst trim = function(str) {\n return str.trim();\n};\nconst stripLeadingDollar = function(s) {\n return s.replace(/^\\$/, '');\n};\nfunction isDistinctIdStringLike(value) {\n return [\n 'distinct_id',\n 'distinctid'\n ].includes(value.toLowerCase());\n}\nexport { includes, isDistinctIdStringLike, stripLeadingDollar, trim };\n","import { knownUnsafeEditableEvent } from \"../types.mjs\";\nimport { includes } from \"./string-utils.mjs\";\nconst nativeIsArray = Array.isArray;\nconst ObjProto = Object.prototype;\nconst type_utils_hasOwnProperty = ObjProto.hasOwnProperty;\nconst type_utils_toString = ObjProto.toString;\nconst isArray = nativeIsArray || function(obj) {\n return '[object Array]' === type_utils_toString.call(obj);\n};\nconst isFunction = (x)=>'function' == typeof x;\nconst isNativeFunction = (x)=>isFunction(x) && -1 !== x.toString().indexOf('[native code]');\nconst isObject = (x)=>x === Object(x) && !isArray(x);\nconst isEmptyObject = (x)=>{\n if (isObject(x)) {\n for(const key in x)if (type_utils_hasOwnProperty.call(x, key)) return false;\n return true;\n }\n return false;\n};\nconst isUndefined = (x)=>void 0 === x;\nconst isString = (x)=>'[object String]' == type_utils_toString.call(x);\nconst isEmptyString = (x)=>isString(x) && 0 === x.trim().length;\nconst isNull = (x)=>null === x;\nconst isNullish = (x)=>isUndefined(x) || isNull(x);\nconst isNumber = (x)=>'[object Number]' == type_utils_toString.call(x);\nconst isBoolean = (x)=>'[object Boolean]' === type_utils_toString.call(x);\nconst isFormData = (x)=>x instanceof FormData;\nconst isFile = (x)=>x instanceof File;\nconst isPlainError = (x)=>x instanceof Error;\nconst isKnownUnsafeEditableEvent = (x)=>includes(knownUnsafeEditableEvent, x);\nfunction isInstanceOf(candidate, base) {\n try {\n return candidate instanceof base;\n } catch {\n return false;\n }\n}\nfunction isPrimitive(value) {\n return null === value || 'object' != typeof value;\n}\nfunction isBuiltin(candidate, className) {\n return Object.prototype.toString.call(candidate) === `[object ${className}]`;\n}\nfunction isError(candidate) {\n switch(Object.prototype.toString.call(candidate)){\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object DOMError]':\n case '[object WebAssembly.Exception]':\n return true;\n default:\n return isInstanceOf(candidate, Error);\n }\n}\nfunction isErrorEvent(event) {\n return isBuiltin(event, 'ErrorEvent');\n}\nfunction isEvent(candidate) {\n return !isUndefined(Event) && isInstanceOf(candidate, Event);\n}\nfunction isPlainObject(candidate) {\n return isBuiltin(candidate, 'Object');\n}\nconst yesLikeValues = [\n true,\n 'true',\n 1,\n '1',\n 'yes'\n];\nconst isYesLike = (val)=>includes(yesLikeValues, val);\nconst noLikeValues = [\n false,\n 'false',\n 0,\n '0',\n 'no'\n];\nconst isNoLike = (val)=>includes(noLikeValues, val);\nexport { type_utils_hasOwnProperty as hasOwnProperty, isArray, isBoolean, isBuiltin, isEmptyObject, isEmptyString, isError, isErrorEvent, isEvent, isFile, isFormData, isFunction, isInstanceOf, isKnownUnsafeEditableEvent, isNativeFunction, isNoLike, isNull, isNullish, isNumber, isObject, isPlainError, isPlainObject, isPrimitive, isString, isUndefined, isYesLike, noLikeValues, yesLikeValues };\n","export * from \"./bot-detection.mjs\";\nexport * from \"./bucketed-rate-limiter.mjs\";\nexport * from \"./number-utils.mjs\";\nexport * from \"./string-utils.mjs\";\nexport * from \"./type-utils.mjs\";\nexport * from \"./promise-queue.mjs\";\nconst STRING_FORMAT = 'utf8';\nfunction assert(truthyValue, message) {\n if (!truthyValue || 'string' != typeof truthyValue || isEmpty(truthyValue)) throw new Error(message);\n}\nfunction isEmpty(truthyValue) {\n if (0 === truthyValue.trim().length) return true;\n return false;\n}\nfunction removeTrailingSlash(url) {\n return url?.replace(/\\/+$/, '');\n}\nasync function retriable(fn, props) {\n let lastError = null;\n for(let i = 0; i < props.retryCount + 1; i++){\n if (i > 0) await new Promise((r)=>setTimeout(r, props.retryDelay));\n try {\n const res = await fn();\n return res;\n } catch (e) {\n lastError = e;\n if (!props.retryCheck(e)) throw e;\n }\n }\n throw lastError;\n}\nfunction currentTimestamp() {\n return new Date().getTime();\n}\nfunction currentISOTime() {\n return new Date().toISOString();\n}\nfunction safeSetTimeout(fn, timeout) {\n const t = setTimeout(fn, timeout);\n t?.unref && t?.unref();\n return t;\n}\nconst isPromise = (obj)=>obj && 'function' == typeof obj.then;\nconst isError = (x)=>x instanceof Error;\nfunction getFetch() {\n return 'undefined' != typeof fetch ? fetch : void 0 !== globalThis.fetch ? globalThis.fetch : void 0;\n}\nfunction allSettled(promises) {\n return Promise.all(promises.map((p)=>(p ?? Promise.resolve()).then((value)=>({\n status: 'fulfilled',\n value\n }), (reason)=>({\n status: 'rejected',\n reason\n }))));\n}\nexport { STRING_FORMAT, allSettled, assert, currentISOTime, currentTimestamp, getFetch, isError, isPromise, removeTrailingSlash, retriable, safeSetTimeout };\n","let parsedStackResults;\nlet lastKeysCount;\nlet cachedFilenameChunkIds;\nfunction getFilenameToChunkIdMap(stackParser) {\n const chunkIdMap = globalThis._posthogChunkIds;\n if (!chunkIdMap) return;\n const chunkIdKeys = Object.keys(chunkIdMap);\n if (cachedFilenameChunkIds && chunkIdKeys.length === lastKeysCount) return cachedFilenameChunkIds;\n lastKeysCount = chunkIdKeys.length;\n cachedFilenameChunkIds = chunkIdKeys.reduce((acc, stackKey)=>{\n if (!parsedStackResults) parsedStackResults = {};\n const result = parsedStackResults[stackKey];\n if (result) acc[result[0]] = result[1];\n else {\n const parsedStack = stackParser(stackKey);\n for(let i = parsedStack.length - 1; i >= 0; i--){\n const stackFrame = parsedStack[i];\n const filename = stackFrame?.filename;\n const chunkId = chunkIdMap[stackKey];\n if (filename && chunkId) {\n acc[filename] = chunkId;\n parsedStackResults[stackKey] = [\n filename,\n chunkId\n ];\n break;\n }\n }\n }\n return acc;\n }, {});\n return cachedFilenameChunkIds;\n}\nexport { getFilenameToChunkIdMap };\n","import { isUndefined } from \"../../utils/index.mjs\";\nconst UNKNOWN_FUNCTION = '?';\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\n platform: \"web:javascript\",\n filename,\n function: '<anonymous>' === func ? UNKNOWN_FUNCTION : func,\n in_app: true\n };\n if (!isUndefined(lineno)) frame.lineno = lineno;\n if (!isUndefined(colno)) frame.colno = colno;\n return frame;\n}\nexport { UNKNOWN_FUNCTION, createFrame };\n","import { UNKNOWN_FUNCTION } from \"./base.mjs\";\nconst extractSafariExtensionDetails = (func, filename)=>{\n const isSafariExtension = -1 !== func.indexOf('safari-extension');\n const isSafariWebExtension = -1 !== func.indexOf('safari-web-extension');\n return isSafariExtension || isSafariWebExtension ? [\n -1 !== func.indexOf('@') ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`\n ] : [\n func,\n filename\n ];\n};\nexport { extractSafariExtensionDetails };\n","import { UNKNOWN_FUNCTION, createFrame } from \"./base.mjs\";\nimport { extractSafariExtensionDetails } from \"./safari.mjs\";\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\nconst chromeRegex = /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nconst chromeStackLineParser = (line)=>{\n const noFnParts = chromeRegexNoFnName.exec(line);\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n const parts = chromeRegex.exec(line);\n if (parts) {\n const isEval = parts[2] && 0 === parts[2].indexOf('eval');\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n if (subMatch) {\n parts[2] = subMatch[1];\n parts[3] = subMatch[2];\n parts[4] = subMatch[3];\n }\n }\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);\n }\n};\nexport { chromeStackLineParser };\n","import { UNKNOWN_FUNCTION, createFrame } from \"./base.mjs\";\nimport { extractSafariExtensionDetails } from \"./safari.mjs\";\nconst geckoREgex = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst geckoStackLineParser = (line)=>{\n const parts = geckoREgex.exec(line);\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n if (subMatch) {\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = '';\n }\n }\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);\n }\n};\nexport { geckoStackLineParser };\n","import { UNKNOWN_FUNCTION } from \"./base.mjs\";\nimport { chromeStackLineParser } from \"./chrome.mjs\";\nimport { winjsStackLineParser } from \"./winjs.mjs\";\nimport { geckoStackLineParser } from \"./gecko.mjs\";\nimport { opera10StackLineParser, opera11StackLineParser } from \"./opera.mjs\";\nimport { nodeStackLineParser } from \"./node.mjs\";\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STACKTRACE_FRAME_LIMIT = 50;\nfunction reverseAndStripFrames(stack) {\n if (!stack.length) return [];\n const localStack = Array.from(stack);\n localStack.reverse();\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map((frame)=>({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION\n }));\n}\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\nfunction createStackParser(...parsers) {\n return (stack, skipFirstLines = 0)=>{\n const frames = [];\n const lines = stack.split('\\n');\n for(let i = skipFirstLines; i < lines.length; i++){\n const line = lines[i];\n if (line.length > 1024) continue;\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n if (!cleanedLine.match(/\\S*Error: /)) {\n for (const parser of parsers){\n const frame = parser(cleanedLine);\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n if (frames.length >= STACKTRACE_FRAME_LIMIT) break;\n }\n }\n return reverseAndStripFrames(frames);\n };\n}\nexport { chromeStackLineParser, createStackParser, geckoStackLineParser, nodeStackLineParser, opera10StackLineParser, opera11StackLineParser, reverseAndStripFrames, winjsStackLineParser };\n","import { isArray } from \"../utils/index.mjs\";\nimport { getFilenameToChunkIdMap } from \"./chunk-ids.mjs\";\nimport { createStackParser } from \"./parsers/index.mjs\";\nconst MAX_CAUSE_RECURSION = 4;\nclass ErrorPropertiesBuilder {\n constructor(coercers = [], parsers = [], modifiers = []){\n this.coercers = coercers;\n this.modifiers = modifiers;\n this.stackParser = createStackParser(...parsers);\n }\n buildFromUnknown(input, hint = {}) {\n const providedMechanism = hint && hint.mechanism;\n const mechanism = providedMechanism || {\n handled: true,\n type: 'generic'\n };\n const coercingContext = this.buildCoercingContext(mechanism, hint, 0);\n const exceptionWithCause = coercingContext.apply(input);\n const parsingContext = this.buildParsingContext();\n const exceptionWithStack = this.parseStacktrace(exceptionWithCause, parsingContext);\n const exceptionList = this.convertToExceptionList(exceptionWithStack, mechanism);\n return {\n $exception_list: exceptionList,\n $exception_level: 'error'\n };\n }\n async modifyFrames(exceptionList) {\n for (const exc of exceptionList)if (exc.stacktrace && exc.stacktrace.frames && isArray(exc.stacktrace.frames)) exc.stacktrace.frames = await this.applyModifiers(exc.stacktrace.frames);\n return exceptionList;\n }\n coerceFallback(ctx) {\n return {\n type: 'Error',\n value: 'Unknown error',\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n parseStacktrace(err, ctx) {\n let cause;\n if (null != err.cause) cause = this.parseStacktrace(err.cause, ctx);\n let stack;\n if ('' != err.stack && null != err.stack) stack = this.applyChunkIds(this.stackParser(err.stack, err.synthetic ? 1 : 0), ctx.chunkIdMap);\n return {\n ...err,\n cause,\n stack\n };\n }\n applyChunkIds(frames, chunkIdMap) {\n return frames.map((frame)=>{\n if (frame.filename && chunkIdMap) frame.chunk_id = chunkIdMap[frame.filename];\n return frame;\n });\n }\n applyCoercers(input, ctx) {\n for (const adapter of this.coercers)if (adapter.match(input)) return adapter.coerce(input, ctx);\n return this.coerceFallback(ctx);\n }\n async applyModifiers(frames) {\n let newFrames = frames;\n for (const modifier of this.modifiers)newFrames = await modifier(newFrames);\n return newFrames;\n }\n convertToExceptionList(exceptionWithStack, mechanism) {\n const currentException = {\n type: exceptionWithStack.type,\n value: exceptionWithStack.value,\n mechanism: {\n type: mechanism.type ?? 'generic',\n handled: mechanism.handled ?? true,\n synthetic: exceptionWithStack.synthetic ?? false\n }\n };\n if (exceptionWithStack.stack) currentException.stacktrace = {\n type: 'raw',\n frames: exceptionWithStack.stack\n };\n const exceptionList = [\n currentException\n ];\n if (null != exceptionWithStack.cause) exceptionList.push(...this.convertToExceptionList(exceptionWithStack.cause, {\n ...mechanism,\n handled: true\n }));\n return exceptionList;\n }\n buildParsingContext() {\n const context = {\n chunkIdMap: getFilenameToChunkIdMap(this.stackParser)\n };\n return context;\n }\n buildCoercingContext(mechanism, hint, depth = 0) {\n const coerce = (input, depth)=>{\n if (!(depth <= MAX_CAUSE_RECURSION)) return;\n {\n const ctx = this.buildCoercingContext(mechanism, hint, depth);\n return this.applyCoercers(input, ctx);\n }\n };\n const context = {\n ...hint,\n syntheticException: 0 == depth ? hint.syntheticException : void 0,\n mechanism,\n apply: (input)=>coerce(input, depth),\n next: (input)=>coerce(input, depth + 1)\n };\n return context;\n }\n}\nexport { ErrorPropertiesBuilder };\n","import { isBuiltin, isString } from \"../../utils/index.mjs\";\nclass DOMExceptionCoercer {\n match(err) {\n return this.isDOMException(err) || this.isDOMError(err);\n }\n coerce(err, ctx) {\n const hasStack = isString(err.stack);\n return {\n type: this.getType(err),\n value: this.getValue(err),\n stack: hasStack ? err.stack : void 0,\n cause: err.cause ? ctx.next(err.cause) : void 0,\n synthetic: false\n };\n }\n getType(candidate) {\n return this.isDOMError(candidate) ? 'DOMError' : 'DOMException';\n }\n getValue(err) {\n const name = err.name || (this.isDOMError(err) ? 'DOMError' : 'DOMException');\n const message = err.message ? `${name}: ${err.message}` : name;\n return message;\n }\n isDOMException(err) {\n return isBuiltin(err, 'DOMException');\n }\n isDOMError(err) {\n return isBuiltin(err, 'DOMError');\n }\n}\nexport { DOMExceptionCoercer };\n","import { isPlainError } from \"../../utils/index.mjs\";\nclass ErrorCoercer {\n match(err) {\n return isPlainError(err);\n }\n coerce(err, ctx) {\n return {\n type: this.getType(err),\n value: this.getMessage(err, ctx),\n stack: this.getStack(err),\n cause: err.cause ? ctx.next(err.cause) : void 0,\n synthetic: false\n };\n }\n getType(err) {\n return err.name || err.constructor.name;\n }\n getMessage(err, _ctx) {\n const message = err.message;\n if (message.error && 'string' == typeof message.error.message) return String(message.error.message);\n return String(message);\n }\n getStack(err) {\n return err.stacktrace || err.stack || void 0;\n }\n}\nexport { ErrorCoercer };\n","import { isErrorEvent } from \"../../utils/index.mjs\";\nclass ErrorEventCoercer {\n constructor(){}\n match(err) {\n return isErrorEvent(err) && void 0 != err.error;\n }\n coerce(err, ctx) {\n const exceptionLike = ctx.apply(err.error);\n if (!exceptionLike) return {\n type: 'ErrorEvent',\n value: err.message,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n return exceptionLike;\n }\n}\nexport { ErrorEventCoercer };\n","const ERROR_TYPES_PATTERN = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\nclass StringCoercer {\n match(input) {\n return 'string' == typeof input;\n }\n coerce(input, ctx) {\n const [type, value] = this.getInfos(input);\n return {\n type: type ?? 'Error',\n value: value ?? input,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n getInfos(candidate) {\n let type = 'Error';\n let value = candidate;\n const groups = candidate.match(ERROR_TYPES_PATTERN);\n if (groups) {\n type = groups[1];\n value = groups[2];\n }\n return [\n type,\n value\n ];\n }\n}\nexport { StringCoercer };\n","const severityLevels = [\n 'fatal',\n 'error',\n 'warning',\n 'log',\n 'info',\n 'debug'\n];\nexport { severityLevels };\n","function truncate(str, max = 0) {\n if ('string' != typeof str || 0 === max) return str;\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\nfunction extractExceptionKeysForMessage(err, maxLength = 40) {\n const keys = Object.keys(err);\n keys.sort();\n if (!keys.length) return '[object has no keys]';\n for(let i = keys.length; i > 0; i--){\n const serialized = keys.slice(0, i).join(', ');\n if (!(serialized.length > maxLength)) {\n if (i === keys.length) return serialized;\n return serialized.length <= maxLength ? serialized : `${serialized.slice(0, maxLength)}...`;\n }\n }\n return '';\n}\nexport { extractExceptionKeysForMessage, truncate };\n","import { isEmptyString, isError, isEvent, isString } from \"../../utils/index.mjs\";\nimport { severityLevels } from \"../types.mjs\";\nimport { extractExceptionKeysForMessage } from \"./utils.mjs\";\nclass ObjectCoercer {\n match(candidate) {\n return 'object' == typeof candidate && null !== candidate;\n }\n coerce(candidate, ctx) {\n const errorProperty = this.getErrorPropertyFromObject(candidate);\n if (errorProperty) return ctx.apply(errorProperty);\n return {\n type: this.getType(candidate),\n value: this.getValue(candidate),\n stack: ctx.syntheticException?.stack,\n level: this.isSeverityLevel(candidate.level) ? candidate.level : 'error',\n synthetic: true\n };\n }\n getType(err) {\n return isEvent(err) ? err.constructor.name : 'Error';\n }\n getValue(err) {\n if ('name' in err && 'string' == typeof err.name) {\n let message = `'${err.name}' captured as exception`;\n if ('message' in err && 'string' == typeof err.message) message += ` with message: '${err.message}'`;\n return message;\n }\n if ('message' in err && 'string' == typeof err.message) return err.message;\n const className = this.getObjectClassName(err);\n const keys = extractExceptionKeysForMessage(err);\n return `${className && 'Object' !== className ? `'${className}'` : 'Object'} captured as exception with keys: ${keys}`;\n }\n isSeverityLevel(x) {\n return isString(x) && !isEmptyString(x) && severityLevels.indexOf(x) >= 0;\n }\n getErrorPropertyFromObject(obj) {\n for(const prop in obj)if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (isError(value)) return value;\n }\n }\n getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : void 0;\n } catch (e) {\n return;\n }\n }\n}\nexport { ObjectCoercer };\n","import { isEvent } from \"../../utils/index.mjs\";\nimport { extractExceptionKeysForMessage } from \"./utils.mjs\";\nclass EventCoercer {\n match(err) {\n return isEvent(err);\n }\n coerce(evt, ctx) {\n const constructorName = evt.constructor.name;\n return {\n type: constructorName,\n value: `${constructorName} captured as exception with keys: ${extractExceptionKeysForMessage(evt)}`,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n}\nexport { EventCoercer };\n","import { isPrimitive } from \"../../utils/index.mjs\";\nclass PrimitiveCoercer {\n match(candidate) {\n return isPrimitive(candidate);\n }\n coerce(value, ctx) {\n return {\n type: 'Error',\n value: `Primitive value captured as exception: ${String(value)}`,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n }\n}\nexport { PrimitiveCoercer };\n","import { isBuiltin, isPrimitive } from \"../../utils/index.mjs\";\nclass PromiseRejectionEventCoercer {\n match(err) {\n return isBuiltin(err, 'PromiseRejectionEvent');\n }\n coerce(err, ctx) {\n const reason = this.getUnhandledRejectionReason(err);\n if (isPrimitive(reason)) return {\n type: 'UnhandledRejection',\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n stack: ctx.syntheticException?.stack,\n synthetic: true\n };\n return ctx.apply(reason);\n }\n getUnhandledRejectionReason(error) {\n if (isPrimitive(error)) return error;\n try {\n if ('reason' in error) return error.reason;\n if ('detail' in error && 'reason' in error.detail) return error.detail.reason;\n } catch {}\n return error;\n }\n}\nexport { PromiseRejectionEventCoercer };\n","import type { PostHog } from '../posthog-core'\nimport { SessionIdManager } from '../sessionid'\nimport {\n DeadClicksAutoCaptureConfig,\n ExternalIntegrationKind,\n Properties,\n RemoteConfig,\n SiteAppLoader,\n SessionStartReason,\n} from '../types'\n// only importing types here, so won't affect the bundle\n// eslint-disable-next-line posthog-js/no-external-replay-imports\nimport type { SessionRecordingStatus, TriggerType } from '../extensions/replay/external/triggerMatching'\nimport { eventWithTime } from '../extensions/replay/types/rrweb-types'\nimport { ErrorTracking } from '@posthog/core'\n\n/*\n * Global helpers to protect access to browser globals in a way that is safer for different targets\n * like DOM, SSR, Web workers etc.\n *\n * NOTE: Typically we want the \"window\" but globalThis works for both the typical browser context as\n * well as other contexts such as the web worker context. Window is still exported for any bits that explicitly require it.\n * If in doubt - export the global you need from this file and use that as an optional value. This way the code path is forced\n * to handle the case where the global is not available.\n */\n\n// eslint-disable-next-line no-restricted-globals\nconst win: (Window & typeof globalThis) | undefined = typeof window !== 'undefined' ? window : undefined\n\nexport type AssignableWindow = Window &\n typeof globalThis & {\n /*\n * Main PostHog instance\n */\n posthog: any\n\n /*\n * This is our contract between (potentially) lazily loaded extensions and the SDK\n */\n __PosthogExtensions__?: PostHogExtensions\n\n /**\n * When loading remote config, we assign it to this global configuration\n * for ease of sharing it with the rest of the SDK\n */\n _POSTHOG_REMOTE_CONFIG?: Record<\n string,\n {\n config: RemoteConfig\n siteApps: SiteAppLoader[]\n }\n >\n\n /**\n * If this is set on the window, our logger will log to the console\n * for ease of debugging. Used for testing purposes only.\n *\n * @see {Config.DEBUG} from config.ts\n */\n POSTHOG_DEBUG: any\n\n // Exposed by the browser\n doNotTrack: any\n\n // See entrypoints/customizations.full.ts\n posthogCustomizations: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/exception-autocapture.ts\n *\n * @deprecated use `__PosthogExtensions__.errorWrappingFunctions` instead\n */\n posthogErrorWrappingFunctions: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/posthog-recorder.ts\n *\n * @deprecated use `__PosthogExtensions__.rrweb` instead\n */\n rrweb: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/posthog-recorder.ts\n *\n * @deprecated use `__PosthogExtensions__.rrwebConsoleRecord` instead\n */\n rrwebConsoleRecord: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/posthog-recorder.ts\n *\n * @deprecated use `__PosthogExtensions__.getRecordNetworkPlugin` instead\n */\n getRecordNetworkPlugin: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/web-vitals.ts\n *\n * @deprecated use `__PosthogExtensions__.postHogWebVitalsCallbacks` instead\n */\n postHogWebVitalsCallbacks: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/tracing-headers.ts\n *\n * @deprecated use `__PosthogExtensions__.postHogTracingHeadersPatchFns` instead\n */\n postHogTracingHeadersPatchFns: any\n\n /**\n * This is a legacy way to expose these functions, but we still need to support it for backwards compatibility\n * Can be removed once we drop support for 1.161.1\n *\n * See entrypoints/surveys.ts\n *\n * @deprecated use `__PosthogExtensions__.generateSurveys` instead\n */\n extendPostHogWithSurveys: any\n\n /*\n * These are used to handle our toolbar state.\n * @see {Toolbar} from extensions/toolbar.ts\n */\n ph_load_toolbar: any\n ph_load_editor: any\n ph_toolbar_state: any\n } & Record<`__$$ph_site_app_${string}`, any>\n\n/**\n * This is our contract between (potentially) lazily loaded extensions and the SDK\n * changes to this interface can be breaking changes for users of the SDK\n */\n\nexport type ExternalExtensionKind = 'intercom-integration' | 'crisp-chat-integration'\n\nexport type PostHogExtensionKind =\n | 'toolbar'\n | 'exception-autocapture'\n | 'web-vitals'\n | 'recorder'\n | 'lazy-recorder'\n | 'tracing-headers'\n | 'surveys'\n | 'dead-clicks-autocapture'\n | 'remote-config'\n | ExternalExtensionKind\n\nexport interface LazyLoadedSessionRecordingInterface {\n start: (startReason?: SessionStartReason) => void\n stop: () => void\n sessionId: string\n status: SessionRecordingStatus\n onRRwebEmit: (rawEvent: eventWithTime) => void\n log: (message: string, level: 'log' | 'warn' | 'error') => void\n sdkDebugProperties: Properties\n overrideLinkedFlag: () => void\n overrideSampling: () => void\n overrideTrigger: (triggerType: TriggerType) => void\n isStarted: boolean\n tryAddCustomEvent(tag: string, payload: any): boolean\n}\n\nexport interface LazyLoadedDeadClicksAutocaptureInterface {\n start: (observerTarget: Node) => void\n stop: () => void\n}\n\ninterface PostHogExtensions {\n loadExternalDependency?: (\n posthog: PostHog,\n kind: PostHogExtensionKind,\n callback: (error?: string | Event, event?: Event) => void\n ) => void\n\n loadSiteApp?: (posthog: PostHog, appUrl: string, callback: (error?: string | Event, event?: Event) => void) => void\n\n errorWrappingFunctions?: {\n wrapOnError: (captureFn: (props: ErrorTracking.ErrorProperties) => void) => () => void\n wrapUnhandledRejection: (captureFn: (props: ErrorTracking.ErrorProperties) => void) => () => void\n wrapConsoleError: (captureFn: (props: ErrorTracking.ErrorProperties) => void) => () => void\n }\n rrweb?: { record: any; version: string }\n rrwebPlugins?: { getRecordConsolePlugin: any; getRecordNetworkPlugin?: any }\n generateSurveys?: (posthog: PostHog, isSurveysEnabled: boolean) => any | undefined\n postHogWebVitalsCallbacks?: {\n onLCP: (metric: any) => void\n onCLS: (metric: any) => void\n onFCP: (metric: any) => void\n onINP: (metric: any) => void\n }\n tracingHeadersPatchFns?: {\n _patchFetch: (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager) => () => void\n _patchXHR: (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager) => () => void\n }\n initDeadClicksAutocapture?: (\n ph: PostHog,\n config: DeadClicksAutoCaptureConfig\n ) => LazyLoadedDeadClicksAutocaptureInterface\n integrations?: {\n [K in ExternalIntegrationKind]?: { start: (posthog: PostHog) => void; stop: () => void }\n }\n initSessionRecording?: (ph: PostHog) => LazyLoadedSessionRecordingInterface\n}\n\nconst global: typeof globalThis | undefined = typeof globalThis !== 'undefined' ? globalThis : win\n\nexport const ArrayProto = Array.prototype\nexport const nativeForEach = ArrayProto.forEach\nexport const nativeIndexOf = ArrayProto.indexOf\n\nexport const navigator = global?.navigator\nexport const document = global?.document\nexport const location = global?.location\nexport const fetch = global?.fetch\nexport const XMLHttpRequest =\n global?.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest() ? global.XMLHttpRequest : undefined\nexport const AbortController = global?.AbortController\nexport const userAgent = navigator?.userAgent\nexport const assignableWindow: AssignableWindow = win ?? ({} as any)\n\nexport { win as window }\n","import { window } from './globals'\n\n// When angular patches functions they pass the above `isNativeFunction` check (at least the MutationObserver)\nexport const isAngularZonePresent = (): boolean => {\n return !!(window as any).Zone\n}\n\nexport const isDocument = (x: unknown): x is Document => {\n // eslint-disable-next-line posthog-js/no-direct-document-check\n return x instanceof Document\n}\n","import Config from '../config'\nimport { isUndefined } from '@posthog/core'\nimport { assignableWindow, window } from './globals'\nimport type { Logger } from '@posthog/core'\n\ntype PosthogJsLogger = Omit<Logger, 'createLogger'> & {\n _log: (level: 'log' | 'warn' | 'error', ...args: any[]) => void\n uninitializedWarning: (methodName: string) => void\n createLogger: (prefix: string) => PosthogJsLogger\n}\n\nconst _createLogger = (prefix: string): PosthogJsLogger => {\n const logger: PosthogJsLogger = {\n _log: (level: 'log' | 'warn' | 'error', ...args: any[]) => {\n if (\n window &&\n (Config.DEBUG || assignableWindow.POSTHOG_DEBUG) &&\n !isUndefined(window.console) &&\n window.console\n ) {\n const consoleLog =\n '__rrweb_original__' in window.console[level]\n ? (window.console[level] as any)['__rrweb_original__']\n : window.console[level]\n\n // eslint-disable-next-line no-console\n consoleLog(prefix, ...args)\n }\n },\n\n info: (...args: any[]) => {\n logger._log('log', ...args)\n },\n\n warn: (...args: any[]) => {\n logger._log('warn', ...args)\n },\n\n error: (...args: any[]) => {\n logger._log('error', ...args)\n },\n\n critical: (...args: any[]) => {\n // Critical errors are always logged to the console\n // eslint-disable-next-line no-console\n console.error(prefix, ...args)\n },\n\n uninitializedWarning: (methodName: string) => {\n logger.error(`You must initialize PostHog before calling ${methodName}`)\n },\n\n createLogger: (additionalPrefix: string) => _createLogger(`${prefix} ${additionalPrefix}`),\n }\n return logger\n}\n\nexport const logger = _createLogger('[PostHog.js]')\n\nexport const createLogger = logger.createLogger\n","import { Breaker, Properties } from '../types'\nimport { nativeForEach, nativeIndexOf } from './globals'\nimport { logger } from './logger'\nimport { isFormData, isNull, isNullish, isNumber, isString, isUndefined, hasOwnProperty, isArray } from '@posthog/core'\n\nconst breaker: Breaker = {}\n\nexport function eachArray<E = any>(\n obj: E[] | null | undefined,\n iterator: (value: E, key: number) => void | Breaker,\n thisArg?: any\n): void {\n if (isArray(obj)) {\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, thisArg)\n } else if ('length' in obj && obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(thisArg, obj[i], i) === breaker) {\n return\n }\n }\n }\n }\n}\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} thisArg\n */\nexport function each(obj: any, iterator: (value: any, key: any) => void | Breaker, thisArg?: any): void {\n if (isNullish(obj)) {\n return\n }\n if (isArray(obj)) {\n return eachArray(obj, iterator, thisArg)\n }\n if (isFormData(obj)) {\n for (const pair of obj.entries()) {\n if (iterator.call(thisArg, pair[1], pair[0]) === breaker) {\n return\n }\n }\n return\n }\n for (const key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n if (iterator.call(thisArg, obj[key], key) === breaker) {\n return\n }\n }\n }\n}\n\nexport const extend = function (obj: Record<string, any>, ...args: Record<string, any>[]): Record<string, any> {\n eachArray(args, function (source) {\n for (const prop in source) {\n if (source[prop] !== void 0) {\n obj[prop] = source[prop]\n }\n }\n })\n return obj\n}\n\nexport const extendArray = function <T>(obj: T[], ...args: T[][]): T[] {\n eachArray(args, function (source) {\n eachArray(source, function (item) {\n obj.push(item)\n })\n })\n return obj\n}\n\nexport const include = function (\n obj: null | string | Array<any> | Record<string, any>,\n target: any\n): boolean | Breaker {\n let found = false\n if (isNull(obj)) {\n return found\n }\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n return obj.indexOf(target) != -1\n }\n each(obj, function (value) {\n if (found || (found = value === target)) {\n return breaker\n }\n return\n })\n return found\n}\n\n/**\n * Object.entries() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n */\nexport function entries<T = any>(obj: Record<string, T>): [string, T][] {\n const ownProps = Object.keys(obj)\n let i = ownProps.length\n const resArray = new Array(i) // preallocate the Array\n\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]]\n }\n return resArray\n}\n\nexport const trySafe = function <T>(fn: () => T): T | undefined {\n try {\n return fn()\n } catch {\n return undefined\n }\n}\n\nexport const safewrap = function <F extends (...args: any[]) => any = (...args: any[]) => any>(f: F): F {\n return function (...args) {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return f.apply(this, args)\n } catch (e) {\n logger.critical(\n 'Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.'\n )\n logger.critical(e)\n }\n } as F\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const safewrapClass = function (klass: Function, functions: string[]): void {\n for (let i = 0; i < functions.length; i++) {\n klass.prototype[functions[i]] = safewrap(klass.prototype[functions[i]])\n }\n}\n\nexport const stripEmptyProperties = function (p: Properties): Properties {\n const ret: Properties = {}\n each(p, function (v, k) {\n if ((isString(v) && v.length > 0) || isNumber(v)) {\n ret[k] = v\n }\n })\n return ret\n}\n\n/**\n * Deep copies an object.\n * It handles cycles by replacing all references to them with `undefined`\n * Also supports customizing native values\n *\n * @param value\n * @param customizer\n * @returns {{}|undefined|*}\n */\nfunction deepCircularCopy<T extends Record<string, any> = Record<string, any>>(\n value: T,\n customizer?: <K extends keyof T = keyof T>(value: T[K], key?: K) => T[K]\n): T | undefined {\n const COPY_IN_PROGRESS_SET = new Set()\n\n function internalDeepCircularCopy(value: T, key?: string): T | undefined {\n if (value !== Object(value)) return customizer ? customizer(value as any, key) : value // primitive value\n\n if (COPY_IN_PROGRESS_SET.has(value)) return undefined\n COPY_IN_PROGRESS_SET.add(value)\n let result: T\n\n if (isArray(value)) {\n result = [] as any as T\n eachArray(value, (it) => {\n result.push(internalDeepCircularCopy(it))\n })\n } else {\n result = {} as T\n each(value, (val, key) => {\n if (!COPY_IN_PROGRESS_SET.has(val)) {\n ;(result as any)[key] = internalDeepCircularCopy(val, key)\n }\n })\n }\n return result\n }\n return internalDeepCircularCopy(value)\n}\n\nexport function _copyAndTruncateStrings<T extends Record<string, any> = Record<string, any>>(\n object: T,\n maxStringLength: number | null\n): T {\n return deepCircularCopy(object, (value: any) => {\n if (isString(value) && !isNull(maxStringLength)) {\n return (value as string).slice(0, maxStringLength)\n }\n return value\n }) as T\n}\n\n// NOTE: Update PostHogConfig docs if you change this list\n// We will not try to catch all bullets here, but we should make an effort to catch the most common ones\n// You should be highly against adding more to this list, because ultimately customers can configure\n// their `cross_subdomain_cookie` setting to anything they want.\nconst EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE = ['herokuapp.com', 'vercel.app', 'netlify.app']\nexport function isCrossDomainCookie(documentLocation: Location | undefined) {\n const hostname = documentLocation?.hostname\n\n if (!isString(hostname)) {\n return false\n }\n // split and slice isn't a great way to match arbitrary domains,\n // but it's good enough for ensuring we only match herokuapp.com when it is the TLD\n // for the hostname\n const lastTwoParts = hostname.split('.').slice(-2).join('.')\n\n for (const excluded of EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE) {\n if (lastTwoParts === excluded) {\n return false\n }\n }\n\n return true\n}\n\nexport function find<T>(value: T[], predicate: (value: T) => boolean): T | undefined {\n for (let i = 0; i < value.length; i++) {\n if (predicate(value[i])) {\n return value[i]\n }\n }\n return undefined\n}\n\n// Use this instead of element.addEventListener to avoid eslint errors\n// this properly implements the default options for passive event listeners\nexport function addEventListener(\n element: Window | Document | Element | undefined,\n event: string,\n callback: EventListener,\n options?: AddEventListenerOptions\n): void {\n const { capture = false, passive = true } = options ?? {}\n\n // This is the only place where we are allowed to call this function\n // because the whole idea is that we should be calling this instead of the built-in one\n // eslint-disable-next-line posthog-js/no-add-event-listener\n element?.addEventListener(event, callback, { capture, passive })\n}\n\n/**\n * Helper to migrate deprecated config fields to new field names with appropriate warnings\n * @param config - The config object to check\n * @param newField - The new field name to use\n * @param oldField - The deprecated field name to check for\n * @param defaultValue - The default value if neither field is set\n * @param loggerInstance - Optional logger instance for deprecation warnings\n * @returns The value to use (new field takes precedence over old field)\n */\nexport function migrateConfigField<T>(\n config: Record<string, any>,\n newField: string,\n oldField: string,\n defaultValue: T,\n loggerInstance?: { warn: (message: string) => void }\n): T {\n const hasNewField = newField in config && !isUndefined(config[newField])\n const hasOldField = oldField in config && !isUndefined(config[oldField])\n\n if (hasNewField) {\n return config[newField]\n }\n\n if (hasOldField) {\n if (loggerInstance) {\n loggerInstance.warn(\n `Config field '${oldField}' is deprecated. Please use '${newField}' instead. ` +\n `The old field will be removed in a future major version.`\n )\n }\n return config[oldField]\n }\n\n return defaultValue\n}\n","import { each } from './'\n\nimport { isArray, isFile, isUndefined } from '@posthog/core'\nimport { logger } from './logger'\nimport { document } from './globals'\n\nconst localDomains = ['localhost', '127.0.0.1']\n\n/**\n * IE11 doesn't support `new URL`\n * so we can create an anchor element and use that to parse the URL\n * there's a lot of overlap between HTMLHyperlinkElementUtils and URL\n * meaning useful properties like `pathname` are available on both\n */\nexport const convertToURL = (url: string): HTMLAnchorElement | null => {\n const location = document?.createElement('a')\n if (isUndefined(location)) {\n return null\n }\n\n location.href = url\n return location\n}\n\nexport const formDataToQuery = function (formdata: Record<string, any> | FormData, arg_separator = '&'): string {\n let use_val: string\n let use_key: string\n const tph_arr: string[] = []\n\n each(formdata, function (val: File | string | undefined, key: string | undefined) {\n // the key might be literally the string undefined for e.g. if {undefined: 'something'}\n if (isUndefined(val) || isUndefined(key) || key === 'undefined') {\n return\n }\n\n use_val = encodeURIComponent(isFile(val) ? val.name : val.toString())\n use_key = encodeURIComponent(key)\n tph_arr[tph_arr.length] = use_key + '=' + use_val\n })\n\n return tph_arr.join(arg_separator)\n}\n\n// NOTE: Once we get rid of IE11/op_mini we can start using URLSearchParams\nexport const getQueryParam = function (url: string, param: string): string {\n const withoutHash: string = url.split('#')[0] || ''\n\n // Split only on the first ? to sort problem out for those with multiple ?s\n // and then remove them\n const queryParams: string = withoutHash.split(/\\?(.*)/)[1] || ''\n const cleanedQueryParams = queryParams.replace(/^\\?+/g, '')\n\n const queryParts = cleanedQueryParams.split('&')\n let keyValuePair\n\n for (let i = 0; i < queryParts.length; i++) {\n const parts = queryParts[i].split('=')\n if (parts[0] === param) {\n keyValuePair = parts\n break\n }\n }\n\n if (!isArray(keyValuePair) || keyValuePair.length < 2) {\n return ''\n } else {\n let result = keyValuePair[1]\n try {\n result = decodeURIComponent(result)\n } catch {\n logger.error('Skipping decoding for malformed query param: ' + result)\n }\n return result.replace(/\\+/g, ' ')\n }\n}\n\n// replace any query params in the url with the provided mask value. Tries to keep the URL as instant as possible,\n// including preserving malformed text in most cases\nexport const maskQueryParams = function <T extends string | undefined>(\n url: T,\n maskedParams: string[] | undefined,\n mask: string\n): T extends string ? string : undefined {\n if (!url || !maskedParams || !maskedParams.length) {\n return url as any\n }\n\n const splitHash = url.split('#')\n const withoutHash: string = splitHash[0] || ''\n const hash = splitHash[1]\n\n const splitQuery: string[] = withoutHash.split('?')\n const queryString: string = splitQuery[1]\n const urlWithoutQueryAndHash: string = splitQuery[0]\n const queryParts = (queryString || '').split('&')\n\n // use an array of strings rather than an object to preserve ordering and duplicates\n const paramStrings: string[] = []\n\n for (let i = 0; i < queryParts.length; i++) {\n const keyValuePair = queryParts[i].split('=')\n if (!isArray(keyValuePair)) {\n continue\n } else if (maskedParams.includes(keyValuePair[0])) {\n paramStrings.push(keyValuePair[0] + '=' + mask)\n } else {\n paramStrings.push(queryParts[i])\n }\n }\n\n let result = urlWithoutQueryAndHash\n if (queryString != null) {\n result += '?' + paramStrings.join('&')\n }\n if (hash != null) {\n result += '#' + hash\n }\n\n return result as any\n}\n\nexport const _getHashParam = function (hash: string, param: string): string | null {\n const matches = hash.match(new RegExp(param + '=([^&]*)'))\n return matches ? matches[1] : null\n}\n\nexport const isLocalhost = (): boolean => {\n return localDomains.includes(location.hostname)\n}\n","// import { patch } from 'rrweb/typings/utils'\n// copied from https://github.com/rrweb-io/rrweb/blob/8aea5b00a4dfe5a6f59bd2ae72bb624f45e51e81/packages/rrweb/src/utils.ts#L129\n// which was copied from https://github.com/getsentry/sentry-javascript/blob/b2109071975af8bf0316d3b5b38f519bdaf5dc15/packages/utils/src/object.ts\nimport { isFunction } from '@posthog/core'\n\nexport function patch(\n source: { [key: string]: any },\n name: string,\n replacement: (...args: unknown[]) => unknown\n): () => void {\n try {\n if (!(name in source)) {\n return () => {\n //\n }\n }\n\n const original = source[name] as () => unknown\n const wrapped = replacement(original)\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (isFunction(wrapped)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n wrapped.prototype = wrapped.prototype || {}\n Object.defineProperties(wrapped, {\n __posthog_wrapped__: {\n enumerable: false,\n value: true,\n },\n })\n }\n\n source[name] = wrapped\n\n return () => {\n source[name] = original\n }\n } catch {\n return () => {\n //\n }\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n}\n","import { NetworkRecordOptions } from '../../../types'\n\nfunction hostnameFromURL(url: string | URL | RequestInfo): string | null {\n try {\n if (typeof url === 'string') {\n return new URL(url).hostname\n }\n if ('url' in url) {\n return new URL(url.url).hostname\n }\n return url.hostname\n } catch {\n return null\n }\n}\n\nexport function isHostOnDenyList(url: string | URL | Request, options: NetworkRecordOptions) {\n const hostname = hostnameFromURL(url)\n const defaultNotDenied = { hostname, isHostDenied: false }\n\n if (!options.payloadHostDenyList?.length || !hostname?.trim().length) {\n return defaultNotDenied\n }\n\n for (const deny of options.payloadHostDenyList) {\n if (hostname.endsWith(deny)) {\n return { hostname, isHostDenied: true }\n }\n }\n\n return defaultNotDenied\n}\n","import { TOOLBAR_CONTAINER_CLASS, TOOLBAR_ID } from '../constants'\n\nexport function isElementInToolbar(el: EventTarget | null): boolean {\n if (el instanceof Element) {\n // closest isn't available in IE11, but we'll polyfill when bundling\n return el.id === TOOLBAR_ID || !!el.closest?.('.' + TOOLBAR_CONTAINER_CLASS)\n }\n return false\n}\n\n/*\n * Check whether an element has nodeType Node.ELEMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isElementNode(el: Node | Element | undefined | null): el is Element {\n return !!el && el.nodeType === 1 // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element is of a given tag type.\n * Due to potential reference discrepancies (such as the webcomponents.js polyfill),\n * we want to match tagNames instead of specific references because something like\n * element === document.body won't always work because element might not be a native\n * element.\n * @param {Element} el - element to check\n * @param {string} tag - tag name (e.g., \"div\")\n * @returns {boolean} whether el is of the given tag type\n */\nexport function isTag(el: Element | undefined | null, tag: string): el is HTMLElement {\n return !!el && !!el.tagName && el.tagName.toLowerCase() === tag.toLowerCase()\n}\n\n/*\n * Check whether an element has nodeType Node.TEXT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isTextNode(el: Element | undefined | null): el is HTMLElement {\n return !!el && el.nodeType === 3 // Node.TEXT_NODE - use integer constant for browser portability\n}\n\n/*\n * Check whether an element has nodeType Node.DOCUMENT_FRAGMENT_NODE\n * @param {Element} el - element to check\n * @returns {boolean} whether el is of the correct nodeType\n */\nexport function isDocumentFragment(el: Element | ParentNode | undefined | null): el is DocumentFragment {\n return !!el && el.nodeType === 11 // Node.DOCUMENT_FRAGMENT_NODE - use integer constant for browser portability\n}\n","import { AutocaptureConfig, PostHogConfig, Properties } from './types'\nimport { each, entries } from './utils'\n\nimport { isNullish, isString, isUndefined, isArray, isBoolean } from '@posthog/core'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\nimport { isDocumentFragment, isElementNode, isTag, isTextNode } from './utils/element-utils'\nimport { includes, trim } from '@posthog/core'\n\nexport function splitClassString(s: string): string[] {\n return s ? trim(s).split(/\\s+/) : []\n}\n\nfunction checkForURLMatches(urlsList: (string | RegExp)[]): boolean {\n const url = window?.location.href\n return !!(url && urlsList && urlsList.some((regex) => url.match(regex)))\n}\n\n/*\n * Get the className of an element, accounting for edge cases where element.className is an object\n *\n * Because this is a string it can contain unexpected characters\n * So, this method safely splits the className and returns that array.\n */\nexport function getClassNames(el: Element): string[] {\n let className = ''\n switch (typeof el.className) {\n case 'string':\n className = el.className\n break\n // TODO: when is this ever used?\n case 'object': // handle cases where className might be SVGAnimatedString or some other type\n className =\n (el.className && 'baseVal' in el.className ? (el.className as any).baseVal : null) ||\n el.getAttribute('class') ||\n ''\n break\n default:\n className = ''\n }\n\n return splitClassString(className)\n}\n\nexport function makeSafeText(s: string | null | undefined): string | null {\n if (isNullish(s)) {\n return null\n }\n\n return (\n trim(s)\n // scrub potentially sensitive values\n .split(/(\\s+)/)\n .filter((s) => shouldCaptureValue(s))\n .join('')\n // normalize whitespace\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n // truncate\n .substring(0, 255)\n )\n}\n\n/*\n * Get the direct text content of an element, protecting against sensitive data collection.\n * Concats textContent of each of the element's text node children; this avoids potential\n * collection of sensitive data that could happen if we used element.textContent and the\n * element had sensitive child elements, since element.textContent includes child content.\n * Scrubs values that look like they could be sensitive (i.e. cc or ssn number).\n * @param {Element} el - element to get the text of\n * @returns {string} the element's direct text content\n */\nexport function getSafeText(el: Element): string {\n let elText = ''\n\n if (shouldCaptureElement(el) && !isSensitiveElement(el) && el.childNodes && el.childNodes.length) {\n each(el.childNodes, function (child) {\n if (isTextNode(child) && child.textContent) {\n elText += makeSafeText(child.textContent) ?? ''\n }\n })\n }\n\n return trim(elText)\n}\n\nexport function getEventTarget(e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (isUndefined(e.target)) {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n}\n\nexport const autocaptureCompatibleElements = ['a', 'button', 'form', 'input', 'select', 'textarea', 'label']\n\n/*\n if there is no config, then all elements are allowed\n if there is a config, and there is an allow list, then only elements in the allow list are allowed\n assumes that some other code is checking this element's parents\n */\nfunction checkIfElementTreePassesElementAllowList(\n elements: Element[],\n autocaptureConfig: AutocaptureConfig | undefined\n): boolean {\n const allowlist = autocaptureConfig?.element_allowlist\n if (isUndefined(allowlist)) {\n // everything is allowed, when there is no allow list\n return true\n }\n\n // check each element in the tree\n // if any of the elements are in the allow list, then the tree is allowed\n for (const el of elements) {\n if (allowlist.some((elementType) => el.tagName.toLowerCase() === elementType)) {\n return true\n }\n }\n\n // otherwise there is an allow list and this element tree didn't match it\n return false\n}\n\n/*\n if there is no selector list (i.e. it is undefined), then any elements matches\n if there is an empty list, then no elements match\n if there is a selector list, then check it against each element provided\n */\nfunction checkIfElementsMatchCSSSelector(elements: Element[], selectorList: string[] | undefined): boolean {\n if (isUndefined(selectorList)) {\n // everything is allowed, when there is no selector list\n return true\n }\n\n for (const el of elements) {\n if (selectorList.some((selector) => el.matches(selector))) {\n return true\n }\n }\n\n return false\n}\n\nexport function getParentElement(curEl: Element): Element | false {\n const parentNode = curEl.parentNode\n if (!parentNode || !isElementNode(parentNode)) return false\n return parentNode\n}\n\n// autocapture check will already filter for ph-no-capture,\n// but we include it here to protect against future changes accidentally removing that check\nconst DEFAULT_RAGE_CLICK_IGNORE_LIST = ['.ph-no-rageclick', '.ph-no-capture']\nexport function shouldCaptureRageclick(el: Element | null, _config: PostHogConfig['rageclick']) {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n let selectorIgnoreList: string[] | boolean\n if (isBoolean(_config)) {\n selectorIgnoreList = _config ? DEFAULT_RAGE_CLICK_IGNORE_LIST : false\n } else {\n selectorIgnoreList = _config?.css_selector_ignorelist ?? DEFAULT_RAGE_CLICK_IGNORE_LIST\n }\n\n if (selectorIgnoreList === false) {\n return false\n }\n\n const { targetElementList } = getElementAndParentsForElement(el, false)\n // we don't capture if we match the ignore list\n return !checkIfElementsMatchCSSSelector(targetElementList, selectorIgnoreList)\n}\n\nconst cannotCheckForAutocapture = (el: Element | null) => {\n return !el || isTag(el, 'html') || !isElementNode(el)\n}\n\nconst getElementAndParentsForElement = (el: Element, captureOnAnyElement: false | true | undefined) => {\n if (!window || cannotCheckForAutocapture(el)) {\n return { parentIsUsefulElement: false, targetElementList: [] }\n }\n\n let parentIsUsefulElement = false\n const targetElementList: Element[] = [el]\n let curEl: Element = el\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n // If element is a shadow root, we skip it\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n const parentNode = getParentElement(curEl)\n if (!parentNode) break\n if (captureOnAnyElement || autocaptureCompatibleElements.indexOf(parentNode.tagName.toLowerCase()) > -1) {\n parentIsUsefulElement = true\n } else {\n const compStyles = window.getComputedStyle(parentNode)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer') {\n parentIsUsefulElement = true\n }\n }\n\n targetElementList.push(parentNode)\n curEl = parentNode\n }\n return { parentIsUsefulElement, targetElementList }\n}\n\n/*\n * Check whether a DOM event should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @param {Event} event - event to check\n * @param {Object} autocaptureConfig - autocapture config\n * @param {boolean} captureOnAnyElement - whether to capture on any element, clipboard autocapture doesn't restrict to \"clickable\" elements\n * @param {string[]} allowedEventTypes - event types to capture, normally just 'click', but some autocapture types react to different events, some elements have fixed events (e.g., form has \"submit\")\n * @returns {boolean} whether the event should be captured\n */\nexport function shouldCaptureDomEvent(\n el: Element,\n event: Event,\n autocaptureConfig: AutocaptureConfig | undefined = undefined,\n captureOnAnyElement?: boolean,\n allowedEventTypes?: string[]\n): boolean {\n if (!window || cannotCheckForAutocapture(el)) {\n return false\n }\n\n if (autocaptureConfig?.url_allowlist) {\n // if the current URL is not in the allow list, don't capture\n if (!checkForURLMatches(autocaptureConfig.url_allowlist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.url_ignorelist) {\n // if the current URL is in the ignore list, don't capture\n if (checkForURLMatches(autocaptureConfig.url_ignorelist)) {\n return false\n }\n }\n\n if (autocaptureConfig?.dom_event_allowlist) {\n const allowlist = autocaptureConfig.dom_event_allowlist\n if (allowlist && !allowlist.some((eventType) => event.type === eventType)) {\n return false\n }\n }\n\n const { parentIsUsefulElement, targetElementList } = getElementAndParentsForElement(el, captureOnAnyElement)\n\n if (!checkIfElementTreePassesElementAllowList(targetElementList, autocaptureConfig)) {\n return false\n }\n\n if (!checkIfElementsMatchCSSSelector(targetElementList, autocaptureConfig?.css_selector_allowlist)) {\n return false\n }\n\n const compStyles = window.getComputedStyle(el)\n if (compStyles && compStyles.getPropertyValue('cursor') === 'pointer' && event.type === 'click') {\n return true\n }\n\n const tag = el.tagName.toLowerCase()\n switch (tag) {\n case 'html':\n return false\n case 'form':\n return (allowedEventTypes || ['submit']).indexOf(event.type) >= 0\n case 'input':\n case 'select':\n case 'textarea':\n return (allowedEventTypes || ['change', 'click']).indexOf(event.type) >= 0\n default:\n if (parentIsUsefulElement) return (allowedEventTypes || ['click']).indexOf(event.type) >= 0\n return (\n (allowedEventTypes || ['click']).indexOf(event.type) >= 0 &&\n (autocaptureCompatibleElements.indexOf(tag) > -1 || el.getAttribute('contenteditable') === 'true')\n )\n }\n}\n\n/*\n * Check whether a DOM element should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureElement(el: Element): boolean {\n for (let curEl = el; curEl.parentNode && !isTag(curEl, 'body'); curEl = curEl.parentNode as Element) {\n const classes = getClassNames(curEl)\n if (includes(classes, 'ph-sensitive') || includes(classes, 'ph-no-capture')) {\n return false\n }\n }\n\n if (includes(getClassNames(el), 'ph-include')) {\n return true\n }\n\n // don't include hidden or password fields\n const type = (el as HTMLInputElement).type || ''\n if (isString(type)) {\n // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch (type.toLowerCase()) {\n case 'hidden':\n return false\n case 'password':\n return false\n }\n }\n\n // filter out data from fields that look like sensitive fields\n const name = (el as HTMLInputElement).name || el.id || ''\n // See https://github.com/posthog/posthog-js/issues/165\n // Under specific circumstances a bug caused .replace to be called on a DOM element\n // instead of a string, removing the element from the page. Ensure this issue is mitigated.\n if (isString(name)) {\n // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n const sensitiveNameRegex =\n /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether a DOM element is 'sensitive' and we should only capture limited data\n * @param {Element} el - element to check\n * @returns {boolean} whether the element should be captured\n */\nexport function isSensitiveElement(el: Element): boolean {\n // don't send data from inputs or similar elements since there will always be\n // a risk of clientside javascript placing sensitive data in attributes\n const allowedInputTypes = ['button', 'checkbox', 'submit', 'reset']\n if (\n (isTag(el, 'input') && !allowedInputTypes.includes((el as HTMLInputElement).type)) ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return true\n }\n return false\n}\n\n// Define the core pattern for matching credit card numbers\nconst coreCCPattern = `(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredCCRegex = new RegExp(`^(?:${coreCCPattern})$`)\n// The Unanchored version is essentially the core pattern, usable as is for partial matches\nconst unanchoredCCRegex = new RegExp(coreCCPattern)\n\n// Define the core pattern for matching SSNs with optional dashes\nconst coreSSNPattern = `\\\\d{3}-?\\\\d{2}-?\\\\d{4}`\n// Create the Anchored version of the regex by adding '^' at the start and '$' at the end\nconst anchoredSSNRegex = new RegExp(`^(${coreSSNPattern})$`)\n// The Unanchored version is essentially the core pattern itself, usable for partial matches\nconst unanchoredSSNRegex = new RegExp(`(${coreSSNPattern})`)\n\n/*\n * Check whether a string value should be \"captured\" or if it may contain sensitive data\n * using a variety of heuristics.\n * @param {string} value - string value to check\n * @param {boolean} anchorRegexes - whether to anchor the regexes to the start and end of the string\n * @returns {boolean} whether the element should be captured\n */\nexport function shouldCaptureValue(value: string, anchorRegexes = true): boolean {\n if (isNullish(value)) {\n return false\n }\n\n if (isString(value)) {\n value = trim(value)\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n const ccRegex = anchorRegexes ? anchoredCCRegex : unanchoredCCRegex\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false\n }\n\n // check to see if input value looks like a social security number\n const ssnRegex = anchorRegexes ? anchoredSSNRegex : unanchoredSSNRegex\n if (ssnRegex.test(value)) {\n return false\n }\n }\n\n return true\n}\n\n/*\n * Check whether an attribute name is an Angular style attr (either _ngcontent or _nghost)\n * These update on each build and lead to noise in the element chain\n * More details on the attributes here: https://angular.io/guide/view-encapsulation\n * @param {string} attributeName - string value to check\n * @returns {boolean} whether the element is an angular tag\n */\nexport function isAngularStyleAttr(attributeName: string): boolean {\n if (isString(attributeName)) {\n return attributeName.substring(0, 10) === '_ngcontent' || attributeName.substring(0, 7) === '_nghost'\n }\n return false\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces,\n * along with the direct text content of the target element\n * @param {Element} target - element to check\n * @returns {string} text content of the target element and its child span tags\n */\nexport function getDirectAndNestedSpanText(target: Element): string {\n let text = getSafeText(target)\n text = `${text} ${getNestedSpanText(target)}`.trim()\n return shouldCaptureValue(text) ? text : ''\n}\n\n/*\n * Iterate through children of a target element looking for span tags\n * and return the text content of the span tags, separated by spaces\n * @param {Element} target - element to check\n * @returns {string} text content of span tags\n */\nexport function getNestedSpanText(target: Element): string {\n let text = ''\n if (target && target.childNodes && target.childNodes.length) {\n each(target.childNodes, function (child) {\n if (child && child.tagName?.toLowerCase() === 'span') {\n try {\n const spanText = getSafeText(child)\n text = `${text} ${spanText}`.trim()\n\n if (child.childNodes && child.childNodes.length) {\n text = `${text} ${getNestedSpanText(child)}`.trim()\n }\n } catch (e) {\n logger.error('[AutoCapture]', e)\n }\n }\n })\n }\n return text\n}\n\n/*\nBack in the day storing events in Postgres we use Elements for autocapture events.\nNow we're using elements_chain. We used to do this parsing/processing during ingestion.\nThis code is just copied over from ingestion, but we should optimize it\nto create elements_chain string directly.\n*/\nexport function getElementsChainString(elements: Properties[]): string {\n return elementsToString(extractElements(elements))\n}\n\n// This interface is called 'Element' in plugin-scaffold https://github.com/PostHog/plugin-scaffold/blob/b07d3b879796ecc7e22deb71bf627694ba05386b/src/types.ts#L200\n// However 'Element' is a DOM Element when run in the browser, so we have to rename it\ninterface PHElement {\n text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\n\nfunction escapeQuotes(input: string): string {\n return input.replace(/\"|\\\\\"/g, '\\\\\"')\n}\n\nfunction elementsToString(elements: PHElement[]): string {\n const ret = elements.map((element) => {\n let el_string = ''\n if (element.tag_name) {\n el_string += element.tag_name\n }\n if (element.attr_class) {\n element.attr_class.sort()\n for (const single_class of element.attr_class) {\n el_string += `.${single_class.replace(/\"/g, '')}`\n }\n }\n const attributes: Record<string, any> = {\n ...(element.text ? { text: element.text } : {}),\n 'nth-child': element.nth_child ?? 0,\n 'nth-of-type': element.nth_of_type ?? 0,\n ...(element.href ? { href: element.href } : {}),\n ...(element.attr_id ? { attr_id: element.attr_id } : {}),\n ...element.attributes,\n }\n const sortedAttributes: Record<string, any> = {}\n entries(attributes)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(\n ([key, value]) => (sortedAttributes[escapeQuotes(key.toString())] = escapeQuotes(value.toString()))\n )\n el_string += ':'\n el_string += entries(sortedAttributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join('')\n return el_string\n })\n return ret.join(';')\n}\n\nfunction extractElements(elements: Properties[]): PHElement[] {\n return elements.map((el) => {\n const response = {\n text: el['$el_text']?.slice(0, 400),\n tag_name: el['tag_name'],\n href: el['attr__href']?.slice(0, 2048),\n attr_class: extractAttrClass(el),\n attr_id: el['attr__id'],\n nth_child: el['nth_child'],\n nth_of_type: el['nth_of_type'],\n attributes: {} as { [id: string]: any },\n }\n\n entries(el)\n .filter(([key]) => key.indexOf('attr__') === 0)\n .forEach(([key, value]) => (response.attributes[key] = value))\n return response\n })\n}\n\nfunction extractAttrClass(el: Properties): PHElement['attr_class'] {\n const attr_class = el['attr__class']\n if (!attr_class) {\n return undefined\n } else if (isArray(attr_class)) {\n return attr_class\n } else {\n return splitClassString(attr_class)\n }\n}\n","import { CapturedNetworkRequest, NetworkRecordOptions, PostHogConfig } from '../../../types'\nimport { isFunction, isNullish, isString, isUndefined } from '@posthog/core'\nimport { convertToURL } from '../../../utils/request-utils'\nimport { logger } from '../../../utils/logger'\nimport { shouldCaptureValue } from '../../../autocapture-utils'\nimport { each } from '../../../utils'\n\nconst LOGGER_PREFIX = '[SessionRecording]'\n\nconst REDACTED = 'redacted'\n\nexport const defaultNetworkOptions: Required<NetworkRecordOptions> = {\n initiatorTypes: [\n 'audio',\n 'beacon',\n 'body',\n 'css',\n 'early-hint',\n 'embed',\n 'fetch',\n 'frame',\n 'iframe',\n 'icon',\n 'image',\n 'img',\n 'input',\n 'link',\n 'navigation',\n 'object',\n 'ping',\n 'script',\n 'track',\n 'video',\n 'xmlhttprequest',\n ],\n maskRequestFn: (data: CapturedNetworkRequest) => data,\n recordHeaders: false,\n recordBody: false,\n recordInitialRequests: false,\n recordPerformance: false,\n performanceEntryTypeToObserve: [\n // 'event', // This is too noisy as it covers all browser events\n 'first-input',\n // 'mark', // Mark is used too liberally. We would need to filter for specific marks\n // 'measure', // Measure is used too liberally. We would need to filter for specific measures\n 'navigation',\n 'paint',\n 'resource',\n ],\n payloadSizeLimitBytes: 1000000,\n payloadHostDenyList: [\n '.lr-ingest.io',\n '.ingest.sentry.io',\n '.clarity.ms',\n // NB no leading dot here\n 'analytics.google.com',\n 'bam.nr-data.net',\n ],\n}\n\nconst HEADER_DENY_LIST = [\n 'authorization',\n 'x-forwarded-for',\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'x-api-key',\n 'x-real-ip',\n 'remote-addr',\n 'forwarded',\n 'proxy-authorization',\n 'x-csrf-token',\n 'x-csrftoken',\n 'x-xsrf-token',\n]\n\nconst PAYLOAD_CONTENT_DENY_LIST = [\n 'password',\n 'secret',\n 'passwd',\n 'api_key',\n 'apikey',\n 'auth',\n 'credentials',\n 'mysql_pwd',\n 'privatekey',\n 'private_key',\n 'token',\n]\n\n// we always remove headers on the deny list because we never want to capture this sensitive data\nconst removeAuthorizationHeader = (data: CapturedNetworkRequest): CapturedNetworkRequest => {\n const headers = data.requestHeaders\n if (!isNullish(headers)) {\n each(Object.keys(headers ?? {}), (header) => {\n if (HEADER_DENY_LIST.includes(header.toLowerCase())) {\n headers[header] = REDACTED\n }\n })\n }\n return data\n}\n\nconst POSTHOG_PATHS_TO_IGNORE = ['/s/', '/e/', '/i/']\n// want to ignore posthog paths when capturing requests, or we can get trapped in a loop\n// because calls to PostHog would be reported using a call to PostHog which would be reported....\nconst ignorePostHogPaths = (\n data: CapturedNetworkRequest,\n apiHostConfig: PostHogConfig['api_host']\n): CapturedNetworkRequest | undefined => {\n const url = convertToURL(data.name)\n\n // we need to account for api host config as e.g. pathname could be /ingest/s/ and we want to ignore that\n let replaceValue = apiHostConfig.indexOf('http') === 0 ? convertToURL(apiHostConfig)?.pathname : apiHostConfig\n if (replaceValue === '/') {\n replaceValue = ''\n }\n const pathname = url?.pathname.replace(replaceValue || '', '')\n\n if (url && pathname && POSTHOG_PATHS_TO_IGNORE.some((path) => pathname.indexOf(path) === 0)) {\n return undefined\n }\n return data\n}\n\nfunction estimateBytes(payload: string): number {\n return new Blob([payload]).size\n}\n\nfunction enforcePayloadSizeLimit(\n payload: string | null | undefined,\n headers: Record<string, any> | undefined,\n limit: number,\n description: string\n): string | null | undefined {\n if (isNullish(payload)) {\n return payload\n }\n\n let requestContentLength: string | number = headers?.['content-length'] || estimateBytes(payload)\n if (isString(requestContentLength)) {\n requestContentLength = parseInt(requestContentLength)\n }\n\n if (requestContentLength > limit) {\n return LOGGER_PREFIX + ` ${description} body too large to record (${requestContentLength} bytes)`\n }\n\n return payload\n}\n\n// people can have arbitrarily large payloads on their site, but we don't want to ingest them\nconst limitPayloadSize = (\n options: NetworkRecordOptions\n): ((data: CapturedNetworkRequest | undefined) => CapturedNetworkRequest | undefined) => {\n // the smallest of 1MB or the specified limit if there is one\n const limit = Math.min(1000000, options.payloadSizeLimitBytes ?? 1000000)\n\n return (data) => {\n if (data?.requestBody) {\n data.requestBody = enforcePayloadSizeLimit(data.requestBody, data.requestHeaders, limit, 'Request')\n }\n\n if (data?.responseBody) {\n data.responseBody = enforcePayloadSizeLimit(data.responseBody, data.responseHeaders, limit, 'Response')\n }\n\n return data\n }\n}\n\nfunction scrubPayload(payload: string | null | undefined, label: 'Request' | 'Response'): string | null | undefined {\n if (isNullish(payload)) {\n return payload\n }\n let scrubbed = payload\n\n if (!shouldCaptureValue(scrubbed, false)) {\n scrubbed = LOGGER_PREFIX + ' ' + label + ' body ' + REDACTED\n }\n each(PAYLOAD_CONTENT_DENY_LIST, (text) => {\n if (scrubbed?.length && scrubbed?.indexOf(text) !== -1) {\n scrubbed = LOGGER_PREFIX + ' ' + label + ' body ' + REDACTED + ' as might contain: ' + text\n }\n })\n\n return scrubbed\n}\n\nfunction scrubPayloads(capturedRequest: CapturedNetworkRequest | undefined): CapturedNetworkRequest | undefined {\n if (isUndefined(capturedRequest)) {\n return undefined\n }\n\n capturedRequest.requestBody = scrubPayload(capturedRequest.requestBody, 'Request')\n capturedRequest.responseBody = scrubPayload(capturedRequest.responseBody, 'Response')\n\n return capturedRequest\n}\n\n/**\n * whether a maskRequestFn is provided or not,\n * we ensure that we remove the denied header from requests\n * we _never_ want to record that header by accident\n * if someone complains then we'll add an opt-in to let them override it\n */\nexport const buildNetworkRequestOptions = (\n instanceConfig: PostHogConfig,\n remoteNetworkOptions: Pick<\n NetworkRecordOptions,\n 'recordHeaders' | 'recordBody' | 'recordPerformance' | 'payloadHostDenyList'\n >\n): NetworkRecordOptions => {\n const config: NetworkRecordOptions = {\n payloadSizeLimitBytes: defaultNetworkOptions.payloadSizeLimitBytes,\n performanceEntryTypeToObserve: [...defaultNetworkOptions.performanceEntryTypeToObserve],\n payloadHostDenyList: [\n ...(remoteNetworkOptions.payloadHostDenyList || []),\n ...defaultNetworkOptions.payloadHostDenyList,\n ],\n }\n // client can always disable despite remote options\n const canRecordHeaders =\n instanceConfig.session_recording.recordHeaders === false ? false : remoteNetworkOptions.recordHeaders\n const canRecordBody =\n instanceConfig.session_recording.recordBody === false ? false : remoteNetworkOptions.recordBody\n const canRecordPerformance =\n instanceConfig.capture_performance === false ? false : remoteNetworkOptions.recordPerformance\n\n const payloadLimiter = limitPayloadSize(config)\n\n const enforcedCleaningFn: NetworkRecordOptions['maskRequestFn'] = (d: CapturedNetworkRequest) =>\n payloadLimiter(ignorePostHogPaths(removeAuthorizationHeader(d), instanceConfig.api_host))\n\n const hasDeprecatedMaskFunction = isFunction(instanceConfig.session_recording.maskNetworkRequestFn)\n\n if (hasDeprecatedMaskFunction && isFunction(instanceConfig.session_recording.maskCapturedNetworkRequestFn)) {\n logger.warn(\n 'Both `maskNetworkRequestFn` and `maskCapturedNetworkRequestFn` are defined. `maskNetworkRequestFn` will be ignored.'\n )\n }\n\n if (hasDeprecatedMaskFunction) {\n instanceConfig.session_recording.maskCapturedNetworkRequestFn = (data: CapturedNetworkRequest) => {\n const cleanedURL = instanceConfig.session_recording.maskNetworkRequestFn!({ url: data.name })\n return {\n ...data,\n name: cleanedURL?.url,\n } as CapturedNetworkRequest\n }\n }\n\n config.maskRequestFn = isFunction(instanceConfig.session_recording.maskCapturedNetworkRequestFn)\n ? (data) => {\n const cleanedRequest = enforcedCleaningFn(data)\n return cleanedRequest\n ? (instanceConfig.session_recording.maskCapturedNetworkRequestFn?.(cleanedRequest) ?? undefined)\n : undefined\n }\n : (data) => scrubPayloads(enforcedCleaningFn(data))\n\n return {\n ...defaultNetworkOptions,\n ...config,\n recordHeaders: canRecordHeaders,\n recordBody: canRecordBody,\n recordPerformance: canRecordPerformance,\n recordInitialRequests: canRecordPerformance,\n }\n}\n","/// <reference lib=\"dom\" />\n\n// rrweb/network@1 code starts\n// most of what is below here will be removed when rrweb release their code for this\n// see https://github.com/rrweb-io/rrweb/pull/1105\n\n// NB adopted from https://github.com/rrweb-io/rrweb/pull/1105 which looks like it will be accepted into rrweb\n// however, in the PR, it throws when the performance observer data is not available\n// and assumes it is running in a browser with the Request API (i.e. not IE11)\n// copying here so that we can use it before rrweb adopt it\n\nimport type { IWindow, listenerHandler, RecordPlugin } from '../types/rrweb-types'\nimport { CapturedNetworkRequest, Headers, InitiatorType, NetworkRecordOptions } from '../../../types'\nimport { isArray, isBoolean, isFormData, isNull, isNullish, isString, isUndefined, isObject } from '@posthog/core'\nimport { isDocument } from '../../../utils/type-utils'\nimport { createLogger } from '../../../utils/logger'\nimport { formDataToQuery } from '../../../utils/request-utils'\nimport { patch } from '../rrweb-plugins/patch'\nimport { isHostOnDenyList } from '../../../extensions/replay/external/denylist'\nimport { defaultNetworkOptions } from './config'\n\nconst logger = createLogger('[Recorder]')\n\nexport type NetworkData = {\n requests: CapturedNetworkRequest[]\n isInitial?: boolean\n}\n\ntype networkCallback = (data: NetworkData) => void\n\nconst isNavigationTiming = (entry: PerformanceEntry): entry is PerformanceNavigationTiming =>\n entry.entryType === 'navigation'\nconst isResourceTiming = (entry: PerformanceEntry): entry is PerformanceResourceTiming => entry.entryType === 'resource'\n\ntype ObservedPerformanceEntry = (PerformanceNavigationTiming | PerformanceResourceTiming) & {\n responseStatus?: number\n}\n\nexport function findLast<T>(array: Array<T>, predicate: (value: T) => boolean): T | undefined {\n const length = array.length\n for (let i = length - 1; i >= 0; i -= 1) {\n if (predicate(array[i])) {\n return array[i]\n }\n }\n return undefined\n}\n\nfunction initPerformanceObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>) {\n // if we are only observing timings then we could have a single observer for all types, with buffer true,\n // but we are going to filter by initiatorType _if we are wrapping fetch and xhr as the wrapped functions\n // will deal with those.\n // so we have a block which captures requests from before fetch/xhr is wrapped\n // these are marked `isInitial` so playback can display them differently if needed\n // they will never have method/status/headers/body because they are pre-wrapping that provides that\n if (options.recordInitialRequests) {\n const initialPerformanceEntries = win.performance\n .getEntries()\n .filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) && options.initiatorTypes.includes(entry.initiatorType as InitiatorType))\n )\n cb({\n requests: initialPerformanceEntries.flatMap((entry) =>\n prepareRequest({ entry, method: undefined, status: undefined, networkRequest: {}, isInitial: true })\n ),\n isInitial: true,\n })\n }\n const observer = new win.PerformanceObserver((entries) => {\n // if recordBody or recordHeaders is true then we don't want to record fetch or xhr here\n // as the wrapped functions will do that. Otherwise, this filter becomes a noop\n // because we do want to record them here\n const wrappedInitiatorFilter = (entry: ObservedPerformanceEntry) =>\n options.recordBody || options.recordHeaders\n ? entry.initiatorType !== 'xmlhttprequest' && entry.initiatorType !== 'fetch'\n : true\n\n const performanceEntries = entries.getEntries().filter(\n (entry): entry is ObservedPerformanceEntry =>\n isNavigationTiming(entry) ||\n (isResourceTiming(entry) &&\n options.initiatorTypes.includes(entry.initiatorType as InitiatorType) &&\n // TODO if we are _only_ capturing timing we don't want to filter initiator here\n wrappedInitiatorFilter(entry))\n )\n\n cb({\n requests: performanceEntries.flatMap((entry) =>\n prepareRequest({ entry, method: undefined, status: undefined, networkRequest: {} })\n ),\n })\n })\n // compat checked earlier\n // eslint-disable-next-line compat/compat\n const entryTypes = PerformanceObserver.supportedEntryTypes.filter((x) =>\n options.performanceEntryTypeToObserve.includes(x)\n )\n // initial records are gathered above, so we don't need to observe and buffer each type separately\n observer.observe({ entryTypes })\n return () => {\n observer.disconnect()\n }\n}\n\nfunction shouldRecordHeaders(type: 'request' | 'response', recordHeaders: NetworkRecordOptions['recordHeaders']) {\n return !!recordHeaders && (isBoolean(recordHeaders) || recordHeaders[type])\n}\n\nexport function shouldRecordBody({\n type,\n recordBody,\n headers,\n url,\n}: {\n type: 'request' | 'response'\n headers: Headers\n url: string | URL | RequestInfo\n recordBody: NetworkRecordOptions['recordBody']\n}) {\n function matchesContentType(contentTypes: string[]) {\n const contentTypeHeader = Object.keys(headers).find((key) => key.toLowerCase() === 'content-type')\n const contentType = contentTypeHeader && headers[contentTypeHeader]\n return contentTypes.some((ct) => contentType?.includes(ct))\n }\n\n /**\n * particularly in canvas applications we see many requests to blob URLs\n * e.g. blob:https://video_url\n * these blob/object URLs are local to the browser, we can never capture that body\n * so we can just return false here\n */\n function isBlobURL(url: string | URL | RequestInfo) {\n try {\n if (typeof url === 'string') {\n return url.startsWith('blob:')\n }\n if (url instanceof URL) {\n return url.protocol === 'blob:'\n }\n if (url instanceof Request) {\n return isBlobURL(url.url)\n }\n return false\n } catch {\n return false\n }\n }\n if (!recordBody) return false\n if (isBlobURL(url)) return false\n if (isBoolean(recordBody)) return true\n if (isArray(recordBody)) return matchesContentType(recordBody)\n const recordBodyType = recordBody[type]\n if (isBoolean(recordBodyType)) return recordBodyType\n return matchesContentType(recordBodyType)\n}\n\nasync function getRequestPerformanceEntry(\n win: IWindow,\n initiatorType: string,\n url: string,\n start?: number,\n end?: number,\n attempt = 0\n): Promise<PerformanceResourceTiming | null> {\n if (attempt > 10) {\n logger.warn('Failed to get performance entry for request', { url, initiatorType })\n return null\n }\n const urlPerformanceEntries = win.performance.getEntriesByName(url) as PerformanceResourceTiming[]\n const performanceEntry = findLast(\n urlPerformanceEntries,\n (entry) =>\n isResourceTiming(entry) &&\n entry.initiatorType === initiatorType &&\n (isUndefined(start) || entry.startTime >= start) &&\n (isUndefined(end) || entry.startTime <= end)\n )\n if (!performanceEntry) {\n await new Promise((resolve) => setTimeout(resolve, 50 * attempt))\n return getRequestPerformanceEntry(win, initiatorType, url, start, end, attempt + 1)\n }\n return performanceEntry\n}\n\n/**\n * According to MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/response\n * xhr response is typed as any but can be an ArrayBuffer, a Blob, a Document, a JavaScript object,\n * or a string, depending on the value of XMLHttpRequest.responseType, that contains the response entity body.\n *\n * XHR request body is Document | XMLHttpRequestBodyInit | null | undefined\n */\nfunction _tryReadXHRBody({\n body,\n options,\n url,\n}: {\n body: Document | XMLHttpRequestBodyInit | any | null | undefined\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (isNullish(body)) {\n return null\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n if (isString(body)) {\n return body\n }\n\n if (isDocument(body)) {\n return body.textContent\n }\n\n if (isFormData(body)) {\n return formDataToQuery(body)\n }\n\n if (isObject(body)) {\n try {\n return JSON.stringify(body)\n } catch {\n return '[SessionReplay] Failed to stringify response object'\n }\n }\n\n return '[SessionReplay] Cannot read body of type ' + toString.call(body)\n}\n\nfunction initXhrObserver(cb: networkCallback, win: IWindow, options: Required<NetworkRecordOptions>): listenerHandler {\n if (!options.initiatorTypes.includes('xmlhttprequest')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n\n const restorePatch = patch(\n win.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let start: number | undefined\n let end: number | undefined\n\n const requestHeaders: Headers = {}\n const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr)\n xhr.setRequestHeader = (header: string, value: string) => {\n requestHeaders[header] = value\n return originalSetRequestHeader(header, value)\n }\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n\n const originalSend = xhr.send.bind(xhr)\n xhr.send = (body) => {\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = _tryReadXHRBody({ body, options, url })\n }\n start = win.performance.now()\n return originalSend(body)\n }\n\n const readyStateListener = () => {\n if (xhr.readyState !== xhr.DONE) {\n return\n }\n\n // Clean up the listener immediately when done to prevent memory leaks\n xhr.removeEventListener('readystatechange', readyStateListener)\n\n end = win.performance.now()\n const responseHeaders: Headers = {}\n const rawHeaders = xhr.getAllResponseHeaders()\n const headers = rawHeaders.trim().split(/[\\r\\n]+/)\n headers.forEach((line) => {\n const parts = line.split(': ')\n const header = parts.shift()\n const value = parts.join(': ')\n if (header) {\n responseHeaders[header] = value\n }\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = _tryReadXHRBody({ body: xhr.response, options, url })\n }\n getRequestPerformanceEntry(win, 'xmlhttprequest', req.url, start, end)\n .then((entry) => {\n const requests = prepareRequest({\n entry,\n method: method,\n status: xhr?.status,\n networkRequest,\n start,\n end,\n url: url.toString(),\n initiatorType: 'xmlhttprequest',\n })\n cb({ requests })\n })\n .catch(() => {\n //\n })\n }\n\n // This is very tricky code, and making it passive won't bring many performance benefits,\n // so let's ignore the rule here.\n // eslint-disable-next-line posthog-js/no-add-event-listener\n xhr.addEventListener('readystatechange', readyStateListener)\n\n originalOpen.call(xhr, method, url.toString(), async, username, password)\n }\n }\n )\n return () => {\n restorePatch()\n }\n}\n\n/**\n * Check if this PerformanceEntry is either a PerformanceResourceTiming or a PerformanceNavigationTiming\n * NB PerformanceNavigationTiming extends PerformanceResourceTiming\n * Here we don't care which interface it implements as both expose `serverTimings`\n */\nconst exposesServerTiming = (event: PerformanceEntry | null): event is PerformanceResourceTiming =>\n !isNull(event) && (event.entryType === 'navigation' || event.entryType === 'resource')\n\nfunction prepareRequest({\n entry,\n method,\n status,\n networkRequest,\n isInitial,\n start,\n end,\n url,\n initiatorType,\n}: {\n entry: PerformanceResourceTiming | null\n method: string | undefined\n status: number | undefined\n networkRequest: Partial<CapturedNetworkRequest>\n isInitial?: boolean\n start?: number\n end?: number\n // if there is no performance observer entry, we still need to know the url\n url?: string\n // if there is no performance observer entry, we can provide the initiatorType\n initiatorType?: string\n}): CapturedNetworkRequest[] {\n start = entry ? entry.startTime : start\n end = entry ? entry.responseEnd : end\n\n // kudos to sentry javascript sdk for excellent background on why to use Date.now() here\n // https://github.com/getsentry/sentry-javascript/blob/e856e40b6e71a73252e788cd42b5260f81c9c88e/packages/utils/src/time.ts#L70\n // can't start observer if performance.now() is not available\n // eslint-disable-next-line compat/compat\n const timeOrigin = Math.floor(Date.now() - performance.now())\n // clickhouse can't ingest timestamps that are floats\n // (in this case representing fractions of a millisecond we don't care about anyway)\n // use timeOrigin if we really can't gather a start time\n const timestamp = Math.floor(timeOrigin + (start || 0))\n\n const entryJSON = entry ? entry.toJSON() : { name: url }\n\n const requests: CapturedNetworkRequest[] = [\n {\n ...entryJSON,\n startTime: isUndefined(start) ? undefined : Math.round(start),\n endTime: isUndefined(end) ? undefined : Math.round(end),\n timeOrigin,\n timestamp,\n method: method,\n initiatorType: initiatorType ? initiatorType : entry ? (entry.initiatorType as InitiatorType) : undefined,\n status,\n requestHeaders: networkRequest.requestHeaders,\n requestBody: networkRequest.requestBody,\n responseHeaders: networkRequest.responseHeaders,\n responseBody: networkRequest.responseBody,\n isInitial,\n },\n ]\n\n if (exposesServerTiming(entry)) {\n for (const timing of entry.serverTiming || []) {\n requests.push({\n timeOrigin,\n timestamp,\n startTime: Math.round(entry.startTime),\n name: timing.name,\n duration: timing.duration,\n // the spec has a closed list of possible types\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType\n // but, we need to know this was a server timing so that we know to\n // match it to the appropriate navigation or resource timing\n // that matching will have to be on timestamp and $current_url\n entryType: 'serverTiming',\n })\n }\n }\n\n return requests\n}\n\nconst contentTypePrefixDenyList = ['video/', 'audio/']\n\nfunction _checkForCannotReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): string | null {\n if (r.headers.get('Transfer-Encoding') === 'chunked') {\n return 'Chunked Transfer-Encoding is not supported'\n }\n\n // `get` and `has` are case-insensitive\n // but return the header value with the casing that was supplied\n const contentType = r.headers.get('Content-Type')?.toLowerCase()\n const contentTypeIsDenied = contentTypePrefixDenyList.some((prefix) => contentType?.startsWith(prefix))\n if (contentType && contentTypeIsDenied) {\n return `Content-Type ${contentType} is not supported`\n }\n\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return hostname + ' is in deny list'\n }\n\n return null\n}\n\nfunction _tryReadBody(r: Request | Response): Promise<string> {\n // there are now already multiple places where we're using Promise...\n // eslint-disable-next-line compat/compat\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => resolve('[SessionReplay] Timeout while trying to read body'), 500)\n try {\n r.clone()\n .text()\n .then(\n (txt) => resolve(txt),\n (reason) => reject(reason)\n )\n .finally(() => clearTimeout(timeout))\n } catch {\n clearTimeout(timeout)\n resolve('[SessionReplay] Failed to read body')\n }\n })\n}\n\nasync function _tryReadRequestBody({\n r,\n options,\n url,\n}: {\n r: Request\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const { hostname, isHostDenied } = isHostOnDenyList(url, options)\n if (isHostDenied) {\n return Promise.resolve(hostname + ' is in deny list')\n }\n\n return _tryReadBody(r)\n}\n\nasync function _tryReadResponseBody({\n r,\n options,\n url,\n}: {\n r: Response\n options: NetworkRecordOptions\n url: string | URL | RequestInfo\n}): Promise<string> {\n const cannotReadBodyReason: string | null = _checkForCannotReadResponseBody({ r, options, url })\n if (!isNull(cannotReadBodyReason)) {\n return Promise.resolve(cannotReadBodyReason)\n }\n\n return _tryReadBody(r)\n}\n\nfunction initFetchObserver(\n cb: networkCallback,\n win: IWindow,\n options: Required<NetworkRecordOptions>\n): listenerHandler {\n if (!options.initiatorTypes.includes('fetch')) {\n return () => {\n //\n }\n }\n const recordRequestHeaders = shouldRecordHeaders('request', options.recordHeaders)\n const recordResponseHeaders = shouldRecordHeaders('response', options.recordHeaders)\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const restorePatch = patch(win, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n let res: Response | undefined\n const networkRequest: Partial<CapturedNetworkRequest> = {}\n let start: number | undefined\n let end: number | undefined\n\n try {\n const requestHeaders: Headers = {}\n req.headers.forEach((value: string, header: string | number) => {\n requestHeaders[header] = value\n })\n if (recordRequestHeaders) {\n networkRequest.requestHeaders = requestHeaders\n }\n if (\n shouldRecordBody({\n type: 'request',\n headers: requestHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.requestBody = await _tryReadRequestBody({ r: req, options, url })\n }\n\n start = win.performance.now()\n res = await originalFetch(req)\n end = win.performance.now()\n\n const responseHeaders: Headers = {}\n res.headers.forEach((value: string, header: string | number) => {\n responseHeaders[header] = value\n })\n if (recordResponseHeaders) {\n networkRequest.responseHeaders = responseHeaders\n }\n if (\n shouldRecordBody({\n type: 'response',\n headers: responseHeaders,\n url,\n recordBody: options.recordBody,\n })\n ) {\n networkRequest.responseBody = await _tryReadResponseBody({ r: res, options, url })\n }\n\n return res\n } finally {\n getRequestPerformanceEntry(win, 'fetch', req.url, start, end)\n .then((entry) => {\n const requests = prepareRequest({\n entry,\n method: req.method,\n status: res?.status,\n networkRequest,\n start,\n end,\n url: req.url,\n initiatorType: 'fetch',\n })\n cb({ requests })\n })\n .catch(() => {\n //\n })\n }\n }\n })\n return () => {\n restorePatch()\n }\n}\n\nlet initialisedHandler: listenerHandler | null = null\n\nfunction initNetworkObserver(\n callback: networkCallback,\n win: IWindow, // top window or in an iframe\n options: NetworkRecordOptions\n): listenerHandler {\n if (!('performance' in win)) {\n return () => {\n //\n }\n }\n\n if (initialisedHandler) {\n logger.warn('Network observer already initialised, doing nothing')\n return () => {\n // the first caller should already have this handler and will be responsible for teardown\n }\n }\n\n const networkOptions = (\n options ? Object.assign({}, defaultNetworkOptions, options) : defaultNetworkOptions\n ) as Required<NetworkRecordOptions>\n\n const cb: networkCallback = (data) => {\n const requests: CapturedNetworkRequest[] = []\n data.requests.forEach((request) => {\n const maskedRequest = networkOptions.maskRequestFn(request)\n if (maskedRequest) {\n requests.push(maskedRequest)\n }\n })\n\n if (requests.length > 0) {\n callback({ ...data, requests })\n }\n }\n const performanceObserver = initPerformanceObserver(cb, win, networkOptions)\n\n // only wrap fetch and xhr if headers or body are being recorded\n let xhrObserver: listenerHandler = () => {}\n let fetchObserver: listenerHandler = () => {}\n if (networkOptions.recordHeaders || networkOptions.recordBody) {\n xhrObserver = initXhrObserver(cb, win, networkOptions)\n fetchObserver = initFetchObserver(cb, win, networkOptions)\n }\n\n initialisedHandler = () => {\n performanceObserver()\n xhrObserver()\n fetchObserver()\n }\n return initialisedHandler\n}\n\n// use the plugin name so that when this functionality is adopted into rrweb\n// we can remove this plugin and use the core functionality with the same data\nexport const NETWORK_PLUGIN_NAME = 'rrweb/network@1'\n\n// TODO how should this be typed?\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const getRecordNetworkPlugin: (options?: NetworkRecordOptions) => RecordPlugin = (options) => {\n return {\n name: NETWORK_PLUGIN_NAME,\n observer: initNetworkObserver,\n options: options,\n }\n}\n\n// rrweb/networ@1 ends\n","import { record as rrwebRecord } from '@rrweb/record'\nimport { getRecordConsolePlugin } from '@rrweb/rrweb-plugin-console-record'\nimport { getRecordNetworkPlugin } from '../extensions/replay/external/network-plugin'\nimport { assignableWindow } from '../utils/globals'\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.rrwebPlugins = { getRecordConsolePlugin, getRecordNetworkPlugin }\nassignableWindow.__PosthogExtensions__.rrweb = { record: rrwebRecord, version: 'v2' }\n\n// we used to put all of these items directly on window, and now we put it on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put them directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.rrweb = { record: rrwebRecord, version: 'v2' }\nassignableWindow.rrwebConsoleRecord = { getRecordConsolePlugin }\nassignableWindow.getRecordNetworkPlugin = getRecordNetworkPlugin\n\nexport default rrwebRecord\n","var n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function g(n){return n.children}function b(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?m(n):null}function k(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k(n)}}function w(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!x.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(x)}function x(){var n,u,t,o,r,e,c,s,a;for(i.sort(f);n=i.shift();)n.__d&&(u=i.length,o=void 0,e=(r=(t=n).__v).__e,s=[],a=[],(c=t.__P)&&((o=v({},r)).__v=r.__v+1,l.vnode&&l.vnode(o),L(c,o,r,t.__n,void 0!==c.ownerSVGElement,32&r.__u?[e]:null,s,null==e?m(r):e,!!(32&r.__u),a),o.__.__k[o.__i]=o,M(s,o,a),o.__e!=e&&k(o)),i.length>u&&i.sort(f));x.__r=0}function C(n,l,u,t,i,o,r,f,e,a,h){var v,p,y,d,_,g=t&&t.__k||s,b=l.length;for(u.__d=e,P(u,l,g),e=u.__d,v=0;v<b;v++)null!=(y=u.__k[v])&&\"boolean\"!=typeof y&&\"function\"!=typeof y&&(p=-1===y.__i?c:g[y.__i]||c,y.__i=v,L(n,y,p,i,o,r,f,e,a,h),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&z(p.ref,null,y),h.push(y.ref,y.__c||d,y)),null==_&&null!=d&&(_=d),65536&y.__u||p.__k===y.__k?e=S(y,e,n):\"function\"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=_}function P(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)null!=(i=n.__k[t]=null==(i=l[t])||\"boolean\"==typeof i||\"function\"==typeof i?null:\"string\"==typeof i||\"number\"==typeof i||\"bigint\"==typeof i||i.constructor==String?d(null,i,null,null,i):h(i)?d(g,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?d(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=H(i,u,r=t+a,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:a=f<r&&f==r-1?f-r:0,f!==t+a&&(i.__u|=65536))):(o=u[t])&&null==o.key&&o.__e&&(o.__e==n.__d&&(n.__d=m(o)),N(o,o,!1),u[t]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=m(o)),N(o,o))}function S(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=S(t[i],l,u));return l}return n.__e!=l&&(u.insertBefore(n.__e,l||null),l=n.__e),l&&l.nextSibling}function $(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(h(n)?n.some(function(n){$(n,l)}):l.push(n)),l}function H(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++}}return-1}function I(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function T(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||I(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||I(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/,\"$1\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=Date.now(),n.addEventListener(l,o?D:A,o)):n.removeEventListener(l,o?D:A,o);else{if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&\"role\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function A(n){var u=this.l[n.type+!1];if(n.t){if(n.t<=u.u)return}else n.t=Date.now();return u(l.event?l.event(n):n)}function D(n){return this.l[n.type+!0](l.event?l.event(n):n)}function L(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,m,k,w,x,P,S,$,H,I,T,A=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof A)try{if(w=u.props,x=(a=A.contextType)&&i[a.__c],P=a?x?x.props.value:a.__:i,t.__c?k=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in A&&A.prototype.render?u.__c=p=new A(w,P):(u.__c=p=new b(w,P),p.constructor=A,p.render=O),x&&x.sub(p),p.props=w,p.state||(p.state={}),p.context=P,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=A.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v({},p.__s)),v(p.__s,A.getDerivedStateFromProps(w,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==A.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(null==A.getDerivedStateFromProps&&w!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(w,P),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(w,p.__s,P)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=w,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(w,p.__s,P),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,m)})}if(p.context=P,p.props=w,p.__P=n,p.__e=!1,$=l.__r,H=0,\"prototype\"in A&&A.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),I=0;I<p._sb.length;I++)p.__h.push(p._sb[I]);p._sb=[]}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=v(v({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(m=p.getSnapshotBeforeUpdate(d,_)),C(n,h(T=null!=a&&a.type===g&&null==a.key?a.props.children:a)?T:[T],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__u&=-161,p.__h.length&&f.push(p),k&&(p.__E=p.__=null)}catch(n){u.__v=null,c||null!=r?(u.__e=e,u.__u|=c?160:32,r[r.indexOf(e)]=null):(u.__e=t.__e,u.__k=t.__k),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=j(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function M(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)z(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function j(l,u,t,i,o,r,f,e,s){var a,v,y,d,_,g,b,k=t.props,w=u.props,x=u.type;if(\"svg\"===x&&(o=!0),null!=r)for(a=0;a<r.length;a++)if((_=r[a])&&\"setAttribute\"in _==!!x&&(x?_.localName===x:3===_.nodeType)){l=_,r[a]=null;break}if(null==l){if(null===x)return document.createTextNode(w);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",x):document.createElement(x,w.is&&w),r=null,e=!1}if(null===x)k===w||e&&l.data===w||(l.data=w);else{if(r=r&&n.call(l.childNodes),k=t.props||c,!e&&null!=r)for(k={},a=0;a<l.attributes.length;a++)k[(_=l.attributes[a]).name]=_.value;for(a in k)_=k[a],\"children\"==a||(\"dangerouslySetInnerHTML\"==a?y=_:\"key\"===a||a in w||T(l,a,null,_,o));for(a in w)_=w[a],\"children\"==a?d=_:\"dangerouslySetInnerHTML\"==a?v=_:\"value\"==a?g=_:\"checked\"==a?b=_:\"key\"===a||e&&\"function\"!=typeof _||k[a]===_||T(l,a,_,k[a],o);if(v)e||y&&(v.__html===y.__html||v.__html===l.innerHTML)||(l.innerHTML=v.__html),u.__k=[];else if(y&&(l.innerHTML=\"\"),C(l,h(d)?d:[d],u,t,i,o&&\"foreignObject\"!==x,r,f,r?r[0]:t.__k&&m(t,0),e,s),null!=r)for(a=r.length;a--;)null!=r[a]&&p(r[a]);e||(a=\"value\",void 0!==g&&(g!==l[a]||\"progress\"===x&&!g||\"option\"===x&&g!==k[a])&&T(l,a,g,k[a],!1),a=\"checked\",void 0!==b&&b!==l[a]&&T(l,a,b,k[a],!1))}return l}function z(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function N(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||z(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null,n.__c=void 0}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&N(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p(n.__e),n.__=n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function q(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],L(t,u=(!o&&i||t).__k=y(g,null,[u]),r||c,c,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),M(f,u,e)}function B(n,l){q(n,l,B)}function E(l,u,t){var i,o,r,f,e=v({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function F(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w(this))},b.prototype.render=g,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},x.__r=0,e=0;export{b as Component,g as Fragment,E as cloneElement,F as createContext,y as createElement,_ as createRef,y as h,B as hydrate,t as isValidElement,l as options,q as render,$ as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n.__b,a=n.__r,v=n.diffed,l=n.__c,m=n.unmount;function d(t,u){n.__h&&n.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c}),i.__[t]}function h(n){return o=1,s(B,n)}function s(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function p(u,i){var o=d(t++,3);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o))}function y(u,i){var o=d(t++,4);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o))}function _(n){return o=5,F(function(){return{current:n}},[])}function A(n,t,r){o=6,y(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function F(n,r){var u=d(t++,7);return z(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T(n,t){return o=8,F(function(){return n},t)}function q(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x(t,r){n.useDebugValue&&n.useDebugValue(r?r(t):t)}function P(n){var u=d(t++,10),i=h();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function V(){var n=d(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w),t.__H.__h=[]}catch(r){t.__H.__h=[],n.__e(r,t.__v)}}n.__b=function(n){r=null,e&&e(n)},n.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(k),i.__h.forEach(w),i.__h=[],t=0)),u=r},n.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===n.requestAnimationFrame||((i=n.requestAnimationFrame)||j)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},n.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return!n.__||w(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],n.__e(u,t.__v)}}),l&&l(t,r)},n.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n)}catch(n){r=n}}),u.__H=void 0,r&&n.__e(r,u.__v))};var g=\"function\"==typeof requestAnimationFrame;function j(n){var t,r=function(){clearTimeout(u),g&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g&&(t=requestAnimationFrame(r))}function k(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function w(n){var t=r;n.__c=n.__(),r=t}function z(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B(n,t){return\"function\"==typeof t?t(n):t}export{T as useCallback,q as useContext,x as useDebugValue,p as useEffect,P as useErrorBoundary,V as useId,A as useImperativeHandle,y as useLayoutEffect,F as useMemo,s as useReducer,_ as useRef,h as useState};\n//# sourceMappingURL=hooks.module.js.map\n","/**\n * Having Survey types in types.ts was confusing tsc\n * and generating an invalid module.d.ts\n * See https://github.com/PostHog/posthog-js/issues/698\n */\n\nimport type { PropertyMatchType } from './types'\n\nexport enum SurveyWidgetType {\n Button = 'button',\n Tab = 'tab',\n Selector = 'selector',\n}\n\nexport enum SurveyPosition {\n TopLeft = 'top_left',\n TopRight = 'top_right',\n TopCenter = 'top_center',\n MiddleLeft = 'middle_left',\n MiddleRight = 'middle_right',\n MiddleCenter = 'middle_center',\n Left = 'left',\n Center = 'center',\n Right = 'right',\n NextToTrigger = 'next_to_trigger',\n}\n\nexport interface SurveyAppearance {\n // keep in sync with frontend/src/types.ts -> SurveyAppearance\n backgroundColor?: string\n submitButtonColor?: string\n // text color is deprecated, use auto contrast text color instead\n textColor?: string\n // deprecate submit button text eventually\n submitButtonText?: string\n submitButtonTextColor?: string\n descriptionTextColor?: string\n ratingButtonColor?: string\n ratingButtonActiveColor?: string\n ratingButtonHoverColor?: string\n whiteLabel?: boolean\n autoDisappear?: boolean\n displayThankYouMessage?: boolean\n thankYouMessageHeader?: string\n thankYouMessageDescription?: string\n thankYouMessageDescriptionContentType?: SurveyQuestionDescriptionContentType\n thankYouMessageCloseButtonText?: string\n borderColor?: string\n position?: SurveyPosition\n placeholder?: string\n shuffleQuestions?: boolean\n surveyPopupDelaySeconds?: number\n // widget options\n widgetType?: SurveyWidgetType\n widgetSelector?: string\n widgetLabel?: string\n widgetColor?: string\n fontFamily?: string\n // questionable: Not in frontend/src/types.ts -> SurveyAppearance, but used in site app\n maxWidth?: string\n zIndex?: string\n disabledButtonOpacity?: string\n boxPadding?: string\n}\n\nexport enum SurveyType {\n Popover = 'popover',\n API = 'api',\n Widget = 'widget',\n ExternalSurvey = 'external_survey',\n}\n\nexport type SurveyQuestion = BasicSurveyQuestion | LinkSurveyQuestion | RatingSurveyQuestion | MultipleSurveyQuestion\n\nexport type SurveyQuestionDescriptionContentType = 'html' | 'text'\n\ninterface SurveyQuestionBase {\n question: string\n id?: string\n description?: string | null\n descriptionContentType?: SurveyQuestionDescriptionContentType\n optional?: boolean\n buttonText?: string\n branching?: NextQuestionBranching | EndBranching | ResponseBasedBranching | SpecificQuestionBranching\n}\n\nexport interface BasicSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.Open\n}\n\nexport interface LinkSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.Link\n link?: string | null\n}\n\nexport interface RatingSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.Rating\n display: 'number' | 'emoji'\n scale: 3 | 5 | 7 | 10\n lowerBoundLabel: string\n upperBoundLabel: string\n skipSubmitButton?: boolean\n}\n\nexport interface MultipleSurveyQuestion extends SurveyQuestionBase {\n type: SurveyQuestionType.SingleChoice | SurveyQuestionType.MultipleChoice\n choices: string[]\n hasOpenChoice?: boolean\n shuffleOptions?: boolean\n skipSubmitButton?: boolean\n}\n\nexport enum SurveyQuestionType {\n Open = 'open',\n MultipleChoice = 'multiple_choice',\n SingleChoice = 'single_choice',\n Rating = 'rating',\n Link = 'link',\n}\n\nexport enum SurveyQuestionBranchingType {\n NextQuestion = 'next_question',\n End = 'end',\n ResponseBased = 'response_based',\n SpecificQuestion = 'specific_question',\n}\n\ninterface NextQuestionBranching {\n type: SurveyQuestionBranchingType.NextQuestion\n}\n\ninterface EndBranching {\n type: SurveyQuestionBranchingType.End\n}\n\ninterface ResponseBasedBranching {\n type: SurveyQuestionBranchingType.ResponseBased\n responseValues: Record<string, any>\n}\n\ninterface SpecificQuestionBranching {\n type: SurveyQuestionBranchingType.SpecificQuestion\n index: number\n}\n\nexport type SurveyCallback = (surveys: Survey[], context?: { isLoaded: boolean; error?: string }) => void\n\nexport interface SurveyElement {\n text?: string\n $el_text?: string\n tag_name?: string\n href?: string\n attr_id?: string\n attr_class?: string[]\n nth_child?: number\n nth_of_type?: number\n attributes?: Record<string, any>\n event_id?: number\n order?: number\n group_id?: number\n}\nexport interface SurveyRenderReason {\n visible: boolean\n disabledReason?: string\n}\n\nexport enum SurveySchedule {\n Once = 'once',\n Recurring = 'recurring',\n Always = 'always',\n}\n\nexport interface Survey {\n // Sync this with the backend's SurveyAPISerializer!\n id: string\n name: string\n description: string\n type: SurveyType\n feature_flag_keys:\n | {\n key: string\n value?: string\n }[]\n | null\n // the linked flag key is the flag key that is used to link the survey to a flag\n linked_flag_key: string | null\n targeting_flag_key: string | null\n // the internal targeting flag key is the flag key that is used to target users who have seen the survey\n // eg survey-targeting-<survey-id>\n internal_targeting_flag_key: string | null\n questions: SurveyQuestion[]\n appearance: SurveyAppearance | null\n conditions: {\n url?: string\n selector?: string\n seenSurveyWaitPeriodInDays?: number\n urlMatchType?: PropertyMatchType\n events: {\n repeatedActivation?: boolean\n values: {\n name: string\n /** Property filters for event matching */\n propertyFilters?: {\n [propertyName: string]: {\n values: string[]\n operator: PropertyMatchType\n }\n }\n }[]\n } | null\n actions: {\n values: SurveyActionType[]\n } | null\n deviceTypes?: string[]\n deviceTypesMatchType?: PropertyMatchType\n linkedFlagVariant?: string\n } | null\n start_date: string | null\n end_date: string | null\n current_iteration: number | null\n current_iteration_start_date: string | null\n schedule?: SurveySchedule | null\n enable_partial_responses?: boolean | null\n}\n\nexport type SurveyWithTypeAndAppearance = Pick<Survey, 'id' | 'type' | 'appearance'>\n\nexport interface SurveyActionType {\n id: number\n name: string | null\n steps?: ActionStepType[]\n}\n\n/** Sync with plugin-server/src/types.ts */\nexport type ActionStepStringMatching = 'contains' | 'exact' | 'regex'\n\nexport interface ActionStepType {\n event?: string | null\n selector?: string | null\n /** @deprecated Only `selector` should be used now. */\n tag_name?: string\n text?: string | null\n /** @default StringMatching.Exact */\n text_matching?: ActionStepStringMatching | null\n href?: string | null\n /** @default ActionStepStringMatching.Exact */\n href_matching?: ActionStepStringMatching | null\n url?: string | null\n /** @default StringMatching.Contains */\n url_matching?: ActionStepStringMatching | null\n}\n\nexport enum SurveyEventName {\n SHOWN = 'survey shown',\n DISMISSED = 'survey dismissed',\n SENT = 'survey sent',\n}\n\nexport enum SurveyEventProperties {\n SURVEY_ID = '$survey_id',\n SURVEY_NAME = '$survey_name',\n SURVEY_RESPONSE = '$survey_response',\n SURVEY_ITERATION = '$survey_iteration',\n SURVEY_ITERATION_START_DATE = '$survey_iteration_start_date',\n SURVEY_PARTIALLY_COMPLETED = '$survey_partially_completed',\n SURVEY_SUBMISSION_ID = '$survey_submission_id',\n SURVEY_QUESTIONS = '$survey_questions',\n SURVEY_COMPLETED = '$survey_completed',\n}\n\nexport enum DisplaySurveyType {\n Popover = 'popover',\n Inline = 'inline',\n}\n\ninterface DisplaySurveyOptionsBase {\n ignoreConditions: boolean\n ignoreDelay: boolean\n displayType: DisplaySurveyType\n}\n\ninterface DisplaySurveyPopoverOptions extends DisplaySurveyOptionsBase {\n displayType: DisplaySurveyType.Popover\n}\n\ninterface DisplaySurveyInlineOptions extends DisplaySurveyOptionsBase {\n displayType: DisplaySurveyType.Inline\n selector: string\n}\n\nexport type DisplaySurveyOptions = DisplaySurveyPopoverOptions | DisplaySurveyInlineOptions\n\nexport interface SurveyConfig {\n prefillFromUrl?: boolean\n autoSubmitIfComplete?: boolean\n autoSubmitDelay?: number\n}\n","import { DisplaySurveyOptions, DisplaySurveyType, Survey, SurveyType } from '../posthog-surveys-types'\nimport { createLogger } from '../utils/logger'\n\nexport const SURVEY_LOGGER = createLogger('[Surveys]')\n\nexport function isSurveyRunning(survey: Survey): boolean {\n return !!(survey.start_date && !survey.end_date)\n}\n\nexport function doesSurveyActivateByEvent(survey: Pick<Survey, 'conditions'>): boolean {\n return !!survey.conditions?.events?.values?.length\n}\n\nexport function doesSurveyActivateByAction(survey: Pick<Survey, 'conditions'>): boolean {\n return !!survey.conditions?.actions?.values?.length\n}\n\nexport const SURVEY_SEEN_PREFIX = 'seenSurvey_'\nexport const SURVEY_IN_PROGRESS_PREFIX = 'inProgressSurvey_'\n\nexport const getSurveyInteractionProperty = (\n survey: Pick<Survey, 'id' | 'current_iteration'>,\n action: 'responded' | 'dismissed'\n): string => {\n let surveyProperty = `$survey_${action}/${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveyProperty = `$survey_${action}/${survey.id}/${survey.current_iteration}`\n }\n\n return surveyProperty\n}\n\nexport const getSurveySeenKey = (survey: Pick<Survey, 'id' | 'current_iteration'>): string => {\n let surveySeenKey = `${SURVEY_SEEN_PREFIX}${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n surveySeenKey = `${SURVEY_SEEN_PREFIX}${survey.id}_${survey.current_iteration}`\n }\n\n return surveySeenKey\n}\n\nexport const setSurveySeenOnLocalStorage = (survey: Pick<Survey, 'id' | 'current_iteration'>) => {\n const isSurveySeen = localStorage.getItem(getSurveySeenKey(survey))\n // if survey is already seen, no need to set it again\n if (isSurveySeen) {\n return\n }\n\n localStorage.setItem(getSurveySeenKey(survey), 'true')\n}\n\n// These surveys are relevant for the getActiveMatchingSurveys method. They are used to\n// display surveys in our customer's application. Any new in-app survey type should be added here.\nexport const IN_APP_SURVEY_TYPES = [SurveyType.Popover, SurveyType.Widget, SurveyType.API]\n\nexport const DEFAULT_DISPLAY_SURVEY_OPTIONS: DisplaySurveyOptions = {\n ignoreConditions: false,\n ignoreDelay: false,\n displayType: DisplaySurveyType.Popover,\n}\n","/**\n * uuidv7: An experimental implementation of the proposed UUID Version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2023 LiosK\n * @packageDocumentation\n *\n * from https://github.com/LiosK/uuidv7/blob/e501462ea3d23241de13192ceae726956f9b3b7d/src/index.ts\n */\n\n// polyfill for IE11\nimport { window } from './utils/globals'\n\nimport { isNumber, isUndefined } from '@posthog/core'\n\nif (!Math.trunc) {\n Math.trunc = function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v)\n }\n}\n\n// polyfill for IE11\nif (!Number.isInteger) {\n Number.isInteger = function (value) {\n return isNumber(value) && isFinite(value) && Math.floor(value) === value\n }\n}\n\nconst DIGITS = '0123456789abcdef'\n\n/** Represents a UUID as a 16-byte byte array. */\nexport class UUID {\n /** @param bytes - The 16-byte byte array representation. */\n constructor(readonly bytes: Readonly<Uint8Array>) {\n if (bytes.length !== 16) {\n throw new TypeError('not 128-bit length')\n }\n }\n\n /**\n * Builds a byte array from UUIDv7 field values.\n *\n * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n * @param randA - A 12-bit `rand_a` field value.\n * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n */\n static fromFieldsV7(unixTsMs: number, randA: number, randBHi: number, randBLo: number): UUID {\n if (\n !Number.isInteger(unixTsMs) ||\n !Number.isInteger(randA) ||\n !Number.isInteger(randBHi) ||\n !Number.isInteger(randBLo) ||\n unixTsMs < 0 ||\n randA < 0 ||\n randBHi < 0 ||\n randBLo < 0 ||\n unixTsMs > 0xffff_ffff_ffff ||\n randA > 0xfff ||\n randBHi > 0x3fff_ffff ||\n randBLo > 0xffff_ffff\n ) {\n throw new RangeError('invalid field value')\n }\n\n const bytes = new Uint8Array(16)\n bytes[0] = unixTsMs / 2 ** 40\n bytes[1] = unixTsMs / 2 ** 32\n bytes[2] = unixTsMs / 2 ** 24\n bytes[3] = unixTsMs / 2 ** 16\n bytes[4] = unixTsMs / 2 ** 8\n bytes[5] = unixTsMs\n bytes[6] = 0x70 | (randA >>> 8)\n bytes[7] = randA\n bytes[8] = 0x80 | (randBHi >>> 24)\n bytes[9] = randBHi >>> 16\n bytes[10] = randBHi >>> 8\n bytes[11] = randBHi\n bytes[12] = randBLo >>> 24\n bytes[13] = randBLo >>> 16\n bytes[14] = randBLo >>> 8\n bytes[15] = randBLo\n return new UUID(bytes)\n }\n\n /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n toString(): string {\n let text = ''\n for (let i = 0; i < this.bytes.length; i++) {\n text = text + DIGITS.charAt(this.bytes[i] >>> 4) + DIGITS.charAt(this.bytes[i] & 0xf)\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n text += '-'\n }\n }\n\n if (text.length !== 36) {\n // We saw one customer whose bundling code was mangling the UUID generation\n // rather than accept a bad UUID, we throw an error here.\n throw new Error('Invalid UUIDv7 was generated')\n }\n return text\n }\n\n /** Creates an object from `this`. */\n clone(): UUID {\n return new UUID(this.bytes.slice(0))\n }\n\n /** Returns true if `this` is equivalent to `other`. */\n equals(other: UUID): boolean {\n return this.compareTo(other) === 0\n }\n\n /**\n * Returns a negative integer, zero, or positive integer if `this` is less\n * than, equal to, or greater than `other`, respectively.\n */\n compareTo(other: UUID): number {\n for (let i = 0; i < 16; i++) {\n const diff = this.bytes[i] - other.bytes[i]\n if (diff !== 0) {\n return Math.sign(diff)\n }\n }\n return 0\n }\n}\n\n/** Encapsulates the monotonic counter state. */\nclass V7Generator {\n private _timestamp = 0\n private _counter = 0\n private readonly _random = new DefaultRandom()\n\n /**\n * Generates a new UUIDv7 object from the current timestamp, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method returns monotonically increasing UUIDs unless the up-to-date\n * timestamp is significantly (by ten seconds or more) smaller than the one\n * embedded in the immediately preceding UUID. If such a significant clock\n * rollback is detected, this method resets the generator and returns a new\n * UUID based on the current timestamp.\n */\n generate(): UUID {\n const value = this.generateOrAbort()\n if (!isUndefined(value)) {\n return value\n } else {\n // reset state and resume\n this._timestamp = 0\n const valueAfterReset = this.generateOrAbort()\n if (isUndefined(valueAfterReset)) {\n throw new Error('Could not generate UUID after timestamp reset')\n }\n return valueAfterReset\n }\n }\n\n /**\n * Generates a new UUIDv7 object from the current timestamp, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method returns monotonically increasing UUIDs unless the up-to-date\n * timestamp is significantly (by ten seconds or more) smaller than the one\n * embedded in the immediately preceding UUID. If such a significant clock\n * rollback is detected, this method aborts and returns `undefined`.\n */\n generateOrAbort(): UUID | undefined {\n const MAX_COUNTER = 0x3ff_ffff_ffff\n const ROLLBACK_ALLOWANCE = 10_000 // 10 seconds\n\n const ts = Date.now()\n if (ts > this._timestamp) {\n this._timestamp = ts\n this._resetCounter()\n } else if (ts + ROLLBACK_ALLOWANCE > this._timestamp) {\n // go on with previous timestamp if new one is not much smaller\n this._counter++\n if (this._counter > MAX_COUNTER) {\n // increment timestamp at counter overflow\n this._timestamp++\n this._resetCounter()\n }\n } else {\n // abort if clock went backwards to unbearable extent\n return undefined\n }\n\n return UUID.fromFieldsV7(\n this._timestamp,\n Math.trunc(this._counter / 2 ** 30),\n this._counter & (2 ** 30 - 1),\n this._random.nextUint32()\n )\n }\n\n /** Initializes the counter at a 42-bit random integer. */\n private _resetCounter(): void {\n this._counter = this._random.nextUint32() * 0x400 + (this._random.nextUint32() & 0x3ff)\n }\n}\n\n/** A global flag to force use of cryptographically strong RNG. */\ndeclare const UUIDV7_DENY_WEAK_RNG: boolean\n\n/** Stores `crypto.getRandomValues()` available in the environment. */\nlet getRandomValues: <T extends Uint8Array | Uint32Array>(buffer: T) => T = (buffer) => {\n // fall back on Math.random() unless the flag is set to true\n // TRICKY: don't use the isUndefined method here as can't pass the reference\n if (typeof UUIDV7_DENY_WEAK_RNG !== 'undefined' && UUIDV7_DENY_WEAK_RNG) {\n throw new Error('no cryptographically strong RNG available')\n }\n\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] = Math.trunc(Math.random() * 0x1_0000) * 0x1_0000 + Math.trunc(Math.random() * 0x1_0000)\n }\n return buffer\n}\n\n// detect Web Crypto API\nif (window && !isUndefined(window.crypto) && crypto.getRandomValues) {\n getRandomValues = (buffer) => crypto.getRandomValues(buffer)\n}\n\n/**\n * Wraps `crypto.getRandomValues()` and compatibles to enable buffering; this\n * uses a small buffer by default to avoid unbearable throughput decline in some\n * environments as well as the waste of time and space for unused values.\n */\nclass DefaultRandom {\n private readonly _buffer = new Uint32Array(8)\n private _cursor = Infinity\n nextUint32(): number {\n if (this._cursor >= this._buffer.length) {\n getRandomValues(this._buffer)\n this._cursor = 0\n }\n return this._buffer[this._cursor++]\n }\n}\n\nlet defaultGenerator: V7Generator | undefined\n\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv7 = (): string => uuidv7obj().toString()\n\n/** Generates a UUIDv7 object. */\nconst uuidv7obj = (): UUID => (defaultGenerator || (defaultGenerator = new V7Generator())).generate()\n\nexport const uuid7ToTimestampMs = (uuid: string): number => {\n // remove hyphens\n const hex = uuid.replace(/-/g, '')\n // ensure that it's a version 7 UUID\n if (hex.length !== 32) {\n throw new Error('Not a valid UUID')\n }\n if (hex[12] !== '7') {\n throw new Error('Not a UUIDv7')\n }\n // the first 6 bytes are the timestamp, which means that we can read only the first 12 hex characters\n return parseInt(hex.substring(0, 12), 16)\n}\n","import { isFunction, isUndefined, includes } from '@posthog/core'\n\n/**\n * this device detection code is (at time of writing) about 3% of the size of the entire library\n * this is mostly because the identifiers user in regexes and results can't be minified away since\n * they have meaning\n *\n * so, there are some pre-uglifying choices in the code to help reduce the size\n * e.g. many repeated strings are stored as variables and then old-fashioned concatenated together\n *\n * TL;DR here be dragons\n */\nconst FACEBOOK = 'Facebook'\nconst MOBILE = 'Mobile'\nconst IOS = 'iOS'\nconst ANDROID = 'Android'\nconst TABLET = 'Tablet'\nconst ANDROID_TABLET = ANDROID + ' ' + TABLET\nconst IPAD = 'iPad'\nconst APPLE = 'Apple'\nconst APPLE_WATCH = APPLE + ' Watch'\nconst SAFARI = 'Safari'\nconst BLACKBERRY = 'BlackBerry'\nconst SAMSUNG = 'Samsung'\nconst SAMSUNG_BROWSER = SAMSUNG + 'Browser'\nconst SAMSUNG_INTERNET = SAMSUNG + ' Internet'\nconst CHROME = 'Chrome'\nconst CHROME_OS = CHROME + ' OS'\nconst CHROME_IOS = CHROME + ' ' + IOS\nconst INTERNET_EXPLORER = 'Internet Explorer'\nconst INTERNET_EXPLORER_MOBILE = INTERNET_EXPLORER + ' ' + MOBILE\nconst OPERA = 'Opera'\nconst OPERA_MINI = OPERA + ' Mini'\nconst EDGE = 'Edge'\nconst MICROSOFT_EDGE = 'Microsoft ' + EDGE\nconst FIREFOX = 'Firefox'\nconst FIREFOX_IOS = FIREFOX + ' ' + IOS\nconst NINTENDO = 'Nintendo'\nconst PLAYSTATION = 'PlayStation'\nconst XBOX = 'Xbox'\nconst ANDROID_MOBILE = ANDROID + ' ' + MOBILE\nconst MOBILE_SAFARI = MOBILE + ' ' + SAFARI\nconst WINDOWS = 'Windows'\nconst WINDOWS_PHONE = WINDOWS + ' Phone'\nconst NOKIA = 'Nokia'\nconst OUYA = 'Ouya'\nconst GENERIC = 'Generic'\nconst GENERIC_MOBILE = GENERIC + ' ' + MOBILE.toLowerCase()\nconst GENERIC_TABLET = GENERIC + ' ' + TABLET.toLowerCase()\nconst KONQUEROR = 'Konqueror'\n\nconst BROWSER_VERSION_REGEX_SUFFIX = '(\\\\d+(\\\\.\\\\d+)?)'\nconst DEFAULT_BROWSER_VERSION_REGEX = new RegExp('Version/' + BROWSER_VERSION_REGEX_SUFFIX)\n\nconst XBOX_REGEX = new RegExp(XBOX, 'i')\nconst PLAYSTATION_REGEX = new RegExp(PLAYSTATION + ' \\\\w+', 'i')\nconst NINTENDO_REGEX = new RegExp(NINTENDO + ' \\\\w+', 'i')\nconst BLACKBERRY_REGEX = new RegExp(BLACKBERRY + '|PlayBook|BB10', 'i')\n\nconst windowsVersionMap: Record<string, string> = {\n 'NT3.51': 'NT 3.11',\n 'NT4.0': 'NT 4.0',\n '5.0': '2000',\n '5.1': 'XP',\n '5.2': 'XP',\n '6.0': 'Vista',\n '6.1': '7',\n '6.2': '8',\n '6.3': '8.1',\n '6.4': '10',\n '10.0': '10',\n}\n\n/**\n * Safari detection turns out to be complicated. For e.g. https://stackoverflow.com/a/29696509\n * We can be slightly loose because some options have been ruled out (e.g. firefox on iOS)\n * before this check is made\n */\nfunction isSafari(userAgent: string): boolean {\n return includes(userAgent, SAFARI) && !includes(userAgent, CHROME) && !includes(userAgent, ANDROID)\n}\n\nconst safariCheck = (ua: string, vendor?: string) => (vendor && includes(vendor, APPLE)) || isSafari(ua)\n\n/**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include keywords used in later checks.\n */\nexport const detectBrowser = function (user_agent: string, vendor: string | undefined): string {\n vendor = vendor || '' // vendor is undefined for at least IE9\n\n if (includes(user_agent, ' OPR/') && includes(user_agent, 'Mini')) {\n return OPERA_MINI\n } else if (includes(user_agent, ' OPR/')) {\n return OPERA\n } else if (BLACKBERRY_REGEX.test(user_agent)) {\n return BLACKBERRY\n } else if (includes(user_agent, 'IE' + MOBILE) || includes(user_agent, 'WPDesktop')) {\n return INTERNET_EXPLORER_MOBILE\n }\n // https://developer.samsung.com/internet/user-agent-string-format\n else if (includes(user_agent, SAMSUNG_BROWSER)) {\n return SAMSUNG_INTERNET\n } else if (includes(user_agent, EDGE) || includes(user_agent, 'Edg/')) {\n return MICROSOFT_EDGE\n } else if (includes(user_agent, 'FBIOS')) {\n return FACEBOOK + ' ' + MOBILE\n } else if (includes(user_agent, 'UCWEB') || includes(user_agent, 'UCBrowser')) {\n return 'UC Browser'\n } else if (includes(user_agent, 'CriOS')) {\n return CHROME_IOS // why not just Chrome?\n } else if (includes(user_agent, 'CrMo')) {\n return CHROME\n } else if (includes(user_agent, CHROME)) {\n return CHROME\n } else if (includes(user_agent, ANDROID) && includes(user_agent, SAFARI)) {\n return ANDROID_MOBILE\n } else if (includes(user_agent, 'FxiOS')) {\n return FIREFOX_IOS\n } else if (includes(user_agent.toLowerCase(), KONQUEROR.toLowerCase())) {\n return KONQUEROR\n } else if (safariCheck(user_agent, vendor)) {\n return includes(user_agent, MOBILE) ? MOBILE_SAFARI : SAFARI\n } else if (includes(user_agent, FIREFOX)) {\n return FIREFOX\n } else if (includes(user_agent, 'MSIE') || includes(user_agent, 'Trident/')) {\n return INTERNET_EXPLORER\n } else if (includes(user_agent, 'Gecko')) {\n return FIREFOX\n }\n\n return ''\n}\n\nconst versionRegexes: Record<string, RegExp[]> = {\n [INTERNET_EXPLORER_MOBILE]: [new RegExp('rv:' + BROWSER_VERSION_REGEX_SUFFIX)],\n [MICROSOFT_EDGE]: [new RegExp(EDGE + '?\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [CHROME]: [new RegExp('(' + CHROME + '|CrMo)\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [CHROME_IOS]: [new RegExp('CriOS\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n 'UC Browser': [new RegExp('(UCBrowser|UCWEB)\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [SAFARI]: [DEFAULT_BROWSER_VERSION_REGEX],\n [MOBILE_SAFARI]: [DEFAULT_BROWSER_VERSION_REGEX],\n [OPERA]: [new RegExp('(' + OPERA + '|OPR)\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [FIREFOX]: [new RegExp(FIREFOX + '\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [FIREFOX_IOS]: [new RegExp('FxiOS\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [KONQUEROR]: [new RegExp('Konqueror[:/]?' + BROWSER_VERSION_REGEX_SUFFIX, 'i')],\n // not every blackberry user agent has the version after the name\n [BLACKBERRY]: [new RegExp(BLACKBERRY + ' ' + BROWSER_VERSION_REGEX_SUFFIX), DEFAULT_BROWSER_VERSION_REGEX],\n [ANDROID_MOBILE]: [new RegExp('android\\\\s' + BROWSER_VERSION_REGEX_SUFFIX, 'i')],\n [SAMSUNG_INTERNET]: [new RegExp(SAMSUNG_BROWSER + '\\\\/' + BROWSER_VERSION_REGEX_SUFFIX)],\n [INTERNET_EXPLORER]: [new RegExp('(rv:|MSIE )' + BROWSER_VERSION_REGEX_SUFFIX)],\n Mozilla: [new RegExp('rv:' + BROWSER_VERSION_REGEX_SUFFIX)],\n}\n\n/**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n *\n * `navigator.vendor` is passed in and used to help with detecting certain browsers\n * NB `navigator.vendor` is deprecated and not present in every browser\n */\nexport const detectBrowserVersion = function (userAgent: string, vendor: string | undefined): number | null {\n const browser = detectBrowser(userAgent, vendor)\n const regexes: RegExp[] | undefined = versionRegexes[browser as keyof typeof versionRegexes]\n if (isUndefined(regexes)) {\n return null\n }\n\n for (let i = 0; i < regexes.length; i++) {\n const regex = regexes[i]\n const matches = userAgent.match(regex)\n if (matches) {\n return parseFloat(matches[matches.length - 2])\n }\n }\n return null\n}\n\n// to avoid repeating regexes or calling them twice, we have an array of matches\n// the first regex that matches uses its matcher function to return the result\nconst osMatchers: [\n RegExp,\n [string, string] | ((match: RegExpMatchArray | null, user_agent: string) => [string, string]),\n][] = [\n [\n new RegExp(XBOX + '; ' + XBOX + ' (.*?)[);]', 'i'),\n (match) => {\n return [XBOX, (match && match[1]) || '']\n },\n ],\n [new RegExp(NINTENDO, 'i'), [NINTENDO, '']],\n [new RegExp(PLAYSTATION, 'i'), [PLAYSTATION, '']],\n [BLACKBERRY_REGEX, [BLACKBERRY, '']],\n [\n new RegExp(WINDOWS, 'i'),\n (_, user_agent) => {\n if (/Phone/.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return [WINDOWS_PHONE, '']\n }\n // not all JS versions support negative lookbehind, so we need two checks here\n if (new RegExp(MOBILE).test(user_agent) && !/IEMobile\\b/.test(user_agent)) {\n return [WINDOWS + ' ' + MOBILE, '']\n }\n const match = /Windows NT ([0-9.]+)/i.exec(user_agent)\n if (match && match[1]) {\n const version = match[1]\n let osVersion = windowsVersionMap[version] || ''\n if (/arm/i.test(user_agent)) {\n osVersion = 'RT'\n }\n return [WINDOWS, osVersion]\n }\n return [WINDOWS, '']\n },\n ],\n [\n /((iPhone|iPad|iPod).*?OS (\\d+)_(\\d+)_?(\\d+)?|iPhone)/,\n (match) => {\n if (match && match[3]) {\n const versionParts = [match[3], match[4], match[5] || '0']\n return [IOS, versionParts.join('.')]\n }\n return [IOS, '']\n },\n ],\n [\n /(watch.*\\/(\\d+\\.\\d+\\.\\d+)|watch os,(\\d+\\.\\d+),)/i,\n (match) => {\n // e.g. Watch4,3/5.3.8 (16U680)\n let version = ''\n if (match && match.length >= 3) {\n version = isUndefined(match[2]) ? match[3] : match[2]\n }\n return ['watchOS', version]\n },\n ],\n [\n new RegExp('(' + ANDROID + ' (\\\\d+)\\\\.(\\\\d+)\\\\.?(\\\\d+)?|' + ANDROID + ')', 'i'),\n (match) => {\n if (match && match[2]) {\n const versionParts = [match[2], match[3], match[4] || '0']\n return [ANDROID, versionParts.join('.')]\n }\n return [ANDROID, '']\n },\n ],\n [\n /Mac OS X (\\d+)[_.](\\d+)[_.]?(\\d+)?/i,\n (match) => {\n const result: [string, string] = ['Mac OS X', '']\n if (match && match[1]) {\n const versionParts = [match[1], match[2], match[3] || '0']\n result[1] = versionParts.join('.')\n }\n return result\n },\n ],\n [\n /Mac/i,\n // mop up a few non-standard UAs that should match mac\n ['Mac OS X', ''],\n ],\n [/CrOS/, [CHROME_OS, '']],\n [/Linux|debian/i, ['Linux', '']],\n]\n\nexport const detectOS = function (user_agent: string): [string, string] {\n for (let i = 0; i < osMatchers.length; i++) {\n const [rgex, resultOrFn] = osMatchers[i]\n const match = rgex.exec(user_agent)\n const result = match && (isFunction(resultOrFn) ? resultOrFn(match, user_agent) : resultOrFn)\n if (result) {\n return result\n }\n }\n return ['', '']\n}\n\nexport const detectDevice = function (user_agent: string): string {\n if (NINTENDO_REGEX.test(user_agent)) {\n return NINTENDO\n } else if (PLAYSTATION_REGEX.test(user_agent)) {\n return PLAYSTATION\n } else if (XBOX_REGEX.test(user_agent)) {\n return XBOX\n } else if (new RegExp(OUYA, 'i').test(user_agent)) {\n return OUYA\n } else if (new RegExp('(' + WINDOWS_PHONE + '|WPDesktop)', 'i').test(user_agent)) {\n return WINDOWS_PHONE\n } else if (/iPad/.test(user_agent)) {\n return IPAD\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch'\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone'\n } else if (/(watch)(?: ?os[,/]|\\d,\\d\\/)[\\d.]+/i.test(user_agent)) {\n return APPLE_WATCH\n } else if (BLACKBERRY_REGEX.test(user_agent)) {\n return BLACKBERRY\n } else if (/(kobo)\\s(ereader|touch)/i.test(user_agent)) {\n return 'Kobo'\n } else if (new RegExp(NOKIA, 'i').test(user_agent)) {\n return NOKIA\n } else if (\n // Kindle Fire without Silk / Echo Show\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i.test(user_agent) ||\n // Kindle Fire HD\n /(kf[a-z]+)( bui|\\)).+silk\\//i.test(user_agent)\n ) {\n return 'Kindle Fire'\n } else if (/(Android|ZTE)/i.test(user_agent)) {\n if (\n !new RegExp(MOBILE).test(user_agent) ||\n /(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(user_agent)\n ) {\n if (\n (/pixel[\\daxl ]{1,6}/i.test(user_agent) && !/pixel c/i.test(user_agent)) ||\n /(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(user_agent) ||\n (/lmy47v/i.test(user_agent) && !/QTAQZ3/i.test(user_agent))\n ) {\n return ANDROID\n }\n return ANDROID_TABLET\n } else {\n return ANDROID\n }\n } else if (new RegExp('(pda|' + MOBILE + ')', 'i').test(user_agent)) {\n return GENERIC_MOBILE\n } else if (new RegExp(TABLET, 'i').test(user_agent) && !new RegExp(TABLET + ' pc', 'i').test(user_agent)) {\n return GENERIC_TABLET\n } else {\n return ''\n }\n}\n\nexport const detectDeviceType = function (user_agent: string): string {\n const device = detectDevice(user_agent)\n if (\n device === IPAD ||\n device === ANDROID_TABLET ||\n device === 'Kobo' ||\n device === 'Kindle Fire' ||\n device === GENERIC_TABLET\n ) {\n return TABLET\n } else if (device === NINTENDO || device === XBOX || device === PLAYSTATION || device === OUYA) {\n return 'Console'\n } else if (device === APPLE_WATCH) {\n return 'Wearable'\n } else if (device) {\n return MOBILE\n } else {\n return 'Desktop'\n }\n}\n","import { each, find } from './utils'\nimport Config from './config'\nimport { Compression, RequestWithOptions, RequestResponse } from './types'\nimport { formDataToQuery } from './utils/request-utils'\n\nimport { logger } from './utils/logger'\nimport { AbortController, fetch, navigator, XMLHttpRequest } from './utils/globals'\nimport { gzipSync, strToU8 } from 'fflate'\n\nimport { _base64Encode } from './utils/encode-utils'\n\n// eslint-disable-next-line compat/compat\nexport const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch\n\nconst CONTENT_TYPE_PLAIN = 'text/plain'\nconst CONTENT_TYPE_JSON = 'application/json'\nconst CONTENT_TYPE_FORM = 'application/x-www-form-urlencoded'\nconst SIXTY_FOUR_KILOBYTES = 64 * 1024\n/*\n fetch will fail if we request keepalive with a body greater than 64kb\n sets the threshold lower than that so that\n any overhead doesn't push over the threshold after checking here\n*/\nconst KEEP_ALIVE_THRESHOLD = SIXTY_FOUR_KILOBYTES * 0.8\ntype EncodedBody = {\n contentType: string\n body: string | BlobPart\n estimatedSize: number\n}\n\n/**\n * Extends a URL with additional query parameters\n * @param url - The URL to extend\n * @param params - The parameters to add\n * @param replace - When true (default), new params overwrite existing ones with same key. When false, existing params are preserved.\n * @returns The URL with extended parameters\n */\nexport const extendURLParams = (url: string, params: Record<string, any>, replace: boolean = true): string => {\n const [baseUrl, search] = url.split('?')\n const newParams = { ...params }\n\n const updatedSearch =\n search?.split('&').map((pair) => {\n const [key, origValue] = pair.split('=')\n const value = replace ? (newParams[key] ?? origValue) : origValue\n delete newParams[key]\n return `${key}=${value}`\n }) ?? []\n\n const remaining = formDataToQuery(newParams)\n if (remaining) {\n updatedSearch.push(remaining)\n }\n\n return `${baseUrl}?${updatedSearch.join('&')}`\n}\n\nexport const jsonStringify = (data: any, space?: string | number): string => {\n // With plain JSON.stringify, we get an exception when a property is a BigInt. This has caused problems for some users,\n // see https://github.com/PostHog/posthog-js/issues/1440\n // To work around this, we convert BigInts to strings before stringifying the data. This is not ideal, as we lose\n // information that this was originally a number, but given ClickHouse doesn't support BigInts, the customer\n // would not be able to operate on these numerically anyway.\n return JSON.stringify(data, (_, value) => (typeof value === 'bigint' ? value.toString() : value), space)\n}\n\nconst encodeToDataString = (data: string | Record<string, any>): string => {\n return 'data=' + encodeURIComponent(typeof data === 'string' ? data : jsonStringify(data))\n}\n\nconst encodePostData = ({ data, compression }: RequestWithOptions): EncodedBody | undefined => {\n if (!data) {\n return\n }\n\n if (compression === Compression.GZipJS) {\n const gzipData = gzipSync(strToU8(jsonStringify(data)), { mtime: 0 })\n const blob = new Blob([gzipData], { type: CONTENT_TYPE_PLAIN })\n return {\n contentType: CONTENT_TYPE_PLAIN,\n body: blob,\n estimatedSize: blob.size,\n }\n }\n\n if (compression === Compression.Base64) {\n const b64data = _base64Encode(jsonStringify(data))\n const encodedBody = encodeToDataString(b64data)\n\n return {\n contentType: CONTENT_TYPE_FORM,\n body: encodedBody,\n estimatedSize: new Blob([encodedBody]).size,\n }\n }\n\n const jsonBody = jsonStringify(data)\n return {\n contentType: CONTENT_TYPE_JSON,\n body: jsonBody,\n estimatedSize: new Blob([jsonBody]).size,\n }\n}\n\nconst xhr = (options: RequestWithOptions) => {\n const req = new XMLHttpRequest!()\n req.open(options.method || 'GET', options.url, true)\n const { contentType, body } = encodePostData(options) ?? {}\n\n each(options.headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (contentType) {\n req.setRequestHeader('Content-Type', contentType)\n }\n\n if (options.timeout) {\n req.timeout = options.timeout\n }\n if (!options.disableXHRCredentials) {\n // send the ph_optout cookie\n // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n req.withCredentials = true\n }\n req.onreadystatechange = () => {\n // XMLHttpRequest.DONE == 4, except in safari 4\n if (req.readyState === 4) {\n const response: RequestResponse = {\n statusCode: req.status,\n text: req.responseText,\n }\n if (req.status === 200) {\n try {\n response.json = JSON.parse(req.responseText)\n } catch {\n // logger.error(e)\n }\n }\n\n options.callback?.(response)\n }\n }\n req.send(body)\n}\n\nconst _fetch = (options: RequestWithOptions) => {\n const { contentType, body, estimatedSize } = encodePostData(options) ?? {}\n\n // eslint-disable-next-line compat/compat\n const headers = new Headers()\n each(options.headers, function (headerValue, headerName) {\n headers.append(headerName, headerValue)\n })\n\n if (contentType) {\n headers.append('Content-Type', contentType)\n }\n\n const url = options.url\n let aborter: { signal: any; timeout: ReturnType<typeof setTimeout> } | null = null\n\n if (AbortController) {\n const controller = new AbortController()\n aborter = {\n signal: controller.signal,\n timeout: setTimeout(() => controller.abort(), options.timeout),\n }\n }\n\n fetch!(url, {\n method: options?.method || 'GET',\n headers,\n // if body is greater than 64kb, then fetch with keepalive will error\n // see 8:10:5 at https://fetch.spec.whatwg.org/#http-network-or-cache-fetch,\n // but we do want to set keepalive sometimes as it can help with success\n // when e.g. a page is being closed\n // so let's get the best of both worlds and only set keepalive for POST requests\n // where the body is less than 64kb\n // NB this is fetch keepalive and not http keepalive\n keepalive: options.method === 'POST' && (estimatedSize || 0) < KEEP_ALIVE_THRESHOLD,\n body,\n signal: aborter?.signal,\n ...options.fetchOptions,\n })\n .then((response) => {\n return response.text().then((responseText) => {\n const res: RequestResponse = {\n statusCode: response.status,\n text: responseText,\n }\n\n if (response.status === 200) {\n try {\n res.json = JSON.parse(responseText)\n } catch (e) {\n logger.error(e)\n }\n }\n\n options.callback?.(res)\n })\n })\n .catch((error) => {\n logger.error(error)\n options.callback?.({ statusCode: 0, text: error })\n })\n .finally(() => (aborter ? clearTimeout(aborter.timeout) : null))\n\n return\n}\n\nconst _sendBeacon = (options: RequestWithOptions) => {\n // beacon documentation https://w3c.github.io/beacon/\n // beacons format the message and use the type property\n\n const url = extendURLParams(options.url, {\n beacon: '1',\n })\n\n try {\n const { contentType, body } = encodePostData(options) ?? {}\n // sendBeacon requires a blob so we convert it\n const sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body\n navigator!.sendBeacon!(url, sendBeaconBody)\n } catch {\n // send beacon is a best-effort, fire-and-forget mechanism on page unload,\n // we don't want to throw errors here\n }\n}\n\nconst AVAILABLE_TRANSPORTS: {\n transport: RequestWithOptions['transport']\n method: (options: RequestWithOptions) => void\n}[] = []\n\n// We add the transports in order of preference\nif (fetch) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'fetch',\n method: _fetch,\n })\n}\n\nif (XMLHttpRequest) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'XHR',\n method: xhr,\n })\n}\n\nif (navigator?.sendBeacon) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'sendBeacon',\n method: _sendBeacon,\n })\n}\n\n// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.\nexport const request = (_options: RequestWithOptions) => {\n // Clone the options so we don't modify the original object\n const options = { ..._options }\n options.timeout = options.timeout || 60000\n\n options.url = extendURLParams(options.url, {\n _: new Date().getTime().toString(),\n ver: Config.LIB_VERSION,\n compression: options.compression,\n })\n\n const transport = options.transport ?? 'fetch'\n\n const availableTransports = AVAILABLE_TRANSPORTS.filter(\n (t) => !options.disableTransport || !t.transport || !options.disableTransport.includes(t.transport)\n )\n\n const transportMethod =\n find(availableTransports, (t) => t.transport === transport)?.method ?? availableTransports[0].method\n\n if (!transportMethod) {\n throw new Error('No available transport method')\n }\n\n transportMethod(options)\n}\n","export const isValidRegex = function (str: string): boolean {\n try {\n new RegExp(str)\n } catch {\n return false\n }\n return true\n}\n\nexport const isMatchingRegex = function (value: string, pattern: string): boolean {\n if (!isValidRegex(pattern)) return false\n\n try {\n return new RegExp(pattern).test(value)\n } catch {\n return false\n }\n}\n","import { jsonStringify } from '../request'\nimport type { Properties, PropertyMatchType } from '../types'\nimport { isMatchingRegex } from './regex-utils'\n\nexport function getPersonPropertiesHash(\n distinct_id: string,\n userPropertiesToSet?: Properties,\n userPropertiesToSetOnce?: Properties\n): string {\n return jsonStringify({ distinct_id, userPropertiesToSet, userPropertiesToSetOnce })\n}\n\nexport const propertyComparisons: Record<PropertyMatchType, (targets: string[], values: string[]) => boolean> = {\n exact: (targets, values) => values.some((value) => targets.some((target) => value === target)),\n is_not: (targets, values) => values.every((value) => targets.every((target) => value !== target)),\n regex: (targets, values) => values.some((value) => targets.some((target) => isMatchingRegex(value, target))),\n not_regex: (targets, values) => values.every((value) => targets.every((target) => !isMatchingRegex(value, target))),\n icontains: (targets, values) =>\n values.map(toLowerCase).some((value) => targets.map(toLowerCase).some((target) => value.includes(target))),\n not_icontains: (targets, values) =>\n values.map(toLowerCase).every((value) => targets.map(toLowerCase).every((target) => !value.includes(target))),\n}\n\nconst toLowerCase = (v: string): string => v.toLowerCase()\n","import { PostHog } from '../../posthog-core'\nimport { createLogger } from '../../utils/logger'\n\nconst logger = createLogger('[Stylesheet Loader]')\n\nexport const prepareStylesheet = (document: Document, innerText: string, posthog?: PostHog) => {\n // Forcing the existence of `document` requires this function to be called in a browser environment\n let stylesheet: HTMLStyleElement | null = document.createElement('style')\n stylesheet.innerText = innerText\n\n if (posthog?.config?.prepare_external_dependency_stylesheet) {\n stylesheet = posthog.config.prepare_external_dependency_stylesheet(stylesheet)\n }\n\n if (!stylesheet) {\n logger.error('prepare_external_dependency_stylesheet returned null')\n return null\n }\n\n return stylesheet\n}\n","import { VNode, cloneElement, createContext } from 'preact'\nimport { PostHog } from '../../posthog-core'\nimport {\n MultipleSurveyQuestion,\n Survey,\n SurveyAppearance,\n SurveyEventName,\n SurveyEventProperties,\n SurveyPosition,\n SurveyQuestion,\n SurveySchedule,\n SurveyType,\n SurveyWidgetType,\n} from '../../posthog-surveys-types'\nimport { document as _document, window as _window, userAgent } from '../../utils/globals'\nimport {\n getSurveyInteractionProperty,\n getSurveySeenKey,\n SURVEY_LOGGER as logger,\n setSurveySeenOnLocalStorage,\n SURVEY_IN_PROGRESS_PREFIX,\n} from '../../utils/survey-utils'\nimport { isArray, isNullish } from '@posthog/core'\n\nimport { detectDeviceType } from '../../utils/user-agent-utils'\nimport { propertyComparisons } from '../../utils/property-utils'\nimport { PropertyMatchType } from '../../types'\nimport { prepareStylesheet } from '../utils/stylesheet-loader'\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window & typeof globalThis\nconst document = _document as Document\nimport surveyStyles from './survey.css'\nimport { useContext } from 'preact/hooks'\n\nexport function getFontFamily(fontFamily?: string): string {\n if (fontFamily === 'inherit') {\n return 'inherit'\n }\n\n const defaultFontStack =\n 'BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"'\n return fontFamily ? `${fontFamily}, ${defaultFontStack}` : `-apple-system, ${defaultFontStack}`\n}\n\nexport function getSurveyResponseKey(questionId: string) {\n return `$survey_response_${questionId}`\n}\n\nconst BLACK_TEXT_COLOR = '#020617' // Maps out to text-slate-950 from tailwind colors. Intended for text use outside interactive elements like buttons\n\n// Keep in sync with defaultSurveyAppearance on the main app\nexport const defaultSurveyAppearance = {\n fontFamily: 'inherit',\n backgroundColor: '#eeeded',\n submitButtonColor: 'black',\n submitButtonTextColor: 'white',\n ratingButtonColor: 'white',\n ratingButtonActiveColor: 'black',\n borderColor: '#c9c6c6',\n placeholder: 'Start typing...',\n whiteLabel: false,\n displayThankYouMessage: true,\n thankYouMessageHeader: 'Thank you for your feedback!',\n position: SurveyPosition.Right,\n widgetType: SurveyWidgetType.Tab,\n widgetLabel: 'Feedback',\n widgetColor: 'black',\n zIndex: '2147483647',\n disabledButtonOpacity: '0.6',\n maxWidth: '300px',\n textSubtleColor: '#939393',\n boxPadding: '20px 24px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n borderRadius: '10px',\n shuffleQuestions: false,\n surveyPopupDelaySeconds: undefined,\n // Not customizable atm\n outlineColor: 'rgba(59, 130, 246, 0.8)',\n inputBackground: 'white',\n inputTextColor: BLACK_TEXT_COLOR,\n scrollbarThumbColor: 'var(--ph-survey-border-color)',\n scrollbarTrackColor: 'var(--ph-survey-background-color)',\n} as const\n\nexport const addSurveyCSSVariablesToElement = (\n element: HTMLElement,\n type: SurveyType,\n appearance?: SurveyAppearance | null\n) => {\n const effectiveAppearance = { ...defaultSurveyAppearance, ...appearance }\n const hostStyle = element.style\n\n const surveyHasBottomBorder =\n ![SurveyPosition.Center, SurveyPosition.Left, SurveyPosition.Right].includes(effectiveAppearance.position) ||\n (type === SurveyType.Widget && appearance?.widgetType === SurveyWidgetType.Tab)\n\n hostStyle.setProperty('--ph-survey-font-family', getFontFamily(effectiveAppearance.fontFamily))\n hostStyle.setProperty('--ph-survey-box-padding', effectiveAppearance.boxPadding)\n hostStyle.setProperty('--ph-survey-max-width', effectiveAppearance.maxWidth)\n hostStyle.setProperty('--ph-survey-z-index', effectiveAppearance.zIndex)\n hostStyle.setProperty('--ph-survey-border-color', effectiveAppearance.borderColor)\n // Non-bottom surveys or tab surveys have the border bottom\n if (surveyHasBottomBorder) {\n hostStyle.setProperty('--ph-survey-border-radius', effectiveAppearance.borderRadius)\n hostStyle.setProperty('--ph-survey-border-bottom', '1.5px solid var(--ph-survey-border-color)')\n } else {\n hostStyle.setProperty('--ph-survey-border-bottom', 'none')\n hostStyle.setProperty(\n '--ph-survey-border-radius',\n `${effectiveAppearance.borderRadius} ${effectiveAppearance.borderRadius} 0 0`\n )\n }\n hostStyle.setProperty('--ph-survey-background-color', effectiveAppearance.backgroundColor)\n hostStyle.setProperty('--ph-survey-box-shadow', effectiveAppearance.boxShadow)\n hostStyle.setProperty('--ph-survey-disabled-button-opacity', effectiveAppearance.disabledButtonOpacity)\n hostStyle.setProperty('--ph-survey-submit-button-color', effectiveAppearance.submitButtonColor)\n hostStyle.setProperty(\n '--ph-survey-submit-button-text-color',\n appearance?.submitButtonTextColor || getContrastingTextColor(effectiveAppearance.submitButtonColor)\n )\n hostStyle.setProperty('--ph-survey-rating-bg-color', effectiveAppearance.ratingButtonColor)\n hostStyle.setProperty(\n '--ph-survey-rating-text-color',\n getContrastingTextColor(effectiveAppearance.ratingButtonColor)\n )\n hostStyle.setProperty('--ph-survey-rating-active-bg-color', effectiveAppearance.ratingButtonActiveColor)\n hostStyle.setProperty(\n '--ph-survey-rating-active-text-color',\n getContrastingTextColor(effectiveAppearance.ratingButtonActiveColor)\n )\n hostStyle.setProperty(\n '--ph-survey-text-primary-color',\n getContrastingTextColor(effectiveAppearance.backgroundColor)\n )\n hostStyle.setProperty('--ph-survey-text-subtle-color', effectiveAppearance.textSubtleColor)\n hostStyle.setProperty('--ph-widget-color', effectiveAppearance.widgetColor)\n hostStyle.setProperty('--ph-widget-text-color', getContrastingTextColor(effectiveAppearance.widgetColor))\n hostStyle.setProperty('--ph-widget-z-index', effectiveAppearance.zIndex)\n\n // Adjust input/choice background slightly if main background is white\n if (effectiveAppearance.backgroundColor === 'white') {\n hostStyle.setProperty('--ph-survey-input-background', '#f8f8f8')\n }\n\n hostStyle.setProperty('--ph-survey-input-background', effectiveAppearance.inputBackground)\n hostStyle.setProperty('--ph-survey-input-text-color', getContrastingTextColor(effectiveAppearance.inputBackground))\n hostStyle.setProperty('--ph-survey-scrollbar-thumb-color', effectiveAppearance.scrollbarThumbColor)\n hostStyle.setProperty('--ph-survey-scrollbar-track-color', effectiveAppearance.scrollbarTrackColor)\n hostStyle.setProperty('--ph-survey-outline-color', effectiveAppearance.outlineColor)\n}\n\nfunction nameToHex(name: string) {\n return {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n 'indianred ': '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n }[name.toLowerCase()]\n}\n\nfunction hex2rgb(c: string) {\n if (c[0] === '#') {\n const hexColor = c.replace(/^#/, '')\n const r = parseInt(hexColor.slice(0, 2), 16)\n const g = parseInt(hexColor.slice(2, 4), 16)\n const b = parseInt(hexColor.slice(4, 6), 16)\n return 'rgb(' + r + ',' + g + ',' + b + ')'\n }\n return 'rgb(255, 255, 255)'\n}\n\nfunction getContrastingTextColor(color: string = defaultSurveyAppearance.backgroundColor) {\n let rgb\n if (color[0] === '#') {\n rgb = hex2rgb(color)\n }\n if (color.startsWith('rgb')) {\n rgb = color\n }\n // otherwise it's a color name\n const nameColorToHex = nameToHex(color)\n if (nameColorToHex) {\n rgb = hex2rgb(nameColorToHex)\n }\n if (!rgb) {\n return BLACK_TEXT_COLOR\n }\n const colorMatch = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/)\n if (colorMatch) {\n const r = parseInt(colorMatch[1])\n const g = parseInt(colorMatch[2])\n const b = parseInt(colorMatch[3])\n const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))\n return hsp > 127.5 ? BLACK_TEXT_COLOR : 'white'\n }\n return BLACK_TEXT_COLOR\n}\n\nexport function getSurveyStylesheet(posthog?: PostHog) {\n const stylesheet = prepareStylesheet(document, typeof surveyStyles === 'string' ? surveyStyles : '', posthog)\n stylesheet?.setAttribute('data-ph-survey-style', 'true')\n return stylesheet\n}\n\nexport const retrieveSurveyShadow = (\n survey: Pick<Survey, 'id' | 'appearance' | 'type'>,\n posthog?: PostHog,\n element?: Element\n) => {\n const widgetClassName = getSurveyContainerClass(survey)\n const existingDiv = document.querySelector(`.${widgetClassName}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n // If it doesn't exist, create it\n const div = document.createElement('div')\n addSurveyCSSVariablesToElement(div, survey.type, survey.appearance)\n div.className = widgetClassName\n const shadow = div.attachShadow({ mode: 'open' })\n const stylesheet = getSurveyStylesheet(posthog)\n if (stylesheet) {\n const existingStylesheet = shadow.querySelector('style')\n if (existingStylesheet) {\n shadow.removeChild(existingStylesheet)\n }\n shadow.appendChild(stylesheet)\n }\n ;(element ? element : document.body).appendChild(div)\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\ninterface SendSurveyEventArgs {\n responses: Record<string, string | number | string[] | null>\n survey: Survey\n surveySubmissionId: string\n isSurveyCompleted: boolean\n posthog?: PostHog\n}\n\nconst getSurveyResponseValue = (responses: Record<string, string | number | string[] | null>, questionId?: string) => {\n if (!questionId) {\n return null\n }\n const response = responses[getSurveyResponseKey(questionId)]\n if (isArray(response)) {\n return [...response]\n }\n return response\n}\n\nexport const sendSurveyEvent = ({\n responses,\n survey,\n surveySubmissionId,\n posthog,\n isSurveyCompleted,\n}: SendSurveyEventArgs) => {\n if (!posthog) {\n logger.error('[survey sent] event not captured, PostHog instance not found.')\n return\n }\n setSurveySeenOnLocalStorage(survey)\n posthog.capture(SurveyEventName.SENT, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(responses, question.id),\n })),\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: surveySubmissionId,\n [SurveyEventProperties.SURVEY_COMPLETED]: isSurveyCompleted,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...responses,\n $set: {\n [getSurveyInteractionProperty(survey, 'responded')]: true,\n },\n })\n if (isSurveyCompleted) {\n // Only dispatch PHSurveySent if the survey is completed, as that removes the survey from focus\n window.dispatchEvent(new CustomEvent('PHSurveySent', { detail: { surveyId: survey.id } }))\n clearInProgressSurveyState(survey)\n }\n}\n\nexport const dismissedSurveyEvent = (survey: Survey, posthog?: PostHog, readOnly?: boolean) => {\n if (!posthog) {\n logger.error('[survey dismissed] event not captured, PostHog instance not found.')\n return\n }\n if (readOnly) {\n return\n }\n\n const inProgressSurvey = getInProgressSurveyState(survey)\n posthog.capture(SurveyEventName.DISMISSED, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n // check if the survey is partially completed\n [SurveyEventProperties.SURVEY_PARTIALLY_COMPLETED]:\n Object.values(inProgressSurvey?.responses || {}).filter((resp) => !isNullish(resp)).length > 0,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n ...inProgressSurvey?.responses,\n [SurveyEventProperties.SURVEY_SUBMISSION_ID]: inProgressSurvey?.surveySubmissionId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: survey.questions.map((question) => ({\n id: question.id,\n question: question.question,\n response: getSurveyResponseValue(inProgressSurvey?.responses || {}, question.id),\n })),\n $set: {\n [getSurveyInteractionProperty(survey, 'dismissed')]: true,\n },\n })\n // Clear in-progress state on dismissal\n clearInProgressSurveyState(survey)\n setSurveySeenOnLocalStorage(survey)\n window.dispatchEvent(new CustomEvent('PHSurveyClosed', { detail: { surveyId: survey.id } }))\n}\n\n// Use the Fisher-yates algorithm to shuffle this array\n// https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\nexport const shuffle = (array: any[]) => {\n return array\n .map((a) => ({ sort: Math.floor(Math.random() * 10), value: a }))\n .sort((a, b) => a.sort - b.sort)\n .map((a) => a.value)\n}\n\nconst reverseIfUnshuffled = (unshuffled: any[], shuffled: any[]): any[] => {\n if (unshuffled.length === shuffled.length && unshuffled.every((val, index) => val === shuffled[index])) {\n return shuffled.reverse()\n }\n\n return shuffled\n}\n\nexport const getDisplayOrderChoices = (question: MultipleSurveyQuestion): string[] => {\n if (!question.shuffleOptions) {\n return question.choices\n }\n\n const displayOrderChoices = question.choices\n let openEndedChoice = ''\n if (question.hasOpenChoice) {\n // if the question has an open-ended choice, its always the last element in the choices array.\n openEndedChoice = displayOrderChoices.pop()!\n }\n\n const shuffledOptions = reverseIfUnshuffled(displayOrderChoices, shuffle(displayOrderChoices))\n\n if (question.hasOpenChoice) {\n question.choices.push(openEndedChoice)\n shuffledOptions.push(openEndedChoice)\n }\n\n return shuffledOptions\n}\n\nexport const getDisplayOrderQuestions = (survey: Survey): SurveyQuestion[] => {\n if (!survey.appearance || !survey.appearance.shuffleQuestions || survey.enable_partial_responses) {\n return survey.questions\n }\n\n return reverseIfUnshuffled(survey.questions, shuffle(survey.questions))\n}\n\nexport const hasEvents = (survey: Pick<Survey, 'conditions'>): boolean => {\n return survey.conditions?.events?.values?.length != undefined && survey.conditions?.events?.values?.length > 0\n}\n\nexport const canActivateRepeatedly = (\n survey: Pick<Survey, 'schedule' | 'conditions' | 'id' | 'current_iteration'>\n): boolean => {\n return (\n !!(survey.conditions?.events?.repeatedActivation && hasEvents(survey)) ||\n survey.schedule === SurveySchedule.Always ||\n isSurveyInProgress(survey)\n )\n}\n\n/**\n * getSurveySeen checks local storage for the surveySeen Key a\n * and overrides this value if the survey can be repeatedly activated by its events.\n * @param survey\n */\nexport const getSurveySeen = (survey: Survey): boolean => {\n const surveySeen = localStorage.getItem(getSurveySeenKey(survey))\n if (surveySeen) {\n // if a survey has already been seen,\n // we will override it with the event repeated activation value.\n return !canActivateRepeatedly(survey)\n }\n\n return false\n}\n\nconst LAST_SEEN_SURVEY_DATE_KEY = 'lastSeenSurveyDate'\n\nexport const hasWaitPeriodPassed = (waitPeriodInDays: number | undefined): boolean => {\n const lastSeenSurveyDate = localStorage.getItem(LAST_SEEN_SURVEY_DATE_KEY)\n if (!waitPeriodInDays || !lastSeenSurveyDate) {\n return true\n }\n\n const today = new Date()\n const diff = Math.abs(today.getTime() - new Date(lastSeenSurveyDate).getTime())\n const diffDaysFromToday = Math.ceil(diff / (1000 * 3600 * 24))\n return diffDaysFromToday > waitPeriodInDays\n}\n\ninterface SurveyContextProps {\n isPreviewMode: boolean\n previewPageIndex: number | undefined\n onPopupSurveyDismissed: () => void\n isPopup: boolean\n onPreviewSubmit: (res: string | string[] | number | null) => void\n surveySubmissionId: string\n}\n\nexport const SurveyContext = createContext<SurveyContextProps>({\n isPreviewMode: false,\n previewPageIndex: 0,\n onPopupSurveyDismissed: () => {},\n isPopup: true,\n onPreviewSubmit: () => {},\n surveySubmissionId: '',\n})\n\nexport const useSurveyContext = () => {\n return useContext(SurveyContext)\n}\n\ninterface RenderProps {\n component: VNode<{ className: string }>\n children: string\n renderAsHtml?: boolean\n style?: React.CSSProperties\n}\n\nexport const renderChildrenAsTextOrHtml = ({ component, children, renderAsHtml, style }: RenderProps) => {\n return renderAsHtml\n ? cloneElement(component, {\n dangerouslySetInnerHTML: { __html: children },\n style,\n })\n : cloneElement(component, {\n children,\n style,\n })\n}\n\nfunction defaultMatchType(matchType?: PropertyMatchType): PropertyMatchType {\n return matchType ?? 'icontains'\n}\n\n// use urlMatchType to validate url condition, fallback to contains for backwards compatibility\nexport function doesSurveyUrlMatch(survey: Pick<Survey, 'conditions'>): boolean {\n if (!survey.conditions?.url) {\n return true\n }\n // if we dont know the url, assume it is not a match\n const href = window?.location?.href\n if (!href) {\n return false\n }\n const targets = [survey.conditions.url]\n const matchType = defaultMatchType(survey.conditions?.urlMatchType)\n return propertyComparisons[matchType](targets, [href])\n}\n\nexport function doesSurveyDeviceTypesMatch(survey: Survey): boolean {\n if (!survey.conditions?.deviceTypes || survey.conditions?.deviceTypes.length === 0) {\n return true\n }\n // if we dont know the device type, assume it is not a match\n if (!userAgent) {\n return false\n }\n\n const deviceType = detectDeviceType(userAgent)\n return propertyComparisons[defaultMatchType(survey.conditions?.deviceTypesMatchType)](\n survey.conditions.deviceTypes,\n [deviceType]\n )\n}\n\nexport function doesSurveyMatchSelector(survey: Survey): boolean {\n if (!survey.conditions?.selector) {\n return true\n }\n return !!document?.querySelector(survey.conditions.selector)\n}\n\ninterface InProgressSurveyState {\n surveySubmissionId: string\n lastQuestionIndex: number\n responses: Record<string, string | number | string[] | null>\n}\n\nconst getInProgressSurveyStateKey = (survey: Pick<Survey, 'id' | 'current_iteration'>): string => {\n let key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}`\n if (survey.current_iteration && survey.current_iteration > 0) {\n key = `${SURVEY_IN_PROGRESS_PREFIX}${survey.id}_${survey.current_iteration}`\n }\n return key\n}\n\nexport const setInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>,\n state: InProgressSurveyState\n): void => {\n try {\n localStorage.setItem(getInProgressSurveyStateKey(survey), JSON.stringify(state))\n } catch (e) {\n logger.error('Error setting in-progress survey state in localStorage', e)\n }\n}\n\nexport const getInProgressSurveyState = (\n survey: Pick<Survey, 'id' | 'current_iteration'>\n): InProgressSurveyState | null => {\n try {\n const stateString = localStorage.getItem(getInProgressSurveyStateKey(survey))\n if (stateString) {\n return JSON.parse(stateString) as InProgressSurveyState\n }\n } catch (e) {\n logger.error('Error getting in-progress survey state from localStorage', e)\n }\n return null\n}\n\nexport const isSurveyInProgress = (survey: Pick<Survey, 'id' | 'current_iteration'>): boolean => {\n const state = getInProgressSurveyState(survey)\n return !isNullish(state?.surveySubmissionId)\n}\n\nexport const clearInProgressSurveyState = (survey: Pick<Survey, 'id' | 'current_iteration'>): void => {\n try {\n localStorage.removeItem(getInProgressSurveyStateKey(survey))\n } catch (e) {\n logger.error('Error clearing in-progress survey state from localStorage', e)\n }\n}\n\nexport function getSurveyContainerClass(survey: Pick<Survey, 'id'>, asSelector = false): string {\n const className = `PostHogSurvey-${survey.id}`\n return asSelector ? `.${className}` : className\n}\n","export const satisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M626-533q22.5 0 38.25-15.75T680-587q0-22.5-15.75-38.25T626-641q-22.5 0-38.25 15.75T572-587q0 22.5 15.75 38.25T626-533Zm-292 0q22.5 0 38.25-15.75T388-587q0-22.5-15.75-38.25T334-641q-22.5 0-38.25 15.75T280-587q0 22.5 15.75 38.25T334-533Zm146 272q66 0 121.5-35.5T682-393h-52q-23 40-63 61.5T480.5-310q-46.5 0-87-21T331-393h-53q26 61 81 96.5T480-261Zm0 181q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const neutralEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M626-533q22.5 0 38.25-15.75T680-587q0-22.5-15.75-38.25T626-641q-22.5 0-38.25 15.75T572-587q0 22.5 15.75 38.25T626-533Zm-292 0q22.5 0 38.25-15.75T388-587q0-22.5-15.75-38.25T334-641q-22.5 0-38.25 15.75T280-587q0 22.5 15.75 38.25T334-533Zm20 194h253v-49H354v49ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const dissatisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M626-533q22.5 0 38.25-15.75T680-587q0-22.5-15.75-38.25T626-641q-22.5 0-38.25 15.75T572-587q0 22.5 15.75 38.25T626-533Zm-292 0q22.5 0 38.25-15.75T388-587q0-22.5-15.75-38.25T334-641q-22.5 0-38.25 15.75T280-587q0 22.5 15.75 38.25T334-533Zm146.174 116Q413-417 358.5-379.5T278-280h53q22-42 62.173-65t87.5-23Q528-368 567.5-344.5T630-280h52q-25-63-79.826-100-54.826-37-122-37ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const veryDissatisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M480-417q-67 0-121.5 37.5T278-280h404q-25-63-80-100t-122-37Zm-183-72 50-45 45 45 31-36-45-45 45-45-31-36-45 45-50-45-31 36 45 45-45 45 31 36Zm272 0 44-45 51 45 31-36-45-45 45-45-31-36-51 45-44-45-31 36 44 45-44 45 31 36ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142 0 241-99t99-241q0-142-99-241t-241-99q-142 0-241 99t-99 241q0 142 99 241t241 99Z\" />\n </svg>\n)\nexport const verySatisfiedEmoji = (\n <svg className=\"emoji-svg\" xmlns=\"http://www.w3.org/2000/svg\" height=\"48\" viewBox=\"0 -960 960 960\" width=\"48\">\n <path d=\"M479.504-261Q537-261 585.5-287q48.5-26 78.5-72.4 6-11.6-.75-22.6-6.75-11-20.25-11H316.918Q303-393 296.5-382t-.5 22.6q30 46.4 78.5 72.4 48.5 26 105.004 26ZM347-578l27 27q7.636 8 17.818 8Q402-543 410-551q8-8 8-18t-8-18l-42-42q-8.8-9-20.9-9-12.1 0-21.1 9l-42 42q-8 7.636-8 17.818Q276-559 284-551q8 8 18 8t18-8l27-27Zm267 0 27 27q7.714 8 18 8t18-8q8-7.636 8-17.818Q685-579 677-587l-42-42q-8.8-9-20.9-9-12.1 0-21.1 9l-42 42q-8 7.714-8 18t8 18q7.636 8 17.818 8Q579-543 587-551l27-27ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 340q142.375 0 241.188-98.812Q820-337.625 820-480t-98.812-241.188Q622.375-820 480-820t-241.188 98.812Q140-622.375 140-480t98.812 241.188Q337.625-140 480-140Z\" />\n </svg>\n)\nexport const cancelSVG = (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-labelledby=\"close-survey-title\"\n >\n <title id=\"close-survey-title\">Close survey</title>\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.164752 0.164752C0.384422 -0.0549175 0.740578 -0.0549175 0.960248 0.164752L6 5.20451L11.0398 0.164752C11.2594 -0.0549175 11.6156 -0.0549175 11.8352 0.164752C12.0549 0.384422 12.0549 0.740578 11.8352 0.960248L6.79549 6L11.8352 11.0398C12.0549 11.2594 12.0549 11.6156 11.8352 11.8352C11.6156 12.0549 11.2594 12.0549 11.0398 11.8352L6 6.79549L0.960248 11.8352C0.740578 12.0549 0.384422 12.0549 0.164752 11.8352C-0.0549175 11.6156 -0.0549175 11.2594 0.164752 11.0398L5.20451 6L0.164752 0.960248C-0.0549175 0.740578 -0.0549175 0.384422 0.164752 0.164752Z\"\n fill=\"black\"\n />\n </svg>\n)\nexport const IconPosthogLogo = (\n <svg width=\"77\" height=\"14\" viewBox=\"0 0 77 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_2415_6911)\">\n <mask\n id=\"mask0_2415_6911\"\n style={{ maskType: 'luminance' }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"77\"\n height=\"14\"\n >\n <path d=\"M0.5 0H76.5V14H0.5V0Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_2415_6911)\">\n <path\n d=\"M5.77226 8.02931C5.59388 8.37329 5.08474 8.37329 4.90634 8.02931L4.4797 7.20672C4.41155 7.07535 4.41155 6.9207 4.4797 6.78933L4.90634 5.96669C5.08474 5.62276 5.59388 5.62276 5.77226 5.96669L6.19893 6.78933C6.26709 6.9207 6.26709 7.07535 6.19893 7.20672L5.77226 8.02931ZM5.77226 12.6946C5.59388 13.0386 5.08474 13.0386 4.90634 12.6946L4.4797 11.872C4.41155 11.7406 4.41155 11.586 4.4797 11.4546L4.90634 10.632C5.08474 10.288 5.59388 10.288 5.77226 10.632L6.19893 11.4546C6.26709 11.586 6.26709 11.7406 6.19893 11.872L5.77226 12.6946Z\"\n fill=\"#1D4AFF\"\n />\n <path\n d=\"M0.5 10.9238C0.5 10.508 1.02142 10.2998 1.32637 10.5938L3.54508 12.7327C3.85003 13.0267 3.63405 13.5294 3.20279 13.5294H0.984076C0.716728 13.5294 0.5 13.3205 0.5 13.0627V10.9238ZM0.5 8.67083C0.5 8.79459 0.551001 8.91331 0.641783 9.00081L5.19753 13.3927C5.28831 13.4802 5.41144 13.5294 5.53982 13.5294H8.0421C8.47337 13.5294 8.68936 13.0267 8.3844 12.7327L1.32637 5.92856C1.02142 5.63456 0.5 5.84278 0.5 6.25854V8.67083ZM0.5 4.00556C0.5 4.12932 0.551001 4.24802 0.641783 4.33554L10.0368 13.3927C10.1276 13.4802 10.2508 13.5294 10.3791 13.5294H12.8814C13.3127 13.5294 13.5287 13.0267 13.2237 12.7327L1.32637 1.26329C1.02142 0.969312 0.5 1.17752 0.5 1.59327V4.00556ZM5.33931 4.00556C5.33931 4.12932 5.39033 4.24802 5.4811 4.33554L14.1916 12.7327C14.4965 13.0267 15.0179 12.8185 15.0179 12.4028V9.99047C15.0179 9.86671 14.9669 9.74799 14.8762 9.66049L6.16568 1.26329C5.86071 0.969307 5.33931 1.17752 5.33931 1.59327V4.00556ZM11.005 1.26329C10.7 0.969307 10.1786 1.17752 10.1786 1.59327V4.00556C10.1786 4.12932 10.2296 4.24802 10.3204 4.33554L14.1916 8.06748C14.4965 8.36148 15.0179 8.15325 15.0179 7.7375V5.3252C15.0179 5.20144 14.9669 5.08272 14.8762 4.99522L11.005 1.26329Z\"\n fill=\"#F9BD2B\"\n />\n <path\n d=\"M21.0852 10.981L16.5288 6.58843C16.2238 6.29443 15.7024 6.50266 15.7024 6.91841V13.0627C15.7024 13.3205 15.9191 13.5294 16.1865 13.5294H23.2446C23.5119 13.5294 23.7287 13.3205 23.7287 13.0627V12.5032C23.7287 12.2455 23.511 12.0396 23.2459 12.0063C22.4323 11.9042 21.6713 11.546 21.0852 10.981ZM18.0252 12.0365C17.5978 12.0365 17.251 11.7021 17.251 11.2901C17.251 10.878 17.5978 10.5436 18.0252 10.5436C18.4527 10.5436 18.7996 10.878 18.7996 11.2901C18.7996 11.7021 18.4527 12.0365 18.0252 12.0365Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0.5 13.0627C0.5 13.3205 0.716728 13.5294 0.984076 13.5294H3.20279C3.63405 13.5294 3.85003 13.0267 3.54508 12.7327L1.32637 10.5938C1.02142 10.2998 0.5 10.508 0.5 10.9238V13.0627ZM5.33931 5.13191L1.32637 1.26329C1.02142 0.969306 0.5 1.17752 0.5 1.59327V4.00556C0.5 4.12932 0.551001 4.24802 0.641783 4.33554L5.33931 8.86412V5.13191ZM1.32637 5.92855C1.02142 5.63455 0.5 5.84278 0.5 6.25853V8.67083C0.5 8.79459 0.551001 8.91331 0.641783 9.00081L5.33931 13.5294V9.79717L1.32637 5.92855Z\"\n fill=\"#1D4AFF\"\n />\n <path\n d=\"M10.1787 5.3252C10.1787 5.20144 10.1277 5.08272 10.0369 4.99522L6.16572 1.26329C5.8608 0.969306 5.33936 1.17752 5.33936 1.59327V4.00556C5.33936 4.12932 5.39037 4.24802 5.48114 4.33554L10.1787 8.86412V5.3252ZM5.33936 13.5294H8.04214C8.47341 13.5294 8.6894 13.0267 8.38443 12.7327L5.33936 9.79717V13.5294ZM5.33936 5.13191V8.67083C5.33936 8.79459 5.39037 8.91331 5.48114 9.00081L10.1787 13.5294V9.99047C10.1787 9.86671 10.1277 9.74803 10.0369 9.66049L5.33936 5.13191Z\"\n fill=\"#F54E00\"\n />\n <path\n d=\"M29.375 11.6667H31.3636V8.48772H33.0249C34.8499 8.48772 36.0204 7.4443 36.0204 5.83052C36.0204 4.21681 34.8499 3.17334 33.0249 3.17334H29.375V11.6667ZM31.3636 6.84972V4.81136H32.8236C33.5787 4.81136 34.0318 5.19958 34.0318 5.83052C34.0318 6.4615 33.5787 6.84972 32.8236 6.84972H31.3636ZM39.618 11.7637C41.5563 11.7637 42.9659 10.429 42.9659 8.60905C42.9659 6.78905 41.5563 5.45438 39.618 5.45438C37.6546 5.45438 36.2701 6.78905 36.2701 8.60905C36.2701 10.429 37.6546 11.7637 39.618 11.7637ZM38.1077 8.60905C38.1077 7.63838 38.7118 6.97105 39.618 6.97105C40.5116 6.97105 41.1157 7.63838 41.1157 8.60905C41.1157 9.57972 40.5116 10.2471 39.618 10.2471C38.7118 10.2471 38.1077 9.57972 38.1077 8.60905ZM46.1482 11.7637C47.6333 11.7637 48.6402 10.8658 48.6402 9.81025C48.6402 7.33505 45.2294 8.13585 45.2294 7.16518C45.2294 6.8983 45.5189 6.72843 45.9342 6.72843C46.3622 6.72843 46.8782 6.98318 47.0418 7.54132L48.527 6.94678C48.2375 6.06105 47.1677 5.45438 45.8713 5.45438C44.4743 5.45438 43.6058 6.25518 43.6058 7.21372C43.6058 9.53118 46.9663 8.88812 46.9663 9.84665C46.9663 10.1864 46.6391 10.417 46.1482 10.417C45.4434 10.417 44.9525 9.94376 44.8015 9.3735L43.3164 9.93158C43.6436 10.8537 44.6001 11.7637 46.1482 11.7637ZM53.4241 11.606L53.2982 10.0651C53.0843 10.1743 52.8074 10.2106 52.5808 10.2106C52.1278 10.2106 51.8257 9.89523 51.8257 9.34918V7.03172H53.3612V5.55145H51.8257V3.78001H49.9755V5.55145H48.9687V7.03172H49.9755V9.57972C49.9755 11.06 51.0202 11.7637 52.3921 11.7637C52.7696 11.7637 53.122 11.7031 53.4241 11.606ZM59.8749 3.17334V6.47358H56.376V3.17334H54.3874V11.6667H56.376V8.11158H59.8749V11.6667H61.8761V3.17334H59.8749ZM66.2899 11.7637C68.2281 11.7637 69.6378 10.429 69.6378 8.60905C69.6378 6.78905 68.2281 5.45438 66.2899 5.45438C64.3265 5.45438 62.942 6.78905 62.942 8.60905C62.942 10.429 64.3265 11.7637 66.2899 11.7637ZM64.7796 8.60905C64.7796 7.63838 65.3837 6.97105 66.2899 6.97105C67.1835 6.97105 67.7876 7.63838 67.7876 8.60905C67.7876 9.57972 67.1835 10.2471 66.2899 10.2471C65.3837 10.2471 64.7796 9.57972 64.7796 8.60905ZM73.2088 11.4725C73.901 11.4725 74.5177 11.242 74.845 10.8416V11.424C74.845 12.1034 74.2786 12.5767 73.4102 12.5767C72.7935 12.5767 72.2523 12.2854 72.1642 11.788L70.4776 12.0428C70.7042 13.1955 71.925 13.972 73.4102 13.972C75.361 13.972 76.6574 12.8679 76.6574 11.2298V5.55145H74.8324V6.07318C74.4926 5.69705 73.9136 5.45438 73.171 5.45438C71.409 5.45438 70.3014 6.61918 70.3014 8.46345C70.3014 10.3077 71.409 11.4725 73.2088 11.4725ZM72.1012 8.46345C72.1012 7.55345 72.655 6.97105 73.5109 6.97105C74.3793 6.97105 74.9331 7.55345 74.9331 8.46345C74.9331 9.37345 74.3793 9.95585 73.5109 9.95585C72.655 9.95585 72.1012 9.37345 72.1012 8.46345Z\"\n fill=\"currentColor\"\n />\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_2415_6911\">\n <rect width=\"76\" height=\"14\" fill=\"white\" transform=\"translate(0.5)\" />\n </clipPath>\n </defs>\n </svg>\n)\nexport const checkSVG = (\n <svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.30769 10.6923L4.77736 11.2226C4.91801 11.3633 5.10878 11.4423 5.30769 11.4423C5.5066 11.4423 5.69737 11.3633 5.83802 11.2226L5.30769 10.6923ZM15.5303 1.53033C15.8232 1.23744 15.8232 0.762563 15.5303 0.46967C15.2374 0.176777 14.7626 0.176777 14.4697 0.46967L15.5303 1.53033ZM1.53033 5.85429C1.23744 5.56139 0.762563 5.56139 0.46967 5.85429C0.176777 6.14718 0.176777 6.62205 0.46967 6.91495L1.53033 5.85429ZM5.83802 11.2226L15.5303 1.53033L14.4697 0.46967L4.77736 10.162L5.83802 11.2226ZM0.46967 6.91495L4.77736 11.2226L5.83802 10.162L1.53033 5.85429L0.46967 6.91495Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n","import { IconPosthogLogo } from '../icons'\n\nexport function PostHogLogo() {\n return (\n <a href=\"https://posthog.com/surveys\" target=\"_blank\" rel=\"noopener\" className=\"footer-branding\">\n Survey by {IconPosthogLogo}\n </a>\n )\n}\n","import { window } from '../../../utils/globals'\n\nimport { SurveyAppearance } from '../../../posthog-surveys-types'\n\nimport { useContext } from 'preact/hooks'\nimport { SurveyContext } from '../surveys-extension-utils'\nimport { PostHogLogo } from './PostHogLogo'\n\nexport function BottomSection({\n text,\n submitDisabled,\n appearance,\n onSubmit,\n link,\n onPreviewSubmit,\n skipSubmitButton,\n}: {\n text: string\n submitDisabled: boolean\n appearance: SurveyAppearance\n onSubmit: () => void\n link?: string | null\n onPreviewSubmit?: () => void\n skipSubmitButton?: boolean\n}) {\n const { isPreviewMode } = useContext(SurveyContext)\n return (\n <div className=\"bottom-section\">\n {!skipSubmitButton && (\n <button\n className=\"form-submit\"\n disabled={submitDisabled}\n aria-label=\"Submit survey\"\n type=\"button\"\n onClick={() => {\n if (link) {\n window?.open(link)\n }\n if (isPreviewMode) {\n onPreviewSubmit?.()\n } else {\n onSubmit()\n }\n }}\n >\n {text}\n </button>\n )}\n {!appearance.whiteLabel && <PostHogLogo />}\n </div>\n )\n}\n","import { h } from 'preact'\nimport { useContext } from 'preact/hooks'\nimport { SurveyQuestion, SurveyQuestionType } from '../../../posthog-surveys-types'\nimport { cancelSVG } from '../icons'\nimport { SurveyContext, renderChildrenAsTextOrHtml } from '../surveys-extension-utils'\n\nexport function QuestionHeader({\n question,\n forceDisableHtml,\n htmlFor,\n}: {\n question: Pick<SurveyQuestion, 'question' | 'description' | 'descriptionContentType' | 'type'>\n forceDisableHtml: boolean\n htmlFor?: string\n}) {\n const TitleComponent = question.type === SurveyQuestionType.Open ? 'label' : 'h3'\n return (\n <div class=\"question-header\">\n <TitleComponent className=\"survey-question\" htmlFor={htmlFor}>\n {question.question}\n </TitleComponent>\n {question.description &&\n renderChildrenAsTextOrHtml({\n component: h('p', { className: 'survey-question-description' }),\n children: question.description,\n renderAsHtml: !forceDisableHtml && question.descriptionContentType !== 'text',\n })}\n </div>\n )\n}\n\nexport function Cancel({ onClick }: { onClick: () => void }) {\n const { isPreviewMode } = useContext(SurveyContext)\n\n return (\n <button\n className=\"form-cancel\"\n onClick={onClick}\n disabled={isPreviewMode}\n aria-label=\"Close survey\"\n type=\"button\"\n >\n {cancelSVG}\n </button>\n )\n}\n","import { h } from 'preact'\nimport { SurveyAppearance, SurveyQuestionDescriptionContentType } from '../../../posthog-surveys-types'\nimport { renderChildrenAsTextOrHtml } from '../surveys-extension-utils'\nimport { BottomSection } from './BottomSection'\nimport { Cancel } from './QuestionHeader'\n\nimport { useContext, useEffect } from 'preact/hooks'\nimport { SurveyContext } from '../surveys-extension-utils'\nimport { addEventListener } from '../../../utils'\nimport { window as _window } from '../../../utils/globals'\n\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window\n\nexport function ConfirmationMessage({\n header,\n description,\n contentType,\n forceDisableHtml,\n appearance,\n onClose,\n}: {\n header: string\n description: string\n forceDisableHtml: boolean\n contentType?: SurveyQuestionDescriptionContentType\n appearance: SurveyAppearance\n onClose: () => void\n}) {\n const { isPopup } = useContext(SurveyContext)\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === 'Escape') {\n event.preventDefault()\n onClose()\n }\n }\n addEventListener(window, 'keydown', handleKeyDown as EventListener)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [onClose])\n\n return (\n <div className=\"thank-you-message\" role=\"status\" tabIndex={0} aria-atomic=\"true\">\n {isPopup && <Cancel onClick={() => onClose()} />}\n <h3 className=\"thank-you-message-header\">{header}</h3>\n {description &&\n renderChildrenAsTextOrHtml({\n component: h('p', { className: 'thank-you-message-body' }),\n children: description,\n renderAsHtml: !forceDisableHtml && contentType !== 'text',\n })}\n {isPopup && (\n <BottomSection\n text={appearance.thankYouMessageCloseButtonText || 'Close'}\n submitDisabled={false}\n appearance={appearance}\n onSubmit={() => onClose()}\n />\n )}\n </div>\n )\n}\n","import { Fragment } from 'preact'\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport {\n BasicSurveyQuestion,\n LinkSurveyQuestion,\n MultipleSurveyQuestion,\n RatingSurveyQuestion,\n SurveyAppearance,\n SurveyQuestionType,\n} from '../../../posthog-surveys-types'\nimport { isArray, isNull, isNumber, isString } from '@posthog/core'\nimport { dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, veryDissatisfiedEmoji, verySatisfiedEmoji } from '../icons'\nimport { getDisplayOrderChoices, useSurveyContext } from '../surveys-extension-utils'\nimport { BottomSection } from './BottomSection'\nimport { QuestionHeader } from './QuestionHeader'\n\nexport interface CommonQuestionProps {\n forceDisableHtml: boolean\n appearance: SurveyAppearance\n onSubmit: (res: string | string[] | number | null) => void\n onPreviewSubmit: (res: string | string[] | number | null) => void\n initialValue?: string | string[] | number | null\n displayQuestionIndex: number\n}\n\ninterface OpenEndedInputState {\n isSelected: boolean\n inputValue: string\n}\n\nconst isValidStringArray = (value: unknown): value is string[] => {\n return isArray(value) && value.every((item) => isString(item))\n}\n\nconst initializeSelectedChoices = (\n initialValue: string | string[] | number | null | undefined,\n questionType: SurveyQuestionType\n): string | string[] | null => {\n if (isString(initialValue)) {\n return initialValue\n }\n if (isValidStringArray(initialValue)) {\n return initialValue\n }\n return questionType === SurveyQuestionType.SingleChoice ? null : []\n}\n\nconst initializeOpenEndedState = (\n initialValue: string | string[] | number | null | undefined,\n choices: string[]\n): OpenEndedInputState => {\n if (isString(initialValue) && !choices.includes(initialValue)) {\n return {\n isSelected: true,\n inputValue: initialValue,\n }\n }\n if (isValidStringArray(initialValue)) {\n const openEndedValue = initialValue.find((choice) => !choices.includes(choice))\n if (openEndedValue) {\n return {\n isSelected: true,\n inputValue: openEndedValue,\n }\n }\n }\n return {\n isSelected: false,\n inputValue: '',\n }\n}\n\nexport function OpenTextQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n onPreviewSubmit,\n displayQuestionIndex,\n initialValue,\n}: CommonQuestionProps & {\n question: BasicSurveyQuestion\n}) {\n const { isPreviewMode } = useSurveyContext()\n const inputRef = useRef<HTMLTextAreaElement>(null)\n const [text, setText] = useState<string>(() => {\n if (isString(initialValue)) {\n return initialValue\n }\n return ''\n })\n\n useEffect(() => {\n setTimeout(() => {\n if (!isPreviewMode) {\n inputRef.current?.focus()\n }\n }, 100)\n }, [isPreviewMode])\n\n const htmlFor = `surveyQuestion${displayQuestionIndex}`\n\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} htmlFor={htmlFor} />\n <textarea\n ref={inputRef}\n id={htmlFor}\n rows={4}\n placeholder={appearance?.placeholder}\n onInput={(e) => {\n setText(e.currentTarget.value)\n e.stopPropagation()\n }}\n onKeyDown={(e) => {\n e.stopPropagation()\n }}\n value={text}\n />\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={!text && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(text)}\n onPreviewSubmit={() => onPreviewSubmit(text)}\n />\n </Fragment>\n )\n}\n\nexport function LinkQuestion({\n question,\n forceDisableHtml,\n appearance,\n onSubmit,\n onPreviewSubmit,\n}: CommonQuestionProps & {\n question: LinkSurveyQuestion\n}) {\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} />\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={false}\n link={question.link}\n appearance={appearance}\n onSubmit={() => onSubmit('link clicked')}\n onPreviewSubmit={() => onPreviewSubmit('link clicked')}\n />\n </Fragment>\n )\n}\n\nexport function RatingQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n onPreviewSubmit,\n initialValue,\n}: CommonQuestionProps & {\n question: RatingSurveyQuestion\n}) {\n const scale = question.scale\n const starting = question.scale === 10 ? 0 : 1\n const [rating, setRating] = useState<number | null>(() => {\n if (isNumber(initialValue)) {\n return initialValue\n }\n if (isArray(initialValue) && initialValue.length > 0 && isNumber(parseInt(initialValue[0]))) {\n return parseInt(initialValue[0])\n }\n if (isString(initialValue) && isNumber(parseInt(initialValue))) {\n return parseInt(initialValue)\n }\n return null\n })\n\n const { isPreviewMode } = useSurveyContext()\n\n const handleSubmit = (num: number) => {\n if (isPreviewMode) {\n return onPreviewSubmit(num)\n }\n return onSubmit(num)\n }\n\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} />\n <div className=\"rating-section\">\n <div className=\"rating-options\">\n {question.display === 'emoji' && (\n <div className=\"rating-options-emoji\">\n {(question.scale === 3 ? threeScaleEmojis : fiveScaleEmojis).map((emoji, idx) => {\n const active = idx + 1 === rating\n return (\n <button\n aria-label={`Rate ${idx + 1}`}\n className={`ratings-emoji question-${displayQuestionIndex}-rating-${idx} ${\n active ? 'rating-active' : ''\n }`}\n value={idx + 1}\n key={idx}\n type=\"button\"\n onClick={() => {\n const response = idx + 1\n setRating(response)\n if (question.skipSubmitButton) {\n handleSubmit(response)\n }\n }}\n >\n {emoji}\n </button>\n )\n })}\n </div>\n )}\n {question.display === 'number' && (\n <div\n className=\"rating-options-number\"\n style={{ gridTemplateColumns: `repeat(${scale - starting + 1}, minmax(0, 1fr))` }}\n >\n {getScaleNumbers(question.scale).map((number, idx) => {\n const active = rating === number\n return (\n <RatingButton\n key={idx}\n displayQuestionIndex={displayQuestionIndex}\n active={active}\n appearance={appearance}\n num={number}\n setActiveNumber={(response) => {\n setRating(response)\n if (question.skipSubmitButton) {\n handleSubmit(response)\n }\n }}\n />\n )\n })}\n </div>\n )}\n </div>\n <div className=\"rating-text\">\n <div>{question.lowerBoundLabel}</div>\n <div>{question.upperBoundLabel}</div>\n </div>\n </div>\n </div>\n <BottomSection\n text={question.buttonText || appearance?.submitButtonText || 'Submit'}\n submitDisabled={isNull(rating) && !question.optional}\n appearance={appearance}\n onSubmit={() => onSubmit(rating)}\n onPreviewSubmit={() => onPreviewSubmit(rating)}\n skipSubmitButton={question.skipSubmitButton}\n />\n </Fragment>\n )\n}\n\nexport function RatingButton({\n num,\n active,\n displayQuestionIndex,\n setActiveNumber,\n}: {\n num: number\n active: boolean\n displayQuestionIndex: number\n appearance: SurveyAppearance\n setActiveNumber: (num: number) => void\n}) {\n return (\n <button\n aria-label={`Rate ${num}`}\n className={`ratings-number question-${displayQuestionIndex}-rating-${num} ${active ? 'rating-active' : ''}`}\n type=\"button\"\n onClick={() => {\n setActiveNumber(num)\n }}\n >\n {num}\n </button>\n )\n}\n\nexport function MultipleChoiceQuestion({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n onPreviewSubmit,\n initialValue,\n}: CommonQuestionProps & {\n question: MultipleSurveyQuestion\n}) {\n const openChoiceInputRef = useRef<HTMLInputElement>(null)\n const choices = useMemo(() => getDisplayOrderChoices(question), [question])\n const [selectedChoices, setSelectedChoices] = useState<string | string[] | null>(() =>\n initializeSelectedChoices(initialValue, question.type)\n )\n const [openEndedState, setOpenEndedState] = useState<OpenEndedInputState>(() =>\n initializeOpenEndedState(initialValue, choices)\n )\n\n const { isPreviewMode } = useSurveyContext()\n\n const isSingleChoiceQuestion = question.type === SurveyQuestionType.SingleChoice\n const isMultipleChoiceQuestion = question.type === SurveyQuestionType.MultipleChoice\n\n const shouldSkipSubmit = question.skipSubmitButton && isSingleChoiceQuestion && !question.hasOpenChoice\n\n const handleChoiceChange = (val: string, isOpenChoice: boolean) => {\n if (isOpenChoice) {\n const newOpenSelected = !openEndedState.isSelected\n setOpenEndedState((prev) => ({\n ...prev,\n isSelected: newOpenSelected,\n inputValue: newOpenSelected ? prev.inputValue : '',\n }))\n\n if (isSingleChoiceQuestion) {\n setSelectedChoices('')\n }\n\n // Focus the input when open choice is selected, slight delay because of the animation\n if (newOpenSelected) {\n setTimeout(() => openChoiceInputRef.current?.focus(), 75)\n }\n return\n }\n\n if (isSingleChoiceQuestion) {\n setSelectedChoices(val)\n // Deselect open choice when selecting another option\n setOpenEndedState((prev) => ({\n ...prev,\n isSelected: false,\n inputValue: '',\n }))\n\n if (shouldSkipSubmit) {\n onSubmit(val)\n if (isPreviewMode) {\n onPreviewSubmit(val)\n }\n }\n return\n }\n\n if (isMultipleChoiceQuestion && isArray(selectedChoices)) {\n if (selectedChoices.includes(val)) {\n setSelectedChoices(selectedChoices.filter((choice) => choice !== val))\n } else {\n setSelectedChoices([...selectedChoices, val])\n }\n }\n }\n\n const handleOpenEndedInputChange = (e: React.FormEvent<HTMLInputElement>) => {\n e.stopPropagation()\n const newValue = e.currentTarget.value\n\n setOpenEndedState((prev) => ({\n ...prev,\n inputValue: newValue,\n }))\n\n if (isSingleChoiceQuestion) {\n setSelectedChoices(newValue)\n }\n }\n\n const handleOpenEndedKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n e.stopPropagation()\n\n // Handle Enter key to submit form if valid\n if (e.key === 'Enter' && !isSubmitDisabled()) {\n e.preventDefault()\n handleSubmit()\n }\n\n // Handle Escape key to clear input and deselect\n if (e.key === 'Escape') {\n e.preventDefault()\n setOpenEndedState((prev) => ({\n ...prev,\n isSelected: false,\n inputValue: '',\n }))\n if (isSingleChoiceQuestion) {\n setSelectedChoices(null)\n }\n }\n }\n\n const isSubmitDisabled = (): boolean => {\n if (question.optional) {\n return false\n }\n if (isNull(selectedChoices)) {\n return true\n }\n if (isArray(selectedChoices)) {\n if (!openEndedState.isSelected && selectedChoices.length === 0) {\n return true\n }\n }\n if (openEndedState.isSelected && openEndedState.inputValue.trim() === '') {\n return true\n }\n return false\n }\n\n const handleSubmit = () => {\n if (openEndedState.isSelected && isMultipleChoiceQuestion) {\n if (isArray(selectedChoices)) {\n isPreviewMode\n ? onPreviewSubmit([...selectedChoices, openEndedState.inputValue])\n : onSubmit([...selectedChoices, openEndedState.inputValue])\n }\n } else {\n isPreviewMode ? onPreviewSubmit(selectedChoices) : onSubmit(selectedChoices)\n }\n }\n\n return (\n <Fragment>\n <div className=\"question-container\">\n <QuestionHeader question={question} forceDisableHtml={forceDisableHtml} />\n <fieldset className=\"multiple-choice-options limit-height\">\n <legend className=\"sr-only\">\n {isMultipleChoiceQuestion ? ' Select all that apply' : ' Select one'}\n </legend>\n {choices.map((choice: string, idx: number) => {\n const isOpenChoice = !!question.hasOpenChoice && idx === question.choices.length - 1\n const inputId = `surveyQuestion${displayQuestionIndex}Choice${idx}`\n const openInputId = `${inputId}Open`\n\n const isChecked = isOpenChoice\n ? openEndedState.isSelected\n : isSingleChoiceQuestion\n ? selectedChoices === choice\n : isArray(selectedChoices) && selectedChoices.includes(choice)\n\n return (\n <label className={isOpenChoice ? 'choice-option-open' : ''} key={idx}>\n <div className=\"response-choice\">\n <input\n type={isSingleChoiceQuestion ? 'radio' : 'checkbox'}\n name={inputId}\n checked={isChecked}\n onChange={() => handleChoiceChange(choice, isOpenChoice)}\n id={inputId}\n aria-controls={openInputId}\n />\n <span>{isOpenChoice ? `${choice}:` : choice}</span>\n </div>\n {isOpenChoice && (\n <input\n type=\"text\"\n ref={openChoiceInputRef}\n id={openInputId}\n name={`question${displayQuestionIndex}Open`}\n value={openEndedState.inputValue}\n onKeyDown={handleOpenEndedKeyDown}\n onInput={handleOpenEndedInputChange}\n onClick={(e) => {\n // Ensure the checkbox/radio gets checked when clicking the input\n if (!openEndedState.isSelected) {\n handleChoiceChange(choice, true)\n }\n e.stopPropagation()\n }}\n aria-label={`${choice} - please specify`}\n />\n )}\n </label>\n )\n })}\n </fieldset>\n </div>\n <BottomSection\n text={question.buttonText || 'Submit'}\n submitDisabled={isSubmitDisabled()}\n appearance={appearance}\n onSubmit={handleSubmit}\n onPreviewSubmit={handleSubmit}\n skipSubmitButton={shouldSkipSubmit}\n />\n </Fragment>\n )\n}\n\nconst threeScaleEmojis = [dissatisfiedEmoji, neutralEmoji, satisfiedEmoji]\nconst fiveScaleEmojis = [veryDissatisfiedEmoji, dissatisfiedEmoji, neutralEmoji, satisfiedEmoji, verySatisfiedEmoji]\nconst fiveScaleNumbers = [1, 2, 3, 4, 5]\nconst sevenScaleNumbers = [1, 2, 3, 4, 5, 6, 7]\nconst tenScaleNumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\nfunction getScaleNumbers(scale: number): number[] {\n switch (scale) {\n case 5:\n return fiveScaleNumbers\n case 7:\n return sevenScaleNumbers\n case 10:\n return tenScaleNumbers\n default:\n return fiveScaleNumbers\n }\n}\n","import * as Preact from 'preact'\nimport { useContext, useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport { PostHog } from '../posthog-core'\nimport {\n Survey,\n SurveyCallback,\n SurveyEventName,\n SurveyEventProperties,\n SurveyPosition,\n SurveyQuestion,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveySchedule,\n SurveyType,\n SurveyWidgetType,\n SurveyWithTypeAndAppearance,\n} from '../posthog-surveys-types'\nimport { addEventListener } from '../utils'\nimport { document as _document, window as _window } from '../utils/globals'\nimport {\n doesSurveyActivateByAction,\n doesSurveyActivateByEvent,\n IN_APP_SURVEY_TYPES,\n isSurveyRunning,\n SURVEY_LOGGER as logger,\n} from '../utils/survey-utils'\nimport { isNull, isUndefined } from '@posthog/core'\nimport { uuidv7 } from '../uuidv7'\nimport { ConfirmationMessage } from './surveys/components/ConfirmationMessage'\nimport { Cancel } from './surveys/components/QuestionHeader'\nimport {\n CommonQuestionProps,\n LinkQuestion,\n MultipleChoiceQuestion,\n OpenTextQuestion,\n RatingQuestion,\n} from './surveys/components/QuestionTypes'\nimport {\n canActivateRepeatedly,\n retrieveSurveyShadow,\n defaultSurveyAppearance,\n dismissedSurveyEvent,\n doesSurveyDeviceTypesMatch,\n doesSurveyMatchSelector,\n doesSurveyUrlMatch,\n getDisplayOrderQuestions,\n getInProgressSurveyState,\n getSurveyContainerClass,\n getSurveyResponseKey,\n getSurveySeen,\n hasWaitPeriodPassed,\n isSurveyInProgress,\n sendSurveyEvent,\n setInProgressSurveyState,\n SurveyContext,\n getSurveyStylesheet,\n addSurveyCSSVariablesToElement,\n} from './surveys/surveys-extension-utils'\nimport {\n extractPrefillParamsFromUrl,\n convertPrefillToResponses,\n allRequiredQuestionsFilled,\n} from '../utils/survey-url-prefill'\n\n// We cast the types here which is dangerous but protected by the top level generateSurveys call\nconst window = _window as Window & typeof globalThis\nconst document = _document as Document\n\nconst DISPATCH_FEEDBACK_WIDGET_EVENT = 'ph:show_survey_widget'\nconst WIDGET_LISTENER_ATTRIBUTE = 'PHWidgetSurveyClickListener'\n\nfunction getRatingBucketForResponseValue(responseValue: number, scale: number) {\n if (scale === 3) {\n if (responseValue < 1 || responseValue > 3) {\n throw new Error('The response must be in range 1-3')\n }\n\n return responseValue === 1 ? 'negative' : responseValue === 2 ? 'neutral' : 'positive'\n } else if (scale === 5) {\n if (responseValue < 1 || responseValue > 5) {\n throw new Error('The response must be in range 1-5')\n }\n\n return responseValue <= 2 ? 'negative' : responseValue === 3 ? 'neutral' : 'positive'\n } else if (scale === 7) {\n if (responseValue < 1 || responseValue > 7) {\n throw new Error('The response must be in range 1-7')\n }\n\n return responseValue <= 3 ? 'negative' : responseValue === 4 ? 'neutral' : 'positive'\n } else if (scale === 10) {\n if (responseValue < 0 || responseValue > 10) {\n throw new Error('The response must be in range 0-10')\n }\n\n return responseValue <= 6 ? 'detractors' : responseValue <= 8 ? 'passives' : 'promoters'\n }\n\n throw new Error('The scale must be one of: 3, 5, 7, 10')\n}\n\nexport function getNextSurveyStep(\n survey: Survey,\n currentQuestionIndex: number,\n response: string | string[] | number | null\n) {\n const question = survey.questions[currentQuestionIndex]\n const nextQuestionIndex = currentQuestionIndex + 1\n\n if (!question.branching?.type) {\n if (currentQuestionIndex === survey.questions.length - 1) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n\n if (question.branching.type === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n } else if (question.branching.type === SurveyQuestionBranchingType.SpecificQuestion) {\n if (Number.isInteger(question.branching.index)) {\n return question.branching.index\n }\n } else if (question.branching.type === SurveyQuestionBranchingType.ResponseBased) {\n // Single choice\n if (question.type === SurveyQuestionType.SingleChoice) {\n // :KLUDGE: for now, look up the choiceIndex based on the response\n // TODO: once QuestionTypes.MultipleChoiceQuestion is refactored, pass the selected choiceIndex into this method\n let selectedChoiceIndex = question.choices.indexOf(`${response}`)\n\n if (selectedChoiceIndex === -1 && question.hasOpenChoice) {\n // if the response is not found in the choices, it must be the open choice,\n // which is always the last choice\n selectedChoiceIndex = question.choices.length - 1\n }\n\n if (question.branching?.responseValues?.hasOwnProperty(selectedChoiceIndex)) {\n const nextStep = question.branching.responseValues[selectedChoiceIndex]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n } else if (question.type === SurveyQuestionType.Rating) {\n if (typeof response !== 'number' || !Number.isInteger(response)) {\n throw new Error('The response type must be an integer')\n }\n\n const ratingBucket = getRatingBucketForResponseValue(response, question.scale)\n\n if (question.branching?.responseValues?.hasOwnProperty(ratingBucket)) {\n const nextStep = question.branching.responseValues[ratingBucket]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n }\n\n return nextQuestionIndex\n }\n\n logger.warn('Falling back to next question index due to unexpected branching type')\n return nextQuestionIndex\n}\n\nconst SURVEY_NEXT_TO_TRIGGER_PARAMS = {\n ESTIMATED_MIN_HEIGHT: 250,\n HORIZONTAL_PADDING: 20,\n TRIGGER_SPACING: 12,\n} as const\n\nfunction getNextToTriggerPosition(target: HTMLElement, surveyWidth: number): React.CSSProperties | null {\n try {\n const buttonRect = target.getBoundingClientRect()\n const viewportHeight = window.innerHeight\n const viewportWidth = window.innerWidth\n const estimatedMinSurveyHeight = SURVEY_NEXT_TO_TRIGGER_PARAMS.ESTIMATED_MIN_HEIGHT\n const buttonCenterX = buttonRect.left + buttonRect.width / 2\n let left = buttonCenterX - surveyWidth / 2\n const horizontalPadding = SURVEY_NEXT_TO_TRIGGER_PARAMS.HORIZONTAL_PADDING\n if (left + surveyWidth > viewportWidth - horizontalPadding) {\n left = viewportWidth - surveyWidth - horizontalPadding\n }\n if (left < horizontalPadding) {\n left = horizontalPadding\n }\n const spacing = SURVEY_NEXT_TO_TRIGGER_PARAMS.TRIGGER_SPACING\n const spaceBelow = viewportHeight - buttonRect.bottom\n const spaceAbove = buttonRect.top\n const showAbove = spaceBelow < estimatedMinSurveyHeight && spaceAbove > spaceBelow\n\n return {\n position: 'fixed',\n top: showAbove ? 'auto' : `${buttonRect.bottom + spacing}px`,\n left: `${left}px`,\n right: 'auto',\n bottom: showAbove ? `${viewportHeight - buttonRect.top + spacing}px` : 'auto',\n zIndex: defaultSurveyAppearance.zIndex,\n } satisfies React.CSSProperties\n } catch (error) {\n logger.warn('Failed to calculate trigger position:', error)\n return null\n }\n}\n\n// Keep in sync with posthog/constants.py on main repo\nconst SURVEY_TARGETING_FLAG_PREFIX = 'survey-targeting-'\n\nexport class SurveyManager {\n private _posthog: PostHog\n private _surveyInFocus: string | null\n private _surveyTimeouts: Map<string, NodeJS.Timeout> = new Map()\n private _autoSubmitTimeout?: NodeJS.Timeout\n private _widgetSelectorListeners: Map<string, { element: Element; listener: EventListener; survey: Survey }> =\n new Map()\n private _prefillHandledSurveys: Set<string> = new Set()\n\n constructor(posthog: PostHog) {\n this._posthog = posthog\n // This is used to track the survey that is currently in focus. We only show one survey at a time.\n this._surveyInFocus = null\n }\n\n private _clearSurveyTimeout(surveyId: string) {\n const timeout = this._surveyTimeouts.get(surveyId)\n if (timeout) {\n clearTimeout(timeout)\n this._surveyTimeouts.delete(surveyId)\n }\n }\n\n public handlePopoverSurvey = (survey: Survey): void => {\n this._clearSurveyTimeout(survey.id)\n this._addSurveyToFocus(survey)\n const delaySeconds = survey.appearance?.surveyPopupDelaySeconds || 0\n const { shadow } = retrieveSurveyShadow(survey, this._posthog)\n if (delaySeconds <= 0) {\n return Preact.render(\n <SurveyPopup\n posthog={this._posthog}\n survey={survey}\n removeSurveyFromFocus={this._removeSurveyFromFocus}\n />,\n shadow\n )\n }\n const timeoutId = setTimeout(() => {\n if (!doesSurveyUrlMatch(survey)) {\n return this._removeSurveyFromFocus(survey)\n }\n // rendering with surveyPopupDelaySeconds = 0 because we're already handling the timeout here\n Preact.render(\n <SurveyPopup\n posthog={this._posthog}\n survey={{ ...survey, appearance: { ...survey.appearance, surveyPopupDelaySeconds: 0 } }}\n removeSurveyFromFocus={this._removeSurveyFromFocus}\n />,\n shadow\n )\n }, delaySeconds * 1000)\n this._surveyTimeouts.set(survey.id, timeoutId)\n }\n\n private _handleWidget = (survey: Survey): void => {\n // Ensure widget container exists if it doesn't\n const { shadow, isNewlyCreated } = retrieveSurveyShadow(survey, this._posthog)\n\n // If the widget is already rendered, do nothing. Otherwise the widget will be re-rendered every second\n if (!isNewlyCreated) {\n return\n }\n\n Preact.render(<FeedbackWidget posthog={this._posthog} survey={survey} key={survey.id} />, shadow)\n }\n\n private _removeWidgetSelectorListener = (survey: Pick<Survey, 'id' | 'type' | 'appearance'>): void => {\n this._removeSurveyFromDom(survey)\n const existing = this._widgetSelectorListeners.get(survey.id)\n if (existing) {\n existing.element.removeEventListener('click', existing.listener)\n existing.element.removeAttribute(WIDGET_LISTENER_ATTRIBUTE)\n this._widgetSelectorListeners.delete(survey.id)\n logger.info(`Removed click listener for survey ${survey.id}`)\n }\n }\n\n private _manageWidgetSelectorListener = (survey: Survey, selector: string): void => {\n const currentElement = document.querySelector(selector)\n const existingListenerData = this._widgetSelectorListeners.get(survey.id)\n\n if (!currentElement) {\n if (existingListenerData) {\n this._removeWidgetSelectorListener(survey)\n }\n return\n }\n\n this._handleWidget(survey)\n\n if (existingListenerData) {\n // Listener exists, check if element changed\n if (currentElement !== existingListenerData.element) {\n logger.info(`Selector element changed for survey ${survey.id}. Re-attaching listener.`)\n this._removeWidgetSelectorListener(survey)\n // Continue to attach listener to the new element below\n } else {\n // Element is the same, listener already attached, do nothing\n return\n }\n }\n\n // Element found, and no listener attached (or it was just removed from old element)\n if (!currentElement.hasAttribute(WIDGET_LISTENER_ATTRIBUTE)) {\n const listener = (event: Event) => {\n event.stopPropagation() // Prevent bubbling\n\n const positionStyles =\n survey.appearance?.position === SurveyPosition.NextToTrigger\n ? getNextToTriggerPosition(\n event.currentTarget as HTMLElement,\n parseInt(survey.appearance?.maxWidth || defaultSurveyAppearance.maxWidth)\n )\n : {}\n\n window.dispatchEvent(\n new CustomEvent(DISPATCH_FEEDBACK_WIDGET_EVENT, {\n detail: { surveyId: survey.id, position: positionStyles },\n })\n )\n }\n\n addEventListener(currentElement, 'click', listener)\n currentElement.setAttribute(WIDGET_LISTENER_ATTRIBUTE, 'true')\n this._widgetSelectorListeners.set(survey.id, { element: currentElement, listener, survey })\n logger.info(`Attached click listener for feedback button survey ${survey.id}`)\n }\n }\n\n /**\n * Sorts surveys by their appearance delay in ascending order. If a survey does not have an appearance delay,\n * it is considered to have a delay of 0.\n * @param surveys\n * @returns The surveys sorted by their appearance delay\n */\n private _sortSurveysByAppearanceDelay(surveys: Survey[]): Survey[] {\n return surveys.sort((a, b) => {\n const isSurveyInProgressA = isSurveyInProgress(a)\n const isSurveyInProgressB = isSurveyInProgress(b)\n if (isSurveyInProgressA && !isSurveyInProgressB) {\n return -1 // a comes before b (in progress surveys first)\n }\n if (!isSurveyInProgressA && isSurveyInProgressB) {\n return 1 // a comes after b (in progress surveys first)\n }\n const aIsAlways = a.schedule === SurveySchedule.Always\n const bIsAlways = b.schedule === SurveySchedule.Always\n\n if (aIsAlways && !bIsAlways) {\n return 1 // a comes after b\n }\n if (!aIsAlways && bIsAlways) {\n return -1 // a comes before b\n }\n // If both are Always or neither is Always, sort by delay\n return (a.appearance?.surveyPopupDelaySeconds || 0) - (b.appearance?.surveyPopupDelaySeconds || 0)\n })\n }\n\n public renderPopover = (survey: Survey): void => {\n const { shadow } = retrieveSurveyShadow(survey, this._posthog)\n Preact.render(\n <SurveyPopup posthog={this._posthog} survey={survey} removeSurveyFromFocus={this._removeSurveyFromFocus} />,\n shadow\n )\n }\n\n public renderSurvey = (survey: Survey, selector: Element): void => {\n if (this._posthog.config?.surveys?.prefillFromUrl) {\n this._handleUrlPrefill(survey)\n }\n\n Preact.render(\n <SurveyPopup\n posthog={this._posthog}\n survey={survey}\n removeSurveyFromFocus={this._removeSurveyFromFocus}\n isPopup={false}\n />,\n selector\n )\n }\n\n private _handleUrlPrefill(survey: Survey): void {\n // Only handle prefill once per survey session to avoid overwriting in-progress responses\n if (this._prefillHandledSurveys.has(survey.id)) {\n return\n }\n\n try {\n const { params, autoSubmit } = extractPrefillParamsFromUrl(window.location.search)\n\n if (Object.keys(params).length === 0) {\n return\n }\n\n logger.info('[Survey Prefill] Detected URL prefill parameters')\n\n const responses = convertPrefillToResponses(survey, params)\n\n if (Object.keys(responses).length === 0) {\n logger.warn('[Survey Prefill] No valid responses after conversion')\n return\n }\n\n const submissionId = uuidv7()\n\n setInProgressSurveyState(survey, {\n surveySubmissionId: submissionId,\n responses: responses,\n lastQuestionIndex: 0,\n })\n\n logger.info('[Survey Prefill] Stored prefilled responses in localStorage')\n\n const shouldAutoSubmit =\n autoSubmit &&\n this._posthog.config.surveys?.autoSubmitIfComplete &&\n allRequiredQuestionsFilled(survey, responses)\n\n if (shouldAutoSubmit) {\n this._scheduleAutoSubmit(survey, responses, submissionId)\n }\n\n // Mark this survey as having been prefilled\n this._prefillHandledSurveys.add(survey.id)\n } catch (error) {\n logger.error('[Survey Prefill] Error handling URL prefill:', error)\n }\n }\n\n private _scheduleAutoSubmit(survey: Survey, responses: Record<string, any>, submissionId: string): void {\n const delay = this._posthog.config.surveys?.autoSubmitDelay ?? 800\n\n logger.info('[Survey Prefill] Auto-submit scheduled')\n\n this._autoSubmitTimeout = setTimeout(() => {\n logger.info('[Survey Prefill] Auto-submitting survey')\n\n sendSurveyEvent({\n responses,\n survey,\n surveySubmissionId: submissionId,\n posthog: this._posthog,\n isSurveyCompleted: true,\n })\n }, delay)\n }\n\n private _isSurveyFeatureFlagEnabled(flagKey: string | null, flagVariant: string | undefined = undefined) {\n if (!flagKey) {\n return true\n }\n const isFeatureEnabled = !!this._posthog.featureFlags.isFeatureEnabled(flagKey, {\n send_event: !flagKey.startsWith(SURVEY_TARGETING_FLAG_PREFIX),\n })\n let flagVariantCheck = true\n if (flagVariant) {\n const flagVariantValue = this._posthog.featureFlags.getFeatureFlag(flagKey, { send_event: false })\n flagVariantCheck = flagVariantValue === flagVariant || flagVariant === 'any'\n }\n return isFeatureEnabled && flagVariantCheck\n }\n\n private _isSurveyConditionMatched(survey: Survey): boolean {\n if (!survey.conditions) {\n return true\n }\n return doesSurveyUrlMatch(survey) && doesSurveyDeviceTypesMatch(survey) && doesSurveyMatchSelector(survey)\n }\n\n private _internalFlagCheckSatisfied(survey: Survey): boolean {\n return (\n canActivateRepeatedly(survey) ||\n this._isSurveyFeatureFlagEnabled(survey.internal_targeting_flag_key) ||\n isSurveyInProgress(survey)\n )\n }\n\n public checkSurveyEligibility(survey: Survey): { eligible: boolean; reason?: string } {\n const eligibility = { eligible: true, reason: undefined as string | undefined }\n\n if (!isSurveyRunning(survey)) {\n eligibility.eligible = false\n eligibility.reason = `Survey is not running. It was completed on ${survey.end_date}`\n return eligibility\n }\n\n if (!IN_APP_SURVEY_TYPES.includes(survey.type)) {\n eligibility.eligible = false\n eligibility.reason = `Surveys of type ${survey.type} are never eligible to be shown in the app`\n return eligibility\n }\n\n const linkedFlagVariant = survey.conditions?.linkedFlagVariant\n if (!this._isSurveyFeatureFlagEnabled(survey.linked_flag_key, linkedFlagVariant)) {\n eligibility.eligible = false\n if (!linkedFlagVariant) {\n eligibility.reason = `Survey linked feature flag is not enabled`\n } else {\n eligibility.reason = `Survey linked feature flag is not enabled for variant ${linkedFlagVariant}`\n }\n return eligibility\n }\n\n if (!this._isSurveyFeatureFlagEnabled(survey.targeting_flag_key)) {\n eligibility.eligible = false\n eligibility.reason = `Survey targeting feature flag is not enabled`\n return eligibility\n }\n\n if (!this._internalFlagCheckSatisfied(survey)) {\n eligibility.eligible = false\n eligibility.reason =\n 'Survey internal targeting flag is not enabled and survey cannot activate repeatedly and survey is not in progress'\n return eligibility\n }\n\n if (!hasWaitPeriodPassed(survey.conditions?.seenSurveyWaitPeriodInDays)) {\n eligibility.eligible = false\n eligibility.reason = `Survey wait period has not passed`\n return eligibility\n }\n\n if (getSurveySeen(survey)) {\n eligibility.eligible = false\n eligibility.reason = `Survey has already been seen and it can't be activated again`\n return eligibility\n }\n\n return eligibility\n }\n\n /**\n * Surveys can be activated by events or actions. This method checks if the survey has events and actions,\n * and if so, it checks if the survey has been activated.\n * @param survey\n */\n private _hasActionOrEventTriggeredSurvey(survey: Survey): boolean {\n if (!doesSurveyActivateByEvent(survey) && !doesSurveyActivateByAction(survey)) {\n // If survey doesn't depend on events/actions, it's considered \"triggered\" by default\n return true\n }\n const surveysActivatedByEventsOrActions: string[] | undefined =\n this._posthog.surveys._surveyEventReceiver?.getSurveys()\n return !!surveysActivatedByEventsOrActions?.includes(survey.id)\n }\n\n private _checkFlags(survey: Survey): boolean {\n if (!survey.feature_flag_keys?.length) {\n return true\n }\n\n return survey.feature_flag_keys.every(({ key, value }) => {\n if (!key || !value) {\n return true\n }\n return this._isSurveyFeatureFlagEnabled(value)\n })\n }\n\n public getActiveMatchingSurveys = (callback: SurveyCallback, forceReload = false): void => {\n this._posthog?.surveys.getSurveys((surveys) => {\n const targetingMatchedSurveys = surveys.filter((survey) => {\n const eligibility = this.checkSurveyEligibility(survey)\n return (\n eligibility.eligible &&\n this._isSurveyConditionMatched(survey) &&\n this._hasActionOrEventTriggeredSurvey(survey) &&\n this._checkFlags(survey)\n )\n })\n\n callback(targetingMatchedSurveys)\n }, forceReload)\n }\n\n public callSurveysAndEvaluateDisplayLogic = (forceReload: boolean = false): void => {\n this.getActiveMatchingSurveys((surveys) => {\n const inAppSurveysWithDisplayLogic = surveys.filter(\n (survey) => survey.type === SurveyType.Popover || survey.type === SurveyType.Widget\n )\n\n // Create a queue of surveys sorted by their appearance delay. We will evaluate the display logic\n // for each survey in the queue in order, and only display one survey at a time.\n const inAppSurveysQueue = this._sortSurveysByAppearanceDelay(inAppSurveysWithDisplayLogic)\n\n // Keep track of surveys processed this cycle to remove listeners for inactive ones\n const activeSelectorSurveys = new Set<string>()\n\n inAppSurveysQueue.forEach((survey) => {\n // Widget Type Logic\n if (survey.type === SurveyType.Widget) {\n if (survey.appearance?.widgetType === SurveyWidgetType.Tab) {\n this._handleWidget(survey)\n return\n }\n\n // For selector widget types, we need to manage the listener attachment/detachment dynamically\n if (\n survey.appearance?.widgetType === SurveyWidgetType.Selector &&\n survey.appearance?.widgetSelector\n ) {\n activeSelectorSurveys.add(survey.id)\n this._manageWidgetSelectorListener(survey, survey.appearance?.widgetSelector)\n }\n }\n\n // Popover Type Logic (only one shown at a time)\n if (isNull(this._surveyInFocus) && survey.type === SurveyType.Popover) {\n this.handlePopoverSurvey(survey)\n }\n })\n\n // Clean up listeners for surveys that are no longer active or matched\n this._widgetSelectorListeners.forEach(({ survey }) => {\n if (!activeSelectorSurveys.has(survey.id)) {\n this._removeWidgetSelectorListener(survey)\n }\n })\n }, forceReload)\n }\n\n private _addSurveyToFocus = (survey: Pick<Survey, 'id'>): void => {\n if (!isNull(this._surveyInFocus)) {\n logger.error(`Survey ${this._surveyInFocus} already in focus. Cannot add survey ${survey.id}.`)\n }\n this._surveyInFocus = survey.id\n }\n\n private _removeSurveyFromDom(survey: Pick<Survey, 'id' | 'type' | 'appearance'>): void {\n try {\n const shadowContainer = document.querySelector(getSurveyContainerClass(survey, true))\n if (shadowContainer?.shadowRoot) {\n Preact.render(null, shadowContainer.shadowRoot)\n }\n shadowContainer?.remove()\n } catch (error) {\n logger.warn(`Failed to remove survey ${survey.id} from DOM:`, error)\n }\n }\n\n private _removeSurveyFromFocus = (survey: SurveyWithTypeAndAppearance): void => {\n if (this._surveyInFocus !== survey.id) {\n logger.error(`Survey ${survey.id} is not in focus. Cannot remove survey ${survey.id}.`)\n }\n this._clearSurveyTimeout(survey.id)\n this._clearAutoSubmitTimeout()\n this._surveyInFocus = null\n this._removeSurveyFromDom(survey)\n }\n\n private _clearAutoSubmitTimeout(): void {\n if (this._autoSubmitTimeout) {\n clearTimeout(this._autoSubmitTimeout)\n this._autoSubmitTimeout = undefined\n }\n }\n\n // Expose internal state and methods for testing\n public getTestAPI() {\n return {\n addSurveyToFocus: this._addSurveyToFocus,\n removeSurveyFromFocus: this._removeSurveyFromFocus,\n surveyInFocus: this._surveyInFocus,\n surveyTimeouts: this._surveyTimeouts,\n handleWidget: this._handleWidget,\n handlePopoverSurvey: this.handlePopoverSurvey,\n manageWidgetSelectorListener: this._manageWidgetSelectorListener,\n sortSurveysByAppearanceDelay: this._sortSurveysByAppearanceDelay,\n checkFlags: this._checkFlags.bind(this),\n isSurveyFeatureFlagEnabled: this._isSurveyFeatureFlagEnabled.bind(this),\n }\n }\n}\n\nconst DEFAULT_PREVIEW_POSITION_STYLES: React.CSSProperties = {\n position: 'relative',\n left: 'unset',\n right: 'unset',\n top: 'unset',\n bottom: 'unset',\n transform: 'unset',\n}\n\nexport const renderSurveysPreview = ({\n survey,\n parentElement,\n previewPageIndex,\n forceDisableHtml,\n onPreviewSubmit,\n positionStyles = DEFAULT_PREVIEW_POSITION_STYLES,\n}: {\n survey: Survey\n parentElement: HTMLElement\n previewPageIndex: number\n forceDisableHtml?: boolean\n onPreviewSubmit?: (res: string | string[] | number | null) => void\n posthog?: PostHog\n positionStyles?: React.CSSProperties\n}) => {\n const currentStyle = parentElement.querySelector('style[data-ph-survey-style]')\n if (currentStyle) {\n currentStyle.remove()\n }\n const stylesheet = getSurveyStylesheet()\n if (stylesheet) {\n parentElement.appendChild(stylesheet)\n addSurveyCSSVariablesToElement(parentElement, survey.type, survey.appearance)\n }\n Preact.render(\n <SurveyPopup\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={positionStyles}\n onPreviewSubmit={onPreviewSubmit}\n previewPageIndex={previewPageIndex}\n removeSurveyFromFocus={() => {}}\n />,\n parentElement\n )\n}\n\nexport const renderFeedbackWidgetPreview = ({\n survey,\n root,\n forceDisableHtml,\n}: {\n survey: Survey\n root: HTMLElement\n forceDisableHtml?: boolean\n}) => {\n const stylesheet = getSurveyStylesheet()\n if (stylesheet) {\n root.appendChild(stylesheet)\n addSurveyCSSVariablesToElement(root, survey.type, survey.appearance)\n }\n\n Preact.render(<FeedbackWidget forceDisableHtml={forceDisableHtml} survey={survey} readOnly={true} />, root)\n}\n\n// This is the main exported function\nexport function generateSurveys(posthog: PostHog, isSurveysEnabled: boolean | undefined) {\n // NOTE: Important to ensure we never try and run surveys without a window environment\n if (!document || !window) {\n return\n }\n\n const surveyManager = new SurveyManager(posthog)\n if (posthog.config.disable_surveys_automatic_display) {\n logger.info('Surveys automatic display is disabled. Skipping call surveys and evaluate display logic.')\n return surveyManager\n }\n\n // NOTE: The `generateSurveys` function used to accept just a single parameter, without any `isSurveysEnabled` parameter.\n // To keep compatibility with old clients, we'll consider `undefined` the same as `true`\n if (isSurveysEnabled === false) {\n logger.info('There are no surveys to load or Surveys is disabled in the project settings.')\n return surveyManager\n }\n\n surveyManager.callSurveysAndEvaluateDisplayLogic(true)\n\n let intervalId: number | undefined\n\n const startInterval = () => {\n if (!isUndefined(intervalId)) {\n return\n }\n intervalId = setInterval(() => {\n surveyManager.callSurveysAndEvaluateDisplayLogic(false)\n }, 1000) as unknown as number\n }\n\n const stopInterval = () => {\n if (!isUndefined(intervalId)) {\n clearInterval(intervalId)\n intervalId = undefined\n }\n }\n\n startInterval()\n\n addEventListener(document, 'visibilitychange', () => {\n if (document.hidden) {\n stopInterval()\n } else {\n surveyManager.callSurveysAndEvaluateDisplayLogic(false)\n startInterval()\n }\n })\n\n return surveyManager\n}\n\ntype UseHideSurveyOnURLChangeProps = {\n survey: Pick<Survey, 'id' | 'conditions' | 'type' | 'appearance'>\n removeSurveyFromFocus?: (survey: SurveyWithTypeAndAppearance) => void\n setSurveyVisible: (visible: boolean) => void\n isPreviewMode?: boolean\n}\n\n/**\n * This hook handles URL-based survey visibility after the initial mount.\n * The initial URL check is handled by the `getActiveMatchingSurveys` method in the `PostHogSurveys` class,\n * which ensures the URL matches before displaying a survey for the first time.\n * That is the method that is called every second to see if there's a matching survey.\n *\n * This separation of concerns means:\n * 1. Initial URL matching is done by `getActiveMatchingSurveys` before displaying the survey\n * 2. Subsequent URL changes are handled here to hide the survey as the user navigates\n */\nexport function useHideSurveyOnURLChange({\n survey,\n removeSurveyFromFocus = () => {},\n setSurveyVisible,\n isPreviewMode = false,\n}: UseHideSurveyOnURLChangeProps) {\n useEffect(() => {\n if (isPreviewMode || !survey.conditions?.url) {\n return\n }\n\n const checkUrlMatch = () => {\n const isSurveyTypeWidget = survey.type === SurveyType.Widget\n const doesSurveyMatchUrlCondition = doesSurveyUrlMatch(survey)\n const isSurveyWidgetTypeTab = survey.appearance?.widgetType === SurveyWidgetType.Tab && isSurveyTypeWidget\n\n if (doesSurveyMatchUrlCondition) {\n if (isSurveyWidgetTypeTab) {\n logger.info(`Showing survey ${survey.id} because it is a feedback button tab and URL matches`)\n setSurveyVisible(true)\n }\n return\n }\n\n logger.info(`Hiding survey ${survey.id} because URL does not match`)\n setSurveyVisible(false)\n return removeSurveyFromFocus(survey)\n }\n\n // Listen for browser back/forward browser history changes\n addEventListener(window, 'popstate', checkUrlMatch)\n // Listen for hash changes, for SPA frameworks that use hash-based routing\n // The hashchange event is fired when the fragment identifier of the URL has changed (the part of the URL beginning with and following the # symbol).\n addEventListener(window, 'hashchange', checkUrlMatch)\n\n // Listen for SPA navigation\n const originalPushState = window.history.pushState\n const originalReplaceState = window.history.replaceState\n\n window.history.pushState = function (...args) {\n originalPushState.apply(this, args)\n checkUrlMatch()\n }\n\n window.history.replaceState = function (...args) {\n originalReplaceState.apply(this, args)\n checkUrlMatch()\n }\n\n return () => {\n window.removeEventListener('popstate', checkUrlMatch)\n window.removeEventListener('hashchange', checkUrlMatch)\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n }\n }, [isPreviewMode, survey, removeSurveyFromFocus, setSurveyVisible])\n}\n\nexport function usePopupVisibility(\n survey: Survey,\n posthog: PostHog | undefined,\n millisecondDelay: number,\n isPreviewMode: boolean,\n removeSurveyFromFocus: (survey: SurveyWithTypeAndAppearance) => void,\n surveyContainerRef?: React.RefObject<HTMLDivElement>\n) {\n const [isPopupVisible, setIsPopupVisible] = useState(\n isPreviewMode || millisecondDelay === 0 || survey.type === SurveyType.ExternalSurvey\n )\n const [isSurveySent, setIsSurveySent] = useState(false)\n\n const hidePopupWithViewTransition = () => {\n const removeDOMAndHidePopup = () => {\n if (survey.type === SurveyType.Popover) {\n removeSurveyFromFocus(survey)\n }\n setIsPopupVisible(false)\n }\n\n if (!document.startViewTransition) {\n removeDOMAndHidePopup()\n return\n }\n\n const transition = document.startViewTransition(() => {\n surveyContainerRef?.current?.remove()\n })\n\n transition.finished.then(() => {\n setTimeout(() => {\n removeDOMAndHidePopup()\n }, 100)\n })\n }\n\n const handleSurveyClosed = (event: CustomEvent) => {\n if (event.detail.surveyId !== survey.id) {\n return\n }\n hidePopupWithViewTransition()\n }\n\n useEffect(() => {\n if (!posthog) {\n logger.error('usePopupVisibility hook called without a PostHog instance.')\n return\n }\n if (isPreviewMode) {\n return\n }\n\n const handleSurveySent = (event: CustomEvent) => {\n if (event.detail.surveyId !== survey.id) {\n return\n }\n if (!survey.appearance?.displayThankYouMessage) {\n return hidePopupWithViewTransition()\n }\n setIsSurveySent(true)\n if (survey.appearance?.autoDisappear) {\n setTimeout(() => {\n hidePopupWithViewTransition()\n }, 5000)\n }\n }\n\n const showSurvey = () => {\n // check if the url is still matching, necessary for delayed surveys, as the URL may have changed\n if (!doesSurveyUrlMatch(survey)) {\n return\n }\n setIsPopupVisible(true)\n window.dispatchEvent(new Event('PHSurveyShown'))\n posthog.capture(SurveyEventName.SHOWN, {\n [SurveyEventProperties.SURVEY_NAME]: survey.name,\n [SurveyEventProperties.SURVEY_ID]: survey.id,\n [SurveyEventProperties.SURVEY_ITERATION]: survey.current_iteration,\n [SurveyEventProperties.SURVEY_ITERATION_START_DATE]: survey.current_iteration_start_date,\n sessionRecordingUrl: posthog.get_session_replay_url?.(),\n })\n localStorage.setItem('lastSeenSurveyDate', new Date().toISOString())\n }\n\n addEventListener(window, 'PHSurveyClosed', handleSurveyClosed as EventListener)\n addEventListener(window, 'PHSurveySent', handleSurveySent as EventListener)\n\n if (millisecondDelay > 0) {\n // This path is only used for direct usage of SurveyPopup,\n // not for surveys managed by SurveyManager\n const timeoutId = setTimeout(showSurvey, millisecondDelay)\n return () => {\n clearTimeout(timeoutId)\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed as EventListener)\n window.removeEventListener('PHSurveySent', handleSurveySent as EventListener)\n }\n } else {\n // This is the path used for surveys managed by SurveyManager\n showSurvey()\n return () => {\n window.removeEventListener('PHSurveyClosed', handleSurveyClosed as EventListener)\n window.removeEventListener('PHSurveySent', handleSurveySent as EventListener)\n }\n }\n }, [])\n\n useHideSurveyOnURLChange({\n survey,\n removeSurveyFromFocus,\n setSurveyVisible: setIsPopupVisible,\n isPreviewMode,\n })\n\n return { isPopupVisible, isSurveySent, setIsPopupVisible, hidePopupWithViewTransition }\n}\n\ninterface SurveyPopupProps {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n style?: React.CSSProperties\n previewPageIndex?: number | undefined\n removeSurveyFromFocus?: (survey: SurveyWithTypeAndAppearance) => void\n isPopup?: boolean\n onPreviewSubmit?: (res: string | string[] | number | null) => void\n onPopupSurveyDismissed?: () => void\n onCloseConfirmationMessage?: () => void\n}\n\nfunction getPopoverPosition(\n type: SurveyType,\n position: SurveyPosition = SurveyPosition.Right,\n surveyWidgetType?: SurveyWidgetType\n) {\n if (type === SurveyType.ExternalSurvey) {\n return {}\n }\n\n switch (position) {\n case SurveyPosition.TopLeft:\n return { top: '0', left: '0', transform: 'translate(30px, 30px)' }\n case SurveyPosition.TopRight:\n return { top: '0', right: '0', transform: 'translate(-30px, 30px)' }\n case SurveyPosition.TopCenter:\n return { top: '0', left: '50%', transform: 'translate(-50%, 30px)' }\n case SurveyPosition.MiddleLeft:\n return { top: '50%', left: '0', transform: 'translate(30px, -50%)' }\n case SurveyPosition.MiddleRight:\n return { top: '50%', right: '0', transform: 'translate(-30px, -50%)' }\n case SurveyPosition.MiddleCenter:\n return { top: '50%', left: '50%', transform: 'translate(-50%, -50%)' }\n case SurveyPosition.Left:\n return { left: '30px' }\n case SurveyPosition.Center:\n return {\n left: '50%',\n transform: 'translateX(-50%)',\n }\n default:\n case SurveyPosition.Right:\n return { right: type === SurveyType.Widget && surveyWidgetType === SurveyWidgetType.Tab ? '60px' : '30px' }\n }\n}\n\nexport function SurveyPopup({\n survey,\n forceDisableHtml,\n posthog,\n style = {},\n previewPageIndex,\n removeSurveyFromFocus = () => {},\n isPopup = true,\n onPreviewSubmit = () => {},\n onPopupSurveyDismissed = () => {},\n onCloseConfirmationMessage = () => {},\n}: SurveyPopupProps) {\n const surveyContainerRef = useRef<HTMLDivElement>(null)\n const isPreviewMode = Number.isInteger(previewPageIndex)\n // NB: The client-side code passes the millisecondDelay in seconds, but setTimeout expects milliseconds, so we multiply by 1000\n const surveyPopupDelayMilliseconds = survey.appearance?.surveyPopupDelaySeconds\n ? survey.appearance.surveyPopupDelaySeconds * 1000\n : 0\n const { isPopupVisible, isSurveySent, hidePopupWithViewTransition } = usePopupVisibility(\n survey,\n posthog,\n surveyPopupDelayMilliseconds,\n isPreviewMode,\n removeSurveyFromFocus,\n surveyContainerRef\n )\n\n const shouldShowConfirmation = isSurveySent || previewPageIndex === survey.questions.length\n const surveyContextValue = useMemo(() => {\n const getInProgressSurvey = getInProgressSurveyState(survey)\n return {\n isPreviewMode,\n previewPageIndex: previewPageIndex,\n onPopupSurveyDismissed: () => {\n dismissedSurveyEvent(survey, posthog, isPreviewMode)\n onPopupSurveyDismissed()\n },\n isPopup: isPopup || false,\n surveySubmissionId: getInProgressSurvey?.surveySubmissionId || uuidv7(),\n onPreviewSubmit,\n posthog,\n }\n }, [isPreviewMode, previewPageIndex, isPopup, posthog, survey, onPopupSurveyDismissed, onPreviewSubmit])\n\n if (!isPopupVisible) {\n return null\n }\n\n return (\n <SurveyContext.Provider value={surveyContextValue}>\n <div\n className=\"ph-survey\"\n style={{\n ...getPopoverPosition(survey.type, survey.appearance?.position, survey.appearance?.widgetType),\n ...style,\n }}\n ref={surveyContainerRef}\n >\n {!shouldShowConfirmation ? (\n <Questions survey={survey} forceDisableHtml={!!forceDisableHtml} posthog={posthog} />\n ) : (\n <ConfirmationMessage\n header={survey.appearance?.thankYouMessageHeader || 'Thank you!'}\n description={survey.appearance?.thankYouMessageDescription || ''}\n forceDisableHtml={!!forceDisableHtml}\n contentType={survey.appearance?.thankYouMessageDescriptionContentType}\n appearance={survey.appearance || defaultSurveyAppearance}\n onClose={() => {\n hidePopupWithViewTransition()\n onCloseConfirmationMessage()\n }}\n />\n )}\n </div>\n </SurveyContext.Provider>\n )\n}\n\nexport function Questions({\n survey,\n forceDisableHtml,\n posthog,\n}: {\n survey: Survey\n forceDisableHtml: boolean\n posthog?: PostHog\n}) {\n // Initialize responses from localStorage or empty object\n const [questionsResponses, setQuestionsResponses] = useState(() => {\n const inProgressSurveyData = getInProgressSurveyState(survey)\n if (inProgressSurveyData?.responses) {\n logger.info('Survey is already in progress, filling in initial responses')\n }\n return inProgressSurveyData?.responses || {}\n })\n const { previewPageIndex, onPopupSurveyDismissed, isPopup, onPreviewSubmit, surveySubmissionId, isPreviewMode } =\n useContext(SurveyContext)\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(() => {\n const inProgressSurveyData = getInProgressSurveyState(survey)\n return previewPageIndex || inProgressSurveyData?.lastQuestionIndex || 0\n })\n const surveyQuestions = useMemo(() => getDisplayOrderQuestions(survey), [survey])\n\n // Sync preview state\n useEffect(() => {\n if (isPreviewMode && !isUndefined(previewPageIndex)) {\n setCurrentQuestionIndex(previewPageIndex)\n }\n }, [previewPageIndex, isPreviewMode])\n\n const onNextButtonClick = ({\n res,\n displayQuestionIndex,\n questionId,\n }: {\n res: string | string[] | number | null\n displayQuestionIndex: number\n questionId?: string\n }) => {\n if (!posthog) {\n logger.error('onNextButtonClick called without a PostHog instance.')\n return\n }\n\n if (!questionId) {\n logger.error('onNextButtonClick called without a questionId.')\n return\n }\n\n const responseKey = getSurveyResponseKey(questionId)\n\n const newResponses = { ...questionsResponses, [responseKey]: res }\n setQuestionsResponses(newResponses)\n\n const nextStep = getNextSurveyStep(survey, displayQuestionIndex, res)\n const isSurveyCompleted = nextStep === SurveyQuestionBranchingType.End\n\n if (!isSurveyCompleted) {\n setCurrentQuestionIndex(nextStep)\n setInProgressSurveyState(survey, {\n surveySubmissionId: surveySubmissionId,\n responses: newResponses,\n lastQuestionIndex: nextStep,\n })\n }\n\n // If partial responses are enabled, send the survey sent event with with the responses,\n // otherwise only send the event when the survey is completed\n if (survey.enable_partial_responses || isSurveyCompleted) {\n sendSurveyEvent({\n responses: newResponses,\n survey,\n surveySubmissionId,\n isSurveyCompleted,\n posthog,\n })\n }\n }\n\n const currentQuestion = surveyQuestions.at(currentQuestionIndex)\n\n if (!currentQuestion) {\n return null\n }\n\n return (\n <form className=\"survey-form\" name=\"surveyForm\">\n {isPopup && (\n <Cancel\n onClick={() => {\n onPopupSurveyDismissed()\n }}\n />\n )}\n <div className=\"survey-box\">\n {getQuestionComponent({\n question: currentQuestion,\n forceDisableHtml,\n displayQuestionIndex: currentQuestionIndex,\n appearance: survey.appearance || defaultSurveyAppearance,\n onSubmit: (res) =>\n onNextButtonClick({\n res,\n displayQuestionIndex: currentQuestionIndex,\n questionId: currentQuestion.id,\n }),\n onPreviewSubmit,\n initialValue: currentQuestion.id\n ? questionsResponses[getSurveyResponseKey(currentQuestion.id)]\n : undefined,\n })}\n </div>\n </form>\n )\n}\n\nexport function FeedbackWidget({\n survey,\n forceDisableHtml,\n posthog,\n readOnly,\n}: {\n survey: Survey\n forceDisableHtml?: boolean\n posthog?: PostHog\n readOnly?: boolean\n}): JSX.Element | null {\n const [isFeedbackButtonVisible, setIsFeedbackButtonVisible] = useState(true)\n const [showSurvey, setShowSurvey] = useState(false)\n const [styleOverrides, setStyleOverrides] = useState<React.CSSProperties>({})\n\n const toggleSurvey = () => {\n setShowSurvey(!showSurvey)\n }\n\n useEffect(() => {\n if (!posthog) {\n logger.error('FeedbackWidget called without a PostHog instance.')\n return\n }\n if (readOnly) {\n return\n }\n\n if (survey.appearance?.widgetType === 'tab') {\n setStyleOverrides({\n top: '50%',\n bottom: 'auto',\n })\n }\n const handleShowSurvey = (event: Event) => {\n const customEvent = event as CustomEvent\n // Check if the event is for this specific survey instance\n if (customEvent.detail?.surveyId === survey.id) {\n logger.info(`Received show event for feedback button survey ${survey.id}`)\n setStyleOverrides(customEvent.detail.position || {})\n toggleSurvey()\n }\n }\n\n addEventListener(window, DISPATCH_FEEDBACK_WIDGET_EVENT, handleShowSurvey)\n\n // Cleanup listener on component unmount\n return () => {\n window.removeEventListener(DISPATCH_FEEDBACK_WIDGET_EVENT, handleShowSurvey)\n }\n }, [\n posthog,\n readOnly,\n survey.id,\n survey.appearance?.widgetType,\n survey.appearance?.widgetSelector,\n survey.appearance?.borderColor,\n ])\n\n useHideSurveyOnURLChange({\n survey,\n setSurveyVisible: setIsFeedbackButtonVisible,\n })\n\n if (!isFeedbackButtonVisible) {\n return null\n }\n\n const resetShowSurvey = () => {\n // hide the feedback button after answering or closing the survey if it's not always show\n if (survey.schedule !== SurveySchedule.Always) {\n setIsFeedbackButtonVisible(false)\n }\n // important so our view transition has time to run\n setTimeout(() => {\n setShowSurvey(false)\n }, 200)\n }\n\n return (\n <Preact.Fragment>\n {survey.appearance?.widgetType === 'tab' && (\n <button className=\"ph-survey-widget-tab\" onClick={toggleSurvey} disabled={readOnly}>\n {survey.appearance?.widgetLabel || ''}\n </button>\n )}\n {showSurvey && (\n <SurveyPopup\n posthog={posthog}\n survey={survey}\n forceDisableHtml={forceDisableHtml}\n style={styleOverrides}\n onPopupSurveyDismissed={resetShowSurvey}\n onCloseConfirmationMessage={resetShowSurvey}\n />\n )}\n </Preact.Fragment>\n )\n}\n\ninterface GetQuestionComponentProps extends CommonQuestionProps {\n question: SurveyQuestion\n displayQuestionIndex: number\n}\n\nconst getQuestionComponent = ({\n question,\n forceDisableHtml,\n displayQuestionIndex,\n appearance,\n onSubmit,\n onPreviewSubmit,\n initialValue,\n}: GetQuestionComponentProps): JSX.Element | null => {\n const baseProps = {\n forceDisableHtml,\n appearance,\n onPreviewSubmit: (res: string | string[] | number | null) => {\n onPreviewSubmit(res)\n },\n onSubmit: (res: string | string[] | number | null) => {\n onSubmit(res)\n },\n initialValue,\n displayQuestionIndex,\n }\n\n switch (question.type) {\n case SurveyQuestionType.Open:\n return <OpenTextQuestion {...baseProps} question={question} key={question.id} />\n case SurveyQuestionType.Link:\n return <LinkQuestion {...baseProps} question={question} key={question.id} />\n case SurveyQuestionType.Rating:\n return <RatingQuestion {...baseProps} question={question} key={question.id} />\n case SurveyQuestionType.SingleChoice:\n case SurveyQuestionType.MultipleChoice:\n return <MultipleChoiceQuestion {...baseProps} question={question} key={question.id} />\n default:\n logger.error(`Unsupported question type: ${(question as any).type}`)\n return null\n }\n}\n","import { Survey, SurveyQuestion, SurveyQuestionType } from '../posthog-surveys-types'\nimport { getSurveyResponseKey } from '../extensions/surveys/surveys-extension-utils'\nimport { logger } from './logger'\nimport { isUndefined } from '@posthog/core'\n\n/**\n * Extracted URL prefill parameters by question index\n */\nexport interface PrefillParams {\n [questionIndex: number]: string[]\n}\n\n/**\n * Extract prefill parameters from URL search string\n * Format: ?q0=1&q1=8&q2=0&q2=2&auto_submit=true\n * NOTE: Manual parsing for IE11/op_mini compatibility (no URLSearchParams)\n */\nexport function extractPrefillParamsFromUrl(searchString: string): {\n params: PrefillParams\n autoSubmit: boolean\n} {\n const params: PrefillParams = {}\n let autoSubmit = false\n\n // Remove leading ? if present\n const cleanSearch = searchString.replace(/^\\?/, '')\n if (!cleanSearch) {\n return { params, autoSubmit }\n }\n\n // Split by & to get key-value pairs\n const pairs = cleanSearch.split('&')\n\n for (const pair of pairs) {\n const [key, value] = pair.split('=')\n if (!key || isUndefined(value)) {\n continue\n }\n\n const decodedKey = decodeURIComponent(key)\n const decodedValue = decodeURIComponent(value)\n\n // Check for auto_submit parameter\n if (decodedKey === 'auto_submit' && decodedValue === 'true') {\n autoSubmit = true\n continue\n }\n\n // Check for question parameters (q0, q1, etc.)\n const match = decodedKey.match(/^q(\\d+)$/)\n if (match) {\n const questionIndex = parseInt(match[1], 10)\n if (!params[questionIndex]) {\n params[questionIndex] = []\n }\n params[questionIndex].push(decodedValue)\n }\n }\n\n return { params, autoSubmit }\n}\n\n/**\n * Convert URL prefill values to SDK response format\n */\nexport function convertPrefillToResponses(survey: Survey, prefillParams: PrefillParams): Record<string, any> {\n const responses: Record<string, any> = {}\n\n survey.questions.forEach((question: SurveyQuestion, index: number) => {\n if (!prefillParams[index] || !question.id) {\n return\n }\n\n const values = prefillParams[index]\n const responseKey = getSurveyResponseKey(question.id)\n\n try {\n switch (question.type) {\n case SurveyQuestionType.SingleChoice: {\n if (!question.choices || question.choices.length === 0) {\n logger.warn(`[Survey Prefill] Question ${index} has no choices`)\n return\n }\n const choiceIndex = parseInt(values[0], 10)\n if (isNaN(choiceIndex) || choiceIndex < 0 || choiceIndex >= question.choices.length) {\n logger.warn(`[Survey Prefill] Invalid choice index for q${index}: ${values[0]}`)\n return\n }\n responses[responseKey] = question.choices[choiceIndex]\n break\n }\n\n case SurveyQuestionType.MultipleChoice: {\n if (!question.choices || question.choices.length === 0) {\n logger.warn(`[Survey Prefill] Question ${index} has no choices`)\n return\n }\n const choiceIndices = values\n .map((v) => parseInt(v, 10))\n .filter((i) => !isNaN(i) && i >= 0 && i < question.choices.length)\n\n if (choiceIndices.length === 0) {\n logger.warn(`[Survey Prefill] No valid choices for q${index}`)\n return\n }\n\n // Remove duplicates and map to choice values\n const uniqueChoices = [...new Set(choiceIndices.map((i) => question.choices[i]))]\n if (uniqueChoices.length < choiceIndices.length) {\n logger.warn(`[Survey Prefill] Removed duplicate choices for q${index}`)\n }\n responses[responseKey] = uniqueChoices\n break\n }\n\n case SurveyQuestionType.Rating: {\n const rating = parseInt(values[0], 10)\n const scale = question.scale || 10\n\n if (isNaN(rating) || rating < 0 || rating > scale) {\n logger.warn(`[Survey Prefill] Invalid rating for q${index}: ${values[0]} (scale: 0-${scale})`)\n return\n }\n responses[responseKey] = rating\n break\n }\n\n default:\n logger.info(`[Survey Prefill] Question type ${question.type} does not support prefill`)\n }\n } catch (error) {\n logger.error(`[Survey Prefill] Error converting q${index}:`, error)\n }\n })\n\n return responses\n}\n\n/**\n * Check if all REQUIRED questions that support prefill are filled\n */\nexport function allRequiredQuestionsFilled(survey: Survey, responses: Record<string, any>): boolean {\n return survey.questions.every((question: SurveyQuestion) => {\n // Optional questions don't block auto-submit\n if (question.optional) {\n return true\n }\n\n // Link and open questions don't support prefill currently, so they don't block auto-submit\n // If support is added in the future, they will be checked like other question types below\n if (question.type === SurveyQuestionType.Link || question.type === SurveyQuestionType.Open) {\n return true\n }\n\n // Required question must have a valid ID and response\n if (!question.id) {\n return false\n }\n\n const responseKey = getSurveyResponseKey(question.id)\n const hasResponse = responses.hasOwnProperty(responseKey)\n\n // For question types that support prefill, require a response\n return hasResponse\n })\n}\n","import { generateSurveys } from '../extensions/surveys'\n\nimport { assignableWindow } from '../utils/globals'\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.generateSurveys = generateSurveys\n\n// this used to be directly on window, but we moved it to __PosthogExtensions__\n// it is still on window for backwards compatibility\nassignableWindow.extendPostHogWithSurveys = generateSurveys\n\nexport default generateSurveys\n","import { assignableWindow, window } from '../utils/globals'\nimport { ErrorEventArgs } from '../types'\nimport { createLogger } from '../utils/logger'\nimport type { ErrorTracking } from '@posthog/core'\nimport { buildErrorPropertiesBuilder } from '../posthog-exceptions'\n\nconst logger = createLogger('[ExceptionAutocapture]')\nconst errorPropertiesBuilder = buildErrorPropertiesBuilder()\n\nfunction errorToProperties({ event, error }: { event: Event | string; error?: Error }) {\n return errorPropertiesBuilder.buildFromUnknown(error || event, {\n mechanism: {\n handled: false,\n },\n })\n}\n\nconst wrapOnError = (captureFn: (props: ErrorTracking.ErrorProperties) => void) => {\n const win = window as any\n if (!win) {\n logger.info('window not available, cannot wrap onerror')\n }\n const originalOnError = win.onerror\n\n win.onerror = function (...args: ErrorEventArgs): boolean {\n const errorProperties = errorToProperties({ event: args[0], error: args[4] })\n captureFn(errorProperties)\n return originalOnError?.(...args) ?? false\n }\n win.onerror.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete win.onerror?.__POSTHOG_INSTRUMENTED__\n win.onerror = originalOnError\n }\n}\n\nconst wrapUnhandledRejection = (captureFn: (props: ErrorTracking.ErrorProperties) => void) => {\n const win = window as any\n if (!win) {\n logger.info('window not available, cannot wrap onUnhandledRejection')\n }\n\n const originalOnUnhandledRejection = win.onunhandledrejection\n\n win.onunhandledrejection = function (ev: PromiseRejectionEvent): boolean {\n const errorProperties = errorToProperties({ event: ev })\n captureFn(errorProperties)\n return originalOnUnhandledRejection?.apply(win, [ev]) ?? false\n }\n win.onunhandledrejection.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete win.onunhandledrejection?.__POSTHOG_INSTRUMENTED__\n win.onunhandledrejection = originalOnUnhandledRejection\n }\n}\n\nconst wrapConsoleError = (captureFn: (props: ErrorTracking.ErrorProperties) => void) => {\n const con = console as any\n if (!con) {\n logger.info('console not available, cannot wrap console.error')\n }\n\n const originalConsoleError = con.error\n\n con.error = function (...args: any[]): void {\n const event = args.join(' ')\n const error = args.find((arg) => arg instanceof Error)\n const errorProperties = errorToProperties({ error, event })\n captureFn(errorProperties)\n return originalConsoleError?.(...args)\n }\n con.error.__POSTHOG_INSTRUMENTED__ = true\n\n return () => {\n delete con.error?.__POSTHOG_INSTRUMENTED__\n con.error = originalConsoleError\n }\n}\n\nconst posthogErrorWrappingFunctions = {\n wrapOnError,\n wrapUnhandledRejection,\n wrapConsoleError,\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.errorWrappingFunctions = posthogErrorWrappingFunctions\n\n// we used to put these on window, and now we put them on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put them directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.posthogErrorWrappingFunctions = posthogErrorWrappingFunctions\n\nexport default posthogErrorWrappingFunctions\n","import { ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS, ERROR_TRACKING_SUPPRESSION_RULES } from './constants'\nimport { PostHog } from './posthog-core'\nimport { CaptureResult, ErrorTrackingSuppressionRule, Properties, RemoteConfig } from './types'\nimport { createLogger } from './utils/logger'\nimport { propertyComparisons } from './utils/property-utils'\nimport { isString, isArray, ErrorTracking, isNullish } from '@posthog/core'\n\nconst logger = createLogger('[Error tracking]')\n\nexport function buildErrorPropertiesBuilder() {\n return new ErrorTracking.ErrorPropertiesBuilder(\n [\n new ErrorTracking.DOMExceptionCoercer(),\n new ErrorTracking.PromiseRejectionEventCoercer(),\n new ErrorTracking.ErrorEventCoercer(),\n new ErrorTracking.ErrorCoercer(),\n new ErrorTracking.EventCoercer(),\n new ErrorTracking.ObjectCoercer(),\n new ErrorTracking.StringCoercer(),\n new ErrorTracking.PrimitiveCoercer(),\n ],\n [ErrorTracking.chromeStackLineParser, ErrorTracking.geckoStackLineParser]\n )\n}\nexport class PostHogExceptions {\n private readonly _instance: PostHog\n private _suppressionRules: ErrorTrackingSuppressionRule[] = []\n private _errorPropertiesBuilder: ErrorTracking.ErrorPropertiesBuilder = buildErrorPropertiesBuilder()\n\n constructor(instance: PostHog) {\n this._instance = instance\n this._suppressionRules = this._instance.persistence?.get_property(ERROR_TRACKING_SUPPRESSION_RULES) ?? []\n }\n\n onRemoteConfig(response: RemoteConfig) {\n const suppressionRules = response.errorTracking?.suppressionRules ?? []\n const captureExtensionExceptions = response.errorTracking?.captureExtensionExceptions\n\n // store this in-memory in case persistence is disabled\n this._suppressionRules = suppressionRules\n\n if (this._instance.persistence) {\n this._instance.persistence.register({\n [ERROR_TRACKING_SUPPRESSION_RULES]: this._suppressionRules,\n [ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS]: captureExtensionExceptions,\n })\n }\n }\n\n private get _captureExtensionExceptions() {\n const enabled_server_side = !!this._instance.get_property(ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS)\n const enabled_client_side = this._instance.config.error_tracking.captureExtensionExceptions\n return enabled_client_side ?? enabled_server_side ?? false\n }\n\n buildProperties(\n input: unknown,\n metadata?: { handled?: boolean; syntheticException?: Error }\n ): ErrorTracking.ErrorProperties {\n return this._errorPropertiesBuilder.buildFromUnknown(input, {\n syntheticException: metadata?.syntheticException,\n mechanism: {\n handled: metadata?.handled,\n },\n })\n }\n\n sendExceptionEvent(properties: Properties): CaptureResult | undefined {\n const exceptionList = properties.$exception_list\n\n if (this._isExceptionList(exceptionList)) {\n if (this._matchesSuppressionRule(exceptionList)) {\n logger.info('Skipping exception capture because a suppression rule matched')\n return\n }\n\n if (!this._captureExtensionExceptions && this._isExtensionException(exceptionList)) {\n logger.info('Skipping exception capture because it was thrown by an extension')\n return\n }\n\n if (\n !this._instance.config.error_tracking.__capturePostHogExceptions &&\n this._isPostHogException(exceptionList)\n ) {\n logger.info('Skipping exception capture because it was thrown by the PostHog SDK')\n return\n }\n }\n\n return this._instance.capture('$exception', properties, {\n _noTruncate: true,\n _batchKey: 'exceptionEvent',\n })\n }\n\n private _matchesSuppressionRule(exceptionList: ErrorTracking.ExceptionList): boolean {\n if (exceptionList.length === 0) {\n return false\n }\n\n const exceptionValues = exceptionList.reduce(\n (acc, { type, value }) => {\n if (isString(type) && type.length > 0) {\n acc['$exception_types'].push(type)\n }\n if (isString(value) && value.length > 0) {\n acc['$exception_values'].push(value)\n }\n return acc\n },\n {\n $exception_types: [] as string[],\n $exception_values: [] as string[],\n }\n )\n\n return this._suppressionRules.some((rule) => {\n const results = rule.values.map((v) => {\n const compare = propertyComparisons[v.operator]\n const targets = isArray(v.value) ? v.value : [v.value]\n const values = exceptionValues[v.key] ?? []\n return targets.length > 0 ? compare(targets, values) : false\n })\n return rule.type === 'OR' ? results.some(Boolean) : results.every(Boolean)\n })\n }\n\n private _isExtensionException(exceptionList: ErrorTracking.ExceptionList): boolean {\n const frames = exceptionList.flatMap((e) => e.stacktrace?.frames ?? [])\n return frames.some((f) => f.filename && f.filename.startsWith('chrome-extension://'))\n }\n\n private _isPostHogException(exceptionList: ErrorTracking.ExceptionList): boolean {\n if (exceptionList.length > 0) {\n const exception = exceptionList[0]\n const frames = exception.stacktrace?.frames ?? []\n const lastFrame = frames[frames.length - 1]\n return lastFrame?.filename?.includes('posthog.com/static') ?? false\n }\n\n return false\n }\n\n private _isExceptionList(candidate: unknown): candidate is ErrorTracking.ExceptionList {\n return !isNullish(candidate) && isArray(candidate)\n }\n}\n","import { SessionIdManager } from '../sessionid'\nimport { patch } from '../extensions/replay/rrweb-plugins/patch'\nimport { assignableWindow, window } from '../utils/globals'\nimport { COOKIELESS_SENTINEL_VALUE } from '../constants'\nimport { isArray } from '@posthog/core'\n\nconst addTracingHeaders = (\n hostnames: string[],\n distinctId: string,\n sessionManager: SessionIdManager | undefined,\n req: Request\n) => {\n let reqHostname: string\n try {\n // we don't need to support IE11 here\n // eslint-disable-next-line compat/compat\n reqHostname = new URL(req.url).hostname\n } catch {\n // If the URL is invalid, we skip adding tracing headers\n return\n }\n if (isArray(hostnames) && !hostnames.includes(reqHostname)) {\n // Skip if the hostname is not in the list (also skip if hostnames is not an array,\n // because in the earliest version of this __add_tracing_headers was a bool)\n return\n }\n\n if (sessionManager) {\n const { sessionId, windowId } = sessionManager.checkAndGetSessionAndWindowId(true)\n req.headers.set('X-POSTHOG-SESSION-ID', sessionId)\n req.headers.set('X-POSTHOG-WINDOW-ID', windowId)\n }\n if (distinctId !== COOKIELESS_SENTINEL_VALUE) {\n req.headers.set('X-POSTHOG-DISTINCT-ID', distinctId)\n }\n}\n\nconst patchFetch = (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager): (() => void) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return patch(window, 'fetch', (originalFetch: typeof fetch) => {\n return async function (url: URL | RequestInfo, init?: RequestInit | undefined) {\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url, init)\n\n addTracingHeaders(hostnames, distinctId, sessionManager, req)\n\n return originalFetch(req)\n }\n })\n}\n\nconst patchXHR = (hostnames: string[], distinctId: string, sessionManager?: SessionIdManager): (() => void) => {\n return patch(\n // we can assert this is present because we've checked previously\n window!.XMLHttpRequest.prototype,\n 'open',\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (originalOpen: typeof XMLHttpRequest.prototype.open) => {\n return function (\n method: string,\n url: string | URL,\n async = true,\n username?: string | null,\n password?: string | null\n ) {\n // because this function is returned in its actual context `this` _is_ an XMLHttpRequest\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const xhr = this as XMLHttpRequest\n\n // check IE earlier than this, we only initialize if Request is present\n // eslint-disable-next-line compat/compat\n const req = new Request(url)\n\n addTracingHeaders(hostnames, distinctId, sessionManager, req)\n\n return originalOpen.call(xhr, method, req.url, async, username, password)\n }\n }\n )\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nconst patchFns = {\n _patchFetch: patchFetch,\n _patchXHR: patchXHR,\n}\nassignableWindow.__PosthogExtensions__.tracingHeadersPatchFns = patchFns\n\n// we used to put tracingHeadersPatchFns on window, and now we put it on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put it directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.postHogTracingHeadersPatchFns = patchFns\n\nexport default patchFns\n","/*\n * Constants\n */\n\n/* PROPERTY KEYS */\n\n// This key is deprecated, but we want to check for it to see whether aliasing is allowed.\nexport const PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id'\nexport const DISTINCT_ID = 'distinct_id'\nexport const ALIAS_ID_KEY = '__alias'\nexport const CAMPAIGN_IDS_KEY = '__cmpns'\nexport const EVENT_TIMERS_KEY = '__timers'\nexport const AUTOCAPTURE_DISABLED_SERVER_SIDE = '$autocapture_disabled_server_side'\nexport const HEATMAPS_ENABLED_SERVER_SIDE = '$heatmaps_enabled_server_side'\nexport const EXCEPTION_CAPTURE_ENABLED_SERVER_SIDE = '$exception_capture_enabled_server_side'\nexport const ERROR_TRACKING_SUPPRESSION_RULES = '$error_tracking_suppression_rules'\nexport const ERROR_TRACKING_CAPTURE_EXTENSION_EXCEPTIONS = '$error_tracking_capture_extension_exceptions'\nexport const WEB_VITALS_ENABLED_SERVER_SIDE = '$web_vitals_enabled_server_side'\nexport const DEAD_CLICKS_ENABLED_SERVER_SIDE = '$dead_clicks_enabled_server_side'\nexport const WEB_VITALS_ALLOWED_METRICS = '$web_vitals_allowed_metrics'\nexport const SESSION_RECORDING_REMOTE_CONFIG = '$session_recording_remote_config'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_ENABLED_SERVER_SIDE = '$session_recording_enabled_server_side'\n// @deprecated can be removed along with eager loaded replay\nexport const CONSOLE_LOG_RECORDING_ENABLED_SERVER_SIDE = '$console_log_recording_enabled_server_side'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_NETWORK_PAYLOAD_CAPTURE = '$session_recording_network_payload_capture'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_MASKING = '$session_recording_masking'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_CANVAS_RECORDING = '$session_recording_canvas_recording'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_SAMPLE_RATE = '$replay_sample_rate'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_MINIMUM_DURATION = '$replay_minimum_duration'\n// @deprecated can be removed along with eager loaded replay\nexport const SESSION_RECORDING_SCRIPT_CONFIG = '$replay_script_config'\nexport const SESSION_RECORDING_OVERRIDE_SAMPLING = '$replay_override_sampling'\nexport const SESSION_RECORDING_OVERRIDE_LINKED_FLAG = '$replay_override_linked_flag'\nexport const SESSION_RECORDING_OVERRIDE_URL_TRIGGER = '$replay_override_url_trigger'\nexport const SESSION_RECORDING_OVERRIDE_EVENT_TRIGGER = '$replay_override_event_trigger'\nexport const SESSION_ID = '$sesid'\nexport const SESSION_RECORDING_IS_SAMPLED = '$session_is_sampled'\nexport const SESSION_RECORDING_PAST_MINIMUM_DURATION = '$session_past_minimum_duration'\nexport const SESSION_RECORDING_URL_TRIGGER_ACTIVATED_SESSION = '$session_recording_url_trigger_activated_session'\nexport const SESSION_RECORDING_EVENT_TRIGGER_ACTIVATED_SESSION = '$session_recording_event_trigger_activated_session'\nexport const ENABLED_FEATURE_FLAGS = '$enabled_feature_flags'\nexport const PERSISTENCE_EARLY_ACCESS_FEATURES = '$early_access_features'\nexport const PERSISTENCE_FEATURE_FLAG_DETAILS = '$feature_flag_details'\nexport const STORED_PERSON_PROPERTIES_KEY = '$stored_person_properties'\nexport const STORED_GROUP_PROPERTIES_KEY = '$stored_group_properties'\nexport const SURVEYS = '$surveys'\nexport const SURVEYS_ACTIVATED = '$surveys_activated'\nexport const FLAG_CALL_REPORTED = '$flag_call_reported'\nexport const USER_STATE = '$user_state'\nexport const CLIENT_SESSION_PROPS = '$client_session_props'\nexport const CAPTURE_RATE_LIMIT = '$capture_rate_limit'\n\n/** @deprecated Delete this when INITIAL_PERSON_INFO has been around for long enough to ignore backwards compat */\nexport const INITIAL_CAMPAIGN_PARAMS = '$initial_campaign_params'\n/** @deprecated Delete this when INITIAL_PERSON_INFO has been around for long enough to ignore backwards compat */\nexport const INITIAL_REFERRER_INFO = '$initial_referrer_info'\nexport const INITIAL_PERSON_INFO = '$initial_person_info'\nexport const ENABLE_PERSON_PROCESSING = '$epp'\nexport const TOOLBAR_ID = '__POSTHOG_TOOLBAR__'\nexport const TOOLBAR_CONTAINER_CLASS = 'toolbar-global-fade-container'\n\n/**\n * PREVIEW - MAY CHANGE WITHOUT WARNING - DO NOT USE IN PRODUCTION\n * Sentinel value for distinct id, device id, session id. Signals that the server should generate the value\n * */\nexport const COOKIELESS_SENTINEL_VALUE = '$posthog_cookieless'\nexport const COOKIELESS_MODE_FLAG_PROPERTY = '$cookieless_mode'\n\nexport const WEB_EXPERIMENTS = '$web_experiments'\n\n// These are properties that are reserved and will not be automatically included in events\nexport const PERSISTENCE_RESERVED_PROPERTIES = [\n PEOPLE_DISTINCT_ID_KEY,\n ALIAS_ID_KEY,\n CAMPAIGN_IDS_KEY,\n EVENT_TIMERS_KEY,\n SESSION_RECORDING_ENABLED_SERVER_SIDE,\n HEATMAPS_ENABLED_SERVER_SIDE,\n SESSION_ID,\n ENABLED_FEATURE_FLAGS,\n ERROR_TRACKING_SUPPRESSION_RULES,\n USER_STATE,\n PERSISTENCE_EARLY_ACCESS_FEATURES,\n PERSISTENCE_FEATURE_FLAG_DETAILS,\n STORED_GROUP_PROPERTIES_KEY,\n STORED_PERSON_PROPERTIES_KEY,\n SURVEYS,\n FLAG_CALL_REPORTED,\n CLIENT_SESSION_PROPS,\n CAPTURE_RATE_LIMIT,\n INITIAL_CAMPAIGN_PARAMS,\n INITIAL_REFERRER_INFO,\n ENABLE_PERSON_PROCESSING,\n INITIAL_PERSON_INFO,\n]\n\nexport const SURVEYS_REQUEST_TIMEOUT_MS = 10000\n","var t,e,n=function(){var t=self.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0];if(t&&t.responseStart>0&&t.responseStart<performance.now())return t},r=function(t){if(\"loading\"===document.readyState)return\"loading\";var e=n();if(e){if(t<e.domInteractive)return\"loading\";if(0===e.domContentLoadedEventStart||t<e.domContentLoadedEventStart)return\"dom-interactive\";if(0===e.domComplete||t<e.domComplete)return\"dom-content-loaded\"}return\"complete\"},i=function(t){var e=t.nodeName;return 1===t.nodeType?e.toLowerCase():e.toUpperCase().replace(/^#/,\"\")},a=function(t,e){var n=\"\";try{for(;t&&9!==t.nodeType;){var r=t,a=r.id?\"#\"+r.id:i(r)+(r.classList&&r.classList.value&&r.classList.value.trim()&&r.classList.value.trim().length?\".\"+r.classList.value.trim().replace(/\\s+/g,\".\"):\"\");if(n.length+a.length>(e||100)-1)return n||a;if(n=n?a+\">\"+n:a,r.id)break;t=r.parentNode}}catch(t){}return n},o=-1,c=function(){return o},u=function(t){addEventListener(\"pageshow\",(function(e){e.persisted&&(o=e.timeStamp,t(e))}),!0)},s=function(){var t=n();return t&&t.activationStart||0},f=function(t,e){var r=n(),i=\"navigate\";c()>=0?i=\"back-forward-cache\":r&&(document.prerendering||s()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":r.type&&(i=r.type.replace(/_/g,\"-\")));return{name:t,value:void 0===e?-1:e,rating:\"good\",delta:0,entries:[],id:\"v4-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},d=function(t,e,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var r=new PerformanceObserver((function(t){Promise.resolve().then((function(){e(t.getEntries())}))}));return r.observe(Object.assign({type:t,buffered:!0},n||{})),r}}catch(t){}},l=function(t,e,n,r){var i,a;return function(o){e.value>=0&&(o||r)&&((a=e.value-(i||0))||void 0===i)&&(i=e.value,e.delta=a,e.rating=function(t,e){return t>e[1]?\"poor\":t>e[0]?\"needs-improvement\":\"good\"}(e.value,n),t(e))}},m=function(t){requestAnimationFrame((function(){return requestAnimationFrame((function(){return t()}))}))},p=function(t){document.addEventListener(\"visibilitychange\",(function(){\"hidden\"===document.visibilityState&&t()}))},v=function(t){var e=!1;return function(){e||(t(),e=!0)}},g=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},T=function(t){\"hidden\"===document.visibilityState&&g>-1&&(g=\"visibilitychange\"===t.type?t.timeStamp:0,E())},y=function(){addEventListener(\"visibilitychange\",T,!0),addEventListener(\"prerenderingchange\",T,!0)},E=function(){removeEventListener(\"visibilitychange\",T,!0),removeEventListener(\"prerenderingchange\",T,!0)},S=function(){return g<0&&(g=h(),y(),u((function(){setTimeout((function(){g=h(),y()}),0)}))),{get firstHiddenTime(){return g}}},b=function(t){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return t()}),!0):t()},L=[1800,3e3],C=function(t,e){e=e||{},b((function(){var n,r=S(),i=f(\"FCP\"),a=d(\"paint\",(function(t){t.forEach((function(t){\"first-contentful-paint\"===t.name&&(a.disconnect(),t.startTime<r.firstHiddenTime&&(i.value=Math.max(t.startTime-s(),0),i.entries.push(t),n(!0)))}))}));a&&(n=l(t,i,L,e.reportAllChanges),u((function(r){i=f(\"FCP\"),n=l(t,i,L,e.reportAllChanges),m((function(){i.value=performance.now()-r.timeStamp,n(!0)}))})))}))},M=[.1,.25],D=function(t,e){!function(t,e){e=e||{},C(v((function(){var n,r=f(\"CLS\",0),i=0,a=[],o=function(t){t.forEach((function(t){if(!t.hadRecentInput){var e=a[0],n=a[a.length-1];i&&t.startTime-n.startTime<1e3&&t.startTime-e.startTime<5e3?(i+=t.value,a.push(t)):(i=t.value,a=[t])}})),i>r.value&&(r.value=i,r.entries=a,n())},c=d(\"layout-shift\",o);c&&(n=l(t,r,M,e.reportAllChanges),p((function(){o(c.takeRecords()),n(!0)})),u((function(){i=0,r=f(\"CLS\",0),n=l(t,r,M,e.reportAllChanges),m((function(){return n()}))})),setTimeout(n,0))})))}((function(e){var n=function(t){var e,n={};if(t.entries.length){var i=t.entries.reduce((function(t,e){return t&&t.value>e.value?t:e}));if(i&&i.sources&&i.sources.length){var o=(e=i.sources).find((function(t){return t.node&&1===t.node.nodeType}))||e[0];o&&(n={largestShiftTarget:a(o.node),largestShiftTime:i.startTime,largestShiftValue:i.value,largestShiftSource:o,largestShiftEntry:i,loadState:r(i.startTime)})}}return Object.assign(t,{attribution:n})}(e);t(n)}),e)},w=function(t,e){C((function(e){var i=function(t){var e={timeToFirstByte:0,firstByteToFCP:t.value,loadState:r(c())};if(t.entries.length){var i=n(),a=t.entries[t.entries.length-1];if(i){var o=i.activationStart||0,u=Math.max(0,i.responseStart-o);e={timeToFirstByte:u,firstByteToFCP:t.value-u,loadState:r(t.entries[0].startTime),navigationEntry:i,fcpEntry:a}}}return Object.assign(t,{attribution:e})}(e);t(i)}),e)},x=0,I=1/0,k=0,A=function(t){t.forEach((function(t){t.interactionId&&(I=Math.min(I,t.interactionId),k=Math.max(k,t.interactionId),x=k?(k-I)/7+1:0)}))},F=function(){return t?x:performance.interactionCount||0},P=function(){\"interactionCount\"in performance||t||(t=d(\"event\",A,{type:\"event\",buffered:!0,durationThreshold:0}))},B=[],O=new Map,R=0,j=function(){var t=Math.min(B.length-1,Math.floor((F()-R)/50));return B[t]},q=[],H=function(t){if(q.forEach((function(e){return e(t)})),t.interactionId||\"first-input\"===t.entryType){var e=B[B.length-1],n=O.get(t.interactionId);if(n||B.length<10||t.duration>e.latency){if(n)t.duration>n.latency?(n.entries=[t],n.latency=t.duration):t.duration===n.latency&&t.startTime===n.entries[0].startTime&&n.entries.push(t);else{var r={id:t.interactionId,latency:t.duration,entries:[t]};O.set(r.id,r),B.push(r)}B.sort((function(t,e){return e.latency-t.latency})),B.length>10&&B.splice(10).forEach((function(t){return O.delete(t.id)}))}}},N=function(t){var e=self.requestIdleCallback||self.setTimeout,n=-1;return t=v(t),\"hidden\"===document.visibilityState?t():(n=e(t),p(t)),n},W=[200,500],z=function(t,e){\"PerformanceEventTiming\"in self&&\"interactionId\"in PerformanceEventTiming.prototype&&(e=e||{},b((function(){var n;P();var r,i=f(\"INP\"),a=function(t){N((function(){t.forEach(H);var e=j();e&&e.latency!==i.value&&(i.value=e.latency,i.entries=e.entries,r())}))},o=d(\"event\",a,{durationThreshold:null!==(n=e.durationThreshold)&&void 0!==n?n:40});r=l(t,i,W,e.reportAllChanges),o&&(o.observe({type:\"first-input\",buffered:!0}),p((function(){a(o.takeRecords()),r(!0)})),u((function(){R=F(),B.length=0,O.clear(),i=f(\"INP\"),r=l(t,i,W,e.reportAllChanges)})))})))},U=[],V=[],_=0,G=new WeakMap,J=new Map,K=-1,Q=function(t){U=U.concat(t),X()},X=function(){K<0&&(K=N(Y))},Y=function(){J.size>10&&J.forEach((function(t,e){O.has(e)||J.delete(e)}));var t=B.map((function(t){return G.get(t.entries[0])})),e=V.length-50;V=V.filter((function(n,r){return r>=e||t.includes(n)}));for(var n=new Set,r=0;r<V.length;r++){var i=V[r];nt(i.startTime,i.processingEnd).forEach((function(t){n.add(t)}))}var a=U.length-1-50;U=U.filter((function(t,e){return t.startTime>_&&e>a||n.has(t)})),K=-1};q.push((function(t){t.interactionId&&t.target&&!J.has(t.interactionId)&&J.set(t.interactionId,t.target)}),(function(t){var e,n=t.startTime+t.duration;_=Math.max(_,t.processingEnd);for(var r=V.length-1;r>=0;r--){var i=V[r];if(Math.abs(n-i.renderTime)<=8){(e=i).startTime=Math.min(t.startTime,e.startTime),e.processingStart=Math.min(t.processingStart,e.processingStart),e.processingEnd=Math.max(t.processingEnd,e.processingEnd),e.entries.push(t);break}}e||(e={startTime:t.startTime,processingStart:t.processingStart,processingEnd:t.processingEnd,renderTime:n,entries:[t]},V.push(e)),(t.interactionId||\"first-input\"===t.entryType)&&G.set(t,e),X()}));var Z,$,tt,et,nt=function(t,e){for(var n,r=[],i=0;n=U[i];i++)if(!(n.startTime+n.duration<t)){if(n.startTime>e)break;r.push(n)}return r},rt=function(t,n){e||(e=d(\"long-animation-frame\",Q)),z((function(e){var n=function(t){var e=t.entries[0],n=G.get(e),i=e.processingStart,o=n.processingEnd,c=n.entries.sort((function(t,e){return t.processingStart-e.processingStart})),u=nt(e.startTime,o),s=t.entries.find((function(t){return t.target})),f=s&&s.target||J.get(e.interactionId),d=[e.startTime+e.duration,o].concat(u.map((function(t){return t.startTime+t.duration}))),l=Math.max.apply(Math,d),m={interactionTarget:a(f),interactionTargetElement:f,interactionType:e.name.startsWith(\"key\")?\"keyboard\":\"pointer\",interactionTime:e.startTime,nextPaintTime:l,processedEventEntries:c,longAnimationFrameEntries:u,inputDelay:i-e.startTime,processingDuration:o-i,presentationDelay:Math.max(l-o,0),loadState:r(e.startTime)};return Object.assign(t,{attribution:m})}(e);t(n)}),n)},it=[2500,4e3],at={},ot=function(t,e){!function(t,e){e=e||{},b((function(){var n,r=S(),i=f(\"LCP\"),a=function(t){e.reportAllChanges||(t=t.slice(-1)),t.forEach((function(t){t.startTime<r.firstHiddenTime&&(i.value=Math.max(t.startTime-s(),0),i.entries=[t],n())}))},o=d(\"largest-contentful-paint\",a);if(o){n=l(t,i,it,e.reportAllChanges);var c=v((function(){at[i.id]||(a(o.takeRecords()),o.disconnect(),at[i.id]=!0,n(!0))}));[\"keydown\",\"click\"].forEach((function(t){addEventListener(t,(function(){return N(c)}),{once:!0,capture:!0})})),p(c),u((function(r){i=f(\"LCP\"),n=l(t,i,it,e.reportAllChanges),m((function(){i.value=performance.now()-r.timeStamp,at[i.id]=!0,n(!0)}))}))}}))}((function(e){var r=function(t){var e={timeToFirstByte:0,resourceLoadDelay:0,resourceLoadDuration:0,elementRenderDelay:t.value};if(t.entries.length){var r=n();if(r){var i=r.activationStart||0,o=t.entries[t.entries.length-1],c=o.url&&performance.getEntriesByType(\"resource\").filter((function(t){return t.name===o.url}))[0],u=Math.max(0,r.responseStart-i),s=Math.max(u,c?(c.requestStart||c.startTime)-i:0),f=Math.max(s,c?c.responseEnd-i:0),d=Math.max(f,o.startTime-i);e={element:a(o.element),timeToFirstByte:u,resourceLoadDelay:s-u,resourceLoadDuration:f-s,elementRenderDelay:d-f,navigationEntry:r,lcpEntry:o},o.url&&(e.url=o.url),c&&(e.lcpResourceEntry=c)}}return Object.assign(t,{attribution:e})}(e);t(r)}),e)},ct=[800,1800],ut=function t(e){document.prerendering?b((function(){return t(e)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return t(e)}),!0):setTimeout(e,0)},st=function(t,e){e=e||{};var r=f(\"TTFB\"),i=l(t,r,ct,e.reportAllChanges);ut((function(){var a=n();a&&(r.value=Math.max(a.responseStart-s(),0),r.entries=[a],i(!0),u((function(){r=f(\"TTFB\",0),(i=l(t,r,ct,e.reportAllChanges))(!0)})))}))},ft=function(t,e){st((function(e){var n=function(t){var e={waitingDuration:0,cacheDuration:0,dnsDuration:0,connectionDuration:0,requestDuration:0};if(t.entries.length){var n=t.entries[0],r=n.activationStart||0,i=Math.max((n.workerStart||n.fetchStart)-r,0),a=Math.max(n.domainLookupStart-r,0),o=Math.max(n.connectStart-r,0),c=Math.max(n.connectEnd-r,0);e={waitingDuration:i,cacheDuration:a-i,dnsDuration:o-a,connectionDuration:c-o,requestDuration:t.value-c,navigationEntry:n}}return Object.assign(t,{attribution:e})}(e);t(n)}),e)},dt={passive:!0,capture:!0},lt=new Date,mt=function(t,e){Z||(Z=e,$=t,tt=new Date,gt(removeEventListener),pt())},pt=function(){if($>=0&&$<tt-lt){var t={entryType:\"first-input\",name:Z.type,target:Z.target,cancelable:Z.cancelable,startTime:Z.timeStamp,processingStart:Z.timeStamp+$};et.forEach((function(e){e(t)})),et=[]}},vt=function(t){if(t.cancelable){var e=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;\"pointerdown\"==t.type?function(t,e){var n=function(){mt(t,e),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",n,dt),removeEventListener(\"pointercancel\",r,dt)};addEventListener(\"pointerup\",n,dt),addEventListener(\"pointercancel\",r,dt)}(e,t):mt(e,t)}},gt=function(t){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(e){return t(e,vt,dt)}))},ht=[100,300],Tt=function(t,e){e=e||{},b((function(){var n,r=S(),i=f(\"FID\"),a=function(t){t.startTime<r.firstHiddenTime&&(i.value=t.processingStart-t.startTime,i.entries.push(t),n(!0))},o=function(t){t.forEach(a)},c=d(\"first-input\",o);n=l(t,i,ht,e.reportAllChanges),c&&(p(v((function(){o(c.takeRecords()),c.disconnect()}))),u((function(){var r;i=f(\"FID\"),n=l(t,i,ht,e.reportAllChanges),et=[],$=-1,Z=null,gt(addEventListener),r=a,et.push(r),pt()})))}))},yt=function(t,e){Tt((function(e){var n=function(t){var e=t.entries[0],n={eventTarget:a(e.target),eventType:e.name,eventTime:e.startTime,eventEntry:e,loadState:r(e.startTime)};return Object.assign(t,{attribution:n})}(e);t(n)}),e)};export{M as CLSThresholds,L as FCPThresholds,ht as FIDThresholds,W as INPThresholds,it as LCPThresholds,ct as TTFBThresholds,D as onCLS,w as onFCP,yt as onFID,rt as onINP,ot as onLCP,ft as onTTFB};\n","import { onINP, onLCP, onCLS, onFCP } from 'web-vitals/attribution'\nimport { assignableWindow } from '../utils/globals'\n\nconst postHogWebVitalsCallbacks = {\n onLCP,\n onCLS,\n onFCP,\n onINP,\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.postHogWebVitalsCallbacks = postHogWebVitalsCallbacks\n\n// we used to put posthogWebVitalsCallbacks on window, and now we put it on __PosthogExtensions__\n// but that means that old clients which lazily load this extension are looking in the wrong place\n// yuck,\n// so we also put it directly on the window\n// when 1.161.1 is the oldest version seen in production we can remove this\nassignableWindow.postHogWebVitalsCallbacks = postHogWebVitalsCallbacks\n\nexport default postHogWebVitalsCallbacks\n","import { addEventListener, each, extend } from './utils'\nimport {\n autocaptureCompatibleElements,\n getClassNames,\n getDirectAndNestedSpanText,\n getElementsChainString,\n getEventTarget,\n getSafeText,\n isAngularStyleAttr,\n isSensitiveElement,\n makeSafeText,\n shouldCaptureDomEvent,\n shouldCaptureElement,\n shouldCaptureRageclick,\n shouldCaptureValue,\n splitClassString,\n} from './autocapture-utils'\n\nimport RageClick from './extensions/rageclick'\nimport { AutocaptureConfig, COPY_AUTOCAPTURE_EVENT, EventName, Properties, RemoteConfig } from './types'\nimport { PostHog } from './posthog-core'\nimport { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants'\n\nimport { isBoolean, isFunction, isNull, isObject } from '@posthog/core'\nimport { createLogger } from './utils/logger'\nimport { document, window } from './utils/globals'\nimport { convertToURL } from './utils/request-utils'\nimport { isDocumentFragment, isElementNode, isTag, isTextNode } from './utils/element-utils'\nimport { includes } from '@posthog/core'\n\nconst logger = createLogger('[AutoCapture]')\n\nfunction limitText(length: number, text: string): string {\n if (text.length > length) {\n return text.slice(0, length) + '...'\n }\n return text\n}\n\nexport function getAugmentPropertiesFromElement(elem: Element): Properties {\n const shouldCaptureEl = shouldCaptureElement(elem)\n if (!shouldCaptureEl) {\n return {}\n }\n\n const props: Properties = {}\n\n each(elem.attributes, function (attr: Attr) {\n if (attr.name && attr.name.indexOf('data-ph-capture-attribute') === 0) {\n const propertyKey = attr.name.replace('data-ph-capture-attribute-', '')\n const propertyValue = attr.value\n if (propertyKey && propertyValue && shouldCaptureValue(propertyValue)) {\n props[propertyKey] = propertyValue\n }\n }\n })\n\n return props\n}\n\nexport function previousElementSibling(el: Element): Element | null {\n if (el.previousElementSibling) {\n return el.previousElementSibling\n }\n let _el: Element | null = el\n do {\n _el = _el.previousSibling as Element | null // resolves to ChildNode->Node, which is Element's parent class\n } while (_el && !isElementNode(_el))\n return _el\n}\n\nexport function getDefaultProperties(eventType: string): Properties {\n return {\n $event_type: eventType,\n $ce_version: 1,\n }\n}\n\nexport function getPropertiesFromElement(\n elem: Element,\n maskAllAttributes: boolean,\n maskText: boolean,\n elementAttributeIgnorelist: string[] | undefined\n): Properties {\n const tag_name = elem.tagName.toLowerCase()\n const props: Properties = {\n tag_name: tag_name,\n }\n if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {\n if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {\n props['$el_text'] = limitText(1024, getDirectAndNestedSpanText(elem))\n } else {\n props['$el_text'] = limitText(1024, getSafeText(elem))\n }\n }\n\n const classes = getClassNames(elem)\n if (classes.length > 0)\n props['classes'] = classes.filter(function (c) {\n return c !== ''\n })\n\n // capture the deny list here because this not-a-class class makes it tricky to use this.config in the function below\n each(elem.attributes, function (attr: Attr) {\n // Only capture attributes we know are safe\n if (isSensitiveElement(elem) && ['name', 'id', 'class', 'aria-label'].indexOf(attr.name) === -1) return\n\n if (elementAttributeIgnorelist?.includes(attr.name)) return\n\n if (!maskAllAttributes && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {\n let value = attr.value\n if (attr.name === 'class') {\n // html attributes can _technically_ contain linebreaks,\n // but we're very intolerant of them in the class string,\n // so we strip them.\n value = splitClassString(value).join(' ')\n }\n props['attr__' + attr.name] = limitText(1024, value)\n }\n })\n\n let nthChild = 1\n let nthOfType = 1\n let currentElem: Element | null = elem\n while ((currentElem = previousElementSibling(currentElem))) {\n // eslint-disable-line no-cond-assign\n nthChild++\n if (currentElem.tagName === elem.tagName) {\n nthOfType++\n }\n }\n props['nth_child'] = nthChild\n props['nth_of_type'] = nthOfType\n\n return props\n}\n\nexport function autocapturePropertiesForElement(\n target: Element,\n {\n e,\n maskAllElementAttributes,\n maskAllText,\n elementAttributeIgnoreList,\n elementsChainAsString,\n }: {\n e: Event\n maskAllElementAttributes: boolean\n maskAllText: boolean\n elementAttributeIgnoreList?: string[] | undefined\n elementsChainAsString: boolean\n }\n): { props: Properties; explicitNoCapture?: boolean } {\n const targetElementList = [target]\n let curEl = target\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n targetElementList.push(curEl.parentNode as Element)\n curEl = curEl.parentNode as Element\n }\n\n const elementsJson: Properties[] = []\n const autocaptureAugmentProperties: Properties = {}\n let href: string | false = false\n let explicitNoCapture = false\n\n each(targetElementList, (el) => {\n const shouldCaptureEl = shouldCaptureElement(el)\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href')\n href = shouldCaptureEl && href && shouldCaptureValue(href) && href\n }\n\n // allow users to programmatically prevent capturing of elements by adding class 'ph-no-capture'\n const classes = getClassNames(el)\n if (includes(classes, 'ph-no-capture')) {\n explicitNoCapture = true\n }\n\n elementsJson.push(\n getPropertiesFromElement(el, maskAllElementAttributes, maskAllText, elementAttributeIgnoreList)\n )\n\n const augmentProperties = getAugmentPropertiesFromElement(el)\n extend(autocaptureAugmentProperties, augmentProperties)\n })\n\n if (explicitNoCapture) {\n return { props: {}, explicitNoCapture }\n }\n\n if (!maskAllText) {\n // if the element is a button or anchor tag get the span text from any\n // children and include it as/with the text property on the parent element\n if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'button') {\n elementsJson[0]['$el_text'] = getDirectAndNestedSpanText(target)\n } else {\n elementsJson[0]['$el_text'] = getSafeText(target)\n }\n }\n\n let externalHref: string | undefined\n if (href) {\n elementsJson[0]['attr__href'] = href\n const hrefHost = convertToURL(href)?.host\n const locationHost = window?.location?.host\n if (hrefHost && locationHost && hrefHost !== locationHost) {\n externalHref = href\n }\n }\n\n const props = extend(\n getDefaultProperties(e.type),\n // Sending \"$elements\" is deprecated. Only one client on US cloud uses this.\n !elementsChainAsString ? { $elements: elementsJson } : {},\n // Always send $elements_chain, as it's needed downstream in site app filtering\n { $elements_chain: getElementsChainString(elementsJson) },\n elementsJson[0]?.['$el_text'] ? { $el_text: elementsJson[0]?.['$el_text'] } : {},\n externalHref && e.type === 'click' ? { $external_click_url: externalHref } : {},\n autocaptureAugmentProperties\n )\n\n return { props }\n}\n\nexport class Autocapture {\n instance: PostHog\n _initialized: boolean = false\n _isDisabledServerSide: boolean | null = null\n _elementSelectors: Set<string> | null\n rageclicks: RageClick\n _elementsChainAsString = false\n\n constructor(instance: PostHog) {\n this.instance = instance\n this.rageclicks = new RageClick(instance.config.rageclick)\n this._elementSelectors = null\n }\n\n private get _config(): AutocaptureConfig {\n const config = isObject(this.instance.config.autocapture) ? this.instance.config.autocapture : {}\n // precompile the regex\n config.url_allowlist = config.url_allowlist?.map((url) => new RegExp(url))\n config.url_ignorelist = config.url_ignorelist?.map((url) => new RegExp(url))\n return config\n }\n\n _addDomEventHandlers(): void {\n if (!this.isBrowserSupported()) {\n logger.info('Disabling Automatic Event Collection because this browser is not supported')\n return\n }\n\n if (!window || !document) {\n return\n }\n\n const handler = (e: Event) => {\n e = e || window?.event\n try {\n this._captureEvent(e)\n } catch (error) {\n logger.error('Failed to capture event', error)\n }\n }\n\n addEventListener(document, 'submit', handler, { capture: true })\n addEventListener(document, 'change', handler, { capture: true })\n addEventListener(document, 'click', handler, { capture: true })\n\n if (this._config.capture_copied_text) {\n const copiedTextHandler = (e: Event) => {\n e = e || window?.event\n this._captureEvent(e, COPY_AUTOCAPTURE_EVENT)\n }\n\n addEventListener(document, 'copy', copiedTextHandler, { capture: true })\n addEventListener(document, 'cut', copiedTextHandler, { capture: true })\n }\n }\n\n public startIfEnabled() {\n if (this.isEnabled && !this._initialized) {\n this._addDomEventHandlers()\n this._initialized = true\n }\n }\n\n public onRemoteConfig(response: RemoteConfig) {\n if (response.elementsChainAsString) {\n this._elementsChainAsString = response.elementsChainAsString\n }\n\n if (this.instance.persistence) {\n this.instance.persistence.register({\n [AUTOCAPTURE_DISABLED_SERVER_SIDE]: !!response['autocapture_opt_out'],\n })\n }\n // store this in-memory in case persistence is disabled\n this._isDisabledServerSide = !!response['autocapture_opt_out']\n this.startIfEnabled()\n }\n\n public setElementSelectors(selectors: Set<string>): void {\n this._elementSelectors = selectors\n }\n\n public getElementSelectors(element: Element | null): string[] | null {\n const elementSelectors: string[] = []\n\n this._elementSelectors?.forEach((selector) => {\n const matchedElements = document?.querySelectorAll(selector)\n matchedElements?.forEach((matchedElement: Element) => {\n if (element === matchedElement) {\n elementSelectors.push(selector)\n }\n })\n })\n\n return elementSelectors\n }\n\n public get isEnabled(): boolean {\n const persistedServerDisabled = this.instance.persistence?.props[AUTOCAPTURE_DISABLED_SERVER_SIDE]\n const memoryDisabled = this._isDisabledServerSide\n\n if (isNull(memoryDisabled) && !isBoolean(persistedServerDisabled) && !this.instance._shouldDisableFlags()) {\n // We only enable if we know that the server has not disabled it (unless /flags is disabled)\n return false\n }\n\n const disabledServer = this._isDisabledServerSide ?? !!persistedServerDisabled\n const disabledClient = !this.instance.config.autocapture\n return !disabledClient && !disabledServer\n }\n\n private _captureEvent(e: Event, eventName: EventName = '$autocapture'): boolean | void {\n if (!this.isEnabled) {\n return\n }\n\n /*** Don't mess with this code without running IE8 tests on it ***/\n let target = getEventTarget(e)\n if (isTextNode(target)) {\n // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = (target.parentNode || null) as Element | null\n }\n\n if (eventName === '$autocapture' && e.type === 'click' && e instanceof MouseEvent) {\n if (\n !!this.instance.config.rageclick &&\n this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime())\n ) {\n if (shouldCaptureRageclick(target, this.instance.config.rageclick)) {\n this._captureEvent(e, '$rageclick')\n }\n }\n }\n\n const isCopyAutocapture = eventName === COPY_AUTOCAPTURE_EVENT\n if (\n target &&\n shouldCaptureDomEvent(\n target,\n e,\n this._config,\n // mostly this method cares about the target element, but in the case of copy events,\n // we want some of the work this check does without insisting on the target element's type\n isCopyAutocapture,\n // we also don't want to restrict copy checks to clicks,\n // so we pass that knowledge in here, rather than add the logic inside the check\n isCopyAutocapture ? ['copy', 'cut'] : undefined\n )\n ) {\n const { props, explicitNoCapture } = autocapturePropertiesForElement(target, {\n e,\n maskAllElementAttributes: this.instance.config.mask_all_element_attributes,\n maskAllText: this.instance.config.mask_all_text,\n elementAttributeIgnoreList: this._config.element_attribute_ignorelist,\n elementsChainAsString: this._elementsChainAsString,\n })\n\n if (explicitNoCapture) {\n return false\n }\n\n const elementSelectors = this.getElementSelectors(target)\n if (elementSelectors && elementSelectors.length > 0) {\n props['$element_selectors'] = elementSelectors\n }\n\n if (eventName === COPY_AUTOCAPTURE_EVENT) {\n // you can't read the data from the clipboard event,\n // but you can guess that you can read it from the window's current selection\n const selectedContent = makeSafeText(window?.getSelection()?.toString())\n const clipType = (e as ClipboardEvent).type || 'clipboard'\n if (!selectedContent) {\n return false\n }\n props['$selected_content'] = selectedContent\n props['$copy_type'] = clipType\n }\n\n this.instance.capture(eventName, props)\n return true\n }\n }\n\n isBrowserSupported(): boolean {\n return isFunction(document?.querySelectorAll)\n }\n}\n","/**\n * adapted from https://github.com/getsentry/sentry-javascript/blob/72751dacb88c5b970d8bac15052ee8e09b28fd5d/packages/browser-utils/src/getNativeImplementation.ts#L27\n * and https://github.com/PostHog/rrweb/blob/804380afbb1b9bed70b8792cb5a25d827f5c0cb5/packages/utils/src/index.ts#L31\n * after a number of performance reports from Angular users\n */\n\nimport { AssignableWindow } from './globals'\nimport { isAngularZonePresent } from './type-utils'\nimport { isFunction, isNativeFunction } from '@posthog/core'\nimport { logger } from './logger'\n\ninterface NativeImplementationsCache {\n MutationObserver: typeof MutationObserver\n}\n\nconst cachedImplementations: Partial<NativeImplementationsCache> = {}\n\nexport function getNativeImplementation<T extends keyof NativeImplementationsCache>(\n name: T,\n assignableWindow: AssignableWindow\n): NativeImplementationsCache[T] {\n const cached = cachedImplementations[name]\n if (cached) {\n return cached\n }\n\n let impl = assignableWindow[name] as NativeImplementationsCache[T]\n\n if (isNativeFunction(impl) && !isAngularZonePresent()) {\n return (cachedImplementations[name] = impl.bind(assignableWindow) as NativeImplementationsCache[T])\n }\n\n const document = assignableWindow.document\n if (document && isFunction(document.createElement)) {\n try {\n const sandbox = document.createElement('iframe')\n sandbox.hidden = true\n document.head.appendChild(sandbox)\n const contentWindow = sandbox.contentWindow\n if (contentWindow && (contentWindow as any)[name]) {\n impl = (contentWindow as any)[name] as NativeImplementationsCache[T]\n }\n document.head.removeChild(sandbox)\n } catch (e) {\n // Could not create sandbox iframe, just use assignableWindow.xxx\n logger.warn(`Could not create sandbox iframe for ${name} check, bailing to assignableWindow.${name}: `, e)\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl || !isFunction(impl)) {\n return impl\n }\n\n return (cachedImplementations[name] = impl.bind(assignableWindow) as NativeImplementationsCache[T])\n}\n\nexport function getNativeMutationObserverImplementation(assignableWindow: AssignableWindow): typeof MutationObserver {\n return getNativeImplementation('MutationObserver', assignableWindow)\n}\n","import { assignableWindow, LazyLoadedDeadClicksAutocaptureInterface } from '../utils/globals'\nimport { PostHog } from '../posthog-core'\nimport { isNull, isNumber, isUndefined } from '@posthog/core'\nimport { autocaptureCompatibleElements, getEventTarget } from '../autocapture-utils'\nimport { DeadClickCandidate, DeadClicksAutoCaptureConfig, Properties } from '../types'\nimport { autocapturePropertiesForElement } from '../autocapture'\nimport { isElementInToolbar, isElementNode, isTag } from '../utils/element-utils'\nimport { getNativeMutationObserverImplementation } from '../utils/prototype-utils'\nimport { addEventListener } from '../utils'\n\nfunction asClick(event: MouseEvent): DeadClickCandidate | null {\n const eventTarget = getEventTarget(event)\n if (eventTarget) {\n return {\n node: eventTarget,\n originalEvent: event,\n timestamp: Date.now(),\n }\n }\n return null\n}\n\nfunction checkTimeout(value: number | undefined, thresholdMs: number) {\n return isNumber(value) && value >= thresholdMs\n}\n\nclass LazyLoadedDeadClicksAutocapture implements LazyLoadedDeadClicksAutocaptureInterface {\n private _mutationObserver: MutationObserver | undefined\n private _lastMutation: number | undefined\n private _lastSelectionChanged: number | undefined\n private _clicks: DeadClickCandidate[] = []\n private _checkClickTimer: number | undefined\n private _config: Required<DeadClicksAutoCaptureConfig>\n private _onCapture: (click: DeadClickCandidate, properties: Properties) => void\n\n private _defaultConfig = (defaultOnCapture: (click: DeadClickCandidate, properties: Properties) => void) => ({\n element_attribute_ignorelist: [],\n scroll_threshold_ms: 100,\n selection_change_threshold_ms: 100,\n mutation_threshold_ms: 2500,\n __onCapture: defaultOnCapture,\n })\n\n private _asRequiredConfig(providedConfig?: DeadClicksAutoCaptureConfig): Required<DeadClicksAutoCaptureConfig> {\n const defaultConfig = this._defaultConfig(providedConfig?.__onCapture || this._captureDeadClick.bind(this))\n return {\n element_attribute_ignorelist:\n providedConfig?.element_attribute_ignorelist ?? defaultConfig.element_attribute_ignorelist,\n scroll_threshold_ms: providedConfig?.scroll_threshold_ms ?? defaultConfig.scroll_threshold_ms,\n selection_change_threshold_ms:\n providedConfig?.selection_change_threshold_ms ?? defaultConfig.selection_change_threshold_ms,\n mutation_threshold_ms: providedConfig?.mutation_threshold_ms ?? defaultConfig.mutation_threshold_ms,\n __onCapture: defaultConfig.__onCapture,\n }\n }\n\n constructor(\n readonly instance: PostHog,\n config?: DeadClicksAutoCaptureConfig\n ) {\n this._config = this._asRequiredConfig(config)\n this._onCapture = this._config.__onCapture\n }\n\n start(observerTarget: Node) {\n this._startClickObserver()\n this._startScrollObserver()\n this._startSelectionChangedObserver()\n this._startMutationObserver(observerTarget)\n }\n\n private _startMutationObserver(observerTarget: Node) {\n if (!this._mutationObserver) {\n const NativeMutationObserver = getNativeMutationObserverImplementation(assignableWindow)\n this._mutationObserver = new NativeMutationObserver((mutations) => {\n this._onMutation(mutations)\n })\n this._mutationObserver.observe(observerTarget, {\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true,\n })\n }\n }\n\n stop() {\n this._mutationObserver?.disconnect()\n this._mutationObserver = undefined\n assignableWindow.removeEventListener('click', this._onClick)\n assignableWindow.removeEventListener('scroll', this._onScroll, { capture: true })\n assignableWindow.removeEventListener('selectionchange', this._onSelectionChange)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _onMutation(_mutations: MutationRecord[]): void {\n // we don't actually care about the content of the mutations, right now\n this._lastMutation = Date.now()\n }\n\n private _startClickObserver() {\n addEventListener(assignableWindow, 'click', this._onClick)\n }\n\n private _onClick = (event: Event): void => {\n const click = asClick(event as MouseEvent)\n if (!isNull(click) && !this._ignoreClick(click)) {\n this._clicks.push(click)\n }\n\n if (this._clicks.length && isUndefined(this._checkClickTimer)) {\n this._checkClickTimer = assignableWindow.setTimeout(() => {\n this._checkClicks()\n }, 1000)\n }\n }\n\n // `capture: true` is required to get scroll events for other scrollable elements\n // on the page, not just the window\n // see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#usecapture\n //\n // `passive: true` is used to tell the browser that the scroll event handler will not call `preventDefault()`\n // This allows the browser to optimize scrolling performance by not waiting for our handling of the scroll event\n // see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#passive\n private _startScrollObserver() {\n addEventListener(assignableWindow, 'scroll', this._onScroll, { capture: true })\n }\n\n private _onScroll = (): void => {\n const candidateNow = Date.now()\n // very naive throttle\n if (candidateNow % 50 === 0) {\n // we can see many scrolls between scheduled checks,\n // so we update scroll delay as we see them\n // to avoid false positives\n this._clicks.forEach((click) => {\n if (isUndefined(click.scrollDelayMs)) {\n click.scrollDelayMs = candidateNow - click.timestamp\n }\n })\n }\n }\n\n private _startSelectionChangedObserver() {\n addEventListener(assignableWindow, 'selectionchange', this._onSelectionChange)\n }\n\n private _onSelectionChange = (): void => {\n this._lastSelectionChanged = Date.now()\n }\n\n private _ignoreClick(click: DeadClickCandidate | null): boolean {\n if (!click) {\n return true\n }\n\n if (isElementInToolbar(click.node)) {\n return true\n }\n\n const alreadyClickedInLastSecond = this._clicks.some((c) => {\n return c.node === click.node && Math.abs(c.timestamp - click.timestamp) < 1000\n })\n\n if (alreadyClickedInLastSecond) {\n return true\n }\n\n if (\n isTag(click.node, 'html') ||\n !isElementNode(click.node) ||\n autocaptureCompatibleElements.includes(click.node.tagName.toLowerCase())\n ) {\n return true\n }\n\n return false\n }\n\n private _checkClicks() {\n if (!this._clicks.length) {\n return\n }\n\n clearTimeout(this._checkClickTimer)\n this._checkClickTimer = undefined\n\n const clicksToCheck = this._clicks\n this._clicks = []\n\n for (const click of clicksToCheck) {\n click.mutationDelayMs =\n click.mutationDelayMs ??\n (this._lastMutation && click.timestamp <= this._lastMutation\n ? this._lastMutation - click.timestamp\n : undefined)\n click.absoluteDelayMs = Date.now() - click.timestamp\n click.selectionChangedDelayMs =\n this._lastSelectionChanged && click.timestamp <= this._lastSelectionChanged\n ? this._lastSelectionChanged - click.timestamp\n : undefined\n\n const scrollTimeout = checkTimeout(click.scrollDelayMs, this._config.scroll_threshold_ms)\n const selectionChangedTimeout = checkTimeout(\n click.selectionChangedDelayMs,\n this._config.selection_change_threshold_ms\n )\n const mutationTimeout = checkTimeout(click.mutationDelayMs, this._config.mutation_threshold_ms)\n // we want to timeout eventually even if nothing else catches it...\n // we leave a little longer than the maximum threshold to give the other checks a chance to catch it\n const absoluteTimeout = checkTimeout(click.absoluteDelayMs, this._config.mutation_threshold_ms * 1.1)\n\n const hadScroll = isNumber(click.scrollDelayMs) && click.scrollDelayMs < this._config.scroll_threshold_ms\n const hadMutation =\n isNumber(click.mutationDelayMs) && click.mutationDelayMs < this._config.mutation_threshold_ms\n const hadSelectionChange =\n isNumber(click.selectionChangedDelayMs) &&\n click.selectionChangedDelayMs < this._config.selection_change_threshold_ms\n\n if (hadScroll || hadMutation || hadSelectionChange) {\n // ignore clicks that had a scroll or mutation\n continue\n }\n\n if (scrollTimeout || mutationTimeout || absoluteTimeout || selectionChangedTimeout) {\n this._onCapture(click, {\n $dead_click_last_mutation_timestamp: this._lastMutation,\n $dead_click_event_timestamp: click.timestamp,\n $dead_click_scroll_timeout: scrollTimeout,\n $dead_click_mutation_timeout: mutationTimeout,\n $dead_click_absolute_timeout: absoluteTimeout,\n $dead_click_selection_changed_timeout: selectionChangedTimeout,\n })\n } else if (click.absoluteDelayMs < this._config.mutation_threshold_ms) {\n // keep waiting until next check\n this._clicks.push(click)\n }\n }\n\n if (this._clicks.length && isUndefined(this._checkClickTimer)) {\n this._checkClickTimer = assignableWindow.setTimeout(() => {\n this._checkClicks()\n }, 1000)\n }\n }\n\n private _captureDeadClick(click: DeadClickCandidate, properties: Properties) {\n // TODO need to check safe and captur-able as with autocapture\n // TODO autocaputure config\n this.instance.capture(\n '$dead_click',\n {\n ...properties,\n ...autocapturePropertiesForElement(click.node, {\n e: click.originalEvent,\n maskAllElementAttributes: this.instance.config.mask_all_element_attributes,\n maskAllText: this.instance.config.mask_all_text,\n elementAttributeIgnoreList: this._config.element_attribute_ignorelist,\n // TRICKY: it appears that we were moving to elementsChainAsString, but the UI still depends on elements, so :shrug:\n elementsChainAsString: false,\n }).props,\n $dead_click_scroll_delay_ms: click.scrollDelayMs,\n $dead_click_mutation_delay_ms: click.mutationDelayMs,\n $dead_click_absolute_delay_ms: click.absoluteDelayMs,\n $dead_click_selection_changed_delay_ms: click.selectionChangedDelayMs,\n },\n {\n timestamp: new Date(click.timestamp),\n }\n )\n }\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.initDeadClicksAutocapture = (ph, config) =>\n new LazyLoadedDeadClicksAutocapture(ph, config)\n\nexport default LazyLoadedDeadClicksAutocapture\n"],"names":["_a","__defProp","Object","defineProperty","__publicField","obj","key","value","__defNormalProp","enumerable","configurable","writable","__defProp$1","__publicField$1","__defNormalProp$1","NodeType$2","NodeType2","testableAccessors$1","Node","ShadowRoot","Element","MutationObserver","testableMethods$1","untaintedBasePrototype$1","getUntaintedPrototype$1","defaultObj","_globalThis$Zone","angularUnpatchedVersionSymbol","globalThis","Zone","__symbol__","angularZoneUnpatchedAlternative","defaultPrototype","prototype","accessorNames","isUntaintedAccessors","Boolean","every","accessor","_a2","_b","getOwnPropertyDescriptor","get","toString","includes","methodNames","isUntaintedMethods","method","iframeEl","document","createElement","body","appendChild","win","contentWindow","untaintedObject","removeChild","_unused","untaintedAccessorCache$1","getUntaintedAccessor$1","instance","cacheKey","String","call","untaintedPrototype","untaintedAccessor","untaintedMethodCache$1","getUntaintedMethod$1","bind","untaintedMethod","index$1","childNodes","n2","parentNode","parentElement","textContent","contains","other","getRootNode","host","styleSheets","shadowRoot","querySelector","selectors","querySelectorAll","mutationObserver","constructor","isElement","nodeType","ELEMENT_NODE","isShadowRoot","hostEl","isNativeShadowDom","shadowRoot2","stringifyStylesheet","s2","rules2","rules","cssRules","stringifiedRules","Array","from","rule2","stringifyRule","href","join","cssText","replace","error","sheetHref","isCSSImportRule","importStringified","styleSheet","split","length","statement","JSON","stringify","layerName","push","supportsText","media","mediaText","escapeImportStatement","absolutifyURLs","regex","ruleStringified","isCSSStyleRule","selectorText","findStylesheet","doc","find","s","Mirror$1","Map","WeakMap","getId","id","this","getMeta","getNode","idNodeMap","getIds","keys","nodeMetaMap","removeNodeFromMap","delete","forEach","childNode","has","hasNode","node2","add","meta","set","oldNode","reset","maskInputValue","_ref","element","maskInputOptions","tagName","type","maskInputFn","text","actualType","toLowerCase","repeat","str","ORIGINAL_ATTRIBUTE_NAME","getInputType","hasAttribute","extractFileExtension","path","baseURL","_ref2","url","URL","window","location","err","match","pathname","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","origin","quote1","path1","quote2","path2","path3","filePath","maybeQuote","test","indexOf","slice","stack","parts","part","pop","canvasService","canvasCtx","_id","tagNameRegex","RegExp","IGNORED_NODE","genId","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","cachedDocument","absoluteToDoc","attributeValue","trim","getHref","isSVGElement","el","ownerSVGElement","customHref","a2","startsWith","setAttribute","transformAttribute","name","pos","collectCharacters","regEx","chars2","exec","substring","output","descriptorsStr","inParens","c2","charAt","getAbsoluteSrcsetString","ignoreAttribute","_value","classMatchesRegex","checkAncestors","eIndex","classList","className","needMaskingText","maskTextClass","maskTextSelector","closest","matches","e2","serializeNode","options","mirror","mirror2","blockClass","blockSelector","needsMask","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","docId","getRootId","DOCUMENT_NODE","compatMode","Document","DOCUMENT_TYPE_NODE","DocumentType","publicId","systemId","isCustomElement","needBlock","_isBlockedElement","HTMLFormElement","processedTagName","getValidTagName$1","attributes","len","i2","attr","n","hrefFrom","stylesheet","rel","_cssText","sheet","innerText","checked","selected","open","rr_open_mode","_unused2","ph_rr_could_not_detect_modal","__context","canvas","ctx","getContext","x2","width","y","height","getImageData","originalGetImageData","Uint32Array","Math","min","data","buffer","some","pixel","is2DCanvasBlank","rr_dataURL","toDataURL","quality","canvasDataURL","blankCanvas","image","imageSrc","currentSrc","getAttribute","priorCrossOrigin","crossOrigin","recordInlineImage","removeEventListener","naturalWidth","naturalHeight","drawImage","complete","addEventListener","console","warn","removeAttribute","mediaAttributes","rr_mediaState","paused","rr_mediaCurrentTime","currentTime","rr_mediaPlaybackRate","playbackRate","rr_mediaMuted","muted","rr_mediaLoop","loop","rr_mediaVolume","volume","scrollLeft","rr_scrollLeft","scrollTop","rr_scrollTop","getBoundingClientRect","class","rr_width","rr_height","src","contentDocument","rr_src","customElements","isSVG","isCustom","serializeElementNode","TEXT_NODE","parent","parentTagName","isStyle","isScript","nextSibling","previousSibling","Text","serializeTextNode","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","lowerIfExists","maybeAttr","serializeNodeWithId","skipChild","slimDOMOptions","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","sn","comment","script","as","headFavicon","headMetaDescKeywords","headMetaSocial","property","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","slimDOMExcluded","serializedNode","assign","recordChild","shadowRootEl","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isShadow","listener","readyState","fired","blankUrl","setTimeout","timer","clearTimeout","onceIframeLoaded","iframeDoc","serializedIframeNode","link","styleSheetLoadTimeout","styleSheetLoaded","onceStylesheetLoaded","serializedLinkNode","BaseRRNode$1","BaseRRNode","__publicField2","childNodes2","childIterator","firstChild","ownerDocument","_newChild","Error","insertBefore","_refChild","_node","testableAccessors","testableMethods","untaintedBasePrototype","getUntaintedPrototype","_globalThis$Zone2","angularZoneUnpatchedAlternative$1","_unused3","untaintedAccessorCache","getUntaintedAccessor","untaintedMethodCache","getUntaintedMethod","mutationObserverCtor","index","on","fn","target","capture","passive","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","map","throttle","func","wait","timeout","previous","_len","arguments","args","_key","now","Date","leading","remaining","context","apply","trailing","hookSetter","d","isRevoked","original","patch","source","replacement","wrapped","defineProperties","__rrweb_original__","_unused4","Proxy","Reflect","prop","receiver","nowTimestamp","getWindowScroll","_c","_d","left","scrollingElement","pageXOffset","documentElement","top","pageYOffset","getWindowHeight","innerHeight","clientHeight","getWindowWidth","innerWidth","clientWidth","closestElementOfNode","isBlocked","isIgnored","headTitleMutations","isAncestorRemoved","legacy_isTouchEvent","event","changedTouches","isSerializedIframe","nodeName","isSerializedStylesheet","hasShadowRoot","getTime","StyleSheetMirror$1","_this$styleIDMap$get","styleIDMap","newId","idStyleMap","getStyle","generateId","getShadowHost","shadowHost","DOCUMENT_FRAGMENT_NODE","shadowHostInDom","rootShadowHost","getRootShadowHost","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","isNodeInLinkedList","DoubleLinkedList","position","current","head","index2","next","addNode","__ln","tail","removeNode","errorHandler","moveKey","parentId","MutationBuffer","Set","mutations","processMutation","emit","frozen","locked","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","iframe","childSn","attachIframe","observeAttachShadow","attachLinkElement","node","mapRemoves","shift","movedSet","isParentRemoved","removes","addedSet","isAncestorInSet","droppedSet","candidate","tailNode","unhandledNode","payload","texts","genTextAreaValueMutation","filter","attribute","style","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","attributeMap","movedMap","mutationCb","textarea","item","cn","m","oldValue","attributeName","unattachedDoc","implementation","createHTMLDocument","old","pname","newValue","getPropertyValue","newPriority","getPropertyPriority","addedNodes","genAdds","removedNodes","nodeId","isSerialized","deepDelete","processedNodeManager","inOtherBuffer","targetId","init","freeze","canvasManager","unfreeze","isFrozen","lock","unlock","addsSet","_ret","_loop","r2","v","_isParentRemoved","size","_isAncestorInSet","callbackWrapper","cb","mutationBuffers","getEventTarget","composedPath","_unused5","initMutationObserver","rootEl","mutationBuffer","observer","processMutations","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","initMouseInteractionObserver","_ref4","mouseInteractionCb","sampling","mouseInteraction","disableMap","handlers","currentPointerType","Number","isNaN","endsWith","eventKey","eventName","handler","pointerType","thisEventKey","Mouse","Touch","Pen","MouseDown","MouseUp","Click","clientX","clientY","_extends","x","getHandler","PointerEvent","TouchStart","TouchEnd","h","initScrollObserver","_ref5","scrollCb","evt","defaultView","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","getNestedCSSRulePositions","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","unshift","parentStyleSheet","recurse","getIdAndStyleId","styleMirror","styleId","ownerNode","initAdoptedStyleSheetObserver","_ref11","host2","hostId","patchTarget","originalPropertyDescriptor","_a3","sheets","result2","adoptStyleSheets","initObservers","o2","hooks","currentWindow","mousemoveCb","viewportResizeCb","inputCb","mediaInteractionCb","styleSheetRuleCb","styleDeclarationCb","canvasMutationCb","fontCb","selectionCb","customElementCb","mutation","mousemove","viewportResize","input","mediaInteaction","styleSheetRule","styleDeclaration","canvasMutation","font","selection","customElement","mergeHooks","recordDOM","mousemoveHandler","_ref3","timeBaseline","threshold","callbackThreshold","mousemoveCallback","positions","wrappedCb","totalOffset","p","timeOffset","updatePosition","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","initMoveObserver","mouseInteractionHandler","scrollHandler","viewportResizeHandler","_ref6","_ref7","lastH","lastW","initViewportResizeObserver","inputHandler","_ref8","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","isChecked","cbWithDedup","text2","v2","lastInputValue","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","initInputObserver","mediaInteractionHandler","_ref14","Play","Pause","Seeked","VolumeChange","RateChange","initMediaInteractionObserver","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","_ref9","_ref0","CSSStyleSheet","insertRule","thisArg","argumentsList","rule","addRule","selector","styleBlock","replaceSync","deleteRule","removeRule","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","entries","_ref1","typeKey","_ref10","initStyleSheetObserver","_ref12","_ref13","ignoreCSSAttributes","setProperty","CSSStyleDeclaration","priority","removeProperty","remove","initStyleDeclarationObserver","collectFonts","_ref15","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","Uint8Array","restoreHandler","fonts","initFontObserver","selectionObserver","param","collapsed","updateSelection","getSelection","isCollapsed","ranges","count","rangeCount","range","getRangeAt","startContainer","startOffset","endContainer","endOffset","start","end","initSelectionObserver","customElementObserver","_ref16","define","initCustomElementObserver","pluginHandlers","plugin3","plugins","callback","b","disconnect","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","ids","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","IframeManager","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","iframes","crossOriginIframeMap","addLoadListener","loadListener","isAttachIframe","adoptedStyleSheets","message","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","crossOriginIframeMirror","replaceIdOnNode","crossOriginIframeRootIdMap","patchRootIdOnNode","timestamp","IncrementalSnapshot","Mutation","Meta","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","Scroll","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","AdoptedStyleSheet","styles","iframeMirror","isArray","child","ShadowDomManager","WeakSet","patchAttachShadow","shadowDoms","restoreHandlers","iframeElement","manager","option","sRoot","chars","lookup","i$1","charCodeAt","canvasVarMap","saveWebGLVar","isInstanceOfWebGLObject","list2","ctor","contextMap","variableListFor$1","serializeArg","arg","Float32Array","Float64Array","Int32Array","Uint16Array","Int16Array","Int8Array","Uint8ClampedArray","rr_type","values","ArrayBuffer","base64","arraybuffer","bytes","encode","DataView","byteOffset","byteLength","HTMLImageElement","HTMLCanvasElement","ImageData","serializeArgs","supportedWebGLConstructorNames","initCanvasContextObserver","setPreserveDrawingBufferToTrue","contextType","_len3","_key3","ctxName","getNormalizedContextName","contextAttributes","preserveDrawingBuffer","splice","_unused7","patchGLPrototype","props","getOwnPropertyNames","_loop3","_len4","_key4","recordArgs","_unused8","hookHandler","setter","takeFullSnapshot$1","encodedJs","blob","Blob","atob","WorkerWrapper","objURL","webkitURL","createObjectURL","worker","Worker","revokeObjectURL","CanvasManager","latestId","invokeId","rafStamps","pendingCanvasMutations","initCanvasMutationObserver","initCanvasFPSObserver","clear","resetObservers","fps","_this","canvasContextReset","snapshotInProgressMap","onmessage","commands","rafId","timeBetweenSnapshots","lastSnapshotTime","takeCanvasSnapshots","getCanvas","matchedCanvas","searchCanvas","requestAnimationFrame","root","elem","_ref17","_asyncToGenerator","getContextAttributes","COLOR_BUFFER_BIT","bitmap","createImageBitmap","resizeWidth","resizeHeight","postMessage","_x","cancelAnimationFrame","startRAFTimestamping","startPendingCanvasMutationFlusher","canvas2DReset","props2D","CanvasRenderingContext2D","_loop2","_len2","_key2","_unused6","initCanvas2DMutationObserver","canvasWebGL1and2Reset","WebGLRenderingContext","WebGL","WebGL2RenderingContext","WebGL2","initCanvasWebGLMutationObserver","flushPendingCanvasMutations","setLatestRAFTimestamp","_values","flushPendingCanvasMutationFor","valuesWithType","rest","_objectWithoutPropertiesLoose","_excluded","StylesheetManager","StyleSheetMirror","adoptedStyleSheetCb","linkEl","trackedLinkElements","trackStylesheetInLinkElement","_this2","adoptedStyleSheetData","styleIds","_loop4","CSSRule","_linkEl","ProcessedNodeManager","thisBuffer","buffers","nodeMap","active","destroy","recording","cleanFrame","debug","t2","Mirror","record","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordAfter","errorHandler2","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","color","date","email","month","number","search","tel","time","week","select","password","NodeList","DOMTokenList","polyfill$1","incrementalSnapshotCount","eventProcessor","buf","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","getMirror","nodeMirror","slimDOM","snapshot","initialOffset","CustomElement","plugin","addCustomEvent","tag","freezePage","takeFullSnapshot","NotStarted","Running","Stopped","__defProp2","__defNormalProp2","__publicField22","utils","__proto__","getBaseDimension","rootIframe","frameElement","relativeScale","absoluteScale","frameDimension","frameBaseDimension","getNestedRule","getPositionsAndIndex","nestedIndex","iterateResolveTree","tree","children","polyfill","queueToResolveTrees","queue","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","nextInTree","idx","parentInTree","uniqueTextMutations","idSet","uniqueMutations","Symbol","toStringTag","decodeBase64","StackFrame","fileName","functionName","lineNumber","columnNumber","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","ErrorStackParser","parse","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","line","sanitizedLine","tokens","locationParts","functionNameRegex","e","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","i","parseFloat","pathToSelector","outerHTML","localName","domSiblings","sibling","isObject","isObjTooDeep","limit","stringifyOptions","numOfKeysLimit","depthOfLimit","thisPos","Infinity","_obj","shouldIgnore","stringLengthLimit","Event","eventResult","eventValue","HTMLElement","defaultLogOptions","level","lengthThreshold","logger","initLogObserver","logOptions","loggerType","logCount","inStack","cancelHandlers","trace","stackFrame","unhandledrejectionHandler","reason","levelType","_logger","getRecordConsolePlugin","needle","nativeIsArray","ObjProto","type_utils_hasOwnProperty","hasOwnProperty","type_utils_toString","isFunction","isNativeFunction","isUndefined","isString","isNull","isNullish","isNumber","isBoolean","isFormData","FormData","isPrimitive","isBuiltin","isEvent","base","isInstanceOf","parsedStackResults","lastKeysCount","cachedFilenameChunkIds","isError","getFilenameToChunkIdMap","stackParser","chunkIdMap","_posthogChunkIds","chunkIdKeys","reduce","acc","stackKey","result","parsedStack","filename","chunkId","UNKNOWN_FUNCTION","createFrame","lineno","colno","frame","platform","function","in_app","extractSafariExtensionDetails","isSafariExtension","isSafariWebExtension","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackLineParser","noFnParts","col","subMatch","geckoREgex","geckoEvalRegex","geckoStackLineParser","WEBPACK_ERROR_REGEXP","STACKTRACE_FRAME_LIMIT","createStackParser","parsers","skipFirstLines","frames","cleanedLine","parser","localStack","reverse","arr","reverseAndStripFrames","ErrorPropertiesBuilder","coercers","modifiers","buildFromUnknown","hint","mechanism","handled","exceptionWithCause","buildCoercingContext","parsingContext","buildParsingContext","exceptionWithStack","parseStacktrace","$exception_list","convertToExceptionList","$exception_level","modifyFrames","exceptionList","exc","applyModifiers","coerceFallback","_ctx$syntheticExcepti","syntheticException","synthetic","cause","applyChunkIds","chunk_id","applyCoercers","adapter","coerce","newFrames","modifier","_mechanism$type","_mechanism$handled","_exceptionWithStack$s","currentException","depth","DOMExceptionCoercer","isDOMException","isDOMError","hasStack","getType","getValue","ErrorCoercer","isPlainError","getMessage","getStack","_ctx","ErrorEventCoercer","exceptionLike","ERROR_TYPES_PATTERN","StringCoercer","getInfos","groups","severityLevels","extractExceptionKeysForMessage","maxLength","sort","serialized","ObjectCoercer","errorProperty","getErrorPropertyFromObject","isSeverityLevel","getObjectClassName","isEmptyString","getPrototypeOf","EventCoercer","constructorName","PrimitiveCoercer","PromiseRejectionEventCoercer","getUnhandledRejectionReason","detail","undefined","global","nativeForEach","navigator","fetch","XMLHttpRequest","AbortController","userAgent","assignableWindow","isAngularZonePresent","isDocument","_createLogger","prefix","_log","consoleLog","info","critical","_len5","_key5","uninitializedWarning","methodName","createLogger","additionalPrefix","breaker","eachArray","iterator","l","each","pair","extend","ownProps","resArray","formDataToQuery","formdata","arg_separator","use_val","use_key","tph_arr","val","encodeURIComponent","File","isFile","__posthog_wrapped__","isHostOnDenyList","_options$payloadHostD","hostname","hostnameFromURL","defaultNotDenied","isHostDenied","payloadHostDenyList","deny","isElementNode","isTag","splitClassString","getClassNames","baseVal","getSafeText","elText","shouldCaptureElement","isSensitiveElement","_makeSafeText","isTextNode","shouldCaptureValue","makeSafeText","autocaptureCompatibleElements","curEl","classes","coreCCPattern","anchoredCCRegex","unanchoredCCRegex","coreSSNPattern","anchoredSSNRegex","unanchoredSSNRegex","anchorRegexes","getDirectAndNestedSpanText","getNestedSpanText","_child$tagName","spanText","getElementsChainString","elements","ret","_element$nth_child","_element$nth_of_type","el_string","tag_name","attr_class","single_class","nth_child","nth_of_type","attr_id","sortedAttributes","a","localeCompare","escapeQuotes","elementsToString","_el$$el_text","_el$attr__href","response","extractAttrClass","extractElements","defaultNetworkOptions","initiatorTypes","maskRequestFn","recordHeaders","recordBody","recordInitialRequests","recordPerformance","performanceEntryTypeToObserve","payloadSizeLimitBytes","isNavigationTiming","entry","entryType","isResourceTiming","initPerformanceObserver","initialPerformanceEntries","performance","getEntries","initiatorType","requests","flatMap","prepareRequest","status","networkRequest","isInitial","PerformanceObserver","performanceEntries","wrappedInitiatorFilter","entryTypes","supportedEntryTypes","shouldRecordHeaders","shouldRecordBody","headers","matchesContentType","contentTypes","contentTypeHeader","contentType","ct","isBlobURL","protocol","Request","recordBodyType","getRequestPerformanceEntry","_x2","_x3","_x4","_x5","_x6","_getRequestPerformanceEntry","attempt","performanceEntry","array","predicate","findLast","getEntriesByName","startTime","Promise","resolve","_tryReadXHRBody","exposesServerTiming","responseEnd","timeOrigin","floor","toJSON","round","endTime","requestHeaders","requestBody","responseHeaders","responseBody","timing","serverTiming","duration","contentTypePrefixDenyList","_tryReadBody","r","reject","clone","then","txt","finally","_tryReadRequestBody2","_tryReadResponseBody2","cannotReadBodyReason","_r$headers$get","contentTypeIsDenied","_checkForCannotReadResponseBody","initFetchObserver","recordRequestHeaders","recordResponseHeaders","restorePatch","originalFetch","res","req","header","_x7","_tryReadRequestBody","_x8","_tryReadResponseBody","_res","catch","_x9","_x0","initialisedHandler","initNetworkObserver","networkOptions","request","maskedRequest","performanceObserver","xhrObserver","fetchObserver","originalOpen","async","username","xhr","originalSetRequestHeader","setRequestHeader","originalSend","send","readyStateListener","DONE","getAllResponseHeaders","initXhrObserver","getRecordNetworkPlugin","__PosthogExtensions__","rrwebPlugins","rrweb","rrwebRecord","version","rrwebConsoleRecord","c","t","u","o","f","__b","__r","diffed","__c","unmount","__h","__H","__","__V","B","__N","setState","shouldComponentUpdate","componentWillUpdate","__e","__s","z","_","F","q","sub","__P","k","w","__v","j","g","SurveyWidgetType","SurveyPosition","SurveyType","SurveyQuestionType","SurveyQuestionBranchingType","SurveySchedule","SurveyEventName","SurveyEventProperties","SURVEY_LOGGER","SURVEY_SEEN_PREFIX","SURVEY_IN_PROGRESS_PREFIX","getSurveyInteractionProperty","survey","action","surveyProperty","current_iteration","getSurveySeenKey","surveySeenKey","setSurveySeenOnLocalStorage","localStorage","getItem","setItem","IN_APP_SURVEY_TYPES","Popover","Widget","API","trunc","ceil","isInteger","isFinite","DIGITS","UUID","TypeError","fromFieldsV7","unixTsMs","randA","randBHi","randBLo","RangeError","pow","equals","compareTo","diff","sign","V7Generator","_timestamp","_counter","_random","DefaultRandom","generate","generateOrAbort","valueAfterReset","ts","_resetCounter","nextUint32","defaultGenerator","getRandomValues","UUIDV7_DENY_WEAK_RNG","random","crypto","_buffer","_cursor","uuidv7","uuidv7obj","MOBILE","ANDROID","TABLET","ANDROID_TABLET","IPAD","APPLE_WATCH","APPLE","BLACKBERRY","NINTENDO","PLAYSTATION","XBOX","WINDOWS_PHONE","WINDOWS","NOKIA","OUYA","GENERIC","GENERIC_MOBILE","GENERIC_TABLET","XBOX_REGEX","PLAYSTATION_REGEX","NINTENDO_REGEX","BLACKBERRY_REGEX","detectDeviceType","user_agent","device","detectDevice","sendBeacon","isMatchingRegex","pattern","isValidRegex","propertyComparisons","exact","targets","is_not","not_regex","icontains","not_icontains","_window","_document","getSurveyResponseKey","questionId","BLACK_TEXT_COLOR","defaultSurveyAppearance","fontFamily","backgroundColor","submitButtonColor","submitButtonTextColor","ratingButtonColor","ratingButtonActiveColor","borderColor","placeholder","whiteLabel","displayThankYouMessage","thankYouMessageHeader","Right","widgetType","Tab","widgetLabel","widgetColor","zIndex","disabledButtonOpacity","maxWidth","textSubtleColor","boxPadding","boxShadow","borderRadius","shuffleQuestions","surveyPopupDelaySeconds","outlineColor","inputBackground","inputTextColor","scrollbarThumbColor","scrollbarTrackColor","hex2rgb","hexColor","parseInt","getContrastingTextColor","rgb","nameColorToHex","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","colorMatch","sqrt","getSurveyStylesheet","posthog","prepareStylesheet","_posthog$config","config","prepare_external_dependency_stylesheet","retrieveSurveyShadow","widgetClassName","getSurveyContainerClass","existingDiv","shadow","isNewlyCreated","div","addSurveyCSSVariablesToElement","appearance","effectiveAppearance","hostStyle","surveyHasBottomBorder","Center","Left","defaultFontStack","getFontFamily","attachShadow","mode","existingStylesheet","getSurveyResponseValue","responses","sendSurveyEvent","surveySubmissionId","isSurveyCompleted","SENT","SURVEY_NAME","SURVEY_ID","SURVEY_ITERATION","SURVEY_ITERATION_START_DATE","current_iteration_start_date","SURVEY_QUESTIONS","questions","question","SURVEY_SUBMISSION_ID","SURVEY_COMPLETED","sessionRecordingUrl","get_session_replay_url","$set","dispatchEvent","CustomEvent","surveyId","clearInProgressSurveyState","dismissedSurveyEvent","readOnly","inProgressSurvey","getInProgressSurveyState","DISMISSED","SURVEY_PARTIALLY_COMPLETED","resp","shuffle","reverseIfUnshuffled","unshuffled","shuffled","getDisplayOrderQuestions","enable_partial_responses","canActivateRepeatedly","_survey$conditions3","conditions","events","repeatedActivation","_survey$conditions","_survey$conditions2","hasEvents","schedule","Always","isSurveyInProgress","SurveyContext","createContext","isPreviewMode","previewPageIndex","onPopupSurveyDismissed","isPopup","onPreviewSubmit","useSurveyContext","useContext","renderChildrenAsTextOrHtml","component","renderAsHtml","cloneElement","dangerouslySetInnerHTML","__html","defaultMatchType","matchType","doesSurveyUrlMatch","_survey$conditions4","_window$location","_survey$conditions5","urlMatchType","getInProgressSurveyStateKey","setInProgressSurveyState","state","stateString","removeItem","asSelector","satisfiedEmoji","_jsx","xmlns","viewBox","neutralEmoji","dissatisfiedEmoji","veryDissatisfiedEmoji","verySatisfiedEmoji","cancelSVG","_jsxs","fill","IconPosthogLogo","maskType","maskUnits","mask","transform","PostHogLogo","BottomSection","submitDisabled","onSubmit","skipSubmitButton","disabled","onClick","QuestionHeader","forceDisableHtml","htmlFor","Open","description","descriptionContentType","Cancel","ConfirmationMessage","onClose","useEffect","handleKeyDown","preventDefault","role","tabIndex","thankYouMessageCloseButtonText","isValidStringArray","OpenTextQuestion","displayQuestionIndex","initialValue","inputRef","useRef","setText","useState","_inputRef$current","focus","Fragment","ref","rows","onInput","currentTarget","stopPropagation","onKeyDown","buttonText","optional","LinkQuestion","RatingQuestion","scale","starting","rating","setRating","handleSubmit","num","display","threeScaleEmojis","fiveScaleEmojis","emoji","gridTemplateColumns","getScaleNumbers","RatingButton","setActiveNumber","lowerBoundLabel","upperBoundLabel","submitButtonText","MultipleChoiceQuestion","openChoiceInputRef","choices","useMemo","shuffleOptions","displayOrderChoices","openEndedChoice","hasOpenChoice","shuffledOptions","getDisplayOrderChoices","selectedChoices","setSelectedChoices","initializeSelectedChoices","questionType","SingleChoice","openEndedState","setOpenEndedState","initializeOpenEndedState","isSelected","inputValue","openEndedValue","choice","isSingleChoiceQuestion","isMultipleChoiceQuestion","MultipleChoice","shouldSkipSubmit","handleChoiceChange","isOpenChoice","newOpenSelected","prev","_openChoiceInputRef$c","handleOpenEndedInputChange","handleOpenEndedKeyDown","isSubmitDisabled","inputId","openInputId","onChange","fiveScaleNumbers","sevenScaleNumbers","tenScaleNumbers","DISPATCH_FEEDBACK_WIDGET_EVENT","WIDGET_LISTENER_ATTRIBUTE","getNextSurveyStep","currentQuestionIndex","_question$branching","nextQuestionIndex","branching","End","SpecificQuestion","ResponseBased","_question$branching2","selectedChoiceIndex","responseValues","nextStep","Rating","_question$branching3","ratingBucket","responseValue","getRatingBucketForResponseValue","SURVEY_NEXT_TO_TRIGGER_PARAMS","SurveyManager","_surveyTimeouts","_widgetSelectorListeners","_prefillHandledSurveys","handlePopoverSurvey","_survey$appearance","_clearSurveyTimeout","_addSurveyToFocus","delaySeconds","_posthog","Preact","SurveyPopup","removeSurveyFromFocus","_removeSurveyFromFocus","timeoutId","_handleWidget","FeedbackWidget","_removeWidgetSelectorListener","_removeSurveyFromDom","existing","_manageWidgetSelectorListener","currentElement","existingListenerData","_survey$appearance2","_survey$appearance3","positionStyles","NextToTrigger","surveyWidth","buttonRect","viewportHeight","viewportWidth","estimatedMinSurveyHeight","spacing","spaceBelow","bottom","spaceAbove","showAbove","right","getNextToTriggerPosition","renderPopover","renderSurvey","_this$_posthog$config","surveys","prefillFromUrl","_handleUrlPrefill","getActiveMatchingSurveys","forceReload","_this$_posthog","getSurveys","targetingMatchedSurveys","checkSurveyEligibility","eligible","_isSurveyConditionMatched","_hasActionOrEventTriggeredSurvey","_checkFlags","callSurveysAndEvaluateDisplayLogic","inAppSurveysWithDisplayLogic","inAppSurveysQueue","_sortSurveysByAppearanceDelay","activeSelectorSurveys","_survey$appearance4","_survey$appearance5","_survey$appearance6","_survey$appearance7","Selector","widgetSelector","_surveyInFocus","_clearAutoSubmitTimeout","_a$appearance","_b$appearance","isSurveyInProgressA","isSurveyInProgressB","aIsAlways","bIsAlways","_this$_posthog$config2","params","autoSubmit","searchString","cleanSearch","pairs","decodedKey","decodeURIComponent","decodedValue","questionIndex","extractPrefillParamsFromUrl","prefillParams","responseKey","choiceIndex","choiceIndices","uniqueChoices","convertPrefillToResponses","submissionId","lastQuestionIndex","shouldAutoSubmit","autoSubmitIfComplete","Link","allRequiredQuestionsFilled","_scheduleAutoSubmit","_this$_posthog$config3","_this$_posthog$config4","delay","autoSubmitDelay","_autoSubmitTimeout","_isSurveyFeatureFlagEnabled","flagKey","flagVariant","isFeatureEnabled","featureFlags","send_event","flagVariantCheck","getFeatureFlag","_survey$conditions6","_survey$conditions7","_survey$conditions8","deviceTypes","deviceType","deviceTypesMatchType","doesSurveyDeviceTypesMatch","_survey$conditions9","doesSurveyMatchSelector","_internalFlagCheckSatisfied","internal_targeting_flag_key","eligibility","start_date","end_date","isSurveyRunning","linkedFlagVariant","linked_flag_key","targeting_flag_key","waitPeriodInDays","lastSeenSurveyDate","today","abs","hasWaitPeriodPassed","seenSurveyWaitPeriodInDays","getSurveySeen","_this$_posthog$survey","doesSurveyActivateByEvent","actions","doesSurveyActivateByAction","surveysActivatedByEventsOrActions","_surveyEventReceiver","_survey$feature_flag_","feature_flag_keys","shadowContainer","getTestAPI","addSurveyToFocus","surveyInFocus","surveyTimeouts","handleWidget","manageWidgetSelectorListener","sortSurveysByAppearanceDelay","checkFlags","isSurveyFeatureFlagEnabled","generateSurveys","isSurveysEnabled","intervalId","surveyManager","disable_surveys_automatic_display","startInterval","setInterval","hidden","clearInterval","useHideSurveyOnURLChange","setSurveyVisible","checkUrlMatch","_survey$appearance8","isSurveyTypeWidget","doesSurveyMatchUrlCondition","isSurveyWidgetTypeTab","originalPushState","history","pushState","originalReplaceState","replaceState","getPopoverPosition","surveyWidgetType","ExternalSurvey","TopLeft","TopRight","TopCenter","MiddleLeft","MiddleRight","MiddleCenter","_survey$appearance1","_survey$appearance10","_survey$appearance11","_survey$appearance12","_survey$appearance13","_survey$appearance14","onCloseConfirmationMessage","surveyContainerRef","surveyPopupDelayMilliseconds","isPopupVisible","isSurveySent","hidePopupWithViewTransition","millisecondDelay","setIsPopupVisible","setIsSurveySent","removeDOMAndHidePopup","startViewTransition","_surveyContainerRef$c","finished","handleSurveyClosed","handleSurveySent","_survey$appearance9","_survey$appearance0","autoDisappear","showSurvey","SHOWN","toISOString","usePopupVisibility","shouldShowConfirmation","surveyContextValue","getInProgressSurvey","Provider","thankYouMessageDescription","thankYouMessageDescriptionContentType","Questions","questionsResponses","setQuestionsResponses","inProgressSurveyData","setCurrentQuestionIndex","surveyQuestions","currentQuestion","at","getQuestionComponent","newResponses","onNextButtonClick","_survey$appearance16","_survey$appearance17","_survey$appearance18","_survey$appearance19","_survey$appearance20","isFeedbackButtonVisible","setIsFeedbackButtonVisible","setShowSurvey","styleOverrides","setStyleOverrides","toggleSurvey","_survey$appearance15","handleShowSurvey","_customEvent$detail","customEvent","resetShowSurvey","baseProps","_createElement","extendPostHogWithSurveys","errorPropertiesBuilder","ErrorTracking","errorToProperties","posthogErrorWrappingFunctions","wrapOnError","captureFn","originalOnError","onerror","_originalOnError","errorProperties","__POSTHOG_INSTRUMENTED__","_win$onerror","wrapUnhandledRejection","originalOnUnhandledRejection","onunhandledrejection","ev","_originalOnUnhandledR","_win$onunhandledrejec","wrapConsoleError","con","originalConsoleError","_con$error","errorWrappingFunctions","addTracingHeaders","hostnames","distinctId","sessionManager","reqHostname","sessionId","windowId","checkAndGetSessionAndWindowId","patchFns","_patchFetch","patchFetch","_patchXHR","patchXHR","tracingHeadersPatchFns","postHogTracingHeadersPatchFns","self","getEntriesByType","responseStart","domInteractive","domContentLoadedEventStart","domComplete","toUpperCase","persisted","timeStamp","activationStart","prerendering","wasDiscarded","delta","concat","navigationType","buffered","visibilityState","T","E","S","firstHiddenTime","L","C","max","reportAllChanges","M","I","A","interactionId","interactionCount","P","durationThreshold","O","R","H","latency","N","requestIdleCallback","W","PerformanceEventTiming","takeRecords","U","V","G","J","K","Q","X","Y","nt","processingEnd","renderTime","processingStart","it","postHogWebVitalsCallbacks","once","timeToFirstByte","resourceLoadDelay","resourceLoadDuration","elementRenderDelay","requestStart","navigationEntry","lcpEntry","lcpResourceEntry","attribution","hadRecentInput","sources","largestShiftTarget","largestShiftTime","largestShiftValue","largestShiftSource","largestShiftEntry","loadState","firstByteToFCP","fcpEntry","onINP","interactionTarget","interactionTargetElement","interactionType","interactionTime","nextPaintTime","processedEventEntries","longAnimationFrameEntries","inputDelay","processingDuration","presentationDelay","limitText","previousElementSibling","_el","getPropertiesFromElement","maskAllAttributes","maskText","elementAttributeIgnorelist","nthChild","nthOfType","currentElem","autocapturePropertiesForElement","_elementsJson$","_elementsJson$2","maskAllElementAttributes","maskAllText","elementAttributeIgnoreList","targetElementList","externalHref","elementsJson","autocaptureAugmentProperties","explicitNoCapture","shouldCaptureEl","augmentProperties","propertyKey","propertyValue","getAugmentPropertiesFromElement","_convertToURL","hrefHost","locationHost","$event_type","$ce_version","$elements","$elements_chain","$el_text","$external_click_url","cachedImplementations","getNativeMutationObserverImplementation","cached","impl","sandbox","getNativeImplementation","asClick","eventTarget","srcElement","_e$target","originalEvent","checkTimeout","thresholdMs","LazyLoadedDeadClicksAutocapture","_asRequiredConfig","providedConfig","_providedConfig$eleme","_providedConfig$scrol","_providedConfig$selec","_providedConfig$mutat","defaultConfig","_defaultConfig","__onCapture","_captureDeadClick","element_attribute_ignorelist","scroll_threshold_ms","selection_change_threshold_ms","mutation_threshold_ms","_clicks","defaultOnCapture","_onClick","click","_ignoreClick","_checkClickTimer","_checkClicks","_onScroll","candidateNow","scrollDelayMs","_onSelectionChange","_lastSelectionChanged","_config","_onCapture","observerTarget","_startClickObserver","_startScrollObserver","_startSelectionChangedObserver","_startMutationObserver","_mutationObserver","NativeMutationObserver","_onMutation","stop","_this$_mutationObserv","_mutations","_lastMutation","alreadyClickedInLastSecond","clicksToCheck","_click$mutationDelayM","mutationDelayMs","absoluteDelayMs","selectionChangedDelayMs","scrollTimeout","selectionChangedTimeout","mutationTimeout","absoluteTimeout","hadScroll","hadMutation","hadSelectionChange","$dead_click_last_mutation_timestamp","$dead_click_event_timestamp","$dead_click_scroll_timeout","$dead_click_mutation_timeout","$dead_click_absolute_timeout","$dead_click_selection_changed_timeout","properties","mask_all_element_attributes","mask_all_text","$dead_click_scroll_delay_ms","$dead_click_mutation_delay_ms","$dead_click_absolute_delay_ms","$dead_click_selection_changed_delay_ms","initDeadClicksAutocapture","ph"],"mappings":"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","x_google_ignoreList":[0,1,34,35,58]}