@infinitewatch/web-core 1.1.1 → 1.1.2
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.
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/watch.js +6 -1
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
package/dist/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core.ts","../src/watch.ts"],"sourcesContent":["import type {\n\taddedNodeMutation,\n\tattributeMutation,\n\teventWithTime,\n\tmutationData,\n} from \"@rrweb/types\";\nimport type {\n\tContractStatus,\n\tQuotaStatus,\n\tSessionInfo,\n\tUserIdentifier,\n\tWebCoreClient,\n\tWebCoreOptions,\n} from \"./types\";\n\ntype RrwebSerializedNode = NonNullable<addedNodeMutation[\"node\"]>;\ntype RrwebSerializedNodeWithMeta = RrwebSerializedNode & {\n\tisSVG?: boolean;\n\ttextContent?: string | null;\n\tattributes?: Record<string, unknown>;\n\tchildNodes?: RrwebSerializedNodeWithMeta[];\n\ttagName?: string;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === \"object\" && value !== null;\n\nconst getMutationData = (event: eventWithTime | null): mutationData | null => {\n\tif (!event || event.type !== 3) return null;\n\tconst data = event.data as mutationData | undefined;\n\tif (!data || data.source !== 0) return null;\n\treturn data;\n};\n\nconst LIB_VERSION = \"v43.4\";\n\nconst EXCLUDED_ORGANIZATIONS: Record<string, string> = {\n\t// Add organizations here as needed:\n\t// EXAMPLE_ORG: 'organization_id_here',\n};\n\nconst EXCLUDED_ORG_IDS = new Set(Object.values(EXCLUDED_ORGANIZATIONS));\n\nconst DEFAULT_CONFIG = {\n\tbaseUrl: \"https://ingest.infinitewatch.ai\",\n\tendpoint: \"https://ingest.infinitewatch.ai/v1/ingest\",\n\tendpointInsights: \"https://iw-backend-live.fly.dev\",\n\tendpointConfig: \"https://ingest.infinitewatch.ai/v1/ingest/config\",\n\tsessionId: null as string | null,\n\tuserId: null as string | null,\n\torganizationId: null as string | null,\n\tdebug: false,\n\tdefaultSamplingPercent: 100,\n\tmaskAllInputs: true,\n\tmaskInputOptions: {\n\t\tpassword: true,\n\t\temail: true,\n\t\ttext: true,\n\t\ttel: true,\n\t\turl: true,\n\t\ttextarea: true,\n\t\tselect: true,\n\t\tcheckbox: true,\n\t\tradio: true,\n\t\tfile: true,\n\t} as Record<string, boolean>,\n\tblockClass: \"\",\n\tblockSelector: \"\",\n\tmaskTextSelector: \"\",\n\tmaskTextClass: \"\",\n\trecordIframe: false,\n\trecordCanvas: false,\n\trecordCrossOriginIframes: false,\n\tsessionStorageKey: \"iw_session\",\n\tautoResumeSession: true,\n\tbatchSize: 200,\n\tflushInterval: 10_000,\n\tsessionTimeout: 30 * 60 * 1000,\n\tsessionHeartbeatInterval: null as number | null,\n\trefresh: false,\n\tinlineStylesheet: false,\n\tgenerateInsights: false,\n\tblackList: [\"yui_\"],\n};\n\nconst BYTES_IN_KILOBYTE = 1024;\n\nconst URL_PARAMS = {\n\tVERSION: \"v\",\n\tREQUEST_TYPE: \"t\",\n\tKEEPALIVE: \"k\",\n\tSIZE: \"s\",\n\tCOMPRESSION: \"c\",\n\tSESSION_ID: \"i\",\n};\n\ntype SessionData = {\n\tsessionId: string | null;\n\tuserId: string | null;\n\torganizationId: string | null;\n\tlastActivity: number;\n\tsessionStartTime: number | null;\n\tisActive: boolean;\n\tconfig: {\n\t\tendpoint: string;\n\t\tsessionTimeout: number;\n\t};\n\texternalId?: string | null;\n};\n\ntype CompressionResult = {\n\tbody: BodyInit;\n\tcompressed: boolean;\n\toriginalSize: number;\n};\n\nconst getWindow = () => {\n\tif (typeof window !== \"undefined\") {\n\t\treturn window as Window;\n\t}\n\tif (typeof globalThis !== \"undefined\" && \"window\" in globalThis) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: globalThis typing for non-standard environments\n\t\treturn (globalThis as any).window as Window;\n\t}\n\tconst doc =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? (document as Document)\n\t\t\t: typeof globalThis !== \"undefined\" && \"document\" in globalThis\n\t\t\t\t? // biome-ignore lint/suspicious/noExplicitAny: globalThis typing for non-standard environments\n\t\t\t\t\t((globalThis as any).document as Document)\n\t\t\t\t: undefined;\n\treturn doc?.defaultView ?? undefined;\n};\n\nconst getDocument = () => {\n\tif (typeof document !== \"undefined\") {\n\t\treturn document as Document;\n\t}\n\tif (typeof globalThis !== \"undefined\" && \"document\" in globalThis) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: globalThis typing for non-standard environments\n\t\treturn (globalThis as any).document as Document;\n\t}\n\treturn undefined;\n};\n\nconst isBrowser = () => !!(getWindow() && getDocument());\n\nconst now = () => Date.now();\n\nconst getCrypto = () => {\n\tconst win = getWindow();\n\tif (win?.crypto) {\n\t\treturn win.crypto;\n\t}\n\tif (typeof globalThis !== \"undefined\" && \"crypto\" in globalThis) {\n\t\treturn globalThis.crypto;\n\t}\n\treturn undefined;\n};\n\nconst randomString = (length: number) => {\n\tconst cryptoApi = getCrypto();\n\tif (!cryptoApi) {\n\t\t// Not expected in supported browsers, but keeps ID generation functional in odd environments.\n\t\treturn `${now().toString(36)}${\"0\".repeat(length)}`.slice(0, length);\n\t}\n\tconst alphabet = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\tconst bytes = new Uint8Array(length);\n\tcryptoApi.getRandomValues(bytes);\n\tlet result = \"\";\n\tfor (let i = 0; i < bytes.length; i += 1) {\n\t\tconst byte = bytes[i] ?? 0;\n\t\tresult += alphabet[byte % alphabet.length];\n\t}\n\treturn result;\n};\n\nconst isOrganizationExcluded = (orgId?: string | null) => {\n\treturn !!orgId && EXCLUDED_ORG_IDS.has(orgId);\n};\n\nexport const createWebCore = (): WebCoreClient => {\n\tlet config = { ...DEFAULT_CONFIG };\n\tlet isInitialized = false;\n\tlet eventBuffer: unknown[] = [];\n\tlet flushTimer: ReturnType<typeof setInterval> | null = null;\n\tlet stopRecording: ReturnType<NonNullable<Window[\"rrweb\"]>[\"record\"]> | null =\n\t\tnull;\n\tlet sessionId: string | null = null;\n\tlet userId: string | null = null;\n\tlet externalId: string | null = null;\n\tlet organizationId: string | null = null;\n\tlet sessionHeartbeatTimer: ReturnType<typeof setInterval> | null = null;\n\tlet sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\n\tlet isSessionActive = false;\n\tlet sessionStartTime: number | null = null;\n\tlet isSampledIn = true;\n\tlet hardStop = false;\n\tlet contractStatus: ContractStatus = null;\n\tlet quotaStatus: QuotaStatus = null;\n\tlet lastRecordedUrl = \"\";\n\tlet urlChangeCleanup: (() => void) | null = null;\n\n\tconst log = (message: string, ...args: unknown[]) => {\n\t\tif (config.debug) {\n\t\t\tconsole.log(\n\t\t\t\t\"[InfiniteWatch]\",\n\t\t\t\tnew Date().toISOString(),\n\t\t\t\tmessage,\n\t\t\t\t...args,\n\t\t\t);\n\t\t}\n\t};\n\n\tconst error = (message: string, ...args: unknown[]) => {\n\t\tif (config.debug) {\n\t\t\tconsole.error(\n\t\t\t\t\"[InfiniteWatch]\",\n\t\t\t\tnew Date().toISOString(),\n\t\t\t\t\"ERROR:\",\n\t\t\t\tmessage,\n\t\t\t\t...args,\n\t\t\t);\n\t\t\tif (args.length > 0 && args[0] instanceof Error) {\n\t\t\t\tconsole.error(\"[InfiniteWatch] Stack trace:\", args[0].stack);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst generateSessionId = () => {\n\t\tconst nextId = `session_${now()}_${randomString(9)}`;\n\t\tlog(\"Generated new session ID:\", nextId);\n\t\treturn nextId;\n\t};\n\n\tconst generateUserId = () => {\n\t\tconst nextId = `user_${randomString(9)}`;\n\t\tlog(\"Generated new user ID:\", nextId);\n\t\treturn nextId;\n\t};\n\n\tconst getSamplingPercentForOrg = (orgId?: string | null) => {\n\t\tif (!orgId) {\n\t\t\treturn typeof config.defaultSamplingPercent === \"number\"\n\t\t\t\t? config.defaultSamplingPercent\n\t\t\t\t: 50;\n\t\t}\n\t\tconst base =\n\t\t\ttypeof config.defaultSamplingPercent === \"number\"\n\t\t\t\t? config.defaultSamplingPercent\n\t\t\t\t: 50;\n\t\treturn Math.max(0, Math.min(100, base));\n\t};\n\n\tconst hashStringToPercent = (value: string) => {\n\t\tlet hash = 5381;\n\t\tconst input = String(value);\n\t\tfor (let i = 0; i < input.length; i += 1) {\n\t\t\thash = (hash << 5) + hash + input.charCodeAt(i);\n\t\t\thash |= 0;\n\t\t}\n\t\treturn Math.abs(hash) % 100;\n\t};\n\n\tconst shouldSample = (orgId: string | null, sessId: string | null) => {\n\t\tconst percent = getSamplingPercentForOrg(orgId);\n\t\tconst bucket = hashStringToPercent(sessId || \"\");\n\t\treturn bucket < percent;\n\t};\n\n\tconst compressGzip = async (data: string): Promise<CompressionResult> => {\n\t\tif (typeof CompressionStream !== \"undefined\") {\n\t\t\ttry {\n\t\t\t\tconst originalSize = new Blob([data]).size;\n\t\t\t\tconst stream = new Blob([data]).stream();\n\t\t\t\tconst compressedStream = stream.pipeThrough(\n\t\t\t\t\tnew CompressionStream(\"gzip\"),\n\t\t\t\t);\n\t\t\t\tconst compressedBlob = await new Response(compressedStream).blob();\n\t\t\t\treturn { body: compressedBlob, compressed: true, originalSize };\n\t\t\t} catch (err) {\n\t\t\t\tlog(\"Compression failed, sending uncompressed:\", err);\n\t\t\t\tconst fallbackBlob = new Blob([data]);\n\t\t\t\treturn {\n\t\t\t\t\tbody: fallbackBlob,\n\t\t\t\t\tcompressed: false,\n\t\t\t\t\toriginalSize: fallbackBlob.size,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tlog(\"CompressionStream not available, sending uncompressed\");\n\t\tconst fallbackBlob = new Blob([data]);\n\t\treturn {\n\t\t\tbody: fallbackBlob,\n\t\t\tcompressed: false,\n\t\t\toriginalSize: fallbackBlob.size,\n\t\t};\n\t};\n\n\tconst getCookieDomain = () => {\n\t\tconst win = getWindow();\n\t\tif (!win) return \"\";\n\t\tconst hostname = win.location.hostname;\n\t\tif (\n\t\t\thostname === \"localhost\" ||\n\t\t\thostname === \"127.0.0.1\" ||\n\t\t\t/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)\n\t\t) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst parts = hostname.split(\".\");\n\t\tif (parts.length >= 2) {\n\t\t\treturn `.${parts.slice(-2).join(\".\")}`;\n\t\t}\n\t\treturn hostname;\n\t};\n\n\tconst getCookieSecurityAttrs = () => {\n\t\treturn \"; Secure; SameSite=None\";\n\t};\n\n\tconst setCookie = (name: string, value: string, days = 365) => {\n\t\tconst doc = getDocument();\n\t\tif (!doc) return;\n\t\tconst expires = new Date();\n\t\texpires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\n\t\tconst encodedValue = encodeURIComponent(value);\n\t\tconst domain = getCookieDomain();\n\t\tconst domainAttr = domain ? `; Domain=${domain}` : \"\";\n\t\tconst securityAttrs = getCookieSecurityAttrs();\n\t\tconst cookieBase = `${name}=${encodedValue}`;\n\t\tconst cookieWithAttrs = `${cookieBase}; expires=${expires.toUTCString()}; Path=/${domainAttr}${securityAttrs}`;\n\t\tdoc.cookie = cookieWithAttrs;\n\t\tif (!doc.cookie.includes(`${name}=`)) {\n\t\t\tdoc.cookie = cookieBase;\n\t\t}\n\t};\n\n\tconst getCookie = (name: string) => {\n\t\tconst doc = getDocument();\n\t\tif (!doc) return null;\n\t\tconst nameEQ = `${name}=`;\n\t\tconst ca = doc.cookie.split(\";\");\n\t\tfor (let i = 0; i < ca.length; i += 1) {\n\t\t\tlet c = ca[i] ?? \"\";\n\t\t\twhile (c.charAt(0) === \" \") c = c.substring(1, c.length);\n\t\t\tif (c.indexOf(nameEQ) === 0) {\n\t\t\t\treturn decodeURIComponent(c.substring(nameEQ.length, c.length));\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tconst deleteCookie = (name: string) => {\n\t\tconst doc = getDocument();\n\t\tif (!doc) return;\n\t\tconst domain = getCookieDomain();\n\t\tconst domainAttr = domain ? `; Domain=${domain}` : \"\";\n\t\tconst securityAttrs = getCookieSecurityAttrs();\n\t\tdoc.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; Path=/${domainAttr}${securityAttrs}`;\n\t};\n\n\tconst saveSessionToStorage = () => {\n\t\tconst storageKey = config.sessionStorageKey || \"iw_session\";\n\t\tif (!storageKey) {\n\t\t\tlog(\"No session storage key configured, skipping save\");\n\t\t\treturn;\n\t\t}\n\t\tconst sessionData: SessionData = {\n\t\t\tsessionId,\n\t\t\tuserId,\n\t\t\torganizationId,\n\t\t\tlastActivity: now(),\n\t\t\tsessionStartTime,\n\t\t\tisActive: isSessionActive,\n\t\t\tconfig: {\n\t\t\t\tendpoint: config.endpoint,\n\t\t\t\tsessionTimeout: config.sessionTimeout,\n\t\t\t},\n\t\t};\n\t\tif (externalId) {\n\t\t\tsessionData.externalId = externalId;\n\t\t}\n\t\ttry {\n\t\t\tsetCookie(storageKey, JSON.stringify(sessionData), 730);\n\t\t\tlog(\"Saved session to storage with user identity\");\n\t\t} catch (err) {\n\t\t\terror(\"Failed to save session to storage:\", err);\n\t\t}\n\t};\n\n\tconst clearSessionFromStorage = () => {\n\t\tconst storageKey = config.sessionStorageKey || \"iw_session\";\n\t\tif (!storageKey) {\n\t\t\tlog(\"No session storage key configured, skipping clear\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tdeleteCookie(storageKey);\n\t\t} catch (err) {\n\t\t\terror(\"Failed to clear session from storage:\", err);\n\t\t}\n\t};\n\n\tconst loadSessionFromStorage = (): SessionData | null => {\n\t\tconst storageKey = config.sessionStorageKey || \"iw_session\";\n\t\tif (!storageKey) {\n\t\t\tlog(\"No session storage key configured, skipping load\");\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tconst sessionData = getCookie(storageKey);\n\t\t\tif (!sessionData) {\n\t\t\t\tlog(\"No session data found in storage\");\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst parsed = JSON.parse(sessionData) as SessionData;\n\t\t\tconst timeSinceLastActivity = now() - parsed.lastActivity;\n\t\t\tconst totalSessionDuration = parsed.sessionStartTime\n\t\t\t\t? now() - parsed.sessionStartTime\n\t\t\t\t: 0;\n\t\t\tif (\n\t\t\t\ttimeSinceLastActivity > config.sessionTimeout ||\n\t\t\t\ttotalSessionDuration > config.sessionTimeout\n\t\t\t) {\n\t\t\t\tclearSessionFromStorage();\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlog(\"Session loaded from storage successfully:\", parsed);\n\t\t\treturn parsed;\n\t\t} catch (err) {\n\t\t\terror(\"Failed to load session from storage:\", err);\n\t\t\tclearSessionFromStorage();\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tconst getOrCreateUserId = () => {\n\t\tconst existingSession = loadSessionFromStorage();\n\t\tif (existingSession?.userId) {\n\t\t\tlog(\"Using existing userId from cookie:\", existingSession.userId);\n\t\t\treturn existingSession.userId;\n\t\t}\n\t\tconst newUserId = generateUserId();\n\t\tlog(\"Generated new userId:\", newUserId);\n\t\treturn newUserId;\n\t};\n\n\tconst updateSessionActivity = () => {\n\t\tif (isSessionActive) {\n\t\t\tsaveSessionToStorage();\n\t\t\tif (config.refresh) {\n\t\t\t\tresetSessionExpiryTimer();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst startSessionHeartbeat = () => {\n\t\tif (sessionHeartbeatTimer) {\n\t\t\tclearInterval(sessionHeartbeatTimer);\n\t\t}\n\n\t\t// Always run a heartbeat to check for session expiry\n\t\t// Use configured interval or default to 60 seconds\n\t\tconst checkInterval = config.sessionHeartbeatInterval || 60_000;\n\n\t\tsessionHeartbeatTimer = setInterval(() => {\n\t\t\tif (isSessionActive) {\n\t\t\t\t// Check if session has exceeded maximum duration\n\t\t\t\tif (sessionStartTime) {\n\t\t\t\t\tconst totalDuration = now() - sessionStartTime;\n\t\t\t\t\tif (totalDuration > config.sessionTimeout) {\n\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t`Session expired (exceeded max duration of ${config.sessionTimeout / 60_000} minutes), stopping session`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstopRecordingSession();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update or save session activity\n\t\t\t\tif (config.refresh) {\n\t\t\t\t\tupdateSessionActivity();\n\t\t\t\t} else {\n\t\t\t\t\tsaveSessionToStorage();\n\t\t\t\t}\n\t\t\t}\n\t\t}, checkInterval);\n\t};\n\n\tconst stopSessionHeartbeat = () => {\n\t\tif (sessionHeartbeatTimer) {\n\t\t\tclearInterval(sessionHeartbeatTimer);\n\t\t\tsessionHeartbeatTimer = null;\n\t\t} else {\n\t\t\tlog(\"No heartbeat timer to stop\");\n\t\t}\n\t};\n\n\tconst startSessionExpiryTimer = () => {\n\t\tif (sessionExpiryTimer) {\n\t\t\tclearTimeout(sessionExpiryTimer);\n\t\t}\n\t\tlet timeoutDuration = config.sessionTimeout;\n\t\tif (sessionStartTime) {\n\t\t\tconst elapsed = now() - sessionStartTime;\n\t\t\tconst remaining = config.sessionTimeout - elapsed;\n\t\t\tif (remaining <= 0) {\n\t\t\t\tclearSessionFromStorage();\n\t\t\t\tsessionId = generateSessionId();\n\t\t\t\tsessionStartTime = now();\n\t\t\t\ttimeoutDuration = config.sessionTimeout;\n\t\t\t} else {\n\t\t\t\ttimeoutDuration = remaining;\n\t\t\t}\n\t\t}\n\t\tsessionExpiryTimer = setTimeout(() => {\n\t\t\tstopRecordingSession();\n\t\t}, timeoutDuration);\n\t};\n\n\tconst resetSessionExpiryTimer = () => {\n\t\tif (sessionExpiryTimer) {\n\t\t\tclearTimeout(sessionExpiryTimer);\n\t\t}\n\t\tstartSessionExpiryTimer();\n\t};\n\n\tconst stopSessionExpiryTimer = () => {\n\t\tif (sessionExpiryTimer) {\n\t\t\tclearTimeout(sessionExpiryTimer);\n\t\t\tsessionExpiryTimer = null;\n\t\t} else {\n\t\t\tlog(\"No session expiry timer to stop\");\n\t\t}\n\t};\n\n\tconst isSessionExpired = (sessionData: SessionData | null) => {\n\t\tif (!sessionData) {\n\t\t\tlog(\"No session data provided, considering expired\");\n\t\t\treturn true;\n\t\t}\n\t\tconst timeSinceLastActivity = now() - sessionData.lastActivity;\n\t\tconst totalSessionDuration = sessionData.sessionStartTime\n\t\t\t? now() - sessionData.sessionStartTime\n\t\t\t: 0;\n\t\treturn (\n\t\t\ttimeSinceLastActivity > config.sessionTimeout ||\n\t\t\ttotalSessionDuration > config.sessionTimeout\n\t\t);\n\t};\n\n\tconst fetchWithTimeout = async (\n\t\turl: string,\n\t\toptions: RequestInit = {},\n\t\ttimeoutMs = 20_000,\n\t) => {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\t\tconst mergedOptions = { ...options, signal: controller.signal };\n\t\ttry {\n\t\t\treturn await fetch(url, mergedOptions);\n\t\t} catch (err) {\n\t\t\tif (\n\t\t\t\terr instanceof DOMException &&\n\t\t\t\t(err.name === \"AbortError\" || err.name === \"TimeoutError\")\n\t\t\t) {\n\t\t\t\treturn { ok: false, status: 0, statusText: \"Aborted\" };\n\t\t\t}\n\t\t\tif (typeof err === \"object\") {\n\t\t\t\tconst message = (err as { message?: string }).message || \"\";\n\t\t\t\tif (message.includes(\"aborted\") || message.includes(\"cancelled\")) {\n\t\t\t\t\treturn { ok: false, status: 0, statusText: \"Aborted\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ok: false, status: 0, statusText: \"Aborted\" };\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t};\n\n\tconst buildEndpointUrl = (\n\t\tbaseEndpoint: string,\n\t\trequestType: string,\n\t\tkeepalive: boolean | null,\n\t\tpayloadSizeKB: number,\n\t\tisCompressed = false,\n\t\tsessionIdParam: string | null = null,\n\t) => {\n\t\tlet url: URL;\n\t\ttry {\n\t\t\turl = new URL(baseEndpoint);\n\t\t} catch {\n\t\t\treturn baseEndpoint;\n\t\t}\n\t\tconst currentSessionId =\n\t\t\tsessionIdParam !== null ? sessionIdParam : sessionId;\n\t\turl.searchParams.set(URL_PARAMS.VERSION, LIB_VERSION);\n\t\turl.searchParams.set(URL_PARAMS.REQUEST_TYPE, requestType);\n\t\turl.searchParams.set(\n\t\t\tURL_PARAMS.KEEPALIVE,\n\t\t\tkeepalive === null ? \"null\" : String(keepalive),\n\t\t);\n\t\turl.searchParams.set(URL_PARAMS.SIZE, Math.round(payloadSizeKB).toString());\n\t\turl.searchParams.set(URL_PARAMS.COMPRESSION, isCompressed ? \"1\" : \"0\");\n\t\tif (currentSessionId) {\n\t\t\turl.searchParams.set(URL_PARAMS.SESSION_ID, currentSessionId);\n\t\t}\n\t\treturn url.toString();\n\t};\n\n\tconst sendEvents = async (events: unknown[]) => {\n\t\tif (!events || events.length === 0) {\n\t\t\tlog(\"No events to send, skipping network request\");\n\t\t\treturn;\n\t\t}\n\t\tif (contractStatus) {\n\t\t\tlog(\"Events not sent - Contract issue:\", contractStatus.message);\n\t\t\treturn;\n\t\t}\n\t\tif (quotaStatus) {\n\t\t\tlog(\"Events not sent - Quota exceeded:\", quotaStatus.message);\n\t\t\treturn;\n\t\t}\n\t\tif (config.defaultSamplingPercent === 0) {\n\t\t\tlog(\"Events not sent - samplingPercent set to 0\");\n\t\t\treturn;\n\t\t}\n\t\tif (!sessionId || !userId) {\n\t\t\terror(\"Cannot send events: sessionId or userId not set\");\n\t\t\treturn;\n\t\t}\n\t\tconst capturedSessionId = sessionId;\n\t\tconst capturedUserId = userId;\n\t\tconst capturedExternalId = externalId;\n\t\tconst capturedOrganizationId = organizationId;\n\n\t\tconst eventsToSend = [...events];\n\t\tconst MAX_CHUNK_SIZE = 40 * BYTES_IN_KILOBYTE;\n\n\t\tconst basePayload = {\n\t\t\tsession_id: capturedSessionId,\n\t\t\tuser_id: capturedUserId,\n\t\t\torganization_id: capturedOrganizationId,\n\t\t\tevents: [] as unknown[],\n\t\t\tclient_version: LIB_VERSION,\n\t\t};\n\t\tif (capturedExternalId) {\n\t\t\t(basePayload as { external_id?: string }).external_id =\n\t\t\t\tcapturedExternalId;\n\t\t}\n\t\tconst basePayloadString = JSON.stringify(basePayload);\n\t\tconst basePayloadSize = new Blob([basePayloadString]).size;\n\t\tconst fullPayloadString = JSON.stringify({\n\t\t\t...basePayload,\n\t\t\tevents: eventsToSend,\n\t\t});\n\t\tconst fullPayloadSize = new Blob([fullPayloadString]).size;\n\n\t\tlet chunks: unknown[][] = [];\n\t\tif (fullPayloadSize > MAX_CHUNK_SIZE) {\n\t\t\tlet currentChunk: unknown[] = [];\n\t\t\tlet currentChunkSize = basePayloadSize;\n\t\t\tfor (let i = 0; i < eventsToSend.length; i += 1) {\n\t\t\t\tconst testChunk = [...currentChunk, eventsToSend[i]];\n\t\t\t\tconst testPayloadSize = new Blob([\n\t\t\t\t\tJSON.stringify({ ...basePayload, events: testChunk }),\n\t\t\t\t]).size;\n\t\t\t\tif (testPayloadSize > MAX_CHUNK_SIZE && currentChunk.length > 0) {\n\t\t\t\t\tchunks.push([...currentChunk]);\n\t\t\t\t\tcurrentChunk = [eventsToSend[i]];\n\t\t\t\t\tcurrentChunkSize = new Blob([\n\t\t\t\t\t\tJSON.stringify({ ...basePayload, events: currentChunk }),\n\t\t\t\t\t]).size;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentChunk = testChunk;\n\t\t\t\t\tcurrentChunkSize = testPayloadSize;\n\t\t\t\t}\n\t\t\t\tvoid currentChunkSize;\n\t\t\t}\n\t\t\tif (currentChunk.length > 0) {\n\t\t\t\tchunks.push(currentChunk);\n\t\t\t}\n\t\t} else {\n\t\t\tchunks = [eventsToSend];\n\t\t}\n\n\t\tfor (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex += 1) {\n\t\t\tconst chunk = chunks[chunkIndex];\n\t\t\tconst chunkPayload = {\n\t\t\t\tsession_id: capturedSessionId,\n\t\t\t\tuser_id: capturedUserId,\n\t\t\t\torganization_id: capturedOrganizationId,\n\t\t\t\tevents: chunk,\n\t\t\t\tclient_version: LIB_VERSION,\n\t\t\t};\n\t\t\tif (capturedExternalId) {\n\t\t\t\t(chunkPayload as { external_id?: string }).external_id =\n\t\t\t\t\tcapturedExternalId;\n\t\t\t}\n\t\t\tconst chunkPayloadString = JSON.stringify(chunkPayload);\n\t\t\ttry {\n\t\t\t\t// In debug mode: send plain string (readable + easy to inspect).\n\t\t\t\tconst compressionResult = config.debug\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tbody: chunkPayloadString,\n\t\t\t\t\t\t\tcompressed: false,\n\t\t\t\t\t\t\toriginalSize: new Blob([chunkPayloadString]).size,\n\t\t\t\t\t\t}\n\t\t\t\t\t: await compressGzip(chunkPayloadString);\n\t\t\t\tconst bodyToSend = compressionResult.body;\n\t\t\t\tconst bodySizeBytes =\n\t\t\t\t\ttypeof bodyToSend === \"string\"\n\t\t\t\t\t\t? new Blob([bodyToSend]).size\n\t\t\t\t\t\t: bodyToSend instanceof Blob\n\t\t\t\t\t\t\t? bodyToSend.size\n\t\t\t\t\t\t\t: new Blob([bodyToSend as unknown as ArrayBuffer]).size;\n\t\t\t\tconst payloadSizeKB = bodySizeBytes / BYTES_IN_KILOBYTE;\n\n\t\t\t\tif (payloadSizeKB * BYTES_IN_KILOBYTE > MAX_CHUNK_SIZE) {\n\t\t\t\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t\t\t\tconfig.endpoint,\n\t\t\t\t\t\t\"f\",\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tpayloadSizeKB,\n\t\t\t\t\t\tcompressionResult.compressed,\n\t\t\t\t\t\tcapturedSessionId,\n\t\t\t\t\t);\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"Content-Type\": compressionResult.compressed\n\t\t\t\t\t\t\t? \"application/gzip\"\n\t\t\t\t\t\t\t: \"text/plain\",\n\t\t\t\t\t};\n\t\t\t\t\tconst response = await fetchWithTimeout(\n\t\t\t\t\t\tendpointUrl,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tbody: bodyToSend,\n\t\t\t\t\t\t\tkeepalive: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t20_000,\n\t\t\t\t\t);\n\t\t\t\t\tif (response?.status === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (response && !response.ok && response.status >= 500) {\n\t\t\t\t\t\terror(`Failed to send chunk ${chunkIndex + 1}:`, response.status);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet sent = false;\n\t\t\t\t\tif (isBrowser() && navigator.sendBeacon) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t\t\t\t\t\tconfig.endpoint,\n\t\t\t\t\t\t\t\t\"b\",\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tpayloadSizeKB,\n\t\t\t\t\t\t\t\tcompressionResult.compressed,\n\t\t\t\t\t\t\t\tcapturedSessionId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsent = navigator.sendBeacon(endpointUrl, bodyToSend);\n\t\t\t\t\t\t\tif (sent) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t\t\"Compression failed for sendBeacon, falling back to fetch:\",\n\t\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t`sendBeacon not supported for chunk ${chunkIndex + 1}, using fetch`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t\t\t\tconfig.endpoint,\n\t\t\t\t\t\t\"f\",\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tpayloadSizeKB,\n\t\t\t\t\t\tcompressionResult.compressed,\n\t\t\t\t\t\tcapturedSessionId,\n\t\t\t\t\t);\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"Content-Type\": compressionResult.compressed\n\t\t\t\t\t\t\t? \"application/gzip\"\n\t\t\t\t\t\t\t: \"text/plain\",\n\t\t\t\t\t};\n\t\t\t\t\tfetchWithTimeout(\n\t\t\t\t\t\tendpointUrl,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tbody: bodyToSend,\n\t\t\t\t\t\t\tkeepalive: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t20_000,\n\t\t\t\t\t).catch(() => {\n\t\t\t\t\t\t// swallow telemetry failures\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst errorMessage = (err as { message?: string })?.message || \"\";\n\t\t\t\tconst isBlocked =\n\t\t\t\t\terrorMessage.includes(\"Failed to fetch\") ||\n\t\t\t\t\terrorMessage.includes(\"NetworkError\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_CLIENT\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_RESPONSE\") ||\n\t\t\t\t\terrorMessage.includes(\"net::ERR_FAILED\");\n\t\t\t\tconst isAborted =\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\t(err as { name?: string })?.name === \"TimeoutError\" ||\n\t\t\t\t\terrorMessage.includes(\"aborted\") ||\n\t\t\t\t\terrorMessage.includes(\"cancelled\");\n\t\t\t\tif (isBlocked || isAborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst flushEvents = () => {\n\t\tif (eventBuffer.length === 0) {\n\t\t\tlog(\"No events in buffer to flush\");\n\t\t\treturn;\n\t\t}\n\t\tconst eventsToSend = [...eventBuffer];\n\t\teventBuffer = [];\n\t\tvoid sendEvents(eventsToSend);\n\t};\n\n\tconst startFlushTimer = () => {\n\t\tif (flushTimer) {\n\t\t\tlog(\"Clearing existing flush timer\");\n\t\t\tclearInterval(flushTimer);\n\t\t}\n\t\tflushTimer = setInterval(() => {\n\t\t\tflushEvents();\n\t\t}, config.flushInterval);\n\t};\n\n\tconst stopFlushTimer = () => {\n\t\tif (flushTimer) {\n\t\t\tclearInterval(flushTimer);\n\t\t\tflushTimer = null;\n\t\t} else {\n\t\t\tlog(\"No flush timer to stop\");\n\t\t}\n\t};\n\n\tconst loadRrweb = () =>\n\t\tnew Promise<NonNullable<Window[\"rrweb\"]>>((resolve, reject) => {\n\t\t\tif (!isBrowser()) {\n\t\t\t\treject(new Error(\"rrweb requires a browser environment\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (window.rrweb) {\n\t\t\t\tresolve(window.rrweb);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.src = \"https://app.infinitewatch.ai/rrweb.min.js\";\n\t\t\tscript.onload = () => {\n\t\t\t\tif (window.rrweb) {\n\t\t\t\t\tresolve(window.rrweb);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error(\"rrweb failed to load\"));\n\t\t\t\t}\n\t\t\t};\n\t\t\tscript.onerror = () => reject(new Error(\"Failed to load rrweb script\"));\n\t\t\tdocument.head.appendChild(script);\n\t\t});\n\n\tconst loadRrwebPacker = () =>\n\t\tnew Promise<NonNullable<Window[\"pack\"]>>((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!isBrowser()) {\n\t\t\t\t\treject(new Error(\"rrweb packer requires a browser environment\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst existing = window.rrwebPack?.pack || window.pack;\n\t\t\t\tif (typeof existing === \"function\") {\n\t\t\t\t\tresolve(existing);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst script = document.createElement(\"script\");\n\t\t\t\tscript.src = \"https://app.infinitewatch.ai/rrweb-record-pack.min.js\";\n\t\t\t\tscript.async = true;\n\t\t\t\tscript.onload = () => {\n\t\t\t\t\tconst packFn = window.rrwebRecord?.pack || window.pack;\n\t\t\t\t\tif (typeof packFn === \"function\") {\n\t\t\t\t\t\tresolve(packFn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(\n\t\t\t\t\t\t\tnew Error(\"rrweb packer loaded but pack function not found\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tscript.onerror = () =>\n\t\t\t\t\treject(new Error(\"Failed to load rrweb packer script\"));\n\t\t\t\tdocument.head.appendChild(script);\n\t\t\t} catch (e) {\n\t\t\t\treject(e as Error);\n\t\t\t}\n\t\t});\n\n\tconst addEvent = async (event: unknown) => {\n\t\tif (hardStop) return;\n\n\t\t// Check if current session has expired\n\t\tif (isSessionActive && sessionStartTime) {\n\t\t\tconst totalSessionDuration = now() - sessionStartTime;\n\t\t\tif (totalSessionDuration > config.sessionTimeout) {\n\t\t\t\tlog(\"Session expired, stopping and restarting with new session\");\n\t\t\t\tstopRecordingSession();\n\t\t\t\t// Fall through to the !isSessionActive block below to create new session\n\t\t\t}\n\t\t}\n\n\t\tif (!isSessionActive) {\n\t\t\tif (stopRecording) {\n\t\t\t\tstopRecording();\n\t\t\t\tstopRecording = null;\n\t\t\t}\n\t\t\tsessionId = config.sessionId || generateSessionId();\n\t\t\tuserId = config.userId || getOrCreateUserId();\n\t\t\tconst previousSession = loadSessionFromStorage();\n\t\t\tif (previousSession?.externalId) {\n\t\t\t\texternalId = previousSession.externalId || null;\n\t\t\t}\n\t\t\torganizationId = config.organizationId;\n\t\t\tsessionStartTime = now();\n\t\t\tawait startRecording();\n\t\t\treturn;\n\t\t}\n\t\teventBuffer.push(event);\n\t\tupdateSessionActivity();\n\t\tif (eventBuffer.length >= config.batchSize) {\n\t\t\tlog(\"Buffer size reached, triggering flush\");\n\t\t\tflushEvents();\n\t\t} else {\n\t\t\tlog(\"Buffer not full yet, continuing to collect events\");\n\t\t}\n\t};\n\n\tconst generateInsights = async (hardSessionId: string | null = null) => {\n\t\tif (!config.generateInsights) {\n\t\t\treturn;\n\t\t}\n\n\t\tsessionId = hardSessionId || sessionId;\n\t\tif (!sessionId || !organizationId) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Backend base URL (no ingest); append sessions insights path\n\t\tconst base = (config.endpointInsights || config.baseUrl || \"\")\n\t\t\t.toString()\n\t\t\t.replace(/\\/$/, \"\");\n\t\tif (!base) return;\n\t\tconst endpointUrl = `${base}/v1/sessions/${encodeURIComponent(sessionId)}/insights`;\n\n\t\tconst payload = { organization_id: organizationId };\n\t\tconst payloadString = JSON.stringify(payload);\n\n\t\ttry {\n\t\t\tconst response = await fetch(endpointUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: payloadString,\n\t\t\t\tmode: \"cors\",\n\t\t\t\tcredentials: \"omit\",\n\t\t\t});\n\t\t\tif (response.status === 0) {\n\t\t\t\tlog(\"Insights request aborted (status 0)\");\n\t\t\t} else if (!response.ok && response.status >= 500) {\n\t\t\t\terror(\"Failed to send insights with fetch:\", response.status);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errorMessage = (err as { message?: string })?.message || \"\";\n\t\t\tconst isBlocked =\n\t\t\t\terrorMessage.includes(\"Failed to fetch\") ||\n\t\t\t\terrorMessage.includes(\"NetworkError\") ||\n\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_CLIENT\") ||\n\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_RESPONSE\") ||\n\t\t\t\terrorMessage.includes(\"net::ERR_FAILED\");\n\t\t\tconst isAborted =\n\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t(err as { name?: string })?.name === \"TimeoutError\" ||\n\t\t\t\terrorMessage.includes(\"aborted\") ||\n\t\t\t\terrorMessage.includes(\"cancelled\");\n\t\t\tif (isBlocked || isAborted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t};\n\n\tconst startRecording = async () => {\n\t\tif (isSessionActive) {\n\t\t\tlog(\"Recording already active, skipping startRecording\");\n\t\t\treturn;\n\t\t}\n\t\tisSessionActive = true;\n\t\ttry {\n\t\t\tconst [packFn, rrweb] = await Promise.all([\n\t\t\t\tloadRrwebPacker(),\n\t\t\t\tloadRrweb(),\n\t\t\t]);\n\n\t\t\tconst filterBlacklistedAttrMutations = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tif (!Array.isArray(data.attributes)) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t\tconst prefixes = Array.isArray(config.blackList)\n\t\t\t\t\t? config.blackList.filter(\n\t\t\t\t\t\t\t(p) => typeof p === \"string\" && p.length > 0,\n\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\tif (prefixes.length === 0) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t\tconst startsWithBlacklisted = (idValue: unknown) => {\n\t\t\t\t\tif (typeof idValue !== \"string\") return false;\n\t\t\t\t\tfor (const prefix of prefixes) {\n\t\t\t\t\t\tif (idValue.startsWith(prefix)) return true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t\tconst nextAttributes = data.attributes.filter((attrChange) => {\n\t\t\t\t\tconst elemId = (attrChange as attributeMutation | null)?.attributes\n\t\t\t\t\t\t?.id;\n\t\t\t\t\treturn !startsWithBlacklisted(elemId);\n\t\t\t\t});\n\t\t\t\t// event is guaranteed non-null here since data was obtained from getMutationData(event)\n\t\t\t\tconst baseEvent = event as eventWithTime;\n\t\t\t\tconst nextData = { ...data, attributes: nextAttributes };\n\t\t\t\tconst hasAdds =\n\t\t\t\t\tArray.isArray(nextData.adds) && nextData.adds.length > 0;\n\t\t\t\tconst hasRemoves =\n\t\t\t\t\tArray.isArray(nextData.removes) && nextData.removes.length > 0;\n\t\t\t\tconst hasTexts =\n\t\t\t\t\tArray.isArray(nextData.texts) && nextData.texts.length > 0;\n\t\t\t\tconst hasAttributes =\n\t\t\t\t\tArray.isArray(nextData.attributes) && nextData.attributes.length > 0;\n\t\t\t\tif (!hasAdds && !hasRemoves && !hasTexts && !hasAttributes) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...baseEvent,\n\t\t\t\t\tdata: nextData,\n\t\t\t\t} as eventWithTime;\n\t\t\t};\n\n\t\t\tconst filterMutations = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (data) {\n\t\t\t\t\tconst attrs = data.attributes;\n\t\t\t\t\tif (Array.isArray(attrs) && attrs.length) {\n\t\t\t\t\t\tconst filtered = attrs.filter((a) => {\n\t\t\t\t\t\t\tconst at = isRecord((a as attributeMutation | null)?.attributes)\n\t\t\t\t\t\t\t\t? ((a as attributeMutation).attributes as Record<\n\t\t\t\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\t\t\t\tunknown\n\t\t\t\t\t\t\t\t\t>)\n\t\t\t\t\t\t\t\t: {};\n\t\t\t\t\t\t\tconst keys = Object.keys(at);\n\t\t\t\t\t\t\tconst onlyTransformOpacity =\n\t\t\t\t\t\t\t\tkeys.length > 0 &&\n\t\t\t\t\t\t\t\tkeys.every((k) => k === \"transform\" || k === \"opacity\");\n\t\t\t\t\t\t\tif (!onlyTransformOpacity) return true;\n\t\t\t\t\t\t\tconst id = at.id;\n\t\t\t\t\t\t\tif (isInteractiveId(id)) return true;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (filtered.length === 0) return null;\n\t\t\t\t\t\tdata.attributes = filtered;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst isNoisySvgAdd = (add: addedNodeMutation) => {\n\t\t\t\tconst n = add?.node as RrwebSerializedNodeWithMeta | undefined;\n\t\t\t\tif (!n) return false;\n\t\t\t\tif (!n.isSVG) return false;\n\t\t\t\tconst tag = (n.tagName || \"\").toLowerCase();\n\t\t\t\tif (\n\t\t\t\t\ttag === \"path\" &&\n\t\t\t\t\ttypeof (isRecord(n.attributes) ? n.attributes.d : undefined) ===\n\t\t\t\t\t\t\"string\" &&\n\t\t\t\t\t(isRecord(n.attributes) ? String(n.attributes.d).length : 0) > 200\n\t\t\t\t)\n\t\t\t\t\treturn true;\n\t\t\t\tif (tag === \"style\") return true;\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tconst isUselessTextAdd = (add: addedNodeMutation) => {\n\t\t\t\tconst n = add?.node as RrwebSerializedNodeWithMeta | undefined;\n\t\t\t\treturn n?.type === 3 && (n.textContent === \"\" || n.textContent == null);\n\t\t\t};\n\n\t\t\tconst filterAdds = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tif (Array.isArray(data.adds) && data.adds.length) {\n\t\t\t\t\tdata.adds = data.adds.filter(\n\t\t\t\t\t\t(add) => !isNoisySvgAdd(add) && !isUselessTextAdd(add),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst hasAdds = Array.isArray(data.adds) && data.adds.length > 0;\n\t\t\t\tconst hasRemoves =\n\t\t\t\t\tArray.isArray(data.removes) && data.removes.length > 0;\n\t\t\t\tconst hasTexts = Array.isArray(data.texts) && data.texts.length > 0;\n\t\t\t\tconst hasAttributes =\n\t\t\t\t\tArray.isArray(data.attributes) && data.attributes.length > 0;\n\t\t\t\tif (!hasAdds && !hasRemoves && !hasTexts && !hasAttributes) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst NET_SAMPLE_MS = 10_000;\n\t\t\tconst IDLE_MS = 15_000;\n\t\t\tconst BLOCKED_NET_HOSTS = new Set([\n\t\t\t\t\"ingest.infinitewatch.ai\",\n\t\t\t\t\"ingest.humanbehavior.co\",\n\t\t\t\t\"iw-backend-live.fly.dev\",\n\t\t\t]);\n\t\t\tlet __iw_lastUserIntentAt = now();\n\t\t\tlet __iw_intentInstalled = false;\n\t\t\tconst __iw_lastNetSentAt = new Map<string, number>();\n\n\t\t\tconst iwInstallUserIntentListenersOnce = () => {\n\t\t\t\tif (__iw_intentInstalled || !isBrowser()) return;\n\t\t\t\t__iw_intentInstalled = true;\n\t\t\t\tconst mark = () => {\n\t\t\t\t\t__iw_lastUserIntentAt = now();\n\t\t\t\t};\n\t\t\t\t[\n\t\t\t\t\t\"pointerdown\",\n\t\t\t\t\t\"mousedown\",\n\t\t\t\t\t\"touchstart\",\n\t\t\t\t\t\"keydown\",\n\t\t\t\t\t\"wheel\",\n\t\t\t\t\t\"scroll\",\n\t\t\t\t\t\"input\",\n\t\t\t\t].forEach((t) => {\n\t\t\t\t\twindow.addEventListener(t, mark, { capture: true, passive: true });\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst iwKeyForRequest = (name: string) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst u = new URL(name);\n\t\t\t\t\treturn u.hostname + u.pathname;\n\t\t\t\t} catch {\n\t\t\t\t\treturn String(name || \"\");\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst iwIsBlockedHost = (name: string) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst host = new URL(name).hostname;\n\t\t\t\t\treturn BLOCKED_NET_HOSTS.has(host);\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst filterNetworkNoise = (event: eventWithTime | null) => {\n\t\t\t\tif (\n\t\t\t\t\t!event ||\n\t\t\t\t\tevent.type !== 6 ||\n\t\t\t\t\t!(event.data as { plugin?: string } | undefined)?.plugin ||\n\t\t\t\t\t(event.data as { plugin?: string }).plugin !== \"rrweb/network@1\"\n\t\t\t\t) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t\tif (now() - __iw_lastUserIntentAt > IDLE_MS) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst payload = (event.data as { payload?: { requests?: unknown } })\n\t\t\t\t\t?.payload;\n\t\t\t\tconst reqs = payload?.requests;\n\t\t\t\tif (!Array.isArray(reqs) || reqs.length === 0) return event;\n\t\t\t\tconst timestamp = event.timestamp || now();\n\t\t\t\tconst filteredReqs: Record<string, unknown>[] = [];\n\t\t\t\tfor (const r of reqs) {\n\t\t\t\t\tconst name = (r as Record<string, unknown> | null)?.name;\n\t\t\t\t\tif (typeof name !== \"string\") continue;\n\t\t\t\t\tif (iwIsBlockedHost(name)) continue;\n\t\t\t\t\tconst key = iwKeyForRequest(name);\n\t\t\t\t\tconst last = __iw_lastNetSentAt.get(key) || 0;\n\t\t\t\t\tif (timestamp - last < NET_SAMPLE_MS) continue;\n\t\t\t\t\t__iw_lastNetSentAt.set(key, timestamp);\n\t\t\t\t\tfilteredReqs.push(r as Record<string, unknown>);\n\t\t\t\t}\n\t\t\t\tif (filteredReqs.length === 0) return null;\n\t\t\t\treturn {\n\t\t\t\t\t...event,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t...event.data,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t...payload,\n\t\t\t\t\t\t\trequests: filteredReqs,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst ANIM_ATTR_KEYS = new Set([\"d\"]);\n\t\t\tconst ANIM_STYLE_KEYS = new Set([\n\t\t\t\t\"transform\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"filter\",\n\t\t\t\t\"backdrop-filter\",\n\t\t\t\t\"will-change\",\n\t\t\t\t\"translate\",\n\t\t\t\t\"scale\",\n\t\t\t\t\"rotate\",\n\t\t\t]);\n\n\t\t\tconst isAnimationOnlyAttrChange = (attrChange: attributeMutation) => {\n\t\t\t\tconst attrs = (attrChange as attributeMutation | null)?.attributes;\n\t\t\t\tif (!attrs || typeof attrs !== \"object\") return false;\n\t\t\t\tconst keys = Object.keys(attrs);\n\t\t\t\tconst firstKey = keys[0];\n\t\t\t\tif (keys.length === 1 && firstKey && ANIM_ATTR_KEYS.has(firstKey))\n\t\t\t\t\treturn true;\n\t\t\t\tif (keys.length === 1 && firstKey === \"style\") {\n\t\t\t\t\tconst style = (attrs as Record<string, unknown>).style;\n\t\t\t\t\tif (!style || typeof style !== \"object\") return false;\n\t\t\t\t\tconst styleKeys = Object.keys(style);\n\t\t\t\t\tif (styleKeys.length === 0) return false;\n\t\t\t\t\treturn styleKeys.every((k) => ANIM_STYLE_KEYS.has(k));\n\t\t\t\t}\n\t\t\t\treturn keys.every((k) => ANIM_STYLE_KEYS.has(k));\n\t\t\t};\n\n\t\t\tconst isPureAnimationMutationEvent = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return false;\n\t\t\t\tconst hasAdds = Array.isArray(data.adds) && data.adds.length > 0;\n\t\t\t\tconst hasRemoves =\n\t\t\t\t\tArray.isArray(data.removes) && data.removes.length > 0;\n\t\t\t\tconst hasTexts = Array.isArray(data.texts) && data.texts.length > 0;\n\t\t\t\tif (hasAdds || hasRemoves || hasTexts) return false;\n\t\t\t\tconst attrs = data.attributes;\n\t\t\t\tif (!Array.isArray(attrs) || attrs.length === 0) return false;\n\t\t\t\treturn attrs.every(isAnimationOnlyAttrChange);\n\t\t\t};\n\n\t\t\tconst IDLE_MUTATION_SAMPLE_MS = 1_500;\n\t\t\tlet __iw_lastKeptIdleAnimMutationAt = 0;\n\n\t\t\tconst sampleAnimationMutationsWhenIdle = (\n\t\t\t\tevent: eventWithTime | null,\n\t\t\t) => {\n\t\t\t\tif (!event || event.type !== 3 || event?.data?.source !== 0)\n\t\t\t\t\treturn event;\n\t\t\t\tconst idleFor = now() - __iw_lastUserIntentAt;\n\t\t\t\tif (idleFor <= IDLE_MS) return event;\n\t\t\t\tif (!isPureAnimationMutationEvent(event)) return event;\n\t\t\t\tconst ts = event.timestamp || now();\n\t\t\t\tif (ts - __iw_lastKeptIdleAnimMutationAt < IDLE_MUTATION_SAMPLE_MS) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t__iw_lastKeptIdleAnimMutationAt = ts;\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst dropIdleAnimationMutations = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tconst idleFor = now() - __iw_lastUserIntentAt;\n\t\t\t\tif (idleFor > IDLE_MS && isPureAnimationMutationEvent(event))\n\t\t\t\t\treturn null;\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst DROP_ATTR_KEYS = new Set([\"decoding\", \"data-hydrated\"]);\n\t\t\tconst filterLowValueAttributes = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tconst attrs = data.attributes;\n\t\t\t\tif (!Array.isArray(attrs) || attrs.length === 0) return event;\n\t\t\t\tconst next = [];\n\t\t\t\tfor (const a of attrs) {\n\t\t\t\t\tconst at = (a as attributeMutation | null)?.attributes;\n\t\t\t\t\tif (!at || typeof at !== \"object\") {\n\t\t\t\t\t\tnext.push(a);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst newAttrs = { ...at };\n\t\t\t\t\tfor (const k of Object.keys(newAttrs)) {\n\t\t\t\t\t\tif (DROP_ATTR_KEYS.has(k)) delete newAttrs[k];\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t\"preserveAspectRatio\" in newAttrs &&\n\t\t\t\t\t\tString(newAttrs.preserveAspectRatio).toLowerCase() === \"none\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete newAttrs.preserveAspectRatio;\n\t\t\t\t\t}\n\t\t\t\t\tif (\"width\" in newAttrs && String(newAttrs.width) === \"100%\")\n\t\t\t\t\t\tdelete newAttrs.width;\n\t\t\t\t\tif (\"height\" in newAttrs && String(newAttrs.height) === \"100%\")\n\t\t\t\t\t\tdelete newAttrs.height;\n\t\t\t\t\tif (Object.keys(newAttrs).length === 0) continue;\n\t\t\t\t\tnext.push({ ...a, attributes: newAttrs });\n\t\t\t\t}\n\t\t\t\tdata.attributes = next;\n\t\t\t\tconst empty =\n\t\t\t\t\t(!data.adds || data.adds.length === 0) &&\n\t\t\t\t\t(!data.attributes || data.attributes.length === 0) &&\n\t\t\t\t\t(!data.texts || data.texts.length === 0) &&\n\t\t\t\t\t(!data.removes || data.removes.length === 0);\n\t\t\t\treturn empty ? null : event;\n\t\t\t};\n\n\t\t\tconst filterIdleEvents = (event: eventWithTime | null) => {\n\t\t\t\tif (now() - __iw_lastUserIntentAt > IDLE_MS) {\n\t\t\t\t\tif (event?.type === 3 && event?.data?.source === 0) {\n\t\t\t\t\t\tconst hasAdds =\n\t\t\t\t\t\t\tArray.isArray(event.data.adds) && event.data.adds.length > 0;\n\t\t\t\t\t\tconst hasRemoves =\n\t\t\t\t\t\t\tArray.isArray(event.data.removes) &&\n\t\t\t\t\t\t\tevent.data.removes.length > 0;\n\t\t\t\t\t\tconst hasTexts =\n\t\t\t\t\t\t\tArray.isArray(event.data.texts) && event.data.texts.length > 0;\n\t\t\t\t\t\tif (hasAdds || hasRemoves || hasTexts) {\n\t\t\t\t\t\t\treturn event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst filterEvent = (event: eventWithTime | null) => {\n\t\t\t\tlet filtered = event;\n\t\t\t\t// Pass through custom events (type 5) without DOM filters\n\t\t\t\tif (filtered?.type === 5) return filtered;\n\t\t\t\tfiltered = filterIdleEvents(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterBlacklistedAttrMutations(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterMutations(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterAdds(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterNetworkNoise(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = sampleAnimationMutationsWhenIdle(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = dropIdleAnimationMutations(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterLowValueAttributes(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\treturn filtered;\n\t\t\t};\n\n\t\t\tconst INTERACTIVE_SELECTOR =\n\t\t\t\t'a,button,input,select,textarea,label,[role=\"button\"],[role=\"link\"],[tabindex],[contenteditable=\"true\"]';\n\n\t\t\tconst isInteractiveEl = (el: Element | null) => {\n\t\t\t\tif (!el || el.nodeType !== 1) return false;\n\t\t\t\treturn !!(\n\t\t\t\t\tel.matches?.(INTERACTIVE_SELECTOR) ||\n\t\t\t\t\tel.closest?.(INTERACTIVE_SELECTOR)\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst onlyAnimationStyleChanged = (oldStyle = \"\", newStyle = \"\") => {\n\t\t\t\tconst toMap = (s: string) =>\n\t\t\t\t\ts\n\t\t\t\t\t\t.split(\";\")\n\t\t\t\t\t\t.map((x) => x.trim())\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.map((x) => x.split(\":\").map((y) => y.trim()))\n\t\t\t\t\t\t.reduce<Record<string, string>>((acc, [k, v]) => {\n\t\t\t\t\t\t\tif (k) acc[k] = v ?? \"\";\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, {});\n\t\t\t\tconst oldMap = toMap(oldStyle);\n\t\t\t\tconst newMap = toMap(newStyle);\n\t\t\t\tconst changedKeys = new Set<string>();\n\t\t\t\tfor (const k of new Set([\n\t\t\t\t\t...Object.keys(oldMap),\n\t\t\t\t\t...Object.keys(newMap),\n\t\t\t\t])) {\n\t\t\t\t\tif ((oldMap[k] ?? \"\") !== (newMap[k] ?? \"\")) changedKeys.add(k);\n\t\t\t\t}\n\t\t\t\tif (changedKeys.size === 0) return false;\n\t\t\t\tconst ANIM_STYLE_PROPS = [\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t\"opacity\",\n\t\t\t\t\t\"will-change\",\n\t\t\t\t\t\"filter\",\n\t\t\t\t\t\"backdrop-filter\",\n\t\t\t\t\t\"translate\",\n\t\t\t\t\t\"scale\",\n\t\t\t\t\t\"rotate\",\n\t\t\t\t];\n\t\t\t\treturn [...changedKeys].every((k) =>\n\t\t\t\t\tANIM_STYLE_PROPS.some((p) => k.includes(p)),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst INTERACTIVE_TAGS = new Set([\n\t\t\t\t\"a\",\n\t\t\t\t\"button\",\n\t\t\t\t\"input\",\n\t\t\t\t\"select\",\n\t\t\t\t\"textarea\",\n\t\t\t\t\"label\",\n\t\t\t]);\n\t\t\tconst INTERACTIVE_ROLES = new Set([\"button\", \"link\"]);\n\t\t\tlet __iw_idIsInteractive = new Map<string, boolean>();\n\n\t\t\tconst rebuildInteractiveIdMapFromFullSnapshot = (\n\t\t\t\tfsEvent: eventWithTime,\n\t\t\t) => {\n\t\t\t\t__iw_idIsInteractive = new Map();\n\t\t\t\tconst root = (fsEvent?.data as { node?: RrwebSerializedNodeWithMeta })\n\t\t\t\t\t?.node;\n\t\t\t\tif (!root) return;\n\t\t\t\tconst walk = (\n\t\t\t\t\tnode: RrwebSerializedNodeWithMeta,\n\t\t\t\t\tinteractiveAncestor = false,\n\t\t\t\t): void => {\n\t\t\t\t\tif (!node || typeof node !== \"object\") return;\n\t\t\t\t\tif (node.type !== 2) {\n\t\t\t\t\t\tif (node.childNodes) {\n\t\t\t\t\t\t\tnode.childNodes.forEach((ch) => {\n\t\t\t\t\t\t\t\twalk(ch, interactiveAncestor);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst tag = String(node.tagName || \"\").toLowerCase();\n\t\t\t\t\tconst attrs = node.attributes || {};\n\t\t\t\t\tconst id = attrs.id;\n\t\t\t\t\tconst selfInteractive =\n\t\t\t\t\t\tINTERACTIVE_TAGS.has(tag) ||\n\t\t\t\t\t\t(typeof attrs.role === \"string\" &&\n\t\t\t\t\t\t\tINTERACTIVE_ROLES.has(String(attrs.role).toLowerCase())) ||\n\t\t\t\t\t\tattrs.tabindex != null ||\n\t\t\t\t\t\tattrs.href != null ||\n\t\t\t\t\t\tString(attrs.contenteditable || \"\").toLowerCase() === \"true\";\n\t\t\t\t\tconst isInteractive = interactiveAncestor || selfInteractive;\n\t\t\t\t\tif (typeof id === \"string\") {\n\t\t\t\t\t\t__iw_idIsInteractive.set(id, isInteractive);\n\t\t\t\t\t}\n\t\t\t\t\tif (node.childNodes) {\n\t\t\t\t\t\tnode.childNodes.forEach((ch) => {\n\t\t\t\t\t\t\twalk(ch, isInteractive);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twalk(root, false);\n\t\t\t};\n\n\t\t\tconst isInteractiveId = (id: unknown) => {\n\t\t\t\tif (typeof id !== \"string\") return false;\n\t\t\t\treturn __iw_idIsInteractive.get(id) === true;\n\t\t\t};\n\n\t\t\tconst emitUrlChangeEvent = () => {\n\t\t\t\tconst win = getWindow();\n\t\t\t\tif (!win) return;\n\t\t\t\tconst url = win.location.href;\n\t\t\t\tif (url === lastRecordedUrl) return;\n\t\t\t\tlastRecordedUrl = url;\n\t\t\t\tconst customEvent = {\n\t\t\t\t\ttype: 5,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttag: \"url-change\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tpathname: win.location.pathname,\n\t\t\t\t\t\tsearch: win.location.search,\n\t\t\t\t\t\thash: win.location.hash,\n\t\t\t\t\t},\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tw_v: LIB_VERSION,\n\t\t\t\t};\n\t\t\t\tvoid addEvent(customEvent);\n\t\t\t};\n\n\t\t\tconst installUrlChangeListeners = () => {\n\t\t\t\tconst win = getWindow();\n\t\t\t\tif (!win) return;\n\t\t\t\tconst originalPushState = win.history.pushState.bind(win.history);\n\t\t\t\tconst originalReplaceState = win.history.replaceState.bind(win.history);\n\t\t\t\twin.history.pushState = (\n\t\t\t\t\t...args: Parameters<typeof win.history.pushState>\n\t\t\t\t) => {\n\t\t\t\t\toriginalPushState(...args);\n\t\t\t\t\temitUrlChangeEvent();\n\t\t\t\t};\n\t\t\t\twin.history.replaceState = (\n\t\t\t\t\t...args: Parameters<typeof win.history.replaceState>\n\t\t\t\t) => {\n\t\t\t\t\toriginalReplaceState(...args);\n\t\t\t\t\temitUrlChangeEvent();\n\t\t\t\t};\n\t\t\t\tconst popstateHandler = () => emitUrlChangeEvent();\n\t\t\t\twin.addEventListener(\"popstate\", popstateHandler);\n\t\t\t\turlChangeCleanup = () => {\n\t\t\t\t\twin.history.pushState = originalPushState;\n\t\t\t\t\twin.history.replaceState = originalReplaceState;\n\t\t\t\t\twin.removeEventListener(\"popstate\", popstateHandler);\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst recordOptions: Record<string, unknown> = {\n\t\t\t\temit: (event: eventWithTime) => {\n\t\t\t\t\tif (event?.type === 2) {\n\t\t\t\t\t\trebuildInteractiveIdMapFromFullSnapshot(event);\n\t\t\t\t\t}\n\t\t\t\t\tconst filtered = filterEvent(event);\n\t\t\t\t\tif (filtered) {\n\t\t\t\t\t\t// Optional: let host page observe events (e.g. window.__IW_CONFIG__.onEvent)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst win = getWindow();\n\t\t\t\t\t\t\tconst iwConfig = win\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\twin as Window & {\n\t\t\t\t\t\t\t\t\t\t\t__IW_CONFIG__?: {\n\t\t\t\t\t\t\t\t\t\t\t\tonEvent?: (e: unknown) => void;\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).__IW_CONFIG__\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tif (typeof iwConfig?.onEvent === \"function\") {\n\t\t\t\t\t\t\t\tiwConfig.onEvent(filtered);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// no-op\n\t\t\t\t\t\t}\n\t\t\t\t\t\t(filtered as eventWithTime & { w_v?: string }).w_v = LIB_VERSION;\n\t\t\t\t\t\t// In debug mode skip packing so events are readable in Network tab\n\t\t\t\t\t\tconst eventToAdd = config.debug ? filtered : packFn(filtered);\n\t\t\t\t\t\tvoid addEvent(eventToAdd);\n\t\t\t\t\t\t// Type 5 session-started only when lastRecordedUrl not set yet (first full snapshot of session)\n\t\t\t\t\t\tif (filtered.type === 2 && !lastRecordedUrl) {\n\t\t\t\t\t\t\tconst win = getWindow();\n\t\t\t\t\t\t\tconst url = win?.location?.href ?? \"\";\n\t\t\t\t\t\t\tlastRecordedUrl = url;\n\t\t\t\t\t\t\tconst sessionStartedEvent = {\n\t\t\t\t\t\t\t\ttype: 5,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttag: \"session-started\",\n\t\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\t\tpathname: win?.location?.pathname ?? \"\",\n\t\t\t\t\t\t\t\t\tsearch: win?.location?.search ?? \"\",\n\t\t\t\t\t\t\t\t\thash: win?.location?.hash ?? \"\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\tw_v: LIB_VERSION,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tvoid addEvent(sessionStartedEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmaskAllInputs: config.maskAllInputs,\n\t\t\t\tmaskInputOptions: config.maskInputOptions,\n\t\t\t\trecordCanvas: config.recordCanvas,\n\t\t\t\trecordIframe: config.recordIframe,\n\t\t\t\trecordCrossOriginIframes: config.recordCrossOriginIframes,\n\t\t\t\tcollectFonts: false,\n\t\t\t\tinlineStylesheet: config.inlineStylesheet,\n\t\t\t\tslimDOM: true,\n\t\t\t\tslimDOMOptions: {\n\t\t\t\t\tscript: true,\n\t\t\t\t\tcomment: true,\n\t\t\t\t\theadFavicon: true,\n\t\t\t\t\theadMETA: true,\n\t\t\t\t\theadLink: true,\n\t\t\t\t\theadScript: true,\n\t\t\t\t\theadStyle: true,\n\t\t\t\t\tiframe: true,\n\t\t\t\t\tsvg: true,\n\t\t\t\t},\n\t\t\t\tsampling: {\n\t\t\t\t\tmousemove: 300,\n\t\t\t\t\tscroll: 300,\n\t\t\t\t\tmedia: 3000,\n\t\t\t\t\tinput: \"last\",\n\t\t\t\t},\n\t\t\t\tignoreMutation: (m: MutationRecord) => {\n\t\t\t\t\tconst t = m.target || null;\n\t\t\t\t\tif (!t || t.nodeType !== 1) return false;\n\t\t\t\t\tif (m.type === \"attributes\" && m.attributeName === \"style\") {\n\t\t\t\t\t\tconst oldStyle = m.oldValue ?? \"\";\n\t\t\t\t\t\tconst newStyle = (t as Element).getAttribute(\"style\") ?? \"\";\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlyAnimationStyleChanged(oldStyle, newStyle) &&\n\t\t\t\t\t\t\t!isInteractiveEl(t as Element)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tm.type === \"childList\" &&\n\t\t\t\t\t\tm.addedNodes.length === 0 &&\n\t\t\t\t\t\tm.removedNodes.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tif (config.blockClass) {\n\t\t\t\trecordOptions.blockClass = config.blockClass;\n\t\t\t}\n\t\t\tif (config.blockSelector) {\n\t\t\t\trecordOptions.blockSelector = config.blockSelector;\n\t\t\t}\n\t\t\tif (config.maskTextSelector) {\n\t\t\t\trecordOptions.maskTextSelector = config.maskTextSelector;\n\t\t\t}\n\t\t\tif (config.maskTextClass) {\n\t\t\t\trecordOptions.maskTextClass = config.maskTextClass;\n\t\t\t}\n\n\t\t\tiwInstallUserIntentListenersOnce();\n\t\t\tstopRecording = rrweb.record(recordOptions);\n\t\t\tinstallUrlChangeListeners();\n\t\t\tinitSessionRecording();\n\t\t} catch (err) {\n\t\t\terror(\"Failed to start recording:\", err);\n\t\t}\n\t};\n\n\tconst initSessionRecording = () => {\n\t\tstartSessionHeartbeat();\n\t\tstartSessionExpiryTimer();\n\t\tsaveSessionToStorage();\n\t\tstartFlushTimer();\n\t};\n\n\tconst stopRecordingSession = () => {\n\t\tstopSessionHeartbeat();\n\t\tstopSessionExpiryTimer();\n\t\tstopFlushTimer();\n\t\tflushEvents();\n\t\tclearSessionFromStorage();\n\t\tif (urlChangeCleanup) {\n\t\t\turlChangeCleanup();\n\t\t\turlChangeCleanup = null;\n\t\t}\n\t\tlastRecordedUrl = \"\";\n\t\tsessionId = null;\n\t\tsessionStartTime = null;\n\t\tisSessionActive = false;\n\t};\n\n\tconst init = async (options: WebCoreOptions) => {\n\t\tif (!isBrowser()) {\n\t\t\treturn null;\n\t\t}\n\t\tif (isInitialized) {\n\t\t\tlog(\"Tracker already initialized\");\n\t\t\treturn client;\n\t\t}\n\t\tif (!options.organizationId) {\n\t\t\t// Always log this critical error regardless of debug setting\n\t\t\tconsole.error(\n\t\t\t\t\"[InfiniteWatch]\",\n\t\t\t\t\"organizationId is required. Provide it as a prop/parameter or via an environment variable (e.g. NEXT_PUBLIC_INFINITEWATCH_ORG_ID or VITE_INFINITEWATCH_ORG_ID).\",\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t\tif (isOrganizationExcluded(options.organizationId)) {\n\t\t\tlog(\"Organization excluded from tracking:\", options.organizationId);\n\t\t\treturn null;\n\t\t}\n\t\tconst initialConfig = { ...DEFAULT_CONFIG, ...options };\n\t\tlet recordingConfig: Partial<typeof DEFAULT_CONFIG> = {};\n\t\tif (initialConfig.endpointConfig && initialConfig.organizationId) {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(initialConfig.endpointConfig, {\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"X-Organization\": initialConfig.organizationId,\n\t\t\t\t\t},\n\t\t\t\t\tcredentials: \"omit\",\n\t\t\t\t\tkeepalive: false,\n\t\t\t\t});\n\t\t\t\tif (response.status === 403) {\n\t\t\t\t\tconst errorData = await response.json();\n\t\t\t\t\tcontractStatus = {\n\t\t\t\t\t\terror: errorData.error || \"No active contract\",\n\t\t\t\t\t\tmessage: errorData.message || \"Your contract has expired\",\n\t\t\t\t\t\tcontract_expired: errorData.contract_expired || true,\n\t\t\t\t\t};\n\t\t\t\t\tlog(\n\t\t\t\t\t\t\"Contract expired or no active contract:\",\n\t\t\t\t\t\tcontractStatus.message,\n\t\t\t\t\t);\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (response.status === 429) {\n\t\t\t\t\tconst errorData = await response.json();\n\t\t\t\t\tquotaStatus = {\n\t\t\t\t\t\terror: errorData.error || \"Quota exceeded\",\n\t\t\t\t\t\tmessage: errorData.message || \"You have reached your usage limit\",\n\t\t\t\t\t\tusage: errorData.usage || null,\n\t\t\t\t\t\tupgrade_url: errorData.upgrade_url || null,\n\t\t\t\t\t};\n\t\t\t\t\tlog(\"Quota exceeded:\", quotaStatus.message);\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (response.ok) {\n\t\t\t\t\tconst configData = await response.json();\n\t\t\t\t\tconst booleanFromConfig = (value: unknown, fallback: boolean) => {\n\t\t\t\t\t\tif (value == null) return fallback;\n\t\t\t\t\t\tif (value === \"true\") return true;\n\t\t\t\t\t\tif (value === \"false\") return false;\n\t\t\t\t\t\treturn Boolean(value);\n\t\t\t\t\t};\n\t\t\t\t\trecordingConfig = {\n\t\t\t\t\t\tdefaultSamplingPercent:\n\t\t\t\t\t\t\tconfigData.samplingPercent ??\n\t\t\t\t\t\t\tinitialConfig.defaultSamplingPercent,\n\t\t\t\t\t\tautoResumeSession: booleanFromConfig(\n\t\t\t\t\t\t\tconfigData.autoResumeSession,\n\t\t\t\t\t\t\tinitialConfig.autoResumeSession,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tbatchSize: configData.batchSize ?? initialConfig.batchSize,\n\t\t\t\t\t\tflushInterval:\n\t\t\t\t\t\t\tconfigData.flushInterval ?? initialConfig.flushInterval,\n\t\t\t\t\t\tsessionTimeout:\n\t\t\t\t\t\t\tconfigData.sessionTimeout ?? initialConfig.sessionTimeout,\n\t\t\t\t\t\tsessionHeartbeatInterval:\n\t\t\t\t\t\t\tconfigData.sessionHeartbeatInterval ??\n\t\t\t\t\t\t\tinitialConfig.sessionHeartbeatInterval,\n\t\t\t\t\t\tinlineStylesheet: booleanFromConfig(\n\t\t\t\t\t\t\tconfigData.inlineStylesheet,\n\t\t\t\t\t\t\tinitialConfig.inlineStylesheet,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tgenerateInsights: booleanFromConfig(\n\t\t\t\t\t\t\tconfigData.generateInsights,\n\t\t\t\t\t\t\tinitialConfig.generateInsights,\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t\toptions.defaultSamplingPercent =\n\t\t\t\t\t\trecordingConfig.defaultSamplingPercent;\n\t\t\t\t\toptions.autoResumeSession = recordingConfig.autoResumeSession;\n\t\t\t\t\toptions.batchSize = recordingConfig.batchSize;\n\t\t\t\t\toptions.flushInterval = recordingConfig.flushInterval;\n\t\t\t\t\toptions.sessionTimeout = recordingConfig.sessionTimeout;\n\t\t\t\t\toptions.sessionHeartbeatInterval =\n\t\t\t\t\t\trecordingConfig.sessionHeartbeatInterval;\n\t\t\t\t\toptions.inlineStylesheet = recordingConfig.inlineStylesheet;\n\t\t\t\t\toptions.generateInsights = recordingConfig.generateInsights;\n\t\t\t\t\toptions.blackList = recordingConfig.blackList;\n\t\t\t\t\tswitch (configData.masking) {\n\t\t\t\t\t\tcase \"All\":\n\t\t\t\t\t\t\toptions.maskTextSelector = \"body\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"OnlyPasswords\":\n\t\t\t\t\t\t\toptions.maskAllInputs = false;\n\t\t\t\t\t\t\toptions.maskInputOptions = {\n\t\t\t\t\t\t\t\tpassword: true,\n\t\t\t\t\t\t\t\temail: false,\n\t\t\t\t\t\t\t\ttext: false,\n\t\t\t\t\t\t\t\ttel: false,\n\t\t\t\t\t\t\t\turl: false,\n\t\t\t\t\t\t\t\ttextarea: false,\n\t\t\t\t\t\t\t\tselect: false,\n\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\tradio: false,\n\t\t\t\t\t\t\t\tfile: false,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlog(\"Config endpoint returned error:\", response.status);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tlog(\"Failed to fetch endpoint config, using defaults:\", err);\n\t\t\t}\n\t\t}\n\n\t\tconfig = { ...DEFAULT_CONFIG, ...options };\n\n\t\tif (config.autoResumeSession) {\n\t\t\tconst existingSession = loadSessionFromStorage();\n\t\t\tif (existingSession && !isSessionExpired(existingSession)) {\n\t\t\t\tsessionId = existingSession.sessionId;\n\t\t\t\tuserId = existingSession.userId;\n\t\t\t\texternalId = existingSession.externalId || null;\n\t\t\t\torganizationId =\n\t\t\t\t\texistingSession.organizationId || config.organizationId;\n\t\t\t\tsessionStartTime = existingSession.sessionStartTime || now();\n\t\t\t\tisSampledIn = true;\n\t\t\t} else {\n\t\t\t\tsessionId = config.sessionId || generateSessionId();\n\t\t\t\tuserId = config.userId || getOrCreateUserId();\n\t\t\t\tconst previousSession = loadSessionFromStorage();\n\t\t\t\tif (previousSession?.externalId) {\n\t\t\t\t\texternalId = previousSession.externalId || null;\n\t\t\t\t}\n\t\t\t\torganizationId = config.organizationId;\n\t\t\t\tsessionStartTime = now();\n\t\t\t\tisSampledIn = shouldSample(organizationId, sessionId);\n\t\t\t}\n\t\t} else {\n\t\t\tsessionId = config.sessionId || generateSessionId();\n\t\t\tuserId = config.userId || getOrCreateUserId();\n\t\t\tconst previousSession = loadSessionFromStorage();\n\t\t\tif (previousSession?.externalId) {\n\t\t\t\texternalId = previousSession.externalId || null;\n\t\t\t}\n\t\t\torganizationId = config.organizationId;\n\t\t\tsessionStartTime = now();\n\t\t\tisSampledIn = shouldSample(organizationId, sessionId);\n\t\t}\n\n\t\tif (isSampledIn) {\n\t\t\tstartSessionExpiryTimer();\n\t\t} else {\n\t\t\tlog(\"Session not sampled in; not starting expiry timer\");\n\t\t}\n\n\t\tisInitialized = true;\n\n\t\twindow.addEventListener(\"beforeunload\", () => {\n\t\t\tflushEvents();\n\t\t\tupdateSessionActivity();\n\t\t\tvoid generateInsights().catch(() => {\n\t\t\t\t// swallow\n\t\t\t});\n\t\t});\n\n\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\t// Check if session has expired while tab was backgrounded\n\t\t\t\tif (isSessionActive && sessionStartTime) {\n\t\t\t\t\tconst totalSessionDuration = now() - sessionStartTime;\n\t\t\t\t\tif (totalSessionDuration > config.sessionTimeout) {\n\t\t\t\t\t\tlog(\"Session expired while tab was backgrounded, stopping session\");\n\t\t\t\t\t\tstopRecordingSession();\n\t\t\t\t\t\treturn; // Don't update activity for expired session\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateSessionActivity();\n\t\t\t} else if (document.visibilityState === \"hidden\") {\n\t\t\t\tvoid generateInsights().catch(() => {\n\t\t\t\t\t// swallow\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn client;\n\t};\n\n\tconst start = async () => {\n\t\tif (!isInitialized) {\n\t\t\terror(\"Tracker not initialized. Call init() first.\");\n\t\t\treturn client;\n\t\t}\n\t\tif (contractStatus) {\n\t\t\tlog(\"Recording blocked - Contract issue:\", contractStatus.message);\n\t\t\treturn client;\n\t\t}\n\t\tif (quotaStatus) {\n\t\t\tlog(\"Recording blocked - Quota exceeded:\", quotaStatus.message);\n\t\t\treturn client;\n\t\t}\n\t\tif (config.defaultSamplingPercent === 0) {\n\t\t\tlog(\"Recording blocked - samplingPercent set to 0\");\n\t\t\treturn client;\n\t\t}\n\t\tif (!isSampledIn) {\n\t\t\treturn client;\n\t\t}\n\t\ttry {\n\t\t\tawait startRecording();\n\t\t} catch (err) {\n\t\t\terror(\"Failed to start recording:\", err);\n\t\t}\n\t\treturn client;\n\t};\n\n\tconst stop = () => {\n\t\tstopRecordingSession();\n\t\treturn client;\n\t};\n\n\tconst hardStopSession = () => {\n\t\thardStop = true;\n\t\tstopRecordingSession();\n\t\treturn client;\n\t};\n\n\tconst flush = () => {\n\t\tflushEvents();\n\t\treturn client;\n\t};\n\n\tconst identify = (userIdentifier: UserIdentifier) => {\n\t\tif (!userIdentifier || !userIdentifier.external_id) {\n\t\t\terror(\"InfiniteWatch.identify: external_id is required\");\n\t\t\treturn client;\n\t\t}\n\t\tif (!sessionId || !userId) {\n\t\t\terror(\n\t\t\t\t\"InfiniteWatch.identify: No active session. Call init() and start() first.\",\n\t\t\t);\n\t\t\treturn client;\n\t\t}\n\t\tif (!organizationId) {\n\t\t\torganizationId = config.organizationId;\n\t\t}\n\t\tif (!organizationId) {\n\t\t\terror(\n\t\t\t\t\"InfiniteWatch.identify: No organization ID set. Cannot identify user.\",\n\t\t\t);\n\t\t\treturn client;\n\t\t}\n\n\t\tconst doc = getDocument();\n\t\tconst win = getWindow();\n\t\tif (!win) {\n\t\t\treturn client;\n\t\t}\n\t\tconst nav =\n\t\t\twin.navigator ??\n\t\t\t(typeof navigator !== \"undefined\" ? navigator : undefined);\n\t\tconst userLanguage =\n\t\t\tnav && \"userLanguage\" in nav\n\t\t\t\t? (nav as { userLanguage?: string }).userLanguage\n\t\t\t\t: undefined;\n\t\tconst browserMetadata = {\n\t\t\tuser_agent: nav?.userAgent,\n\t\t\tlanguage: nav?.language || userLanguage,\n\t\t\tlanguages: nav?.languages ? Array.from(nav.languages) : [],\n\t\t\tplatform: nav?.platform,\n\t\t\tscreen_width: win.screen?.width,\n\t\t\tscreen_height: win.screen?.height,\n\t\t\tviewport_width: win.innerWidth,\n\t\t\tviewport_height: win.innerHeight,\n\t\t\tcolor_depth: win.screen?.colorDepth,\n\t\t\tpixel_ratio: win.devicePixelRatio || 1,\n\t\t\ttimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t\t\ttimezone_offset: new Date().getTimezoneOffset(),\n\t\t\turl: win.location?.href,\n\t\t\tpathname: win.location?.pathname,\n\t\t\treferrer: doc?.referrer || null,\n\t\t\tonline: nav?.onLine,\n\t\t\tcookie_enabled: nav?.cookieEnabled,\n\t\t\tdo_not_track: nav?.doNotTrack || null,\n\t\t\ttouch_support: \"ontouchstart\" in win || (nav?.maxTouchPoints ?? 0) > 0,\n\t\t};\n\t\tconst requestBody: Record<string, unknown> = {\n\t\t\texternal_id: userIdentifier.external_id,\n\t\t\tsession_id: sessionId,\n\t\t\tuser_id: userId,\n\t\t\torganization_id: organizationId,\n\t\t\tclient_version: LIB_VERSION,\n\t\t\tclient_metadata: browserMetadata,\n\t\t};\n\t\tfor (const key in userIdentifier) {\n\t\t\tif (key !== \"external_id\" && Object.hasOwn(userIdentifier, key)) {\n\t\t\t\trequestBody[key] = userIdentifier[key];\n\t\t\t}\n\t\t}\n\t\tconst payloadString = JSON.stringify(requestBody);\n\t\tconst payloadSizeKB = new Blob([payloadString]).size / BYTES_IN_KILOBYTE;\n\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t`${config.baseUrl}/v1/users`,\n\t\t\t\"f\",\n\t\t\ttrue,\n\t\t\tpayloadSizeKB,\n\t\t\tfalse,\n\t\t\tsessionId,\n\t\t);\n\t\tfetch(endpointUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"text/plain\",\n\t\t\t},\n\t\t\tbody: payloadString,\n\t\t\tkeepalive: true,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status === 0) {\n\t\t\t\t\tlog(\"Identify request aborted (status 0)\");\n\t\t\t\t} else if (response.ok) {\n\t\t\t\t\texternalId = userIdentifier.external_id;\n\t\t\t\t\tsaveSessionToStorage();\n\t\t\t\t\tlog(\"User identified successfully:\", userIdentifier.external_id);\n\t\t\t\t} else if (response.status >= 500) {\n\t\t\t\t\terror(\"Failed to identify user:\", response.status);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tconst errorMessage = (err as { message?: string })?.message || \"\";\n\t\t\t\tconst isBlocked =\n\t\t\t\t\terrorMessage.includes(\"Failed to fetch\") ||\n\t\t\t\t\terrorMessage.includes(\"NetworkError\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_CLIENT\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_RESPONSE\") ||\n\t\t\t\t\terrorMessage.includes(\"net::ERR_FAILED\");\n\t\t\t\tconst isAborted =\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\t(err as { name?: string })?.name === \"TimeoutError\" ||\n\t\t\t\t\terrorMessage.includes(\"aborted\") ||\n\t\t\t\t\terrorMessage.includes(\"cancelled\");\n\t\t\t\tif (!isBlocked && !isAborted) {\n\t\t\t\t\terror(\"InfiniteWatch identify failed:\", err);\n\t\t\t\t}\n\t\t\t});\n\t\treturn client;\n\t};\n\n\tconst getSessionInfo = (): SessionInfo => {\n\t\treturn {\n\t\t\tsessionId,\n\t\t\tuserId,\n\t\t\torganizationId,\n\t\t\tsessionStartTime,\n\t\t\tisActive: isSessionActive,\n\t\t\thasStoredSession: !!loadSessionFromStorage(),\n\t\t};\n\t};\n\n\tconst isBlocked = () => {\n\t\treturn (\n\t\t\tcontractStatus !== null ||\n\t\t\tquotaStatus !== null ||\n\t\t\tconfig.defaultSamplingPercent === 0\n\t\t);\n\t};\n\n\tconst getContractStatus = () => contractStatus;\n\tconst getQuotaStatus = () => quotaStatus;\n\n\tconst client: WebCoreClient = {\n\t\tinit,\n\t\tstart,\n\t\tstop,\n\t\thardStop: hardStopSession,\n\t\tflush,\n\t\tidentify,\n\t\tgetSessionInfo,\n\t\tisBlocked,\n\t\tgetContractStatus,\n\t\tgetQuotaStatus,\n\t};\n\n\treturn client;\n};\n","import { createWebCore } from \"./core\";\nimport type { WebCoreOptions } from \"./types\";\n\ntype IWQueueEntry = [string, unknown[]];\n\ntype IWInstance = {\n\t_q?: IWQueueEntry[];\n\tinit?: (...args: unknown[]) => unknown;\n\tstart?: (...args: unknown[]) => unknown;\n\tstop?: (...args: unknown[]) => unknown;\n\thardStop?: (...args: unknown[]) => unknown;\n\tflush?: (...args: unknown[]) => unknown;\n\tidentify?: (...args: unknown[]) => unknown;\n\tgetSessionInfo?: (...args: unknown[]) => unknown;\n\tisBlocked?: (...args: unknown[]) => unknown;\n\tgetContractStatus?: (...args: unknown[]) => unknown;\n\tgetQuotaStatus?: (...args: unknown[]) => unknown;\n\t[key: string]: unknown;\n};\n\ntype IWWatchWindow = Window & {\n\t__IW_LOADED?: boolean;\n\t__IW_SNIPPET_LOADED?: boolean;\n\t__IW_CONFIG__?: Record<string, unknown>;\n\tInfiniteWatch?: IWInstance;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === \"object\" && value !== null;\n\n(() => {\n\tif (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n\n\tconst iwWindow = window as IWWatchWindow;\n\n\tif (iwWindow.__IW_LOADED || iwWindow.__IW_SNIPPET_LOADED) return;\n\tiwWindow.__IW_LOADED = true;\n\tiwWindow.__IW_SNIPPET_LOADED = true;\n\n\tconst currentScript =\n\t\t(document.currentScript as HTMLScriptElement | null) ||\n\t\tdocument.querySelector(\"script[data-iw-organization-id]\");\n\n\tconst configFromGlobal = isRecord(iwWindow.__IW_CONFIG__)\n\t\t? iwWindow.__IW_CONFIG__\n\t\t: {};\n\tconst options: Record<string, unknown> = { ...configFromGlobal };\n\n\tconst existing = iwWindow.InfiniteWatch;\n\tconst queue: IWQueueEntry[] = Array.isArray(existing?._q) ? existing._q : [];\n\n\tconst readAttr = (name: string) => currentScript?.getAttribute(name);\n\tconst organizationId =\n\t\treadAttr(\"data-iw-organization-id\") ?? configFromGlobal.organizationId;\n\tconst hasQueuedInit = queue.some(([method]) => method === \"init\");\n\n\tif (!organizationId && !hasQueuedInit) return;\n\tif (organizationId) {\n\t\toptions.organizationId = organizationId;\n\t}\n\n\tconst endpoint = readAttr(\"data-iw-endpoint\") ?? configFromGlobal.endpoint;\n\tif (endpoint !== undefined) {\n\t\toptions.endpoint = endpoint;\n\t}\n\n\tconst endpointConfig =\n\t\treadAttr(\"data-iw-endpoint-config\") ?? configFromGlobal.endpointConfig;\n\tif (endpointConfig !== undefined) {\n\t\toptions.endpointConfig = endpointConfig;\n\t}\n\n\tconst sessionId =\n\t\treadAttr(\"data-iw-session-id\") ?? configFromGlobal.sessionId;\n\tif (sessionId !== undefined) {\n\t\toptions.sessionId = sessionId;\n\t}\n\n\tconst userId = readAttr(\"data-iw-user-id\") ?? configFromGlobal.userId;\n\tif (userId !== undefined) {\n\t\toptions.userId = userId;\n\t}\n\n\tconst enqueue = (method: string, args: unknown[]) => {\n\t\tqueue.push([method, args]);\n\t};\n\n\tconst makeProxy = (method: string) => {\n\t\treturn (...args: unknown[]): IWInstance => {\n\t\t\tenqueue(method, args);\n\t\t\treturn iwWindow.InfiniteWatch as IWInstance;\n\t\t};\n\t};\n\n\tconst shim: IWInstance = {\n\t\t_q: queue,\n\t\tinit: makeProxy(\"init\"),\n\t\tstart: makeProxy(\"start\"),\n\t\tstop: makeProxy(\"stop\"),\n\t\thardStop: makeProxy(\"hardStop\"),\n\t\tflush: makeProxy(\"flush\"),\n\t\tidentify: makeProxy(\"identify\"),\n\t};\n\n\tiwWindow.InfiniteWatch = { ...(existing || {}), ...shim };\n\n\tif (!hasQueuedInit) {\n\t\tenqueue(\"init\", [options as WebCoreOptions]);\n\t}\n\n\tif (!queue.some(([method]) => method === \"start\")) {\n\t\tenqueue(\"start\", []);\n\t}\n\n\tconst core = createWebCore();\n\tconst drainQueue = async () => {\n\t\tfor (const [method, args] of queue) {\n\t\t\tconst fn = (core as Record<string, unknown>)[method];\n\t\t\tif (typeof fn === \"function\") {\n\t\t\t\tawait (fn as (...callArgs: unknown[]) => unknown)(...args);\n\t\t\t}\n\t\t}\n\t\tqueue.length = 0;\n\t};\n\n\tiwWindow.InfiniteWatch = core as IWInstance;\n\tvoid drainQueue();\n})();\n"],"mappings":"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","names":["fallbackBlob","endpointUrl","isBlocked","isRecord"]}
|
|
1
|
+
{"version":3,"sources":["../src/core.ts","../src/watch.ts"],"sourcesContent":["import type {\n\taddedNodeMutation,\n\tattributeMutation,\n\teventWithTime,\n\tmutationData,\n} from \"@rrweb/types\";\nimport type {\n\tContractStatus,\n\tQuotaStatus,\n\tSessionInfo,\n\tUserIdentifier,\n\tWebCoreClient,\n\tWebCoreOptions,\n} from \"./types\";\n\ntype RrwebSerializedNode = NonNullable<addedNodeMutation[\"node\"]>;\ntype RrwebSerializedNodeWithMeta = RrwebSerializedNode & {\n\tisSVG?: boolean;\n\ttextContent?: string | null;\n\tattributes?: Record<string, unknown>;\n\tchildNodes?: RrwebSerializedNodeWithMeta[];\n\ttagName?: string;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === \"object\" && value !== null;\n\nconst getMutationData = (event: eventWithTime | null): mutationData | null => {\n\tif (!event || event.type !== 3) return null;\n\tconst data = event.data as mutationData | undefined;\n\tif (!data || data.source !== 0) return null;\n\treturn data;\n};\n\nconst LIB_VERSION = \"v43.4\";\n\nconst EXCLUDED_ORGANIZATIONS: Record<string, string> = {\n\t// Add organizations here as needed:\n\t// EXAMPLE_ORG: 'organization_id_here',\n};\n\nconst EXCLUDED_ORG_IDS = new Set(Object.values(EXCLUDED_ORGANIZATIONS));\n\nconst DEFAULT_CONFIG = {\n\tbaseUrl: \"https://ingest.infinitewatch.ai\",\n\tendpoint: \"https://ingest.infinitewatch.ai/v1/ingest\",\n\tendpointInsights: \"https://iw-backend-live.fly.dev\",\n\tendpointConfig: \"https://ingest.infinitewatch.ai/v1/ingest/config\",\n\tsessionId: null as string | null,\n\tuserId: null as string | null,\n\torganizationId: null as string | null,\n\tdebug: false,\n\tdefaultSamplingPercent: 100,\n\tmaskAllInputs: true,\n\tmaskInputOptions: {\n\t\tpassword: true,\n\t\temail: true,\n\t\ttext: true,\n\t\ttel: true,\n\t\turl: true,\n\t\ttextarea: true,\n\t\tselect: true,\n\t\tcheckbox: true,\n\t\tradio: true,\n\t\tfile: true,\n\t} as Record<string, boolean>,\n\tblockClass: \"\",\n\tblockSelector: \"\",\n\tmaskTextSelector: \"\",\n\tmaskTextClass: \"\",\n\trecordIframe: false,\n\trecordCanvas: false,\n\trecordCrossOriginIframes: false,\n\tsessionStorageKey: \"iw_session\",\n\tautoResumeSession: true,\n\tbatchSize: 200,\n\tflushInterval: 10_000,\n\tsessionTimeout: 30 * 60 * 1000,\n\tsessionHeartbeatInterval: null as number | null,\n\trefresh: false,\n\tinlineStylesheet: false,\n\tgenerateInsights: false,\n\tblackList: [\"yui_\"],\n};\n\nconst BYTES_IN_KILOBYTE = 1024;\n\nconst URL_PARAMS = {\n\tVERSION: \"v\",\n\tREQUEST_TYPE: \"t\",\n\tKEEPALIVE: \"k\",\n\tSIZE: \"s\",\n\tCOMPRESSION: \"c\",\n\tSESSION_ID: \"i\",\n};\n\ntype SessionData = {\n\tsessionId: string | null;\n\tuserId: string | null;\n\torganizationId: string | null;\n\tlastActivity: number;\n\tsessionStartTime: number | null;\n\tisActive: boolean;\n\tconfig: {\n\t\tendpoint: string;\n\t\tsessionTimeout: number;\n\t};\n\texternalId?: string | null;\n};\n\ntype CompressionResult = {\n\tbody: BodyInit;\n\tcompressed: boolean;\n\toriginalSize: number;\n};\n\nconst getWindow = () => {\n\tif (typeof window !== \"undefined\") {\n\t\treturn window as Window;\n\t}\n\tif (typeof globalThis !== \"undefined\" && \"window\" in globalThis) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: globalThis typing for non-standard environments\n\t\treturn (globalThis as any).window as Window;\n\t}\n\tconst doc =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? (document as Document)\n\t\t\t: typeof globalThis !== \"undefined\" && \"document\" in globalThis\n\t\t\t\t? // biome-ignore lint/suspicious/noExplicitAny: globalThis typing for non-standard environments\n\t\t\t\t\t((globalThis as any).document as Document)\n\t\t\t\t: undefined;\n\treturn doc?.defaultView ?? undefined;\n};\n\nconst getDocument = () => {\n\tif (typeof document !== \"undefined\") {\n\t\treturn document as Document;\n\t}\n\tif (typeof globalThis !== \"undefined\" && \"document\" in globalThis) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: globalThis typing for non-standard environments\n\t\treturn (globalThis as any).document as Document;\n\t}\n\treturn undefined;\n};\n\nconst isBrowser = () => !!(getWindow() && getDocument());\n\nconst now = () => Date.now();\n\nconst getCrypto = () => {\n\tconst win = getWindow();\n\tif (win?.crypto) {\n\t\treturn win.crypto;\n\t}\n\tif (typeof globalThis !== \"undefined\" && \"crypto\" in globalThis) {\n\t\treturn globalThis.crypto;\n\t}\n\treturn undefined;\n};\n\nconst randomString = (length: number) => {\n\tconst cryptoApi = getCrypto();\n\tif (!cryptoApi) {\n\t\t// Not expected in supported browsers, but keeps ID generation functional in odd environments.\n\t\treturn `${now().toString(36)}${\"0\".repeat(length)}`.slice(0, length);\n\t}\n\tconst alphabet = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\tconst bytes = new Uint8Array(length);\n\tcryptoApi.getRandomValues(bytes);\n\tlet result = \"\";\n\tfor (let i = 0; i < bytes.length; i += 1) {\n\t\tconst byte = bytes[i] ?? 0;\n\t\tresult += alphabet[byte % alphabet.length];\n\t}\n\treturn result;\n};\n\nconst isOrganizationExcluded = (orgId?: string | null) => {\n\treturn !!orgId && EXCLUDED_ORG_IDS.has(orgId);\n};\n\nexport const createWebCore = (): WebCoreClient => {\n\tlet config = { ...DEFAULT_CONFIG };\n\tlet isInitialized = false;\n\tlet eventBuffer: unknown[] = [];\n\tlet flushTimer: ReturnType<typeof setInterval> | null = null;\n\tlet stopRecording: ReturnType<NonNullable<Window[\"rrweb\"]>[\"record\"]> | null =\n\t\tnull;\n\tlet sessionId: string | null = null;\n\tlet userId: string | null = null;\n\tlet externalId: string | null = null;\n\tlet organizationId: string | null = null;\n\tlet sessionHeartbeatTimer: ReturnType<typeof setInterval> | null = null;\n\tlet sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\n\tlet isSessionActive = false;\n\tlet sessionStartTime: number | null = null;\n\tlet isSampledIn = true;\n\tlet hardStop = false;\n\tlet contractStatus: ContractStatus = null;\n\tlet quotaStatus: QuotaStatus = null;\n\tlet lastRecordedUrl = \"\";\n\tlet urlChangeCleanup: (() => void) | null = null;\n\n\tconst log = (message: string, ...args: unknown[]) => {\n\t\tif (config.debug) {\n\t\t\tconsole.log(\n\t\t\t\t\"[InfiniteWatch]\",\n\t\t\t\tnew Date().toISOString(),\n\t\t\t\tmessage,\n\t\t\t\t...args,\n\t\t\t);\n\t\t}\n\t};\n\n\tconst error = (message: string, ...args: unknown[]) => {\n\t\tif (config.debug) {\n\t\t\tconsole.error(\n\t\t\t\t\"[InfiniteWatch]\",\n\t\t\t\tnew Date().toISOString(),\n\t\t\t\t\"ERROR:\",\n\t\t\t\tmessage,\n\t\t\t\t...args,\n\t\t\t);\n\t\t\tif (args.length > 0 && args[0] instanceof Error) {\n\t\t\t\tconsole.error(\"[InfiniteWatch] Stack trace:\", args[0].stack);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst generateSessionId = () => {\n\t\tconst nextId = `session_${now()}_${randomString(9)}`;\n\t\tlog(\"Generated new session ID:\", nextId);\n\t\treturn nextId;\n\t};\n\n\tconst generateUserId = () => {\n\t\tconst nextId = `user_${randomString(9)}`;\n\t\tlog(\"Generated new user ID:\", nextId);\n\t\treturn nextId;\n\t};\n\n\tconst getSamplingPercentForOrg = (orgId?: string | null) => {\n\t\tif (!orgId) {\n\t\t\treturn typeof config.defaultSamplingPercent === \"number\"\n\t\t\t\t? config.defaultSamplingPercent\n\t\t\t\t: 50;\n\t\t}\n\t\tconst base =\n\t\t\ttypeof config.defaultSamplingPercent === \"number\"\n\t\t\t\t? config.defaultSamplingPercent\n\t\t\t\t: 50;\n\t\treturn Math.max(0, Math.min(100, base));\n\t};\n\n\tconst hashStringToPercent = (value: string) => {\n\t\tlet hash = 5381;\n\t\tconst input = String(value);\n\t\tfor (let i = 0; i < input.length; i += 1) {\n\t\t\thash = (hash << 5) + hash + input.charCodeAt(i);\n\t\t\thash |= 0;\n\t\t}\n\t\treturn Math.abs(hash) % 100;\n\t};\n\n\tconst shouldSample = (orgId: string | null, sessId: string | null) => {\n\t\tconst percent = getSamplingPercentForOrg(orgId);\n\t\tconst bucket = hashStringToPercent(sessId || \"\");\n\t\treturn bucket < percent;\n\t};\n\n\tconst compressGzip = async (data: string): Promise<CompressionResult> => {\n\t\tif (typeof CompressionStream !== \"undefined\") {\n\t\t\ttry {\n\t\t\t\tconst originalSize = new Blob([data]).size;\n\t\t\t\tconst stream = new Blob([data]).stream();\n\t\t\t\tconst compressedStream = stream.pipeThrough(\n\t\t\t\t\tnew CompressionStream(\"gzip\"),\n\t\t\t\t);\n\t\t\t\tconst compressedBlob = await new Response(compressedStream).blob();\n\t\t\t\treturn { body: compressedBlob, compressed: true, originalSize };\n\t\t\t} catch (err) {\n\t\t\t\tlog(\"Compression failed, sending uncompressed:\", err);\n\t\t\t\tconst fallbackBlob = new Blob([data]);\n\t\t\t\treturn {\n\t\t\t\t\tbody: fallbackBlob,\n\t\t\t\t\tcompressed: false,\n\t\t\t\t\toriginalSize: fallbackBlob.size,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tlog(\"CompressionStream not available, sending uncompressed\");\n\t\tconst fallbackBlob = new Blob([data]);\n\t\treturn {\n\t\t\tbody: fallbackBlob,\n\t\t\tcompressed: false,\n\t\t\toriginalSize: fallbackBlob.size,\n\t\t};\n\t};\n\n\tconst getCookieDomain = () => {\n\t\tconst win = getWindow();\n\t\tif (!win) return \"\";\n\t\tconst hostname = win.location.hostname;\n\t\tif (\n\t\t\thostname === \"localhost\" ||\n\t\t\thostname === \"127.0.0.1\" ||\n\t\t\t/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)\n\t\t) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst parts = hostname.split(\".\");\n\t\tif (parts.length >= 2) {\n\t\t\treturn `.${parts.slice(-2).join(\".\")}`;\n\t\t}\n\t\treturn hostname;\n\t};\n\n\tconst getCookieSecurityAttrs = () => {\n\t\treturn \"; Secure; SameSite=None\";\n\t};\n\n\tconst setCookie = (name: string, value: string, days = 365) => {\n\t\tconst doc = getDocument();\n\t\tif (!doc) return;\n\t\tconst expires = new Date();\n\t\texpires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\n\t\tconst encodedValue = encodeURIComponent(value);\n\t\tconst domain = getCookieDomain();\n\t\tconst domainAttr = domain ? `; Domain=${domain}` : \"\";\n\t\tconst securityAttrs = getCookieSecurityAttrs();\n\t\tconst cookieBase = `${name}=${encodedValue}`;\n\t\tconst cookieWithAttrs = `${cookieBase}; expires=${expires.toUTCString()}; Path=/${domainAttr}${securityAttrs}`;\n\t\tdoc.cookie = cookieWithAttrs;\n\t\tif (!doc.cookie.includes(`${name}=`)) {\n\t\t\tdoc.cookie = cookieBase;\n\t\t}\n\t};\n\n\tconst getCookie = (name: string) => {\n\t\tconst doc = getDocument();\n\t\tif (!doc) return null;\n\t\tconst nameEQ = `${name}=`;\n\t\tconst ca = doc.cookie.split(\";\");\n\t\tfor (let i = 0; i < ca.length; i += 1) {\n\t\t\tlet c = ca[i] ?? \"\";\n\t\t\twhile (c.charAt(0) === \" \") c = c.substring(1, c.length);\n\t\t\tif (c.indexOf(nameEQ) === 0) {\n\t\t\t\treturn decodeURIComponent(c.substring(nameEQ.length, c.length));\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tconst deleteCookie = (name: string) => {\n\t\tconst doc = getDocument();\n\t\tif (!doc) return;\n\t\tconst domain = getCookieDomain();\n\t\tconst domainAttr = domain ? `; Domain=${domain}` : \"\";\n\t\tconst securityAttrs = getCookieSecurityAttrs();\n\t\tdoc.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; Path=/${domainAttr}${securityAttrs}`;\n\t};\n\n\tconst saveSessionToStorage = () => {\n\t\tconst storageKey = config.sessionStorageKey || \"iw_session\";\n\t\tif (!storageKey) {\n\t\t\tlog(\"No session storage key configured, skipping save\");\n\t\t\treturn;\n\t\t}\n\t\tconst sessionData: SessionData = {\n\t\t\tsessionId,\n\t\t\tuserId,\n\t\t\torganizationId,\n\t\t\tlastActivity: now(),\n\t\t\tsessionStartTime,\n\t\t\tisActive: isSessionActive,\n\t\t\tconfig: {\n\t\t\t\tendpoint: config.endpoint,\n\t\t\t\tsessionTimeout: config.sessionTimeout,\n\t\t\t},\n\t\t};\n\t\tif (externalId) {\n\t\t\tsessionData.externalId = externalId;\n\t\t}\n\t\ttry {\n\t\t\tsetCookie(storageKey, JSON.stringify(sessionData), 730);\n\t\t\tlog(\"Saved session to storage with user identity\");\n\t\t} catch (err) {\n\t\t\terror(\"Failed to save session to storage:\", err);\n\t\t}\n\t};\n\n\tconst clearSessionFromStorage = () => {\n\t\tconst storageKey = config.sessionStorageKey || \"iw_session\";\n\t\tif (!storageKey) {\n\t\t\tlog(\"No session storage key configured, skipping clear\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tdeleteCookie(storageKey);\n\t\t} catch (err) {\n\t\t\terror(\"Failed to clear session from storage:\", err);\n\t\t}\n\t};\n\n\tconst loadSessionFromStorage = (): SessionData | null => {\n\t\tconst storageKey = config.sessionStorageKey || \"iw_session\";\n\t\tif (!storageKey) {\n\t\t\tlog(\"No session storage key configured, skipping load\");\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tconst sessionData = getCookie(storageKey);\n\t\t\tif (!sessionData) {\n\t\t\t\tlog(\"No session data found in storage\");\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst parsed = JSON.parse(sessionData) as SessionData;\n\t\t\tconst timeSinceLastActivity = now() - parsed.lastActivity;\n\t\t\tconst totalSessionDuration = parsed.sessionStartTime\n\t\t\t\t? now() - parsed.sessionStartTime\n\t\t\t\t: 0;\n\t\t\tif (\n\t\t\t\ttimeSinceLastActivity > config.sessionTimeout ||\n\t\t\t\ttotalSessionDuration > config.sessionTimeout\n\t\t\t) {\n\t\t\t\tclearSessionFromStorage();\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlog(\"Session loaded from storage successfully:\", parsed);\n\t\t\treturn parsed;\n\t\t} catch (err) {\n\t\t\terror(\"Failed to load session from storage:\", err);\n\t\t\tclearSessionFromStorage();\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tconst getOrCreateUserId = () => {\n\t\tconst existingSession = loadSessionFromStorage();\n\t\tif (existingSession?.userId) {\n\t\t\tlog(\"Using existing userId from cookie:\", existingSession.userId);\n\t\t\treturn existingSession.userId;\n\t\t}\n\t\tconst newUserId = generateUserId();\n\t\tlog(\"Generated new userId:\", newUserId);\n\t\treturn newUserId;\n\t};\n\n\tconst updateSessionActivity = () => {\n\t\tif (isSessionActive) {\n\t\t\tsaveSessionToStorage();\n\t\t\tif (config.refresh) {\n\t\t\t\tresetSessionExpiryTimer();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst startSessionHeartbeat = () => {\n\t\tif (sessionHeartbeatTimer) {\n\t\t\tclearInterval(sessionHeartbeatTimer);\n\t\t}\n\n\t\t// Always run a heartbeat to check for session expiry\n\t\t// Use configured interval or default to 60 seconds\n\t\tconst checkInterval = config.sessionHeartbeatInterval || 60_000;\n\n\t\tsessionHeartbeatTimer = setInterval(() => {\n\t\t\tif (isSessionActive) {\n\t\t\t\t// Check if session has exceeded maximum duration\n\t\t\t\tif (sessionStartTime) {\n\t\t\t\t\tconst totalDuration = now() - sessionStartTime;\n\t\t\t\t\tif (totalDuration > config.sessionTimeout) {\n\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t`Session expired (exceeded max duration of ${config.sessionTimeout / 60_000} minutes), stopping session`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstopRecordingSession();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update or save session activity\n\t\t\t\tif (config.refresh) {\n\t\t\t\t\tupdateSessionActivity();\n\t\t\t\t} else {\n\t\t\t\t\tsaveSessionToStorage();\n\t\t\t\t}\n\t\t\t}\n\t\t}, checkInterval);\n\t};\n\n\tconst stopSessionHeartbeat = () => {\n\t\tif (sessionHeartbeatTimer) {\n\t\t\tclearInterval(sessionHeartbeatTimer);\n\t\t\tsessionHeartbeatTimer = null;\n\t\t} else {\n\t\t\tlog(\"No heartbeat timer to stop\");\n\t\t}\n\t};\n\n\tconst startSessionExpiryTimer = () => {\n\t\tif (sessionExpiryTimer) {\n\t\t\tclearTimeout(sessionExpiryTimer);\n\t\t}\n\t\tlet timeoutDuration = config.sessionTimeout;\n\t\tif (sessionStartTime) {\n\t\t\tconst elapsed = now() - sessionStartTime;\n\t\t\tconst remaining = config.sessionTimeout - elapsed;\n\t\t\tif (remaining <= 0) {\n\t\t\t\tclearSessionFromStorage();\n\t\t\t\tsessionId = generateSessionId();\n\t\t\t\tsessionStartTime = now();\n\t\t\t\ttimeoutDuration = config.sessionTimeout;\n\t\t\t} else {\n\t\t\t\ttimeoutDuration = remaining;\n\t\t\t}\n\t\t}\n\t\tsessionExpiryTimer = setTimeout(() => {\n\t\t\tstopRecordingSession();\n\t\t}, timeoutDuration);\n\t};\n\n\tconst resetSessionExpiryTimer = () => {\n\t\tif (sessionExpiryTimer) {\n\t\t\tclearTimeout(sessionExpiryTimer);\n\t\t}\n\t\tstartSessionExpiryTimer();\n\t};\n\n\tconst stopSessionExpiryTimer = () => {\n\t\tif (sessionExpiryTimer) {\n\t\t\tclearTimeout(sessionExpiryTimer);\n\t\t\tsessionExpiryTimer = null;\n\t\t} else {\n\t\t\tlog(\"No session expiry timer to stop\");\n\t\t}\n\t};\n\n\tconst isSessionExpired = (sessionData: SessionData | null) => {\n\t\tif (!sessionData) {\n\t\t\tlog(\"No session data provided, considering expired\");\n\t\t\treturn true;\n\t\t}\n\t\tconst timeSinceLastActivity = now() - sessionData.lastActivity;\n\t\tconst totalSessionDuration = sessionData.sessionStartTime\n\t\t\t? now() - sessionData.sessionStartTime\n\t\t\t: 0;\n\t\treturn (\n\t\t\ttimeSinceLastActivity > config.sessionTimeout ||\n\t\t\ttotalSessionDuration > config.sessionTimeout\n\t\t);\n\t};\n\n\tconst fetchWithTimeout = async (\n\t\turl: string,\n\t\toptions: RequestInit = {},\n\t\ttimeoutMs = 20_000,\n\t) => {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\t\tconst mergedOptions = { ...options, signal: controller.signal };\n\t\ttry {\n\t\t\treturn await fetch(url, mergedOptions);\n\t\t} catch (err) {\n\t\t\tif (\n\t\t\t\terr instanceof DOMException &&\n\t\t\t\t(err.name === \"AbortError\" || err.name === \"TimeoutError\")\n\t\t\t) {\n\t\t\t\treturn { ok: false, status: 0, statusText: \"Aborted\" };\n\t\t\t}\n\t\t\tif (typeof err === \"object\") {\n\t\t\t\tconst message = (err as { message?: string }).message || \"\";\n\t\t\t\tif (message.includes(\"aborted\") || message.includes(\"cancelled\")) {\n\t\t\t\t\treturn { ok: false, status: 0, statusText: \"Aborted\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ok: false, status: 0, statusText: \"Aborted\" };\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t};\n\n\tconst buildEndpointUrl = (\n\t\tbaseEndpoint: string,\n\t\trequestType: string,\n\t\tkeepalive: boolean | null,\n\t\tpayloadSizeKB: number,\n\t\tisCompressed = false,\n\t\tsessionIdParam: string | null = null,\n\t) => {\n\t\tlet url: URL;\n\t\ttry {\n\t\t\turl = new URL(baseEndpoint);\n\t\t} catch {\n\t\t\treturn baseEndpoint;\n\t\t}\n\t\tconst currentSessionId =\n\t\t\tsessionIdParam !== null ? sessionIdParam : sessionId;\n\t\turl.searchParams.set(URL_PARAMS.VERSION, LIB_VERSION);\n\t\turl.searchParams.set(URL_PARAMS.REQUEST_TYPE, requestType);\n\t\turl.searchParams.set(\n\t\t\tURL_PARAMS.KEEPALIVE,\n\t\t\tkeepalive === null ? \"null\" : String(keepalive),\n\t\t);\n\t\turl.searchParams.set(URL_PARAMS.SIZE, Math.round(payloadSizeKB).toString());\n\t\turl.searchParams.set(URL_PARAMS.COMPRESSION, isCompressed ? \"1\" : \"0\");\n\t\tif (currentSessionId) {\n\t\t\turl.searchParams.set(URL_PARAMS.SESSION_ID, currentSessionId);\n\t\t}\n\t\treturn url.toString();\n\t};\n\n\tconst sendEvents = async (events: unknown[]) => {\n\t\tif (!events || events.length === 0) {\n\t\t\tlog(\"No events to send, skipping network request\");\n\t\t\treturn;\n\t\t}\n\t\tif (contractStatus) {\n\t\t\tlog(\"Events not sent - Contract issue:\", contractStatus.message);\n\t\t\treturn;\n\t\t}\n\t\tif (quotaStatus) {\n\t\t\tlog(\"Events not sent - Quota exceeded:\", quotaStatus.message);\n\t\t\treturn;\n\t\t}\n\t\tif (config.defaultSamplingPercent === 0) {\n\t\t\tlog(\"Events not sent - samplingPercent set to 0\");\n\t\t\treturn;\n\t\t}\n\t\tif (!sessionId || !userId) {\n\t\t\terror(\"Cannot send events: sessionId or userId not set\");\n\t\t\treturn;\n\t\t}\n\t\tconst capturedSessionId = sessionId;\n\t\tconst capturedUserId = userId;\n\t\tconst capturedExternalId = externalId;\n\t\tconst capturedOrganizationId = organizationId;\n\n\t\tconst eventsToSend = [...events];\n\t\tconst MAX_CHUNK_SIZE = 40 * BYTES_IN_KILOBYTE;\n\n\t\tconst basePayload = {\n\t\t\tsession_id: capturedSessionId,\n\t\t\tuser_id: capturedUserId,\n\t\t\torganization_id: capturedOrganizationId,\n\t\t\tevents: [] as unknown[],\n\t\t\tclient_version: LIB_VERSION,\n\t\t};\n\t\tif (capturedExternalId) {\n\t\t\t(basePayload as { external_id?: string }).external_id =\n\t\t\t\tcapturedExternalId;\n\t\t}\n\t\tconst basePayloadString = JSON.stringify(basePayload);\n\t\tconst basePayloadSize = new Blob([basePayloadString]).size;\n\t\tconst fullPayloadString = JSON.stringify({\n\t\t\t...basePayload,\n\t\t\tevents: eventsToSend,\n\t\t});\n\t\tconst fullPayloadSize = new Blob([fullPayloadString]).size;\n\n\t\tlet chunks: unknown[][] = [];\n\t\tif (fullPayloadSize > MAX_CHUNK_SIZE) {\n\t\t\tlet currentChunk: unknown[] = [];\n\t\t\tlet currentChunkSize = basePayloadSize;\n\t\t\tfor (let i = 0; i < eventsToSend.length; i += 1) {\n\t\t\t\tconst testChunk = [...currentChunk, eventsToSend[i]];\n\t\t\t\tconst testPayloadSize = new Blob([\n\t\t\t\t\tJSON.stringify({ ...basePayload, events: testChunk }),\n\t\t\t\t]).size;\n\t\t\t\tif (testPayloadSize > MAX_CHUNK_SIZE && currentChunk.length > 0) {\n\t\t\t\t\tchunks.push([...currentChunk]);\n\t\t\t\t\tcurrentChunk = [eventsToSend[i]];\n\t\t\t\t\tcurrentChunkSize = new Blob([\n\t\t\t\t\t\tJSON.stringify({ ...basePayload, events: currentChunk }),\n\t\t\t\t\t]).size;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentChunk = testChunk;\n\t\t\t\t\tcurrentChunkSize = testPayloadSize;\n\t\t\t\t}\n\t\t\t\tvoid currentChunkSize;\n\t\t\t}\n\t\t\tif (currentChunk.length > 0) {\n\t\t\t\tchunks.push(currentChunk);\n\t\t\t}\n\t\t} else {\n\t\t\tchunks = [eventsToSend];\n\t\t}\n\n\t\tfor (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex += 1) {\n\t\t\tconst chunk = chunks[chunkIndex];\n\t\t\tconst chunkPayload = {\n\t\t\t\tsession_id: capturedSessionId,\n\t\t\t\tuser_id: capturedUserId,\n\t\t\t\torganization_id: capturedOrganizationId,\n\t\t\t\tevents: chunk,\n\t\t\t\tclient_version: LIB_VERSION,\n\t\t\t};\n\t\t\tif (capturedExternalId) {\n\t\t\t\t(chunkPayload as { external_id?: string }).external_id =\n\t\t\t\t\tcapturedExternalId;\n\t\t\t}\n\t\t\tconst chunkPayloadString = JSON.stringify(chunkPayload);\n\t\t\ttry {\n\t\t\t\t// In debug mode: send plain string (readable + easy to inspect).\n\t\t\t\tconst compressionResult = config.debug\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tbody: chunkPayloadString,\n\t\t\t\t\t\t\tcompressed: false,\n\t\t\t\t\t\t\toriginalSize: new Blob([chunkPayloadString]).size,\n\t\t\t\t\t\t}\n\t\t\t\t\t: await compressGzip(chunkPayloadString);\n\t\t\t\tconst bodyToSend = compressionResult.body;\n\t\t\t\tconst bodySizeBytes =\n\t\t\t\t\ttypeof bodyToSend === \"string\"\n\t\t\t\t\t\t? new Blob([bodyToSend]).size\n\t\t\t\t\t\t: bodyToSend instanceof Blob\n\t\t\t\t\t\t\t? bodyToSend.size\n\t\t\t\t\t\t\t: new Blob([bodyToSend as unknown as ArrayBuffer]).size;\n\t\t\t\tconst payloadSizeKB = bodySizeBytes / BYTES_IN_KILOBYTE;\n\n\t\t\t\tif (payloadSizeKB * BYTES_IN_KILOBYTE > MAX_CHUNK_SIZE) {\n\t\t\t\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t\t\t\tconfig.endpoint,\n\t\t\t\t\t\t\"f\",\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tpayloadSizeKB,\n\t\t\t\t\t\tcompressionResult.compressed,\n\t\t\t\t\t\tcapturedSessionId,\n\t\t\t\t\t);\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"Content-Type\": compressionResult.compressed\n\t\t\t\t\t\t\t? \"application/gzip\"\n\t\t\t\t\t\t\t: \"text/plain\",\n\t\t\t\t\t};\n\t\t\t\t\tconst response = await fetchWithTimeout(\n\t\t\t\t\t\tendpointUrl,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tbody: bodyToSend,\n\t\t\t\t\t\t\tkeepalive: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t20_000,\n\t\t\t\t\t);\n\t\t\t\t\tif (response?.status === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (response && !response.ok && response.status >= 500) {\n\t\t\t\t\t\terror(`Failed to send chunk ${chunkIndex + 1}:`, response.status);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet sent = false;\n\t\t\t\t\tif (isBrowser() && navigator.sendBeacon) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t\t\t\t\t\tconfig.endpoint,\n\t\t\t\t\t\t\t\t\"b\",\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tpayloadSizeKB,\n\t\t\t\t\t\t\t\tcompressionResult.compressed,\n\t\t\t\t\t\t\t\tcapturedSessionId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsent = navigator.sendBeacon(endpointUrl, bodyToSend);\n\t\t\t\t\t\t\tif (sent) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t\t\"Compression failed for sendBeacon, falling back to fetch:\",\n\t\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t`sendBeacon not supported for chunk ${chunkIndex + 1}, using fetch`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t\t\t\tconfig.endpoint,\n\t\t\t\t\t\t\"f\",\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tpayloadSizeKB,\n\t\t\t\t\t\tcompressionResult.compressed,\n\t\t\t\t\t\tcapturedSessionId,\n\t\t\t\t\t);\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"Content-Type\": compressionResult.compressed\n\t\t\t\t\t\t\t? \"application/gzip\"\n\t\t\t\t\t\t\t: \"text/plain\",\n\t\t\t\t\t};\n\t\t\t\t\tfetchWithTimeout(\n\t\t\t\t\t\tendpointUrl,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tbody: bodyToSend,\n\t\t\t\t\t\t\tkeepalive: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t20_000,\n\t\t\t\t\t).catch(() => {\n\t\t\t\t\t\t// swallow telemetry failures\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst errorMessage = (err as { message?: string })?.message || \"\";\n\t\t\t\tconst isBlocked =\n\t\t\t\t\terrorMessage.includes(\"Failed to fetch\") ||\n\t\t\t\t\terrorMessage.includes(\"NetworkError\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_CLIENT\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_RESPONSE\") ||\n\t\t\t\t\terrorMessage.includes(\"net::ERR_FAILED\");\n\t\t\t\tconst isAborted =\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\t(err as { name?: string })?.name === \"TimeoutError\" ||\n\t\t\t\t\terrorMessage.includes(\"aborted\") ||\n\t\t\t\t\terrorMessage.includes(\"cancelled\");\n\t\t\t\tif (isBlocked || isAborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst flushEvents = () => {\n\t\tif (eventBuffer.length === 0) {\n\t\t\tlog(\"No events in buffer to flush\");\n\t\t\treturn;\n\t\t}\n\t\tconst eventsToSend = [...eventBuffer];\n\t\teventBuffer = [];\n\t\tvoid sendEvents(eventsToSend);\n\t};\n\n\tconst startFlushTimer = () => {\n\t\tif (flushTimer) {\n\t\t\tlog(\"Clearing existing flush timer\");\n\t\t\tclearInterval(flushTimer);\n\t\t}\n\t\tflushTimer = setInterval(() => {\n\t\t\tflushEvents();\n\t\t}, config.flushInterval);\n\t};\n\n\tconst stopFlushTimer = () => {\n\t\tif (flushTimer) {\n\t\t\tclearInterval(flushTimer);\n\t\t\tflushTimer = null;\n\t\t} else {\n\t\t\tlog(\"No flush timer to stop\");\n\t\t}\n\t};\n\n\tconst loadRrweb = () =>\n\t\tnew Promise<NonNullable<Window[\"rrweb\"]>>((resolve, reject) => {\n\t\t\tif (!isBrowser()) {\n\t\t\t\treject(new Error(\"rrweb requires a browser environment\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (window.rrweb) {\n\t\t\t\tresolve(window.rrweb);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.src = \"https://app.infinitewatch.ai/rrweb.min.js\";\n\t\t\tscript.onload = () => {\n\t\t\t\tif (window.rrweb) {\n\t\t\t\t\tresolve(window.rrweb);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error(\"rrweb failed to load\"));\n\t\t\t\t}\n\t\t\t};\n\t\t\tscript.onerror = () => reject(new Error(\"Failed to load rrweb script\"));\n\t\t\tdocument.head.appendChild(script);\n\t\t});\n\n\tconst loadRrwebPacker = () =>\n\t\tnew Promise<NonNullable<Window[\"pack\"]>>((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!isBrowser()) {\n\t\t\t\t\treject(new Error(\"rrweb packer requires a browser environment\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst existing = window.rrwebPack?.pack || window.pack;\n\t\t\t\tif (typeof existing === \"function\") {\n\t\t\t\t\tresolve(existing);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst script = document.createElement(\"script\");\n\t\t\t\tscript.src = \"https://app.infinitewatch.ai/rrweb-record-pack.min.js\";\n\t\t\t\tscript.async = true;\n\t\t\t\tscript.onload = () => {\n\t\t\t\t\tconst packFn = window.rrwebRecord?.pack || window.pack;\n\t\t\t\t\tif (typeof packFn === \"function\") {\n\t\t\t\t\t\tresolve(packFn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(\n\t\t\t\t\t\t\tnew Error(\"rrweb packer loaded but pack function not found\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tscript.onerror = () =>\n\t\t\t\t\treject(new Error(\"Failed to load rrweb packer script\"));\n\t\t\t\tdocument.head.appendChild(script);\n\t\t\t} catch (e) {\n\t\t\t\treject(e as Error);\n\t\t\t}\n\t\t});\n\n\tconst addEvent = async (event: unknown) => {\n\t\tif (hardStop) return;\n\n\t\t// Check if current session has expired\n\t\tif (isSessionActive && sessionStartTime) {\n\t\t\tconst totalSessionDuration = now() - sessionStartTime;\n\t\t\tif (totalSessionDuration > config.sessionTimeout) {\n\t\t\t\tlog(\"Session expired, stopping and restarting with new session\");\n\t\t\t\tstopRecordingSession();\n\t\t\t\t// Fall through to the !isSessionActive block below to create new session\n\t\t\t}\n\t\t}\n\n\t\tif (!isSessionActive) {\n\t\t\tif (stopRecording) {\n\t\t\t\tstopRecording();\n\t\t\t\tstopRecording = null;\n\t\t\t}\n\t\t\tsessionId = config.sessionId || generateSessionId();\n\t\t\tuserId = config.userId || getOrCreateUserId();\n\t\t\tconst previousSession = loadSessionFromStorage();\n\t\t\tif (previousSession?.externalId) {\n\t\t\t\texternalId = previousSession.externalId || null;\n\t\t\t}\n\t\t\torganizationId = config.organizationId;\n\t\t\tsessionStartTime = now();\n\t\t\tawait startRecording();\n\t\t\treturn;\n\t\t}\n\t\teventBuffer.push(event);\n\t\tupdateSessionActivity();\n\t\tif (eventBuffer.length >= config.batchSize) {\n\t\t\tlog(\"Buffer size reached, triggering flush\");\n\t\t\tflushEvents();\n\t\t} else {\n\t\t\tlog(\"Buffer not full yet, continuing to collect events\");\n\t\t}\n\t};\n\n\tconst generateInsights = async (hardSessionId: string | null = null) => {\n\t\tif (!config.generateInsights) {\n\t\t\treturn;\n\t\t}\n\n\t\tsessionId = hardSessionId || sessionId;\n\t\tif (!sessionId || !organizationId) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Backend base URL (no ingest); append sessions insights path\n\t\tconst base = (config.endpointInsights || config.baseUrl || \"\")\n\t\t\t.toString()\n\t\t\t.replace(/\\/$/, \"\");\n\t\tif (!base) return;\n\t\tconst endpointUrl = `${base}/v1/sessions/${encodeURIComponent(sessionId)}/insights`;\n\n\t\tconst payload = { organization_id: organizationId };\n\t\tconst payloadString = JSON.stringify(payload);\n\n\t\ttry {\n\t\t\tconst response = await fetch(endpointUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: payloadString,\n\t\t\t\tmode: \"cors\",\n\t\t\t\tcredentials: \"omit\",\n\t\t\t});\n\t\t\tif (response.status === 0) {\n\t\t\t\tlog(\"Insights request aborted (status 0)\");\n\t\t\t} else if (!response.ok && response.status >= 500) {\n\t\t\t\terror(\"Failed to send insights with fetch:\", response.status);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errorMessage = (err as { message?: string })?.message || \"\";\n\t\t\tconst isBlocked =\n\t\t\t\terrorMessage.includes(\"Failed to fetch\") ||\n\t\t\t\terrorMessage.includes(\"NetworkError\") ||\n\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_CLIENT\") ||\n\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_RESPONSE\") ||\n\t\t\t\terrorMessage.includes(\"net::ERR_FAILED\");\n\t\t\tconst isAborted =\n\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t(err as { name?: string })?.name === \"TimeoutError\" ||\n\t\t\t\terrorMessage.includes(\"aborted\") ||\n\t\t\t\terrorMessage.includes(\"cancelled\");\n\t\t\tif (isBlocked || isAborted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t};\n\n\tconst startRecording = async () => {\n\t\tif (isSessionActive) {\n\t\t\tlog(\"Recording already active, skipping startRecording\");\n\t\t\treturn;\n\t\t}\n\t\tisSessionActive = true;\n\t\ttry {\n\t\t\tconst [packFn, rrweb] = await Promise.all([\n\t\t\t\tloadRrwebPacker(),\n\t\t\t\tloadRrweb(),\n\t\t\t]);\n\n\t\t\tconst filterBlacklistedAttrMutations = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tif (!Array.isArray(data.attributes)) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t\tconst prefixes = Array.isArray(config.blackList)\n\t\t\t\t\t? config.blackList.filter(\n\t\t\t\t\t\t\t(p) => typeof p === \"string\" && p.length > 0,\n\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\tif (prefixes.length === 0) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t\tconst startsWithBlacklisted = (idValue: unknown) => {\n\t\t\t\t\tif (typeof idValue !== \"string\") return false;\n\t\t\t\t\tfor (const prefix of prefixes) {\n\t\t\t\t\t\tif (idValue.startsWith(prefix)) return true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t\tconst nextAttributes = data.attributes.filter((attrChange) => {\n\t\t\t\t\tconst elemId = (attrChange as attributeMutation | null)?.attributes\n\t\t\t\t\t\t?.id;\n\t\t\t\t\treturn !startsWithBlacklisted(elemId);\n\t\t\t\t});\n\t\t\t\t// event is guaranteed non-null here since data was obtained from getMutationData(event)\n\t\t\t\tconst baseEvent = event as eventWithTime;\n\t\t\t\tconst nextData = { ...data, attributes: nextAttributes };\n\t\t\t\tconst hasAdds =\n\t\t\t\t\tArray.isArray(nextData.adds) && nextData.adds.length > 0;\n\t\t\t\tconst hasRemoves =\n\t\t\t\t\tArray.isArray(nextData.removes) && nextData.removes.length > 0;\n\t\t\t\tconst hasTexts =\n\t\t\t\t\tArray.isArray(nextData.texts) && nextData.texts.length > 0;\n\t\t\t\tconst hasAttributes =\n\t\t\t\t\tArray.isArray(nextData.attributes) && nextData.attributes.length > 0;\n\t\t\t\tif (!hasAdds && !hasRemoves && !hasTexts && !hasAttributes) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...baseEvent,\n\t\t\t\t\tdata: nextData,\n\t\t\t\t} as eventWithTime;\n\t\t\t};\n\n\t\t\tconst filterMutations = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (data) {\n\t\t\t\t\tconst attrs = data.attributes;\n\t\t\t\t\tif (Array.isArray(attrs) && attrs.length) {\n\t\t\t\t\t\tconst filtered = attrs.filter((a) => {\n\t\t\t\t\t\t\tconst at = isRecord((a as attributeMutation | null)?.attributes)\n\t\t\t\t\t\t\t\t? ((a as attributeMutation).attributes as Record<\n\t\t\t\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\t\t\t\tunknown\n\t\t\t\t\t\t\t\t\t>)\n\t\t\t\t\t\t\t\t: {};\n\t\t\t\t\t\t\tconst keys = Object.keys(at);\n\t\t\t\t\t\t\tconst onlyTransformOpacity =\n\t\t\t\t\t\t\t\tkeys.length > 0 &&\n\t\t\t\t\t\t\t\tkeys.every((k) => k === \"transform\" || k === \"opacity\");\n\t\t\t\t\t\t\tif (!onlyTransformOpacity) return true;\n\t\t\t\t\t\t\tconst id = at.id;\n\t\t\t\t\t\t\tif (isInteractiveId(id)) return true;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (filtered.length === 0) return null;\n\t\t\t\t\t\tdata.attributes = filtered;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst isNoisySvgAdd = (add: addedNodeMutation) => {\n\t\t\t\tconst n = add?.node as RrwebSerializedNodeWithMeta | undefined;\n\t\t\t\tif (!n) return false;\n\t\t\t\tif (!n.isSVG) return false;\n\t\t\t\tconst tag = (n.tagName || \"\").toLowerCase();\n\t\t\t\tif (\n\t\t\t\t\ttag === \"path\" &&\n\t\t\t\t\ttypeof (isRecord(n.attributes) ? n.attributes.d : undefined) ===\n\t\t\t\t\t\t\"string\" &&\n\t\t\t\t\t(isRecord(n.attributes) ? String(n.attributes.d).length : 0) > 200\n\t\t\t\t)\n\t\t\t\t\treturn true;\n\t\t\t\tif (tag === \"style\") return true;\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tconst isUselessTextAdd = (add: addedNodeMutation) => {\n\t\t\t\tconst n = add?.node as RrwebSerializedNodeWithMeta | undefined;\n\t\t\t\treturn n?.type === 3 && (n.textContent === \"\" || n.textContent == null);\n\t\t\t};\n\n\t\t\tconst filterAdds = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tif (Array.isArray(data.adds) && data.adds.length) {\n\t\t\t\t\tdata.adds = data.adds.filter(\n\t\t\t\t\t\t(add) => !isNoisySvgAdd(add) && !isUselessTextAdd(add),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst hasAdds = Array.isArray(data.adds) && data.adds.length > 0;\n\t\t\t\tconst hasRemoves =\n\t\t\t\t\tArray.isArray(data.removes) && data.removes.length > 0;\n\t\t\t\tconst hasTexts = Array.isArray(data.texts) && data.texts.length > 0;\n\t\t\t\tconst hasAttributes =\n\t\t\t\t\tArray.isArray(data.attributes) && data.attributes.length > 0;\n\t\t\t\tif (!hasAdds && !hasRemoves && !hasTexts && !hasAttributes) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst NET_SAMPLE_MS = 10_000;\n\t\t\tconst IDLE_MS = 15_000;\n\t\t\tconst BLOCKED_NET_HOSTS = new Set([\n\t\t\t\t\"ingest.infinitewatch.ai\",\n\t\t\t\t\"ingest.humanbehavior.co\",\n\t\t\t\t\"iw-backend-live.fly.dev\",\n\t\t\t]);\n\t\t\tlet __iw_lastUserIntentAt = now();\n\t\t\tlet __iw_intentInstalled = false;\n\t\t\tconst __iw_lastNetSentAt = new Map<string, number>();\n\n\t\t\tconst iwInstallUserIntentListenersOnce = () => {\n\t\t\t\tif (__iw_intentInstalled || !isBrowser()) return;\n\t\t\t\t__iw_intentInstalled = true;\n\t\t\t\tconst mark = () => {\n\t\t\t\t\t__iw_lastUserIntentAt = now();\n\t\t\t\t};\n\t\t\t\t[\n\t\t\t\t\t\"pointerdown\",\n\t\t\t\t\t\"mousedown\",\n\t\t\t\t\t\"touchstart\",\n\t\t\t\t\t\"keydown\",\n\t\t\t\t\t\"wheel\",\n\t\t\t\t\t\"scroll\",\n\t\t\t\t\t\"input\",\n\t\t\t\t].forEach((t) => {\n\t\t\t\t\twindow.addEventListener(t, mark, { capture: true, passive: true });\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst iwKeyForRequest = (name: string) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst u = new URL(name);\n\t\t\t\t\treturn u.hostname + u.pathname;\n\t\t\t\t} catch {\n\t\t\t\t\treturn String(name || \"\");\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst iwIsBlockedHost = (name: string) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst host = new URL(name).hostname;\n\t\t\t\t\treturn BLOCKED_NET_HOSTS.has(host);\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst filterNetworkNoise = (event: eventWithTime | null) => {\n\t\t\t\tif (\n\t\t\t\t\t!event ||\n\t\t\t\t\tevent.type !== 6 ||\n\t\t\t\t\t!(event.data as { plugin?: string } | undefined)?.plugin ||\n\t\t\t\t\t(event.data as { plugin?: string }).plugin !== \"rrweb/network@1\"\n\t\t\t\t) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t\tif (now() - __iw_lastUserIntentAt > IDLE_MS) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst payload = (event.data as { payload?: { requests?: unknown } })\n\t\t\t\t\t?.payload;\n\t\t\t\tconst reqs = payload?.requests;\n\t\t\t\tif (!Array.isArray(reqs) || reqs.length === 0) return event;\n\t\t\t\tconst timestamp = event.timestamp || now();\n\t\t\t\tconst filteredReqs: Record<string, unknown>[] = [];\n\t\t\t\tfor (const r of reqs) {\n\t\t\t\t\tconst name = (r as Record<string, unknown> | null)?.name;\n\t\t\t\t\tif (typeof name !== \"string\") continue;\n\t\t\t\t\tif (iwIsBlockedHost(name)) continue;\n\t\t\t\t\tconst key = iwKeyForRequest(name);\n\t\t\t\t\tconst last = __iw_lastNetSentAt.get(key) || 0;\n\t\t\t\t\tif (timestamp - last < NET_SAMPLE_MS) continue;\n\t\t\t\t\t__iw_lastNetSentAt.set(key, timestamp);\n\t\t\t\t\tfilteredReqs.push(r as Record<string, unknown>);\n\t\t\t\t}\n\t\t\t\tif (filteredReqs.length === 0) return null;\n\t\t\t\treturn {\n\t\t\t\t\t...event,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t...event.data,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t...payload,\n\t\t\t\t\t\t\trequests: filteredReqs,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst ANIM_ATTR_KEYS = new Set([\"d\"]);\n\t\t\tconst ANIM_STYLE_KEYS = new Set([\n\t\t\t\t\"transform\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"filter\",\n\t\t\t\t\"backdrop-filter\",\n\t\t\t\t\"will-change\",\n\t\t\t\t\"translate\",\n\t\t\t\t\"scale\",\n\t\t\t\t\"rotate\",\n\t\t\t]);\n\n\t\t\tconst isAnimationOnlyAttrChange = (attrChange: attributeMutation) => {\n\t\t\t\tconst attrs = (attrChange as attributeMutation | null)?.attributes;\n\t\t\t\tif (!attrs || typeof attrs !== \"object\") return false;\n\t\t\t\tconst keys = Object.keys(attrs);\n\t\t\t\tconst firstKey = keys[0];\n\t\t\t\tif (keys.length === 1 && firstKey && ANIM_ATTR_KEYS.has(firstKey))\n\t\t\t\t\treturn true;\n\t\t\t\tif (keys.length === 1 && firstKey === \"style\") {\n\t\t\t\t\tconst style = (attrs as Record<string, unknown>).style;\n\t\t\t\t\tif (!style || typeof style !== \"object\") return false;\n\t\t\t\t\tconst styleKeys = Object.keys(style);\n\t\t\t\t\tif (styleKeys.length === 0) return false;\n\t\t\t\t\treturn styleKeys.every((k) => ANIM_STYLE_KEYS.has(k));\n\t\t\t\t}\n\t\t\t\treturn keys.every((k) => ANIM_STYLE_KEYS.has(k));\n\t\t\t};\n\n\t\t\tconst isPureAnimationMutationEvent = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return false;\n\t\t\t\tconst hasAdds = Array.isArray(data.adds) && data.adds.length > 0;\n\t\t\t\tconst hasRemoves =\n\t\t\t\t\tArray.isArray(data.removes) && data.removes.length > 0;\n\t\t\t\tconst hasTexts = Array.isArray(data.texts) && data.texts.length > 0;\n\t\t\t\tif (hasAdds || hasRemoves || hasTexts) return false;\n\t\t\t\tconst attrs = data.attributes;\n\t\t\t\tif (!Array.isArray(attrs) || attrs.length === 0) return false;\n\t\t\t\treturn attrs.every(isAnimationOnlyAttrChange);\n\t\t\t};\n\n\t\t\tconst IDLE_MUTATION_SAMPLE_MS = 1_500;\n\t\t\tlet __iw_lastKeptIdleAnimMutationAt = 0;\n\n\t\t\tconst sampleAnimationMutationsWhenIdle = (\n\t\t\t\tevent: eventWithTime | null,\n\t\t\t) => {\n\t\t\t\tif (!event || event.type !== 3 || event?.data?.source !== 0)\n\t\t\t\t\treturn event;\n\t\t\t\tconst idleFor = now() - __iw_lastUserIntentAt;\n\t\t\t\tif (idleFor <= IDLE_MS) return event;\n\t\t\t\tif (!isPureAnimationMutationEvent(event)) return event;\n\t\t\t\tconst ts = event.timestamp || now();\n\t\t\t\tif (ts - __iw_lastKeptIdleAnimMutationAt < IDLE_MUTATION_SAMPLE_MS) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t__iw_lastKeptIdleAnimMutationAt = ts;\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst dropIdleAnimationMutations = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tconst idleFor = now() - __iw_lastUserIntentAt;\n\t\t\t\tif (idleFor > IDLE_MS && isPureAnimationMutationEvent(event))\n\t\t\t\t\treturn null;\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst DROP_ATTR_KEYS = new Set([\"decoding\", \"data-hydrated\"]);\n\t\t\tconst filterLowValueAttributes = (event: eventWithTime | null) => {\n\t\t\t\tconst data = getMutationData(event);\n\t\t\t\tif (!data) return event;\n\t\t\t\tconst attrs = data.attributes;\n\t\t\t\tif (!Array.isArray(attrs) || attrs.length === 0) return event;\n\t\t\t\tconst next = [];\n\t\t\t\tfor (const a of attrs) {\n\t\t\t\t\tconst at = (a as attributeMutation | null)?.attributes;\n\t\t\t\t\tif (!at || typeof at !== \"object\") {\n\t\t\t\t\t\tnext.push(a);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst newAttrs = { ...at };\n\t\t\t\t\tfor (const k of Object.keys(newAttrs)) {\n\t\t\t\t\t\tif (DROP_ATTR_KEYS.has(k)) delete newAttrs[k];\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t\"preserveAspectRatio\" in newAttrs &&\n\t\t\t\t\t\tString(newAttrs.preserveAspectRatio).toLowerCase() === \"none\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete newAttrs.preserveAspectRatio;\n\t\t\t\t\t}\n\t\t\t\t\tif (\"width\" in newAttrs && String(newAttrs.width) === \"100%\")\n\t\t\t\t\t\tdelete newAttrs.width;\n\t\t\t\t\tif (\"height\" in newAttrs && String(newAttrs.height) === \"100%\")\n\t\t\t\t\t\tdelete newAttrs.height;\n\t\t\t\t\tif (Object.keys(newAttrs).length === 0) continue;\n\t\t\t\t\tnext.push({ ...a, attributes: newAttrs });\n\t\t\t\t}\n\t\t\t\tdata.attributes = next;\n\t\t\t\tconst empty =\n\t\t\t\t\t(!data.adds || data.adds.length === 0) &&\n\t\t\t\t\t(!data.attributes || data.attributes.length === 0) &&\n\t\t\t\t\t(!data.texts || data.texts.length === 0) &&\n\t\t\t\t\t(!data.removes || data.removes.length === 0);\n\t\t\t\treturn empty ? null : event;\n\t\t\t};\n\n\t\t\tconst filterIdleEvents = (event: eventWithTime | null) => {\n\t\t\t\tif (now() - __iw_lastUserIntentAt > IDLE_MS) {\n\t\t\t\t\tif (event?.type === 3 && event?.data?.source === 0) {\n\t\t\t\t\t\tconst hasAdds =\n\t\t\t\t\t\t\tArray.isArray(event.data.adds) && event.data.adds.length > 0;\n\t\t\t\t\t\tconst hasRemoves =\n\t\t\t\t\t\t\tArray.isArray(event.data.removes) &&\n\t\t\t\t\t\t\tevent.data.removes.length > 0;\n\t\t\t\t\t\tconst hasTexts =\n\t\t\t\t\t\t\tArray.isArray(event.data.texts) && event.data.texts.length > 0;\n\t\t\t\t\t\tif (hasAdds || hasRemoves || hasTexts) {\n\t\t\t\t\t\t\treturn event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t};\n\n\t\t\tconst filterEvent = (event: eventWithTime | null) => {\n\t\t\t\tlet filtered = event;\n\t\t\t\t// Pass through custom events (type 5) without DOM filters\n\t\t\t\tif (filtered?.type === 5) return filtered;\n\t\t\t\tfiltered = filterIdleEvents(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterBlacklistedAttrMutations(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterMutations(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterAdds(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterNetworkNoise(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = sampleAnimationMutationsWhenIdle(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = dropIdleAnimationMutations(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\tfiltered = filterLowValueAttributes(filtered);\n\t\t\t\tif (!filtered) return null;\n\t\t\t\treturn filtered;\n\t\t\t};\n\n\t\t\tconst INTERACTIVE_SELECTOR =\n\t\t\t\t'a,button,input,select,textarea,label,[role=\"button\"],[role=\"link\"],[tabindex],[contenteditable=\"true\"]';\n\n\t\t\tconst isInteractiveEl = (el: Element | null) => {\n\t\t\t\tif (!el || el.nodeType !== 1) return false;\n\t\t\t\treturn !!(\n\t\t\t\t\tel.matches?.(INTERACTIVE_SELECTOR) ||\n\t\t\t\t\tel.closest?.(INTERACTIVE_SELECTOR)\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst onlyAnimationStyleChanged = (oldStyle = \"\", newStyle = \"\") => {\n\t\t\t\tconst toMap = (s: string) =>\n\t\t\t\t\ts\n\t\t\t\t\t\t.split(\";\")\n\t\t\t\t\t\t.map((x) => x.trim())\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.map((x) => x.split(\":\").map((y) => y.trim()))\n\t\t\t\t\t\t.reduce<Record<string, string>>((acc, [k, v]) => {\n\t\t\t\t\t\t\tif (k) acc[k] = v ?? \"\";\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, {});\n\t\t\t\tconst oldMap = toMap(oldStyle);\n\t\t\t\tconst newMap = toMap(newStyle);\n\t\t\t\tconst changedKeys = new Set<string>();\n\t\t\t\tfor (const k of new Set([\n\t\t\t\t\t...Object.keys(oldMap),\n\t\t\t\t\t...Object.keys(newMap),\n\t\t\t\t])) {\n\t\t\t\t\tif ((oldMap[k] ?? \"\") !== (newMap[k] ?? \"\")) changedKeys.add(k);\n\t\t\t\t}\n\t\t\t\tif (changedKeys.size === 0) return false;\n\t\t\t\tconst ANIM_STYLE_PROPS = [\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t\"opacity\",\n\t\t\t\t\t\"will-change\",\n\t\t\t\t\t\"filter\",\n\t\t\t\t\t\"backdrop-filter\",\n\t\t\t\t\t\"translate\",\n\t\t\t\t\t\"scale\",\n\t\t\t\t\t\"rotate\",\n\t\t\t\t];\n\t\t\t\treturn [...changedKeys].every((k) =>\n\t\t\t\t\tANIM_STYLE_PROPS.some((p) => k.includes(p)),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst INTERACTIVE_TAGS = new Set([\n\t\t\t\t\"a\",\n\t\t\t\t\"button\",\n\t\t\t\t\"input\",\n\t\t\t\t\"select\",\n\t\t\t\t\"textarea\",\n\t\t\t\t\"label\",\n\t\t\t]);\n\t\t\tconst INTERACTIVE_ROLES = new Set([\"button\", \"link\"]);\n\t\t\tlet __iw_idIsInteractive = new Map<string, boolean>();\n\n\t\t\tconst rebuildInteractiveIdMapFromFullSnapshot = (\n\t\t\t\tfsEvent: eventWithTime,\n\t\t\t) => {\n\t\t\t\t__iw_idIsInteractive = new Map();\n\t\t\t\tconst root = (fsEvent?.data as { node?: RrwebSerializedNodeWithMeta })\n\t\t\t\t\t?.node;\n\t\t\t\tif (!root) return;\n\t\t\t\tconst walk = (\n\t\t\t\t\tnode: RrwebSerializedNodeWithMeta,\n\t\t\t\t\tinteractiveAncestor = false,\n\t\t\t\t): void => {\n\t\t\t\t\tif (!node || typeof node !== \"object\") return;\n\t\t\t\t\tif (node.type !== 2) {\n\t\t\t\t\t\tif (node.childNodes) {\n\t\t\t\t\t\t\tnode.childNodes.forEach((ch) => {\n\t\t\t\t\t\t\t\twalk(ch, interactiveAncestor);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst tag = String(node.tagName || \"\").toLowerCase();\n\t\t\t\t\tconst attrs = node.attributes || {};\n\t\t\t\t\tconst id = attrs.id;\n\t\t\t\t\tconst selfInteractive =\n\t\t\t\t\t\tINTERACTIVE_TAGS.has(tag) ||\n\t\t\t\t\t\t(typeof attrs.role === \"string\" &&\n\t\t\t\t\t\t\tINTERACTIVE_ROLES.has(String(attrs.role).toLowerCase())) ||\n\t\t\t\t\t\tattrs.tabindex != null ||\n\t\t\t\t\t\tattrs.href != null ||\n\t\t\t\t\t\tString(attrs.contenteditable || \"\").toLowerCase() === \"true\";\n\t\t\t\t\tconst isInteractive = interactiveAncestor || selfInteractive;\n\t\t\t\t\tif (typeof id === \"string\") {\n\t\t\t\t\t\t__iw_idIsInteractive.set(id, isInteractive);\n\t\t\t\t\t}\n\t\t\t\t\tif (node.childNodes) {\n\t\t\t\t\t\tnode.childNodes.forEach((ch) => {\n\t\t\t\t\t\t\twalk(ch, isInteractive);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twalk(root, false);\n\t\t\t};\n\n\t\t\tconst isInteractiveId = (id: unknown) => {\n\t\t\t\tif (typeof id !== \"string\") return false;\n\t\t\t\treturn __iw_idIsInteractive.get(id) === true;\n\t\t\t};\n\n\t\t\tconst emitUrlChangeEvent = () => {\n\t\t\t\tconst win = getWindow();\n\t\t\t\tif (!win) return;\n\t\t\t\tconst url = win.location.href;\n\t\t\t\tif (url === lastRecordedUrl) return;\n\t\t\t\tlastRecordedUrl = url;\n\t\t\t\tconst customEvent = {\n\t\t\t\t\ttype: 5,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttag: \"url-change\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tpathname: win.location.pathname,\n\t\t\t\t\t\tsearch: win.location.search,\n\t\t\t\t\t\thash: win.location.hash,\n\t\t\t\t\t},\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tw_v: LIB_VERSION,\n\t\t\t\t};\n\t\t\t\tvoid addEvent(customEvent);\n\t\t\t};\n\n\t\t\tconst installUrlChangeListeners = () => {\n\t\t\t\tconst win = getWindow();\n\t\t\t\tif (!win) return;\n\t\t\t\tconst originalPushState = win.history.pushState.bind(win.history);\n\t\t\t\tconst originalReplaceState = win.history.replaceState.bind(win.history);\n\t\t\t\twin.history.pushState = (\n\t\t\t\t\t...args: Parameters<typeof win.history.pushState>\n\t\t\t\t) => {\n\t\t\t\t\toriginalPushState(...args);\n\t\t\t\t\temitUrlChangeEvent();\n\t\t\t\t};\n\t\t\t\twin.history.replaceState = (\n\t\t\t\t\t...args: Parameters<typeof win.history.replaceState>\n\t\t\t\t) => {\n\t\t\t\t\toriginalReplaceState(...args);\n\t\t\t\t\temitUrlChangeEvent();\n\t\t\t\t};\n\t\t\t\tconst popstateHandler = () => emitUrlChangeEvent();\n\t\t\t\twin.addEventListener(\"popstate\", popstateHandler);\n\t\t\t\turlChangeCleanup = () => {\n\t\t\t\t\twin.history.pushState = originalPushState;\n\t\t\t\t\twin.history.replaceState = originalReplaceState;\n\t\t\t\t\twin.removeEventListener(\"popstate\", popstateHandler);\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst recordOptions: Record<string, unknown> = {\n\t\t\t\temit: (event: eventWithTime) => {\n\t\t\t\t\tif (event?.type === 2) {\n\t\t\t\t\t\trebuildInteractiveIdMapFromFullSnapshot(event);\n\t\t\t\t\t}\n\t\t\t\t\tconst filtered = filterEvent(event);\n\t\t\t\t\tif (filtered) {\n\t\t\t\t\t\t// Optional: let host page observe events (e.g. window.__IW_CONFIG__.onEvent)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst win = getWindow();\n\t\t\t\t\t\t\tconst iwConfig = win\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\twin as Window & {\n\t\t\t\t\t\t\t\t\t\t\t__IW_CONFIG__?: {\n\t\t\t\t\t\t\t\t\t\t\t\tonEvent?: (e: unknown) => void;\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).__IW_CONFIG__\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tif (typeof iwConfig?.onEvent === \"function\") {\n\t\t\t\t\t\t\t\tiwConfig.onEvent(filtered);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// no-op\n\t\t\t\t\t\t}\n\t\t\t\t\t\t(filtered as eventWithTime & { w_v?: string }).w_v = LIB_VERSION;\n\t\t\t\t\t\t// In debug mode skip packing so events are readable in Network tab\n\t\t\t\t\t\tconst eventToAdd = config.debug ? filtered : packFn(filtered);\n\t\t\t\t\t\tvoid addEvent(eventToAdd);\n\t\t\t\t\t\t// Type 5 session-started only when lastRecordedUrl not set yet (first full snapshot of session)\n\t\t\t\t\t\tif (filtered.type === 2 && !lastRecordedUrl) {\n\t\t\t\t\t\t\tconst win = getWindow();\n\t\t\t\t\t\t\tconst url = win?.location?.href ?? \"\";\n\t\t\t\t\t\t\tlastRecordedUrl = url;\n\t\t\t\t\t\t\tconst sessionStartedEvent = {\n\t\t\t\t\t\t\t\ttype: 5,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttag: \"session-started\",\n\t\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\t\tpathname: win?.location?.pathname ?? \"\",\n\t\t\t\t\t\t\t\t\tsearch: win?.location?.search ?? \"\",\n\t\t\t\t\t\t\t\t\thash: win?.location?.hash ?? \"\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\tw_v: LIB_VERSION,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tvoid addEvent(sessionStartedEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmaskAllInputs: config.maskAllInputs,\n\t\t\t\tmaskInputOptions: config.maskInputOptions,\n\t\t\t\trecordCanvas: config.recordCanvas,\n\t\t\t\trecordIframe: config.recordIframe,\n\t\t\t\trecordCrossOriginIframes: config.recordCrossOriginIframes,\n\t\t\t\tcollectFonts: false,\n\t\t\t\tinlineStylesheet: config.inlineStylesheet,\n\t\t\t\tslimDOM: true,\n\t\t\t\tslimDOMOptions: {\n\t\t\t\t\tscript: true,\n\t\t\t\t\tcomment: true,\n\t\t\t\t\theadFavicon: true,\n\t\t\t\t\theadMETA: true,\n\t\t\t\t\theadLink: true,\n\t\t\t\t\theadScript: true,\n\t\t\t\t\theadStyle: true,\n\t\t\t\t\tiframe: true,\n\t\t\t\t\tsvg: true,\n\t\t\t\t},\n\t\t\t\tsampling: {\n\t\t\t\t\tmousemove: 300,\n\t\t\t\t\tscroll: 300,\n\t\t\t\t\tmedia: 3000,\n\t\t\t\t\tinput: \"last\",\n\t\t\t\t},\n\t\t\t\tignoreMutation: (m: MutationRecord) => {\n\t\t\t\t\tconst t = m.target || null;\n\t\t\t\t\tif (!t || t.nodeType !== 1) return false;\n\t\t\t\t\tif (m.type === \"attributes\" && m.attributeName === \"style\") {\n\t\t\t\t\t\tconst oldStyle = m.oldValue ?? \"\";\n\t\t\t\t\t\tconst newStyle = (t as Element).getAttribute(\"style\") ?? \"\";\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlyAnimationStyleChanged(oldStyle, newStyle) &&\n\t\t\t\t\t\t\t!isInteractiveEl(t as Element)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tm.type === \"childList\" &&\n\t\t\t\t\t\tm.addedNodes.length === 0 &&\n\t\t\t\t\t\tm.removedNodes.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tif (config.blockClass) {\n\t\t\t\trecordOptions.blockClass = config.blockClass;\n\t\t\t}\n\t\t\tif (config.blockSelector) {\n\t\t\t\trecordOptions.blockSelector = config.blockSelector;\n\t\t\t}\n\t\t\tif (config.maskTextSelector) {\n\t\t\t\trecordOptions.maskTextSelector = config.maskTextSelector;\n\t\t\t}\n\t\t\tif (config.maskTextClass) {\n\t\t\t\trecordOptions.maskTextClass = config.maskTextClass;\n\t\t\t}\n\n\t\t\tiwInstallUserIntentListenersOnce();\n\t\t\tstopRecording = rrweb.record(recordOptions);\n\t\t\tinstallUrlChangeListeners();\n\t\t\tinitSessionRecording();\n\t\t} catch (err) {\n\t\t\terror(\"Failed to start recording:\", err);\n\t\t}\n\t};\n\n\tconst initSessionRecording = () => {\n\t\tstartSessionHeartbeat();\n\t\tstartSessionExpiryTimer();\n\t\tsaveSessionToStorage();\n\t\tstartFlushTimer();\n\t};\n\n\tconst stopRecordingSession = () => {\n\t\tstopSessionHeartbeat();\n\t\tstopSessionExpiryTimer();\n\t\tstopFlushTimer();\n\t\tflushEvents();\n\t\tclearSessionFromStorage();\n\t\tif (urlChangeCleanup) {\n\t\t\turlChangeCleanup();\n\t\t\turlChangeCleanup = null;\n\t\t}\n\t\tlastRecordedUrl = \"\";\n\t\tsessionId = null;\n\t\tsessionStartTime = null;\n\t\tisSessionActive = false;\n\t};\n\n\tconst init = async (options: WebCoreOptions) => {\n\t\tif (!isBrowser()) {\n\t\t\treturn null;\n\t\t}\n\t\tif (isInitialized) {\n\t\t\tlog(\"Tracker already initialized\");\n\t\t\treturn client;\n\t\t}\n\t\tif (!options.organizationId) {\n\t\t\t// Always log this critical error regardless of debug setting\n\t\t\tconsole.error(\n\t\t\t\t\"[InfiniteWatch]\",\n\t\t\t\t\"organizationId is required. Provide it as a prop/parameter or via an environment variable (e.g. NEXT_PUBLIC_INFINITEWATCH_ORG_ID or VITE_INFINITEWATCH_ORG_ID).\",\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t\tif (isOrganizationExcluded(options.organizationId)) {\n\t\t\tlog(\"Organization excluded from tracking:\", options.organizationId);\n\t\t\treturn null;\n\t\t}\n\t\tconst initialConfig = { ...DEFAULT_CONFIG, ...options };\n\t\tlet recordingConfig: Partial<typeof DEFAULT_CONFIG> = {};\n\t\tif (initialConfig.endpointConfig && initialConfig.organizationId) {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(initialConfig.endpointConfig, {\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"X-Organization\": initialConfig.organizationId,\n\t\t\t\t\t},\n\t\t\t\t\tcredentials: \"omit\",\n\t\t\t\t\tkeepalive: false,\n\t\t\t\t});\n\t\t\t\tif (response.status === 403) {\n\t\t\t\t\tconst errorData = await response.json();\n\t\t\t\t\tcontractStatus = {\n\t\t\t\t\t\terror: errorData.error || \"No active contract\",\n\t\t\t\t\t\tmessage: errorData.message || \"Your contract has expired\",\n\t\t\t\t\t\tcontract_expired: errorData.contract_expired || true,\n\t\t\t\t\t};\n\t\t\t\t\tlog(\n\t\t\t\t\t\t\"Contract expired or no active contract:\",\n\t\t\t\t\t\tcontractStatus.message,\n\t\t\t\t\t);\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (response.status === 429) {\n\t\t\t\t\tconst errorData = await response.json();\n\t\t\t\t\tquotaStatus = {\n\t\t\t\t\t\terror: errorData.error || \"Quota exceeded\",\n\t\t\t\t\t\tmessage: errorData.message || \"You have reached your usage limit\",\n\t\t\t\t\t\tusage: errorData.usage || null,\n\t\t\t\t\t\tupgrade_url: errorData.upgrade_url || null,\n\t\t\t\t\t};\n\t\t\t\t\tlog(\"Quota exceeded:\", quotaStatus.message);\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (response.ok) {\n\t\t\t\t\tconst configData = await response.json();\n\t\t\t\t\tconst booleanFromConfig = (value: unknown, fallback: boolean) => {\n\t\t\t\t\t\tif (value == null) return fallback;\n\t\t\t\t\t\tif (value === \"true\") return true;\n\t\t\t\t\t\tif (value === \"false\") return false;\n\t\t\t\t\t\treturn Boolean(value);\n\t\t\t\t\t};\n\t\t\t\t\trecordingConfig = {\n\t\t\t\t\t\tdefaultSamplingPercent:\n\t\t\t\t\t\t\tconfigData.samplingPercent ??\n\t\t\t\t\t\t\tinitialConfig.defaultSamplingPercent,\n\t\t\t\t\t\tautoResumeSession: booleanFromConfig(\n\t\t\t\t\t\t\tconfigData.autoResumeSession,\n\t\t\t\t\t\t\tinitialConfig.autoResumeSession,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tbatchSize: configData.batchSize ?? initialConfig.batchSize,\n\t\t\t\t\t\tflushInterval:\n\t\t\t\t\t\t\tconfigData.flushInterval ?? initialConfig.flushInterval,\n\t\t\t\t\t\tsessionTimeout:\n\t\t\t\t\t\t\tconfigData.sessionTimeout ?? initialConfig.sessionTimeout,\n\t\t\t\t\t\tsessionHeartbeatInterval:\n\t\t\t\t\t\t\tconfigData.sessionHeartbeatInterval ??\n\t\t\t\t\t\t\tinitialConfig.sessionHeartbeatInterval,\n\t\t\t\t\t\tinlineStylesheet: booleanFromConfig(\n\t\t\t\t\t\t\tconfigData.inlineStylesheet,\n\t\t\t\t\t\t\tinitialConfig.inlineStylesheet,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tgenerateInsights: booleanFromConfig(\n\t\t\t\t\t\t\tconfigData.generateInsights,\n\t\t\t\t\t\t\tinitialConfig.generateInsights,\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t\toptions.defaultSamplingPercent =\n\t\t\t\t\t\trecordingConfig.defaultSamplingPercent;\n\t\t\t\t\toptions.autoResumeSession = recordingConfig.autoResumeSession;\n\t\t\t\t\toptions.batchSize = recordingConfig.batchSize;\n\t\t\t\t\toptions.flushInterval = recordingConfig.flushInterval;\n\t\t\t\t\toptions.sessionTimeout = recordingConfig.sessionTimeout;\n\t\t\t\t\toptions.sessionHeartbeatInterval =\n\t\t\t\t\t\trecordingConfig.sessionHeartbeatInterval;\n\t\t\t\t\toptions.inlineStylesheet = recordingConfig.inlineStylesheet;\n\t\t\t\t\toptions.generateInsights = recordingConfig.generateInsights;\n\t\t\t\t\toptions.blackList = recordingConfig.blackList;\n\t\t\t\t\tswitch (configData.masking) {\n\t\t\t\t\t\tcase \"All\":\n\t\t\t\t\t\t\toptions.maskTextSelector = \"body\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"OnlyPasswords\":\n\t\t\t\t\t\t\toptions.maskAllInputs = false;\n\t\t\t\t\t\t\toptions.maskInputOptions = {\n\t\t\t\t\t\t\t\tpassword: true,\n\t\t\t\t\t\t\t\temail: false,\n\t\t\t\t\t\t\t\ttext: false,\n\t\t\t\t\t\t\t\ttel: false,\n\t\t\t\t\t\t\t\turl: false,\n\t\t\t\t\t\t\t\ttextarea: false,\n\t\t\t\t\t\t\t\tselect: false,\n\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\tradio: false,\n\t\t\t\t\t\t\t\tfile: false,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlog(\"Config endpoint returned error:\", response.status);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tlog(\"Failed to fetch endpoint config, using defaults:\", err);\n\t\t\t}\n\t\t}\n\n\t\tconfig = { ...DEFAULT_CONFIG, ...options };\n\n\t\tif (config.autoResumeSession) {\n\t\t\tconst existingSession = loadSessionFromStorage();\n\t\t\tif (existingSession && !isSessionExpired(existingSession)) {\n\t\t\t\tsessionId = existingSession.sessionId;\n\t\t\t\tuserId = existingSession.userId;\n\t\t\t\texternalId = existingSession.externalId || null;\n\t\t\t\torganizationId =\n\t\t\t\t\texistingSession.organizationId || config.organizationId;\n\t\t\t\tsessionStartTime = existingSession.sessionStartTime || now();\n\t\t\t\tisSampledIn = true;\n\t\t\t} else {\n\t\t\t\tsessionId = config.sessionId || generateSessionId();\n\t\t\t\tuserId = config.userId || getOrCreateUserId();\n\t\t\t\tconst previousSession = loadSessionFromStorage();\n\t\t\t\tif (previousSession?.externalId) {\n\t\t\t\t\texternalId = previousSession.externalId || null;\n\t\t\t\t}\n\t\t\t\torganizationId = config.organizationId;\n\t\t\t\tsessionStartTime = now();\n\t\t\t\tisSampledIn = shouldSample(organizationId, sessionId);\n\t\t\t}\n\t\t} else {\n\t\t\tsessionId = config.sessionId || generateSessionId();\n\t\t\tuserId = config.userId || getOrCreateUserId();\n\t\t\tconst previousSession = loadSessionFromStorage();\n\t\t\tif (previousSession?.externalId) {\n\t\t\t\texternalId = previousSession.externalId || null;\n\t\t\t}\n\t\t\torganizationId = config.organizationId;\n\t\t\tsessionStartTime = now();\n\t\t\tisSampledIn = shouldSample(organizationId, sessionId);\n\t\t}\n\n\t\tif (isSampledIn) {\n\t\t\tstartSessionExpiryTimer();\n\t\t} else {\n\t\t\tlog(\"Session not sampled in; not starting expiry timer\");\n\t\t}\n\n\t\tisInitialized = true;\n\n\t\twindow.addEventListener(\"beforeunload\", () => {\n\t\t\tflushEvents();\n\t\t\tupdateSessionActivity();\n\t\t\tvoid generateInsights().catch(() => {\n\t\t\t\t// swallow\n\t\t\t});\n\t\t});\n\n\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\t// Check if session has expired while tab was backgrounded\n\t\t\t\tif (isSessionActive && sessionStartTime) {\n\t\t\t\t\tconst totalSessionDuration = now() - sessionStartTime;\n\t\t\t\t\tif (totalSessionDuration > config.sessionTimeout) {\n\t\t\t\t\t\tlog(\"Session expired while tab was backgrounded, stopping session\");\n\t\t\t\t\t\tstopRecordingSession();\n\t\t\t\t\t\treturn; // Don't update activity for expired session\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateSessionActivity();\n\t\t\t} else if (document.visibilityState === \"hidden\") {\n\t\t\t\tvoid generateInsights().catch(() => {\n\t\t\t\t\t// swallow\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn client;\n\t};\n\n\tconst start = async () => {\n\t\tif (!isInitialized) {\n\t\t\terror(\"Tracker not initialized. Call init() first.\");\n\t\t\treturn client;\n\t\t}\n\t\tif (contractStatus) {\n\t\t\tlog(\"Recording blocked - Contract issue:\", contractStatus.message);\n\t\t\treturn client;\n\t\t}\n\t\tif (quotaStatus) {\n\t\t\tlog(\"Recording blocked - Quota exceeded:\", quotaStatus.message);\n\t\t\treturn client;\n\t\t}\n\t\tif (config.defaultSamplingPercent === 0) {\n\t\t\tlog(\"Recording blocked - samplingPercent set to 0\");\n\t\t\treturn client;\n\t\t}\n\t\tif (!isSampledIn) {\n\t\t\treturn client;\n\t\t}\n\t\ttry {\n\t\t\tawait startRecording();\n\t\t} catch (err) {\n\t\t\terror(\"Failed to start recording:\", err);\n\t\t}\n\t\treturn client;\n\t};\n\n\tconst stop = () => {\n\t\tstopRecordingSession();\n\t\treturn client;\n\t};\n\n\tconst hardStopSession = () => {\n\t\thardStop = true;\n\t\tstopRecordingSession();\n\t\treturn client;\n\t};\n\n\tconst flush = () => {\n\t\tflushEvents();\n\t\treturn client;\n\t};\n\n\tconst identify = (userIdentifier: UserIdentifier) => {\n\t\tif (!userIdentifier || !userIdentifier.external_id) {\n\t\t\terror(\"InfiniteWatch.identify: external_id is required\");\n\t\t\treturn client;\n\t\t}\n\t\tif (!sessionId || !userId) {\n\t\t\terror(\n\t\t\t\t\"InfiniteWatch.identify: No active session. Call init() and start() first.\",\n\t\t\t);\n\t\t\treturn client;\n\t\t}\n\t\tif (!organizationId) {\n\t\t\torganizationId = config.organizationId;\n\t\t}\n\t\tif (!organizationId) {\n\t\t\terror(\n\t\t\t\t\"InfiniteWatch.identify: No organization ID set. Cannot identify user.\",\n\t\t\t);\n\t\t\treturn client;\n\t\t}\n\n\t\tconst doc = getDocument();\n\t\tconst win = getWindow();\n\t\tif (!win) {\n\t\t\treturn client;\n\t\t}\n\t\tconst nav =\n\t\t\twin.navigator ??\n\t\t\t(typeof navigator !== \"undefined\" ? navigator : undefined);\n\t\tconst userLanguage =\n\t\t\tnav && \"userLanguage\" in nav\n\t\t\t\t? (nav as { userLanguage?: string }).userLanguage\n\t\t\t\t: undefined;\n\t\tconst browserMetadata = {\n\t\t\tuser_agent: nav?.userAgent,\n\t\t\tlanguage: nav?.language || userLanguage,\n\t\t\tlanguages: nav?.languages ? Array.from(nav.languages) : [],\n\t\t\tplatform: nav?.platform,\n\t\t\tscreen_width: win.screen?.width,\n\t\t\tscreen_height: win.screen?.height,\n\t\t\tviewport_width: win.innerWidth,\n\t\t\tviewport_height: win.innerHeight,\n\t\t\tcolor_depth: win.screen?.colorDepth,\n\t\t\tpixel_ratio: win.devicePixelRatio || 1,\n\t\t\ttimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t\t\ttimezone_offset: new Date().getTimezoneOffset(),\n\t\t\turl: win.location?.href,\n\t\t\tpathname: win.location?.pathname,\n\t\t\treferrer: doc?.referrer || null,\n\t\t\tonline: nav?.onLine,\n\t\t\tcookie_enabled: nav?.cookieEnabled,\n\t\t\tdo_not_track: nav?.doNotTrack || null,\n\t\t\ttouch_support: \"ontouchstart\" in win || (nav?.maxTouchPoints ?? 0) > 0,\n\t\t};\n\t\tconst requestBody: Record<string, unknown> = {\n\t\t\texternal_id: userIdentifier.external_id,\n\t\t\tsession_id: sessionId,\n\t\t\tuser_id: userId,\n\t\t\torganization_id: organizationId,\n\t\t\tclient_version: LIB_VERSION,\n\t\t\tclient_metadata: browserMetadata,\n\t\t};\n\t\tfor (const key in userIdentifier) {\n\t\t\tif (key !== \"external_id\" && Object.hasOwn(userIdentifier, key)) {\n\t\t\t\trequestBody[key] = userIdentifier[key];\n\t\t\t}\n\t\t}\n\t\tconst payloadString = JSON.stringify(requestBody);\n\t\tconst payloadSizeKB = new Blob([payloadString]).size / BYTES_IN_KILOBYTE;\n\t\tconst endpointUrl = buildEndpointUrl(\n\t\t\t`${config.baseUrl}/v1/users`,\n\t\t\t\"f\",\n\t\t\ttrue,\n\t\t\tpayloadSizeKB,\n\t\t\tfalse,\n\t\t\tsessionId,\n\t\t);\n\t\tfetch(endpointUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"text/plain\",\n\t\t\t},\n\t\t\tbody: payloadString,\n\t\t\tkeepalive: true,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tif (response.status === 0) {\n\t\t\t\t\tlog(\"Identify request aborted (status 0)\");\n\t\t\t\t} else if (response.ok) {\n\t\t\t\t\texternalId = userIdentifier.external_id;\n\t\t\t\t\tsaveSessionToStorage();\n\t\t\t\t\tlog(\"User identified successfully:\", userIdentifier.external_id);\n\t\t\t\t} else if (response.status >= 500) {\n\t\t\t\t\terror(\"Failed to identify user:\", response.status);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tconst errorMessage = (err as { message?: string })?.message || \"\";\n\t\t\t\tconst isBlocked =\n\t\t\t\t\terrorMessage.includes(\"Failed to fetch\") ||\n\t\t\t\t\terrorMessage.includes(\"NetworkError\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_CLIENT\") ||\n\t\t\t\t\terrorMessage.includes(\"ERR_BLOCKED_BY_RESPONSE\") ||\n\t\t\t\t\terrorMessage.includes(\"net::ERR_FAILED\");\n\t\t\t\tconst isAborted =\n\t\t\t\t\t(err as { name?: string })?.name === \"AbortError\" ||\n\t\t\t\t\t(err as { name?: string })?.name === \"TimeoutError\" ||\n\t\t\t\t\terrorMessage.includes(\"aborted\") ||\n\t\t\t\t\terrorMessage.includes(\"cancelled\");\n\t\t\t\tif (!isBlocked && !isAborted) {\n\t\t\t\t\terror(\"InfiniteWatch identify failed:\", err);\n\t\t\t\t}\n\t\t\t});\n\t\treturn client;\n\t};\n\n\tconst getSessionInfo = (): SessionInfo => {\n\t\treturn {\n\t\t\tsessionId,\n\t\t\tuserId,\n\t\t\torganizationId,\n\t\t\tsessionStartTime,\n\t\t\tisActive: isSessionActive,\n\t\t\thasStoredSession: !!loadSessionFromStorage(),\n\t\t};\n\t};\n\n\tconst getSessionId = () => sessionId;\n\n\tconst isBlocked = () => {\n\t\treturn (\n\t\t\tcontractStatus !== null ||\n\t\t\tquotaStatus !== null ||\n\t\t\tconfig.defaultSamplingPercent === 0\n\t\t);\n\t};\n\n\tconst getContractStatus = () => contractStatus;\n\tconst getQuotaStatus = () => quotaStatus;\n\n\tconst client: WebCoreClient = {\n\t\tinit,\n\t\tstart,\n\t\tstop,\n\t\thardStop: hardStopSession,\n\t\tflush,\n\t\tidentify,\n\t\tgenerateInsights,\n\t\tgetSessionId,\n\t\tgetSessionInfo,\n\t\tisBlocked,\n\t\tgetContractStatus,\n\t\tgetQuotaStatus,\n\t};\n\n\treturn client;\n};\n","import { createWebCore } from \"./core\";\nimport type { WebCoreOptions } from \"./types\";\n\ntype IWQueueEntry = [string, unknown[]];\n\ntype IWInstance = {\n\t_q?: IWQueueEntry[];\n\tinit?: (...args: unknown[]) => unknown;\n\tstart?: (...args: unknown[]) => unknown;\n\tstop?: (...args: unknown[]) => unknown;\n\thardStop?: (...args: unknown[]) => unknown;\n\tflush?: (...args: unknown[]) => unknown;\n\tidentify?: (...args: unknown[]) => unknown;\n\tgenerateInsights?: (...args: unknown[]) => unknown;\n\tgetSessionId?: (...args: unknown[]) => unknown;\n\tgetSessionInfo?: (...args: unknown[]) => unknown;\n\tisBlocked?: (...args: unknown[]) => unknown;\n\tgetContractStatus?: (...args: unknown[]) => unknown;\n\tgetQuotaStatus?: (...args: unknown[]) => unknown;\n\t[key: string]: unknown;\n};\n\ntype IWWatchWindow = Window & {\n\t__IW_LOADED?: boolean;\n\t__IW_SNIPPET_LOADED?: boolean;\n\t__IW_CONFIG__?: Record<string, unknown>;\n\tInfiniteWatch?: IWInstance;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === \"object\" && value !== null;\n\n(() => {\n\tif (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n\n\tconst iwWindow = window as IWWatchWindow;\n\n\tif (iwWindow.__IW_LOADED || iwWindow.__IW_SNIPPET_LOADED) return;\n\tiwWindow.__IW_LOADED = true;\n\tiwWindow.__IW_SNIPPET_LOADED = true;\n\n\tconst currentScript =\n\t\t(document.currentScript as HTMLScriptElement | null) ||\n\t\tdocument.querySelector(\"script[data-iw-organization-id]\");\n\n\tconst configFromGlobal = isRecord(iwWindow.__IW_CONFIG__)\n\t\t? iwWindow.__IW_CONFIG__\n\t\t: {};\n\tconst options: Record<string, unknown> = { ...configFromGlobal };\n\n\tconst existing = iwWindow.InfiniteWatch;\n\tconst queue: IWQueueEntry[] = Array.isArray(existing?._q) ? existing._q : [];\n\n\tconst readAttr = (name: string) => currentScript?.getAttribute(name);\n\tconst organizationId =\n\t\treadAttr(\"data-iw-organization-id\") ?? configFromGlobal.organizationId;\n\tconst hasQueuedInit = queue.some(([method]) => method === \"init\");\n\n\tif (!organizationId && !hasQueuedInit) return;\n\tif (organizationId) {\n\t\toptions.organizationId = organizationId;\n\t}\n\n\tconst endpoint = readAttr(\"data-iw-endpoint\") ?? configFromGlobal.endpoint;\n\tif (endpoint !== undefined) {\n\t\toptions.endpoint = endpoint;\n\t}\n\n\tconst endpointConfig =\n\t\treadAttr(\"data-iw-endpoint-config\") ?? configFromGlobal.endpointConfig;\n\tif (endpointConfig !== undefined) {\n\t\toptions.endpointConfig = endpointConfig;\n\t}\n\n\tconst sessionId =\n\t\treadAttr(\"data-iw-session-id\") ?? configFromGlobal.sessionId;\n\tif (sessionId !== undefined) {\n\t\toptions.sessionId = sessionId;\n\t}\n\n\tconst userId = readAttr(\"data-iw-user-id\") ?? configFromGlobal.userId;\n\tif (userId !== undefined) {\n\t\toptions.userId = userId;\n\t}\n\n\tconst enqueue = (method: string, args: unknown[]) => {\n\t\tqueue.push([method, args]);\n\t};\n\n\tconst makeProxy = (method: string) => {\n\t\treturn (...args: unknown[]): IWInstance => {\n\t\t\tenqueue(method, args);\n\t\t\treturn iwWindow.InfiniteWatch as IWInstance;\n\t\t};\n\t};\n\n\tconst shim: IWInstance = {\n\t\t_q: queue,\n\t\tinit: makeProxy(\"init\"),\n\t\tstart: makeProxy(\"start\"),\n\t\tstop: makeProxy(\"stop\"),\n\t\thardStop: makeProxy(\"hardStop\"),\n\t\tflush: makeProxy(\"flush\"),\n\t\tidentify: makeProxy(\"identify\"),\n\t\tgenerateInsights: makeProxy(\"generateInsights\"),\n\t\tgetSessionId: makeProxy(\"getSessionId\"),\n\t};\n\n\tiwWindow.InfiniteWatch = { ...(existing || {}), ...shim };\n\n\tif (!hasQueuedInit) {\n\t\tenqueue(\"init\", [options as WebCoreOptions]);\n\t}\n\n\tif (!queue.some(([method]) => method === \"start\")) {\n\t\tenqueue(\"start\", []);\n\t}\n\n\tconst core = createWebCore();\n\tconst drainQueue = async () => {\n\t\tfor (const [method, args] of queue) {\n\t\t\tconst fn = (core as Record<string, unknown>)[method];\n\t\t\tif (typeof fn === \"function\") {\n\t\t\t\tawait (fn as (...callArgs: unknown[]) => unknown)(...args);\n\t\t\t}\n\t\t}\n\t\tqueue.length = 0;\n\t};\n\n\tiwWindow.InfiniteWatch = core as IWInstance;\n\tvoid drainQueue();\n})();\n"],"mappings":"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","names":["fallbackBlob","endpointUrl","isBlocked","isRecord"]}
|