@agent-native/core 0.91.2 → 0.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +17 -0
  3. package/corpus/core/docs/content/faq.mdx +17 -0
  4. package/corpus/core/docs/content/notifications.mdx +12 -6
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/agent/production-agent.ts +140 -46
  7. package/corpus/core/src/agent/tool-search.ts +71 -4
  8. package/corpus/core/src/cli/index.ts +20 -0
  9. package/corpus/core/src/cli/upgrade.ts +798 -0
  10. package/corpus/core/src/client/AssistantChat.tsx +1 -1
  11. package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
  12. package/corpus/core/src/client/agent-chat-adapter.ts +31 -6
  13. package/corpus/core/src/client/chat/message-components.tsx +85 -8
  14. package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
  15. package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
  16. package/corpus/core/src/client/session-replay.ts +3 -97
  17. package/corpus/core/src/client/settings/SettingsPanel.tsx +533 -389
  18. package/corpus/core/src/client/settings/SettingsSection.tsx +154 -17
  19. package/corpus/core/src/client/sse-event-processor.ts +29 -2
  20. package/corpus/core/src/extensions/actions.ts +113 -5
  21. package/corpus/core/src/notifications/channels.ts +88 -25
  22. package/corpus/core/src/notifications/registry.ts +17 -3
  23. package/corpus/core/src/notifications/types.ts +4 -1
  24. package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
  25. package/corpus/core/src/server/request-context.ts +7 -0
  26. package/corpus/core/src/styles/agent-conversation.css +1 -1
  27. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  28. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  29. package/corpus/core/src/templates/default/AGENTS.md +10 -3
  30. package/corpus/core/src/templates/default/package.json +2 -1
  31. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  32. package/corpus/core/src/templates/headless/AGENTS.md +9 -3
  33. package/corpus/core/src/templates/headless/package.json +1 -0
  34. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  35. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  36. package/corpus/core/src/templates/workspace-root/AGENTS.md +10 -4
  37. package/corpus/core/src/templates/workspace-root/package.json +1 -0
  38. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
  39. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
  40. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  41. package/corpus/templates/analytics/AGENTS.md +7 -5
  42. package/corpus/templates/analytics/actions/save-monitor.ts +14 -0
  43. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
  44. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
  45. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
  46. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +151 -32
  47. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
  48. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
  49. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +54 -190
  50. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
  51. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
  52. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
  53. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
  54. package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
  55. package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
  56. package/corpus/templates/analytics/server/db/schema-monitoring.ts +4 -0
  57. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +60 -12
  58. package/corpus/templates/analytics/server/plugins/db.ts +10 -0
  59. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
  60. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  61. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
  62. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  63. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
  64. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  65. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
  66. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  67. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
  68. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  69. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
  70. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
  71. package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
  72. package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
  73. package/corpus/templates/clips/desktop/src/app.tsx +123 -3
  74. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
  75. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
  76. package/corpus/templates/clips/desktop/src/styles.css +23 -1
  77. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
  78. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
  79. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
  80. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
  81. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
  82. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
  83. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
  84. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
  85. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
  86. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
  87. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  88. package/corpus/templates/content/actions/_batch-utils.ts +8 -0
  89. package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
  90. package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
  91. package/corpus/templates/content/actions/_database-utils.ts +6 -1
  92. package/corpus/templates/content/actions/_property-utils.ts +168 -0
  93. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
  94. package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
  95. package/corpus/templates/content/actions/delete-document.ts +9 -13
  96. package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
  97. package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
  98. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
  99. package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
  100. package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
  101. package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
  102. package/corpus/templates/content/server/plugins/db.ts +19 -0
  103. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
  104. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  105. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
  106. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  107. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
  108. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  109. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  110. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
  111. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  112. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
  113. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  114. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
  115. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  116. package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  117. package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  118. package/dist/agent/production-agent.d.ts +5 -1
  119. package/dist/agent/production-agent.d.ts.map +1 -1
  120. package/dist/agent/production-agent.js +112 -42
  121. package/dist/agent/production-agent.js.map +1 -1
  122. package/dist/agent/tool-search.d.ts +2 -0
  123. package/dist/agent/tool-search.d.ts.map +1 -1
  124. package/dist/agent/tool-search.js +60 -4
  125. package/dist/agent/tool-search.js.map +1 -1
  126. package/dist/cli/index.js +19 -0
  127. package/dist/cli/index.js.map +1 -1
  128. package/dist/cli/upgrade.d.ts +100 -0
  129. package/dist/cli/upgrade.d.ts.map +1 -0
  130. package/dist/cli/upgrade.js +678 -0
  131. package/dist/cli/upgrade.js.map +1 -0
  132. package/dist/client/AssistantChat.js +1 -1
  133. package/dist/client/AssistantChat.js.map +1 -1
  134. package/dist/client/HighlightedCodeBlock.d.ts +2 -0
  135. package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
  136. package/dist/client/HighlightedCodeBlock.js +10 -1
  137. package/dist/client/HighlightedCodeBlock.js.map +1 -1
  138. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  139. package/dist/client/agent-chat-adapter.js +32 -4
  140. package/dist/client/agent-chat-adapter.js.map +1 -1
  141. package/dist/client/chat/message-components.d.ts.map +1 -1
  142. package/dist/client/chat/message-components.js +61 -8
  143. package/dist/client/chat/message-components.js.map +1 -1
  144. package/dist/client/chat/tool-call-display.d.ts +12 -0
  145. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  146. package/dist/client/chat/tool-call-display.js +136 -42
  147. package/dist/client/chat/tool-call-display.js.map +1 -1
  148. package/dist/client/code-agent-chat-adapter.js +2 -9
  149. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  150. package/dist/client/session-replay.d.ts +0 -8
  151. package/dist/client/session-replay.d.ts.map +1 -1
  152. package/dist/client/session-replay.js +3 -80
  153. package/dist/client/session-replay.js.map +1 -1
  154. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  155. package/dist/client/settings/SettingsPanel.js +52 -19
  156. package/dist/client/settings/SettingsPanel.js.map +1 -1
  157. package/dist/client/settings/SettingsSection.d.ts +19 -4
  158. package/dist/client/settings/SettingsSection.d.ts.map +1 -1
  159. package/dist/client/settings/SettingsSection.js +33 -4
  160. package/dist/client/settings/SettingsSection.js.map +1 -1
  161. package/dist/client/sse-event-processor.d.ts +9 -0
  162. package/dist/client/sse-event-processor.d.ts.map +1 -1
  163. package/dist/client/sse-event-processor.js +20 -2
  164. package/dist/client/sse-event-processor.js.map +1 -1
  165. package/dist/collab/routes.d.ts +1 -1
  166. package/dist/extensions/actions.d.ts.map +1 -1
  167. package/dist/extensions/actions.js +85 -5
  168. package/dist/extensions/actions.js.map +1 -1
  169. package/dist/notifications/channels.d.ts +8 -3
  170. package/dist/notifications/channels.d.ts.map +1 -1
  171. package/dist/notifications/channels.js +61 -22
  172. package/dist/notifications/channels.js.map +1 -1
  173. package/dist/notifications/registry.d.ts.map +1 -1
  174. package/dist/notifications/registry.js +14 -3
  175. package/dist/notifications/registry.js.map +1 -1
  176. package/dist/notifications/routes.d.ts +1 -1
  177. package/dist/notifications/types.d.ts +4 -1
  178. package/dist/notifications/types.d.ts.map +1 -1
  179. package/dist/notifications/types.js.map +1 -1
  180. package/dist/observability/routes.d.ts +1 -1
  181. package/dist/resources/handlers.d.ts +1 -1
  182. package/dist/server/agent-chat-plugin.d.ts +5 -1
  183. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  184. package/dist/server/agent-chat-plugin.js +2 -2
  185. package/dist/server/agent-chat-plugin.js.map +1 -1
  186. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  187. package/dist/server/request-context.d.ts +7 -0
  188. package/dist/server/request-context.d.ts.map +1 -1
  189. package/dist/server/request-context.js.map +1 -1
  190. package/dist/styles/agent-conversation.css +1 -1
  191. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  192. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  193. package/dist/templates/default/AGENTS.md +10 -3
  194. package/dist/templates/default/package.json +2 -1
  195. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  196. package/dist/templates/headless/AGENTS.md +9 -3
  197. package/dist/templates/headless/package.json +1 -0
  198. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  199. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  200. package/dist/templates/workspace-root/AGENTS.md +10 -4
  201. package/dist/templates/workspace-root/package.json +1 -0
  202. package/docs/content/faq.mdx +17 -0
  203. package/docs/content/notifications.mdx +12 -6
  204. package/package.json +2 -2
  205. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  206. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  207. package/src/templates/default/AGENTS.md +10 -3
  208. package/src/templates/default/package.json +2 -1
  209. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  210. package/src/templates/headless/AGENTS.md +9 -3
  211. package/src/templates/headless/package.json +1 -0
  212. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  213. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  214. package/src/templates/workspace-root/AGENTS.md +10 -4
  215. package/src/templates/workspace-root/package.json +1 -0
  216. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/client/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getOrCreateAnalyticsAnonymousId,\n getOrCreateAnalyticsSessionId,\n} from \"./analytics-session.js\";\nimport { scrubUrl } from \"./url-scrub.js\";\n\ntype ReplayEvent = Record<string, unknown>;\ntype QueuedReplayEvent = {\n json: string;\n timestampMs: number;\n type: number | null;\n};\ntype ReplayStopFn = () => void;\nexport type SessionReplayUrlMatcher =\n | string\n | RegExp\n | ((url: string) => boolean);\n\ninterface RrwebRecordOptions {\n emit: (event: ReplayEvent) => void;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockClass?: string | RegExp;\n blockSelector?: string;\n ignoreClass?: string | RegExp;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n maskInputOptions?: Record<string, boolean>;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n sampling?: Record<string, unknown>;\n}\n\ntype RrwebRecordFn = ((\n options: RrwebRecordOptions,\n) => ReplayStopFn | undefined) & {\n addCustomEvent?: (tag: string, payload: unknown) => void;\n};\n\ninterface RrwebRecordModule {\n record: RrwebRecordFn;\n}\n\ninterface SessionReplayState {\n active: boolean;\n startPromise: Promise<SessionReplayStartResult> | null;\n replayId: string | null;\n startedAtMs: number | null;\n sequence: number;\n /** Pre-serialized + scrubbed event JSON strings, ready to splice at flush. */\n queue: QueuedReplayEvent[];\n queuedBytes: number;\n retryBatches: QueuedReplayEvent[][];\n flushTimer: number | null;\n maxDurationTimer: number | null;\n flushing: boolean;\n stopRecorder: ReplayStopFn | null;\n restoreUrlMonitor: (() => void) | null;\n removeLifecycleListeners: (() => void) | null;\n /** rrweb's `record.addCustomEvent`, captured at start (null when absent). */\n addCustomEvent: ((tag: string, payload: unknown) => void) | null;\n /** Uninstalls console/network interceptors and flushes pending duplicates. */\n restoreCaptures: (() => void) | null;\n options: NormalizedSessionReplayOptions | null;\n lastAuthenticatedProperties: Record<string, unknown> | null;\n}\n\ninterface StoredReplaySession {\n sessionId?: string;\n replayId?: string;\n startedAtMs?: number;\n sequence?: number;\n}\n\n/** rrweb `sampling` shape (mousemove/scroll/media throttles, input strategy). */\nexport type ReplayEventSampling = Record<string, unknown>;\n\n/**\n * Console capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.console` custom events emitted per recording session\n * (default 1000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n */\nexport interface SessionReplayConsoleOptions {\n maxEvents?: number;\n}\n\n/**\n * Network capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.network` custom events emitted per recording session\n * (default 2000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n *\n * `captureErrorBodies` (default true) additionally captures a bounded,\n * redacted response-body snippet for 5xx responses only -- request bodies\n * and headers are never captured, and non-5xx/network-failure responses\n * never carry a body. `maxErrorBodyLength` (default 2048) caps that snippet.\n */\nexport interface SessionReplayNetworkOptions {\n maxEvents?: number;\n captureErrorBodies?: boolean;\n maxErrorBodyLength?: number;\n}\n\nexport interface SessionReplayOptions {\n enabled?: boolean;\n publicKey?: string;\n endpoint?: string;\n requireSignedInUser?: boolean;\n sampleRate?: number;\n samplingSalt?: string;\n allowUrls?: SessionReplayUrlMatcher[];\n blockUrls?: SessionReplayUrlMatcher[];\n flushIntervalMs?: number;\n maxDurationMs?: number;\n maxEventsPerBatch?: number;\n maxBatchBytes?: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockSelector?: string;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n /**\n * rrweb per-event throttling (distinct from `sampleRate`, which decides\n * whether a whole session records). Throttles high-frequency event types\n * (mousemove/scroll/input) to keep the recorded page responsive and the\n * payloads small. Passed straight through to `rrweb.record({ sampling })`.\n */\n eventSampling?: ReplayEventSampling;\n /**\n * Capture console.log/info/warn/error/debug plus window `error` and\n * `unhandledrejection` events as `agent-native.console` custom rrweb\n * events. Defaults to on whenever session replay is enabled. Pass `false`\n * to disable, or an options object to override caps.\n */\n console?: boolean | SessionReplayConsoleOptions;\n /**\n * Capture fetch/XHR requests as `agent-native.network` custom rrweb\n * events (method, URL, status, timing). Request bodies and headers are\n * never captured; response bodies are captured only as a bounded,\n * redacted snippet for 5xx responses (see `captureErrorBodies`).\n * Defaults to on whenever session replay is enabled. Pass `false` to\n * disable, or an options object to override caps.\n */\n network?: boolean | SessionReplayNetworkOptions;\n extraProperties?:\n | Record<string, unknown>\n | (() => Record<string, unknown> | undefined);\n}\n\nexport interface SessionReplayStartResult {\n started: boolean;\n reason?:\n | \"disabled\"\n | \"not-browser\"\n | \"missing-public-key\"\n | \"missing-session-id\"\n | \"missing-user-id\"\n | \"sampled-out\"\n | \"url-blocked\"\n | \"already-active\"\n | \"import-failed\"\n | \"record-failed\";\n replayId?: string;\n sessionId?: string;\n sampled?: boolean;\n}\n\ninterface NormalizedSessionReplayOptions {\n publicKey: string;\n endpoint: string;\n requireSignedInUser: boolean;\n sampleRate: number;\n samplingSalt: string;\n allowUrls: SessionReplayUrlMatcher[];\n blockUrls: SessionReplayUrlMatcher[];\n flushIntervalMs: number;\n maxDurationMs: number;\n maxEventsPerBatch: number;\n maxBatchBytes: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet: boolean;\n blockSelector: string;\n ignoreSelector: string;\n maskTextClass: string | RegExp;\n maskTextSelector: string;\n maskAllInputs: boolean;\n recordCanvas: boolean;\n recordCrossOriginIframes: boolean;\n collectFonts: boolean;\n inlineImages: boolean;\n eventSampling: ReplayEventSampling;\n /** Null disables console capture entirely. */\n console: NormalizedCaptureOptions | null;\n /** Null disables network capture entirely. */\n network: NormalizedCaptureOptions | null;\n extraProperties?: SessionReplayOptions[\"extraProperties\"];\n}\n\ninterface NormalizedCaptureOptions {\n maxEvents: number;\n /** Network-only: capture a bounded 5xx response-body snippet. Unused by console. */\n captureErrorBodies?: boolean;\n /** Network-only: cap (chars) for the captured error-body snippet. */\n maxErrorBodyLength?: number;\n}\n\nconst DEFAULT_REPLAY_PATH = \"/api/analytics/replay\";\nconst DEFAULT_SAMPLING_SALT = \"agent-native-session-replay\";\n\n/**\n * Default rrweb event throttling. Without this, rrweb captures every\n * mousemove/scroll which dominates event volume and main-thread cost on\n * interactive pages. These caps keep replays faithful while staying light.\n */\nconst DEFAULT_EVENT_SAMPLING: ReplayEventSampling = {\n mousemove: 50,\n mouseInteraction: true,\n scroll: 100,\n media: 800,\n input: \"last\",\n};\nconst SESSION_REPLAY_STATE_KEY = Symbol.for(\n \"agent-native.client.sessionReplay\",\n);\nconst SESSION_REPLAY_ID_STORAGE_KEY = \"agent-native.session_replay_id\";\nconst DEFAULT_BLOCK_SELECTOR = [\n \"[data-sensitive]\",\n \"[data-an-block]\",\n \"[data-an-private]\",\n \"[data-private]\",\n \".an-block\",\n \".an-replay-block\",\n \".an-private\",\n \".rr-block\",\n \"[autocomplete='cc-number']\",\n \"[autocomplete='cc-csc']\",\n \"[autocomplete='cc-exp']\",\n \"[name*='password' i]\",\n \"[name*='credit' i]\",\n \"[name*='card' i]\",\n \"[name*='ssn' i]\",\n].join(\", \");\nconst DEFAULT_IGNORE_SELECTOR = \".an-ignore, [data-an-ignore]\";\nconst DEFAULT_MASK_TEXT_CLASS = \"an-mask\";\nconst DEFAULT_MASK_TEXT_SELECTOR = \"[data-an-mask]\";\nconst DEFAULT_FLUSH_INTERVAL_MS = 5000;\nconst DEFAULT_MAX_DURATION_MS = 30 * 60 * 1000;\nconst DEFAULT_MAX_EVENTS_PER_BATCH = 50;\nconst DEFAULT_MAX_BATCH_BYTES = 256 * 1024;\nconst MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES = 60 * 1024;\nconst RRWEB_FULL_SNAPSHOT_EVENT_TYPE = 2;\n\n/** rrweb custom-event tag for captured console/window-error entries. */\nexport const SESSION_REPLAY_CONSOLE_EVENT_TAG = \"agent-native.console\";\n/** rrweb custom-event tag for captured fetch/XHR request summaries. */\nexport const SESSION_REPLAY_NETWORK_EVENT_TAG = \"agent-native.network\";\n\nconst DEFAULT_MAX_CONSOLE_EVENTS = 1000;\nconst DEFAULT_MAX_NETWORK_EVENTS = 2000;\nconst MAX_CONSOLE_MESSAGE_LENGTH = 500;\nconst MAX_CONSOLE_ARGS = 10;\nconst MAX_CONSOLE_STACK_LENGTH = 2000;\nconst MAX_CONSOLE_SERIALIZE_DEPTH = 4;\nconst MAX_CONSOLE_SERIALIZE_ENTRIES = 20;\n/** Default cap (chars) for a captured 5xx response-body snippet. */\nconst DEFAULT_MAX_ERROR_BODY_LENGTH = 2048;\n/** Hard timeout for the async response-body read; emit without body past this. */\nconst ERROR_BODY_READ_TIMEOUT_MS = 1500;\n\n/**\n * Re-entrancy guard: true while the recorder itself is emitting custom events\n * or flushing (synchronously) so the console/fetch/XHR wrappers never capture\n * the recorder's own work and feed it back into the replay stream.\n */\nlet replayCaptureInternal = false;\n\n// Credential-looking token redaction for captured console/network text,\n// adapted from the clips template's browser-diagnostics redaction helper.\nconst CAPTURE_SECRET_KEY_FRAGMENT =\n \"(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|session|credential)\";\nconst CAPTURE_AUTHORIZATION_SCHEME_RE =\n /\\b(authorization)\\b(\\s*[:=]\\s*)(?:bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_BEARER_RE = /\\b(bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_DOUBLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\"`,\n \"gi\",\n);\nconst CAPTURE_SINGLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)'(?:[^'\\\\\\\\]|\\\\\\\\.)*'`,\n \"gi\",\n);\nconst CAPTURE_UNQUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)([^\"',\\\\s;}\\\\]]+)`,\n \"gi\",\n);\n\nfunction redactCaptureText(value: string): string {\n return value\n .replace(CAPTURE_AUTHORIZATION_SCHEME_RE, \"$1$2<redacted>\")\n .replace(CAPTURE_BEARER_RE, \"$1 <redacted>\")\n .replace(CAPTURE_DOUBLE_QUOTED_SECRET_RE, '$1$2$1$3\"<redacted>\"')\n .replace(CAPTURE_SINGLE_QUOTED_SECRET_RE, \"$1$2$1$3'<redacted>'\")\n .replace(CAPTURE_UNQUOTED_SECRET_RE, \"$1$2$1$3<redacted>\");\n}\nconst URL_LIKE_KEYS = new Set([\n \"url\",\n \"uri\",\n \"href\",\n \"src\",\n \"currentUrl\",\n \"referrer\",\n \"from\",\n \"to\",\n]);\n\nfunction getState(): SessionReplayState {\n const g = globalThis as typeof globalThis & {\n [SESSION_REPLAY_STATE_KEY]?: SessionReplayState;\n };\n if (!g[SESSION_REPLAY_STATE_KEY]) {\n g[SESSION_REPLAY_STATE_KEY] = {\n active: false,\n startPromise: null,\n replayId: null,\n startedAtMs: null,\n sequence: 0,\n queue: [],\n queuedBytes: 0,\n retryBatches: [],\n flushTimer: null,\n maxDurationTimer: null,\n flushing: false,\n stopRecorder: null,\n restoreUrlMonitor: null,\n removeLifecycleListeners: null,\n addCustomEvent: null,\n restoreCaptures: null,\n options: null,\n lastAuthenticatedProperties: null,\n };\n }\n return g[SESSION_REPLAY_STATE_KEY]!;\n}\n\nfunction safeStorageGet(key: string): string | null {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeStorageSet(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n // private browsing / storage disabled -- replay still works for this page\n }\n}\n\nfunction generateReplayId(): string {\n try {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n } catch {\n // fall through\n }\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction readStoredReplaySession(): StoredReplaySession | null {\n const raw = safeStorageGet(SESSION_REPLAY_ID_STORAGE_KEY);\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as StoredReplaySession;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredReplaySession(value: StoredReplaySession): void {\n safeStorageSet(SESSION_REPLAY_ID_STORAGE_KEY, JSON.stringify(value));\n}\n\nfunction getOrCreateReplaySession(sessionId: string): {\n replayId: string;\n startedAtMs: number;\n sequence: number;\n} {\n const parsed = readStoredReplaySession();\n if (parsed?.sessionId === sessionId && parsed.replayId) {\n const startedAtMs =\n typeof parsed.startedAtMs === \"number\" &&\n Number.isFinite(parsed.startedAtMs) &&\n parsed.startedAtMs > 0\n ? parsed.startedAtMs\n : Date.now();\n const sequence =\n typeof parsed.sequence === \"number\" &&\n Number.isFinite(parsed.sequence) &&\n parsed.sequence >= 0\n ? Math.floor(parsed.sequence)\n : 0;\n return { replayId: parsed.replayId, startedAtMs, sequence };\n }\n const replayId = generateReplayId();\n const startedAtMs = Date.now();\n writeStoredReplaySession({ sessionId, replayId, startedAtMs, sequence: 0 });\n return { replayId, startedAtMs, sequence: 0 };\n}\n\nfunction persistReplaySequence(\n sessionId: string,\n replayId: string,\n startedAtMs: number | null,\n sequence: number,\n): void {\n writeStoredReplaySession({\n sessionId,\n replayId,\n startedAtMs: startedAtMs ?? Date.now(),\n sequence,\n });\n}\n\nfunction clampSamplingRate(value: number | undefined): number {\n if (typeof value !== \"number\" || Number.isNaN(value)) return 1;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readEnvString(key: string): string | undefined {\n return (import.meta.env as Record<string, string | undefined>)?.[key]?.trim();\n}\n\nfunction readEnvNumber(key: string): number | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction readEnvBoolean(key: string): boolean | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n if (/^(1|true|yes|on)$/i.test(raw)) return true;\n if (/^(0|false|no|off)$/i.test(raw)) return false;\n return undefined;\n}\n\nfunction readFirstEnvString(keys: string[]): string | undefined {\n for (const key of keys) {\n const value = readEnvString(key);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction readFirstEnvNumber(keys: string[]): number | undefined {\n for (const key of keys) {\n const value = readEnvNumber(key);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction replayEndpointFromAnalyticsEndpoint(value: string): string | null {\n try {\n const url = new URL(value);\n if (url.pathname.endsWith(\"/api/analytics/track\")) {\n url.pathname = url.pathname.replace(\n /\\/api\\/analytics\\/track$/,\n \"/api/analytics/replay\",\n );\n return url.toString();\n }\n if (url.pathname.endsWith(\"/track\")) {\n url.pathname = url.pathname.replace(/\\/track$/, \"/api/analytics/replay\");\n return url.toString();\n }\n } catch {\n // Fall through to the relative path cases below.\n }\n if (value.endsWith(\"/api/analytics/track\")) {\n return value.replace(/\\/api\\/analytics\\/track$/, \"/api/analytics/replay\");\n }\n if (value.endsWith(\"/track\")) {\n return value.replace(/\\/track$/, \"/api/analytics/replay\");\n }\n return null;\n}\n\nfunction defaultReplayEndpoint(): string {\n const analyticsEndpoint = readEnvString(\n \"VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT\",\n );\n const derived = analyticsEndpoint\n ? replayEndpointFromAnalyticsEndpoint(analyticsEndpoint)\n : null;\n if (derived) return derived;\n return typeof window !== \"undefined\"\n ? `${window.location.origin}${DEFAULT_REPLAY_PATH}`\n : DEFAULT_REPLAY_PATH;\n}\n\nexport function getSessionReplaySamplingScore(\n sessionId: string,\n salt = DEFAULT_SAMPLING_SALT,\n): number {\n let hash = 2166136261;\n const input = `${salt}:${sessionId}`;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) / 4294967296;\n}\n\nexport function shouldSampleSessionReplay(\n sessionId: string,\n sampleRate = 1,\n salt = DEFAULT_SAMPLING_SALT,\n): boolean {\n const rate = clampSamplingRate(sampleRate);\n if (rate <= 0) return false;\n if (rate >= 1) return true;\n return getSessionReplaySamplingScore(sessionId, salt) < rate;\n}\n\nfunction matcherAllows(matcher: SessionReplayUrlMatcher, url: string): boolean {\n if (typeof matcher === \"string\") return url.includes(matcher);\n if (matcher instanceof RegExp) return matcher.test(url);\n return matcher(url);\n}\n\nfunction isUrlRecordable(\n url: string,\n options: Pick<NormalizedSessionReplayOptions, \"allowUrls\" | \"blockUrls\">,\n): boolean {\n if (options.allowUrls.length > 0) {\n const allowed = options.allowUrls.some((matcher) =>\n matcherAllows(matcher, url),\n );\n if (!allowed) return false;\n }\n return !options.blockUrls.some((matcher) => matcherAllows(matcher, url));\n}\n\nfunction normalizeOptions(\n options: SessionReplayOptions,\n): NormalizedSessionReplayOptions | null {\n const publicKey =\n options.publicKey ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_PUBLIC_KEY\",\n \"VITE_SESSION_REPLAY_PUBLIC_KEY\",\n ]) ||\n (import.meta.env as Record<string, string | undefined>)\n ?.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;\n if (!publicKey) return null;\n const endpoint =\n options.endpoint ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_ANALYTICS_REPLAY_ENDPOINT\",\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_ENDPOINT\",\n \"VITE_SESSION_REPLAY_INGEST_URL\",\n ]) ||\n defaultReplayEndpoint();\n return {\n publicKey,\n endpoint,\n requireSignedInUser:\n options.requireSignedInUser ??\n readEnvBoolean(\"VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n readEnvBoolean(\"VITE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n false,\n sampleRate: clampSamplingRate(\n options.sampleRate ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE\",\n \"VITE_SESSION_REPLAY_SAMPLE_RATE\",\n ]),\n ),\n samplingSalt: options.samplingSalt || DEFAULT_SAMPLING_SALT,\n allowUrls: options.allowUrls ?? [],\n blockUrls: options.blockUrls ?? [],\n flushIntervalMs: Math.max(\n 250,\n options.flushIntervalMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n \"VITE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n ]) ??\n DEFAULT_FLUSH_INTERVAL_MS,\n ),\n maxDurationMs: Math.max(\n 1000,\n options.maxDurationMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_MAX_DURATION_MS\",\n \"VITE_SESSION_REPLAY_MAX_DURATION_MS\",\n ]) ??\n DEFAULT_MAX_DURATION_MS,\n ),\n maxEventsPerBatch: Math.max(\n 1,\n options.maxEventsPerBatch ?? DEFAULT_MAX_EVENTS_PER_BATCH,\n ),\n maxBatchBytes: Math.max(\n 1024,\n options.maxBatchBytes ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n \"VITE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n ]) ??\n DEFAULT_MAX_BATCH_BYTES,\n ),\n checkoutEveryNth: options.checkoutEveryNth,\n checkoutEveryNms: options.checkoutEveryNms,\n inlineStylesheet: options.inlineStylesheet ?? true,\n blockSelector: options.blockSelector || DEFAULT_BLOCK_SELECTOR,\n ignoreSelector: options.ignoreSelector || DEFAULT_IGNORE_SELECTOR,\n maskTextClass: options.maskTextClass || DEFAULT_MASK_TEXT_CLASS,\n maskTextSelector: options.maskTextSelector || DEFAULT_MASK_TEXT_SELECTOR,\n maskAllInputs: options.maskAllInputs ?? true,\n recordCanvas: options.recordCanvas ?? false,\n recordCrossOriginIframes: options.recordCrossOriginIframes ?? false,\n collectFonts: options.collectFonts ?? false,\n inlineImages: options.inlineImages ?? false,\n eventSampling: options.eventSampling ?? DEFAULT_EVENT_SAMPLING,\n console: normalizeCaptureToggle(\n options.console,\n DEFAULT_MAX_CONSOLE_EVENTS,\n ),\n network: normalizeCaptureToggle(\n options.network,\n DEFAULT_MAX_NETWORK_EVENTS,\n ),\n extraProperties: options.extraProperties,\n };\n}\n\n/**\n * Console/network capture default to ON whenever session replay records;\n * `false` disables a category, an object form overrides its caps. Network\n * options may additionally carry `captureErrorBodies`/`maxErrorBodyLength`;\n * console ignores those fields.\n */\nfunction normalizeCaptureToggle(\n value: boolean | SessionReplayNetworkOptions | undefined,\n defaultMaxEvents: number,\n): NormalizedCaptureOptions | null {\n if (value === false) return null;\n const overrides = typeof value === \"object\" && value !== null ? value : {};\n const maxEvents =\n typeof overrides.maxEvents === \"number\" &&\n Number.isFinite(overrides.maxEvents)\n ? Math.max(1, Math.floor(overrides.maxEvents))\n : defaultMaxEvents;\n const maxErrorBodyLength =\n typeof overrides.maxErrorBodyLength === \"number\" &&\n Number.isFinite(overrides.maxErrorBodyLength)\n ? Math.max(0, Math.floor(overrides.maxErrorBodyLength))\n : DEFAULT_MAX_ERROR_BODY_LENGTH;\n return {\n maxEvents,\n captureErrorBodies: overrides.captureErrorBodies !== false,\n maxErrorBodyLength,\n };\n}\n\nfunction scrubStringValue(key: string, value: string): string {\n const lowerKey = key.toLowerCase();\n const isUrlKey = URL_LIKE_KEYS.has(key) || URL_LIKE_KEYS.has(lowerKey);\n if (\n isUrlKey ||\n value.startsWith(\"http://\") ||\n value.startsWith(\"https://\") ||\n value.startsWith(\"/\")\n ) {\n return scrubUrl(value) ?? value;\n }\n return value;\n}\n\nfunction scrubReplayValue(\n value: unknown,\n key = \"\",\n depth = 0,\n seen = new WeakSet<object>(),\n): unknown {\n if (typeof value === \"string\") return scrubStringValue(key, value);\n if (!value || typeof value !== \"object\") return value;\n if (depth > 12) return value;\n if (seen.has(value)) return value;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((item) => scrubReplayValue(item, key, depth + 1, seen));\n }\n const out: Record<string, unknown> = {};\n for (const [childKey, childValue] of Object.entries(value)) {\n out[childKey] = scrubReplayValue(childValue, childKey, depth + 1, seen);\n }\n return out;\n}\n\n/**\n * JSON.stringify replacer that scrubs URL-like string values inline. Folding\n * the scrub into the single serialization pass avoids a separate deep-clone of\n * every emitted event (FullSnapshots are large DOM trees) on the hot path.\n */\nfunction scrubReplayReplacer(key: string, value: unknown): unknown {\n return typeof value === \"string\" ? scrubStringValue(key, value) : value;\n}\n\n/**\n * Serialize + scrub one event in a single pass. The resulting string is stored\n * directly on the queue and reused verbatim at flush, so each event is\n * stringified exactly once (was: deep-clone + size-stringify + flush-stringify).\n */\nfunction serializeReplayEvent(event: ReplayEvent): string {\n try {\n return JSON.stringify(event, scrubReplayReplacer);\n } catch {\n return \"\";\n }\n}\n\n/** rrweb Meta event type. */\nconst RRWEB_META_EVENT = 4;\n/** rrweb IncrementalSnapshot event type. */\nconst RRWEB_INCREMENTAL_EVENT = 3;\n/** rrweb ViewportResize incremental source. */\nconst RRWEB_VIEWPORT_RESIZE_SOURCE = 4;\n\n/**\n * Bounds for captured viewport frames. Multi-monitor spans and corrupt\n * resize payloads produce absurd aspect ratios that collapse the replay\n * stage into an ultra-wide ribbon after fit-to-scale. Clamp at capture so\n * bad dimensions are never stored.\n */\nconst MIN_CAPTURED_VIEWPORT = 240;\nconst MAX_CAPTURED_ASPECT_RATIO = 2.45;\nconst MIN_CAPTURED_ASPECT_RATIO = 0.5;\n\n/**\n * Rewrite Meta / ViewportResize frames with absurd dimensions before they\n * enter the upload queue. Returns the original event when dimensions are\n * already sane or the event is not a viewport frame.\n */\nexport function sanitizeCapturedReplayViewportEvent(\n event: ReplayEvent,\n): ReplayEvent {\n const type = event.type;\n if (type === RRWEB_META_EVENT) {\n return sanitizeCapturedViewportData(event, event.data);\n }\n if (type === RRWEB_INCREMENTAL_EVENT) {\n const data = event.data;\n if (\n data &&\n typeof data === \"object\" &&\n !Array.isArray(data) &&\n (data as Record<string, unknown>).source === RRWEB_VIEWPORT_RESIZE_SOURCE\n ) {\n return sanitizeCapturedViewportData(event, data);\n }\n }\n return event;\n}\n\nfunction sanitizeCapturedViewportData(\n event: ReplayEvent,\n data: unknown,\n): ReplayEvent {\n if (!data || typeof data !== \"object\" || Array.isArray(data)) return event;\n const record = data as Record<string, unknown>;\n const width = record.width;\n const height = record.height;\n if (\n typeof width !== \"number\" ||\n typeof height !== \"number\" ||\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return event;\n }\n const clamped = clampCapturedViewport(width, height);\n if (\n clamped.width === Math.round(width) &&\n clamped.height === Math.round(height)\n ) {\n return event;\n }\n return {\n ...event,\n data: {\n ...record,\n width: clamped.width,\n height: clamped.height,\n },\n };\n}\n\nfunction clampCapturedViewport(\n width: number,\n height: number,\n): { width: number; height: number } {\n let nextWidth = Math.max(MIN_CAPTURED_VIEWPORT, Math.round(width));\n let nextHeight = Math.max(MIN_CAPTURED_VIEWPORT, Math.round(height));\n const aspect = nextWidth / nextHeight;\n if (aspect > MAX_CAPTURED_ASPECT_RATIO) {\n nextWidth = Math.round(nextHeight * MAX_CAPTURED_ASPECT_RATIO);\n } else if (aspect < MIN_CAPTURED_ASPECT_RATIO) {\n nextHeight = Math.round(nextWidth / MIN_CAPTURED_ASPECT_RATIO);\n }\n return { width: nextWidth, height: nextHeight };\n}\n\nfunction replayEventTimestampMs(event: ReplayEvent): number {\n const timestamp = event.timestamp;\n if (typeof timestamp === \"number\" && Number.isFinite(timestamp)) {\n return timestamp;\n }\n if (typeof timestamp === \"string\" && timestamp.trim()) {\n const parsed = Date.parse(timestamp);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Date.now();\n}\n\nfunction enqueueReplayEvent(\n state: SessionReplayState,\n event: ReplayEvent,\n): void {\n if (!state.options) return;\n const sanitized = sanitizeCapturedReplayViewportEvent(event);\n const serialized = serializeReplayEvent(sanitized);\n if (!serialized) return;\n const estimatedBytes = serialized.length;\n if (\n state.queue.length > 0 &&\n state.queuedBytes + estimatedBytes > state.options.maxBatchBytes\n ) {\n void flushSessionReplay(\"max-bytes\");\n }\n state.queue.push({\n json: serialized,\n timestampMs: replayEventTimestampMs(sanitized),\n type: typeof sanitized.type === \"number\" ? sanitized.type : null,\n });\n state.queuedBytes += estimatedBytes;\n flushQueuedReplayIfNeeded(state);\n}\n\nfunction replayExtraProperties(\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const source = options.extraProperties;\n if (!source) return undefined;\n try {\n const props = typeof source === \"function\" ? source() : source;\n if (!props || typeof props !== \"object\") return undefined;\n return scrubReplayValue(props) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nfunction replayString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction replayEmail(value: unknown): string | undefined {\n const raw = replayString(value);\n return raw && raw.includes(\"@\") ? raw : undefined;\n}\n\nfunction replayUserEmail(\n properties: Record<string, unknown> | undefined,\n): string | undefined {\n return (\n replayEmail(properties?.userEmail ?? properties?.user_email) ||\n replayEmail(properties?.email) ||\n replayEmail(properties?.userId ?? properties?.user_id)\n );\n}\n\nfunction replayPropertiesForUpload(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const properties = replayExtraProperties(options);\n if (replayUserEmail(properties)) {\n state.lastAuthenticatedProperties = properties ? { ...properties } : null;\n return properties;\n }\n if (options.requireSignedInUser && state.lastAuthenticatedProperties) {\n return state.lastAuthenticatedProperties;\n }\n return properties;\n}\n\ninterface ReplayUploadPayload {\n body: string;\n replayId: string;\n sessionId: string;\n sequence: number;\n}\n\nfunction buildReplayBody(\n state: SessionReplayState,\n reason: string,\n events: QueuedReplayEvent[],\n): ReplayUploadPayload | null {\n const options = state.options;\n if (!options || !state.replayId) return null;\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return null;\n const properties = replayPropertiesForUpload(state, options);\n const userEmail = replayUserEmail(properties);\n if (options.requireSignedInUser && !userEmail) return null;\n const userId =\n userEmail || replayString(properties?.userId ?? properties?.user_id);\n const eventTimestamps = events.map((event) => event.timestampMs);\n const nowMs = Date.now();\n const startedAtMs =\n state.startedAtMs ??\n (eventTimestamps.length ? Math.min(...eventTimestamps) : nowMs);\n const endedAtMs = eventTimestamps.length\n ? Math.max(...eventTimestamps)\n : nowMs;\n const envelope = {\n publicKey: options.publicKey,\n type: \"session_replay\",\n replayId: state.replayId,\n sessionId,\n ...(userId ? { userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n anonymousId: getOrCreateAnalyticsAnonymousId(),\n sequence: state.sequence,\n reason,\n status: isFinalFlushReason(reason) ? \"completed\" : \"active\",\n eventCount: events.length,\n startedAt: new Date(startedAtMs).toISOString(),\n endedAt: new Date(endedAtMs).toISOString(),\n durationMs: Math.max(0, endedAtMs - startedAtMs),\n privacyMode: \"mask-inputs-and-selected-text\",\n url:\n typeof window !== \"undefined\"\n ? scrubUrl(window.location.href)\n : undefined,\n timestamp: new Date().toISOString(),\n properties,\n };\n // Events are already serialized+scrubbed JSON strings; splice them into the\n // envelope without re-serializing the (potentially large) events array.\n const envelopeJson = JSON.stringify(envelope);\n return {\n body: `${envelopeJson.slice(0, -1)},\"events\":[${events\n .map((event) => event.json)\n .join(\",\")}]}`,\n replayId: state.replayId,\n sessionId,\n sequence: state.sequence,\n };\n}\n\ninterface ReplayUploadBody {\n body: BodyInit;\n headers: Record<string, string>;\n compressed: boolean;\n}\n\nfunction isCrossOriginReplayEndpoint(endpoint: string): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n new URL(endpoint, window.location.href).origin !== window.location.origin\n );\n } catch {\n return false;\n }\n}\n\nasync function gzipReplayBody(body: string): Promise<Blob | null> {\n if (\n typeof CompressionStream === \"undefined\" ||\n typeof Blob === \"undefined\" ||\n typeof Response === \"undefined\"\n ) {\n return null;\n }\n try {\n const stream = new Blob([body], { type: \"application/json\" })\n .stream()\n .pipeThrough(new CompressionStream(\"gzip\"));\n const compressed = await new Response(stream).arrayBuffer();\n return new Blob([compressed], { type: \"application/octet-stream\" });\n } catch {\n return null;\n }\n}\n\nasync function buildReplayUploadBody(body: string): Promise<ReplayUploadBody> {\n const compressed = await gzipReplayBody(body);\n if (compressed) {\n return {\n body: compressed,\n compressed: true,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Encoding\": \"gzip\",\n },\n };\n }\n return {\n body,\n compressed: false,\n headers: {\n \"Content-Type\": \"text/plain;charset=UTF-8\",\n },\n };\n}\n\nfunction replayUploadBodyBytes(body: BodyInit): number {\n if (typeof body === \"string\") {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(body).byteLength;\n }\n return body.length;\n }\n if (typeof Blob !== \"undefined\" && body instanceof Blob) {\n return body.size;\n }\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n if (ArrayBuffer.isView(body)) {\n return body.byteLength;\n }\n return MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES + 1;\n}\n\nfunction canUseReplayKeepalive(body: BodyInit): boolean {\n return replayUploadBodyBytes(body) <= MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES;\n}\n\nasync function sendReplayUpload(\n options: NormalizedSessionReplayOptions,\n body: string,\n callbacks: { beforeKeepaliveUpload?: () => void } = {},\n): Promise<void> {\n if (isCrossOriginReplayEndpoint(options.endpoint)) {\n const canUseKeepalive = canUseReplayKeepalive(body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body,\n keepalive: canUseKeepalive,\n headers: { \"Content-Type\": \"text/plain;charset=UTF-8\" },\n });\n if (!response.ok) {\n throw new Error(\n `Session replay upload failed with HTTP ${response.status}`,\n );\n }\n return;\n }\n\n const upload = await buildReplayUploadBody(body);\n const canUseKeepalive = canUseReplayKeepalive(upload.body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body: upload.body,\n keepalive: canUseKeepalive,\n headers: {\n ...upload.headers,\n \"X-Agent-Native-Analytics-Key\": options.publicKey,\n },\n });\n if (!response.ok) {\n throw new Error(\n `Session replay upload failed with HTTP ${response.status}`,\n );\n }\n}\n\nfunction isFinalFlushReason(reason: string): boolean {\n return [\n \"auth-cleared\",\n \"manual\",\n \"pagehide\",\n \"beforeunload\",\n \"url-blocked\",\n \"max-duration\",\n ].includes(reason);\n}\n\nfunction shouldReserveSequenceBeforeKeepalive(reason: string): boolean {\n return (\n reason === \"pagehide\" ||\n reason === \"beforeunload\" ||\n reason === \"visibility-hidden\"\n );\n}\n\nfunction hasFullSnapshot(events: QueuedReplayEvent[]): boolean {\n return events.some((event) => event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE);\n}\n\nfunction hasPendingReplayBatch(state: SessionReplayState): boolean {\n return state.retryBatches.length > 0 || state.queue.length > 0;\n}\n\nfunction shouldFlushQueuedReplay(state: SessionReplayState): boolean {\n if (!state.options || state.queue.length === 0) return false;\n return (\n hasFullSnapshot(state.queue) ||\n state.queue.length >= state.options.maxEventsPerBatch ||\n state.queuedBytes >= state.options.maxBatchBytes\n );\n}\n\nfunction flushQueuedReplayIfNeeded(state: SessionReplayState): void {\n const options = state.options;\n if (!options) return;\n if (state.retryBatches.length > 0) return;\n if (!shouldFlushQueuedReplay(state)) return;\n const reason = hasFullSnapshot(state.queue)\n ? \"full-snapshot\"\n : state.queue.length >= options.maxEventsPerBatch\n ? \"max-events\"\n : \"max-bytes\";\n void flushSessionReplay(reason);\n}\n\nfunction queuedReplayBytes(events: QueuedReplayEvent[]): number {\n return events.reduce((total, event) => total + event.json.length, 0);\n}\n\nfunction restoreReplayEvents(\n state: SessionReplayState,\n events: QueuedReplayEvent[],\n): void {\n state.retryBatches.unshift(events);\n}\n\nfunction advanceReplaySequence(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n state.sequence = Math.max(state.sequence, payload.sequence + 1);\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n );\n}\n\nfunction rollbackReplaySequenceReservation(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n if (state.sequence !== payload.sequence + 1) return;\n state.sequence = payload.sequence;\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n );\n}\n\nexport async function flushSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n if (!state.options || !hasPendingReplayBatch(state) || state.flushing) return;\n const events = state.retryBatches.shift() ?? state.queue.splice(0);\n state.queuedBytes = queuedReplayBytes(state.queue);\n const payload = buildReplayBody(state, reason, events);\n if (!payload || !state.options) {\n restoreReplayEvents(state, events);\n return;\n }\n state.flushing = true;\n let uploaded = false;\n let reservedSequence = false;\n try {\n await sendReplayUpload(state.options, payload.body, {\n beforeKeepaliveUpload: shouldReserveSequenceBeforeKeepalive(reason)\n ? () => {\n advanceReplaySequence(state, payload);\n reservedSequence = true;\n }\n : undefined,\n });\n if (!reservedSequence) advanceReplaySequence(state, payload);\n uploaded = true;\n } catch (error) {\n if (reservedSequence) rollbackReplaySequenceReservation(state, payload);\n restoreReplayEvents(state, events);\n // Guard the recorder's own warning so console capture never records it\n // (a captured warning would enqueue an event and retrigger a flush).\n const previousInternal = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n console.warn(\"[session-replay] upload failed\", error);\n } finally {\n replayCaptureInternal = previousInternal;\n }\n } finally {\n state.flushing = false;\n }\n if (uploaded && hasPendingReplayBatch(state)) {\n flushQueuedReplayIfNeeded(state);\n }\n}\n\nfunction installUrlMonitor(state: SessionReplayState): void {\n if (!state.options || state.restoreUrlMonitor) return;\n const options = state.options;\n const check = () => {\n if (!isUrlRecordable(window.location.href, options)) {\n stopSessionReplay(\"url-blocked\");\n }\n };\n const originalPushState = window.history.pushState;\n const originalReplaceState = window.history.replaceState;\n window.history.pushState = function pushState(...args) {\n const result = originalPushState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.history.replaceState = function replaceState(...args) {\n const result = originalReplaceState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.addEventListener(\"popstate\", check);\n state.restoreUrlMonitor = () => {\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n state.restoreUrlMonitor = null;\n };\n}\n\nfunction installLifecycleListeners(state: SessionReplayState): void {\n if (state.removeLifecycleListeners) return;\n const flushOnHidden = () => {\n if (document.visibilityState === \"hidden\") {\n void flushSessionReplay(\"visibility-hidden\");\n }\n };\n const flushOnUnload = () => {\n void flushSessionReplay(\"pagehide\");\n };\n document.addEventListener(\"visibilitychange\", flushOnHidden);\n window.addEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = () => {\n document.removeEventListener(\"visibilitychange\", flushOnHidden);\n window.removeEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = null;\n };\n}\n\nfunction truncateCaptureText(value: string, maxLength: number): string {\n return value.length > maxLength ? value.slice(0, maxLength) : value;\n}\n\n/** Circular-safe, depth/length-limited plain value for JSON.stringify. */\nfunction toCaptureSerializable(\n value: unknown,\n depth: number,\n seen: WeakSet<object>,\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return `${value}n`;\n if (typeof value === \"function\") return \"[function]\";\n if (typeof value === \"symbol\") return String(value);\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (typeof value !== \"object\") return String(value);\n if (seen.has(value)) return \"[circular]\";\n if (depth >= MAX_CONSOLE_SERIALIZE_DEPTH) {\n return Array.isArray(value) ? \"[array]\" : \"[object]\";\n }\n seen.add(value);\n if (Array.isArray(value)) {\n const items = value\n .slice(0, MAX_CONSOLE_SERIALIZE_ENTRIES)\n .map((item) => toCaptureSerializable(item, depth + 1, seen));\n if (value.length > MAX_CONSOLE_SERIALIZE_ENTRIES) items.push(\"[truncated]\");\n return items;\n }\n const out: Record<string, unknown> = {};\n let count = 0;\n for (const [key, child] of Object.entries(value)) {\n if (count >= MAX_CONSOLE_SERIALIZE_ENTRIES) {\n out[\"[truncated]\"] = true;\n break;\n }\n out[key] = toCaptureSerializable(child, depth + 1, seen);\n count += 1;\n }\n return out;\n}\n\nfunction serializeConsoleArg(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (\n value === null ||\n value === undefined ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return (\n JSON.stringify(toCaptureSerializable(value, 0, new WeakSet())) ??\n String(value)\n );\n } catch {\n try {\n return Object.prototype.toString.call(value);\n } catch {\n return \"[unserializable]\";\n }\n }\n}\n\n/**\n * Emit an rrweb custom event while recording. Sets the re-entrancy guard so\n * synchronous work triggered by the emit (enqueue -> flush -> fetch of the\n * ingest endpoint) is never re-captured by the interceptors below.\n */\nfunction emitReplayCustomEvent(\n state: SessionReplayState,\n tag: string,\n payload: Record<string, unknown>,\n): void {\n const addCustomEvent = state.addCustomEvent;\n if (!state.active || !addCustomEvent) return;\n const previous = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n addCustomEvent(tag, payload);\n } catch {\n // recorder already stopped -- drop the event\n } finally {\n replayCaptureInternal = previous;\n }\n}\n\nfunction captureCurrentUrl(): string | undefined {\n try {\n return scrubUrl(window.location.href);\n } catch {\n return undefined;\n }\n}\n\ntype CaptureConsoleLevel = \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\ntype CaptureConsoleSource = \"console\" | \"window-error\" | \"unhandledrejection\";\n\nconst CAPTURE_CONSOLE_LEVELS: CaptureConsoleLevel[] = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n];\n\nfunction installConsoleCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n let emitted = 0;\n let stopped = false;\n let pending: {\n key: string;\n payload: Record<string, unknown>;\n repeat: number;\n } | null = null;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level: \"warn\",\n source: \"console\",\n message: \"session replay console capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, payload);\n };\n\n /**\n * The first occurrence of a message is emitted immediately; consecutive\n * identical messages accumulate here and are flushed as one event whose\n * `repeat` is the number of collapsed duplicates.\n */\n const flushPending = () => {\n const entry = pending;\n pending = null;\n if (!entry || entry.repeat <= 0) return;\n emitPayload({ ...entry.payload, repeat: entry.repeat });\n };\n\n const capture = (\n level: CaptureConsoleLevel,\n source: CaptureConsoleSource,\n args: unknown[],\n stackOverride?: string,\n ) => {\n if (stopped || replayCaptureInternal) return;\n try {\n const message = truncateCaptureText(\n redactCaptureText(args.length ? serializeConsoleArg(args[0]) : \"\"),\n MAX_CONSOLE_MESSAGE_LENGTH,\n );\n const extraArgs = args\n .slice(1, 1 + MAX_CONSOLE_ARGS)\n .map((arg) =>\n truncateCaptureText(\n redactCaptureText(serializeConsoleArg(arg)),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const rawStack = stackOverride ?? errorArg?.stack;\n const stack =\n typeof rawStack === \"string\" && rawStack\n ? truncateCaptureText(\n redactCaptureText(rawStack),\n MAX_CONSOLE_STACK_LENGTH,\n )\n : undefined;\n const url = captureCurrentUrl();\n const payload: Record<string, unknown> = {\n level,\n source,\n message,\n ...(extraArgs.length ? { args: extraArgs } : {}),\n ...(stack ? { stack } : {}),\n ...(url ? { url } : {}),\n };\n const key = `${level}\u0000${source}\u0000${message}`;\n if (pending && pending.key === key) {\n pending.repeat += 1;\n return;\n }\n flushPending();\n emitPayload(payload);\n pending = { key, payload, repeat: 0 };\n } catch {\n // capture must never break the host page\n }\n };\n\n const originals: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n const wrappers: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = console[level] as (...args: unknown[]) => void;\n if (typeof original !== \"function\") continue;\n originals[level] = original;\n const wrapper = (...args: unknown[]) => {\n original.apply(console, args);\n try {\n capture(level, \"console\", args);\n } catch {\n // never throw from the wrapper\n }\n };\n wrappers[level] = wrapper;\n console[level] = wrapper;\n }\n\n const onWindowError = (event: ErrorEvent) => {\n try {\n const error = event?.error;\n capture(\n \"error\",\n \"window-error\",\n [error instanceof Error ? error : (event?.message ?? \"Error\")],\n error instanceof Error ? error.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n const onUnhandledRejection = (event: PromiseRejectionEvent) => {\n try {\n const reason = event?.reason;\n capture(\n \"error\",\n \"unhandledrejection\",\n [reason instanceof Error ? reason : reason],\n reason instanceof Error ? reason.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n window.addEventListener(\"error\", onWindowError as EventListener);\n window.addEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n\n return () => {\n try {\n flushPending();\n } catch {\n // best-effort duplicate flush\n }\n stopped = true;\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = originals[level];\n // Restore only what we installed: if another library patched on top of\n // our wrapper, leave the current function in place.\n if (original && console[level] === wrappers[level]) {\n console[level] = original;\n }\n }\n window.removeEventListener(\"error\", onWindowError as EventListener);\n window.removeEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n };\n}\n\nfunction captureRequestUrl(input: unknown): string {\n if (typeof input === \"string\") return input;\n if (typeof URL !== \"undefined\" && input instanceof URL) {\n return input.toString();\n }\n if (input && typeof input === \"object\" && \"url\" in input) {\n const url = (input as { url?: unknown }).url;\n if (typeof url === \"string\") return url;\n }\n return \"\";\n}\n\nfunction captureRequestMethod(\n input: unknown,\n init?: { method?: unknown },\n): string {\n const initMethod = init?.method;\n if (typeof initMethod === \"string\" && initMethod) {\n return initMethod.toUpperCase();\n }\n if (input && typeof input === \"object\" && \"method\" in input) {\n const method = (input as { method?: unknown }).method;\n if (typeof method === \"string\" && method) return method.toUpperCase();\n }\n return \"GET\";\n}\n\n/**\n * Requests the recorder must never record: its own ingest endpoint and the\n * core analytics tracking endpoint (either would create a flush -> event ->\n * flush feedback loop), plus non-network schemes.\n */\nfunction isCaptureExcludedUrl(rawUrl: string, ingestEndpoint: string): boolean {\n const trimmed = rawUrl.trim();\n if (!trimmed) return true;\n const lower = trimmed.toLowerCase();\n if (\n lower.startsWith(\"data:\") ||\n lower.startsWith(\"blob:\") ||\n lower.startsWith(\"about:\")\n ) {\n return true;\n }\n try {\n const resolved = new URL(trimmed, window.location.href);\n const ingest = new URL(ingestEndpoint, window.location.href);\n if (\n resolved.origin === ingest.origin &&\n resolved.pathname === ingest.pathname\n ) {\n return true;\n }\n if (resolved.pathname.endsWith(\"/api/analytics/replay\")) return true;\n if (resolved.pathname.endsWith(\"/api/analytics/track\")) return true;\n } catch {\n // Unresolvable URL -- skip capture rather than risk recording junk.\n return true;\n }\n return false;\n}\n\n/**\n * Best-effort, synchronous read of a 5xx XHR response body, sliced to `cap`\n * before redaction runs (caller redacts). Only reads `responseText` when\n * `responseType` is \"\" or \"text\" -- other response types are read via\n * `JSON.stringify` (guarded) for `\"json\"`, and skipped entirely otherwise\n * since arbitrary binary/blob/arraybuffer bodies are not useful error text.\n */\nfunction readXhrErrorBody(\n xhr: XMLHttpRequest,\n cap: number,\n): string | undefined {\n try {\n const responseType = xhr.responseType;\n if (responseType === \"\" || responseType === \"text\") {\n const text = xhr.responseText;\n return typeof text === \"string\" ? text.slice(0, cap) : undefined;\n }\n if (responseType === \"json\") {\n try {\n return JSON.stringify(xhr.response)?.slice(0, cap);\n } catch {\n return undefined;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction installNetworkCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n const options = state.options;\n if (!options) return () => {};\n const ingestEndpoint = options.endpoint;\n let emitted = 0;\n let stopped = false;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, {\n message: \"session replay network capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, payload);\n };\n\n const errorBodyCap =\n captureOptions.captureErrorBodies !== false\n ? (captureOptions.maxErrorBodyLength ?? DEFAULT_MAX_ERROR_BODY_LENGTH)\n : null;\n\n const recordRequest = (\n api: \"fetch\" | \"xhr\",\n method: string,\n rawUrl: string,\n status: number,\n ok: boolean,\n durationMs: number,\n error?: string,\n responseBody?: string,\n ) => {\n if (stopped) return;\n try {\n if (isCaptureExcludedUrl(rawUrl, ingestEndpoint)) return;\n const absolute = new URL(rawUrl, window.location.href).toString();\n const url = scrubUrl(absolute) ?? absolute;\n emitPayload({\n api,\n method: method.toUpperCase(),\n url,\n status,\n ok,\n durationMs: Math.max(0, Math.round(durationMs)),\n ...(error\n ? {\n error: truncateCaptureText(\n redactCaptureText(error),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n }\n : {}),\n ...(responseBody\n ? {\n responseBody: truncateCaptureText(\n redactCaptureText(responseBody),\n errorBodyCap ?? DEFAULT_MAX_ERROR_BODY_LENGTH,\n ),\n }\n : {}),\n });\n } catch {\n // capture must never break the host page\n }\n };\n\n /**\n * Best-effort bounded read of a 5xx response body. Reads a decoded stream\n * up to `cap` chars and cancels the reader, or falls back to `.text()`\n * sliced to `cap` when no readable stream is exposed. Never throws --\n * opaque/no-body responses (or any read failure) resolve to undefined.\n */\n const readBoundedErrorBody = async (\n response: Response,\n cap: number,\n ): Promise<string | undefined> => {\n try {\n const reader = response.body?.getReader?.();\n if (reader) {\n const decoder = new TextDecoder();\n let text = \"\";\n while (text.length < cap) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) text += decoder.decode(value, { stream: true });\n }\n // Fire-and-forget: cancelling an already-exhausted (or still-open but\n // no-longer-wanted) reader can hang indefinitely on some stream\n // implementations. We never need the result, so don't await it --\n // that would defeat the whole point of bounding this read.\n try {\n reader.cancel().catch(() => {});\n } catch {\n // best-effort; some readers throw synchronously instead\n }\n return text.slice(0, cap);\n }\n const text = await response.text();\n return text.slice(0, cap);\n } catch {\n return undefined;\n }\n };\n\n const restores: Array<() => void> = [];\n\n if (typeof window.fetch === \"function\") {\n const originalFetch = window.fetch;\n const wrappedFetch = function (\n this: unknown,\n input?: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const self = this ?? window;\n if (stopped || replayCaptureInternal) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n let method = \"GET\";\n let url = \"\";\n let skip = true;\n try {\n method = captureRequestMethod(input, init);\n url = captureRequestUrl(input);\n skip = isCaptureExcludedUrl(url, ingestEndpoint);\n } catch {\n skip = true;\n }\n if (skip) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n const startedAt = performance.now();\n // Call the original exactly as the page did; never read the caller's\n // response before returning it, never replace the response, propagate\n // rejections untouched. A 5xx body snippet (if any) is read from a\n // clone and emitted from a detached promise chain afterward.\n const result = originalFetch.call(self, input as RequestInfo | URL, init);\n if (!result || typeof (result as Promise<Response>).then !== \"function\") {\n return result;\n }\n return result.then(\n (response) => {\n try {\n const durationMs = performance.now() - startedAt;\n if (errorBodyCap !== null && response.status >= 500) {\n // Clone immediately -- before any other code (including this\n // handler returning) can consume the original body -- so the\n // clone's stream is guaranteed unconsumed.\n let clone: Response | null = null;\n try {\n clone = response.clone();\n } catch {\n clone = null;\n }\n if (clone) {\n const bodyPromise = readBoundedErrorBody(clone, errorBodyCap);\n const timeoutPromise = new Promise<undefined>((resolve) => {\n setTimeout(\n () => resolve(undefined),\n ERROR_BODY_READ_TIMEOUT_MS,\n );\n });\n // Detached chain: never rejects, never awaited by the caller.\n Promise.race([bodyPromise, timeoutPromise])\n .then((responseBody) => {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n undefined,\n responseBody,\n );\n })\n .catch(() => {\n // never affect the caller\n });\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } catch {\n // never affect the caller\n }\n return response;\n },\n (error) => {\n try {\n recordRequest(\n \"fetch\",\n method,\n url,\n 0,\n false,\n performance.now() - startedAt,\n error instanceof Error ? error.message : String(error),\n );\n } catch {\n // never affect the caller\n }\n throw error;\n },\n );\n };\n window.fetch = wrappedFetch as typeof window.fetch;\n restores.push(() => {\n // Restore only what we installed (another lib may have patched on top).\n if (window.fetch === (wrappedFetch as typeof window.fetch)) {\n window.fetch = originalFetch;\n }\n });\n }\n\n if (typeof XMLHttpRequest !== \"undefined\" && XMLHttpRequest.prototype) {\n const originalOpen = XMLHttpRequest.prototype.open;\n const originalSend = XMLHttpRequest.prototype.send;\n const xhrInfo = new WeakMap<\n XMLHttpRequest,\n { method: string; url: string }\n >();\n\n const wrappedOpen = function (\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n async?: boolean,\n username?: string | null,\n password?: string | null,\n ) {\n try {\n xhrInfo.set(this, { method: String(method), url: String(url) });\n } catch {\n // never throw from the wrapper\n }\n return originalOpen.call(\n this,\n method,\n url as string,\n async ?? true,\n username,\n password,\n );\n };\n\n const wrappedSend = function (\n this: XMLHttpRequest,\n body?: Document | XMLHttpRequestBodyInit | null,\n ) {\n try {\n const info = xhrInfo.get(this);\n if (info && !stopped && !replayCaptureInternal) {\n const startedAt = performance.now();\n let errorMessage: string | undefined;\n const markError = (message: string) => () => {\n errorMessage = message;\n };\n this.addEventListener(\"error\", markError(\"XMLHttpRequest failed\"), {\n once: true,\n });\n this.addEventListener(\"abort\", markError(\"XMLHttpRequest aborted\"), {\n once: true,\n });\n this.addEventListener(\n \"timeout\",\n markError(\"XMLHttpRequest timed out\"),\n { once: true },\n );\n this.addEventListener(\n \"loadend\",\n () => {\n const status = typeof this.status === \"number\" ? this.status : 0;\n const effectiveStatus = errorMessage ? 0 : status;\n let responseBody: string | undefined;\n if (errorBodyCap !== null && !errorMessage && status >= 500) {\n responseBody = readXhrErrorBody(this, errorBodyCap);\n }\n recordRequest(\n \"xhr\",\n info.method,\n info.url,\n effectiveStatus,\n !errorMessage && status >= 200 && status < 300,\n performance.now() - startedAt,\n errorMessage,\n responseBody,\n );\n xhrInfo.delete(this);\n },\n { once: true },\n );\n }\n } catch {\n // never throw from the wrapper\n }\n return originalSend.call(this, body ?? null);\n };\n\n XMLHttpRequest.prototype.open =\n wrappedOpen as typeof XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.send =\n wrappedSend as typeof XMLHttpRequest.prototype.send;\n restores.push(() => {\n if (\n XMLHttpRequest.prototype.open ===\n (wrappedOpen as typeof XMLHttpRequest.prototype.open)\n ) {\n XMLHttpRequest.prototype.open = originalOpen;\n }\n if (\n XMLHttpRequest.prototype.send ===\n (wrappedSend as typeof XMLHttpRequest.prototype.send)\n ) {\n XMLHttpRequest.prototype.send = originalSend;\n }\n });\n }\n\n return () => {\n stopped = true;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nfunction installCaptureInterceptors(state: SessionReplayState): void {\n const options = state.options;\n if (!options || state.restoreCaptures || !state.addCustomEvent) return;\n if (!options.console && !options.network) return;\n const restores: Array<() => void> = [];\n try {\n if (options.console) {\n restores.push(installConsoleCapture(state, options.console));\n }\n if (options.network) {\n restores.push(installNetworkCapture(state, options.network));\n }\n } catch {\n // keep whatever installed cleanly; restores below still uninstall it\n }\n if (restores.length === 0) return;\n state.restoreCaptures = () => {\n state.restoreCaptures = null;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nexport async function startSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n if (options.enabled === false) return { started: false, reason: \"disabled\" };\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return { started: false, reason: \"not-browser\" };\n }\n const normalized = normalizeOptions(options);\n if (!normalized) return { started: false, reason: \"missing-public-key\" };\n\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return { started: false, reason: \"missing-session-id\" };\n const sampled = shouldSampleSessionReplay(\n sessionId,\n normalized.sampleRate,\n normalized.samplingSalt,\n );\n if (!sampled) {\n return { started: false, reason: \"sampled-out\", sessionId, sampled };\n }\n const initialProperties = replayExtraProperties(normalized);\n if (normalized.requireSignedInUser) {\n if (!replayUserEmail(initialProperties)) {\n return {\n started: false,\n reason: \"missing-user-id\",\n sessionId,\n sampled,\n };\n }\n }\n if (!isUrlRecordable(window.location.href, normalized)) {\n return { started: false, reason: \"url-blocked\", sessionId, sampled };\n }\n\n const state = getState();\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n if (state.startPromise) return state.startPromise;\n\n let startPromise: Promise<SessionReplayStartResult>;\n startPromise = startSessionReplayRecorder(\n state,\n normalized,\n sessionId,\n sampled,\n initialProperties,\n ).finally(() => {\n if (state.startPromise === startPromise) {\n state.startPromise = null;\n }\n });\n state.startPromise = startPromise;\n return startPromise;\n}\n\nasync function startSessionReplayRecorder(\n state: SessionReplayState,\n normalized: NormalizedSessionReplayOptions,\n sessionId: string,\n sampled: boolean,\n initialProperties: Record<string, unknown> | undefined,\n): Promise<SessionReplayStartResult> {\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n\n let rrweb: RrwebRecordModule;\n try {\n rrweb = (await import(\"@rrweb/record\")) as RrwebRecordModule;\n } catch {\n return { started: false, reason: \"import-failed\", sessionId, sampled };\n }\n\n const replaySession = getOrCreateReplaySession(sessionId);\n state.options = normalized;\n state.replayId = replaySession.replayId;\n state.startedAtMs = replaySession.startedAtMs;\n state.sequence = replaySession.sequence;\n state.queue = [];\n state.queuedBytes = 0;\n state.retryBatches = [];\n state.stopRecorder = null;\n state.lastAuthenticatedProperties = replayUserEmail(initialProperties)\n ? { ...initialProperties }\n : null;\n state.active = true;\n\n try {\n const stopRecorder = rrweb.record({\n emit: (event) => enqueueReplayEvent(state, event),\n sampling: normalized.eventSampling,\n checkoutEveryNth: normalized.checkoutEveryNth,\n checkoutEveryNms: normalized.checkoutEveryNms,\n inlineStylesheet: normalized.inlineStylesheet,\n blockSelector: normalized.blockSelector,\n ignoreSelector: normalized.ignoreSelector,\n maskTextClass: normalized.maskTextClass,\n maskTextSelector: normalized.maskTextSelector,\n maskAllInputs: normalized.maskAllInputs,\n recordCanvas: normalized.recordCanvas,\n recordCrossOriginIframes: normalized.recordCrossOriginIframes,\n collectFonts: normalized.collectFonts,\n inlineImages: normalized.inlineImages,\n maskInputOptions: {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n },\n });\n if (typeof stopRecorder !== \"function\") {\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n state.stopRecorder = stopRecorder;\n state.flushTimer = window.setInterval(\n () => void flushSessionReplay(\"interval\"),\n normalized.flushIntervalMs,\n );\n state.maxDurationTimer = window.setTimeout(\n () => stopSessionReplay(\"max-duration\"),\n normalized.maxDurationMs,\n );\n installUrlMonitor(state);\n installLifecycleListeners(state);\n state.addCustomEvent =\n typeof rrweb.record.addCustomEvent === \"function\"\n ? rrweb.record.addCustomEvent\n : null;\n installCaptureInterceptors(state);\n return {\n started: true,\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n } catch {\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.addCustomEvent = null;\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n}\n\nexport async function stopSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n if (!state.active) return;\n // Restore console/fetch/XHR before tearing down the recorder: the restore\n // flushes any pending collapsed console duplicate, which must still be able\n // to emit through rrweb while it is recording.\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.active = false;\n state.addCustomEvent = null;\n try {\n state.stopRecorder?.();\n } catch {\n // best-effort recorder shutdown\n }\n state.stopRecorder = null;\n if (state.flushTimer) {\n window.clearInterval(state.flushTimer);\n state.flushTimer = null;\n }\n if (state.maxDurationTimer) {\n window.clearTimeout(state.maxDurationTimer);\n state.maxDurationTimer = null;\n }\n state.restoreUrlMonitor?.();\n state.removeLifecycleListeners?.();\n await flushSessionReplay(reason);\n}\n\nexport function maybeStartSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n return startSessionReplay(options);\n}\n\nexport function isSessionReplayActive(): boolean {\n return getState().active;\n}\n\n/**\n * The active session replay id when a recording is running, or the last one\n * persisted for this analytics session in `localStorage`. First-party error\n * capture uses this to tie each captured exception to the replay it happened\n * in, so triage can jump straight to `/sessions/<recordingId>`.\n */\nexport function getSessionReplayId(): string | null {\n const state = getState();\n if (state.active && state.replayId) return state.replayId;\n const stored = readStoredReplaySession();\n return stored?.replayId ?? null;\n}\n\n/**\n * Surface a manually captured exception on the active session replay timeline\n * as an `agent-native.console` custom event, reusing the diagnostics contract\n * (`level`, `source: \"console\"`, `message`, `stack`, `url`). No-op when no\n * recording is active. Auto-captured `window.onerror` / `unhandledrejection`\n * are intentionally NOT routed here — the recorder already logs those as\n * `window-error` / `unhandledrejection`, so re-emitting would double-count.\n */\nexport function emitSessionReplayException(input: {\n type: string;\n message: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n stack?: string;\n url?: string;\n}): void {\n const state = getState();\n if (!state.active || !state.addCustomEvent) return;\n const level =\n input.level === \"warning\"\n ? \"warn\"\n : input.level === \"info\" || input.level === \"debug\"\n ? input.level\n : \"error\";\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level,\n source: \"console\",\n message: `${input.type}: ${input.message}`.slice(\n 0,\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n ...(input.stack\n ? { stack: input.stack.slice(0, MAX_CONSOLE_STACK_LENGTH) }\n : {}),\n ...(input.url ? { url: input.url } : {}),\n });\n}\n"]}
1
+ {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/client/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getOrCreateAnalyticsAnonymousId,\n getOrCreateAnalyticsSessionId,\n} from \"./analytics-session.js\";\nimport { scrubUrl } from \"./url-scrub.js\";\n\ntype ReplayEvent = Record<string, unknown>;\ntype QueuedReplayEvent = {\n json: string;\n timestampMs: number;\n type: number | null;\n};\ntype ReplayStopFn = () => void;\nexport type SessionReplayUrlMatcher =\n | string\n | RegExp\n | ((url: string) => boolean);\n\ninterface RrwebRecordOptions {\n emit: (event: ReplayEvent) => void;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockClass?: string | RegExp;\n blockSelector?: string;\n ignoreClass?: string | RegExp;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n maskInputOptions?: Record<string, boolean>;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n sampling?: Record<string, unknown>;\n}\n\ntype RrwebRecordFn = ((\n options: RrwebRecordOptions,\n) => ReplayStopFn | undefined) & {\n addCustomEvent?: (tag: string, payload: unknown) => void;\n};\n\ninterface RrwebRecordModule {\n record: RrwebRecordFn;\n}\n\ninterface SessionReplayState {\n active: boolean;\n startPromise: Promise<SessionReplayStartResult> | null;\n replayId: string | null;\n startedAtMs: number | null;\n sequence: number;\n /** Pre-serialized + scrubbed event JSON strings, ready to splice at flush. */\n queue: QueuedReplayEvent[];\n queuedBytes: number;\n retryBatches: QueuedReplayEvent[][];\n flushTimer: number | null;\n maxDurationTimer: number | null;\n flushing: boolean;\n stopRecorder: ReplayStopFn | null;\n restoreUrlMonitor: (() => void) | null;\n removeLifecycleListeners: (() => void) | null;\n /** rrweb's `record.addCustomEvent`, captured at start (null when absent). */\n addCustomEvent: ((tag: string, payload: unknown) => void) | null;\n /** Uninstalls console/network interceptors and flushes pending duplicates. */\n restoreCaptures: (() => void) | null;\n options: NormalizedSessionReplayOptions | null;\n lastAuthenticatedProperties: Record<string, unknown> | null;\n}\n\ninterface StoredReplaySession {\n sessionId?: string;\n replayId?: string;\n startedAtMs?: number;\n sequence?: number;\n}\n\n/** rrweb `sampling` shape (mousemove/scroll/media throttles, input strategy). */\nexport type ReplayEventSampling = Record<string, unknown>;\n\n/**\n * Console capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.console` custom events emitted per recording session\n * (default 1000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n */\nexport interface SessionReplayConsoleOptions {\n maxEvents?: number;\n}\n\n/**\n * Network capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.network` custom events emitted per recording session\n * (default 2000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n *\n * `captureErrorBodies` (default true) additionally captures a bounded,\n * redacted response-body snippet for 5xx responses only -- request bodies\n * and headers are never captured, and non-5xx/network-failure responses\n * never carry a body. `maxErrorBodyLength` (default 2048) caps that snippet.\n */\nexport interface SessionReplayNetworkOptions {\n maxEvents?: number;\n captureErrorBodies?: boolean;\n maxErrorBodyLength?: number;\n}\n\nexport interface SessionReplayOptions {\n enabled?: boolean;\n publicKey?: string;\n endpoint?: string;\n requireSignedInUser?: boolean;\n sampleRate?: number;\n samplingSalt?: string;\n allowUrls?: SessionReplayUrlMatcher[];\n blockUrls?: SessionReplayUrlMatcher[];\n flushIntervalMs?: number;\n maxDurationMs?: number;\n maxEventsPerBatch?: number;\n maxBatchBytes?: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockSelector?: string;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n /**\n * rrweb per-event throttling (distinct from `sampleRate`, which decides\n * whether a whole session records). Throttles high-frequency event types\n * (mousemove/scroll/input) to keep the recorded page responsive and the\n * payloads small. Passed straight through to `rrweb.record({ sampling })`.\n */\n eventSampling?: ReplayEventSampling;\n /**\n * Capture console.log/info/warn/error/debug plus window `error` and\n * `unhandledrejection` events as `agent-native.console` custom rrweb\n * events. Defaults to on whenever session replay is enabled. Pass `false`\n * to disable, or an options object to override caps.\n */\n console?: boolean | SessionReplayConsoleOptions;\n /**\n * Capture fetch/XHR requests as `agent-native.network` custom rrweb\n * events (method, URL, status, timing). Request bodies and headers are\n * never captured; response bodies are captured only as a bounded,\n * redacted snippet for 5xx responses (see `captureErrorBodies`).\n * Defaults to on whenever session replay is enabled. Pass `false` to\n * disable, or an options object to override caps.\n */\n network?: boolean | SessionReplayNetworkOptions;\n extraProperties?:\n | Record<string, unknown>\n | (() => Record<string, unknown> | undefined);\n}\n\nexport interface SessionReplayStartResult {\n started: boolean;\n reason?:\n | \"disabled\"\n | \"not-browser\"\n | \"missing-public-key\"\n | \"missing-session-id\"\n | \"missing-user-id\"\n | \"sampled-out\"\n | \"url-blocked\"\n | \"already-active\"\n | \"import-failed\"\n | \"record-failed\";\n replayId?: string;\n sessionId?: string;\n sampled?: boolean;\n}\n\ninterface NormalizedSessionReplayOptions {\n publicKey: string;\n endpoint: string;\n requireSignedInUser: boolean;\n sampleRate: number;\n samplingSalt: string;\n allowUrls: SessionReplayUrlMatcher[];\n blockUrls: SessionReplayUrlMatcher[];\n flushIntervalMs: number;\n maxDurationMs: number;\n maxEventsPerBatch: number;\n maxBatchBytes: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet: boolean;\n blockSelector: string;\n ignoreSelector: string;\n maskTextClass: string | RegExp;\n maskTextSelector: string;\n maskAllInputs: boolean;\n recordCanvas: boolean;\n recordCrossOriginIframes: boolean;\n collectFonts: boolean;\n inlineImages: boolean;\n eventSampling: ReplayEventSampling;\n /** Null disables console capture entirely. */\n console: NormalizedCaptureOptions | null;\n /** Null disables network capture entirely. */\n network: NormalizedCaptureOptions | null;\n extraProperties?: SessionReplayOptions[\"extraProperties\"];\n}\n\ninterface NormalizedCaptureOptions {\n maxEvents: number;\n /** Network-only: capture a bounded 5xx response-body snippet. Unused by console. */\n captureErrorBodies?: boolean;\n /** Network-only: cap (chars) for the captured error-body snippet. */\n maxErrorBodyLength?: number;\n}\n\nconst DEFAULT_REPLAY_PATH = \"/api/analytics/replay\";\nconst DEFAULT_SAMPLING_SALT = \"agent-native-session-replay\";\n\n/**\n * Default rrweb event throttling. Without this, rrweb captures every\n * mousemove/scroll which dominates event volume and main-thread cost on\n * interactive pages. These caps keep replays faithful while staying light.\n */\nconst DEFAULT_EVENT_SAMPLING: ReplayEventSampling = {\n mousemove: 50,\n mouseInteraction: true,\n scroll: 100,\n media: 800,\n input: \"last\",\n};\nconst SESSION_REPLAY_STATE_KEY = Symbol.for(\n \"agent-native.client.sessionReplay\",\n);\nconst SESSION_REPLAY_ID_STORAGE_KEY = \"agent-native.session_replay_id\";\nconst DEFAULT_BLOCK_SELECTOR = [\n \"[data-sensitive]\",\n \"[data-an-block]\",\n \"[data-an-private]\",\n \"[data-private]\",\n \".an-block\",\n \".an-replay-block\",\n \".an-private\",\n \".rr-block\",\n \"[autocomplete='cc-number']\",\n \"[autocomplete='cc-csc']\",\n \"[autocomplete='cc-exp']\",\n \"[name*='password' i]\",\n \"[name*='credit' i]\",\n \"[name*='card' i]\",\n \"[name*='ssn' i]\",\n].join(\", \");\nconst DEFAULT_IGNORE_SELECTOR = \".an-ignore, [data-an-ignore]\";\nconst DEFAULT_MASK_TEXT_CLASS = \"an-mask\";\nconst DEFAULT_MASK_TEXT_SELECTOR = \"[data-an-mask]\";\nconst DEFAULT_FLUSH_INTERVAL_MS = 5000;\nconst DEFAULT_MAX_DURATION_MS = 30 * 60 * 1000;\nconst DEFAULT_MAX_EVENTS_PER_BATCH = 50;\nconst DEFAULT_MAX_BATCH_BYTES = 256 * 1024;\nconst MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES = 60 * 1024;\nconst RRWEB_FULL_SNAPSHOT_EVENT_TYPE = 2;\n\n/** rrweb custom-event tag for captured console/window-error entries. */\nexport const SESSION_REPLAY_CONSOLE_EVENT_TAG = \"agent-native.console\";\n/** rrweb custom-event tag for captured fetch/XHR request summaries. */\nexport const SESSION_REPLAY_NETWORK_EVENT_TAG = \"agent-native.network\";\n\nconst DEFAULT_MAX_CONSOLE_EVENTS = 1000;\nconst DEFAULT_MAX_NETWORK_EVENTS = 2000;\nconst MAX_CONSOLE_MESSAGE_LENGTH = 500;\nconst MAX_CONSOLE_ARGS = 10;\nconst MAX_CONSOLE_STACK_LENGTH = 2000;\nconst MAX_CONSOLE_SERIALIZE_DEPTH = 4;\nconst MAX_CONSOLE_SERIALIZE_ENTRIES = 20;\n/** Default cap (chars) for a captured 5xx response-body snippet. */\nconst DEFAULT_MAX_ERROR_BODY_LENGTH = 2048;\n/** Hard timeout for the async response-body read; emit without body past this. */\nconst ERROR_BODY_READ_TIMEOUT_MS = 1500;\n\n/**\n * Re-entrancy guard: true while the recorder itself is emitting custom events\n * or flushing (synchronously) so the console/fetch/XHR wrappers never capture\n * the recorder's own work and feed it back into the replay stream.\n */\nlet replayCaptureInternal = false;\n\n// Credential-looking token redaction for captured console/network text,\n// adapted from the clips template's browser-diagnostics redaction helper.\nconst CAPTURE_SECRET_KEY_FRAGMENT =\n \"(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|session|credential)\";\nconst CAPTURE_AUTHORIZATION_SCHEME_RE =\n /\\b(authorization)\\b(\\s*[:=]\\s*)(?:bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_BEARER_RE = /\\b(bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_DOUBLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\"`,\n \"gi\",\n);\nconst CAPTURE_SINGLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)'(?:[^'\\\\\\\\]|\\\\\\\\.)*'`,\n \"gi\",\n);\nconst CAPTURE_UNQUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)([^\"',\\\\s;}\\\\]]+)`,\n \"gi\",\n);\n\nfunction redactCaptureText(value: string): string {\n return value\n .replace(CAPTURE_AUTHORIZATION_SCHEME_RE, \"$1$2<redacted>\")\n .replace(CAPTURE_BEARER_RE, \"$1 <redacted>\")\n .replace(CAPTURE_DOUBLE_QUOTED_SECRET_RE, '$1$2$1$3\"<redacted>\"')\n .replace(CAPTURE_SINGLE_QUOTED_SECRET_RE, \"$1$2$1$3'<redacted>'\")\n .replace(CAPTURE_UNQUOTED_SECRET_RE, \"$1$2$1$3<redacted>\");\n}\nconst URL_LIKE_KEYS = new Set([\n \"url\",\n \"uri\",\n \"href\",\n \"src\",\n \"currentUrl\",\n \"referrer\",\n \"from\",\n \"to\",\n]);\n\nfunction getState(): SessionReplayState {\n const g = globalThis as typeof globalThis & {\n [SESSION_REPLAY_STATE_KEY]?: SessionReplayState;\n };\n if (!g[SESSION_REPLAY_STATE_KEY]) {\n g[SESSION_REPLAY_STATE_KEY] = {\n active: false,\n startPromise: null,\n replayId: null,\n startedAtMs: null,\n sequence: 0,\n queue: [],\n queuedBytes: 0,\n retryBatches: [],\n flushTimer: null,\n maxDurationTimer: null,\n flushing: false,\n stopRecorder: null,\n restoreUrlMonitor: null,\n removeLifecycleListeners: null,\n addCustomEvent: null,\n restoreCaptures: null,\n options: null,\n lastAuthenticatedProperties: null,\n };\n }\n return g[SESSION_REPLAY_STATE_KEY]!;\n}\n\nfunction safeStorageGet(key: string): string | null {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeStorageSet(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n // private browsing / storage disabled -- replay still works for this page\n }\n}\n\nfunction generateReplayId(): string {\n try {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n } catch {\n // fall through\n }\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction readStoredReplaySession(): StoredReplaySession | null {\n const raw = safeStorageGet(SESSION_REPLAY_ID_STORAGE_KEY);\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as StoredReplaySession;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredReplaySession(value: StoredReplaySession): void {\n safeStorageSet(SESSION_REPLAY_ID_STORAGE_KEY, JSON.stringify(value));\n}\n\nfunction getOrCreateReplaySession(sessionId: string): {\n replayId: string;\n startedAtMs: number;\n sequence: number;\n} {\n const parsed = readStoredReplaySession();\n if (parsed?.sessionId === sessionId && parsed.replayId) {\n const startedAtMs =\n typeof parsed.startedAtMs === \"number\" &&\n Number.isFinite(parsed.startedAtMs) &&\n parsed.startedAtMs > 0\n ? parsed.startedAtMs\n : Date.now();\n const sequence =\n typeof parsed.sequence === \"number\" &&\n Number.isFinite(parsed.sequence) &&\n parsed.sequence >= 0\n ? Math.floor(parsed.sequence)\n : 0;\n return { replayId: parsed.replayId, startedAtMs, sequence };\n }\n const replayId = generateReplayId();\n const startedAtMs = Date.now();\n writeStoredReplaySession({ sessionId, replayId, startedAtMs, sequence: 0 });\n return { replayId, startedAtMs, sequence: 0 };\n}\n\nfunction persistReplaySequence(\n sessionId: string,\n replayId: string,\n startedAtMs: number | null,\n sequence: number,\n): void {\n writeStoredReplaySession({\n sessionId,\n replayId,\n startedAtMs: startedAtMs ?? Date.now(),\n sequence,\n });\n}\n\nfunction clampSamplingRate(value: number | undefined): number {\n if (typeof value !== \"number\" || Number.isNaN(value)) return 1;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readEnvString(key: string): string | undefined {\n return (import.meta.env as Record<string, string | undefined>)?.[key]?.trim();\n}\n\nfunction readEnvNumber(key: string): number | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction readEnvBoolean(key: string): boolean | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n if (/^(1|true|yes|on)$/i.test(raw)) return true;\n if (/^(0|false|no|off)$/i.test(raw)) return false;\n return undefined;\n}\n\nfunction readFirstEnvString(keys: string[]): string | undefined {\n for (const key of keys) {\n const value = readEnvString(key);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction readFirstEnvNumber(keys: string[]): number | undefined {\n for (const key of keys) {\n const value = readEnvNumber(key);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction replayEndpointFromAnalyticsEndpoint(value: string): string | null {\n try {\n const url = new URL(value);\n if (url.pathname.endsWith(\"/api/analytics/track\")) {\n url.pathname = url.pathname.replace(\n /\\/api\\/analytics\\/track$/,\n \"/api/analytics/replay\",\n );\n return url.toString();\n }\n if (url.pathname.endsWith(\"/track\")) {\n url.pathname = url.pathname.replace(/\\/track$/, \"/api/analytics/replay\");\n return url.toString();\n }\n } catch {\n // Fall through to the relative path cases below.\n }\n if (value.endsWith(\"/api/analytics/track\")) {\n return value.replace(/\\/api\\/analytics\\/track$/, \"/api/analytics/replay\");\n }\n if (value.endsWith(\"/track\")) {\n return value.replace(/\\/track$/, \"/api/analytics/replay\");\n }\n return null;\n}\n\nfunction defaultReplayEndpoint(): string {\n const analyticsEndpoint = readEnvString(\n \"VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT\",\n );\n const derived = analyticsEndpoint\n ? replayEndpointFromAnalyticsEndpoint(analyticsEndpoint)\n : null;\n if (derived) return derived;\n return typeof window !== \"undefined\"\n ? `${window.location.origin}${DEFAULT_REPLAY_PATH}`\n : DEFAULT_REPLAY_PATH;\n}\n\nexport function getSessionReplaySamplingScore(\n sessionId: string,\n salt = DEFAULT_SAMPLING_SALT,\n): number {\n let hash = 2166136261;\n const input = `${salt}:${sessionId}`;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) / 4294967296;\n}\n\nexport function shouldSampleSessionReplay(\n sessionId: string,\n sampleRate = 1,\n salt = DEFAULT_SAMPLING_SALT,\n): boolean {\n const rate = clampSamplingRate(sampleRate);\n if (rate <= 0) return false;\n if (rate >= 1) return true;\n return getSessionReplaySamplingScore(sessionId, salt) < rate;\n}\n\nfunction matcherAllows(matcher: SessionReplayUrlMatcher, url: string): boolean {\n if (typeof matcher === \"string\") return url.includes(matcher);\n if (matcher instanceof RegExp) return matcher.test(url);\n return matcher(url);\n}\n\nfunction isUrlRecordable(\n url: string,\n options: Pick<NormalizedSessionReplayOptions, \"allowUrls\" | \"blockUrls\">,\n): boolean {\n if (options.allowUrls.length > 0) {\n const allowed = options.allowUrls.some((matcher) =>\n matcherAllows(matcher, url),\n );\n if (!allowed) return false;\n }\n return !options.blockUrls.some((matcher) => matcherAllows(matcher, url));\n}\n\nfunction normalizeOptions(\n options: SessionReplayOptions,\n): NormalizedSessionReplayOptions | null {\n const publicKey =\n options.publicKey ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_PUBLIC_KEY\",\n \"VITE_SESSION_REPLAY_PUBLIC_KEY\",\n ]) ||\n (import.meta.env as Record<string, string | undefined>)\n ?.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;\n if (!publicKey) return null;\n const endpoint =\n options.endpoint ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_ANALYTICS_REPLAY_ENDPOINT\",\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_ENDPOINT\",\n \"VITE_SESSION_REPLAY_INGEST_URL\",\n ]) ||\n defaultReplayEndpoint();\n return {\n publicKey,\n endpoint,\n requireSignedInUser:\n options.requireSignedInUser ??\n readEnvBoolean(\"VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n readEnvBoolean(\"VITE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n false,\n sampleRate: clampSamplingRate(\n options.sampleRate ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE\",\n \"VITE_SESSION_REPLAY_SAMPLE_RATE\",\n ]),\n ),\n samplingSalt: options.samplingSalt || DEFAULT_SAMPLING_SALT,\n allowUrls: options.allowUrls ?? [],\n blockUrls: options.blockUrls ?? [],\n flushIntervalMs: Math.max(\n 250,\n options.flushIntervalMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n \"VITE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n ]) ??\n DEFAULT_FLUSH_INTERVAL_MS,\n ),\n maxDurationMs: Math.max(\n 1000,\n options.maxDurationMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_MAX_DURATION_MS\",\n \"VITE_SESSION_REPLAY_MAX_DURATION_MS\",\n ]) ??\n DEFAULT_MAX_DURATION_MS,\n ),\n maxEventsPerBatch: Math.max(\n 1,\n options.maxEventsPerBatch ?? DEFAULT_MAX_EVENTS_PER_BATCH,\n ),\n maxBatchBytes: Math.max(\n 1024,\n options.maxBatchBytes ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n \"VITE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n ]) ??\n DEFAULT_MAX_BATCH_BYTES,\n ),\n checkoutEveryNth: options.checkoutEveryNth,\n checkoutEveryNms: options.checkoutEveryNms,\n inlineStylesheet: options.inlineStylesheet ?? true,\n blockSelector: options.blockSelector || DEFAULT_BLOCK_SELECTOR,\n ignoreSelector: options.ignoreSelector || DEFAULT_IGNORE_SELECTOR,\n maskTextClass: options.maskTextClass || DEFAULT_MASK_TEXT_CLASS,\n maskTextSelector: options.maskTextSelector || DEFAULT_MASK_TEXT_SELECTOR,\n maskAllInputs: options.maskAllInputs ?? true,\n recordCanvas: options.recordCanvas ?? false,\n recordCrossOriginIframes: options.recordCrossOriginIframes ?? false,\n collectFonts: options.collectFonts ?? false,\n inlineImages: options.inlineImages ?? false,\n eventSampling: options.eventSampling ?? DEFAULT_EVENT_SAMPLING,\n console: normalizeCaptureToggle(\n options.console,\n DEFAULT_MAX_CONSOLE_EVENTS,\n ),\n network: normalizeCaptureToggle(\n options.network,\n DEFAULT_MAX_NETWORK_EVENTS,\n ),\n extraProperties: options.extraProperties,\n };\n}\n\n/**\n * Console/network capture default to ON whenever session replay records;\n * `false` disables a category, an object form overrides its caps. Network\n * options may additionally carry `captureErrorBodies`/`maxErrorBodyLength`;\n * console ignores those fields.\n */\nfunction normalizeCaptureToggle(\n value: boolean | SessionReplayNetworkOptions | undefined,\n defaultMaxEvents: number,\n): NormalizedCaptureOptions | null {\n if (value === false) return null;\n const overrides = typeof value === \"object\" && value !== null ? value : {};\n const maxEvents =\n typeof overrides.maxEvents === \"number\" &&\n Number.isFinite(overrides.maxEvents)\n ? Math.max(1, Math.floor(overrides.maxEvents))\n : defaultMaxEvents;\n const maxErrorBodyLength =\n typeof overrides.maxErrorBodyLength === \"number\" &&\n Number.isFinite(overrides.maxErrorBodyLength)\n ? Math.max(0, Math.floor(overrides.maxErrorBodyLength))\n : DEFAULT_MAX_ERROR_BODY_LENGTH;\n return {\n maxEvents,\n captureErrorBodies: overrides.captureErrorBodies !== false,\n maxErrorBodyLength,\n };\n}\n\nfunction scrubStringValue(key: string, value: string): string {\n const lowerKey = key.toLowerCase();\n const isUrlKey = URL_LIKE_KEYS.has(key) || URL_LIKE_KEYS.has(lowerKey);\n if (\n isUrlKey ||\n value.startsWith(\"http://\") ||\n value.startsWith(\"https://\") ||\n value.startsWith(\"/\")\n ) {\n return scrubUrl(value) ?? value;\n }\n return value;\n}\n\nfunction scrubReplayValue(\n value: unknown,\n key = \"\",\n depth = 0,\n seen = new WeakSet<object>(),\n): unknown {\n if (typeof value === \"string\") return scrubStringValue(key, value);\n if (!value || typeof value !== \"object\") return value;\n if (depth > 12) return value;\n if (seen.has(value)) return value;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((item) => scrubReplayValue(item, key, depth + 1, seen));\n }\n const out: Record<string, unknown> = {};\n for (const [childKey, childValue] of Object.entries(value)) {\n out[childKey] = scrubReplayValue(childValue, childKey, depth + 1, seen);\n }\n return out;\n}\n\n/**\n * JSON.stringify replacer that scrubs URL-like string values inline. Folding\n * the scrub into the single serialization pass avoids a separate deep-clone of\n * every emitted event (FullSnapshots are large DOM trees) on the hot path.\n */\nfunction scrubReplayReplacer(key: string, value: unknown): unknown {\n return typeof value === \"string\" ? scrubStringValue(key, value) : value;\n}\n\n/**\n * Serialize + scrub one event in a single pass. The resulting string is stored\n * directly on the queue and reused verbatim at flush, so each event is\n * stringified exactly once (was: deep-clone + size-stringify + flush-stringify).\n */\nfunction serializeReplayEvent(event: ReplayEvent): string {\n try {\n return JSON.stringify(event, scrubReplayReplacer);\n } catch {\n return \"\";\n }\n}\n\nfunction replayEventTimestampMs(event: ReplayEvent): number {\n const timestamp = event.timestamp;\n if (typeof timestamp === \"number\" && Number.isFinite(timestamp)) {\n return timestamp;\n }\n if (typeof timestamp === \"string\" && timestamp.trim()) {\n const parsed = Date.parse(timestamp);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Date.now();\n}\n\nfunction enqueueReplayEvent(\n state: SessionReplayState,\n event: ReplayEvent,\n): void {\n if (!state.options) return;\n const serialized = serializeReplayEvent(event);\n if (!serialized) return;\n const estimatedBytes = serialized.length;\n if (\n state.queue.length > 0 &&\n state.queuedBytes + estimatedBytes > state.options.maxBatchBytes\n ) {\n void flushSessionReplay(\"max-bytes\");\n }\n state.queue.push({\n json: serialized,\n timestampMs: replayEventTimestampMs(event),\n type: typeof event.type === \"number\" ? event.type : null,\n });\n state.queuedBytes += estimatedBytes;\n flushQueuedReplayIfNeeded(state);\n}\n\nfunction replayExtraProperties(\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const source = options.extraProperties;\n if (!source) return undefined;\n try {\n const props = typeof source === \"function\" ? source() : source;\n if (!props || typeof props !== \"object\") return undefined;\n return scrubReplayValue(props) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nfunction replayString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction replayEmail(value: unknown): string | undefined {\n const raw = replayString(value);\n return raw && raw.includes(\"@\") ? raw : undefined;\n}\n\nfunction replayUserEmail(\n properties: Record<string, unknown> | undefined,\n): string | undefined {\n return (\n replayEmail(properties?.userEmail ?? properties?.user_email) ||\n replayEmail(properties?.email) ||\n replayEmail(properties?.userId ?? properties?.user_id)\n );\n}\n\nfunction replayPropertiesForUpload(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const properties = replayExtraProperties(options);\n if (replayUserEmail(properties)) {\n state.lastAuthenticatedProperties = properties ? { ...properties } : null;\n return properties;\n }\n if (options.requireSignedInUser && state.lastAuthenticatedProperties) {\n return state.lastAuthenticatedProperties;\n }\n return properties;\n}\n\ninterface ReplayUploadPayload {\n body: string;\n replayId: string;\n sessionId: string;\n sequence: number;\n}\n\nfunction buildReplayBody(\n state: SessionReplayState,\n reason: string,\n events: QueuedReplayEvent[],\n): ReplayUploadPayload | null {\n const options = state.options;\n if (!options || !state.replayId) return null;\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return null;\n const properties = replayPropertiesForUpload(state, options);\n const userEmail = replayUserEmail(properties);\n if (options.requireSignedInUser && !userEmail) return null;\n const userId =\n userEmail || replayString(properties?.userId ?? properties?.user_id);\n const eventTimestamps = events.map((event) => event.timestampMs);\n const nowMs = Date.now();\n const startedAtMs =\n state.startedAtMs ??\n (eventTimestamps.length ? Math.min(...eventTimestamps) : nowMs);\n const endedAtMs = eventTimestamps.length\n ? Math.max(...eventTimestamps)\n : nowMs;\n const envelope = {\n publicKey: options.publicKey,\n type: \"session_replay\",\n replayId: state.replayId,\n sessionId,\n ...(userId ? { userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n anonymousId: getOrCreateAnalyticsAnonymousId(),\n sequence: state.sequence,\n reason,\n status: isFinalFlushReason(reason) ? \"completed\" : \"active\",\n eventCount: events.length,\n startedAt: new Date(startedAtMs).toISOString(),\n endedAt: new Date(endedAtMs).toISOString(),\n durationMs: Math.max(0, endedAtMs - startedAtMs),\n privacyMode: \"mask-inputs-and-selected-text\",\n url:\n typeof window !== \"undefined\"\n ? scrubUrl(window.location.href)\n : undefined,\n timestamp: new Date().toISOString(),\n properties,\n };\n // Events are already serialized+scrubbed JSON strings; splice them into the\n // envelope without re-serializing the (potentially large) events array.\n const envelopeJson = JSON.stringify(envelope);\n return {\n body: `${envelopeJson.slice(0, -1)},\"events\":[${events\n .map((event) => event.json)\n .join(\",\")}]}`,\n replayId: state.replayId,\n sessionId,\n sequence: state.sequence,\n };\n}\n\ninterface ReplayUploadBody {\n body: BodyInit;\n headers: Record<string, string>;\n compressed: boolean;\n}\n\nfunction isCrossOriginReplayEndpoint(endpoint: string): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n new URL(endpoint, window.location.href).origin !== window.location.origin\n );\n } catch {\n return false;\n }\n}\n\nasync function gzipReplayBody(body: string): Promise<Blob | null> {\n if (\n typeof CompressionStream === \"undefined\" ||\n typeof Blob === \"undefined\" ||\n typeof Response === \"undefined\"\n ) {\n return null;\n }\n try {\n const stream = new Blob([body], { type: \"application/json\" })\n .stream()\n .pipeThrough(new CompressionStream(\"gzip\"));\n const compressed = await new Response(stream).arrayBuffer();\n return new Blob([compressed], { type: \"application/octet-stream\" });\n } catch {\n return null;\n }\n}\n\nasync function buildReplayUploadBody(body: string): Promise<ReplayUploadBody> {\n const compressed = await gzipReplayBody(body);\n if (compressed) {\n return {\n body: compressed,\n compressed: true,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Encoding\": \"gzip\",\n },\n };\n }\n return {\n body,\n compressed: false,\n headers: {\n \"Content-Type\": \"text/plain;charset=UTF-8\",\n },\n };\n}\n\nfunction replayUploadBodyBytes(body: BodyInit): number {\n if (typeof body === \"string\") {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(body).byteLength;\n }\n return body.length;\n }\n if (typeof Blob !== \"undefined\" && body instanceof Blob) {\n return body.size;\n }\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n if (ArrayBuffer.isView(body)) {\n return body.byteLength;\n }\n return MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES + 1;\n}\n\nfunction canUseReplayKeepalive(body: BodyInit): boolean {\n return replayUploadBodyBytes(body) <= MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES;\n}\n\nasync function sendReplayUpload(\n options: NormalizedSessionReplayOptions,\n body: string,\n callbacks: { beforeKeepaliveUpload?: () => void } = {},\n): Promise<void> {\n if (isCrossOriginReplayEndpoint(options.endpoint)) {\n const canUseKeepalive = canUseReplayKeepalive(body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body,\n keepalive: canUseKeepalive,\n headers: { \"Content-Type\": \"text/plain;charset=UTF-8\" },\n });\n if (!response.ok) {\n throw new Error(\n `Session replay upload failed with HTTP ${response.status}`,\n );\n }\n return;\n }\n\n const upload = await buildReplayUploadBody(body);\n const canUseKeepalive = canUseReplayKeepalive(upload.body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body: upload.body,\n keepalive: canUseKeepalive,\n headers: {\n ...upload.headers,\n \"X-Agent-Native-Analytics-Key\": options.publicKey,\n },\n });\n if (!response.ok) {\n throw new Error(\n `Session replay upload failed with HTTP ${response.status}`,\n );\n }\n}\n\nfunction isFinalFlushReason(reason: string): boolean {\n return [\n \"auth-cleared\",\n \"manual\",\n \"pagehide\",\n \"beforeunload\",\n \"url-blocked\",\n \"max-duration\",\n ].includes(reason);\n}\n\nfunction shouldReserveSequenceBeforeKeepalive(reason: string): boolean {\n return (\n reason === \"pagehide\" ||\n reason === \"beforeunload\" ||\n reason === \"visibility-hidden\"\n );\n}\n\nfunction hasFullSnapshot(events: QueuedReplayEvent[]): boolean {\n return events.some((event) => event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE);\n}\n\nfunction hasPendingReplayBatch(state: SessionReplayState): boolean {\n return state.retryBatches.length > 0 || state.queue.length > 0;\n}\n\nfunction shouldFlushQueuedReplay(state: SessionReplayState): boolean {\n if (!state.options || state.queue.length === 0) return false;\n return (\n hasFullSnapshot(state.queue) ||\n state.queue.length >= state.options.maxEventsPerBatch ||\n state.queuedBytes >= state.options.maxBatchBytes\n );\n}\n\nfunction flushQueuedReplayIfNeeded(state: SessionReplayState): void {\n const options = state.options;\n if (!options) return;\n if (state.retryBatches.length > 0) return;\n if (!shouldFlushQueuedReplay(state)) return;\n const reason = hasFullSnapshot(state.queue)\n ? \"full-snapshot\"\n : state.queue.length >= options.maxEventsPerBatch\n ? \"max-events\"\n : \"max-bytes\";\n void flushSessionReplay(reason);\n}\n\nfunction queuedReplayBytes(events: QueuedReplayEvent[]): number {\n return events.reduce((total, event) => total + event.json.length, 0);\n}\n\nfunction restoreReplayEvents(\n state: SessionReplayState,\n events: QueuedReplayEvent[],\n): void {\n state.retryBatches.unshift(events);\n}\n\nfunction advanceReplaySequence(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n state.sequence = Math.max(state.sequence, payload.sequence + 1);\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n );\n}\n\nfunction rollbackReplaySequenceReservation(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n if (state.sequence !== payload.sequence + 1) return;\n state.sequence = payload.sequence;\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n );\n}\n\nexport async function flushSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n if (!state.options || !hasPendingReplayBatch(state) || state.flushing) return;\n const events = state.retryBatches.shift() ?? state.queue.splice(0);\n state.queuedBytes = queuedReplayBytes(state.queue);\n const payload = buildReplayBody(state, reason, events);\n if (!payload || !state.options) {\n restoreReplayEvents(state, events);\n return;\n }\n state.flushing = true;\n let uploaded = false;\n let reservedSequence = false;\n try {\n await sendReplayUpload(state.options, payload.body, {\n beforeKeepaliveUpload: shouldReserveSequenceBeforeKeepalive(reason)\n ? () => {\n advanceReplaySequence(state, payload);\n reservedSequence = true;\n }\n : undefined,\n });\n if (!reservedSequence) advanceReplaySequence(state, payload);\n uploaded = true;\n } catch (error) {\n if (reservedSequence) rollbackReplaySequenceReservation(state, payload);\n restoreReplayEvents(state, events);\n // Guard the recorder's own warning so console capture never records it\n // (a captured warning would enqueue an event and retrigger a flush).\n const previousInternal = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n console.warn(\"[session-replay] upload failed\", error);\n } finally {\n replayCaptureInternal = previousInternal;\n }\n } finally {\n state.flushing = false;\n }\n if (uploaded && hasPendingReplayBatch(state)) {\n flushQueuedReplayIfNeeded(state);\n }\n}\n\nfunction installUrlMonitor(state: SessionReplayState): void {\n if (!state.options || state.restoreUrlMonitor) return;\n const options = state.options;\n const check = () => {\n if (!isUrlRecordable(window.location.href, options)) {\n stopSessionReplay(\"url-blocked\");\n }\n };\n const originalPushState = window.history.pushState;\n const originalReplaceState = window.history.replaceState;\n window.history.pushState = function pushState(...args) {\n const result = originalPushState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.history.replaceState = function replaceState(...args) {\n const result = originalReplaceState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.addEventListener(\"popstate\", check);\n state.restoreUrlMonitor = () => {\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n state.restoreUrlMonitor = null;\n };\n}\n\nfunction installLifecycleListeners(state: SessionReplayState): void {\n if (state.removeLifecycleListeners) return;\n const flushOnHidden = () => {\n if (document.visibilityState === \"hidden\") {\n void flushSessionReplay(\"visibility-hidden\");\n }\n };\n const flushOnUnload = () => {\n void flushSessionReplay(\"pagehide\");\n };\n document.addEventListener(\"visibilitychange\", flushOnHidden);\n window.addEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = () => {\n document.removeEventListener(\"visibilitychange\", flushOnHidden);\n window.removeEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = null;\n };\n}\n\nfunction truncateCaptureText(value: string, maxLength: number): string {\n return value.length > maxLength ? value.slice(0, maxLength) : value;\n}\n\n/** Circular-safe, depth/length-limited plain value for JSON.stringify. */\nfunction toCaptureSerializable(\n value: unknown,\n depth: number,\n seen: WeakSet<object>,\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return `${value}n`;\n if (typeof value === \"function\") return \"[function]\";\n if (typeof value === \"symbol\") return String(value);\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (typeof value !== \"object\") return String(value);\n if (seen.has(value)) return \"[circular]\";\n if (depth >= MAX_CONSOLE_SERIALIZE_DEPTH) {\n return Array.isArray(value) ? \"[array]\" : \"[object]\";\n }\n seen.add(value);\n if (Array.isArray(value)) {\n const items = value\n .slice(0, MAX_CONSOLE_SERIALIZE_ENTRIES)\n .map((item) => toCaptureSerializable(item, depth + 1, seen));\n if (value.length > MAX_CONSOLE_SERIALIZE_ENTRIES) items.push(\"[truncated]\");\n return items;\n }\n const out: Record<string, unknown> = {};\n let count = 0;\n for (const [key, child] of Object.entries(value)) {\n if (count >= MAX_CONSOLE_SERIALIZE_ENTRIES) {\n out[\"[truncated]\"] = true;\n break;\n }\n out[key] = toCaptureSerializable(child, depth + 1, seen);\n count += 1;\n }\n return out;\n}\n\nfunction serializeConsoleArg(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (\n value === null ||\n value === undefined ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return (\n JSON.stringify(toCaptureSerializable(value, 0, new WeakSet())) ??\n String(value)\n );\n } catch {\n try {\n return Object.prototype.toString.call(value);\n } catch {\n return \"[unserializable]\";\n }\n }\n}\n\n/**\n * Emit an rrweb custom event while recording. Sets the re-entrancy guard so\n * synchronous work triggered by the emit (enqueue -> flush -> fetch of the\n * ingest endpoint) is never re-captured by the interceptors below.\n */\nfunction emitReplayCustomEvent(\n state: SessionReplayState,\n tag: string,\n payload: Record<string, unknown>,\n): void {\n const addCustomEvent = state.addCustomEvent;\n if (!state.active || !addCustomEvent) return;\n const previous = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n addCustomEvent(tag, payload);\n } catch {\n // recorder already stopped -- drop the event\n } finally {\n replayCaptureInternal = previous;\n }\n}\n\nfunction captureCurrentUrl(): string | undefined {\n try {\n return scrubUrl(window.location.href);\n } catch {\n return undefined;\n }\n}\n\ntype CaptureConsoleLevel = \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\ntype CaptureConsoleSource = \"console\" | \"window-error\" | \"unhandledrejection\";\n\nconst CAPTURE_CONSOLE_LEVELS: CaptureConsoleLevel[] = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n];\n\nfunction installConsoleCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n let emitted = 0;\n let stopped = false;\n let pending: {\n key: string;\n payload: Record<string, unknown>;\n repeat: number;\n } | null = null;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level: \"warn\",\n source: \"console\",\n message: \"session replay console capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, payload);\n };\n\n /**\n * The first occurrence of a message is emitted immediately; consecutive\n * identical messages accumulate here and are flushed as one event whose\n * `repeat` is the number of collapsed duplicates.\n */\n const flushPending = () => {\n const entry = pending;\n pending = null;\n if (!entry || entry.repeat <= 0) return;\n emitPayload({ ...entry.payload, repeat: entry.repeat });\n };\n\n const capture = (\n level: CaptureConsoleLevel,\n source: CaptureConsoleSource,\n args: unknown[],\n stackOverride?: string,\n ) => {\n if (stopped || replayCaptureInternal) return;\n try {\n const message = truncateCaptureText(\n redactCaptureText(args.length ? serializeConsoleArg(args[0]) : \"\"),\n MAX_CONSOLE_MESSAGE_LENGTH,\n );\n const extraArgs = args\n .slice(1, 1 + MAX_CONSOLE_ARGS)\n .map((arg) =>\n truncateCaptureText(\n redactCaptureText(serializeConsoleArg(arg)),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const rawStack = stackOverride ?? errorArg?.stack;\n const stack =\n typeof rawStack === \"string\" && rawStack\n ? truncateCaptureText(\n redactCaptureText(rawStack),\n MAX_CONSOLE_STACK_LENGTH,\n )\n : undefined;\n const url = captureCurrentUrl();\n const payload: Record<string, unknown> = {\n level,\n source,\n message,\n ...(extraArgs.length ? { args: extraArgs } : {}),\n ...(stack ? { stack } : {}),\n ...(url ? { url } : {}),\n };\n const key = `${level}\u0000${source}\u0000${message}`;\n if (pending && pending.key === key) {\n pending.repeat += 1;\n return;\n }\n flushPending();\n emitPayload(payload);\n pending = { key, payload, repeat: 0 };\n } catch {\n // capture must never break the host page\n }\n };\n\n const originals: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n const wrappers: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = console[level] as (...args: unknown[]) => void;\n if (typeof original !== \"function\") continue;\n originals[level] = original;\n const wrapper = (...args: unknown[]) => {\n original.apply(console, args);\n try {\n capture(level, \"console\", args);\n } catch {\n // never throw from the wrapper\n }\n };\n wrappers[level] = wrapper;\n console[level] = wrapper;\n }\n\n const onWindowError = (event: ErrorEvent) => {\n try {\n const error = event?.error;\n capture(\n \"error\",\n \"window-error\",\n [error instanceof Error ? error : (event?.message ?? \"Error\")],\n error instanceof Error ? error.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n const onUnhandledRejection = (event: PromiseRejectionEvent) => {\n try {\n const reason = event?.reason;\n capture(\n \"error\",\n \"unhandledrejection\",\n [reason instanceof Error ? reason : reason],\n reason instanceof Error ? reason.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n window.addEventListener(\"error\", onWindowError as EventListener);\n window.addEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n\n return () => {\n try {\n flushPending();\n } catch {\n // best-effort duplicate flush\n }\n stopped = true;\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = originals[level];\n // Restore only what we installed: if another library patched on top of\n // our wrapper, leave the current function in place.\n if (original && console[level] === wrappers[level]) {\n console[level] = original;\n }\n }\n window.removeEventListener(\"error\", onWindowError as EventListener);\n window.removeEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n };\n}\n\nfunction captureRequestUrl(input: unknown): string {\n if (typeof input === \"string\") return input;\n if (typeof URL !== \"undefined\" && input instanceof URL) {\n return input.toString();\n }\n if (input && typeof input === \"object\" && \"url\" in input) {\n const url = (input as { url?: unknown }).url;\n if (typeof url === \"string\") return url;\n }\n return \"\";\n}\n\nfunction captureRequestMethod(\n input: unknown,\n init?: { method?: unknown },\n): string {\n const initMethod = init?.method;\n if (typeof initMethod === \"string\" && initMethod) {\n return initMethod.toUpperCase();\n }\n if (input && typeof input === \"object\" && \"method\" in input) {\n const method = (input as { method?: unknown }).method;\n if (typeof method === \"string\" && method) return method.toUpperCase();\n }\n return \"GET\";\n}\n\n/**\n * Requests the recorder must never record: its own ingest endpoint and the\n * core analytics tracking endpoint (either would create a flush -> event ->\n * flush feedback loop), plus non-network schemes.\n */\nfunction isCaptureExcludedUrl(rawUrl: string, ingestEndpoint: string): boolean {\n const trimmed = rawUrl.trim();\n if (!trimmed) return true;\n const lower = trimmed.toLowerCase();\n if (\n lower.startsWith(\"data:\") ||\n lower.startsWith(\"blob:\") ||\n lower.startsWith(\"about:\")\n ) {\n return true;\n }\n try {\n const resolved = new URL(trimmed, window.location.href);\n const ingest = new URL(ingestEndpoint, window.location.href);\n if (\n resolved.origin === ingest.origin &&\n resolved.pathname === ingest.pathname\n ) {\n return true;\n }\n if (resolved.pathname.endsWith(\"/api/analytics/replay\")) return true;\n if (resolved.pathname.endsWith(\"/api/analytics/track\")) return true;\n } catch {\n // Unresolvable URL -- skip capture rather than risk recording junk.\n return true;\n }\n return false;\n}\n\n/**\n * Best-effort, synchronous read of a 5xx XHR response body, sliced to `cap`\n * before redaction runs (caller redacts). Only reads `responseText` when\n * `responseType` is \"\" or \"text\" -- other response types are read via\n * `JSON.stringify` (guarded) for `\"json\"`, and skipped entirely otherwise\n * since arbitrary binary/blob/arraybuffer bodies are not useful error text.\n */\nfunction readXhrErrorBody(\n xhr: XMLHttpRequest,\n cap: number,\n): string | undefined {\n try {\n const responseType = xhr.responseType;\n if (responseType === \"\" || responseType === \"text\") {\n const text = xhr.responseText;\n return typeof text === \"string\" ? text.slice(0, cap) : undefined;\n }\n if (responseType === \"json\") {\n try {\n return JSON.stringify(xhr.response)?.slice(0, cap);\n } catch {\n return undefined;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction installNetworkCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n const options = state.options;\n if (!options) return () => {};\n const ingestEndpoint = options.endpoint;\n let emitted = 0;\n let stopped = false;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, {\n message: \"session replay network capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, payload);\n };\n\n const errorBodyCap =\n captureOptions.captureErrorBodies !== false\n ? (captureOptions.maxErrorBodyLength ?? DEFAULT_MAX_ERROR_BODY_LENGTH)\n : null;\n\n const recordRequest = (\n api: \"fetch\" | \"xhr\",\n method: string,\n rawUrl: string,\n status: number,\n ok: boolean,\n durationMs: number,\n error?: string,\n responseBody?: string,\n ) => {\n if (stopped) return;\n try {\n if (isCaptureExcludedUrl(rawUrl, ingestEndpoint)) return;\n const absolute = new URL(rawUrl, window.location.href).toString();\n const url = scrubUrl(absolute) ?? absolute;\n emitPayload({\n api,\n method: method.toUpperCase(),\n url,\n status,\n ok,\n durationMs: Math.max(0, Math.round(durationMs)),\n ...(error\n ? {\n error: truncateCaptureText(\n redactCaptureText(error),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n }\n : {}),\n ...(responseBody\n ? {\n responseBody: truncateCaptureText(\n redactCaptureText(responseBody),\n errorBodyCap ?? DEFAULT_MAX_ERROR_BODY_LENGTH,\n ),\n }\n : {}),\n });\n } catch {\n // capture must never break the host page\n }\n };\n\n /**\n * Best-effort bounded read of a 5xx response body. Reads a decoded stream\n * up to `cap` chars and cancels the reader, or falls back to `.text()`\n * sliced to `cap` when no readable stream is exposed. Never throws --\n * opaque/no-body responses (or any read failure) resolve to undefined.\n */\n const readBoundedErrorBody = async (\n response: Response,\n cap: number,\n ): Promise<string | undefined> => {\n try {\n const reader = response.body?.getReader?.();\n if (reader) {\n const decoder = new TextDecoder();\n let text = \"\";\n while (text.length < cap) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) text += decoder.decode(value, { stream: true });\n }\n // Fire-and-forget: cancelling an already-exhausted (or still-open but\n // no-longer-wanted) reader can hang indefinitely on some stream\n // implementations. We never need the result, so don't await it --\n // that would defeat the whole point of bounding this read.\n try {\n reader.cancel().catch(() => {});\n } catch {\n // best-effort; some readers throw synchronously instead\n }\n return text.slice(0, cap);\n }\n const text = await response.text();\n return text.slice(0, cap);\n } catch {\n return undefined;\n }\n };\n\n const restores: Array<() => void> = [];\n\n if (typeof window.fetch === \"function\") {\n const originalFetch = window.fetch;\n const wrappedFetch = function (\n this: unknown,\n input?: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const self = this ?? window;\n if (stopped || replayCaptureInternal) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n let method = \"GET\";\n let url = \"\";\n let skip = true;\n try {\n method = captureRequestMethod(input, init);\n url = captureRequestUrl(input);\n skip = isCaptureExcludedUrl(url, ingestEndpoint);\n } catch {\n skip = true;\n }\n if (skip) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n const startedAt = performance.now();\n // Call the original exactly as the page did; never read the caller's\n // response before returning it, never replace the response, propagate\n // rejections untouched. A 5xx body snippet (if any) is read from a\n // clone and emitted from a detached promise chain afterward.\n const result = originalFetch.call(self, input as RequestInfo | URL, init);\n if (!result || typeof (result as Promise<Response>).then !== \"function\") {\n return result;\n }\n return result.then(\n (response) => {\n try {\n const durationMs = performance.now() - startedAt;\n if (errorBodyCap !== null && response.status >= 500) {\n // Clone immediately -- before any other code (including this\n // handler returning) can consume the original body -- so the\n // clone's stream is guaranteed unconsumed.\n let clone: Response | null = null;\n try {\n clone = response.clone();\n } catch {\n clone = null;\n }\n if (clone) {\n const bodyPromise = readBoundedErrorBody(clone, errorBodyCap);\n const timeoutPromise = new Promise<undefined>((resolve) => {\n setTimeout(\n () => resolve(undefined),\n ERROR_BODY_READ_TIMEOUT_MS,\n );\n });\n // Detached chain: never rejects, never awaited by the caller.\n Promise.race([bodyPromise, timeoutPromise])\n .then((responseBody) => {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n undefined,\n responseBody,\n );\n })\n .catch(() => {\n // never affect the caller\n });\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } catch {\n // never affect the caller\n }\n return response;\n },\n (error) => {\n try {\n recordRequest(\n \"fetch\",\n method,\n url,\n 0,\n false,\n performance.now() - startedAt,\n error instanceof Error ? error.message : String(error),\n );\n } catch {\n // never affect the caller\n }\n throw error;\n },\n );\n };\n window.fetch = wrappedFetch as typeof window.fetch;\n restores.push(() => {\n // Restore only what we installed (another lib may have patched on top).\n if (window.fetch === (wrappedFetch as typeof window.fetch)) {\n window.fetch = originalFetch;\n }\n });\n }\n\n if (typeof XMLHttpRequest !== \"undefined\" && XMLHttpRequest.prototype) {\n const originalOpen = XMLHttpRequest.prototype.open;\n const originalSend = XMLHttpRequest.prototype.send;\n const xhrInfo = new WeakMap<\n XMLHttpRequest,\n { method: string; url: string }\n >();\n\n const wrappedOpen = function (\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n async?: boolean,\n username?: string | null,\n password?: string | null,\n ) {\n try {\n xhrInfo.set(this, { method: String(method), url: String(url) });\n } catch {\n // never throw from the wrapper\n }\n return originalOpen.call(\n this,\n method,\n url as string,\n async ?? true,\n username,\n password,\n );\n };\n\n const wrappedSend = function (\n this: XMLHttpRequest,\n body?: Document | XMLHttpRequestBodyInit | null,\n ) {\n try {\n const info = xhrInfo.get(this);\n if (info && !stopped && !replayCaptureInternal) {\n const startedAt = performance.now();\n let errorMessage: string | undefined;\n const markError = (message: string) => () => {\n errorMessage = message;\n };\n this.addEventListener(\"error\", markError(\"XMLHttpRequest failed\"), {\n once: true,\n });\n this.addEventListener(\"abort\", markError(\"XMLHttpRequest aborted\"), {\n once: true,\n });\n this.addEventListener(\n \"timeout\",\n markError(\"XMLHttpRequest timed out\"),\n { once: true },\n );\n this.addEventListener(\n \"loadend\",\n () => {\n const status = typeof this.status === \"number\" ? this.status : 0;\n const effectiveStatus = errorMessage ? 0 : status;\n let responseBody: string | undefined;\n if (errorBodyCap !== null && !errorMessage && status >= 500) {\n responseBody = readXhrErrorBody(this, errorBodyCap);\n }\n recordRequest(\n \"xhr\",\n info.method,\n info.url,\n effectiveStatus,\n !errorMessage && status >= 200 && status < 300,\n performance.now() - startedAt,\n errorMessage,\n responseBody,\n );\n xhrInfo.delete(this);\n },\n { once: true },\n );\n }\n } catch {\n // never throw from the wrapper\n }\n return originalSend.call(this, body ?? null);\n };\n\n XMLHttpRequest.prototype.open =\n wrappedOpen as typeof XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.send =\n wrappedSend as typeof XMLHttpRequest.prototype.send;\n restores.push(() => {\n if (\n XMLHttpRequest.prototype.open ===\n (wrappedOpen as typeof XMLHttpRequest.prototype.open)\n ) {\n XMLHttpRequest.prototype.open = originalOpen;\n }\n if (\n XMLHttpRequest.prototype.send ===\n (wrappedSend as typeof XMLHttpRequest.prototype.send)\n ) {\n XMLHttpRequest.prototype.send = originalSend;\n }\n });\n }\n\n return () => {\n stopped = true;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nfunction installCaptureInterceptors(state: SessionReplayState): void {\n const options = state.options;\n if (!options || state.restoreCaptures || !state.addCustomEvent) return;\n if (!options.console && !options.network) return;\n const restores: Array<() => void> = [];\n try {\n if (options.console) {\n restores.push(installConsoleCapture(state, options.console));\n }\n if (options.network) {\n restores.push(installNetworkCapture(state, options.network));\n }\n } catch {\n // keep whatever installed cleanly; restores below still uninstall it\n }\n if (restores.length === 0) return;\n state.restoreCaptures = () => {\n state.restoreCaptures = null;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nexport async function startSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n if (options.enabled === false) return { started: false, reason: \"disabled\" };\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return { started: false, reason: \"not-browser\" };\n }\n const normalized = normalizeOptions(options);\n if (!normalized) return { started: false, reason: \"missing-public-key\" };\n\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return { started: false, reason: \"missing-session-id\" };\n const sampled = shouldSampleSessionReplay(\n sessionId,\n normalized.sampleRate,\n normalized.samplingSalt,\n );\n if (!sampled) {\n return { started: false, reason: \"sampled-out\", sessionId, sampled };\n }\n const initialProperties = replayExtraProperties(normalized);\n if (normalized.requireSignedInUser) {\n if (!replayUserEmail(initialProperties)) {\n return {\n started: false,\n reason: \"missing-user-id\",\n sessionId,\n sampled,\n };\n }\n }\n if (!isUrlRecordable(window.location.href, normalized)) {\n return { started: false, reason: \"url-blocked\", sessionId, sampled };\n }\n\n const state = getState();\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n if (state.startPromise) return state.startPromise;\n\n let startPromise: Promise<SessionReplayStartResult>;\n startPromise = startSessionReplayRecorder(\n state,\n normalized,\n sessionId,\n sampled,\n initialProperties,\n ).finally(() => {\n if (state.startPromise === startPromise) {\n state.startPromise = null;\n }\n });\n state.startPromise = startPromise;\n return startPromise;\n}\n\nasync function startSessionReplayRecorder(\n state: SessionReplayState,\n normalized: NormalizedSessionReplayOptions,\n sessionId: string,\n sampled: boolean,\n initialProperties: Record<string, unknown> | undefined,\n): Promise<SessionReplayStartResult> {\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n\n let rrweb: RrwebRecordModule;\n try {\n rrweb = (await import(\"@rrweb/record\")) as RrwebRecordModule;\n } catch {\n return { started: false, reason: \"import-failed\", sessionId, sampled };\n }\n\n const replaySession = getOrCreateReplaySession(sessionId);\n state.options = normalized;\n state.replayId = replaySession.replayId;\n state.startedAtMs = replaySession.startedAtMs;\n state.sequence = replaySession.sequence;\n state.queue = [];\n state.queuedBytes = 0;\n state.retryBatches = [];\n state.stopRecorder = null;\n state.lastAuthenticatedProperties = replayUserEmail(initialProperties)\n ? { ...initialProperties }\n : null;\n state.active = true;\n\n try {\n const stopRecorder = rrweb.record({\n emit: (event) => enqueueReplayEvent(state, event),\n sampling: normalized.eventSampling,\n checkoutEveryNth: normalized.checkoutEveryNth,\n checkoutEveryNms: normalized.checkoutEveryNms,\n inlineStylesheet: normalized.inlineStylesheet,\n blockSelector: normalized.blockSelector,\n ignoreSelector: normalized.ignoreSelector,\n maskTextClass: normalized.maskTextClass,\n maskTextSelector: normalized.maskTextSelector,\n maskAllInputs: normalized.maskAllInputs,\n recordCanvas: normalized.recordCanvas,\n recordCrossOriginIframes: normalized.recordCrossOriginIframes,\n collectFonts: normalized.collectFonts,\n inlineImages: normalized.inlineImages,\n maskInputOptions: {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n },\n });\n if (typeof stopRecorder !== \"function\") {\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n state.stopRecorder = stopRecorder;\n state.flushTimer = window.setInterval(\n () => void flushSessionReplay(\"interval\"),\n normalized.flushIntervalMs,\n );\n state.maxDurationTimer = window.setTimeout(\n () => stopSessionReplay(\"max-duration\"),\n normalized.maxDurationMs,\n );\n installUrlMonitor(state);\n installLifecycleListeners(state);\n state.addCustomEvent =\n typeof rrweb.record.addCustomEvent === \"function\"\n ? rrweb.record.addCustomEvent\n : null;\n installCaptureInterceptors(state);\n return {\n started: true,\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n } catch {\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.addCustomEvent = null;\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n}\n\nexport async function stopSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n if (!state.active) return;\n // Restore console/fetch/XHR before tearing down the recorder: the restore\n // flushes any pending collapsed console duplicate, which must still be able\n // to emit through rrweb while it is recording.\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.active = false;\n state.addCustomEvent = null;\n try {\n state.stopRecorder?.();\n } catch {\n // best-effort recorder shutdown\n }\n state.stopRecorder = null;\n if (state.flushTimer) {\n window.clearInterval(state.flushTimer);\n state.flushTimer = null;\n }\n if (state.maxDurationTimer) {\n window.clearTimeout(state.maxDurationTimer);\n state.maxDurationTimer = null;\n }\n state.restoreUrlMonitor?.();\n state.removeLifecycleListeners?.();\n await flushSessionReplay(reason);\n}\n\nexport function maybeStartSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n return startSessionReplay(options);\n}\n\nexport function isSessionReplayActive(): boolean {\n return getState().active;\n}\n\n/**\n * The active session replay id when a recording is running, or the last one\n * persisted for this analytics session in `localStorage`. First-party error\n * capture uses this to tie each captured exception to the replay it happened\n * in, so triage can jump straight to `/sessions/<recordingId>`.\n */\nexport function getSessionReplayId(): string | null {\n const state = getState();\n if (state.active && state.replayId) return state.replayId;\n const stored = readStoredReplaySession();\n return stored?.replayId ?? null;\n}\n\n/**\n * Surface a manually captured exception on the active session replay timeline\n * as an `agent-native.console` custom event, reusing the diagnostics contract\n * (`level`, `source: \"console\"`, `message`, `stack`, `url`). No-op when no\n * recording is active. Auto-captured `window.onerror` / `unhandledrejection`\n * are intentionally NOT routed here — the recorder already logs those as\n * `window-error` / `unhandledrejection`, so re-emitting would double-count.\n */\nexport function emitSessionReplayException(input: {\n type: string;\n message: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n stack?: string;\n url?: string;\n}): void {\n const state = getState();\n if (!state.active || !state.addCustomEvent) return;\n const level =\n input.level === \"warning\"\n ? \"warn\"\n : input.level === \"info\" || input.level === \"debug\"\n ? input.level\n : \"error\";\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level,\n source: \"console\",\n message: `${input.type}: ${input.message}`.slice(\n 0,\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n ...(input.stack\n ? { stack: input.stack.slice(0, MAX_CONSOLE_STACK_LENGTH) }\n : {}),\n ...(input.url ? { url: input.url } : {}),\n });\n}\n"]}