@groundcover/browser 1.0.8-rc.7 → 1.0.9-rc.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.
package/CHANGELOG.md CHANGED
@@ -4,53 +4,66 @@ All notable changes to `@groundcover/browser` are documented here. This project
4
4
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the
5
5
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.
6
6
 
7
- ## [1.0.8-rc.2]
7
+ ## [1.0.9-rc.0]
8
8
 
9
- Release candidate. Published under the `rc` dist-tag — `npm install @groundcover/browser@rc`.
10
-
11
- Supersedes 1.0.8-rc.1; everything in the rc.0 entry still applies, including the two behaviour
12
- changes under **Changed** below.
9
+ A wire-level ordering fix — sessions could report a start time later than events they carried,
10
+ producing negative durations in the RUM session drawer — plus two `enrichEvent` corrections found
11
+ while closing it. No API change and no configuration change: the `/json/rum` envelope keeps the same
12
+ shape, and only the value of `session_start_time` on a rotated session changes.
13
13
 
14
14
  ### Fixed
15
15
 
16
- - **`groundcover.startNavigation()` / `endNavigation()` can no longer throw into your code.** The
17
- manual navigation API read `location.href` with no error boundary, so on a page with an
18
- instrumented or restricted `location` getter the exception propagated out of the SDK and into the
19
- caller's own stack. The automatic navigation path was already contained; these two now are as
20
- well. Pre-existing since before the core extraction, and unrelated to it.
21
-
22
- ## [1.0.8-rc.1]
23
-
24
- Superseded by 1.0.8-rc.2.
25
-
26
- Release candidate. Published under the `rc` dist-tag — `npm install @groundcover/browser@rc`.
27
-
28
- Supersedes 1.0.8-rc.0; everything in that entry still applies, including the two behaviour changes
29
- under **Changed** below. This RC adds one fix on top.
30
-
31
- ### Fixed
32
-
33
- - **The current view's title is no longer discarded when view derivation fails.** The error boundary
34
- added around the browser's view provider in 1.0.8-rc.0 returned a hardcoded empty view, so a throw
35
- anywhere after the document title had already been read (a hostile `location` getter, a
36
- user-supplied redactor) silently dropped a title that was perfectly good — the no-location path has
37
- always preserved it. The title is now read first under its own guard, and both failure paths report
38
- through the SDK's error handler instead of swallowing: a view provider failing on every event is a
39
- real signal, not something to hide.
40
-
41
- 1.0.8-rc.0 was verified end-to-end against a live deployment (batches accepted, envelope matching the
42
- golden wire format, `attributes.location` intact, zero console errors); this fix is additive to that.
43
-
44
- ## [1.0.8-rc.0]
45
-
46
- Superseded by 1.0.8-rc.1.
47
-
48
- Release candidate. Published under the `rc` dist-tag — `npm install @groundcover/browser@rc`.
49
-
50
- The public API is unchanged: the generated type declarations are byte-identical to 1.0.7, the
51
- published bundle contains the same 10 files, and the `/json/rum` wire format is unchanged (pinned by
52
- a golden characterization suite). The two behaviour changes below are the reason this ships as an
53
- RC rather than a patch.
16
+ - **A rotated session could report a `session_start_time` later than events it shipped with.** The
17
+ new session's start was stamped from a second `Date.now()` read taken *after* the rotation's
18
+ logging, buffer drain, host hooks and storage writes — milliseconds after the enricher had already
19
+ timestamped the very event that triggered the rotation. So the event that opened a session could
20
+ predate the session by a few milliseconds, and downstream that yields `endTime < startTime` and a
21
+ negative `durationMilli`. The start is now derived from the earliest trusted time that belongs to
22
+ the new session: the triggering event, any events a no-cluster flush left buffered, or the rotation
23
+ instant when neither qualifies. Candidates are only trusted within one idle window and never in the
24
+ future, so an `enrichEvent` that returns milliseconds where nanoseconds belong cannot backdate a
25
+ session — which matters because the start time also drives the max-duration and inactivity clocks,
26
+ and a 1970 value would otherwise rotate the session on every subsequent event. Rotations not driven
27
+ by an event, the id/start write order, and the activity-clock reset that keeps a rotated session
28
+ unconfirmed are all unchanged.
29
+
30
+ Two cases are deliberately out of scope and still behave as before: a start stamped at SDK
31
+ initialization (no events exist yet to reconcile against), and a client whose clock is uniformly
32
+ wrong (the start, the events and the current reading all share one offset, so the SDK cannot detect
33
+ it — the envelope stays self-consistent, but absolute correctness needs a trusted server clock).
34
+
35
+ - **`enrichEvent` no longer runs after session reconciliation.** The hook that drives session
36
+ rotation fired *before* `enrichEvent`, but it is `enrichEvent`'s return value that enters the
37
+ batch — so a hook that moved an event's timestamp earlier could ship an event predating the very
38
+ session it opened, defeating the ordering guarantee above for a supported transformation.
39
+ Reconciliation now runs on the final, enriched event, still before it is enqueued. `beforeSend`
40
+ ordering is unchanged, `enrichEvent` still receives the pre-enrichment event, and a throwing
41
+ `enrichEvent` still drops the event as before.
42
+
43
+ - **An unusable `enrichEvent` return value now drops the event.** The hook's result was cast to an
44
+ event and buffered with no runtime check, so a callback that forgot to return, or returned a scalar
45
+ or an object without a `type`, put `null` (or a bare value) into the `events` array on the wire. Such
46
+ a result is now rejected and **the event is discarded**, matching what an `enrichEvent` that *throws*
47
+ has always done. The un-enriched event is deliberately not sent as a fallback: `enrichEvent` is the
48
+ documented way to scrub `sendCustomEvent` payloads (which are not auto-redacted), so shipping the
49
+ original would leak exactly the data a failed scrubber was meant to remove. The SDK logs once rather
50
+ than on every event. A well-formed result, including one that replaces the event object wholesale, is
51
+ honoured exactly as before.
52
+
53
+ ## [1.0.8]
54
+
55
+ Stable release of the `1.0.8-rc.0` … `1.0.8-rc.7` line, plus one fix that landed after rc.7 (passing
56
+ `console.assert()` calls are no longer captured — first item under **Fixed**).
57
+
58
+ The public API is unchanged: `EventTypes`, `SDKOptions`, `PrivacyOptions` and `Redactor` are
59
+ structurally identical to 1.0.7, the published bundle contains the same 10 files, and the
60
+ `/json/rum` wire format is unchanged (pinned by a golden characterization suite). The generated
61
+ declarations are no longer byte-for-byte identical to 1.0.7 — core's internal event types are now
62
+ generic over the event vocabulary so the React Native package can extend it — but the exported
63
+ surface is the same and `attributes.location` is still on the browser event map. The two behaviour
64
+ changes below are the reason this shipped as an RC first rather than straight as a patch. The RC
65
+ line was verified end-to-end against a live deployment (batches accepted, envelope matching the
66
+ golden wire format, `attributes.location` intact, zero console errors).
54
67
 
55
68
  ### Changed
56
69
 
@@ -67,6 +80,24 @@ RC rather than a patch.
67
80
 
68
81
  ### Fixed
69
82
 
83
+ - **A passing `console.assert()` is no longer captured as a log.** `console.assert(cond, …)` prints
84
+ nothing when `cond` is truthy, but the SDK recorded *every* call as a `log` event — so assertions
85
+ that passed silently filled RUM with lines the console itself never showed. Only failing
86
+ assertions are captured now, matching the console's own semantics. Landed after `1.0.8-rc.7`,
87
+ alongside the React Native SDK, which hit this hard: RN's event-target shim asserts on every
88
+ DevTools-WebSocket event and stormed the listener.
89
+ - **`groundcover.startNavigation()` / `endNavigation()` can no longer throw into your code.** The
90
+ manual navigation API read `location.href` with no error boundary, so on a page with an
91
+ instrumented or restricted `location` getter the exception propagated out of the SDK and into the
92
+ caller's own stack. The automatic navigation path was already contained; these two now are as
93
+ well. Pre-existing since before the core extraction, and unrelated to it.
94
+ - **The current view's title is no longer discarded when view derivation fails.** The error boundary
95
+ around the browser's view provider returned a hardcoded empty view, so a throw anywhere after the
96
+ document title had already been read (a hostile `location` getter, a user-supplied redactor)
97
+ silently dropped a title that was perfectly good — the no-location path has always preserved it.
98
+ The title is now read first under its own guard, and both failure paths report through the SDK's
99
+ error handler instead of swallowing: a view provider failing on every event is a real signal, not
100
+ something to hide.
70
101
  - **Session rotation could stop permanently if a host hook threw.** The in-progress flag was set
71
102
  before the host's rotation-context hook ran but only cleared in a `finally` that the hook sat
72
103
  outside, so a throw left it stuck — silently disabling all further session rotation for the life
package/README.md CHANGED
@@ -410,6 +410,17 @@ Sessions are also bounded by a 30-minute inactivity gap, enforced the same lazy
410
410
  best-effort and the rotation always proceeds regardless of delivery success. Invalid values fall
411
411
  back to the default with a `console.warn`.
412
412
 
413
+ **When a rotated session starts.** A new session's `session_start_time` is taken from the earliest
414
+ event that belongs to it — normally the very event that triggered the rotation — rather than from the
415
+ instant the rotation ran. The two differ by the few milliseconds the rotation itself takes, and using
416
+ the later value would report a session as starting *after* an event it carries, which reads downstream
417
+ as a negative duration. Candidates are only accepted if they are no older than one inactivity window
418
+ and not in the future, so a `beforeSend`/`enrichEvent` hook returning a wildly skewed timestamp cannot
419
+ move a session's start (the same value also drives the cap and inactivity clocks).
420
+
421
+ This assumes a fully configured SDK, which means `cluster` supplied at `init` — it is required, and
422
+ every other guarantee here is stated for that case.
423
+
413
424
  ### Micro-frontend session synchronization
414
425
 
415
426
  Pass a shared `sessionId` so multiple frontends report under one session:
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("error-stack-parser"),t=require("web-vitals"),n=require("rrweb"),r=require("@rrweb/packer"),i=require("fflate");function s(e){return e&&e.__esModule?e:{default:e}}var o=s(e),a=console.log.bind(console),l=class e{constructor(){this.isDebugEnabled=!1,this.prefix=""}static initialize(t){return e.instance||(e.instance=new e),t&&(e.instance.isDebugEnabled=t.debug??!1,e.instance.prefix=t.prefix??""),e.instance}static getInstance(t){return e?.instance||e.initialize(t)}formatMessage(e){return`[${(new Date).toISOString()}] ${this.prefix} ${e}`}log(e,...t){this.isDebugEnabled&&a(this.formatMessage(e),...t)}updateConfig(e){this.isDebugEnabled=e.debug??this.isDebugEnabled,this.prefix=e.prefix??this.prefix}},c=l.getInstance();function h(e){c.log("[error-handler.handleError] called",e,{groundcoverIgnore:!0})}var d=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)u[e]=Math.floor(16*Math.random())+48,u[e]>=58&&(u[e]+=39);return p+String.fromCharCode.apply(null,u.slice(0,16))},this.generateSpanId=g(8),this.generateId=g(16)}},u=Array(32);function g(e){return function(){for(let t=0;t<2*e;t++)u[t]=Math.floor(16*Math.random())+48,u[t]>=58&&(u[t]+=39);return String.fromCharCode.apply(null,u.slice(0,2*e))}}var p="0000000000000000";function f({text:e,maxLength:t=1e4,ellipsis:n=""}){if(null==e)return"";const r="string"==typeof e?e:String(e);return r.length<=t?r:r.substring(0,t)+n}function m(e){return(e||"").replace(/\s+/g," ").trim()}var v=globalThis,y=1e6;function b(e){return e*y}function w(e){return e/y}function S(e){if(null==e||"object"!=typeof e)return!1;try{return"number"==typeof e.nodeType&&"string"==typeof e.nodeName&&"ownerDocument"in e}catch{return!1}}var E="[REDACTED]",k=["authorization","cookie","set-cookie"],T=/(token|key|secret|passwd|password|auth|bearer|credential)/i,I=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,R=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),L=1e5;function M(e,t){if(!e)return!1;if(I.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function x(e,t){return R.has(e.toLowerCase())||M(e,t)}function q(e){return e.includes("-")&&T.test(e)}function A(e,t){return M(e,t)||q(e)}function N(e,t){const n=e.sensitive?E:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return h(e),n}}function C(e,t={}){if(!e)return e;try{return e.split("&").map((e=>{const n=e.indexOf("=");if(-1===n)return e;const r=e.slice(0,n),i=e.slice(n+1);let s=r;try{s=decodeURIComponent(r)}catch{}let o=i;try{o=decodeURIComponent(i)}catch{}const a=x(s,t.sensitiveKeys),l=N({key:s,value:o,path:[s],kind:t.kind??"query",sensitive:a},t.redact);return l===o?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function H(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${C(e.slice(n+1),t)}`}function z(e,t={}){if(!e)return e;const n={...t,kind:t.kind??"query"},r=e.indexOf("#"),i=-1===r?e:e.slice(0,r),s=-1===r?"":e.slice(r+1),o=H(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${E}@`))}(i),n);return-1===r?o:`${o}#${H(s,n)}`}function _(e,t,n,r,i,s){const o=!!e&&M(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(o||i>8)return E;if(S(t))return E;if(s.has(t))return E;s.add(t);try{if(Array.isArray(t))return t.map((t=>_(e,t,n,r,i+1,s)));const o={};for(const[e,a]of Object.entries(t))o[e]=_(e,a,[...n,e],r,i+1,s);return o}catch(e){return h(e),E}finally{s.delete(t)}}return N({key:e,value:t,path:n,kind:r.kind??"log",sensitive:o},r.redact)}function P(e,t={}){if(!e)return e;if(e.length>L)return`${P(e.slice(0,L),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>A(n,t.sensitiveKeys)?`"${n}":"${E}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return x(e,t)||q(e)}(n,t.sensitiveKeys)?`${n}=${E}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>A(n,t.sensitiveKeys)?`${n}: ${E}`:e))}catch(t){h(t),n=e}if(t.redact)try{const n=t.redact({key:"",value:e,path:[],kind:t.kind??"log",sensitive:!1});if(void 0!==n)return null===n?"":String(n)}catch(e){h(e)}return n}function D(e,t={}){try{const n=_("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return h(e),{}}}function F(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:P(t,r),attributes:n?D(n,r):n}}var O=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.pool=e.pool,this.enricher=e.enricher}sendCustomEvent(e){this.logger.log("[manual-event-emitter.sendCustomEvent] called",e);try{const t=this.enricher.enrich({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.pool.addEvent(t)}catch(e){h(e)}}emitLog(e,t,n){this.logger.log("[manual-event-emitter.emitLog] called",{message:e,level:t,attributes:n});try{const r={...n||{}};delete r.message,delete r.level,delete r.location;const{message:i,attributes:s}=F(this.config.getPrivacy(),e,r),o=this.enricher.enrich({type:"log",attributes:{...s,message:f({text:i}),level:t}});this.pool.addEvent(o)}catch(e){h(e)}}},B=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.eventsPool=e.eventsPool,this.enricher=e.enricher}};function j(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function K(e){const t=e.getPrivacy(),n=e.getConfig()?.providedOptions?.privacy;return{...t,maskSelectors:j(n?.maskSelectors)}}var U="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function X(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Y(e){try{const t=U?.call(e);return"string"==typeof t?t:""}catch{return""}}function $(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function W(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>X(e,t))).filter(Boolean)}(e).some((e=>M(e,t))))}function Q(e,t){return"allow"!==t.level&&(!!e&&(!!$(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>$(e,t))))||("mask-all"===t.level||function(e){const t=Y(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&W(e,t.sensitiveKeys)))))}var G={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},V=["button","a","input","select","textarea","label","summary",'[role~="button"]','[role~="link"]','[role~="menuitem"]','[role~="menuitemcheckbox"]','[role~="menuitemradio"]','[role~="tab"]','[role~="checkbox"]','[role~="radio"]','[role~="switch"]','[role~="option"]','[role~="treeitem"]','[role~="slider"]','[role~="spinbutton"]','[role~="combobox"]','[role~="textbox"]','[role~="searchbox"]'].join(", "),J=[V,"li","option","tr","td","th",'[role~="listitem"]','[role~="row"]','[role~="gridcell"]','[role~="cell"]'].join(", ");function Z(e){return!!e&&1===e.nodeType}function ee(e){const t=Y(e).toLowerCase();return"body"===t||"html"===t}function te(e){return f({text:e,maxLength:255})}function ne(e){return f({text:e,maxLength:99,ellipsis:"…"})}function re(e){const t=m(X(e,"role"));return t?t.split(" ")[0]??t:function(e){switch(Y(e).toLowerCase()){case"a":return X(e,"href")?"link":"";case"button":return"button";case"input":switch(X(e,"type").toLowerCase()){case"checkbox":return"checkbox";case"radio":return"radio";case"submit":case"button":case"reset":return"button";case"range":return"slider";case"number":return"spinbutton";default:return"textbox"}case"textarea":return"textbox";case"select":return"combobox";case"img":return"img";case"nav":return"navigation";case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"heading";default:return""}}(e)}function ie(e){if(!Z(e))return"";try{if(ee(e))return"";if(function(e){try{return e.querySelectorAll(J).length>=2}catch{return!1}}(e))return"";const t=m(e.textContent||"");return t?t.length>1e3?"":f({text:t,maxLength:255}):""}catch{return""}}function se(e){return X(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5)}function oe(e,t){if(ee(e))return"";const n=function(e){const t=[];for(const n of se(e))try{const e=ie(document.getElementById(n));e&&t.push(e)}catch{}return m(t.join(" "))}(e);if(n)return ne(n);const r=m(X(e,"aria-label"));if(r)return ne(r);const i=m(X(e,"alt"));if(i)return ne(i);if(function(e){const t=Y(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=X(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=m(X(e,"value"));if(t)return ne(t)}const s=t??ie(e);if(s)return ne(s);const o=m(X(e,"title"));if(o)return ne(o);const a=m(X(e,"placeholder"));return a?ne(a):""}function ae(e,t){if("allow"===t.level)return!1;try{return!!e.querySelector("[data-private]")||t.maskSelectors.some((t=>{try{return null!=e.querySelector(t)}catch{return!1}}))}catch{return!1}}var le=class extends B{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.getShouldMaskText=e=>Q(e.target,K(this.config)),this.getKeyCode=(e,t)=>e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key?t?"*":e.key:"",this.getCoordinates=e=>{if({mouseup:!0,mousedown:!0,mousemove:!0,mouseover:!0}[e.type]){const{clientX:t,clientY:n}=e||{};return{clientX:t,clientY:n}}return null}}initialize(){try{this.logger.log("[dom-events-listener.initialize] called"),this.capturedEvents?.forEach((e=>{const t=e=>{try{this.handleEvent(e)}catch(e){h(e)}};this.eventHandlers.push({type:e,handler:t}),v?.addEventListener(e,t)}))}catch(e){h(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}buildEvent(e){const t=this.getCoordinates(e),n=e.target,r=function(e){if(!Z(e))return null;try{return e.closest(V)}catch{return null}}(n)??n,i=K(this.config),s=this.getShouldMaskText({target:n||null})||!!r&&(ae(r,i)||function(e,t){if("allow"===t.level)return!1;try{for(const n of se(e)){const e=document.getElementById(n);if(e&&ie(e)&&(Q(e,t)||ae(e,t)))return!0}}catch{}return!1}(r,i)),o=r?this.generateSelector(r,s?{priorityAttributes:["id","class","name","type"]}:{}):"",a=this.getKeyCode(e,s),l=ie(r),c=function(e,t){if(!Z(e))return{...G};try{return{role:te(re(e)),accessibleName:oe(e,t),ariaLabel:te(m(X(e,"aria-label"))),title:te(m(X(e,"title"))),alt:te(m(X(e,"alt"))),placeholder:te(m(X(e,"placeholder"))),name:te(X(e,"name")),inputType:te(X(e,"type")),href:te(X(e,"href"))}}catch{return{...G}}}(r,l),h=i.shouldMaskNetworkQueryParams?z(c.href,{sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"}):c.href,d=e=>s&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");const u={dom_event_selector:o,dom_event_key_code:a,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:X(r,"id"),tagName:Y(r),className:X(r,"class"),text:s?"*":l,role:c.role,accessibleName:d(c.accessibleName),ariaLabel:d(c.ariaLabel),title:d(c.title),alt:d(c.alt),placeholder:d(c.placeholder),name:c.name,inputType:c.inputType,href:d(h)}};return this.enricher.enrich({type:"dom.event",attributes:u})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const n=t.root||document.body||document.documentElement,r=t.maxAttempts||10,i=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===Y(e).toLowerCase())return"html";let s="",o=0,a=e;const l=[];for(;a&&a!==n&&a!==document.documentElement&&o<r;){let e=Y(a).toLowerCase();try{const t=a.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(a.classList?.length){const t=Array.from(a.classList).filter((e=>e&&"string"==typeof e)).map((e=>`.${e}`));t.length&&(e+=t.join(""))}for(const t of i)if("id"!==t&&"class"!==t)try{const n=a.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Y(a).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{a=a.parentElement}catch(e){break}o++}return s||"*"}},ce=["log","info","warn","error","debug","assert","trace"],he=class extends B{constructor(){super(...arguments),this.originalConsole=null,this.patchedConsole=null,this.isInitialized=!1}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods();const e={};ce.forEach((t=>{if(!(t in console))return;const n=(...e)=>{try{this.isInitialized&&this.handleEvent(e,t)}catch(e){h(e)}finally{this.originalConsole?.[t]&&this.originalConsole[t](...e)}};console[t]=n,e[t]=n})),this.patchedConsole=e,this.isInitialized=!0}catch(e){h(e)}}destroy(){try{if(!this.isInitialized)return;ce.forEach((e=>{this.originalConsole?.[e]&&this.patchedConsole?.[e]&&console[e]===this.patchedConsole[e]&&(console[e]=this.originalConsole[e])})),this.patchedConsole=null,this.isInitialized=!1}catch(e){h(e)}}handleEvent(e,t){try{if(!this.enricher.shouldSample())return;const n=Array.isArray(e)?e:[e],r=this.formatMessage(n,t);if(!r||r?.includes("groundcoverIgnore"))return;const i=this.extractAttributes(n),s=this.buildEvent({message:r,level:t,attributes:i});this.queueEvent(s)}catch(e){h(e)}}buildEvent({message:e,level:t,attributes:n}){const{message:r,attributes:i}=F(this.config.getPrivacy(),e,n);return this.enricher.enrich({type:"log",attributes:{...i,message:f({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const n of e)null!==n&&"object"==typeof n&&"[object Object]"===Object.prototype.toString.call(n)&&Object.assign(t,n);return delete t.message,delete t.level,delete t.location,t}catch(e){return void h(e)}}formatMessage(e,t){if(!Array.isArray(e))return String(e);try{return e.map((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if("object"==typeof e){if(e instanceof Error)try{return"error"===t&&e.stack||e.toString()}catch{try{const t={name:e.name,message:e.message,stack:e.stack};return JSON.stringify(t)}catch{return Object.prototype.toString.call(e)}}try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}return String(e)})).join(" ")}catch(e){return h(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{ce.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){h(e)}return e}};function de(e){try{if(null==e)return"";if("string"==typeof e)return e;if("undefined"!=typeof FormData&&e instanceof FormData)return"[form data]";if("undefined"!=typeof Blob&&e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if(ArrayBuffer.isView(e))return"[arraybuffer data]";if("undefined"!=typeof ReadableStream&&e instanceof ReadableStream)return"[stream data]";if(9===e?.nodeType)return"[document data]";if("undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams)try{return e.toString()}catch{return"[unreadable body]"}return Array.isArray(e)||"object"==typeof e?JSON.stringify(e):String(e)}catch(e){return h(`Failed to format body: ${e}`),"[unreadable body]"}}var ue="[request body too large]",ge="[request body unavailable]",pe="[response body too large]",fe="[response body unavailable]",me="[unreadable response body]",ve="[form data]",ye="[binary data]",be=class extends B{constructor(){super(...arguments),this.maxBodyLength=5e3,this.requestBodyReadTimeoutMs=3e3,this.responseBodyReadTimeoutMs=3e3,this.idGenerator=new d,this.patched=null,this.active=!1,this.handleEvent=e=>{try{if(!this.active)return;if(this.shouldIgnoreRequest(e.url))return;if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}},this.buildEvent=e=>{let t=e.url,n=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const r=this.config.getPrivacy(),i={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};try{t=new URL(e.url).pathname}catch(s){n=new URL(e.url,globalThis.location.href).href,r.shouldMaskNetworkQueryParams&&(t=z(t,i))}r.shouldMaskNetworkQueryParams&&(n=z(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),o=this.formatHeaders(e.response.headers),a=e.method?.toUpperCase()||"UNKNOWN",{traceId:l,spanId:c}=this.extractTraceIds(e.request.headers),h=(e,t)=>r.shouldMaskNetworkBodies?function(e,t={}){if(!e)return e;const n=e.trim();if(n.length<=L&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(_("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?C(e,t):P(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=f({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=f({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),g={type:"HTTP",operation:{name:a},resource_name:t,status:e.status?.toString(),subType:a,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:o,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:u}}},p={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?b(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?b(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:g};return l&&(p.traceId=l),c&&(p.spanId=c),this.enricher.enrich(p)}}async readBodyStreamCapped(e,t={}){if(!e)return"";const{timeoutMs:n,overflowPlaceholder:r,timeoutPlaceholder:i}=t,s=e.getReader(),o=new TextDecoder;let a,l="",c=0,h=!1,d=!1;const u=null!=n?new Promise((e=>{a=setTimeout((()=>e({timedOut:!0})),n)})):void 0;try{for(;;){const e=u?await Promise.race([s.read(),u]):await s.read();if("timedOut"in e){d=!0;break}const{done:t,value:n}=e;if(t)break;if(c+n.byteLength>=this.maxBodyLength){const e=n.subarray(0,this.maxBodyLength-c);l+=o.decode(e,{stream:!0}),h=!0;break}c+=n.byteLength,l+=o.decode(n,{stream:!0})}return l+=o.decode(),d&&null!=i?i:h&&null!=r?r:l}finally{clearTimeout(a);try{s.cancel()?.catch((()=>{}))}catch{}}}mimeEssence(e){return(e.split(";")[0]||"").trim().toLowerCase()}isTextualContentType(e){const t=this.mimeEssence(e);return!!t&&(!!t.startsWith("text/")||("application/x-www-form-urlencoded"===t||"application/javascript"===t||"application/ecmascript"===t||"application/graphql"===t||/^application\/([\w.-]+\+)?(json|xml)$/.test(t)))}binaryLabel(e){const t=this.mimeEssence(e);return t.startsWith("image/")?"[image data]":t.startsWith("audio/")?"[audio data]":t.startsWith("video/")?"[video data]":t.startsWith("font/")||t.startsWith("application/font")||"application/vnd.ms-fontobject"===t?"[font data]":"application/pdf"===t?"[pdf data]":"application/zip"===t||"application/gzip"===t||"application/x-gzip"===t||"application/x-tar"===t||"application/x-7z-compressed"===t||"application/x-rar-compressed"===t?"[archive data]":"application/wasm"===t?"[wasm data]":t.includes("protobuf")||t.startsWith("application/grpc")?"[protobuf data]":ye}classifyByContentType(e){const t=(e||"").toLowerCase();return t.includes("multipart/form-data")?ve:this.isTextualContentType(t)?null:this.binaryLabel(t)}capBodyText(e,t){return e&&(e.length>=this.maxBodyLength||(new TextEncoder).encode(e).length>=this.maxBodyLength)?t:e}async getRequestBody(e,t){try{if(!e.body)return"";const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.requestBodyReadTimeoutMs,overflowPlaceholder:ue,timeoutPlaceholder:ge})}catch{return ge}}async getResponseBody(e){if(!e.body)return"";const t=e.headers?.get?.("content-type")??"";if("text/event-stream"===this.mimeEssence(t))return me;const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.responseBodyReadTimeoutMs,overflowPlaceholder:pe,timeoutPlaceholder:fe})}initialize(){this.logger.log("[network-events-listener.initialize] called");const e=globalThis.fetch,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;try{this.patchXHR(),this.patchFetch()}catch(i){return globalThis.fetch=e,globalThis.XMLHttpRequest.prototype.open=t,globalThis.XMLHttpRequest.prototype.send=n,globalThis.XMLHttpRequest.prototype.setRequestHeader=r,this.patched=null,void h(i)}this.patched={originalFetch:e,wrappedFetch:globalThis.fetch,originalXHROpen:t,wrappedXHROpen:globalThis.XMLHttpRequest.prototype.open,originalXHRSend:n,wrappedXHRSend:globalThis.XMLHttpRequest.prototype.send,originalXHRSetRequestHeader:r,wrappedXHRSetRequestHeader:globalThis.XMLHttpRequest.prototype.setRequestHeader},this.active=!0}destroy(){this.active=!1;const e=this.patched;e&&(globalThis.fetch===e.wrappedFetch&&(globalThis.fetch=e.originalFetch),globalThis.XMLHttpRequest.prototype.open===e.wrappedXHROpen&&(globalThis.XMLHttpRequest.prototype.open=e.originalXHROpen),globalThis.XMLHttpRequest.prototype.send===e.wrappedXHRSend&&(globalThis.XMLHttpRequest.prototype.send=e.originalXHRSend),globalThis.XMLHttpRequest.prototype.setRequestHeader===e.wrappedXHRSetRequestHeader&&(globalThis.XMLHttpRequest.prototype.setRequestHeader=e.originalXHRSetRequestHeader),this.patched=null)}shouldIgnoreRequest(e){try{const t=this.config.getConfig()?.getEndpoint();if(t&&e.includes(t))return!0;if([".tsx",".jsx",".css"].some((t=>e.toLowerCase().endsWith(t))))return!0;return(this.config.getConfig()?.options?.excludedUrls||[]).some((t=>{if(t instanceof RegExp)return t.test(e);if("string"==typeof t&&(t.includes("*")||t.includes("?"))){const n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(n).test(e)}return e===t}))}catch(e){return h(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;let i;globalThis.XMLHttpRequest.prototype.open=function(n,r,s=!0,o,a){if(!e.active)return t.apply(this,[n,r,s,o,a]);if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,o,a]);const l=new URL(r.toString(),globalThis.location.href).href;return this._requestMethod=n,this._requestUrl=l,this._requestHeaders={},t.apply(this,[n,r,s,o,a])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(t,n){return e.active?(this._requestHeaders&&(this._requestHeaders[t]=n),r.apply(this,[t,n])):r.apply(this,[t,n])},globalThis.XMLHttpRequest.prototype.send=function(...t){if(!e.active)return n.apply(this,t);const r=this._requestUrl?.toString();if(!r||e.shouldIgnoreRequest(r))return n.apply(this,t);if(e.shouldAddTraceHeader(r)){const t=e.config.getConfig(),n=e.getTraceIds();t?.options?.tracing?.origin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),n&&(t?.options?.tracing?.traceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId}),Boolean(t?.options?.tracing?.propagationHeaders)&&t?.options?.tracing?.propagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:n.traceparent})})),t?.options?.tracing?.propagationHeaders?.length||e.addHeaderToXhrRequest({request:this,headerName:"traceparent",headerValue:n.traceparent}))}return this._requestBody=t[0]||"",this.addEventListener("load",(()=>{const t=Date.now(),n={};this.getAllResponseHeaders().split(/\r?\n/).forEach((e=>{const[t,r]=e.split(": ");t&&r&&(n[t.trim()]=r.trim())}));const r=e.capBodyText(de(this._requestBody),ue),s=""===this.responseType||"text"===this.responseType,o=s?this.responseText:this.response,a=(s?e.classifyByContentType(n["content-type"]||""):null)??e.capBodyText(de(o),pe),l={timestamp:i,end_time:t,method:this._requestMethod,url:this._requestUrl,body:r,status:this.status,request:{headers:this._requestHeaders||{},body:r},response:{headers:n,body:a}};e.handleEvent(l)})),n.apply(this,t)}}normalizeHeaders(e,t){try{const n=e?new Headers(e):new Headers;return t?(t instanceof Headers?t.forEach(((e,t)=>n.set(t,e))):Array.isArray(t)?new Headers(t).forEach(((e,t)=>n.set(t,e))):"object"==typeof t&&Object.entries(t).forEach((([e,t])=>n.set(e,t))),n):n}catch{return new Headers}}addTraceHeaders(e){const t=this.config.getConfig(),n=this.getTraceIds();if(t?.options?.tracing?.origin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),!n)return;t?.options?.tracing?.traceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId});const r=t?.options?.tracing?.propagationHeaders;(r?.length?r:["traceparent"]).forEach((t=>{this.addHeaderToFetchRequest({init:e,headerName:t,headerValue:n.traceparent})}))}extractHeadersRecord(e){const t={};return e instanceof Headers&&e.forEach(((e,n)=>{t[n]=e})),t}patchFetch(){const e=globalThis.fetch;globalThis.fetch=(...t)=>{if(!this.active)return e.apply(globalThis,t);const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,o=i?.method||(s?r.method:"GET"),a=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(a))return e.apply(globalThis,t);const l=this.shouldAddTraceHeader(a);i.headers=this.normalizeHeaders(s?r.headers:void 0,i.headers),l&&this.addTraceHeaders(i);const c=this.extractHeadersRecord(i.headers),h=null!=i?.body?this.capBodyText(de(i.body),ue):"",d=null!=i?.body?Promise.resolve(h):s?this.getRequestBody(r,"content-type"in c?c["content-type"]:r.headers.get("content-type")??""):Promise.resolve("");let u;return d.then((e=>{u=e})).catch((()=>{})),e.apply(globalThis,t).then((e=>{const t=Date.now(),r={};e.headers.forEach(((e,t)=>{r[t]=e}));const i={method:o,url:a,timestamp:n,body:"",status:e.status,end_time:t,request:{headers:c,body:""},response:{headers:r,body:""}},s=()=>{d.then((e=>{i.body=e,i.request.body=e,this.handleEvent(i)}))};return this.getResponseBody(e).then((e=>{i.response.body=e,s()})).catch((e=>{i.response.body=me,s(),this.logger.log("[network-events-listener.patchFetch] error",{error:e})})),e})).catch((e=>{const t=Date.now();let r="NetworkError";const i=e.message||"Unknown network error";e instanceof TypeError&&i.includes("Failed to fetch")?r="ERR_NETWORK_FAILURE":i.includes("Name not resolved")?r="ERR_NAME_NOT_RESOLVED":i.includes("Connection refused")&&(r="ERR_CONNECTION_REFUSED");const s=u??h,l={method:o,url:a,timestamp:n,body:s,status:0,end_time:t,request:{headers:c,body:s},response:{headers:{},body:""},error:{type:r}};throw this.handleEvent(l),e}))}}formatHeaders(e){const t=this.config.getPrivacy(),n="allow"===t.level,r=function(e,t={}){return e?Object.entries(e).reduce(((e,[n,r])=>{const i=n.toLowerCase(),s=N({key:n,value:r,path:[n],kind:"header",sensitive:k.includes(i)||T.test(i)||M(n,t.sensitiveKeys)},t.redact);return e[n]=null===s?"":String(s),e}),{}):e}(e,{sensitiveKeys:n?void 0:t.sensitiveKeys,redact:n?void 0:t.redact});return Object.entries(r)?.reduce(((e,[t,n])=>(e[t]=f({text:n}),e)),{})}extractTraceIds(e){const t=this.config.getConfig();let n="",r="";if(t?.options?.tracing?.traceIdHeaderName){const r=e[t.options.tracing.traceIdHeaderName];r&&"string"==typeof r&&(n=r)}if(t?.options?.tracing?.spanIdHeaderName){const n=e[t.options.tracing.spanIdHeaderName];n&&"string"==typeof n&&(r=n)}if(!n||!r){const t=this.extractTraceparentHeader(e);if(t){const e=t.split("-");4===e.length&&"00"===e[0]&&(!n&&e[1]&&32===e[1].length&&(n=e[1]),!r&&e[2]&&16===e[2].length&&(r=e[2]))}}return{traceId:n,spanId:r}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracing?.propagationHeaders?.length)for(const n of t.options.tracing.propagationHeaders){const t=e[n];if(t&&"string"==typeof t)return t}const n=e.traceparent;return n&&"string"==typeof n?n:""}getTraceIds(){const e=this.idGenerator.generateSpanId(),t=this.idGenerator.generateTraceId();let n,r;try{n=BigInt("0x"+t).toString(10),r=BigInt("0x"+e).toString(10)}catch(i){this.logger.log("[network-events-listener.getTraceIds] error",{error:i}),n=t,r=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:n,decimalSpanId:r}}addHeaderToXhrRequest({request:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToXhrRequest] called",{request:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.setRequestHeader(t,n),e._requestHeaders[t]=n}catch(e){this.logger.log("[network-events-listener.addHeaderToXhrRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToXhrRequest] Invalid header name",{headerName:t})}addHeaderToFetchRequest({init:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToFetchRequest] called",{init:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.headers instanceof Headers?e.headers.set(t,n):e.headers={...e.headers,[t]:n}}catch(e){this.logger.log("[network-events-listener.addHeaderToFetchRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToFetchRequest] Invalid header name",{headerName:t})}isValidHeaderName(e){if(!e||"string"!=typeof e)return!1;return/^[a-zA-Z0-9!#$&'*+\-.^_`|~]+$/.test(e)}shouldAddTraceHeader(e){const t=this.config.getConfig();if(this.logger.log("[network-events-listener.shouldAddTraceHeader] called",{url:e,config:t}),!t?.options?.tracing?.propagationUrls?.length)return!1;const n=t.options.tracing.propagationUrls?.some((t=>{const n=t.replace(/\*/g,".*"),r=new RegExp(`^${n}$`),i=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return r.test(i)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:n}),n}},we=class extends B{constructor(){super(...arguments),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const r=this.buildEvent(n,t);this.queueEvent(r)}catch(e){h(e)}}}initialize(){v?.addEventListener("error",this.handleEvent),v?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){v?.removeEventListener("error",this.handleEvent),v?.removeEventListener("unhandledrejection",this.handleEvent)}buildEvent(e,t){const n=this.config.getPrivacy(),r=n.shouldMaskErrors,i={sensitiveKeys:n.sensitiveKeys,redact:n.redact,kind:"error"},s=e.message||"Unknown error",o=r?P(s,i):s,a=r&&t?.metadata?D(t.metadata,i):t?.metadata,l={error_type:e.name||"Error",error_message:o,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${f({text:o,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:a};return this.enricher.enrich({type:"exception",attributes:l})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}enhanceError(e,t){const{filename:n,lineno:r,colno:i}=t||{};n&&!e.fileName&&Object.defineProperty(e,"fileName",{value:n}),r&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:r}),i&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:i})}createUnhandledRejectionError(e){let t;if(e.reason instanceof Error)t=e.reason;else{const n="object"==typeof e.reason?JSON.stringify(e.reason,null,2):String(e.reason);t=new Error(n),t.name="UnhandledRejection",Object.defineProperty(t,"originalReason",{value:e.reason,enumerable:!1})}return t}buildStackTrace(e){if(!e)return[];try{return o.default.parse(e).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Se=class extends B{constructor(e,{isEnabled:t}){if(super(e),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.patchedPushState=null,this.patchedReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&t)try{this.isAutomaticNavigationEnabled=t,this.currentUrl=v.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){h(e)}}isInBrowserEnvironment(){try{return void 0!==v&&void 0!==v.location&&void 0!==v.history&&"function"==typeof v.addEventListener}catch(e){return h(e),!1}}initialize(){try{if(this.logger.log("[navigation-listener.initialize] called"),!this.isInBrowserEnvironment()||!this.originalPushState||!this.originalReplaceState)return void this.logger.log("[navigation-listener.initialize] Browser environment not available, skipping initialization");if(!this.isAutomaticNavigationEnabled)return void this.logger.log("[navigation-listener.initialize] Automatic navigation is disabled, skipping initialization");const e=this.originalPushState,t=this.originalReplaceState,n=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},r=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n};history.pushState=n,history.replaceState=r,this.patchedPushState=n,this.patchedReplaceState=r,v&&"function"==typeof v.addEventListener&&(v.addEventListener("popstate",this.popStateHandler),v.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){h(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState===this.patchedPushState&&(history.pushState=this.originalPushState),history.replaceState===this.patchedReplaceState&&(history.replaceState=this.originalReplaceState)),this.patchedPushState=null,this.patchedReplaceState=null,v&&"function"==typeof v.removeEventListener&&(v.removeEventListener("popstate",this.popStateHandler),v.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){h(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){h(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",v.location.href);const e=this.config.getPrivacy(),t="allow"===e.level,n=v.location.href,r=this.activeNavigation?.metadata,i={page_url:e.shouldMaskNetworkQueryParams?z(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?D(r,{sensitiveKeys:e.sensitiveKeys,redact:e.redact}):r,duration_ms:this.activeNavigation?.duration_ms||0,start_timestamp:this.activeNavigation?.startTime||0,end_timestamp:this.activeNavigation?.endTime||0};return this.enricher.enrich({type:"navigation",attributes:i})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}startNavigation(e){try{this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:v?.location?.href||"",metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}catch(e){h(e)}}endNavigation(e){try{if(this.logger.log("[navigation-listener.endNavigation] called",e),!this.activeNavigation)return void this.logger.log("[navigation-listener.endNavigation] no active navigation found");this.logger.log("[navigation-listener.endNavigation] active navigation",this.activeNavigation),this.activeNavigation.endTime=Date.now(),this.activeNavigation.duration_ms=this.activeNavigation.endTime-this.activeNavigation.startTime,this.handleEvent()}catch(e){h(e)}}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===v.location.href)return;let e,t;try{e=new URL(v.location.href),t=new URL(this.currentUrl)}catch(e){return void h(e)}const n=e=>e.startsWith("#/"),r=n(e.hash)||n(t.hash);(e.pathname!==t.pathname||r&&e.hash!==t.hash)&&(this.currentUrl=v.location.href,this.handleEvent())}catch(e){h(e)}}},Ee=class extends B{constructor(e){super(e),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",v),"complete"===v?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):v?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),h(e)}}destroy(){v?.removeEventListener("load",this.loadEventHandler)}handleEvent(){try{this.logger.log("[page-load-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){h(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,n=performance.getEntriesByType("resource"),r={count:n.length,totalSize:0,totalDuration:0,byType:{}};n.forEach((e=>{const t=e,n=t.transferSize||0,i=t.duration,s=t.initiatorType;r.totalSize+=n,r.totalDuration+=i,r.byType[s]||(r.byType[s]={count:0,size:0,duration:0}),r.byType[s].count++,r.byType[s].size+=n,r.byType[s].duration+=i}));const i=this.config.getPrivacy(),s=i.shouldMaskNetworkQueryParams,o={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},a=v?.location?.href||"",l=v?.document?.referrer||"",c={page_url:s?z(a,o):a,page_load_time:t,page_referrer:s?z(l,o):l,page_resources:r};return this.enricher.enrich({type:"pageload",attributes:c})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},ke=class extends B{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}}initialize(){t.onCLS(this.handleEvent),t.onLCP(this.handleEvent),t.onFCP(this.handleEvent),t.onTTFB(this.handleEvent),t.onINP(this.handleEvent)}destroy(){}buildEvent(e){const t={performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""};return this.enricher.enrich({type:"performance",attributes:t})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},Te=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.consecutiveTimeouts=0,this.isAvailable=!1,this.logger=l.getInstance(),"undefined"==typeof Worker||"undefined"==typeof URL||"undefined"==typeof Blob)return;const e=new Blob(['!function(){"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,t=new r([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),f=new r([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(r,t){for(var f=new n(31),o=0;o<31;++o)f[o]=t+=1<<r[o-1];var a=new e(f[30]);for(o=1;o<30;++o)for(var i=f[o];i<f[o+1];++i)a[i]=i-f[o]<<5|o;return{b:f,r:a}},i=a(t,2),u=i.b,v=i.r;u[28]=258,v[258]=28;var s=a(f,0).r,l=new n(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>1|(21845&Y)<<1))>>2|(13107&Q)<<2))>>4|(3855&Q)<<4,l[Y]=((65280&Q)>>8|(255&Q)<<8)>>1;var c=function(r,e,t){for(var f=r.length,o=0,a=new n(e);o<f;++o)r[o]&&++a[r[o]-1];var i,u=new n(e);for(o=1;o<e;++o)u[o]=u[o-1]+a[o-1]<<1;for(i=new n(f),o=0;o<f;++o)r[o]&&(i[o]=l[u[r[o]-1]++]>>15-r[o]);return i},h=new r(288);for(Y=0;Y<144;++Y)h[Y]=8;for(Y=144;Y<256;++Y)h[Y]=9;for(Y=256;Y<280;++Y)h[Y]=7;for(Y=280;Y<288;++Y)h[Y]=8;var w=new r(32);for(Y=0;Y<32;++Y)w[Y]=5;var g=c(h,9),d=c(w,5),m=function(r){return(r+7)/8|0},p=function(n,e,t){return(null==t||t>n.length)&&(t=n.length),new r(n.subarray(e,t))},y=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8},M=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8,r[t+2]|=e>>16},b=function(e,t){for(var f=[],o=0;o<e.length;++o)e[o]&&f.push({s:o,f:e[o]});var a=f.length,i=f.slice();if(!a)return{t:U,l:0};if(1==a){var u=new r(f[0].s+1);return u[f[0].s]=1,{t:u,l:1}}f.sort((function(r,n){return r.f-n.f})),f.push({s:-1,f:25001});var v=f[0],s=f[1],l=0,c=1,h=2;for(f[0]={s:-1,f:v.f+s.f,l:v,r:s};c!=a-1;)v=f[f[l].f<f[h].f?l++:h++],s=f[l!=c&&f[l].f<f[h].f?l++:h++],f[c++]={s:-1,f:v.f+s.f,l:v,r:s};var w=i[0].s;for(o=1;o<a;++o)i[o].s>w&&(w=i[o].s);var g=new n(w+1),d=k(f[c-1],g,0);if(d>t){o=0;var m=0,p=d-t,y=1<<p;for(i.sort((function(r,n){return g[n.s]-g[r.s]||r.f-n.f}));o<a;++o){var M=i[o].s;if(!(g[M]>t))break;m+=y-(1<<d-g[M]),g[M]=t}for(m>>=p;m>0;){var b=i[o].s;g[b]<t?m-=1<<t-g[b]++-1:++o}for(;o>=0&&m;--o){var x=i[o].s;g[x]==t&&(--g[x],++m)}d=t}return{t:new r(g),l:d}},k=function(r,n,e){return-1==r.s?Math.max(k(r.l,n,e+1),k(r.r,n,e+1)):n[r.s]=e},x=function(r){for(var e=r.length;e&&!r[--e];);for(var t=new n(++e),f=0,o=r[0],a=1,i=function(r){t[f++]=r},u=1;u<=e;++u)if(r[u]==o&&u!=e)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=r[u]}return{c:t.subarray(0,f),n:e}},A=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},C=function(r,n,e){var t=e.length,f=m(n+2);r[f]=255&t,r[f+1]=t>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},T=function(r,e,a,i,u,v,s,l,m,p,k){y(e,k++,a),++u[256];for(var T=b(u,15),E=T.t,U=T.l,D=b(v,15),S=D.t,I=D.l,j=x(E),z=j.c,J=j.n,N=x(S),O=N.c,q=N.n,B=new n(19),F=0;F<z.length;++F)++B[31&z[F]];for(F=0;F<O.length;++F)++B[31&O[F]];for(var G=b(B,7),H=G.t,K=G.l,L=19;L>4&&!H[o[L-1]];--L);var P,Q,R,V,W=p+5<<3,X=A(u,h)+A(v,w)+s,Y=A(u,E)+A(v,S)+s+14+3*L+A(B,H)+2*B[16]+3*B[17]+7*B[18];if(m>=0&&W<=X&&W<=Y)return C(e,k,r.subarray(m,m+p));if(y(e,k,1+(Y<X)),k+=2,Y<X){P=c(E,U),Q=E,R=c(S,I),V=S;var Z=c(H,K);y(e,k,J-257),y(e,k+5,q-1),y(e,k+10,L-4),k+=14;for(F=0;F<L;++F)y(e,k+3*F,H[o[F]]);k+=3*L;for(var $=[z,O],_=0;_<2;++_){var rr=$[_];for(F=0;F<rr.length;++F){var nr=31&rr[F];y(e,k,Z[nr]),k+=H[nr],nr>15&&(y(e,k,rr[F]>>5&127),k+=rr[F]>>12)}}}else P=g,Q=h,R=d,V=w;for(F=0;F<l;++F){var er=i[F];if(er>255){M(e,k,P[(nr=er>>18&31)+257]),k+=Q[nr+257],nr>7&&(y(e,k,er>>23&31),k+=t[nr]);var tr=31&er;M(e,k,R[tr]),k+=V[tr],tr>3&&(M(e,k,er>>5&8191),k+=f[tr])}else M(e,k,P[er]),k+=Q[er]}return M(e,k,P[256]),k+Q[256]},E=new e([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),U=new r(0),D=function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var e=n,t=9;--t;)e=(1&e&&-306674912)^e>>>1;r[n]=e}return r}(),S=function(o,a,i,u,l){if(!l&&(l={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),h=new r(c.length+o.length);h.set(c),h.set(o,c.length),o=h,l.w=c.length}return function(o,a,i,u,l,c){var h=c.z||o.length,w=new r(u+h+5*(1+Math.ceil(h/7e3))+l),g=w.subarray(u,w.length-l),d=c.l,y=7&(c.r||0);if(a){y&&(g[0]=c.r>>3);for(var M=E[a-1],b=M>>13,k=8191&M,x=(1<<i)-1,A=c.p||new n(32768),U=c.h||new n(x+1),D=Math.ceil(i/3),S=2*D,I=function(r){return(o[r]^o[r+1]<<D^o[r+2]<<S)&x},j=new e(25e3),z=new n(288),J=new n(32),N=0,O=0,q=c.i||0,B=0,F=c.w||0,G=0;q+2<h;++q){var H=I(q),K=32767&q,L=U[H];if(A[K]=L,U[H]=K,F<=q){var P=h-q;if((N>7e3||B>24576)&&(P>423||!d)){y=T(o,g,0,j,z,J,O,B,G,q-G,y),B=N=O=0,G=q;for(var Q=0;Q<286;++Q)z[Q]=0;for(Q=0;Q<30;++Q)J[Q]=0}var R=2,V=0,W=k,X=K-L&32767;if(P>2&&H==I(q-X))for(var Y=Math.min(b,P)-1,Z=Math.min(32767,q),$=Math.min(258,P);X<=Z&&--W&&K!=L;){if(o[q+R]==o[q+R-X]){for(var _=0;_<$&&o[q+_]==o[q+_-X];++_);if(_>R){if(R=_,V=X,_>Y)break;var rr=Math.min(X,_-2),nr=0;for(Q=0;Q<rr;++Q){var er=q-X+Q&32767,tr=er-A[er]&32767;tr>nr&&(nr=tr,L=er)}}}X+=(K=L)-(L=A[K])&32767}if(V){j[B++]=268435456|v[R]<<18|s[V];var fr=31&v[R],or=31&s[V];O+=t[fr]+f[or],++z[257+fr],++J[or],F=q+R,++N}else j[B++]=o[q],++z[o[q]]}}for(q=Math.max(q,F);q<h;++q)j[B++]=o[q],++z[o[q]];y=T(o,g,d,j,z,J,O,B,G,q-G,y),d||(c.r=7&y|g[y/8|0]<<3,y-=7,c.h=U,c.p=A,c.i=q,c.w=F)}else{for(q=c.w||0;q<h+d;q+=65535){var ar=q+65535;ar>=h&&(g[y/8|0]=d,ar=h),y=C(g,y+1,o.subarray(q,ar))}c.i=h}return p(w,0,u+m(y)+l)}(o,null==a.level?6:a.level,null==a.mem?l.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(o.length)))):20:12+a.mem,i,u,l)},I=function(r,n,e){for(;e;++n)r[n]=e,e>>>=8};function j(r,n){n||(n={});var e=function(){var r=-1;return{p:function(n){for(var e=r,t=0;t<n.length;++t)e=D[255&e^n[t]]^e>>>8;r=e},d:function(){return~r}}}(),t=r.length;e.p(r);var f,o=S(r,n,10+((f=n).filename?f.filename.length+1:0),8),a=o.length;return function(r,n){var e=n.filename;if(r[0]=31,r[1]=139,r[2]=8,r[8]=n.level<2?4:9==n.level?2:0,r[9]=3,0!=n.mtime&&I(r,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){r[3]=8;for(var t=0;t<=e.length;++t)r[t+10]=e.charCodeAt(t)}}(o,n),I(o,a-8,e.d()),I(o,a-4,t),o}var z="undefined"!=typeof TextEncoder&&new TextEncoder,J="undefined"!=typeof TextDecoder&&new TextDecoder;try{J.decode(U,{stream:!0})}catch(r){}var N=Uint8Array,O=Uint16Array,q=Uint32Array,B=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),F=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),G=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),H=function(r,n){for(var e=new O(31),t=0;t<31;++t)e[t]=n+=1<<r[t-1];var f=new q(e[30]);for(t=1;t<30;++t)for(var o=e[t];o<e[t+1];++o)f[o]=o-e[t]<<5|t;return[e,f]},K=H(B,2),L=K[0],P=K[1];L[28]=258,P[258]=28;var Q,R=H(F,0)[1],V=new O(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>>1|(21845&Y)<<1))>>>2|(13107&Q)<<2))>>>4|(3855&Q)<<4,V[Y]=((65280&Q)>>>8|(255&Q)<<8)>>>1;var W=function(r,n,e){for(var t=r.length,f=0,o=new O(n);f<t;++f)++o[r[f]-1];var a,i=new O(n);for(f=0;f<n;++f)i[f]=i[f-1]+o[f-1]<<1;for(a=new O(t),f=0;f<t;++f)a[f]=V[i[r[f]-1]++]>>>15-r[f];return a},X=new N(288);for(Y=0;Y<144;++Y)X[Y]=8;for(Y=144;Y<256;++Y)X[Y]=9;for(Y=256;Y<280;++Y)X[Y]=7;for(Y=280;Y<288;++Y)X[Y]=8;var Y,Z=new N(32);for(Y=0;Y<32;++Y)Z[Y]=5;var $=W(X,9),_=W(Z,5),rr=function(r){return(r/8|0)+(7&r&&1)},nr=function(r,n,e){(null==e||e>r.length)&&(e=r.length);var t=new(r instanceof O?O:r instanceof q?q:N)(e-n);return t.set(r.subarray(n,e)),t},er=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8},tr=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8,r[t+2]|=e>>>16},fr=function(r,n){for(var e=[],t=0;t<r.length;++t)r[t]&&e.push({s:t,f:r[t]});var f=e.length,o=e.slice();if(!f)return[new N(0),0];if(1==f){var a=new N(e[0].s+1);return a[e[0].s]=1,[a,1]}e.sort((function(r,n){return r.f-n.f})),e.push({s:-1,f:25001});var i=e[0],u=e[1],v=0,s=1,l=2;for(e[0]={s:-1,f:i.f+u.f,l:i,r:u};s!=f-1;)i=e[e[v].f<e[l].f?v++:l++],u=e[v!=s&&e[v].f<e[l].f?v++:l++],e[s++]={s:-1,f:i.f+u.f,l:i,r:u};var c=o[0].s;for(t=1;t<f;++t)o[t].s>c&&(c=o[t].s);var h=new O(c+1),w=or(e[s-1],h,0);if(w>n){t=0;var g=0,d=w-n,m=1<<d;for(o.sort((function(r,n){return h[n.s]-h[r.s]||r.f-n.f}));t<f;++t){var p=o[t].s;if(!(h[p]>n))break;g+=m-(1<<w-h[p]),h[p]=n}for(g>>>=d;g>0;){var y=o[t].s;h[y]<n?g-=1<<n-h[y]++-1:++t}for(;t>=0&&g;--t){var M=o[t].s;h[M]==n&&(--h[M],++g)}w=n}return[new N(h),w]},or=function(r,n,e){return-1==r.s?Math.max(or(r.l,n,e+1),or(r.r,n,e+1)):n[r.s]=e},ar=function(r){for(var n=r.length;n&&!r[--n];);for(var e=new O(++n),t=0,f=r[0],o=1,a=function(r){e[t++]=r},i=1;i<=n;++i)if(r[i]==f&&i!=n)++o;else{if(!f&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(f),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(f);o=1,f=r[i]}return[e.subarray(0,t),n]},ir=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},ur=function(r,n,e){var t=e.length,f=rr(n+2);r[f]=255&t,r[f+1]=t>>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},vr=function(r,n,e,t,f,o,a,i,u,v,s){er(n,s++,e),++f[256];for(var l=fr(f,15),c=l[0],h=l[1],w=fr(o,15),g=w[0],d=w[1],m=ar(c),p=m[0],y=m[1],M=ar(g),b=M[0],k=M[1],x=new O(19),A=0;A<p.length;++A)x[31&p[A]]++;for(A=0;A<b.length;++A)x[31&b[A]]++;for(var C=fr(x,7),T=C[0],E=C[1],U=19;U>4&&!T[G[U-1]];--U);var D,S,I,j,z=v+5<<3,J=ir(f,X)+ir(o,Z)+a,N=ir(f,c)+ir(o,g)+a+14+3*U+ir(x,T)+(2*x[16]+3*x[17]+7*x[18]);if(z<=J&&z<=N)return ur(n,s,r.subarray(u,u+v));if(er(n,s,1+(N<J)),s+=2,N<J){D=W(c,h),S=c,I=W(g,d),j=g;var q=W(T,E);er(n,s,y-257),er(n,s+5,k-1),er(n,s+10,U-4),s+=14;for(A=0;A<U;++A)er(n,s+3*A,T[G[A]]);s+=3*U;for(var H=[p,b],K=0;K<2;++K){var L=H[K];for(A=0;A<L.length;++A){var P=31&L[A];er(n,s,q[P]),s+=T[P],P>15&&(er(n,s,L[A]>>>5&127),s+=L[A]>>>12)}}}else D=$,S=X,I=_,j=Z;for(A=0;A<i;++A)if(t[A]>255){P=t[A]>>>18&31;tr(n,s,D[P+257]),s+=S[P+257],P>7&&(er(n,s,t[A]>>>23&31),s+=B[P]);var Q=31&t[A];tr(n,s,I[Q]),s+=j[Q],Q>3&&(tr(n,s,t[A]>>>5&8191),s+=F[Q])}else tr(n,s,D[t[A]]),s+=S[t[A]];return tr(n,s,D[256]),s+S[256]},sr=new q([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lr=function(r,n,e,t,f){return function(r,n,e,t,f,o){var a=r.length,i=new N(t+a+5*(1+Math.floor(a/7e3))+f),u=i.subarray(t,i.length-f),v=0;if(!n||a<8)for(var s=0;s<=a;s+=65535){var l=s+65535;l<a?v=ur(u,v,r.subarray(s,l)):(u[s]=o,v=ur(u,v,r.subarray(s,a)))}else{for(var c=sr[n-1],h=c>>>13,w=8191&c,g=(1<<e)-1,d=new O(32768),m=new O(g+1),p=Math.ceil(e/3),y=2*p,M=function(n){return(r[n]^r[n+1]<<p^r[n+2]<<y)&g},b=new q(25e3),k=new O(288),x=new O(32),A=0,C=0,T=(s=0,0),E=0,U=0;s<a;++s){var D=M(s),S=32767&s,I=m[D];if(d[S]=I,m[D]=S,E<=s){var j=a-s;if((A>7e3||T>24576)&&j>423){v=vr(r,u,0,b,k,x,C,T,U,s-U,v),T=A=C=0,U=s;for(var z=0;z<286;++z)k[z]=0;for(z=0;z<30;++z)x[z]=0}var J=2,G=0,H=w,K=S-I&32767;if(j>2&&D==M(s-K))for(var L=Math.min(h,j)-1,Q=Math.min(32767,s),V=Math.min(258,j);K<=Q&&--H&&S!=I;){if(r[s+J]==r[s+J-K]){for(var W=0;W<V&&r[s+W]==r[s+W-K];++W);if(W>J){if(J=W,G=K,W>L)break;var X=Math.min(K,W-2),Y=0;for(z=0;z<X;++z){var Z=s-K+z+32768&32767,$=Z-d[Z]+32768&32767;$>Y&&(Y=$,I=Z)}}}K+=(S=I)-(I=d[S])+32768&32767}if(G){b[T++]=268435456|P[J]<<18|R[G];var _=31&P[J],er=31&R[G];C+=B[_]+F[er],++k[257+_],++x[er],E=s+J,++A}else b[T++]=r[s],++k[r[s]]}}v=vr(r,u,o,b,k,x,C,T,U,s-U,v)}return nr(i,0,t+rr(v)+f)}(r,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(r.length)))):12+n.mem,e,t,!0)};function cr(r,n){void 0===n&&(n={});var e=function(){var r=1,n=0;return{p:function(e){for(var t=r,f=n,o=e.length,a=0;a!=o;){for(var i=Math.min(a+5552,o);a<i;++a)f+=t+=e[a];t%=65521,f%=65521}r=t,n=f},d:function(){return(r>>>8<<16|(255&n)<<8|n>>>8)+2*((255&r)<<23)}}}();e.p(r);var t,f,o,a=lr(r,n,2,4);return t=a,f=n.level,o=0==f?0:f<6?1:9==f?3:2,t[0]=120,t[1]=o<<6|(o?32-2*o:1),function(r,n,e){for(;e;++n)r[n]=e,e>>>=8}(a,a.length-4,e.d()),a}var hr=r=>{const n={...r,v:"v1"};return function(r){for(var n="",e=0;e<r.length;){var t=r[e++];n+=String.fromCharCode(t)}return n}(cr(function(r,n){var e=r.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(r);for(var t=new N(r.length+(r.length>>>1)),f=0,o=function(r){t[f++]=r},a=0;a<e;++a){if(f+5>t.length){var i=new N(f+8+(e-a<<1));i.set(t),t=i}var u=r.charCodeAt(a);u<128||n?o(u):u<2048?(o(192|u>>>6),o(128|63&u)):u>55295&&u<57344?(o(240|(u=65536+(1047552&u)|1023&r.charCodeAt(++a))>>>18),o(128|u>>>12&63),o(128|u>>>6&63),o(128|63&u)):(o(224|u>>>12),o(128|u>>>6&63),o(128|63&u))}return nr(t,0,f)}(JSON.stringify(n))))},wr=self;wr.onmessage=n=>{const e=n.data;if(!e||"number"!=typeof e.id||"pack-replay"!==e.op&&"encode-batch"!==e.op)return void(e&&"number"==typeof e.id&&wr.postMessage({id:e.id,ok:!1,error:"malformed message"}));const{id:t,op:f,payload:o}=e;try{if("pack-replay"===f){const r=o.events.map((r=>hr(r)));return void wr.postMessage({id:t,ok:!0,result:{packed:r}})}if("encode-batch"===f){const{json:n,compress:e}=o;if(!e){const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}try{const e=j(function(n,e){if(z)return z.encode(n);for(var t=n.length,f=new r(n.length+(n.length>>1)),o=0,a=function(r){f[o++]=r},i=0;i<t;++i){if(o+5>f.length){var u=new r(o+8+(t-i<<1));u.set(f),f=u}var v=n.charCodeAt(i);v<128||e?a(v):v<2048?(a(192|v>>6),a(128|63&v)):v>55295&&v<57344?(a(240|(v=65536+(1047552&v)|1023&n.charCodeAt(++i))>>18),a(128|v>>12&63),a(128|v>>6&63),a(128|63&v)):(a(224|v>>12),a(128|v>>6&63),a(128|63&v))}return p(f,0,o)}(n));return void wr.postMessage({id:t,ok:!0,result:{bytes:e,isCompressed:!0}},[e.buffer])}catch{const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}}wr.postMessage({id:t,ok:!1,error:"unknown op"})}catch(r){wr.postMessage({id:t,ok:!1,error:r instanceof Error?r.message:String(r)})}}}();'],{type:"application/javascript"}),t=URL.createObjectURL(e);try{this.worker=new Worker(t),Promise.resolve().then((()=>URL.revokeObjectURL(t))),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFatalFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.logger.log("[worker-client] worker onmessageerror — single message dropped, worker still alive"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){URL.revokeObjectURL(t),this.logger.log("[worker-client] failed to spawn worker, falling back to main thread:",e),this.worker=null,this.isAvailable=!1}}static getInstance(){return e.instance||(e.instance=new e),e.instance}static __resetForTests(){e.instance&&e.instance.terminate(),e.instance=null}static async withFallback(t,n,r){const i=e.getInstance();if(!i.isAvailable)return n();try{return await t(i)}catch(e){return l.getInstance().log(`[${r}] worker call failed, using inline fallback:`,e),n()}}packReplay(e){return this.dispatch("pack-replay",{events:e}).then((e=>e.packed))}encodeBatch(e,t){return this.dispatch("encode-batch",{json:e,compress:t}).then((e=>({data:e.bytes,isCompressed:e.isCompressed})))}terminate(){if(this.worker){try{this.worker.terminate()}catch(e){this.logger.log("[worker-client] failed to terminate worker:",e)}this.worker=null}this.isAvailable=!1,this.rejectAllPending(new Error("worker terminated")),e.instance===this&&(e.instance=null)}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,r=this.worker;return new Promise(((i,s)=>{const o=setTimeout((()=>{this.pending.has(n)&&(this.pending.delete(n),this.consecutiveTimeouts+=1,this.consecutiveTimeouts>=3&&this.handleFatalFailure("worker latched after 3 consecutive timeouts"),s(new Error("worker request timed out")))}),1500);this.pending.set(n,{resolve:i,reject:s,timeoutId:o});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(o),this.pending.delete(n),s(e instanceof Error?e:new Error(String(e)))}}))}handleMessage(e){const t=this.pending.get(e.id);t&&(clearTimeout(t.timeoutId),this.pending.delete(e.id),this.consecutiveTimeouts=0,e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFatalFailure(e,t){if(this.logger.log(`[worker-client] ${e}${t?": "+t:""}`),this.isAvailable=!1,this.rejectAllPending(new Error(e)),this.worker){try{this.worker.terminate()}catch{}this.worker=null}}rejectAllPending(e){for(const t of this.pending.values())clearTimeout(t.timeoutId),t.reject(e);this.pending.clear()}};Te.instance=null;var Ie=Te;var Re=class{constructor(e){this.logger=l.getInstance(),this.stopFn=null,this.isRecording=!1,this.events=[],this.startTime=0,this.batchSize=3,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,this.sendTimerId=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher}initialize(){this.logger.log("[session-replay-listener] initialize called"),this.isRecording?this.logger.log("[session-replay-listener] already recording"):this.startRecording()}startRecording(){try{this.startTime=Date.now(),this.events=[],this.isRecording=!0,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0;const e=this.configManager.getConfig()?.options?.replay,t=e?.blockedSelectors?.filter(Boolean),r=t?.length?t.join(", "):void 0,i=K(this.configManager),s=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=j(t?.maskSelectors),s=t?.replay,o="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,a="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;return l="mask-all"===n||!r&&void 0!==o?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0,{maskTextSelector:l,maskAllInputs:!r,maskTextFn:o,maskInputFn:a}}(this.configManager.getConfig()?.providedOptions),o=s.maskInputFn??("allow"===i.level?void 0:(e,t)=>Q(t,i)?"*".repeat(e.length):e);this.stopFn=n.record({...r?{blockSelector:r}:{},...s.maskTextSelector?{maskTextSelector:s.maskTextSelector}:{},maskAllInputs:s.maskAllInputs,...s.maskTextFn?{maskTextFn:s.maskTextFn}:{},...o?{maskInputFn:o}:{},slimDOMOptions:{script:!1,comment:!1,headWhitespace:!1},sampling:{mousemove:100,input:"last",scroll:150},checkoutEveryNms:3e4,emit:(e,t)=>{if(this.isRecording)try{this.events.push(e),t&&(this.batchContainsFullSnapshot=!0,this.fullSnapshotTimestamp=Date.now(),this.logger.log("[session-replay-listener] full snapshot captured at",this.fullSnapshotTimestamp)),this.events.length>=this.batchSize&&this.scheduleSendBatch()}catch(e){h(e),this.logger.log("[session-replay-listener] failed to process event in emit callback:",e)}}})||null,this.logger.log("[session-replay-listener] started recording with full snapshot interval:",3e4,"ms")}catch(e){h(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=v.setTimeout((()=>{this.sendTimerId=null,this.isRecording&&this.sendBatchAsync().catch((e=>{h(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}))}),0))}clearScheduledSend(){null!==this.sendTimerId&&(v.clearTimeout(this.sendTimerId),this.sendTimerId=null)}flushPendingSync(){this.clearScheduledSend(),0!==this.events.length&&this.sendBatchSync()}async sendBatchAsync(){if(0===this.events.length)return;const e=this.drainBatch(),t=this.session.getSessionId(),n=Ie.getInstance();let i;if(n.isAvailable)try{i=await n.packReplay(e.events)}catch(t){h(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),i=e.events.map((e=>r.pack(e)))}else i=e.events.map((e=>r.pack(e)));this.session.getSessionId()===t?this.enqueueReplayEvent(i,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during pack",{drained:i.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>r.pack(e)));this.enqueueReplayEvent(t,e.containsFullSnapshot,e.snapshotTimestamp)}drainBatch(){const e=this.events,t=this.batchContainsFullSnapshot,n=this.fullSnapshotTimestamp;return this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,{events:e,containsFullSnapshot:t,snapshotTimestamp:n}}enqueueReplayEvent(e,t,n){try{const r={_gc_replay_data:{events:e}};t&&(r.replay_is_full_snapshot=!0,r.replay_full_snapshot_timestamp=n);const i=this.enricher.enrich({type:"replay",attributes:r});this.eventsPool.addEvent(i),this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){h(e),this.logger.log("[session-replay-listener] failed to send batch:",e)}}stopRecording(){if(this.isRecording)try{this.clearScheduledSend(),this.stopFn?.(),this.isRecording=!1,this.events.length>0&&this.sendBatchSync(),this.stopFn=null,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0}catch(e){h(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},Le=144e5,Me=288e5,xe=18e5,qe="gcSample",Ae={eventSampleRate:1,sessionSampleRate:1,debug:!1,privacy:{level:"mask-sensitive"},enabledEvents:[],tracing:{propagationUrls:[],propagationHeaders:[],traceIdHeaderName:"",spanIdHeaderName:"",origin:{name:"",value:""}},transport:{batchSize:10,batchTimeout:1e4,compression:!0},replay:{},sessionMaxDuration:Le},Ne=["pointerdown","keydown","scroll","touchstart","mousemove"],Ce=class{constructor(e){this.logger=l.getInstance(),this.lastSignalMs=0,this.idleTimer=null,this.installed=!1,this.handleInput=()=>{const e=Date.now();if(!(e-this.lastSignalMs<3e4)){this.notePresence(e);try{this.callbacks.onPresence(e)}catch(e){h(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,Ne.forEach((e=>{try{v.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){h(e)}})),this.armIdleTimer(),this.logger.log("[user-presence-monitor] installed"))}notePresence(e){this.lastSignalMs=e,this.armIdleTimer()}resetIdleTimer(){this.armIdleTimer()}armIdleTimer(){try{this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null,this.idleTimer=setTimeout((()=>{this.idleTimer=null,this.logger.log("[user-presence-monitor] user idle for",xe,"ms");try{this.callbacks.onIdle()}catch(e){h(e)}}),xe)}catch(e){h(e)}}destroy(){if(this.installed){this.installed=!1,Ne.forEach((e=>{try{v.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){h(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){h(e)}finally{this.idleTimer=null}}}},He=class{constructor(e){this.logger=l.getInstance(),this.rotating=!1,this.session=e.session,this.pool=e.pool,this.idGenerator=e.idGenerator,this.activityEventTypes=e.activityEventTypes,this.ignoredEventTypes=e.ignoredEventTypes,this.hooks=e.hooks??{}}get isRotating(){return this.rotating}install(){this.pool.setBeforeEnqueueHook((e=>this.reconcileOnEnqueue(e))),this.pool.setFlushGate((()=>this.session.hasUserActivity()))}uninstall(e){this.pool.setBeforeEnqueueHook(null);try{e?.()}catch(e){h(e)}this.pool.setFlushGate(null)}reconcile(e,t){if(this.rotating)return;t&&this.session.isSessionInactive(e)&&this.rotate({reason:"inactivity gap"});const n=this.session.getSessionElapsedMs(e),r=this.session.getSessionMaxDuration(),i=n>=r;this.logger.log("[session-lifecycle] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:r,expired:i}),i&&this.rotate({reason:"max session duration"}),this.hooks.onReconcile?.(t),t&&(this.session.setLastActivityMs(e),this.hooks.onPresenceStamped?.(e))}reconcileOnEnqueue(e){this.rotating||(this.ignoredEventTypes.has(e.type)?this.logger.log("[session-lifecycle] enqueue rotation check: ignoring heartbeat-style event",e.type):this.reconcile(Date.now(),this.activityEventTypes.has(e.type)))}rotateIfStale(e,t){(this.session.isSessionInactive(e)||this.session.isSessionExpired(e))&&this.rotate({reason:t})}rotate(e){if(this.rotating)return;this.rotating=!0;const t=(e,t)=>{try{this.logger.log(`[session-lifecycle] session rotation: ${e}`),t()}catch(t){h(t),this.logger.log(`[session-lifecycle] failed to ${e} during session rotation:`,t)}};try{const n=this.session.getSessionId();let r;t("capture host rotation context",(()=>{r=this.hooks.captureRotationContext?.()}));const i=this.session.hasUserActivity();this.logger.log("[session-lifecycle] session rotation start",{reason:e.reason,previousId:n,wasConfirmed:i}),t("host beforeRotate",(()=>this.hooks.beforeRotate?.())),t(i?"flush events":"discard unconfirmed events",(()=>i?this.pool.flush():this.pool.discardBuffer())),t("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.session.setSessionId(e),this.session.setSessionStartTime(b(Date.now())),this.session.clearSamplingDecision(),this.logger.log("[session-lifecycle] session id rotated",{from:n,to:e})})),t("host afterRotate",(()=>this.hooks.afterRotate?.(r)))}finally{this.rotating=!1,this.logger.log("[session-lifecycle] session rotation complete",{reason:e.reason})}}},ze=new Set(["dom.event"]),_e=new Set(["replay"]),Pe=class{constructor(e){this.logger=l.getInstance(),this.idGenerator=new d,this.logEventsListener=null,this.domEventsListener=null,this.errorsEventsListener=null,this.networkEventsListener=null,this.navigationListener=null,this.performanceListener=null,this.pageLoadListener=null,this.sessionReplayListener=null,this.replayDesired=!1,this.presenceMonitor=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher,this.manualEvents=new O({config:this.configManager,pool:this.eventsPool,enricher:this.enricher}),this.lifecycle=new He({session:this.session,pool:this.eventsPool,idGenerator:this.idGenerator,activityEventTypes:ze,ignoredEventTypes:_e,hooks:{captureRotationContext:()=>this.isReplayRecording(),beforeRotate:()=>this.stopReplayListener(),afterRotate:e=>this.syncReplayState(e),onReconcile:e=>this.syncReplayState(e),onPresenceStamped:e=>this.presenceMonitor?.notePresence(e)}})}listenerDeps(){return{config:this.configManager,eventsPool:this.eventsPool,enricher:this.enricher}}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.lifecycle.install(),this.presenceMonitor?.destroy(),this.presenceMonitor=new Ce({onPresence:e=>this.lifecycle.reconcile(e,!0),onIdle:()=>this.pauseReplayOnIdle()}),this.presenceMonitor.initialize();const e=this.configManager.getConfig(),t=e?.options?.enabledEvents,n=!t||0===t.length,r=[];(n||t?.includes("pageload"))&&(this.pageLoadListener=new Ee(this.listenerDeps()),this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new le(this.listenerDeps()),this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new he(this.listenerDeps()),this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new we(this.listenerDeps()),this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new be(this.listenerDeps()),this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new ke(this.listenerDeps()),this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Se(this.listenerDeps(),{isEnabled:n||t?.includes("navigation")}),this.navigationListener.initialize(),r.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",r)}sendCustomEvent(e){this.manualEvents.sendCustomEvent(e)}emitLog(e,t,n){this.logEventsListener&&this.manualEvents.emitLog(e,t,n)}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){h(e)}}isNavigationTrackingEnabled(){const e=this.configManager.getConfig();return e?.options?.enabledEvents?.includes("navigation")||0===e?.options?.enabledEvents?.length}startNavigation(e){this.logger.log("[instrumentation-manager.startNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.startNavigation] startNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.startNavigation(e)}endNavigation(e){this.logger.log("[instrumentation-manager.endNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.endNavigation] endNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.endNavigation(e)}isReplayRecording(){return null!==this.sessionReplayListener}restartReplayForConfigChange(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] restarting replay to apply config change"),this.stopReplayListener(),this.startReplayListener())}startReplayRecording(){this.replayDesired=!0,this.isReplayRecording()?this.logger.log("[instrumentation-manager] replay recording already started"):(this.lifecycle.rotateIfStale(Date.now(),"replay start into stale session"),this.startReplayListener(),this.presenceMonitor?.resetIdleTimer())}stopReplayRecording(){this.replayDesired=!1,this.stopReplayListener()}flushPendingReplay(){this.sessionReplayListener?.flushPendingSync()}syncReplayState(e){this.replayDesired&&e&&!this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] user present and replay desired — starting replay"),this.startReplayListener())}pauseReplayOnIdle(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] pausing replay: user idle window elapsed"),this.stopReplayListener())}startReplayListener(){if(this.sessionReplayListener)this.logger.log("[instrumentation-manager] replay recording already started");else try{const e=new Re({...this.listenerDeps(),session:this.session});e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){h(e),this.logger.log("[instrumentation-manager] failed to start replay recording:",e)}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.lifecycle.uninstall((()=>{this.presenceMonitor?.destroy(),this.presenceMonitor=null,this.domEventsListener?.destroy(),this.logEventsListener?.destroy(),this.errorsEventsListener?.destroy(),this.networkEventsListener?.destroy(),this.navigationListener?.destroy(),this.performanceListener?.destroy(),this.pageLoadListener?.destroy(),this.sessionReplayListener?.destroy(),this.sessionReplayListener=null,this.replayDesired=!1}))}};function De(e){try{console.warn(e)}catch{}}function Fe(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var Oe=["privacy","tracing","transport","replay"],Be={tracing:"origin",privacy:"replay"};function je(e,t){if(!Fe(e))return e;const n={...e};return t&&Fe(n[t])&&(n[t]={...n[t]}),n}function Ke(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];Fe(i)&&Fe(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!Fe(s)?r[n]=Fe(i)?{...i}:i:Fe(r[n])&&(r[n]={...r[n]})}return r}function Ue(e,t){const n={...e,...t},r=t,i=e;for(const e of Oe){if(!Object.hasOwn(r,e)){Fe(i[e])&&(n[e]=je(i[e],Be[e]));continue}const t=r[e];Fe(t)?n[e]=Ke(i[e],t,Be[e]):n[e]=je(i[e],Be[e])}return n}var Xe=class e{constructor(t){this.dsn=t?.dsn||"",this.appId=t?.appId||"",this.cluster=t?.cluster||"",this.apiKey=t?.apiKey||"",this.environment=t?.environment||"",this.namespace=t?.namespace||"",this.releaseId=t?.releaseId,this.user=t?.user||null,this.providedOptions={...t?.options||{}},this.options=Ue(Ae,t?.options||{}),this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration),e.warnRemovedOptions(t?.options),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)}static stripRemovedOptions(t){const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&delete n[t]}static warnRemovedOptions(t){if(!t||"object"!=typeof t)return;const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&De(`[groundcover] \`options.${t}\` was removed in 1.0.0 and is ignored. Configure masking via \`options.privacy\` instead — see the migration guide: https://github.com/groundcover-com/rum/tree/main/packages/browser#migrating-to-100`)}static normalizeSessionMaxDuration(e){return void 0===e?Le:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>Me?(De("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),Le):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=Ue(this.providedOptions||{},t.options),this.options=Ue(this.options,t.options),void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration)),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)),void 0!==t.user&&(this.user=null===t.user?null:{...this.user,...t.user}),t.appId&&(this.appId=t.appId),t.dsn&&(this.dsn=t.dsn),t.apiKey&&(this.apiKey=t.apiKey),t.cluster&&(this.cluster=t.cluster),t.environment&&(this.environment=t.environment),t.namespace&&(this.namespace=t.namespace),t.releaseId&&(this.releaseId=t.releaseId)}};Xe.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var Ye=Xe,$e=class{constructor(){this.config=null,this.logger=l.getInstance(),this.privacyCache=null}initialize(e){this.config||(this.config=new Ye(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getPrivacy(){return this.privacyCache||(this.privacyCache=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=e=>!r&&(e??!0),s=i(t?.maskNetworkBodies),o=i(t?.maskNetworkQueryParams),a=i(t?.maskLogs),l=i(t?.maskErrors);return{level:n,maskNetworkBodies:s,maskNetworkQueryParams:o,maskLogs:a,maskErrors:l,shouldMaskNetworkBodies:!r&&s,shouldMaskNetworkQueryParams:!r&&o,shouldMaskLogs:!r&&a,shouldMaskErrors:!r&&l,sensitiveKeys:j(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0}}(this.config?.providedOptions)),this.privacyCache}updateConfig(e){this.logger.log("[config-manager] updateConfig called"),this.config?e&&(this.logger.log("[config-manager] updating options"),this.config.updateConfig(e),this.privacyCache=null):this.logger.log("[config-manager] configuration not initialized")}},We=Ae.transport?.batchSize??10,Qe=Ae.transport?.batchTimeout??1e4;var Ge=class{constructor(e){this.events=[],this.timeoutId=null,this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.flushGate=null,this.config=e.config,this.session=e.session,this.transporter=e.transporter,this.getDeviceAttributes=e.getDeviceAttributes,this.eventsToSkipFlush=e.eventsToSkipFlush}initialize(){try{if(this.initialized)return;this.scheduleFlush(),this.initialized=!0}catch(e){h(e)}}destroy(){try{null!==this.timeoutId&&(v.clearTimeout(this.timeoutId),this.timeoutId=null),this.events=[],this.initialized=!1}catch(e){h(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}setFlushGate(e){this.flushGate=e}discardBuffer(){this.events=[]}isFlushAllowed(){if(null===this.flushGate)return!0;try{return this.flushGate()}catch(e){return h(e),!0}}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;let i=e;if(n&&!n(i))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(i)}catch(e){h(e)}if(r&&(i=r(i)),!this.isFlushAllowed()&&this.events.length>=500)return;this.events.push(i);const s=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:We);this.events.length>=s&&!this.eventsToSkipFlush.includes(i.type)&&this.flush()}catch(e){h(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;if(!this.isFlushAllowed())return void this.scheduleFlush();if(!this.events?.length)return void this.scheduleFlush();if(!this.config.getConfig()?.cluster)return this.noClusterWarned||(this.noClusterWarned=!0,this.logger.log("[events-pool.flush] skipping flush: no cluster")),void this.scheduleFlush();this.noClusterWarned=!1;const t={sessionAttributes:this.getSessionAttributes(),events:this.events};e?this.transporter.send(t,{lifecycle:!0}):this.transporter.send(t),this.events=[],this.scheduleFlush()}catch(e){h(e)}}async flushSync(){try{if(!this.events?.length||!this.initialized)return;if(!this.isFlushAllowed())return void this.discardBuffer();if(!this.config.getConfig()?.cluster)return void this.logger.log("[events-pool.flush] skipping flush: no cluster");await this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[]}catch(e){h(e)}}scheduleFlush(){try{null!==this.timeoutId&&(v.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:Qe);this.timeoutId=v.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){h(e)}var e}getSessionAttributes(){const e=this.config.getConfig();return{...this.getDeviceAttributes(),cluster:e?.cluster||"",env:e?.environment||"",namespace:e?.namespace||"",releaseId:e?.releaseId||"",session_id:this.session.getSessionId(),session_start_time:this.session.getSessionStartTime(),user:e?.user||{},"service.name":e?.appId}}},Ve=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.enrichAttributes=e.enrichAttributes??null,this.idGenerator=e.idGenerator??new d}getPlatformAttributes(){if(!this.enrichAttributes)return{};try{return this.enrichAttributes()??{}}catch(e){return this.logger.log("[event-enricher] platform attribute contributor threw; continuing without it",e),{}}}shouldSample(){const e=this.config.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}formatEventObject(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:S(e)?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:n.has(e)?{[t||"circular_reference"]:"[Circular]"}:(n.add(e),Object.entries(e).reduce(((e,[i,s])=>{const o=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[o]=s.map(((e,t)=>"object"==typeof e&&null!==e?this.formatEventObject(e,`${o}[${t}]`,n,r+1):e)):Object.assign(e,this.formatEventObject(s,o,n,r+1)):e[o]=s,e}),{}))}catch(e){return this.logger.log("[event-enricher.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}enrich(e){const t=b(Date.now()),n=this.idGenerator.generateId(),r=e.spanId||this.idGenerator.generateSpanId(),i=e.traceId||this.idGenerator.generateTraceId(),s=e.parentSpanId||"",o=this.formatEventObject(e.attributes||{}),a=this.getPlatformAttributes(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...o,...a}};return e.span_name&&(l.span_name=e.span_name),"network"===e.type?(l.start_timestamp=e.timestamp||t,l.end_timestamp=e?.end_timestamp):l.timestamp=t,l}};function Je(e,t){if(!t)return{data:(new TextEncoder).encode(e),isCompressed:!1};try{const t=i.strToU8(e);return{data:i.gzipSync(t),isCompressed:!0}}catch(t){return{data:(new TextEncoder).encode(e),isCompressed:!1}}}var Ze=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.sendBatch=e.sendBatch,this.encodeAsync=e.encodeAsync??null}compressAsync(e,t){if(!this.encodeAsync)return Promise.resolve(Je(e,t));try{return this.encodeAsync(e,t).catch((()=>Je(e,t)))}catch{return Promise.resolve(Je(e,t))}}async send(e,{lifecycle:t=!1}={}){const n=this.config.getConfig();if(n)try{n?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const r=n.apiKey,i=this.buildEndpoint();if(!r)return void this.logger.log("No API key found");const s=JSON.stringify(e),o=!!n?.options?.transport?.compression,{data:a,isCompressed:l}=t?Je(s,o):await this.compressAsync(s,o),c={"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""};this.sendBatch(i,{method:"POST",headers:c,body:a}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){n?.options?.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();return e?`${e.getEndpoint()}/json/rum`:""}},et=class{constructor(e){this.storage=e}getItem(e){try{return this.storage?.getItem(e)??null}catch(e){return h(e),null}}setItem(e,t){try{this.storage?.setItem(e,t)}catch(e){h(e)}}removeItem(e){try{this.storage?.removeItem(e)}catch(e){h(e)}}getNumericItem(e,t=0){const n=this.getItem(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}},tt=class{constructor(e){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage=e.storage,this.getMaxDurationMs=e.getMaxDurationMs??null}getSessionId(){if(this.sessionId)return this.sessionId;return this.storage.getItem("gcId")||""}setSessionId(e){this.sessionId=e,this.storage.setItem("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:this.storage.getNumericItem("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,this.storage.setItem("gcStartTime",String(e)),this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcLastActivity")}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:this.storage.getNumericItem("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,this.storage.setItem("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs(),n=t>0?t:w(this.getSessionStartTime());return n>0&&e-n>=xe}hasUserActivity(){return this.getLastActivityMs()>0}clearSamplingDecision(){this.storage.removeItem(qe)}clearSessionState(){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcId"),this.storage.removeItem("gcStartTime"),this.storage.removeItem("gcLastActivity"),this.clearSamplingDecision()}getSessionMaxDuration(){return this.getMaxDurationMs?.()??Le}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-w(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}};function nt(){const e=navigator.userAgent;let t="unknown",n="unknown";const r=navigator.platform||"unknown",i=/Mobile|Android|iPhone|iPad|iPod/i.test(e);return/Edg/.test(e)?(t="Edge",n=e.match(/Edg\/([\d.]+)/)?.[1]||n):/Chrome/.test(e)&&!/Chromium/.test(e)?(t="Chrome",n=e.match(/Chrome\/([\d.]+)/)?.[1]||n):/Firefox/.test(e)?(t="Firefox",n=e.match(/Firefox\/([\d.]+)/)?.[1]||n):/Safari/.test(e)&&!/Chrome/.test(e)?(t="Safari",n=e.match(/Version\/([\d.]+)/)?.[1]||n):/Trident/.test(e)?(t="Internet Explorer",n=/rv:([^)]+)\)/i.test(e)?e.match(/rv:([^)]+)\)/i)?.[1]||n:e.match(/MSIE ([^;]+)/)?.[1]||n):/OPR/.test(e)&&(t="Opera",n=e.match(/OPR\/([\d.]+)/)?.[1]||n),{userAgent:e,browser:{name:t,version:n,platform:r,language:navigator.language,mobile:i}}}var rt,it=["navigation","dom.event"],st=class{constructor(e){this.core=null,this.hideWired=!1,this.hideHandler=()=>{try{if("undefined"==typeof document||"hidden"!==document.visibilityState)return;this.core?.session.persistLastActivity(),this.core?.pool.flush({lifecycle:!0})}catch(e){h(e)}},this.logger=l.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.storage=new et(function(){try{return void 0!==globalThis.sessionStorage?globalThis.sessionStorage:null}catch{return null}}()),this.idGenerator=new d;const t=new $e;t.initialize(e);const n=new tt({storage:this.storage,getMaxDurationMs:()=>t.getConfig()?.options?.sessionMaxDuration});!function({session:e,idGenerator:t,providedSessionId:n}){const r=l.getInstance();try{const i=e.getSessionId();n&&n!==i?(e.setSessionId(n),e.setSessionStartTime(b(Date.now())),e.clearSamplingDecision(),r.log("[session-bootstrap] using provided sessionId:",n)):n?(e.setSessionId(n),r.log("[session-bootstrap] continuing provided sessionId:",n)):i||e.setSessionId(t.generateId());const s=6e4,o=Date.now(),a=w(e.getSessionStartTime());if(a>0&&o-a>=-s){if(e.isSessionExpired(o)||e.isSessionInactive(o)){const n=e.isSessionExpired(o)?"persisted session past cap":"inactivity gap across reload",i=e.getSessionId(),s=t.generateId();e.setSessionId(s),e.setSessionStartTime(b(o)),e.clearSamplingDecision(),r.log(`[session-bootstrap] init-time rotation: ${n}`,{from:i,to:s})}}else e.setSessionStartTime(b(o))}catch(e){r.log("[session-bootstrap] session bootstrap failed:",e)}}({session:n,idGenerator:this.idGenerator,providedSessionId:e.sessionId});if(!function({storage:e,sessionSampleRate:t}){const n=l.getInstance();if(void 0===t||!Number.isFinite(t)||1===t)return!0;const r=t;try{const t=e.getItem(qe);if(t){const e="1"===t;return n.log("[session-bootstrap] using stored sampling decision:",e),e}const i=Math.random()<r;return e.setItem(qe,i?"1":"0"),n.log("[session-bootstrap] stored new sampling decision:",i),i}catch(e){n.log("[session-bootstrap] storage access failed:",e);const t=Math.random()<r;return n.log("[session-bootstrap] using fallback sampling decision:",t),t}}({storage:this.storage,sessionSampleRate:e.options?.sessionSampleRate}))return void this.logger.log("[session-manager] session is not sampled");const r=new Ze({config:t,sendBatch:(e,t)=>fetch(e,t),encodeAsync:(e,t)=>Ie.withFallback((n=>n.encodeBatch(e,t)),(()=>Je(e,t)),"transporter")}),i=new Ge({config:t,session:n,transporter:r,getDeviceAttributes:nt,eventsToSkipFlush:it}),s=function(e){return()=>{let t="";try{t=v?.document?.title||""}catch(e){h(e)}try{const n=v?.location;if(!n)return{path:"",url:"",title:t};const r=n.hash&&!n.hash.match(/^#[a-z0-9-]+$/i)&&n.hash.startsWith("#/"),i=r?n.hash:n.pathname,s=e.getPrivacy(),o=s.shouldMaskNetworkQueryParams,a={sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"};return{path:o&&r?z(i,a):i,url:o?z(n.href,a):n.href,title:t}}catch(e){return h(e),{path:"",url:"",title:t}}}}(t),o=new Ve({config:t,enrichAttributes:()=>({location:s()}),idGenerator:this.idGenerator}),a=new Pe({config:t,session:n,eventsPool:i,enricher:o});try{i.initialize(),Ie.getInstance(),this.wireHideHandler(),a.instrument(),this.core={config:t,session:n,pool:i,instrumentation:a}}catch(e){this.logger.log("[session-manager] initialization failed — tearing down partial startup:",e);try{a.uninstrument()}catch(e){h(e)}throw i.destroy(),this.unwireHideHandler(),this.core=null,e}}wireHideHandler(){if(!this.hideWired&&"undefined"!=typeof document){this.hideWired=!0;try{document.addEventListener("visibilitychange",this.hideHandler)}catch(e){h(e)}}}unwireHideHandler(){if(this.hideWired&&"undefined"!=typeof document){this.hideWired=!1;try{document.removeEventListener("visibilitychange",this.hideHandler)}catch(e){h(e)}}}identifyUser(e){this.logger.log("[session-manager] identifyUser called"),this.core?this.core.config.updateConfig({user:e}):this.logger.log("[session-manager] cannot identify user: SDK not initialized")}updateConfig(e){if(!this.core)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");this.core.config.updateConfig(e);const t=e.options,n=!!t&&"privacy"in t,r=!!t&&"object"==typeof t.replay&&null!==t.replay&&"blockedSelectors"in t.replay;(n||r)&&this.core.instrumentation.restartReplayForConfigChange()}sendCustomEvent(e){this.core?this.core.instrumentation.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.core?this.core.instrumentation.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.core?this.core.instrumentation.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.core?this.core.instrumentation.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.core?this.core.instrumentation.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.core?this.core.session.getSessionId():(this.logger.log("[session-manager] cannot get session ID: SDK not initialized"),"")}async setSessionId(e){if(this.logger.log("[session-manager] setSessionId called"),this.core)try{this.core.instrumentation.flushPendingReplay(),await this.core.pool.flushSync();const t=e||this.idGenerator.generateId();this.core.session.setSessionId(t),this.core.session.setSessionStartTime(b(Date.now())),this.logger.log("[session-manager] session ID set successfully:",t)}catch(e){this.logger.log("[session-manager] failed to set session ID:",e)}else this.logger.log("[session-manager] cannot set session ID: SDK not initialized")}startReplayRecording(){this.core?this.core.instrumentation.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.core?this.core.instrumentation.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}handoffForReinit(){const e=this.core;if(!e)return;const t=e.session.hasUserActivity();e.instrumentation.uninstrument(),t&&e.pool.flush({lifecycle:!0}),e.pool.destroy(),this.unwireHideHandler(),this.core=null}destroy(){const e=this.core;e&&(e.instrumentation.uninstrument(),e.pool.destroy(),this.unwireHideHandler(),Ie.getInstance().terminate(),e.session.clearSessionState(),this.core=null)}},ot=new class{constructor(e){this.manager=e}emit(e,t,n){this.manager&&this.manager.emitLog(t,e,n)}log(e,t){this.emit("log",e,t)}info(e,t){this.emit("info",e,t)}warn(e,t){this.emit("warn",e,t)}error(e,t){this.emit("error",e,t)}debug(e,t){this.emit("debug",e,t)}trace(e,t){this.emit("trace",e,t)}};var at={init:function(e){try{rt?.handoffForReinit(),rt=new st({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",user:e?.user,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),ot.manager=rt}catch(e){h(e)}},identifyUser:function(e){rt?rt.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){rt&&rt.sendCustomEvent(e)},captureException:function(e,t){rt&&rt.captureException(e,t)},logger:ot,updateConfig:function(e){if(rt)try{rt.updateConfig(e)}catch(e){h(e)}},startNavigation:function(e){rt?rt.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){rt?rt.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return rt?rt.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(rt)try{await rt.setSessionId(e)}catch(e){console.error("[groundcover] setSessionId: failed to set session ID:",e)}else console.warn("[groundcover] setSessionId: groundcover is not initialized. please call init() first")},startReplayRecording:function(){rt?rt.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){rt?rt.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=at}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var lt=at;module.exports=lt;
1
+ "use strict";var e=require("error-stack-parser"),t=require("web-vitals"),n=require("rrweb"),r=require("@rrweb/packer"),i=require("fflate");function s(e){return e&&e.__esModule?e:{default:e}}var o=s(e),a=console.log.bind(console),l=class e{constructor(){this.isDebugEnabled=!1,this.prefix=""}static initialize(t){return e.instance||(e.instance=new e),t&&(e.instance.isDebugEnabled=t.debug??!1,e.instance.prefix=t.prefix??""),e.instance}static getInstance(t){return e?.instance||e.initialize(t)}formatMessage(e){return`[${(new Date).toISOString()}] ${this.prefix} ${e}`}log(e,...t){this.isDebugEnabled&&a(this.formatMessage(e),...t)}updateConfig(e){this.isDebugEnabled=e.debug??this.isDebugEnabled,this.prefix=e.prefix??this.prefix}},c=l.getInstance();function h(e){c.log("[error-handler.handleError] called",e,{groundcoverIgnore:!0})}var d=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)u[e]=Math.floor(16*Math.random())+48,u[e]>=58&&(u[e]+=39);return p+String.fromCharCode.apply(null,u.slice(0,16))},this.generateSpanId=g(8),this.generateId=g(16)}},u=Array(32);function g(e){return function(){for(let t=0;t<2*e;t++)u[t]=Math.floor(16*Math.random())+48,u[t]>=58&&(u[t]+=39);return String.fromCharCode.apply(null,u.slice(0,2*e))}}var p="0000000000000000";function f({text:e,maxLength:t=1e4,ellipsis:n=""}){if(null==e)return"";const r="string"==typeof e?e:String(e);return r.length<=t?r:r.substring(0,t)+n}function m(e){return(e||"").replace(/\s+/g," ").trim()}var v=globalThis,y=1e6;function b(e){return e*y}function w(e){return e/y}function E(e){if(null==e||"object"!=typeof e)return!1;try{return"number"==typeof e.nodeType&&"string"==typeof e.nodeName&&"ownerDocument"in e}catch{return!1}}var S="[REDACTED]",k=["authorization","cookie","set-cookie"],T=/(token|key|secret|passwd|password|auth|bearer|credential)/i,I=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,R=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),L=1e5;function M(e,t){if(!e)return!1;if(I.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function x(e,t){return R.has(e.toLowerCase())||M(e,t)}function q(e){return e.includes("-")&&T.test(e)}function N(e,t){return M(e,t)||q(e)}function A(e,t){const n=e.sensitive?S:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return h(e),n}}function C(e,t={}){if(!e)return e;try{return e.split("&").map((e=>{const n=e.indexOf("=");if(-1===n)return e;const r=e.slice(0,n),i=e.slice(n+1);let s=r;try{s=decodeURIComponent(r)}catch{}let o=i;try{o=decodeURIComponent(i)}catch{}const a=x(s,t.sensitiveKeys),l=A({key:s,value:o,path:[s],kind:t.kind??"query",sensitive:a},t.redact);return l===o?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function H(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${C(e.slice(n+1),t)}`}function _(e,t={}){if(!e)return e;const n={...t,kind:t.kind??"query"},r=e.indexOf("#"),i=-1===r?e:e.slice(0,r),s=-1===r?"":e.slice(r+1),o=H(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${S}@`))}(i),n);return-1===r?o:`${o}#${H(s,n)}`}function z(e,t,n,r,i,s){const o=!!e&&M(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(o||i>8)return S;if(E(t))return S;if(s.has(t))return S;s.add(t);try{if(Array.isArray(t))return t.map((t=>z(e,t,n,r,i+1,s)));const o={};for(const[e,a]of Object.entries(t))o[e]=z(e,a,[...n,e],r,i+1,s);return o}catch(e){return h(e),S}finally{s.delete(t)}}return A({key:e,value:t,path:n,kind:r.kind??"log",sensitive:o},r.redact)}function P(e,t={}){if(!e)return e;if(e.length>L)return`${P(e.slice(0,L),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>N(n,t.sensitiveKeys)?`"${n}":"${S}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return x(e,t)||q(e)}(n,t.sensitiveKeys)?`${n}=${S}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>N(n,t.sensitiveKeys)?`${n}: ${S}`:e))}catch(t){h(t),n=e}if(t.redact)try{const n=t.redact({key:"",value:e,path:[],kind:t.kind??"log",sensitive:!1});if(void 0!==n)return null===n?"":String(n)}catch(e){h(e)}return n}function D(e,t={}){try{const n=z("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return h(e),{}}}function F(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:P(t,r),attributes:n?D(n,r):n}}var O=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.pool=e.pool,this.enricher=e.enricher}sendCustomEvent(e){this.logger.log("[manual-event-emitter.sendCustomEvent] called",e);try{const t=this.enricher.enrich({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.pool.addEvent(t)}catch(e){h(e)}}emitLog(e,t,n){this.logger.log("[manual-event-emitter.emitLog] called",{message:e,level:t,attributes:n});try{const r={...n||{}};delete r.message,delete r.level,delete r.location;const{message:i,attributes:s}=F(this.config.getPrivacy(),e,r),o=this.enricher.enrich({type:"log",attributes:{...s,message:f({text:i}),level:t}});this.pool.addEvent(o)}catch(e){h(e)}}},B=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.eventsPool=e.eventsPool,this.enricher=e.enricher}};function j(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function K(e){const t=e.getPrivacy(),n=e.getConfig()?.providedOptions?.privacy;return{...t,maskSelectors:j(n?.maskSelectors)}}var U="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function X(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Y(e){try{const t=U?.call(e);return"string"==typeof t?t:""}catch{return""}}function $(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function W(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>X(e,t))).filter(Boolean)}(e).some((e=>M(e,t))))}function Q(e,t){return"allow"!==t.level&&(!!e&&(!!$(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>$(e,t))))||("mask-all"===t.level||function(e){const t=Y(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&W(e,t.sensitiveKeys)))))}var G={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},V=["button","a","input","select","textarea","label","summary",'[role~="button"]','[role~="link"]','[role~="menuitem"]','[role~="menuitemcheckbox"]','[role~="menuitemradio"]','[role~="tab"]','[role~="checkbox"]','[role~="radio"]','[role~="switch"]','[role~="option"]','[role~="treeitem"]','[role~="slider"]','[role~="spinbutton"]','[role~="combobox"]','[role~="textbox"]','[role~="searchbox"]'].join(", "),J=[V,"li","option","tr","td","th",'[role~="listitem"]','[role~="row"]','[role~="gridcell"]','[role~="cell"]'].join(", ");function Z(e){return!!e&&1===e.nodeType}function ee(e){const t=Y(e).toLowerCase();return"body"===t||"html"===t}function te(e){return f({text:e,maxLength:255})}function ne(e){return f({text:e,maxLength:99,ellipsis:"…"})}function re(e){const t=m(X(e,"role"));return t?t.split(" ")[0]??t:function(e){switch(Y(e).toLowerCase()){case"a":return X(e,"href")?"link":"";case"button":return"button";case"input":switch(X(e,"type").toLowerCase()){case"checkbox":return"checkbox";case"radio":return"radio";case"submit":case"button":case"reset":return"button";case"range":return"slider";case"number":return"spinbutton";default:return"textbox"}case"textarea":return"textbox";case"select":return"combobox";case"img":return"img";case"nav":return"navigation";case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"heading";default:return""}}(e)}function ie(e){if(!Z(e))return"";try{if(ee(e))return"";if(function(e){try{return e.querySelectorAll(J).length>=2}catch{return!1}}(e))return"";const t=m(e.textContent||"");return t?t.length>1e3?"":f({text:t,maxLength:255}):""}catch{return""}}function se(e){return X(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5)}function oe(e,t){if(ee(e))return"";const n=function(e){const t=[];for(const n of se(e))try{const e=ie(document.getElementById(n));e&&t.push(e)}catch{}return m(t.join(" "))}(e);if(n)return ne(n);const r=m(X(e,"aria-label"));if(r)return ne(r);const i=m(X(e,"alt"));if(i)return ne(i);if(function(e){const t=Y(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=X(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=m(X(e,"value"));if(t)return ne(t)}const s=t??ie(e);if(s)return ne(s);const o=m(X(e,"title"));if(o)return ne(o);const a=m(X(e,"placeholder"));return a?ne(a):""}function ae(e,t){if("allow"===t.level)return!1;try{return!!e.querySelector("[data-private]")||t.maskSelectors.some((t=>{try{return null!=e.querySelector(t)}catch{return!1}}))}catch{return!1}}var le=class extends B{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.getShouldMaskText=e=>Q(e.target,K(this.config)),this.getKeyCode=(e,t)=>e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key?t?"*":e.key:"",this.getCoordinates=e=>{if({mouseup:!0,mousedown:!0,mousemove:!0,mouseover:!0}[e.type]){const{clientX:t,clientY:n}=e||{};return{clientX:t,clientY:n}}return null}}initialize(){try{this.logger.log("[dom-events-listener.initialize] called"),this.capturedEvents?.forEach((e=>{const t=e=>{try{this.handleEvent(e)}catch(e){h(e)}};this.eventHandlers.push({type:e,handler:t}),v?.addEventListener(e,t)}))}catch(e){h(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}buildEvent(e){const t=this.getCoordinates(e),n=e.target,r=function(e){if(!Z(e))return null;try{return e.closest(V)}catch{return null}}(n)??n,i=K(this.config),s=this.getShouldMaskText({target:n||null})||!!r&&(ae(r,i)||function(e,t){if("allow"===t.level)return!1;try{for(const n of se(e)){const e=document.getElementById(n);if(e&&ie(e)&&(Q(e,t)||ae(e,t)))return!0}}catch{}return!1}(r,i)),o=r?this.generateSelector(r,s?{priorityAttributes:["id","class","name","type"]}:{}):"",a=this.getKeyCode(e,s),l=ie(r),c=function(e,t){if(!Z(e))return{...G};try{return{role:te(re(e)),accessibleName:oe(e,t),ariaLabel:te(m(X(e,"aria-label"))),title:te(m(X(e,"title"))),alt:te(m(X(e,"alt"))),placeholder:te(m(X(e,"placeholder"))),name:te(X(e,"name")),inputType:te(X(e,"type")),href:te(X(e,"href"))}}catch{return{...G}}}(r,l),h=i.shouldMaskNetworkQueryParams?_(c.href,{sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"}):c.href,d=e=>s&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");const u={dom_event_selector:o,dom_event_key_code:a,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:X(r,"id"),tagName:Y(r),className:X(r,"class"),text:s?"*":l,role:c.role,accessibleName:d(c.accessibleName),ariaLabel:d(c.ariaLabel),title:d(c.title),alt:d(c.alt),placeholder:d(c.placeholder),name:c.name,inputType:c.inputType,href:d(h)}};return this.enricher.enrich({type:"dom.event",attributes:u})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const n=t.root||document.body||document.documentElement,r=t.maxAttempts||10,i=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===Y(e).toLowerCase())return"html";let s="",o=0,a=e;const l=[];for(;a&&a!==n&&a!==document.documentElement&&o<r;){let e=Y(a).toLowerCase();try{const t=a.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(a.classList?.length){const t=Array.from(a.classList).filter((e=>e&&"string"==typeof e)).map((e=>`.${e}`));t.length&&(e+=t.join(""))}for(const t of i)if("id"!==t&&"class"!==t)try{const n=a.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Y(a).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{a=a.parentElement}catch(e){break}o++}return s||"*"}},ce=["log","info","warn","error","debug","assert","trace"],he=class extends B{constructor(){super(...arguments),this.originalConsole=null,this.patchedConsole=null,this.isInitialized=!1}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods();const e={};ce.forEach((t=>{if(!(t in console))return;const n=(...e)=>{try{this.isInitialized&&this.handleEvent(e,t)}catch(e){h(e)}finally{this.originalConsole?.[t]&&this.originalConsole[t](...e)}};console[t]=n,e[t]=n})),this.patchedConsole=e,this.isInitialized=!0}catch(e){h(e)}}destroy(){try{if(!this.isInitialized)return;ce.forEach((e=>{this.originalConsole?.[e]&&this.patchedConsole?.[e]&&console[e]===this.patchedConsole[e]&&(console[e]=this.originalConsole[e])})),this.patchedConsole=null,this.isInitialized=!1}catch(e){h(e)}}handleEvent(e,t){try{if(!this.enricher.shouldSample())return;const n=Array.isArray(e)?e:[e];if("assert"===t&&n[0])return;const r=this.formatMessage(n,t);if(!r||r?.includes("groundcoverIgnore"))return;const i=this.extractAttributes(n),s=this.buildEvent({message:r,level:t,attributes:i});this.queueEvent(s)}catch(e){h(e)}}buildEvent({message:e,level:t,attributes:n}){const{message:r,attributes:i}=F(this.config.getPrivacy(),e,n);return this.enricher.enrich({type:"log",attributes:{...i,message:f({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const n of e)null!==n&&"object"==typeof n&&"[object Object]"===Object.prototype.toString.call(n)&&Object.assign(t,n);return delete t.message,delete t.level,delete t.location,t}catch(e){return void h(e)}}formatMessage(e,t){if(!Array.isArray(e))return String(e);try{return e.map((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if("object"==typeof e){if(e instanceof Error)try{return"error"===t&&e.stack||e.toString()}catch{try{const t={name:e.name,message:e.message,stack:e.stack};return JSON.stringify(t)}catch{return Object.prototype.toString.call(e)}}try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}return String(e)})).join(" ")}catch(e){return h(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{ce.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){h(e)}return e}};function de(e){try{if(null==e)return"";if("string"==typeof e)return e;if("undefined"!=typeof FormData&&e instanceof FormData)return"[form data]";if("undefined"!=typeof Blob&&e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if(ArrayBuffer.isView(e))return"[arraybuffer data]";if("undefined"!=typeof ReadableStream&&e instanceof ReadableStream)return"[stream data]";if(9===e?.nodeType)return"[document data]";if("undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams)try{return e.toString()}catch{return"[unreadable body]"}return Array.isArray(e)||"object"==typeof e?JSON.stringify(e):String(e)}catch(e){return h(`Failed to format body: ${e}`),"[unreadable body]"}}var ue="[request body too large]",ge="[request body unavailable]",pe="[response body too large]",fe="[response body unavailable]",me="[unreadable response body]",ve="[form data]",ye="[binary data]",be=class extends B{constructor(){super(...arguments),this.maxBodyLength=5e3,this.requestBodyReadTimeoutMs=3e3,this.responseBodyReadTimeoutMs=3e3,this.idGenerator=new d,this.patched=null,this.active=!1,this.handleEvent=e=>{try{if(!this.active)return;if(this.shouldIgnoreRequest(e.url))return;if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}},this.buildEvent=e=>{let t=e.url,n=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const r=this.config.getPrivacy(),i={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};try{t=new URL(e.url).pathname}catch(s){n=new URL(e.url,globalThis.location.href).href,r.shouldMaskNetworkQueryParams&&(t=_(t,i))}r.shouldMaskNetworkQueryParams&&(n=_(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),o=this.formatHeaders(e.response.headers),a=e.method?.toUpperCase()||"UNKNOWN",{traceId:l,spanId:c}=this.extractTraceIds(e.request.headers),h=(e,t)=>r.shouldMaskNetworkBodies?function(e,t={}){if(!e)return e;const n=e.trim();if(n.length<=L&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(z("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?C(e,t):P(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=f({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=f({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),g={type:"HTTP",operation:{name:a},resource_name:t,status:e.status?.toString(),subType:a,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:o,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:u}}},p={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?b(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?b(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:g};return l&&(p.traceId=l),c&&(p.spanId=c),this.enricher.enrich(p)}}async readBodyStreamCapped(e,t={}){if(!e)return"";const{timeoutMs:n,overflowPlaceholder:r,timeoutPlaceholder:i}=t,s=e.getReader(),o=new TextDecoder;let a,l="",c=0,h=!1,d=!1;const u=null!=n?new Promise((e=>{a=setTimeout((()=>e({timedOut:!0})),n)})):void 0;try{for(;;){const e=u?await Promise.race([s.read(),u]):await s.read();if("timedOut"in e){d=!0;break}const{done:t,value:n}=e;if(t)break;if(c+n.byteLength>=this.maxBodyLength){const e=n.subarray(0,this.maxBodyLength-c);l+=o.decode(e,{stream:!0}),h=!0;break}c+=n.byteLength,l+=o.decode(n,{stream:!0})}return l+=o.decode(),d&&null!=i?i:h&&null!=r?r:l}finally{clearTimeout(a);try{s.cancel()?.catch((()=>{}))}catch{}}}mimeEssence(e){return(e.split(";")[0]||"").trim().toLowerCase()}isTextualContentType(e){const t=this.mimeEssence(e);return!!t&&(!!t.startsWith("text/")||("application/x-www-form-urlencoded"===t||"application/javascript"===t||"application/ecmascript"===t||"application/graphql"===t||/^application\/([\w.-]+\+)?(json|xml)$/.test(t)))}binaryLabel(e){const t=this.mimeEssence(e);return t.startsWith("image/")?"[image data]":t.startsWith("audio/")?"[audio data]":t.startsWith("video/")?"[video data]":t.startsWith("font/")||t.startsWith("application/font")||"application/vnd.ms-fontobject"===t?"[font data]":"application/pdf"===t?"[pdf data]":"application/zip"===t||"application/gzip"===t||"application/x-gzip"===t||"application/x-tar"===t||"application/x-7z-compressed"===t||"application/x-rar-compressed"===t?"[archive data]":"application/wasm"===t?"[wasm data]":t.includes("protobuf")||t.startsWith("application/grpc")?"[protobuf data]":ye}classifyByContentType(e){const t=(e||"").toLowerCase();return t.includes("multipart/form-data")?ve:this.isTextualContentType(t)?null:this.binaryLabel(t)}capBodyText(e,t){return e&&(e.length>=this.maxBodyLength||(new TextEncoder).encode(e).length>=this.maxBodyLength)?t:e}async getRequestBody(e,t){try{if(!e.body)return"";const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.requestBodyReadTimeoutMs,overflowPlaceholder:ue,timeoutPlaceholder:ge})}catch{return ge}}async getResponseBody(e){if(!e.body)return"";const t=e.headers?.get?.("content-type")??"";if("text/event-stream"===this.mimeEssence(t))return me;const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.responseBodyReadTimeoutMs,overflowPlaceholder:pe,timeoutPlaceholder:fe})}initialize(){this.logger.log("[network-events-listener.initialize] called");const e=globalThis.fetch,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;try{this.patchXHR(),this.patchFetch()}catch(i){return globalThis.fetch=e,globalThis.XMLHttpRequest.prototype.open=t,globalThis.XMLHttpRequest.prototype.send=n,globalThis.XMLHttpRequest.prototype.setRequestHeader=r,this.patched=null,void h(i)}this.patched={originalFetch:e,wrappedFetch:globalThis.fetch,originalXHROpen:t,wrappedXHROpen:globalThis.XMLHttpRequest.prototype.open,originalXHRSend:n,wrappedXHRSend:globalThis.XMLHttpRequest.prototype.send,originalXHRSetRequestHeader:r,wrappedXHRSetRequestHeader:globalThis.XMLHttpRequest.prototype.setRequestHeader},this.active=!0}destroy(){this.active=!1;const e=this.patched;e&&(globalThis.fetch===e.wrappedFetch&&(globalThis.fetch=e.originalFetch),globalThis.XMLHttpRequest.prototype.open===e.wrappedXHROpen&&(globalThis.XMLHttpRequest.prototype.open=e.originalXHROpen),globalThis.XMLHttpRequest.prototype.send===e.wrappedXHRSend&&(globalThis.XMLHttpRequest.prototype.send=e.originalXHRSend),globalThis.XMLHttpRequest.prototype.setRequestHeader===e.wrappedXHRSetRequestHeader&&(globalThis.XMLHttpRequest.prototype.setRequestHeader=e.originalXHRSetRequestHeader),this.patched=null)}shouldIgnoreRequest(e){try{const t=this.config.getConfig()?.getEndpoint();if(t&&e.includes(t))return!0;if([".tsx",".jsx",".css"].some((t=>e.toLowerCase().endsWith(t))))return!0;return(this.config.getConfig()?.options?.excludedUrls||[]).some((t=>{if(t instanceof RegExp)return t.test(e);if("string"==typeof t&&(t.includes("*")||t.includes("?"))){const n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(n).test(e)}return e===t}))}catch(e){return h(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;let i;globalThis.XMLHttpRequest.prototype.open=function(n,r,s=!0,o,a){if(!e.active)return t.apply(this,[n,r,s,o,a]);if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,o,a]);const l=new URL(r.toString(),globalThis.location.href).href;return this._requestMethod=n,this._requestUrl=l,this._requestHeaders={},t.apply(this,[n,r,s,o,a])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(t,n){return e.active?(this._requestHeaders&&(this._requestHeaders[t]=n),r.apply(this,[t,n])):r.apply(this,[t,n])},globalThis.XMLHttpRequest.prototype.send=function(...t){if(!e.active)return n.apply(this,t);const r=this._requestUrl?.toString();if(!r||e.shouldIgnoreRequest(r))return n.apply(this,t);if(e.shouldAddTraceHeader(r)){const t=e.config.getConfig(),n=e.getTraceIds();t?.options?.tracing?.origin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),n&&(t?.options?.tracing?.traceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId}),Boolean(t?.options?.tracing?.propagationHeaders)&&t?.options?.tracing?.propagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:n.traceparent})})),t?.options?.tracing?.propagationHeaders?.length||e.addHeaderToXhrRequest({request:this,headerName:"traceparent",headerValue:n.traceparent}))}return this._requestBody=t[0]||"",this.addEventListener("load",(()=>{const t=Date.now(),n={};this.getAllResponseHeaders().split(/\r?\n/).forEach((e=>{const[t,r]=e.split(": ");t&&r&&(n[t.trim()]=r.trim())}));const r=e.capBodyText(de(this._requestBody),ue),s=""===this.responseType||"text"===this.responseType,o=s?this.responseText:this.response,a=(s?e.classifyByContentType(n["content-type"]||""):null)??e.capBodyText(de(o),pe),l={timestamp:i,end_time:t,method:this._requestMethod,url:this._requestUrl,body:r,status:this.status,request:{headers:this._requestHeaders||{},body:r},response:{headers:n,body:a}};e.handleEvent(l)})),n.apply(this,t)}}normalizeHeaders(e,t){try{const n=e?new Headers(e):new Headers;return t?(t instanceof Headers?t.forEach(((e,t)=>n.set(t,e))):Array.isArray(t)?new Headers(t).forEach(((e,t)=>n.set(t,e))):"object"==typeof t&&Object.entries(t).forEach((([e,t])=>n.set(e,t))),n):n}catch{return new Headers}}addTraceHeaders(e){const t=this.config.getConfig(),n=this.getTraceIds();if(t?.options?.tracing?.origin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),!n)return;t?.options?.tracing?.traceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId});const r=t?.options?.tracing?.propagationHeaders;(r?.length?r:["traceparent"]).forEach((t=>{this.addHeaderToFetchRequest({init:e,headerName:t,headerValue:n.traceparent})}))}extractHeadersRecord(e){const t={};return e instanceof Headers&&e.forEach(((e,n)=>{t[n]=e})),t}patchFetch(){const e=globalThis.fetch;globalThis.fetch=(...t)=>{if(!this.active)return e.apply(globalThis,t);const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,o=i?.method||(s?r.method:"GET"),a=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(a))return e.apply(globalThis,t);const l=this.shouldAddTraceHeader(a);i.headers=this.normalizeHeaders(s?r.headers:void 0,i.headers),l&&this.addTraceHeaders(i);const c=this.extractHeadersRecord(i.headers),h=null!=i?.body?this.capBodyText(de(i.body),ue):"",d=null!=i?.body?Promise.resolve(h):s?this.getRequestBody(r,"content-type"in c?c["content-type"]:r.headers.get("content-type")??""):Promise.resolve("");let u;return d.then((e=>{u=e})).catch((()=>{})),e.apply(globalThis,t).then((e=>{const t=Date.now(),r={};e.headers.forEach(((e,t)=>{r[t]=e}));const i={method:o,url:a,timestamp:n,body:"",status:e.status,end_time:t,request:{headers:c,body:""},response:{headers:r,body:""}},s=()=>{d.then((e=>{i.body=e,i.request.body=e,this.handleEvent(i)}))};return this.getResponseBody(e).then((e=>{i.response.body=e,s()})).catch((e=>{i.response.body=me,s(),this.logger.log("[network-events-listener.patchFetch] error",{error:e})})),e})).catch((e=>{const t=Date.now();let r="NetworkError";const i=e.message||"Unknown network error";e instanceof TypeError&&i.includes("Failed to fetch")?r="ERR_NETWORK_FAILURE":i.includes("Name not resolved")?r="ERR_NAME_NOT_RESOLVED":i.includes("Connection refused")&&(r="ERR_CONNECTION_REFUSED");const s=u??h,l={method:o,url:a,timestamp:n,body:s,status:0,end_time:t,request:{headers:c,body:s},response:{headers:{},body:""},error:{type:r}};throw this.handleEvent(l),e}))}}formatHeaders(e){const t=this.config.getPrivacy(),n="allow"===t.level,r=function(e,t={}){return e?Object.entries(e).reduce(((e,[n,r])=>{const i=n.toLowerCase(),s=A({key:n,value:r,path:[n],kind:"header",sensitive:k.includes(i)||T.test(i)||M(n,t.sensitiveKeys)},t.redact);return e[n]=null===s?"":String(s),e}),{}):e}(e,{sensitiveKeys:n?void 0:t.sensitiveKeys,redact:n?void 0:t.redact});return Object.entries(r)?.reduce(((e,[t,n])=>(e[t]=f({text:n}),e)),{})}extractTraceIds(e){const t=this.config.getConfig();let n="",r="";if(t?.options?.tracing?.traceIdHeaderName){const r=e[t.options.tracing.traceIdHeaderName];r&&"string"==typeof r&&(n=r)}if(t?.options?.tracing?.spanIdHeaderName){const n=e[t.options.tracing.spanIdHeaderName];n&&"string"==typeof n&&(r=n)}if(!n||!r){const t=this.extractTraceparentHeader(e);if(t){const e=t.split("-");4===e.length&&"00"===e[0]&&(!n&&e[1]&&32===e[1].length&&(n=e[1]),!r&&e[2]&&16===e[2].length&&(r=e[2]))}}return{traceId:n,spanId:r}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracing?.propagationHeaders?.length)for(const n of t.options.tracing.propagationHeaders){const t=e[n];if(t&&"string"==typeof t)return t}const n=e.traceparent;return n&&"string"==typeof n?n:""}getTraceIds(){const e=this.idGenerator.generateSpanId(),t=this.idGenerator.generateTraceId();let n,r;try{n=BigInt("0x"+t).toString(10),r=BigInt("0x"+e).toString(10)}catch(i){this.logger.log("[network-events-listener.getTraceIds] error",{error:i}),n=t,r=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:n,decimalSpanId:r}}addHeaderToXhrRequest({request:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToXhrRequest] called",{request:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.setRequestHeader(t,n),e._requestHeaders[t]=n}catch(e){this.logger.log("[network-events-listener.addHeaderToXhrRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToXhrRequest] Invalid header name",{headerName:t})}addHeaderToFetchRequest({init:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToFetchRequest] called",{init:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.headers instanceof Headers?e.headers.set(t,n):e.headers={...e.headers,[t]:n}}catch(e){this.logger.log("[network-events-listener.addHeaderToFetchRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToFetchRequest] Invalid header name",{headerName:t})}isValidHeaderName(e){if(!e||"string"!=typeof e)return!1;return/^[a-zA-Z0-9!#$&'*+\-.^_`|~]+$/.test(e)}shouldAddTraceHeader(e){const t=this.config.getConfig();if(this.logger.log("[network-events-listener.shouldAddTraceHeader] called",{url:e,config:t}),!t?.options?.tracing?.propagationUrls?.length)return!1;const n=t.options.tracing.propagationUrls?.some((t=>{const n=t.replace(/\*/g,".*"),r=new RegExp(`^${n}$`),i=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return r.test(i)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:n}),n}},we=class extends B{constructor(){super(...arguments),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const r=this.buildEvent(n,t);this.queueEvent(r)}catch(e){h(e)}}}initialize(){v?.addEventListener("error",this.handleEvent),v?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){v?.removeEventListener("error",this.handleEvent),v?.removeEventListener("unhandledrejection",this.handleEvent)}buildEvent(e,t){const n=this.config.getPrivacy(),r=n.shouldMaskErrors,i={sensitiveKeys:n.sensitiveKeys,redact:n.redact,kind:"error"},s=e.message||"Unknown error",o=r?P(s,i):s,a=r&&t?.metadata?D(t.metadata,i):t?.metadata,l={error_type:e.name||"Error",error_message:o,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${f({text:o,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:a};return this.enricher.enrich({type:"exception",attributes:l})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}enhanceError(e,t){const{filename:n,lineno:r,colno:i}=t||{};n&&!e.fileName&&Object.defineProperty(e,"fileName",{value:n}),r&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:r}),i&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:i})}createUnhandledRejectionError(e){let t;if(e.reason instanceof Error)t=e.reason;else{const n="object"==typeof e.reason?JSON.stringify(e.reason,null,2):String(e.reason);t=new Error(n),t.name="UnhandledRejection",Object.defineProperty(t,"originalReason",{value:e.reason,enumerable:!1})}return t}buildStackTrace(e){if(!e)return[];try{return o.default.parse(e).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Ee=class extends B{constructor(e,{isEnabled:t}){if(super(e),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.patchedPushState=null,this.patchedReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&t)try{this.isAutomaticNavigationEnabled=t,this.currentUrl=v.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){h(e)}}isInBrowserEnvironment(){try{return void 0!==v&&void 0!==v.location&&void 0!==v.history&&"function"==typeof v.addEventListener}catch(e){return h(e),!1}}initialize(){try{if(this.logger.log("[navigation-listener.initialize] called"),!this.isInBrowserEnvironment()||!this.originalPushState||!this.originalReplaceState)return void this.logger.log("[navigation-listener.initialize] Browser environment not available, skipping initialization");if(!this.isAutomaticNavigationEnabled)return void this.logger.log("[navigation-listener.initialize] Automatic navigation is disabled, skipping initialization");const e=this.originalPushState,t=this.originalReplaceState,n=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},r=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n};history.pushState=n,history.replaceState=r,this.patchedPushState=n,this.patchedReplaceState=r,v&&"function"==typeof v.addEventListener&&(v.addEventListener("popstate",this.popStateHandler),v.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){h(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState===this.patchedPushState&&(history.pushState=this.originalPushState),history.replaceState===this.patchedReplaceState&&(history.replaceState=this.originalReplaceState)),this.patchedPushState=null,this.patchedReplaceState=null,v&&"function"==typeof v.removeEventListener&&(v.removeEventListener("popstate",this.popStateHandler),v.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){h(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){h(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",v.location.href);const e=this.config.getPrivacy(),t="allow"===e.level,n=v.location.href,r=this.activeNavigation?.metadata,i={page_url:e.shouldMaskNetworkQueryParams?_(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?D(r,{sensitiveKeys:e.sensitiveKeys,redact:e.redact}):r,duration_ms:this.activeNavigation?.duration_ms||0,start_timestamp:this.activeNavigation?.startTime||0,end_timestamp:this.activeNavigation?.endTime||0};return this.enricher.enrich({type:"navigation",attributes:i})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}startNavigation(e){try{this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:v?.location?.href||"",metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}catch(e){h(e)}}endNavigation(e){try{if(this.logger.log("[navigation-listener.endNavigation] called",e),!this.activeNavigation)return void this.logger.log("[navigation-listener.endNavigation] no active navigation found");this.logger.log("[navigation-listener.endNavigation] active navigation",this.activeNavigation),this.activeNavigation.endTime=Date.now(),this.activeNavigation.duration_ms=this.activeNavigation.endTime-this.activeNavigation.startTime,this.handleEvent()}catch(e){h(e)}}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===v.location.href)return;let e,t;try{e=new URL(v.location.href),t=new URL(this.currentUrl)}catch(e){return void h(e)}const n=e=>e.startsWith("#/"),r=n(e.hash)||n(t.hash);(e.pathname!==t.pathname||r&&e.hash!==t.hash)&&(this.currentUrl=v.location.href,this.handleEvent())}catch(e){h(e)}}},Se=class extends B{constructor(e){super(e),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",v),"complete"===v?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):v?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),h(e)}}destroy(){v?.removeEventListener("load",this.loadEventHandler)}handleEvent(){try{this.logger.log("[page-load-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){h(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,n=performance.getEntriesByType("resource"),r={count:n.length,totalSize:0,totalDuration:0,byType:{}};n.forEach((e=>{const t=e,n=t.transferSize||0,i=t.duration,s=t.initiatorType;r.totalSize+=n,r.totalDuration+=i,r.byType[s]||(r.byType[s]={count:0,size:0,duration:0}),r.byType[s].count++,r.byType[s].size+=n,r.byType[s].duration+=i}));const i=this.config.getPrivacy(),s=i.shouldMaskNetworkQueryParams,o={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},a=v?.location?.href||"",l=v?.document?.referrer||"",c={page_url:s?_(a,o):a,page_load_time:t,page_referrer:s?_(l,o):l,page_resources:r};return this.enricher.enrich({type:"pageload",attributes:c})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},ke=class extends B{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}}initialize(){t.onCLS(this.handleEvent),t.onLCP(this.handleEvent),t.onFCP(this.handleEvent),t.onTTFB(this.handleEvent),t.onINP(this.handleEvent)}destroy(){}buildEvent(e){const t={performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""};return this.enricher.enrich({type:"performance",attributes:t})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},Te=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.consecutiveTimeouts=0,this.isAvailable=!1,this.logger=l.getInstance(),"undefined"==typeof Worker||"undefined"==typeof URL||"undefined"==typeof Blob)return;const e=new Blob(['!function(){"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,t=new r([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),f=new r([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(r,t){for(var f=new n(31),o=0;o<31;++o)f[o]=t+=1<<r[o-1];var a=new e(f[30]);for(o=1;o<30;++o)for(var i=f[o];i<f[o+1];++i)a[i]=i-f[o]<<5|o;return{b:f,r:a}},i=a(t,2),u=i.b,v=i.r;u[28]=258,v[258]=28;var s=a(f,0).r,l=new n(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>1|(21845&Y)<<1))>>2|(13107&Q)<<2))>>4|(3855&Q)<<4,l[Y]=((65280&Q)>>8|(255&Q)<<8)>>1;var c=function(r,e,t){for(var f=r.length,o=0,a=new n(e);o<f;++o)r[o]&&++a[r[o]-1];var i,u=new n(e);for(o=1;o<e;++o)u[o]=u[o-1]+a[o-1]<<1;for(i=new n(f),o=0;o<f;++o)r[o]&&(i[o]=l[u[r[o]-1]++]>>15-r[o]);return i},h=new r(288);for(Y=0;Y<144;++Y)h[Y]=8;for(Y=144;Y<256;++Y)h[Y]=9;for(Y=256;Y<280;++Y)h[Y]=7;for(Y=280;Y<288;++Y)h[Y]=8;var w=new r(32);for(Y=0;Y<32;++Y)w[Y]=5;var g=c(h,9),d=c(w,5),m=function(r){return(r+7)/8|0},p=function(n,e,t){return(null==t||t>n.length)&&(t=n.length),new r(n.subarray(e,t))},y=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8},M=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8,r[t+2]|=e>>16},b=function(e,t){for(var f=[],o=0;o<e.length;++o)e[o]&&f.push({s:o,f:e[o]});var a=f.length,i=f.slice();if(!a)return{t:U,l:0};if(1==a){var u=new r(f[0].s+1);return u[f[0].s]=1,{t:u,l:1}}f.sort((function(r,n){return r.f-n.f})),f.push({s:-1,f:25001});var v=f[0],s=f[1],l=0,c=1,h=2;for(f[0]={s:-1,f:v.f+s.f,l:v,r:s};c!=a-1;)v=f[f[l].f<f[h].f?l++:h++],s=f[l!=c&&f[l].f<f[h].f?l++:h++],f[c++]={s:-1,f:v.f+s.f,l:v,r:s};var w=i[0].s;for(o=1;o<a;++o)i[o].s>w&&(w=i[o].s);var g=new n(w+1),d=k(f[c-1],g,0);if(d>t){o=0;var m=0,p=d-t,y=1<<p;for(i.sort((function(r,n){return g[n.s]-g[r.s]||r.f-n.f}));o<a;++o){var M=i[o].s;if(!(g[M]>t))break;m+=y-(1<<d-g[M]),g[M]=t}for(m>>=p;m>0;){var b=i[o].s;g[b]<t?m-=1<<t-g[b]++-1:++o}for(;o>=0&&m;--o){var x=i[o].s;g[x]==t&&(--g[x],++m)}d=t}return{t:new r(g),l:d}},k=function(r,n,e){return-1==r.s?Math.max(k(r.l,n,e+1),k(r.r,n,e+1)):n[r.s]=e},x=function(r){for(var e=r.length;e&&!r[--e];);for(var t=new n(++e),f=0,o=r[0],a=1,i=function(r){t[f++]=r},u=1;u<=e;++u)if(r[u]==o&&u!=e)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=r[u]}return{c:t.subarray(0,f),n:e}},A=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},C=function(r,n,e){var t=e.length,f=m(n+2);r[f]=255&t,r[f+1]=t>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},T=function(r,e,a,i,u,v,s,l,m,p,k){y(e,k++,a),++u[256];for(var T=b(u,15),E=T.t,U=T.l,D=b(v,15),S=D.t,I=D.l,j=x(E),z=j.c,J=j.n,N=x(S),O=N.c,q=N.n,B=new n(19),F=0;F<z.length;++F)++B[31&z[F]];for(F=0;F<O.length;++F)++B[31&O[F]];for(var G=b(B,7),H=G.t,K=G.l,L=19;L>4&&!H[o[L-1]];--L);var P,Q,R,V,W=p+5<<3,X=A(u,h)+A(v,w)+s,Y=A(u,E)+A(v,S)+s+14+3*L+A(B,H)+2*B[16]+3*B[17]+7*B[18];if(m>=0&&W<=X&&W<=Y)return C(e,k,r.subarray(m,m+p));if(y(e,k,1+(Y<X)),k+=2,Y<X){P=c(E,U),Q=E,R=c(S,I),V=S;var Z=c(H,K);y(e,k,J-257),y(e,k+5,q-1),y(e,k+10,L-4),k+=14;for(F=0;F<L;++F)y(e,k+3*F,H[o[F]]);k+=3*L;for(var $=[z,O],_=0;_<2;++_){var rr=$[_];for(F=0;F<rr.length;++F){var nr=31&rr[F];y(e,k,Z[nr]),k+=H[nr],nr>15&&(y(e,k,rr[F]>>5&127),k+=rr[F]>>12)}}}else P=g,Q=h,R=d,V=w;for(F=0;F<l;++F){var er=i[F];if(er>255){M(e,k,P[(nr=er>>18&31)+257]),k+=Q[nr+257],nr>7&&(y(e,k,er>>23&31),k+=t[nr]);var tr=31&er;M(e,k,R[tr]),k+=V[tr],tr>3&&(M(e,k,er>>5&8191),k+=f[tr])}else M(e,k,P[er]),k+=Q[er]}return M(e,k,P[256]),k+Q[256]},E=new e([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),U=new r(0),D=function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var e=n,t=9;--t;)e=(1&e&&-306674912)^e>>>1;r[n]=e}return r}(),S=function(o,a,i,u,l){if(!l&&(l={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),h=new r(c.length+o.length);h.set(c),h.set(o,c.length),o=h,l.w=c.length}return function(o,a,i,u,l,c){var h=c.z||o.length,w=new r(u+h+5*(1+Math.ceil(h/7e3))+l),g=w.subarray(u,w.length-l),d=c.l,y=7&(c.r||0);if(a){y&&(g[0]=c.r>>3);for(var M=E[a-1],b=M>>13,k=8191&M,x=(1<<i)-1,A=c.p||new n(32768),U=c.h||new n(x+1),D=Math.ceil(i/3),S=2*D,I=function(r){return(o[r]^o[r+1]<<D^o[r+2]<<S)&x},j=new e(25e3),z=new n(288),J=new n(32),N=0,O=0,q=c.i||0,B=0,F=c.w||0,G=0;q+2<h;++q){var H=I(q),K=32767&q,L=U[H];if(A[K]=L,U[H]=K,F<=q){var P=h-q;if((N>7e3||B>24576)&&(P>423||!d)){y=T(o,g,0,j,z,J,O,B,G,q-G,y),B=N=O=0,G=q;for(var Q=0;Q<286;++Q)z[Q]=0;for(Q=0;Q<30;++Q)J[Q]=0}var R=2,V=0,W=k,X=K-L&32767;if(P>2&&H==I(q-X))for(var Y=Math.min(b,P)-1,Z=Math.min(32767,q),$=Math.min(258,P);X<=Z&&--W&&K!=L;){if(o[q+R]==o[q+R-X]){for(var _=0;_<$&&o[q+_]==o[q+_-X];++_);if(_>R){if(R=_,V=X,_>Y)break;var rr=Math.min(X,_-2),nr=0;for(Q=0;Q<rr;++Q){var er=q-X+Q&32767,tr=er-A[er]&32767;tr>nr&&(nr=tr,L=er)}}}X+=(K=L)-(L=A[K])&32767}if(V){j[B++]=268435456|v[R]<<18|s[V];var fr=31&v[R],or=31&s[V];O+=t[fr]+f[or],++z[257+fr],++J[or],F=q+R,++N}else j[B++]=o[q],++z[o[q]]}}for(q=Math.max(q,F);q<h;++q)j[B++]=o[q],++z[o[q]];y=T(o,g,d,j,z,J,O,B,G,q-G,y),d||(c.r=7&y|g[y/8|0]<<3,y-=7,c.h=U,c.p=A,c.i=q,c.w=F)}else{for(q=c.w||0;q<h+d;q+=65535){var ar=q+65535;ar>=h&&(g[y/8|0]=d,ar=h),y=C(g,y+1,o.subarray(q,ar))}c.i=h}return p(w,0,u+m(y)+l)}(o,null==a.level?6:a.level,null==a.mem?l.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(o.length)))):20:12+a.mem,i,u,l)},I=function(r,n,e){for(;e;++n)r[n]=e,e>>>=8};function j(r,n){n||(n={});var e=function(){var r=-1;return{p:function(n){for(var e=r,t=0;t<n.length;++t)e=D[255&e^n[t]]^e>>>8;r=e},d:function(){return~r}}}(),t=r.length;e.p(r);var f,o=S(r,n,10+((f=n).filename?f.filename.length+1:0),8),a=o.length;return function(r,n){var e=n.filename;if(r[0]=31,r[1]=139,r[2]=8,r[8]=n.level<2?4:9==n.level?2:0,r[9]=3,0!=n.mtime&&I(r,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){r[3]=8;for(var t=0;t<=e.length;++t)r[t+10]=e.charCodeAt(t)}}(o,n),I(o,a-8,e.d()),I(o,a-4,t),o}var z="undefined"!=typeof TextEncoder&&new TextEncoder,J="undefined"!=typeof TextDecoder&&new TextDecoder;try{J.decode(U,{stream:!0})}catch(r){}var N=Uint8Array,O=Uint16Array,q=Uint32Array,B=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),F=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),G=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),H=function(r,n){for(var e=new O(31),t=0;t<31;++t)e[t]=n+=1<<r[t-1];var f=new q(e[30]);for(t=1;t<30;++t)for(var o=e[t];o<e[t+1];++o)f[o]=o-e[t]<<5|t;return[e,f]},K=H(B,2),L=K[0],P=K[1];L[28]=258,P[258]=28;var Q,R=H(F,0)[1],V=new O(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>>1|(21845&Y)<<1))>>>2|(13107&Q)<<2))>>>4|(3855&Q)<<4,V[Y]=((65280&Q)>>>8|(255&Q)<<8)>>>1;var W=function(r,n,e){for(var t=r.length,f=0,o=new O(n);f<t;++f)++o[r[f]-1];var a,i=new O(n);for(f=0;f<n;++f)i[f]=i[f-1]+o[f-1]<<1;for(a=new O(t),f=0;f<t;++f)a[f]=V[i[r[f]-1]++]>>>15-r[f];return a},X=new N(288);for(Y=0;Y<144;++Y)X[Y]=8;for(Y=144;Y<256;++Y)X[Y]=9;for(Y=256;Y<280;++Y)X[Y]=7;for(Y=280;Y<288;++Y)X[Y]=8;var Y,Z=new N(32);for(Y=0;Y<32;++Y)Z[Y]=5;var $=W(X,9),_=W(Z,5),rr=function(r){return(r/8|0)+(7&r&&1)},nr=function(r,n,e){(null==e||e>r.length)&&(e=r.length);var t=new(r instanceof O?O:r instanceof q?q:N)(e-n);return t.set(r.subarray(n,e)),t},er=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8},tr=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8,r[t+2]|=e>>>16},fr=function(r,n){for(var e=[],t=0;t<r.length;++t)r[t]&&e.push({s:t,f:r[t]});var f=e.length,o=e.slice();if(!f)return[new N(0),0];if(1==f){var a=new N(e[0].s+1);return a[e[0].s]=1,[a,1]}e.sort((function(r,n){return r.f-n.f})),e.push({s:-1,f:25001});var i=e[0],u=e[1],v=0,s=1,l=2;for(e[0]={s:-1,f:i.f+u.f,l:i,r:u};s!=f-1;)i=e[e[v].f<e[l].f?v++:l++],u=e[v!=s&&e[v].f<e[l].f?v++:l++],e[s++]={s:-1,f:i.f+u.f,l:i,r:u};var c=o[0].s;for(t=1;t<f;++t)o[t].s>c&&(c=o[t].s);var h=new O(c+1),w=or(e[s-1],h,0);if(w>n){t=0;var g=0,d=w-n,m=1<<d;for(o.sort((function(r,n){return h[n.s]-h[r.s]||r.f-n.f}));t<f;++t){var p=o[t].s;if(!(h[p]>n))break;g+=m-(1<<w-h[p]),h[p]=n}for(g>>>=d;g>0;){var y=o[t].s;h[y]<n?g-=1<<n-h[y]++-1:++t}for(;t>=0&&g;--t){var M=o[t].s;h[M]==n&&(--h[M],++g)}w=n}return[new N(h),w]},or=function(r,n,e){return-1==r.s?Math.max(or(r.l,n,e+1),or(r.r,n,e+1)):n[r.s]=e},ar=function(r){for(var n=r.length;n&&!r[--n];);for(var e=new O(++n),t=0,f=r[0],o=1,a=function(r){e[t++]=r},i=1;i<=n;++i)if(r[i]==f&&i!=n)++o;else{if(!f&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(f),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(f);o=1,f=r[i]}return[e.subarray(0,t),n]},ir=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},ur=function(r,n,e){var t=e.length,f=rr(n+2);r[f]=255&t,r[f+1]=t>>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},vr=function(r,n,e,t,f,o,a,i,u,v,s){er(n,s++,e),++f[256];for(var l=fr(f,15),c=l[0],h=l[1],w=fr(o,15),g=w[0],d=w[1],m=ar(c),p=m[0],y=m[1],M=ar(g),b=M[0],k=M[1],x=new O(19),A=0;A<p.length;++A)x[31&p[A]]++;for(A=0;A<b.length;++A)x[31&b[A]]++;for(var C=fr(x,7),T=C[0],E=C[1],U=19;U>4&&!T[G[U-1]];--U);var D,S,I,j,z=v+5<<3,J=ir(f,X)+ir(o,Z)+a,N=ir(f,c)+ir(o,g)+a+14+3*U+ir(x,T)+(2*x[16]+3*x[17]+7*x[18]);if(z<=J&&z<=N)return ur(n,s,r.subarray(u,u+v));if(er(n,s,1+(N<J)),s+=2,N<J){D=W(c,h),S=c,I=W(g,d),j=g;var q=W(T,E);er(n,s,y-257),er(n,s+5,k-1),er(n,s+10,U-4),s+=14;for(A=0;A<U;++A)er(n,s+3*A,T[G[A]]);s+=3*U;for(var H=[p,b],K=0;K<2;++K){var L=H[K];for(A=0;A<L.length;++A){var P=31&L[A];er(n,s,q[P]),s+=T[P],P>15&&(er(n,s,L[A]>>>5&127),s+=L[A]>>>12)}}}else D=$,S=X,I=_,j=Z;for(A=0;A<i;++A)if(t[A]>255){P=t[A]>>>18&31;tr(n,s,D[P+257]),s+=S[P+257],P>7&&(er(n,s,t[A]>>>23&31),s+=B[P]);var Q=31&t[A];tr(n,s,I[Q]),s+=j[Q],Q>3&&(tr(n,s,t[A]>>>5&8191),s+=F[Q])}else tr(n,s,D[t[A]]),s+=S[t[A]];return tr(n,s,D[256]),s+S[256]},sr=new q([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lr=function(r,n,e,t,f){return function(r,n,e,t,f,o){var a=r.length,i=new N(t+a+5*(1+Math.floor(a/7e3))+f),u=i.subarray(t,i.length-f),v=0;if(!n||a<8)for(var s=0;s<=a;s+=65535){var l=s+65535;l<a?v=ur(u,v,r.subarray(s,l)):(u[s]=o,v=ur(u,v,r.subarray(s,a)))}else{for(var c=sr[n-1],h=c>>>13,w=8191&c,g=(1<<e)-1,d=new O(32768),m=new O(g+1),p=Math.ceil(e/3),y=2*p,M=function(n){return(r[n]^r[n+1]<<p^r[n+2]<<y)&g},b=new q(25e3),k=new O(288),x=new O(32),A=0,C=0,T=(s=0,0),E=0,U=0;s<a;++s){var D=M(s),S=32767&s,I=m[D];if(d[S]=I,m[D]=S,E<=s){var j=a-s;if((A>7e3||T>24576)&&j>423){v=vr(r,u,0,b,k,x,C,T,U,s-U,v),T=A=C=0,U=s;for(var z=0;z<286;++z)k[z]=0;for(z=0;z<30;++z)x[z]=0}var J=2,G=0,H=w,K=S-I&32767;if(j>2&&D==M(s-K))for(var L=Math.min(h,j)-1,Q=Math.min(32767,s),V=Math.min(258,j);K<=Q&&--H&&S!=I;){if(r[s+J]==r[s+J-K]){for(var W=0;W<V&&r[s+W]==r[s+W-K];++W);if(W>J){if(J=W,G=K,W>L)break;var X=Math.min(K,W-2),Y=0;for(z=0;z<X;++z){var Z=s-K+z+32768&32767,$=Z-d[Z]+32768&32767;$>Y&&(Y=$,I=Z)}}}K+=(S=I)-(I=d[S])+32768&32767}if(G){b[T++]=268435456|P[J]<<18|R[G];var _=31&P[J],er=31&R[G];C+=B[_]+F[er],++k[257+_],++x[er],E=s+J,++A}else b[T++]=r[s],++k[r[s]]}}v=vr(r,u,o,b,k,x,C,T,U,s-U,v)}return nr(i,0,t+rr(v)+f)}(r,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(r.length)))):12+n.mem,e,t,!0)};function cr(r,n){void 0===n&&(n={});var e=function(){var r=1,n=0;return{p:function(e){for(var t=r,f=n,o=e.length,a=0;a!=o;){for(var i=Math.min(a+5552,o);a<i;++a)f+=t+=e[a];t%=65521,f%=65521}r=t,n=f},d:function(){return(r>>>8<<16|(255&n)<<8|n>>>8)+2*((255&r)<<23)}}}();e.p(r);var t,f,o,a=lr(r,n,2,4);return t=a,f=n.level,o=0==f?0:f<6?1:9==f?3:2,t[0]=120,t[1]=o<<6|(o?32-2*o:1),function(r,n,e){for(;e;++n)r[n]=e,e>>>=8}(a,a.length-4,e.d()),a}var hr=r=>{const n={...r,v:"v1"};return function(r){for(var n="",e=0;e<r.length;){var t=r[e++];n+=String.fromCharCode(t)}return n}(cr(function(r,n){var e=r.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(r);for(var t=new N(r.length+(r.length>>>1)),f=0,o=function(r){t[f++]=r},a=0;a<e;++a){if(f+5>t.length){var i=new N(f+8+(e-a<<1));i.set(t),t=i}var u=r.charCodeAt(a);u<128||n?o(u):u<2048?(o(192|u>>>6),o(128|63&u)):u>55295&&u<57344?(o(240|(u=65536+(1047552&u)|1023&r.charCodeAt(++a))>>>18),o(128|u>>>12&63),o(128|u>>>6&63),o(128|63&u)):(o(224|u>>>12),o(128|u>>>6&63),o(128|63&u))}return nr(t,0,f)}(JSON.stringify(n))))},wr=self;wr.onmessage=n=>{const e=n.data;if(!e||"number"!=typeof e.id||"pack-replay"!==e.op&&"encode-batch"!==e.op)return void(e&&"number"==typeof e.id&&wr.postMessage({id:e.id,ok:!1,error:"malformed message"}));const{id:t,op:f,payload:o}=e;try{if("pack-replay"===f){const r=o.events.map((r=>hr(r)));return void wr.postMessage({id:t,ok:!0,result:{packed:r}})}if("encode-batch"===f){const{json:n,compress:e}=o;if(!e){const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}try{const e=j(function(n,e){if(z)return z.encode(n);for(var t=n.length,f=new r(n.length+(n.length>>1)),o=0,a=function(r){f[o++]=r},i=0;i<t;++i){if(o+5>f.length){var u=new r(o+8+(t-i<<1));u.set(f),f=u}var v=n.charCodeAt(i);v<128||e?a(v):v<2048?(a(192|v>>6),a(128|63&v)):v>55295&&v<57344?(a(240|(v=65536+(1047552&v)|1023&n.charCodeAt(++i))>>18),a(128|v>>12&63),a(128|v>>6&63),a(128|63&v)):(a(224|v>>12),a(128|v>>6&63),a(128|63&v))}return p(f,0,o)}(n));return void wr.postMessage({id:t,ok:!0,result:{bytes:e,isCompressed:!0}},[e.buffer])}catch{const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}}wr.postMessage({id:t,ok:!1,error:"unknown op"})}catch(r){wr.postMessage({id:t,ok:!1,error:r instanceof Error?r.message:String(r)})}}}();'],{type:"application/javascript"}),t=URL.createObjectURL(e);try{this.worker=new Worker(t),Promise.resolve().then((()=>URL.revokeObjectURL(t))),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFatalFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.logger.log("[worker-client] worker onmessageerror — single message dropped, worker still alive"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){URL.revokeObjectURL(t),this.logger.log("[worker-client] failed to spawn worker, falling back to main thread:",e),this.worker=null,this.isAvailable=!1}}static getInstance(){return e.instance||(e.instance=new e),e.instance}static __resetForTests(){e.instance&&e.instance.terminate(),e.instance=null}static async withFallback(t,n,r){const i=e.getInstance();if(!i.isAvailable)return n();try{return await t(i)}catch(e){return l.getInstance().log(`[${r}] worker call failed, using inline fallback:`,e),n()}}packReplay(e){return this.dispatch("pack-replay",{events:e}).then((e=>e.packed))}encodeBatch(e,t){return this.dispatch("encode-batch",{json:e,compress:t}).then((e=>({data:e.bytes,isCompressed:e.isCompressed})))}terminate(){if(this.worker){try{this.worker.terminate()}catch(e){this.logger.log("[worker-client] failed to terminate worker:",e)}this.worker=null}this.isAvailable=!1,this.rejectAllPending(new Error("worker terminated")),e.instance===this&&(e.instance=null)}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,r=this.worker;return new Promise(((i,s)=>{const o=setTimeout((()=>{this.pending.has(n)&&(this.pending.delete(n),this.consecutiveTimeouts+=1,this.consecutiveTimeouts>=3&&this.handleFatalFailure("worker latched after 3 consecutive timeouts"),s(new Error("worker request timed out")))}),1500);this.pending.set(n,{resolve:i,reject:s,timeoutId:o});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(o),this.pending.delete(n),s(e instanceof Error?e:new Error(String(e)))}}))}handleMessage(e){const t=this.pending.get(e.id);t&&(clearTimeout(t.timeoutId),this.pending.delete(e.id),this.consecutiveTimeouts=0,e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFatalFailure(e,t){if(this.logger.log(`[worker-client] ${e}${t?": "+t:""}`),this.isAvailable=!1,this.rejectAllPending(new Error(e)),this.worker){try{this.worker.terminate()}catch{}this.worker=null}}rejectAllPending(e){for(const t of this.pending.values())clearTimeout(t.timeoutId),t.reject(e);this.pending.clear()}};Te.instance=null;var Ie=Te;var Re=class{constructor(e){this.logger=l.getInstance(),this.stopFn=null,this.isRecording=!1,this.events=[],this.startTime=0,this.batchSize=3,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,this.sendTimerId=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher}initialize(){this.logger.log("[session-replay-listener] initialize called"),this.isRecording?this.logger.log("[session-replay-listener] already recording"):this.startRecording()}startRecording(){try{this.startTime=Date.now(),this.events=[],this.isRecording=!0,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0;const e=this.configManager.getConfig()?.options?.replay,t=e?.blockedSelectors?.filter(Boolean),r=t?.length?t.join(", "):void 0,i=K(this.configManager),s=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=j(t?.maskSelectors),s=t?.replay,o="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,a="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;return l="mask-all"===n||!r&&void 0!==o?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0,{maskTextSelector:l,maskAllInputs:!r,maskTextFn:o,maskInputFn:a}}(this.configManager.getConfig()?.providedOptions),o=s.maskInputFn??("allow"===i.level?void 0:(e,t)=>Q(t,i)?"*".repeat(e.length):e);this.stopFn=n.record({...r?{blockSelector:r}:{},...s.maskTextSelector?{maskTextSelector:s.maskTextSelector}:{},maskAllInputs:s.maskAllInputs,...s.maskTextFn?{maskTextFn:s.maskTextFn}:{},...o?{maskInputFn:o}:{},slimDOMOptions:{script:!1,comment:!1,headWhitespace:!1},sampling:{mousemove:100,input:"last",scroll:150},checkoutEveryNms:3e4,emit:(e,t)=>{if(this.isRecording)try{this.events.push(e),t&&(this.batchContainsFullSnapshot=!0,this.fullSnapshotTimestamp=Date.now(),this.logger.log("[session-replay-listener] full snapshot captured at",this.fullSnapshotTimestamp)),this.events.length>=this.batchSize&&this.scheduleSendBatch()}catch(e){h(e),this.logger.log("[session-replay-listener] failed to process event in emit callback:",e)}}})||null,this.logger.log("[session-replay-listener] started recording with full snapshot interval:",3e4,"ms")}catch(e){h(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=v.setTimeout((()=>{this.sendTimerId=null,this.isRecording&&this.sendBatchAsync().catch((e=>{h(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}))}),0))}clearScheduledSend(){null!==this.sendTimerId&&(v.clearTimeout(this.sendTimerId),this.sendTimerId=null)}flushPendingSync(){this.clearScheduledSend(),0!==this.events.length&&this.sendBatchSync()}async sendBatchAsync(){if(0===this.events.length)return;const e=this.drainBatch(),t=this.session.getSessionId(),n=Ie.getInstance();let i;if(n.isAvailable)try{i=await n.packReplay(e.events)}catch(t){h(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),i=e.events.map((e=>r.pack(e)))}else i=e.events.map((e=>r.pack(e)));this.session.getSessionId()===t?this.enqueueReplayEvent(i,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during pack",{drained:i.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>r.pack(e)));this.enqueueReplayEvent(t,e.containsFullSnapshot,e.snapshotTimestamp)}drainBatch(){const e=this.events,t=this.batchContainsFullSnapshot,n=this.fullSnapshotTimestamp;return this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,{events:e,containsFullSnapshot:t,snapshotTimestamp:n}}enqueueReplayEvent(e,t,n){try{const r={_gc_replay_data:{events:e}};t&&(r.replay_is_full_snapshot=!0,r.replay_full_snapshot_timestamp=n);const i=this.enricher.enrich({type:"replay",attributes:r});this.eventsPool.addEvent(i),this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){h(e),this.logger.log("[session-replay-listener] failed to send batch:",e)}}stopRecording(){if(this.isRecording)try{this.clearScheduledSend(),this.stopFn?.(),this.isRecording=!1,this.events.length>0&&this.sendBatchSync(),this.stopFn=null,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0}catch(e){h(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},Le=144e5,Me=288e5,xe=18e5,qe="gcSample",Ne={eventSampleRate:1,sessionSampleRate:1,debug:!1,privacy:{level:"mask-sensitive"},enabledEvents:[],tracing:{propagationUrls:[],propagationHeaders:[],traceIdHeaderName:"",spanIdHeaderName:"",origin:{name:"",value:""}},transport:{batchSize:10,batchTimeout:1e4,compression:!0},replay:{},sessionMaxDuration:Le},Ae=["pointerdown","keydown","scroll","touchstart","mousemove"],Ce=class{constructor(e){this.logger=l.getInstance(),this.lastSignalMs=0,this.idleTimer=null,this.installed=!1,this.handleInput=()=>{const e=Date.now();if(!(e-this.lastSignalMs<3e4)){this.notePresence(e);try{this.callbacks.onPresence(e)}catch(e){h(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,Ae.forEach((e=>{try{v.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){h(e)}})),this.armIdleTimer(),this.logger.log("[user-presence-monitor] installed"))}notePresence(e){this.lastSignalMs=e,this.armIdleTimer()}resetIdleTimer(){this.armIdleTimer()}armIdleTimer(){try{this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null,this.idleTimer=setTimeout((()=>{this.idleTimer=null,this.logger.log("[user-presence-monitor] user idle for",xe,"ms");try{this.callbacks.onIdle()}catch(e){h(e)}}),xe)}catch(e){h(e)}}destroy(){if(this.installed){this.installed=!1,Ae.forEach((e=>{try{v.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){h(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){h(e)}finally{this.idleTimer=null}}}};function He(e,t,n){return"number"==typeof e&&e>0&&e<=t&&e>t-n}function _e(e,t,n){let r=null;const i=e=>{He(e,t,n)&&(null===r||e<r)&&(r=e)};try{for(const t of e)if(t){try{i(t.timestamp)}catch(e){h(e)}try{i(t.start_timestamp)}catch(e){h(e)}}}catch(e){h(e)}return r}var ze=class{constructor(e){this.logger=l.getInstance(),this.rotating=!1,this.session=e.session,this.pool=e.pool,this.idGenerator=e.idGenerator,this.activityEventTypes=e.activityEventTypes,this.ignoredEventTypes=e.ignoredEventTypes,this.hooks=e.hooks??{}}get isRotating(){return this.rotating}install(){this.pool.setBeforeEnqueueHook((e=>this.reconcileOnEnqueue(e))),this.pool.setFlushGate((()=>this.session.hasUserActivity()))}uninstall(e){this.pool.setBeforeEnqueueHook(null);try{e?.()}catch(e){h(e)}this.pool.setFlushGate(null)}reconcile(e,t,n){if(this.rotating)return;t&&this.session.isSessionInactive(e)&&this.rotate({reason:"inactivity gap",triggeringEvent:n});const r=this.session.getSessionElapsedMs(e),i=this.session.getSessionMaxDuration(),s=r>=i;this.logger.log("[session-lifecycle] session reconcile",{userPresent:t,elapsedMs:r,maxDurationMs:i,expired:s}),s&&this.rotate({reason:"max session duration",triggeringEvent:n}),this.hooks.onReconcile?.(t),t&&(this.session.setLastActivityMs(e),this.hooks.onPresenceStamped?.(e))}reconcileOnEnqueue(e){this.rotating||(this.ignoredEventTypes.has(e.type)?this.logger.log("[session-lifecycle] enqueue rotation check: ignoring heartbeat-style event",e.type):this.reconcile(Date.now(),this.activityEventTypes.has(e.type),e))}rotateIfStale(e,t){(this.session.isSessionInactive(e)||this.session.isSessionExpired(e))&&this.rotate({reason:t})}rotate(e){if(this.rotating)return;this.rotating=!0;const t=(e,t)=>{try{this.logger.log(`[session-lifecycle] session rotation: ${e}`),t()}catch(t){h(t),this.logger.log(`[session-lifecycle] failed to ${e} during session rotation:`,t)}};try{const n=this.session.getSessionId();let r;t("capture host rotation context",(()=>{r=this.hooks.captureRotationContext?.()}));const i=this.session.hasUserActivity();this.logger.log("[session-lifecycle] session rotation start",{reason:e.reason,previousId:n,wasConfirmed:i}),t("host beforeRotate",(()=>this.hooks.beforeRotate?.())),t(i?"flush events":"discard unconfirmed events",(()=>i?this.pool.flush():this.pool.discardBuffer())),t("rotate session ids",(()=>{const t=this.idGenerator.generateId(),r=this.resolveNewSessionStartTime(e.triggeringEvent);this.session.setSessionId(t),this.session.setSessionStartTime(r),this.session.clearSamplingDecision(),this.logger.log("[session-lifecycle] session id rotated",{from:n,to:t})})),t("host afterRotate",(()=>this.hooks.afterRotate?.(r)))}finally{this.rotating=!1,this.logger.log("[session-lifecycle] session rotation complete",{reason:e.reason})}}resolveNewSessionStartTime(e){const t=b(Date.now());let n=t;try{const r=b(Math.min(this.session.getSessionMaxDuration(),xe)),i=[_e([e],t,r),this.pool.getEarliestEventTimestamp(t,r)];for(const e of i)He(e,t,r)&&e<n&&(n=e)}catch(e){h(e)}return n}},Pe=new Set(["dom.event"]),De=new Set(["replay"]),Fe=class{constructor(e){this.logger=l.getInstance(),this.idGenerator=new d,this.logEventsListener=null,this.domEventsListener=null,this.errorsEventsListener=null,this.networkEventsListener=null,this.navigationListener=null,this.performanceListener=null,this.pageLoadListener=null,this.sessionReplayListener=null,this.replayDesired=!1,this.presenceMonitor=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher,this.manualEvents=new O({config:this.configManager,pool:this.eventsPool,enricher:this.enricher}),this.lifecycle=new ze({session:this.session,pool:this.eventsPool,idGenerator:this.idGenerator,activityEventTypes:Pe,ignoredEventTypes:De,hooks:{captureRotationContext:()=>this.isReplayRecording(),beforeRotate:()=>this.stopReplayListener(),afterRotate:e=>this.syncReplayState(e),onReconcile:e=>this.syncReplayState(e),onPresenceStamped:e=>this.presenceMonitor?.notePresence(e)}})}listenerDeps(){return{config:this.configManager,eventsPool:this.eventsPool,enricher:this.enricher}}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.lifecycle.install(),this.presenceMonitor?.destroy(),this.presenceMonitor=new Ce({onPresence:e=>this.lifecycle.reconcile(e,!0),onIdle:()=>this.pauseReplayOnIdle()}),this.presenceMonitor.initialize();const e=this.configManager.getConfig(),t=e?.options?.enabledEvents,n=!t||0===t.length,r=[];(n||t?.includes("pageload"))&&(this.pageLoadListener=new Se(this.listenerDeps()),this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new le(this.listenerDeps()),this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new he(this.listenerDeps()),this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new we(this.listenerDeps()),this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new be(this.listenerDeps()),this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new ke(this.listenerDeps()),this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Ee(this.listenerDeps(),{isEnabled:n||t?.includes("navigation")}),this.navigationListener.initialize(),r.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",r)}sendCustomEvent(e){this.manualEvents.sendCustomEvent(e)}emitLog(e,t,n){this.logEventsListener&&this.manualEvents.emitLog(e,t,n)}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){h(e)}}isNavigationTrackingEnabled(){const e=this.configManager.getConfig();return e?.options?.enabledEvents?.includes("navigation")||0===e?.options?.enabledEvents?.length}startNavigation(e){this.logger.log("[instrumentation-manager.startNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.startNavigation] startNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.startNavigation(e)}endNavigation(e){this.logger.log("[instrumentation-manager.endNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.endNavigation] endNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.endNavigation(e)}isReplayRecording(){return null!==this.sessionReplayListener}restartReplayForConfigChange(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] restarting replay to apply config change"),this.stopReplayListener(),this.startReplayListener())}startReplayRecording(){this.replayDesired=!0,this.isReplayRecording()?this.logger.log("[instrumentation-manager] replay recording already started"):(this.lifecycle.rotateIfStale(Date.now(),"replay start into stale session"),this.startReplayListener(),this.presenceMonitor?.resetIdleTimer())}stopReplayRecording(){this.replayDesired=!1,this.stopReplayListener()}flushPendingReplay(){this.sessionReplayListener?.flushPendingSync()}syncReplayState(e){this.replayDesired&&e&&!this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] user present and replay desired — starting replay"),this.startReplayListener())}pauseReplayOnIdle(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] pausing replay: user idle window elapsed"),this.stopReplayListener())}startReplayListener(){if(this.sessionReplayListener)this.logger.log("[instrumentation-manager] replay recording already started");else try{const e=new Re({...this.listenerDeps(),session:this.session});e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){h(e),this.logger.log("[instrumentation-manager] failed to start replay recording:",e)}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.lifecycle.uninstall((()=>{this.presenceMonitor?.destroy(),this.presenceMonitor=null,this.domEventsListener?.destroy(),this.logEventsListener?.destroy(),this.errorsEventsListener?.destroy(),this.networkEventsListener?.destroy(),this.navigationListener?.destroy(),this.performanceListener?.destroy(),this.pageLoadListener?.destroy(),this.sessionReplayListener?.destroy(),this.sessionReplayListener=null,this.replayDesired=!1}))}};function Oe(e){try{console.warn(e)}catch{}}function Be(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var je=["privacy","tracing","transport","replay"],Ke={tracing:"origin",privacy:"replay"};function Ue(e,t){if(!Be(e))return e;const n={...e};return t&&Be(n[t])&&(n[t]={...n[t]}),n}function Xe(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];Be(i)&&Be(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!Be(s)?r[n]=Be(i)?{...i}:i:Be(r[n])&&(r[n]={...r[n]})}return r}function Ye(e,t){const n={...e,...t},r=t,i=e;for(const e of je){if(!Object.hasOwn(r,e)){Be(i[e])&&(n[e]=Ue(i[e],Ke[e]));continue}const t=r[e];Be(t)?n[e]=Xe(i[e],t,Ke[e]):n[e]=Ue(i[e],Ke[e])}return n}var $e=class e{constructor(t){this.dsn=t?.dsn||"",this.appId=t?.appId||"",this.cluster=t?.cluster||"",this.apiKey=t?.apiKey||"",this.environment=t?.environment||"",this.namespace=t?.namespace||"",this.releaseId=t?.releaseId,this.user=t?.user||null,this.providedOptions={...t?.options||{}},this.options=Ye(Ne,t?.options||{}),this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration),e.warnRemovedOptions(t?.options),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)}static stripRemovedOptions(t){const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&delete n[t]}static warnRemovedOptions(t){if(!t||"object"!=typeof t)return;const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&Oe(`[groundcover] \`options.${t}\` was removed in 1.0.0 and is ignored. Configure masking via \`options.privacy\` instead — see the migration guide: https://github.com/groundcover-com/rum/tree/main/packages/browser#migrating-to-100`)}static normalizeSessionMaxDuration(e){return void 0===e?Le:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>Me?(Oe("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),Le):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=Ye(this.providedOptions||{},t.options),this.options=Ye(this.options,t.options),void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration)),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)),void 0!==t.user&&(this.user=null===t.user?null:{...this.user,...t.user}),t.appId&&(this.appId=t.appId),t.dsn&&(this.dsn=t.dsn),t.apiKey&&(this.apiKey=t.apiKey),t.cluster&&(this.cluster=t.cluster),t.environment&&(this.environment=t.environment),t.namespace&&(this.namespace=t.namespace),t.releaseId&&(this.releaseId=t.releaseId)}};$e.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var We=$e,Qe=class{constructor(){this.config=null,this.logger=l.getInstance(),this.privacyCache=null}initialize(e){this.config||(this.config=new We(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getPrivacy(){return this.privacyCache||(this.privacyCache=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=e=>!r&&(e??!0),s=i(t?.maskNetworkBodies),o=i(t?.maskNetworkQueryParams),a=i(t?.maskLogs),l=i(t?.maskErrors);return{level:n,maskNetworkBodies:s,maskNetworkQueryParams:o,maskLogs:a,maskErrors:l,shouldMaskNetworkBodies:!r&&s,shouldMaskNetworkQueryParams:!r&&o,shouldMaskLogs:!r&&a,shouldMaskErrors:!r&&l,sensitiveKeys:j(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0}}(this.config?.providedOptions)),this.privacyCache}updateConfig(e){this.logger.log("[config-manager] updateConfig called"),this.config?e&&(this.logger.log("[config-manager] updating options"),this.config.updateConfig(e),this.privacyCache=null):this.logger.log("[config-manager] configuration not initialized")}},Ge=Ne.transport?.batchSize??10,Ve=Ne.transport?.batchTimeout??1e4;var Je=class{constructor(e){this.events=[],this.timeoutId=null,this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.unusableEnrichWarned=!1,this.onBeforeEnqueue=null,this.flushGate=null,this.config=e.config,this.session=e.session,this.transporter=e.transporter,this.getDeviceAttributes=e.getDeviceAttributes,this.eventsToSkipFlush=e.eventsToSkipFlush}initialize(){try{if(this.initialized)return;this.scheduleFlush(),this.initialized=!0}catch(e){h(e)}}destroy(){try{null!==this.timeoutId&&(v.clearTimeout(this.timeoutId),this.timeoutId=null),this.events=[],this.initialized=!1}catch(e){h(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}setFlushGate(e){this.flushGate=e}discardBuffer(){this.events=[]}getEarliestEventTimestamp(e,t){return _e(this.events,e,t)}isFlushAllowed(){if(null===this.flushGate)return!0;try{return this.flushGate()}catch(e){return h(e),!0}}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;let i=e;if(n&&!n(i))return;if(r){const e=r(i);if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"string"==typeof e.type}catch(e){return h(e),!1}}(e))return void(this.unusableEnrichWarned||(this.unusableEnrichWarned=!0,this.logger.log("[events-pool.addEvent] dropping event: enrichEvent returned an unusable value")));i=e}if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(i)}catch(e){h(e)}if(!this.isFlushAllowed()&&this.events.length>=500)return;this.events.push(i);const s=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:Ge);this.events.length>=s&&!this.eventsToSkipFlush.includes(i.type)&&this.flush()}catch(e){h(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;if(!this.isFlushAllowed())return void this.scheduleFlush();if(!this.events?.length)return void this.scheduleFlush();if(!this.config.getConfig()?.cluster)return this.noClusterWarned||(this.noClusterWarned=!0,this.logger.log("[events-pool.flush] skipping flush: no cluster")),void this.scheduleFlush();this.noClusterWarned=!1;const t={sessionAttributes:this.getSessionAttributes(),events:this.events};e?this.transporter.send(t,{lifecycle:!0}):this.transporter.send(t),this.events=[],this.scheduleFlush()}catch(e){h(e)}}async flushSync(){try{if(!this.events?.length||!this.initialized)return;if(!this.isFlushAllowed())return void this.discardBuffer();if(!this.config.getConfig()?.cluster)return void this.logger.log("[events-pool.flush] skipping flush: no cluster");await this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[]}catch(e){h(e)}}scheduleFlush(){try{null!==this.timeoutId&&(v.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:Ve);this.timeoutId=v.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){h(e)}var e}getSessionAttributes(){const e=this.config.getConfig();return{...this.getDeviceAttributes(),cluster:e?.cluster||"",env:e?.environment||"",namespace:e?.namespace||"",releaseId:e?.releaseId||"",session_id:this.session.getSessionId(),session_start_time:this.session.getSessionStartTime(),user:e?.user||{},"service.name":e?.appId}}},Ze=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.enrichAttributes=e.enrichAttributes??null,this.idGenerator=e.idGenerator??new d}getPlatformAttributes(){if(!this.enrichAttributes)return{};try{return this.enrichAttributes()??{}}catch(e){return this.logger.log("[event-enricher] platform attribute contributor threw; continuing without it",e),{}}}shouldSample(){const e=this.config.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}formatEventObject(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:E(e)?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:n.has(e)?{[t||"circular_reference"]:"[Circular]"}:(n.add(e),Object.entries(e).reduce(((e,[i,s])=>{const o=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[o]=s.map(((e,t)=>"object"==typeof e&&null!==e?this.formatEventObject(e,`${o}[${t}]`,n,r+1):e)):Object.assign(e,this.formatEventObject(s,o,n,r+1)):e[o]=s,e}),{}))}catch(e){return this.logger.log("[event-enricher.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}enrich(e){const t=b(Date.now()),n=this.idGenerator.generateId(),r=e.spanId||this.idGenerator.generateSpanId(),i=e.traceId||this.idGenerator.generateTraceId(),s=e.parentSpanId||"",o=this.formatEventObject(e.attributes||{}),a=this.getPlatformAttributes(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...o,...a}};return e.span_name&&(l.span_name=e.span_name),"network"===e.type?(l.start_timestamp=e.timestamp||t,l.end_timestamp=e?.end_timestamp):l.timestamp=t,l}};function et(e,t){if(!t)return{data:(new TextEncoder).encode(e),isCompressed:!1};try{const t=i.strToU8(e);return{data:i.gzipSync(t),isCompressed:!0}}catch(t){return{data:(new TextEncoder).encode(e),isCompressed:!1}}}var tt=class{constructor(e){this.logger=l.getInstance(),this.config=e.config,this.sendBatch=e.sendBatch,this.encodeAsync=e.encodeAsync??null}compressAsync(e,t){if(!this.encodeAsync)return Promise.resolve(et(e,t));try{return this.encodeAsync(e,t).catch((()=>et(e,t)))}catch{return Promise.resolve(et(e,t))}}async send(e,{lifecycle:t=!1}={}){const n=this.config.getConfig();if(n)try{n?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const r=n.apiKey,i=this.buildEndpoint();if(!r)return void this.logger.log("No API key found");const s=JSON.stringify(e),o=!!n?.options?.transport?.compression,{data:a,isCompressed:l}=t?et(s,o):await this.compressAsync(s,o),c={"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""};this.sendBatch(i,{method:"POST",headers:c,body:a}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){n?.options?.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();return e?`${e.getEndpoint()}/json/rum`:""}},nt=class{constructor(e){this.storage=e}getItem(e){try{return this.storage?.getItem(e)??null}catch(e){return h(e),null}}setItem(e,t){try{this.storage?.setItem(e,t)}catch(e){h(e)}}removeItem(e){try{this.storage?.removeItem(e)}catch(e){h(e)}}getNumericItem(e,t=0){const n=this.getItem(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}},rt=class{constructor(e){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage=e.storage,this.getMaxDurationMs=e.getMaxDurationMs??null}getSessionId(){if(this.sessionId)return this.sessionId;return this.storage.getItem("gcId")||""}setSessionId(e){this.sessionId=e,this.storage.setItem("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:this.storage.getNumericItem("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,this.storage.setItem("gcStartTime",String(e)),this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcLastActivity")}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:this.storage.getNumericItem("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,this.storage.setItem("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs(),n=t>0?t:w(this.getSessionStartTime());return n>0&&e-n>=xe}hasUserActivity(){return this.getLastActivityMs()>0}clearSamplingDecision(){this.storage.removeItem(qe)}clearSessionState(){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcId"),this.storage.removeItem("gcStartTime"),this.storage.removeItem("gcLastActivity"),this.clearSamplingDecision()}getSessionMaxDuration(){return this.getMaxDurationMs?.()??Le}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-w(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}};function it(){const e=navigator.userAgent;let t="unknown",n="unknown";const r=navigator.platform||"unknown",i=/Mobile|Android|iPhone|iPad|iPod/i.test(e);return/Edg/.test(e)?(t="Edge",n=e.match(/Edg\/([\d.]+)/)?.[1]||n):/Chrome/.test(e)&&!/Chromium/.test(e)?(t="Chrome",n=e.match(/Chrome\/([\d.]+)/)?.[1]||n):/Firefox/.test(e)?(t="Firefox",n=e.match(/Firefox\/([\d.]+)/)?.[1]||n):/Safari/.test(e)&&!/Chrome/.test(e)?(t="Safari",n=e.match(/Version\/([\d.]+)/)?.[1]||n):/Trident/.test(e)?(t="Internet Explorer",n=/rv:([^)]+)\)/i.test(e)?e.match(/rv:([^)]+)\)/i)?.[1]||n:e.match(/MSIE ([^;]+)/)?.[1]||n):/OPR/.test(e)&&(t="Opera",n=e.match(/OPR\/([\d.]+)/)?.[1]||n),{userAgent:e,browser:{name:t,version:n,platform:r,language:navigator.language,mobile:i}}}var st,ot=["navigation","dom.event"],at=class{constructor(e){this.core=null,this.hideWired=!1,this.hideHandler=()=>{try{if("undefined"==typeof document||"hidden"!==document.visibilityState)return;this.core?.session.persistLastActivity(),this.core?.pool.flush({lifecycle:!0})}catch(e){h(e)}},this.logger=l.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.storage=new nt(function(){try{return void 0!==globalThis.sessionStorage?globalThis.sessionStorage:null}catch{return null}}()),this.idGenerator=new d;const t=new Qe;t.initialize(e);const n=new rt({storage:this.storage,getMaxDurationMs:()=>t.getConfig()?.options?.sessionMaxDuration});!function({session:e,idGenerator:t,providedSessionId:n}){const r=l.getInstance();try{const i=e.getSessionId();n&&n!==i?(e.setSessionId(n),e.setSessionStartTime(b(Date.now())),e.clearSamplingDecision(),r.log("[session-bootstrap] using provided sessionId:",n)):n?(e.setSessionId(n),r.log("[session-bootstrap] continuing provided sessionId:",n)):i||e.setSessionId(t.generateId());const s=6e4,o=Date.now(),a=w(e.getSessionStartTime());if(a>0&&o-a>=-s){if(e.isSessionExpired(o)||e.isSessionInactive(o)){const n=e.isSessionExpired(o)?"persisted session past cap":"inactivity gap across reload",i=e.getSessionId(),s=t.generateId();e.setSessionId(s),e.setSessionStartTime(b(o)),e.clearSamplingDecision(),r.log(`[session-bootstrap] init-time rotation: ${n}`,{from:i,to:s})}}else e.setSessionStartTime(b(o))}catch(e){r.log("[session-bootstrap] session bootstrap failed:",e)}}({session:n,idGenerator:this.idGenerator,providedSessionId:e.sessionId});if(!function({storage:e,sessionSampleRate:t}){const n=l.getInstance();if(void 0===t||!Number.isFinite(t)||1===t)return!0;const r=t;try{const t=e.getItem(qe);if(t){const e="1"===t;return n.log("[session-bootstrap] using stored sampling decision:",e),e}const i=Math.random()<r;return e.setItem(qe,i?"1":"0"),n.log("[session-bootstrap] stored new sampling decision:",i),i}catch(e){n.log("[session-bootstrap] storage access failed:",e);const t=Math.random()<r;return n.log("[session-bootstrap] using fallback sampling decision:",t),t}}({storage:this.storage,sessionSampleRate:e.options?.sessionSampleRate}))return void this.logger.log("[session-manager] session is not sampled");const r=new tt({config:t,sendBatch:(e,t)=>fetch(e,t),encodeAsync:(e,t)=>Ie.withFallback((n=>n.encodeBatch(e,t)),(()=>et(e,t)),"transporter")}),i=new Je({config:t,session:n,transporter:r,getDeviceAttributes:it,eventsToSkipFlush:ot}),s=function(e){return()=>{let t="";try{t=v?.document?.title||""}catch(e){h(e)}try{const n=v?.location;if(!n)return{path:"",url:"",title:t};const r=n.hash&&!n.hash.match(/^#[a-z0-9-]+$/i)&&n.hash.startsWith("#/"),i=r?n.hash:n.pathname,s=e.getPrivacy(),o=s.shouldMaskNetworkQueryParams,a={sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"};return{path:o&&r?_(i,a):i,url:o?_(n.href,a):n.href,title:t}}catch(e){return h(e),{path:"",url:"",title:t}}}}(t),o=new Ze({config:t,enrichAttributes:()=>({location:s()}),idGenerator:this.idGenerator}),a=new Fe({config:t,session:n,eventsPool:i,enricher:o});try{i.initialize(),Ie.getInstance(),this.wireHideHandler(),a.instrument(),this.core={config:t,session:n,pool:i,instrumentation:a}}catch(e){this.logger.log("[session-manager] initialization failed — tearing down partial startup:",e);try{a.uninstrument()}catch(e){h(e)}throw i.destroy(),this.unwireHideHandler(),this.core=null,e}}wireHideHandler(){if(!this.hideWired&&"undefined"!=typeof document){this.hideWired=!0;try{document.addEventListener("visibilitychange",this.hideHandler)}catch(e){h(e)}}}unwireHideHandler(){if(this.hideWired&&"undefined"!=typeof document){this.hideWired=!1;try{document.removeEventListener("visibilitychange",this.hideHandler)}catch(e){h(e)}}}identifyUser(e){this.logger.log("[session-manager] identifyUser called"),this.core?this.core.config.updateConfig({user:e}):this.logger.log("[session-manager] cannot identify user: SDK not initialized")}updateConfig(e){if(!this.core)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");this.core.config.updateConfig(e);const t=e.options,n=!!t&&"privacy"in t,r=!!t&&"object"==typeof t.replay&&null!==t.replay&&"blockedSelectors"in t.replay;(n||r)&&this.core.instrumentation.restartReplayForConfigChange()}sendCustomEvent(e){this.core?this.core.instrumentation.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.core?this.core.instrumentation.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.core?this.core.instrumentation.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.core?this.core.instrumentation.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.core?this.core.instrumentation.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.core?this.core.session.getSessionId():(this.logger.log("[session-manager] cannot get session ID: SDK not initialized"),"")}async setSessionId(e){if(this.logger.log("[session-manager] setSessionId called"),this.core)try{this.core.instrumentation.flushPendingReplay(),await this.core.pool.flushSync();const t=e||this.idGenerator.generateId();this.core.session.setSessionId(t),this.core.session.setSessionStartTime(b(Date.now())),this.logger.log("[session-manager] session ID set successfully:",t)}catch(e){this.logger.log("[session-manager] failed to set session ID:",e)}else this.logger.log("[session-manager] cannot set session ID: SDK not initialized")}startReplayRecording(){this.core?this.core.instrumentation.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.core?this.core.instrumentation.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}handoffForReinit(){const e=this.core;if(!e)return;const t=e.session.hasUserActivity();e.instrumentation.uninstrument(),t&&e.pool.flush({lifecycle:!0}),e.pool.destroy(),this.unwireHideHandler(),this.core=null}destroy(){const e=this.core;e&&(e.instrumentation.uninstrument(),e.pool.destroy(),this.unwireHideHandler(),Ie.getInstance().terminate(),e.session.clearSessionState(),this.core=null)}},lt=new class{constructor(e){this.manager=e}emit(e,t,n){this.manager&&this.manager.emitLog(t,e,n)}log(e,t){this.emit("log",e,t)}info(e,t){this.emit("info",e,t)}warn(e,t){this.emit("warn",e,t)}error(e,t){this.emit("error",e,t)}debug(e,t){this.emit("debug",e,t)}trace(e,t){this.emit("trace",e,t)}};var ct={init:function(e){try{st?.handoffForReinit(),st=new at({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",user:e?.user,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),lt.manager=st}catch(e){h(e)}},identifyUser:function(e){st?st.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){st&&st.sendCustomEvent(e)},captureException:function(e,t){st&&st.captureException(e,t)},logger:lt,updateConfig:function(e){if(st)try{st.updateConfig(e)}catch(e){h(e)}},startNavigation:function(e){st?st.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){st?st.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return st?st.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(st)try{await st.setSessionId(e)}catch(e){console.error("[groundcover] setSessionId: failed to set session ID:",e)}else console.warn("[groundcover] setSessionId: groundcover is not initialized. please call init() first")},startReplayRecording:function(){st?st.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){st?st.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=ct}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var ht=ct;module.exports=ht;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import e from"error-stack-parser";import{onCLS as t,onLCP as n,onFCP as r,onTTFB as i,onINP as s}from"web-vitals";import{record as o}from"rrweb";import{pack as a}from"@rrweb/packer";import{strToU8 as l,gzipSync as c}from"fflate";var h=console.log.bind(console),d=class e{constructor(){this.isDebugEnabled=!1,this.prefix=""}static initialize(t){return e.instance||(e.instance=new e),t&&(e.instance.isDebugEnabled=t.debug??!1,e.instance.prefix=t.prefix??""),e.instance}static getInstance(t){return e?.instance||e.initialize(t)}formatMessage(e){return`[${(new Date).toISOString()}] ${this.prefix} ${e}`}log(e,...t){this.isDebugEnabled&&h(this.formatMessage(e),...t)}updateConfig(e){this.isDebugEnabled=e.debug??this.isDebugEnabled,this.prefix=e.prefix??this.prefix}},u=d.getInstance();function g(e){u.log("[error-handler.handleError] called",e,{groundcoverIgnore:!0})}var p=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)f[e]=Math.floor(16*Math.random())+48,f[e]>=58&&(f[e]+=39);return v+String.fromCharCode.apply(null,f.slice(0,16))},this.generateSpanId=m(8),this.generateId=m(16)}},f=Array(32);function m(e){return function(){for(let t=0;t<2*e;t++)f[t]=Math.floor(16*Math.random())+48,f[t]>=58&&(f[t]+=39);return String.fromCharCode.apply(null,f.slice(0,2*e))}}var v="0000000000000000";function y({text:e,maxLength:t=1e4,ellipsis:n=""}){if(null==e)return"";const r="string"==typeof e?e:String(e);return r.length<=t?r:r.substring(0,t)+n}function b(e){return(e||"").replace(/\s+/g," ").trim()}var w=globalThis,E=1e6;function S(e){return e*E}function k(e){return e/E}function I(e){if(null==e||"object"!=typeof e)return!1;try{return"number"==typeof e.nodeType&&"string"==typeof e.nodeName&&"ownerDocument"in e}catch{return!1}}var T="[REDACTED]",R=["authorization","cookie","set-cookie"],L=/(token|key|secret|passwd|password|auth|bearer|credential)/i,M=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,x=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),q=1e5;function A(e,t){if(!e)return!1;if(M.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function N(e,t){return x.has(e.toLowerCase())||A(e,t)}function C(e){return e.includes("-")&&L.test(e)}function H(e,t){return A(e,t)||C(e)}function z(e,t){const n=e.sensitive?T:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return g(e),n}}function _(e,t={}){if(!e)return e;try{return e.split("&").map((e=>{const n=e.indexOf("=");if(-1===n)return e;const r=e.slice(0,n),i=e.slice(n+1);let s=r;try{s=decodeURIComponent(r)}catch{}let o=i;try{o=decodeURIComponent(i)}catch{}const a=N(s,t.sensitiveKeys),l=z({key:s,value:o,path:[s],kind:t.kind??"query",sensitive:a},t.redact);return l===o?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function P(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${_(e.slice(n+1),t)}`}function D(e,t={}){if(!e)return e;const n={...t,kind:t.kind??"query"},r=e.indexOf("#"),i=-1===r?e:e.slice(0,r),s=-1===r?"":e.slice(r+1),o=P(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${T}@`))}(i),n);return-1===r?o:`${o}#${P(s,n)}`}function F(e,t,n,r,i,s){const o=!!e&&A(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(o||i>8)return T;if(I(t))return T;if(s.has(t))return T;s.add(t);try{if(Array.isArray(t))return t.map((t=>F(e,t,n,r,i+1,s)));const o={};for(const[e,a]of Object.entries(t))o[e]=F(e,a,[...n,e],r,i+1,s);return o}catch(e){return g(e),T}finally{s.delete(t)}}return z({key:e,value:t,path:n,kind:r.kind??"log",sensitive:o},r.redact)}function O(e,t={}){if(!e)return e;if(e.length>q)return`${O(e.slice(0,q),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>H(n,t.sensitiveKeys)?`"${n}":"${T}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return N(e,t)||C(e)}(n,t.sensitiveKeys)?`${n}=${T}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>H(n,t.sensitiveKeys)?`${n}: ${T}`:e))}catch(t){g(t),n=e}if(t.redact)try{const n=t.redact({key:"",value:e,path:[],kind:t.kind??"log",sensitive:!1});if(void 0!==n)return null===n?"":String(n)}catch(e){g(e)}return n}function B(e,t={}){try{const n=F("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return g(e),{}}}function j(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:O(t,r),attributes:n?B(n,r):n}}var K=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.pool=e.pool,this.enricher=e.enricher}sendCustomEvent(e){this.logger.log("[manual-event-emitter.sendCustomEvent] called",e);try{const t=this.enricher.enrich({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.pool.addEvent(t)}catch(e){g(e)}}emitLog(e,t,n){this.logger.log("[manual-event-emitter.emitLog] called",{message:e,level:t,attributes:n});try{const r={...n||{}};delete r.message,delete r.level,delete r.location;const{message:i,attributes:s}=j(this.config.getPrivacy(),e,r),o=this.enricher.enrich({type:"log",attributes:{...s,message:y({text:i}),level:t}});this.pool.addEvent(o)}catch(e){g(e)}}},U=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.eventsPool=e.eventsPool,this.enricher=e.enricher}};function X(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function Y(e){const t=e.getPrivacy(),n=e.getConfig()?.providedOptions?.privacy;return{...t,maskSelectors:X(n?.maskSelectors)}}var $="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function W(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Q(e){try{const t=$?.call(e);return"string"==typeof t?t:""}catch{return""}}function G(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function V(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>W(e,t))).filter(Boolean)}(e).some((e=>A(e,t))))}function J(e,t){return"allow"!==t.level&&(!!e&&(!!G(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>G(e,t))))||("mask-all"===t.level||function(e){const t=Q(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&V(e,t.sensitiveKeys)))))}var Z={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},ee=["button","a","input","select","textarea","label","summary",'[role~="button"]','[role~="link"]','[role~="menuitem"]','[role~="menuitemcheckbox"]','[role~="menuitemradio"]','[role~="tab"]','[role~="checkbox"]','[role~="radio"]','[role~="switch"]','[role~="option"]','[role~="treeitem"]','[role~="slider"]','[role~="spinbutton"]','[role~="combobox"]','[role~="textbox"]','[role~="searchbox"]'].join(", "),te=[ee,"li","option","tr","td","th",'[role~="listitem"]','[role~="row"]','[role~="gridcell"]','[role~="cell"]'].join(", ");function ne(e){return!!e&&1===e.nodeType}function re(e){const t=Q(e).toLowerCase();return"body"===t||"html"===t}function ie(e){return y({text:e,maxLength:255})}function se(e){return y({text:e,maxLength:99,ellipsis:"…"})}function oe(e){const t=b(W(e,"role"));return t?t.split(" ")[0]??t:function(e){switch(Q(e).toLowerCase()){case"a":return W(e,"href")?"link":"";case"button":return"button";case"input":switch(W(e,"type").toLowerCase()){case"checkbox":return"checkbox";case"radio":return"radio";case"submit":case"button":case"reset":return"button";case"range":return"slider";case"number":return"spinbutton";default:return"textbox"}case"textarea":return"textbox";case"select":return"combobox";case"img":return"img";case"nav":return"navigation";case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"heading";default:return""}}(e)}function ae(e){if(!ne(e))return"";try{if(re(e))return"";if(function(e){try{return e.querySelectorAll(te).length>=2}catch{return!1}}(e))return"";const t=b(e.textContent||"");return t?t.length>1e3?"":y({text:t,maxLength:255}):""}catch{return""}}function le(e){return W(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5)}function ce(e,t){if(re(e))return"";const n=function(e){const t=[];for(const n of le(e))try{const e=ae(document.getElementById(n));e&&t.push(e)}catch{}return b(t.join(" "))}(e);if(n)return se(n);const r=b(W(e,"aria-label"));if(r)return se(r);const i=b(W(e,"alt"));if(i)return se(i);if(function(e){const t=Q(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=W(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=b(W(e,"value"));if(t)return se(t)}const s=t??ae(e);if(s)return se(s);const o=b(W(e,"title"));if(o)return se(o);const a=b(W(e,"placeholder"));return a?se(a):""}function he(e,t){if("allow"===t.level)return!1;try{return!!e.querySelector("[data-private]")||t.maskSelectors.some((t=>{try{return null!=e.querySelector(t)}catch{return!1}}))}catch{return!1}}var de=class extends U{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.getShouldMaskText=e=>J(e.target,Y(this.config)),this.getKeyCode=(e,t)=>e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key?t?"*":e.key:"",this.getCoordinates=e=>{if({mouseup:!0,mousedown:!0,mousemove:!0,mouseover:!0}[e.type]){const{clientX:t,clientY:n}=e||{};return{clientX:t,clientY:n}}return null}}initialize(){try{this.logger.log("[dom-events-listener.initialize] called"),this.capturedEvents?.forEach((e=>{const t=e=>{try{this.handleEvent(e)}catch(e){g(e)}};this.eventHandlers.push({type:e,handler:t}),w?.addEventListener(e,t)}))}catch(e){g(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}}buildEvent(e){const t=this.getCoordinates(e),n=e.target,r=function(e){if(!ne(e))return null;try{return e.closest(ee)}catch{return null}}(n)??n,i=Y(this.config),s=this.getShouldMaskText({target:n||null})||!!r&&(he(r,i)||function(e,t){if("allow"===t.level)return!1;try{for(const n of le(e)){const e=document.getElementById(n);if(e&&ae(e)&&(J(e,t)||he(e,t)))return!0}}catch{}return!1}(r,i)),o=r?this.generateSelector(r,s?{priorityAttributes:["id","class","name","type"]}:{}):"",a=this.getKeyCode(e,s),l=ae(r),c=function(e,t){if(!ne(e))return{...Z};try{return{role:ie(oe(e)),accessibleName:ce(e,t),ariaLabel:ie(b(W(e,"aria-label"))),title:ie(b(W(e,"title"))),alt:ie(b(W(e,"alt"))),placeholder:ie(b(W(e,"placeholder"))),name:ie(W(e,"name")),inputType:ie(W(e,"type")),href:ie(W(e,"href"))}}catch{return{...Z}}}(r,l),h=i.shouldMaskNetworkQueryParams?D(c.href,{sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"}):c.href,d=e=>s&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");const u={dom_event_selector:o,dom_event_key_code:a,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:W(r,"id"),tagName:Q(r),className:W(r,"class"),text:s?"*":l,role:c.role,accessibleName:d(c.accessibleName),ariaLabel:d(c.ariaLabel),title:d(c.title),alt:d(c.alt),placeholder:d(c.placeholder),name:c.name,inputType:c.inputType,href:d(h)}};return this.enricher.enrich({type:"dom.event",attributes:u})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const n=t.root||document.body||document.documentElement,r=t.maxAttempts||10,i=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===Q(e).toLowerCase())return"html";let s="",o=0,a=e;const l=[];for(;a&&a!==n&&a!==document.documentElement&&o<r;){let e=Q(a).toLowerCase();try{const t=a.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(a.classList?.length){const t=Array.from(a.classList).filter((e=>e&&"string"==typeof e)).map((e=>`.${e}`));t.length&&(e+=t.join(""))}for(const t of i)if("id"!==t&&"class"!==t)try{const n=a.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Q(a).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{a=a.parentElement}catch(e){break}o++}return s||"*"}},ue=["log","info","warn","error","debug","assert","trace"],ge=class extends U{constructor(){super(...arguments),this.originalConsole=null,this.patchedConsole=null,this.isInitialized=!1}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods();const e={};ue.forEach((t=>{if(!(t in console))return;const n=(...e)=>{try{this.isInitialized&&this.handleEvent(e,t)}catch(e){g(e)}finally{this.originalConsole?.[t]&&this.originalConsole[t](...e)}};console[t]=n,e[t]=n})),this.patchedConsole=e,this.isInitialized=!0}catch(e){g(e)}}destroy(){try{if(!this.isInitialized)return;ue.forEach((e=>{this.originalConsole?.[e]&&this.patchedConsole?.[e]&&console[e]===this.patchedConsole[e]&&(console[e]=this.originalConsole[e])})),this.patchedConsole=null,this.isInitialized=!1}catch(e){g(e)}}handleEvent(e,t){try{if(!this.enricher.shouldSample())return;const n=Array.isArray(e)?e:[e],r=this.formatMessage(n,t);if(!r||r?.includes("groundcoverIgnore"))return;const i=this.extractAttributes(n),s=this.buildEvent({message:r,level:t,attributes:i});this.queueEvent(s)}catch(e){g(e)}}buildEvent({message:e,level:t,attributes:n}){const{message:r,attributes:i}=j(this.config.getPrivacy(),e,n);return this.enricher.enrich({type:"log",attributes:{...i,message:y({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const n of e)null!==n&&"object"==typeof n&&"[object Object]"===Object.prototype.toString.call(n)&&Object.assign(t,n);return delete t.message,delete t.level,delete t.location,t}catch(e){return void g(e)}}formatMessage(e,t){if(!Array.isArray(e))return String(e);try{return e.map((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if("object"==typeof e){if(e instanceof Error)try{return"error"===t&&e.stack||e.toString()}catch{try{const t={name:e.name,message:e.message,stack:e.stack};return JSON.stringify(t)}catch{return Object.prototype.toString.call(e)}}try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}return String(e)})).join(" ")}catch(e){return g(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{ue.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){g(e)}return e}};function pe(e){try{if(null==e)return"";if("string"==typeof e)return e;if("undefined"!=typeof FormData&&e instanceof FormData)return"[form data]";if("undefined"!=typeof Blob&&e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if(ArrayBuffer.isView(e))return"[arraybuffer data]";if("undefined"!=typeof ReadableStream&&e instanceof ReadableStream)return"[stream data]";if(9===e?.nodeType)return"[document data]";if("undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams)try{return e.toString()}catch{return"[unreadable body]"}return Array.isArray(e)||"object"==typeof e?JSON.stringify(e):String(e)}catch(e){return g(`Failed to format body: ${e}`),"[unreadable body]"}}var fe="[request body too large]",me="[request body unavailable]",ve="[response body too large]",ye="[response body unavailable]",be="[unreadable response body]",we="[form data]",Ee="[binary data]",Se=class extends U{constructor(){super(...arguments),this.maxBodyLength=5e3,this.requestBodyReadTimeoutMs=3e3,this.responseBodyReadTimeoutMs=3e3,this.idGenerator=new p,this.patched=null,this.active=!1,this.handleEvent=e=>{try{if(!this.active)return;if(this.shouldIgnoreRequest(e.url))return;if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}},this.buildEvent=e=>{let t=e.url,n=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const r=this.config.getPrivacy(),i={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};try{t=new URL(e.url).pathname}catch(s){n=new URL(e.url,globalThis.location.href).href,r.shouldMaskNetworkQueryParams&&(t=D(t,i))}r.shouldMaskNetworkQueryParams&&(n=D(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),o=this.formatHeaders(e.response.headers),a=e.method?.toUpperCase()||"UNKNOWN",{traceId:l,spanId:c}=this.extractTraceIds(e.request.headers),h=(e,t)=>r.shouldMaskNetworkBodies?function(e,t={}){if(!e)return e;const n=e.trim();if(n.length<=q&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(F("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?_(e,t):O(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=y({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=y({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),g={type:"HTTP",operation:{name:a},resource_name:t,status:e.status?.toString(),subType:a,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:o,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:u}}},p={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?S(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?S(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:g};return l&&(p.traceId=l),c&&(p.spanId=c),this.enricher.enrich(p)}}async readBodyStreamCapped(e,t={}){if(!e)return"";const{timeoutMs:n,overflowPlaceholder:r,timeoutPlaceholder:i}=t,s=e.getReader(),o=new TextDecoder;let a,l="",c=0,h=!1,d=!1;const u=null!=n?new Promise((e=>{a=setTimeout((()=>e({timedOut:!0})),n)})):void 0;try{for(;;){const e=u?await Promise.race([s.read(),u]):await s.read();if("timedOut"in e){d=!0;break}const{done:t,value:n}=e;if(t)break;if(c+n.byteLength>=this.maxBodyLength){const e=n.subarray(0,this.maxBodyLength-c);l+=o.decode(e,{stream:!0}),h=!0;break}c+=n.byteLength,l+=o.decode(n,{stream:!0})}return l+=o.decode(),d&&null!=i?i:h&&null!=r?r:l}finally{clearTimeout(a);try{s.cancel()?.catch((()=>{}))}catch{}}}mimeEssence(e){return(e.split(";")[0]||"").trim().toLowerCase()}isTextualContentType(e){const t=this.mimeEssence(e);return!!t&&(!!t.startsWith("text/")||("application/x-www-form-urlencoded"===t||"application/javascript"===t||"application/ecmascript"===t||"application/graphql"===t||/^application\/([\w.-]+\+)?(json|xml)$/.test(t)))}binaryLabel(e){const t=this.mimeEssence(e);return t.startsWith("image/")?"[image data]":t.startsWith("audio/")?"[audio data]":t.startsWith("video/")?"[video data]":t.startsWith("font/")||t.startsWith("application/font")||"application/vnd.ms-fontobject"===t?"[font data]":"application/pdf"===t?"[pdf data]":"application/zip"===t||"application/gzip"===t||"application/x-gzip"===t||"application/x-tar"===t||"application/x-7z-compressed"===t||"application/x-rar-compressed"===t?"[archive data]":"application/wasm"===t?"[wasm data]":t.includes("protobuf")||t.startsWith("application/grpc")?"[protobuf data]":Ee}classifyByContentType(e){const t=(e||"").toLowerCase();return t.includes("multipart/form-data")?we:this.isTextualContentType(t)?null:this.binaryLabel(t)}capBodyText(e,t){return e&&(e.length>=this.maxBodyLength||(new TextEncoder).encode(e).length>=this.maxBodyLength)?t:e}async getRequestBody(e,t){try{if(!e.body)return"";const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.requestBodyReadTimeoutMs,overflowPlaceholder:fe,timeoutPlaceholder:me})}catch{return me}}async getResponseBody(e){if(!e.body)return"";const t=e.headers?.get?.("content-type")??"";if("text/event-stream"===this.mimeEssence(t))return be;const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.responseBodyReadTimeoutMs,overflowPlaceholder:ve,timeoutPlaceholder:ye})}initialize(){this.logger.log("[network-events-listener.initialize] called");const e=globalThis.fetch,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;try{this.patchXHR(),this.patchFetch()}catch(i){return globalThis.fetch=e,globalThis.XMLHttpRequest.prototype.open=t,globalThis.XMLHttpRequest.prototype.send=n,globalThis.XMLHttpRequest.prototype.setRequestHeader=r,this.patched=null,void g(i)}this.patched={originalFetch:e,wrappedFetch:globalThis.fetch,originalXHROpen:t,wrappedXHROpen:globalThis.XMLHttpRequest.prototype.open,originalXHRSend:n,wrappedXHRSend:globalThis.XMLHttpRequest.prototype.send,originalXHRSetRequestHeader:r,wrappedXHRSetRequestHeader:globalThis.XMLHttpRequest.prototype.setRequestHeader},this.active=!0}destroy(){this.active=!1;const e=this.patched;e&&(globalThis.fetch===e.wrappedFetch&&(globalThis.fetch=e.originalFetch),globalThis.XMLHttpRequest.prototype.open===e.wrappedXHROpen&&(globalThis.XMLHttpRequest.prototype.open=e.originalXHROpen),globalThis.XMLHttpRequest.prototype.send===e.wrappedXHRSend&&(globalThis.XMLHttpRequest.prototype.send=e.originalXHRSend),globalThis.XMLHttpRequest.prototype.setRequestHeader===e.wrappedXHRSetRequestHeader&&(globalThis.XMLHttpRequest.prototype.setRequestHeader=e.originalXHRSetRequestHeader),this.patched=null)}shouldIgnoreRequest(e){try{const t=this.config.getConfig()?.getEndpoint();if(t&&e.includes(t))return!0;if([".tsx",".jsx",".css"].some((t=>e.toLowerCase().endsWith(t))))return!0;return(this.config.getConfig()?.options?.excludedUrls||[]).some((t=>{if(t instanceof RegExp)return t.test(e);if("string"==typeof t&&(t.includes("*")||t.includes("?"))){const n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(n).test(e)}return e===t}))}catch(e){return g(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;let i;globalThis.XMLHttpRequest.prototype.open=function(n,r,s=!0,o,a){if(!e.active)return t.apply(this,[n,r,s,o,a]);if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,o,a]);const l=new URL(r.toString(),globalThis.location.href).href;return this._requestMethod=n,this._requestUrl=l,this._requestHeaders={},t.apply(this,[n,r,s,o,a])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(t,n){return e.active?(this._requestHeaders&&(this._requestHeaders[t]=n),r.apply(this,[t,n])):r.apply(this,[t,n])},globalThis.XMLHttpRequest.prototype.send=function(...t){if(!e.active)return n.apply(this,t);const r=this._requestUrl?.toString();if(!r||e.shouldIgnoreRequest(r))return n.apply(this,t);if(e.shouldAddTraceHeader(r)){const t=e.config.getConfig(),n=e.getTraceIds();t?.options?.tracing?.origin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),n&&(t?.options?.tracing?.traceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId}),Boolean(t?.options?.tracing?.propagationHeaders)&&t?.options?.tracing?.propagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:n.traceparent})})),t?.options?.tracing?.propagationHeaders?.length||e.addHeaderToXhrRequest({request:this,headerName:"traceparent",headerValue:n.traceparent}))}return this._requestBody=t[0]||"",this.addEventListener("load",(()=>{const t=Date.now(),n={};this.getAllResponseHeaders().split(/\r?\n/).forEach((e=>{const[t,r]=e.split(": ");t&&r&&(n[t.trim()]=r.trim())}));const r=e.capBodyText(pe(this._requestBody),fe),s=""===this.responseType||"text"===this.responseType,o=s?this.responseText:this.response,a=(s?e.classifyByContentType(n["content-type"]||""):null)??e.capBodyText(pe(o),ve),l={timestamp:i,end_time:t,method:this._requestMethod,url:this._requestUrl,body:r,status:this.status,request:{headers:this._requestHeaders||{},body:r},response:{headers:n,body:a}};e.handleEvent(l)})),n.apply(this,t)}}normalizeHeaders(e,t){try{const n=e?new Headers(e):new Headers;return t?(t instanceof Headers?t.forEach(((e,t)=>n.set(t,e))):Array.isArray(t)?new Headers(t).forEach(((e,t)=>n.set(t,e))):"object"==typeof t&&Object.entries(t).forEach((([e,t])=>n.set(e,t))),n):n}catch{return new Headers}}addTraceHeaders(e){const t=this.config.getConfig(),n=this.getTraceIds();if(t?.options?.tracing?.origin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),!n)return;t?.options?.tracing?.traceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId});const r=t?.options?.tracing?.propagationHeaders;(r?.length?r:["traceparent"]).forEach((t=>{this.addHeaderToFetchRequest({init:e,headerName:t,headerValue:n.traceparent})}))}extractHeadersRecord(e){const t={};return e instanceof Headers&&e.forEach(((e,n)=>{t[n]=e})),t}patchFetch(){const e=globalThis.fetch;globalThis.fetch=(...t)=>{if(!this.active)return e.apply(globalThis,t);const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,o=i?.method||(s?r.method:"GET"),a=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(a))return e.apply(globalThis,t);const l=this.shouldAddTraceHeader(a);i.headers=this.normalizeHeaders(s?r.headers:void 0,i.headers),l&&this.addTraceHeaders(i);const c=this.extractHeadersRecord(i.headers),h=null!=i?.body?this.capBodyText(pe(i.body),fe):"",d=null!=i?.body?Promise.resolve(h):s?this.getRequestBody(r,"content-type"in c?c["content-type"]:r.headers.get("content-type")??""):Promise.resolve("");let u;return d.then((e=>{u=e})).catch((()=>{})),e.apply(globalThis,t).then((e=>{const t=Date.now(),r={};e.headers.forEach(((e,t)=>{r[t]=e}));const i={method:o,url:a,timestamp:n,body:"",status:e.status,end_time:t,request:{headers:c,body:""},response:{headers:r,body:""}},s=()=>{d.then((e=>{i.body=e,i.request.body=e,this.handleEvent(i)}))};return this.getResponseBody(e).then((e=>{i.response.body=e,s()})).catch((e=>{i.response.body=be,s(),this.logger.log("[network-events-listener.patchFetch] error",{error:e})})),e})).catch((e=>{const t=Date.now();let r="NetworkError";const i=e.message||"Unknown network error";e instanceof TypeError&&i.includes("Failed to fetch")?r="ERR_NETWORK_FAILURE":i.includes("Name not resolved")?r="ERR_NAME_NOT_RESOLVED":i.includes("Connection refused")&&(r="ERR_CONNECTION_REFUSED");const s=u??h,l={method:o,url:a,timestamp:n,body:s,status:0,end_time:t,request:{headers:c,body:s},response:{headers:{},body:""},error:{type:r}};throw this.handleEvent(l),e}))}}formatHeaders(e){const t=this.config.getPrivacy(),n="allow"===t.level,r=function(e,t={}){return e?Object.entries(e).reduce(((e,[n,r])=>{const i=n.toLowerCase(),s=z({key:n,value:r,path:[n],kind:"header",sensitive:R.includes(i)||L.test(i)||A(n,t.sensitiveKeys)},t.redact);return e[n]=null===s?"":String(s),e}),{}):e}(e,{sensitiveKeys:n?void 0:t.sensitiveKeys,redact:n?void 0:t.redact});return Object.entries(r)?.reduce(((e,[t,n])=>(e[t]=y({text:n}),e)),{})}extractTraceIds(e){const t=this.config.getConfig();let n="",r="";if(t?.options?.tracing?.traceIdHeaderName){const r=e[t.options.tracing.traceIdHeaderName];r&&"string"==typeof r&&(n=r)}if(t?.options?.tracing?.spanIdHeaderName){const n=e[t.options.tracing.spanIdHeaderName];n&&"string"==typeof n&&(r=n)}if(!n||!r){const t=this.extractTraceparentHeader(e);if(t){const e=t.split("-");4===e.length&&"00"===e[0]&&(!n&&e[1]&&32===e[1].length&&(n=e[1]),!r&&e[2]&&16===e[2].length&&(r=e[2]))}}return{traceId:n,spanId:r}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracing?.propagationHeaders?.length)for(const n of t.options.tracing.propagationHeaders){const t=e[n];if(t&&"string"==typeof t)return t}const n=e.traceparent;return n&&"string"==typeof n?n:""}getTraceIds(){const e=this.idGenerator.generateSpanId(),t=this.idGenerator.generateTraceId();let n,r;try{n=BigInt("0x"+t).toString(10),r=BigInt("0x"+e).toString(10)}catch(i){this.logger.log("[network-events-listener.getTraceIds] error",{error:i}),n=t,r=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:n,decimalSpanId:r}}addHeaderToXhrRequest({request:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToXhrRequest] called",{request:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.setRequestHeader(t,n),e._requestHeaders[t]=n}catch(e){this.logger.log("[network-events-listener.addHeaderToXhrRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToXhrRequest] Invalid header name",{headerName:t})}addHeaderToFetchRequest({init:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToFetchRequest] called",{init:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.headers instanceof Headers?e.headers.set(t,n):e.headers={...e.headers,[t]:n}}catch(e){this.logger.log("[network-events-listener.addHeaderToFetchRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToFetchRequest] Invalid header name",{headerName:t})}isValidHeaderName(e){if(!e||"string"!=typeof e)return!1;return/^[a-zA-Z0-9!#$&'*+\-.^_`|~]+$/.test(e)}shouldAddTraceHeader(e){const t=this.config.getConfig();if(this.logger.log("[network-events-listener.shouldAddTraceHeader] called",{url:e,config:t}),!t?.options?.tracing?.propagationUrls?.length)return!1;const n=t.options.tracing.propagationUrls?.some((t=>{const n=t.replace(/\*/g,".*"),r=new RegExp(`^${n}$`),i=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return r.test(i)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:n}),n}},ke=class extends U{constructor(){super(...arguments),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const r=this.buildEvent(n,t);this.queueEvent(r)}catch(e){g(e)}}}initialize(){w?.addEventListener("error",this.handleEvent),w?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){w?.removeEventListener("error",this.handleEvent),w?.removeEventListener("unhandledrejection",this.handleEvent)}buildEvent(e,t){const n=this.config.getPrivacy(),r=n.shouldMaskErrors,i={sensitiveKeys:n.sensitiveKeys,redact:n.redact,kind:"error"},s=e.message||"Unknown error",o=r?O(s,i):s,a=r&&t?.metadata?B(t.metadata,i):t?.metadata,l={error_type:e.name||"Error",error_message:o,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${y({text:o,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:a};return this.enricher.enrich({type:"exception",attributes:l})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}enhanceError(e,t){const{filename:n,lineno:r,colno:i}=t||{};n&&!e.fileName&&Object.defineProperty(e,"fileName",{value:n}),r&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:r}),i&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:i})}createUnhandledRejectionError(e){let t;if(e.reason instanceof Error)t=e.reason;else{const n="object"==typeof e.reason?JSON.stringify(e.reason,null,2):String(e.reason);t=new Error(n),t.name="UnhandledRejection",Object.defineProperty(t,"originalReason",{value:e.reason,enumerable:!1})}return t}buildStackTrace(t){if(!t)return[];try{return e.parse(t).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Ie=class extends U{constructor(e,{isEnabled:t}){if(super(e),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.patchedPushState=null,this.patchedReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&t)try{this.isAutomaticNavigationEnabled=t,this.currentUrl=w.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){g(e)}}isInBrowserEnvironment(){try{return void 0!==w&&void 0!==w.location&&void 0!==w.history&&"function"==typeof w.addEventListener}catch(e){return g(e),!1}}initialize(){try{if(this.logger.log("[navigation-listener.initialize] called"),!this.isInBrowserEnvironment()||!this.originalPushState||!this.originalReplaceState)return void this.logger.log("[navigation-listener.initialize] Browser environment not available, skipping initialization");if(!this.isAutomaticNavigationEnabled)return void this.logger.log("[navigation-listener.initialize] Automatic navigation is disabled, skipping initialization");const e=this.originalPushState,t=this.originalReplaceState,n=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},r=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n};history.pushState=n,history.replaceState=r,this.patchedPushState=n,this.patchedReplaceState=r,w&&"function"==typeof w.addEventListener&&(w.addEventListener("popstate",this.popStateHandler),w.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){g(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState===this.patchedPushState&&(history.pushState=this.originalPushState),history.replaceState===this.patchedReplaceState&&(history.replaceState=this.originalReplaceState)),this.patchedPushState=null,this.patchedReplaceState=null,w&&"function"==typeof w.removeEventListener&&(w.removeEventListener("popstate",this.popStateHandler),w.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){g(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){g(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",w.location.href);const e=this.config.getPrivacy(),t="allow"===e.level,n=w.location.href,r=this.activeNavigation?.metadata,i={page_url:e.shouldMaskNetworkQueryParams?D(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?B(r,{sensitiveKeys:e.sensitiveKeys,redact:e.redact}):r,duration_ms:this.activeNavigation?.duration_ms||0,start_timestamp:this.activeNavigation?.startTime||0,end_timestamp:this.activeNavigation?.endTime||0};return this.enricher.enrich({type:"navigation",attributes:i})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}startNavigation(e){try{this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:w?.location?.href||"",metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}catch(e){g(e)}}endNavigation(e){try{if(this.logger.log("[navigation-listener.endNavigation] called",e),!this.activeNavigation)return void this.logger.log("[navigation-listener.endNavigation] no active navigation found");this.logger.log("[navigation-listener.endNavigation] active navigation",this.activeNavigation),this.activeNavigation.endTime=Date.now(),this.activeNavigation.duration_ms=this.activeNavigation.endTime-this.activeNavigation.startTime,this.handleEvent()}catch(e){g(e)}}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===w.location.href)return;let e,t;try{e=new URL(w.location.href),t=new URL(this.currentUrl)}catch(e){return void g(e)}const n=e=>e.startsWith("#/"),r=n(e.hash)||n(t.hash);(e.pathname!==t.pathname||r&&e.hash!==t.hash)&&(this.currentUrl=w.location.href,this.handleEvent())}catch(e){g(e)}}},Te=class extends U{constructor(e){super(e),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",w),"complete"===w?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):w?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),g(e)}}destroy(){w?.removeEventListener("load",this.loadEventHandler)}handleEvent(){try{this.logger.log("[page-load-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){g(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,n=performance.getEntriesByType("resource"),r={count:n.length,totalSize:0,totalDuration:0,byType:{}};n.forEach((e=>{const t=e,n=t.transferSize||0,i=t.duration,s=t.initiatorType;r.totalSize+=n,r.totalDuration+=i,r.byType[s]||(r.byType[s]={count:0,size:0,duration:0}),r.byType[s].count++,r.byType[s].size+=n,r.byType[s].duration+=i}));const i=this.config.getPrivacy(),s=i.shouldMaskNetworkQueryParams,o={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},a=w?.location?.href||"",l=w?.document?.referrer||"",c={page_url:s?D(a,o):a,page_load_time:t,page_referrer:s?D(l,o):l,page_resources:r};return this.enricher.enrich({type:"pageload",attributes:c})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},Re=class extends U{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}}}initialize(){t(this.handleEvent),n(this.handleEvent),r(this.handleEvent),i(this.handleEvent),s(this.handleEvent)}destroy(){}buildEvent(e){const t={performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""};return this.enricher.enrich({type:"performance",attributes:t})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},Le=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.consecutiveTimeouts=0,this.isAvailable=!1,this.logger=d.getInstance(),"undefined"==typeof Worker||"undefined"==typeof URL||"undefined"==typeof Blob)return;const e=new Blob(['!function(){"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,t=new r([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),f=new r([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(r,t){for(var f=new n(31),o=0;o<31;++o)f[o]=t+=1<<r[o-1];var a=new e(f[30]);for(o=1;o<30;++o)for(var i=f[o];i<f[o+1];++i)a[i]=i-f[o]<<5|o;return{b:f,r:a}},i=a(t,2),u=i.b,v=i.r;u[28]=258,v[258]=28;var s=a(f,0).r,l=new n(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>1|(21845&Y)<<1))>>2|(13107&Q)<<2))>>4|(3855&Q)<<4,l[Y]=((65280&Q)>>8|(255&Q)<<8)>>1;var c=function(r,e,t){for(var f=r.length,o=0,a=new n(e);o<f;++o)r[o]&&++a[r[o]-1];var i,u=new n(e);for(o=1;o<e;++o)u[o]=u[o-1]+a[o-1]<<1;for(i=new n(f),o=0;o<f;++o)r[o]&&(i[o]=l[u[r[o]-1]++]>>15-r[o]);return i},h=new r(288);for(Y=0;Y<144;++Y)h[Y]=8;for(Y=144;Y<256;++Y)h[Y]=9;for(Y=256;Y<280;++Y)h[Y]=7;for(Y=280;Y<288;++Y)h[Y]=8;var w=new r(32);for(Y=0;Y<32;++Y)w[Y]=5;var g=c(h,9),d=c(w,5),m=function(r){return(r+7)/8|0},p=function(n,e,t){return(null==t||t>n.length)&&(t=n.length),new r(n.subarray(e,t))},y=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8},M=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8,r[t+2]|=e>>16},b=function(e,t){for(var f=[],o=0;o<e.length;++o)e[o]&&f.push({s:o,f:e[o]});var a=f.length,i=f.slice();if(!a)return{t:U,l:0};if(1==a){var u=new r(f[0].s+1);return u[f[0].s]=1,{t:u,l:1}}f.sort((function(r,n){return r.f-n.f})),f.push({s:-1,f:25001});var v=f[0],s=f[1],l=0,c=1,h=2;for(f[0]={s:-1,f:v.f+s.f,l:v,r:s};c!=a-1;)v=f[f[l].f<f[h].f?l++:h++],s=f[l!=c&&f[l].f<f[h].f?l++:h++],f[c++]={s:-1,f:v.f+s.f,l:v,r:s};var w=i[0].s;for(o=1;o<a;++o)i[o].s>w&&(w=i[o].s);var g=new n(w+1),d=k(f[c-1],g,0);if(d>t){o=0;var m=0,p=d-t,y=1<<p;for(i.sort((function(r,n){return g[n.s]-g[r.s]||r.f-n.f}));o<a;++o){var M=i[o].s;if(!(g[M]>t))break;m+=y-(1<<d-g[M]),g[M]=t}for(m>>=p;m>0;){var b=i[o].s;g[b]<t?m-=1<<t-g[b]++-1:++o}for(;o>=0&&m;--o){var x=i[o].s;g[x]==t&&(--g[x],++m)}d=t}return{t:new r(g),l:d}},k=function(r,n,e){return-1==r.s?Math.max(k(r.l,n,e+1),k(r.r,n,e+1)):n[r.s]=e},x=function(r){for(var e=r.length;e&&!r[--e];);for(var t=new n(++e),f=0,o=r[0],a=1,i=function(r){t[f++]=r},u=1;u<=e;++u)if(r[u]==o&&u!=e)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=r[u]}return{c:t.subarray(0,f),n:e}},A=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},C=function(r,n,e){var t=e.length,f=m(n+2);r[f]=255&t,r[f+1]=t>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},T=function(r,e,a,i,u,v,s,l,m,p,k){y(e,k++,a),++u[256];for(var T=b(u,15),E=T.t,U=T.l,D=b(v,15),S=D.t,I=D.l,j=x(E),z=j.c,J=j.n,N=x(S),O=N.c,q=N.n,B=new n(19),F=0;F<z.length;++F)++B[31&z[F]];for(F=0;F<O.length;++F)++B[31&O[F]];for(var G=b(B,7),H=G.t,K=G.l,L=19;L>4&&!H[o[L-1]];--L);var P,Q,R,V,W=p+5<<3,X=A(u,h)+A(v,w)+s,Y=A(u,E)+A(v,S)+s+14+3*L+A(B,H)+2*B[16]+3*B[17]+7*B[18];if(m>=0&&W<=X&&W<=Y)return C(e,k,r.subarray(m,m+p));if(y(e,k,1+(Y<X)),k+=2,Y<X){P=c(E,U),Q=E,R=c(S,I),V=S;var Z=c(H,K);y(e,k,J-257),y(e,k+5,q-1),y(e,k+10,L-4),k+=14;for(F=0;F<L;++F)y(e,k+3*F,H[o[F]]);k+=3*L;for(var $=[z,O],_=0;_<2;++_){var rr=$[_];for(F=0;F<rr.length;++F){var nr=31&rr[F];y(e,k,Z[nr]),k+=H[nr],nr>15&&(y(e,k,rr[F]>>5&127),k+=rr[F]>>12)}}}else P=g,Q=h,R=d,V=w;for(F=0;F<l;++F){var er=i[F];if(er>255){M(e,k,P[(nr=er>>18&31)+257]),k+=Q[nr+257],nr>7&&(y(e,k,er>>23&31),k+=t[nr]);var tr=31&er;M(e,k,R[tr]),k+=V[tr],tr>3&&(M(e,k,er>>5&8191),k+=f[tr])}else M(e,k,P[er]),k+=Q[er]}return M(e,k,P[256]),k+Q[256]},E=new e([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),U=new r(0),D=function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var e=n,t=9;--t;)e=(1&e&&-306674912)^e>>>1;r[n]=e}return r}(),S=function(o,a,i,u,l){if(!l&&(l={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),h=new r(c.length+o.length);h.set(c),h.set(o,c.length),o=h,l.w=c.length}return function(o,a,i,u,l,c){var h=c.z||o.length,w=new r(u+h+5*(1+Math.ceil(h/7e3))+l),g=w.subarray(u,w.length-l),d=c.l,y=7&(c.r||0);if(a){y&&(g[0]=c.r>>3);for(var M=E[a-1],b=M>>13,k=8191&M,x=(1<<i)-1,A=c.p||new n(32768),U=c.h||new n(x+1),D=Math.ceil(i/3),S=2*D,I=function(r){return(o[r]^o[r+1]<<D^o[r+2]<<S)&x},j=new e(25e3),z=new n(288),J=new n(32),N=0,O=0,q=c.i||0,B=0,F=c.w||0,G=0;q+2<h;++q){var H=I(q),K=32767&q,L=U[H];if(A[K]=L,U[H]=K,F<=q){var P=h-q;if((N>7e3||B>24576)&&(P>423||!d)){y=T(o,g,0,j,z,J,O,B,G,q-G,y),B=N=O=0,G=q;for(var Q=0;Q<286;++Q)z[Q]=0;for(Q=0;Q<30;++Q)J[Q]=0}var R=2,V=0,W=k,X=K-L&32767;if(P>2&&H==I(q-X))for(var Y=Math.min(b,P)-1,Z=Math.min(32767,q),$=Math.min(258,P);X<=Z&&--W&&K!=L;){if(o[q+R]==o[q+R-X]){for(var _=0;_<$&&o[q+_]==o[q+_-X];++_);if(_>R){if(R=_,V=X,_>Y)break;var rr=Math.min(X,_-2),nr=0;for(Q=0;Q<rr;++Q){var er=q-X+Q&32767,tr=er-A[er]&32767;tr>nr&&(nr=tr,L=er)}}}X+=(K=L)-(L=A[K])&32767}if(V){j[B++]=268435456|v[R]<<18|s[V];var fr=31&v[R],or=31&s[V];O+=t[fr]+f[or],++z[257+fr],++J[or],F=q+R,++N}else j[B++]=o[q],++z[o[q]]}}for(q=Math.max(q,F);q<h;++q)j[B++]=o[q],++z[o[q]];y=T(o,g,d,j,z,J,O,B,G,q-G,y),d||(c.r=7&y|g[y/8|0]<<3,y-=7,c.h=U,c.p=A,c.i=q,c.w=F)}else{for(q=c.w||0;q<h+d;q+=65535){var ar=q+65535;ar>=h&&(g[y/8|0]=d,ar=h),y=C(g,y+1,o.subarray(q,ar))}c.i=h}return p(w,0,u+m(y)+l)}(o,null==a.level?6:a.level,null==a.mem?l.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(o.length)))):20:12+a.mem,i,u,l)},I=function(r,n,e){for(;e;++n)r[n]=e,e>>>=8};function j(r,n){n||(n={});var e=function(){var r=-1;return{p:function(n){for(var e=r,t=0;t<n.length;++t)e=D[255&e^n[t]]^e>>>8;r=e},d:function(){return~r}}}(),t=r.length;e.p(r);var f,o=S(r,n,10+((f=n).filename?f.filename.length+1:0),8),a=o.length;return function(r,n){var e=n.filename;if(r[0]=31,r[1]=139,r[2]=8,r[8]=n.level<2?4:9==n.level?2:0,r[9]=3,0!=n.mtime&&I(r,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){r[3]=8;for(var t=0;t<=e.length;++t)r[t+10]=e.charCodeAt(t)}}(o,n),I(o,a-8,e.d()),I(o,a-4,t),o}var z="undefined"!=typeof TextEncoder&&new TextEncoder,J="undefined"!=typeof TextDecoder&&new TextDecoder;try{J.decode(U,{stream:!0})}catch(r){}var N=Uint8Array,O=Uint16Array,q=Uint32Array,B=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),F=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),G=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),H=function(r,n){for(var e=new O(31),t=0;t<31;++t)e[t]=n+=1<<r[t-1];var f=new q(e[30]);for(t=1;t<30;++t)for(var o=e[t];o<e[t+1];++o)f[o]=o-e[t]<<5|t;return[e,f]},K=H(B,2),L=K[0],P=K[1];L[28]=258,P[258]=28;var Q,R=H(F,0)[1],V=new O(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>>1|(21845&Y)<<1))>>>2|(13107&Q)<<2))>>>4|(3855&Q)<<4,V[Y]=((65280&Q)>>>8|(255&Q)<<8)>>>1;var W=function(r,n,e){for(var t=r.length,f=0,o=new O(n);f<t;++f)++o[r[f]-1];var a,i=new O(n);for(f=0;f<n;++f)i[f]=i[f-1]+o[f-1]<<1;for(a=new O(t),f=0;f<t;++f)a[f]=V[i[r[f]-1]++]>>>15-r[f];return a},X=new N(288);for(Y=0;Y<144;++Y)X[Y]=8;for(Y=144;Y<256;++Y)X[Y]=9;for(Y=256;Y<280;++Y)X[Y]=7;for(Y=280;Y<288;++Y)X[Y]=8;var Y,Z=new N(32);for(Y=0;Y<32;++Y)Z[Y]=5;var $=W(X,9),_=W(Z,5),rr=function(r){return(r/8|0)+(7&r&&1)},nr=function(r,n,e){(null==e||e>r.length)&&(e=r.length);var t=new(r instanceof O?O:r instanceof q?q:N)(e-n);return t.set(r.subarray(n,e)),t},er=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8},tr=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8,r[t+2]|=e>>>16},fr=function(r,n){for(var e=[],t=0;t<r.length;++t)r[t]&&e.push({s:t,f:r[t]});var f=e.length,o=e.slice();if(!f)return[new N(0),0];if(1==f){var a=new N(e[0].s+1);return a[e[0].s]=1,[a,1]}e.sort((function(r,n){return r.f-n.f})),e.push({s:-1,f:25001});var i=e[0],u=e[1],v=0,s=1,l=2;for(e[0]={s:-1,f:i.f+u.f,l:i,r:u};s!=f-1;)i=e[e[v].f<e[l].f?v++:l++],u=e[v!=s&&e[v].f<e[l].f?v++:l++],e[s++]={s:-1,f:i.f+u.f,l:i,r:u};var c=o[0].s;for(t=1;t<f;++t)o[t].s>c&&(c=o[t].s);var h=new O(c+1),w=or(e[s-1],h,0);if(w>n){t=0;var g=0,d=w-n,m=1<<d;for(o.sort((function(r,n){return h[n.s]-h[r.s]||r.f-n.f}));t<f;++t){var p=o[t].s;if(!(h[p]>n))break;g+=m-(1<<w-h[p]),h[p]=n}for(g>>>=d;g>0;){var y=o[t].s;h[y]<n?g-=1<<n-h[y]++-1:++t}for(;t>=0&&g;--t){var M=o[t].s;h[M]==n&&(--h[M],++g)}w=n}return[new N(h),w]},or=function(r,n,e){return-1==r.s?Math.max(or(r.l,n,e+1),or(r.r,n,e+1)):n[r.s]=e},ar=function(r){for(var n=r.length;n&&!r[--n];);for(var e=new O(++n),t=0,f=r[0],o=1,a=function(r){e[t++]=r},i=1;i<=n;++i)if(r[i]==f&&i!=n)++o;else{if(!f&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(f),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(f);o=1,f=r[i]}return[e.subarray(0,t),n]},ir=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},ur=function(r,n,e){var t=e.length,f=rr(n+2);r[f]=255&t,r[f+1]=t>>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},vr=function(r,n,e,t,f,o,a,i,u,v,s){er(n,s++,e),++f[256];for(var l=fr(f,15),c=l[0],h=l[1],w=fr(o,15),g=w[0],d=w[1],m=ar(c),p=m[0],y=m[1],M=ar(g),b=M[0],k=M[1],x=new O(19),A=0;A<p.length;++A)x[31&p[A]]++;for(A=0;A<b.length;++A)x[31&b[A]]++;for(var C=fr(x,7),T=C[0],E=C[1],U=19;U>4&&!T[G[U-1]];--U);var D,S,I,j,z=v+5<<3,J=ir(f,X)+ir(o,Z)+a,N=ir(f,c)+ir(o,g)+a+14+3*U+ir(x,T)+(2*x[16]+3*x[17]+7*x[18]);if(z<=J&&z<=N)return ur(n,s,r.subarray(u,u+v));if(er(n,s,1+(N<J)),s+=2,N<J){D=W(c,h),S=c,I=W(g,d),j=g;var q=W(T,E);er(n,s,y-257),er(n,s+5,k-1),er(n,s+10,U-4),s+=14;for(A=0;A<U;++A)er(n,s+3*A,T[G[A]]);s+=3*U;for(var H=[p,b],K=0;K<2;++K){var L=H[K];for(A=0;A<L.length;++A){var P=31&L[A];er(n,s,q[P]),s+=T[P],P>15&&(er(n,s,L[A]>>>5&127),s+=L[A]>>>12)}}}else D=$,S=X,I=_,j=Z;for(A=0;A<i;++A)if(t[A]>255){P=t[A]>>>18&31;tr(n,s,D[P+257]),s+=S[P+257],P>7&&(er(n,s,t[A]>>>23&31),s+=B[P]);var Q=31&t[A];tr(n,s,I[Q]),s+=j[Q],Q>3&&(tr(n,s,t[A]>>>5&8191),s+=F[Q])}else tr(n,s,D[t[A]]),s+=S[t[A]];return tr(n,s,D[256]),s+S[256]},sr=new q([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lr=function(r,n,e,t,f){return function(r,n,e,t,f,o){var a=r.length,i=new N(t+a+5*(1+Math.floor(a/7e3))+f),u=i.subarray(t,i.length-f),v=0;if(!n||a<8)for(var s=0;s<=a;s+=65535){var l=s+65535;l<a?v=ur(u,v,r.subarray(s,l)):(u[s]=o,v=ur(u,v,r.subarray(s,a)))}else{for(var c=sr[n-1],h=c>>>13,w=8191&c,g=(1<<e)-1,d=new O(32768),m=new O(g+1),p=Math.ceil(e/3),y=2*p,M=function(n){return(r[n]^r[n+1]<<p^r[n+2]<<y)&g},b=new q(25e3),k=new O(288),x=new O(32),A=0,C=0,T=(s=0,0),E=0,U=0;s<a;++s){var D=M(s),S=32767&s,I=m[D];if(d[S]=I,m[D]=S,E<=s){var j=a-s;if((A>7e3||T>24576)&&j>423){v=vr(r,u,0,b,k,x,C,T,U,s-U,v),T=A=C=0,U=s;for(var z=0;z<286;++z)k[z]=0;for(z=0;z<30;++z)x[z]=0}var J=2,G=0,H=w,K=S-I&32767;if(j>2&&D==M(s-K))for(var L=Math.min(h,j)-1,Q=Math.min(32767,s),V=Math.min(258,j);K<=Q&&--H&&S!=I;){if(r[s+J]==r[s+J-K]){for(var W=0;W<V&&r[s+W]==r[s+W-K];++W);if(W>J){if(J=W,G=K,W>L)break;var X=Math.min(K,W-2),Y=0;for(z=0;z<X;++z){var Z=s-K+z+32768&32767,$=Z-d[Z]+32768&32767;$>Y&&(Y=$,I=Z)}}}K+=(S=I)-(I=d[S])+32768&32767}if(G){b[T++]=268435456|P[J]<<18|R[G];var _=31&P[J],er=31&R[G];C+=B[_]+F[er],++k[257+_],++x[er],E=s+J,++A}else b[T++]=r[s],++k[r[s]]}}v=vr(r,u,o,b,k,x,C,T,U,s-U,v)}return nr(i,0,t+rr(v)+f)}(r,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(r.length)))):12+n.mem,e,t,!0)};function cr(r,n){void 0===n&&(n={});var e=function(){var r=1,n=0;return{p:function(e){for(var t=r,f=n,o=e.length,a=0;a!=o;){for(var i=Math.min(a+5552,o);a<i;++a)f+=t+=e[a];t%=65521,f%=65521}r=t,n=f},d:function(){return(r>>>8<<16|(255&n)<<8|n>>>8)+2*((255&r)<<23)}}}();e.p(r);var t,f,o,a=lr(r,n,2,4);return t=a,f=n.level,o=0==f?0:f<6?1:9==f?3:2,t[0]=120,t[1]=o<<6|(o?32-2*o:1),function(r,n,e){for(;e;++n)r[n]=e,e>>>=8}(a,a.length-4,e.d()),a}var hr=r=>{const n={...r,v:"v1"};return function(r){for(var n="",e=0;e<r.length;){var t=r[e++];n+=String.fromCharCode(t)}return n}(cr(function(r,n){var e=r.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(r);for(var t=new N(r.length+(r.length>>>1)),f=0,o=function(r){t[f++]=r},a=0;a<e;++a){if(f+5>t.length){var i=new N(f+8+(e-a<<1));i.set(t),t=i}var u=r.charCodeAt(a);u<128||n?o(u):u<2048?(o(192|u>>>6),o(128|63&u)):u>55295&&u<57344?(o(240|(u=65536+(1047552&u)|1023&r.charCodeAt(++a))>>>18),o(128|u>>>12&63),o(128|u>>>6&63),o(128|63&u)):(o(224|u>>>12),o(128|u>>>6&63),o(128|63&u))}return nr(t,0,f)}(JSON.stringify(n))))},wr=self;wr.onmessage=n=>{const e=n.data;if(!e||"number"!=typeof e.id||"pack-replay"!==e.op&&"encode-batch"!==e.op)return void(e&&"number"==typeof e.id&&wr.postMessage({id:e.id,ok:!1,error:"malformed message"}));const{id:t,op:f,payload:o}=e;try{if("pack-replay"===f){const r=o.events.map((r=>hr(r)));return void wr.postMessage({id:t,ok:!0,result:{packed:r}})}if("encode-batch"===f){const{json:n,compress:e}=o;if(!e){const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}try{const e=j(function(n,e){if(z)return z.encode(n);for(var t=n.length,f=new r(n.length+(n.length>>1)),o=0,a=function(r){f[o++]=r},i=0;i<t;++i){if(o+5>f.length){var u=new r(o+8+(t-i<<1));u.set(f),f=u}var v=n.charCodeAt(i);v<128||e?a(v):v<2048?(a(192|v>>6),a(128|63&v)):v>55295&&v<57344?(a(240|(v=65536+(1047552&v)|1023&n.charCodeAt(++i))>>18),a(128|v>>12&63),a(128|v>>6&63),a(128|63&v)):(a(224|v>>12),a(128|v>>6&63),a(128|63&v))}return p(f,0,o)}(n));return void wr.postMessage({id:t,ok:!0,result:{bytes:e,isCompressed:!0}},[e.buffer])}catch{const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}}wr.postMessage({id:t,ok:!1,error:"unknown op"})}catch(r){wr.postMessage({id:t,ok:!1,error:r instanceof Error?r.message:String(r)})}}}();'],{type:"application/javascript"}),t=URL.createObjectURL(e);try{this.worker=new Worker(t),Promise.resolve().then((()=>URL.revokeObjectURL(t))),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFatalFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.logger.log("[worker-client] worker onmessageerror — single message dropped, worker still alive"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){URL.revokeObjectURL(t),this.logger.log("[worker-client] failed to spawn worker, falling back to main thread:",e),this.worker=null,this.isAvailable=!1}}static getInstance(){return e.instance||(e.instance=new e),e.instance}static __resetForTests(){e.instance&&e.instance.terminate(),e.instance=null}static async withFallback(t,n,r){const i=e.getInstance();if(!i.isAvailable)return n();try{return await t(i)}catch(e){return d.getInstance().log(`[${r}] worker call failed, using inline fallback:`,e),n()}}packReplay(e){return this.dispatch("pack-replay",{events:e}).then((e=>e.packed))}encodeBatch(e,t){return this.dispatch("encode-batch",{json:e,compress:t}).then((e=>({data:e.bytes,isCompressed:e.isCompressed})))}terminate(){if(this.worker){try{this.worker.terminate()}catch(e){this.logger.log("[worker-client] failed to terminate worker:",e)}this.worker=null}this.isAvailable=!1,this.rejectAllPending(new Error("worker terminated")),e.instance===this&&(e.instance=null)}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,r=this.worker;return new Promise(((i,s)=>{const o=setTimeout((()=>{this.pending.has(n)&&(this.pending.delete(n),this.consecutiveTimeouts+=1,this.consecutiveTimeouts>=3&&this.handleFatalFailure("worker latched after 3 consecutive timeouts"),s(new Error("worker request timed out")))}),1500);this.pending.set(n,{resolve:i,reject:s,timeoutId:o});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(o),this.pending.delete(n),s(e instanceof Error?e:new Error(String(e)))}}))}handleMessage(e){const t=this.pending.get(e.id);t&&(clearTimeout(t.timeoutId),this.pending.delete(e.id),this.consecutiveTimeouts=0,e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFatalFailure(e,t){if(this.logger.log(`[worker-client] ${e}${t?": "+t:""}`),this.isAvailable=!1,this.rejectAllPending(new Error(e)),this.worker){try{this.worker.terminate()}catch{}this.worker=null}}rejectAllPending(e){for(const t of this.pending.values())clearTimeout(t.timeoutId),t.reject(e);this.pending.clear()}};Le.instance=null;var Me=Le;var xe=class{constructor(e){this.logger=d.getInstance(),this.stopFn=null,this.isRecording=!1,this.events=[],this.startTime=0,this.batchSize=3,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,this.sendTimerId=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher}initialize(){this.logger.log("[session-replay-listener] initialize called"),this.isRecording?this.logger.log("[session-replay-listener] already recording"):this.startRecording()}startRecording(){try{this.startTime=Date.now(),this.events=[],this.isRecording=!0,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0;const e=this.configManager.getConfig()?.options?.replay,t=e?.blockedSelectors?.filter(Boolean),n=t?.length?t.join(", "):void 0,r=Y(this.configManager),i=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=X(t?.maskSelectors),s=t?.replay,o="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,a="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;return l="mask-all"===n||!r&&void 0!==o?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0,{maskTextSelector:l,maskAllInputs:!r,maskTextFn:o,maskInputFn:a}}(this.configManager.getConfig()?.providedOptions),s=i.maskInputFn??("allow"===r.level?void 0:(e,t)=>J(t,r)?"*".repeat(e.length):e);this.stopFn=o({...n?{blockSelector:n}:{},...i.maskTextSelector?{maskTextSelector:i.maskTextSelector}:{},maskAllInputs:i.maskAllInputs,...i.maskTextFn?{maskTextFn:i.maskTextFn}:{},...s?{maskInputFn:s}:{},slimDOMOptions:{script:!1,comment:!1,headWhitespace:!1},sampling:{mousemove:100,input:"last",scroll:150},checkoutEveryNms:3e4,emit:(e,t)=>{if(this.isRecording)try{this.events.push(e),t&&(this.batchContainsFullSnapshot=!0,this.fullSnapshotTimestamp=Date.now(),this.logger.log("[session-replay-listener] full snapshot captured at",this.fullSnapshotTimestamp)),this.events.length>=this.batchSize&&this.scheduleSendBatch()}catch(e){g(e),this.logger.log("[session-replay-listener] failed to process event in emit callback:",e)}}})||null,this.logger.log("[session-replay-listener] started recording with full snapshot interval:",3e4,"ms")}catch(e){g(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=w.setTimeout((()=>{this.sendTimerId=null,this.isRecording&&this.sendBatchAsync().catch((e=>{g(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}))}),0))}clearScheduledSend(){null!==this.sendTimerId&&(w.clearTimeout(this.sendTimerId),this.sendTimerId=null)}flushPendingSync(){this.clearScheduledSend(),0!==this.events.length&&this.sendBatchSync()}async sendBatchAsync(){if(0===this.events.length)return;const e=this.drainBatch(),t=this.session.getSessionId(),n=Me.getInstance();let r;if(n.isAvailable)try{r=await n.packReplay(e.events)}catch(t){g(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),r=e.events.map((e=>a(e)))}else r=e.events.map((e=>a(e)));this.session.getSessionId()===t?this.enqueueReplayEvent(r,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during pack",{drained:r.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>a(e)));this.enqueueReplayEvent(t,e.containsFullSnapshot,e.snapshotTimestamp)}drainBatch(){const e=this.events,t=this.batchContainsFullSnapshot,n=this.fullSnapshotTimestamp;return this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,{events:e,containsFullSnapshot:t,snapshotTimestamp:n}}enqueueReplayEvent(e,t,n){try{const r={_gc_replay_data:{events:e}};t&&(r.replay_is_full_snapshot=!0,r.replay_full_snapshot_timestamp=n);const i=this.enricher.enrich({type:"replay",attributes:r});this.eventsPool.addEvent(i),this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){g(e),this.logger.log("[session-replay-listener] failed to send batch:",e)}}stopRecording(){if(this.isRecording)try{this.clearScheduledSend(),this.stopFn?.(),this.isRecording=!1,this.events.length>0&&this.sendBatchSync(),this.stopFn=null,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0}catch(e){g(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},qe=144e5,Ae=288e5,Ne=18e5,Ce="gcSample",He={eventSampleRate:1,sessionSampleRate:1,debug:!1,privacy:{level:"mask-sensitive"},enabledEvents:[],tracing:{propagationUrls:[],propagationHeaders:[],traceIdHeaderName:"",spanIdHeaderName:"",origin:{name:"",value:""}},transport:{batchSize:10,batchTimeout:1e4,compression:!0},replay:{},sessionMaxDuration:qe},ze=["pointerdown","keydown","scroll","touchstart","mousemove"],_e=class{constructor(e){this.logger=d.getInstance(),this.lastSignalMs=0,this.idleTimer=null,this.installed=!1,this.handleInput=()=>{const e=Date.now();if(!(e-this.lastSignalMs<3e4)){this.notePresence(e);try{this.callbacks.onPresence(e)}catch(e){g(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,ze.forEach((e=>{try{w.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){g(e)}})),this.armIdleTimer(),this.logger.log("[user-presence-monitor] installed"))}notePresence(e){this.lastSignalMs=e,this.armIdleTimer()}resetIdleTimer(){this.armIdleTimer()}armIdleTimer(){try{this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null,this.idleTimer=setTimeout((()=>{this.idleTimer=null,this.logger.log("[user-presence-monitor] user idle for",Ne,"ms");try{this.callbacks.onIdle()}catch(e){g(e)}}),Ne)}catch(e){g(e)}}destroy(){if(this.installed){this.installed=!1,ze.forEach((e=>{try{w.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){g(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){g(e)}finally{this.idleTimer=null}}}},Pe=class{constructor(e){this.logger=d.getInstance(),this.rotating=!1,this.session=e.session,this.pool=e.pool,this.idGenerator=e.idGenerator,this.activityEventTypes=e.activityEventTypes,this.ignoredEventTypes=e.ignoredEventTypes,this.hooks=e.hooks??{}}get isRotating(){return this.rotating}install(){this.pool.setBeforeEnqueueHook((e=>this.reconcileOnEnqueue(e))),this.pool.setFlushGate((()=>this.session.hasUserActivity()))}uninstall(e){this.pool.setBeforeEnqueueHook(null);try{e?.()}catch(e){g(e)}this.pool.setFlushGate(null)}reconcile(e,t){if(this.rotating)return;t&&this.session.isSessionInactive(e)&&this.rotate({reason:"inactivity gap"});const n=this.session.getSessionElapsedMs(e),r=this.session.getSessionMaxDuration(),i=n>=r;this.logger.log("[session-lifecycle] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:r,expired:i}),i&&this.rotate({reason:"max session duration"}),this.hooks.onReconcile?.(t),t&&(this.session.setLastActivityMs(e),this.hooks.onPresenceStamped?.(e))}reconcileOnEnqueue(e){this.rotating||(this.ignoredEventTypes.has(e.type)?this.logger.log("[session-lifecycle] enqueue rotation check: ignoring heartbeat-style event",e.type):this.reconcile(Date.now(),this.activityEventTypes.has(e.type)))}rotateIfStale(e,t){(this.session.isSessionInactive(e)||this.session.isSessionExpired(e))&&this.rotate({reason:t})}rotate(e){if(this.rotating)return;this.rotating=!0;const t=(e,t)=>{try{this.logger.log(`[session-lifecycle] session rotation: ${e}`),t()}catch(t){g(t),this.logger.log(`[session-lifecycle] failed to ${e} during session rotation:`,t)}};try{const n=this.session.getSessionId();let r;t("capture host rotation context",(()=>{r=this.hooks.captureRotationContext?.()}));const i=this.session.hasUserActivity();this.logger.log("[session-lifecycle] session rotation start",{reason:e.reason,previousId:n,wasConfirmed:i}),t("host beforeRotate",(()=>this.hooks.beforeRotate?.())),t(i?"flush events":"discard unconfirmed events",(()=>i?this.pool.flush():this.pool.discardBuffer())),t("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.session.setSessionId(e),this.session.setSessionStartTime(S(Date.now())),this.session.clearSamplingDecision(),this.logger.log("[session-lifecycle] session id rotated",{from:n,to:e})})),t("host afterRotate",(()=>this.hooks.afterRotate?.(r)))}finally{this.rotating=!1,this.logger.log("[session-lifecycle] session rotation complete",{reason:e.reason})}}},De=new Set(["dom.event"]),Fe=new Set(["replay"]),Oe=class{constructor(e){this.logger=d.getInstance(),this.idGenerator=new p,this.logEventsListener=null,this.domEventsListener=null,this.errorsEventsListener=null,this.networkEventsListener=null,this.navigationListener=null,this.performanceListener=null,this.pageLoadListener=null,this.sessionReplayListener=null,this.replayDesired=!1,this.presenceMonitor=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher,this.manualEvents=new K({config:this.configManager,pool:this.eventsPool,enricher:this.enricher}),this.lifecycle=new Pe({session:this.session,pool:this.eventsPool,idGenerator:this.idGenerator,activityEventTypes:De,ignoredEventTypes:Fe,hooks:{captureRotationContext:()=>this.isReplayRecording(),beforeRotate:()=>this.stopReplayListener(),afterRotate:e=>this.syncReplayState(e),onReconcile:e=>this.syncReplayState(e),onPresenceStamped:e=>this.presenceMonitor?.notePresence(e)}})}listenerDeps(){return{config:this.configManager,eventsPool:this.eventsPool,enricher:this.enricher}}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.lifecycle.install(),this.presenceMonitor?.destroy(),this.presenceMonitor=new _e({onPresence:e=>this.lifecycle.reconcile(e,!0),onIdle:()=>this.pauseReplayOnIdle()}),this.presenceMonitor.initialize();const e=this.configManager.getConfig(),t=e?.options?.enabledEvents,n=!t||0===t.length,r=[];(n||t?.includes("pageload"))&&(this.pageLoadListener=new Te(this.listenerDeps()),this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new de(this.listenerDeps()),this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new ge(this.listenerDeps()),this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new ke(this.listenerDeps()),this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new Se(this.listenerDeps()),this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new Re(this.listenerDeps()),this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Ie(this.listenerDeps(),{isEnabled:n||t?.includes("navigation")}),this.navigationListener.initialize(),r.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",r)}sendCustomEvent(e){this.manualEvents.sendCustomEvent(e)}emitLog(e,t,n){this.logEventsListener&&this.manualEvents.emitLog(e,t,n)}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){g(e)}}isNavigationTrackingEnabled(){const e=this.configManager.getConfig();return e?.options?.enabledEvents?.includes("navigation")||0===e?.options?.enabledEvents?.length}startNavigation(e){this.logger.log("[instrumentation-manager.startNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.startNavigation] startNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.startNavigation(e)}endNavigation(e){this.logger.log("[instrumentation-manager.endNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.endNavigation] endNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.endNavigation(e)}isReplayRecording(){return null!==this.sessionReplayListener}restartReplayForConfigChange(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] restarting replay to apply config change"),this.stopReplayListener(),this.startReplayListener())}startReplayRecording(){this.replayDesired=!0,this.isReplayRecording()?this.logger.log("[instrumentation-manager] replay recording already started"):(this.lifecycle.rotateIfStale(Date.now(),"replay start into stale session"),this.startReplayListener(),this.presenceMonitor?.resetIdleTimer())}stopReplayRecording(){this.replayDesired=!1,this.stopReplayListener()}flushPendingReplay(){this.sessionReplayListener?.flushPendingSync()}syncReplayState(e){this.replayDesired&&e&&!this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] user present and replay desired — starting replay"),this.startReplayListener())}pauseReplayOnIdle(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] pausing replay: user idle window elapsed"),this.stopReplayListener())}startReplayListener(){if(this.sessionReplayListener)this.logger.log("[instrumentation-manager] replay recording already started");else try{const e=new xe({...this.listenerDeps(),session:this.session});e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){g(e),this.logger.log("[instrumentation-manager] failed to start replay recording:",e)}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.lifecycle.uninstall((()=>{this.presenceMonitor?.destroy(),this.presenceMonitor=null,this.domEventsListener?.destroy(),this.logEventsListener?.destroy(),this.errorsEventsListener?.destroy(),this.networkEventsListener?.destroy(),this.navigationListener?.destroy(),this.performanceListener?.destroy(),this.pageLoadListener?.destroy(),this.sessionReplayListener?.destroy(),this.sessionReplayListener=null,this.replayDesired=!1}))}};function Be(e){try{console.warn(e)}catch{}}function je(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var Ke=["privacy","tracing","transport","replay"],Ue={tracing:"origin",privacy:"replay"};function Xe(e,t){if(!je(e))return e;const n={...e};return t&&je(n[t])&&(n[t]={...n[t]}),n}function Ye(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];je(i)&&je(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!je(s)?r[n]=je(i)?{...i}:i:je(r[n])&&(r[n]={...r[n]})}return r}function $e(e,t){const n={...e,...t},r=t,i=e;for(const e of Ke){if(!Object.hasOwn(r,e)){je(i[e])&&(n[e]=Xe(i[e],Ue[e]));continue}const t=r[e];je(t)?n[e]=Ye(i[e],t,Ue[e]):n[e]=Xe(i[e],Ue[e])}return n}var We=class e{constructor(t){this.dsn=t?.dsn||"",this.appId=t?.appId||"",this.cluster=t?.cluster||"",this.apiKey=t?.apiKey||"",this.environment=t?.environment||"",this.namespace=t?.namespace||"",this.releaseId=t?.releaseId,this.user=t?.user||null,this.providedOptions={...t?.options||{}},this.options=$e(He,t?.options||{}),this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration),e.warnRemovedOptions(t?.options),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)}static stripRemovedOptions(t){const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&delete n[t]}static warnRemovedOptions(t){if(!t||"object"!=typeof t)return;const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&Be(`[groundcover] \`options.${t}\` was removed in 1.0.0 and is ignored. Configure masking via \`options.privacy\` instead — see the migration guide: https://github.com/groundcover-com/rum/tree/main/packages/browser#migrating-to-100`)}static normalizeSessionMaxDuration(e){return void 0===e?qe:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>Ae?(Be("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),qe):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=$e(this.providedOptions||{},t.options),this.options=$e(this.options,t.options),void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration)),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)),void 0!==t.user&&(this.user=null===t.user?null:{...this.user,...t.user}),t.appId&&(this.appId=t.appId),t.dsn&&(this.dsn=t.dsn),t.apiKey&&(this.apiKey=t.apiKey),t.cluster&&(this.cluster=t.cluster),t.environment&&(this.environment=t.environment),t.namespace&&(this.namespace=t.namespace),t.releaseId&&(this.releaseId=t.releaseId)}};We.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var Qe=We,Ge=class{constructor(){this.config=null,this.logger=d.getInstance(),this.privacyCache=null}initialize(e){this.config||(this.config=new Qe(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getPrivacy(){return this.privacyCache||(this.privacyCache=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=e=>!r&&(e??!0),s=i(t?.maskNetworkBodies),o=i(t?.maskNetworkQueryParams),a=i(t?.maskLogs),l=i(t?.maskErrors);return{level:n,maskNetworkBodies:s,maskNetworkQueryParams:o,maskLogs:a,maskErrors:l,shouldMaskNetworkBodies:!r&&s,shouldMaskNetworkQueryParams:!r&&o,shouldMaskLogs:!r&&a,shouldMaskErrors:!r&&l,sensitiveKeys:X(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0}}(this.config?.providedOptions)),this.privacyCache}updateConfig(e){this.logger.log("[config-manager] updateConfig called"),this.config?e&&(this.logger.log("[config-manager] updating options"),this.config.updateConfig(e),this.privacyCache=null):this.logger.log("[config-manager] configuration not initialized")}},Ve=He.transport?.batchSize??10,Je=He.transport?.batchTimeout??1e4;var Ze=class{constructor(e){this.events=[],this.timeoutId=null,this.logger=d.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.flushGate=null,this.config=e.config,this.session=e.session,this.transporter=e.transporter,this.getDeviceAttributes=e.getDeviceAttributes,this.eventsToSkipFlush=e.eventsToSkipFlush}initialize(){try{if(this.initialized)return;this.scheduleFlush(),this.initialized=!0}catch(e){g(e)}}destroy(){try{null!==this.timeoutId&&(w.clearTimeout(this.timeoutId),this.timeoutId=null),this.events=[],this.initialized=!1}catch(e){g(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}setFlushGate(e){this.flushGate=e}discardBuffer(){this.events=[]}isFlushAllowed(){if(null===this.flushGate)return!0;try{return this.flushGate()}catch(e){return g(e),!0}}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;let i=e;if(n&&!n(i))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(i)}catch(e){g(e)}if(r&&(i=r(i)),!this.isFlushAllowed()&&this.events.length>=500)return;this.events.push(i);const s=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:Ve);this.events.length>=s&&!this.eventsToSkipFlush.includes(i.type)&&this.flush()}catch(e){g(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;if(!this.isFlushAllowed())return void this.scheduleFlush();if(!this.events?.length)return void this.scheduleFlush();if(!this.config.getConfig()?.cluster)return this.noClusterWarned||(this.noClusterWarned=!0,this.logger.log("[events-pool.flush] skipping flush: no cluster")),void this.scheduleFlush();this.noClusterWarned=!1;const t={sessionAttributes:this.getSessionAttributes(),events:this.events};e?this.transporter.send(t,{lifecycle:!0}):this.transporter.send(t),this.events=[],this.scheduleFlush()}catch(e){g(e)}}async flushSync(){try{if(!this.events?.length||!this.initialized)return;if(!this.isFlushAllowed())return void this.discardBuffer();if(!this.config.getConfig()?.cluster)return void this.logger.log("[events-pool.flush] skipping flush: no cluster");await this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[]}catch(e){g(e)}}scheduleFlush(){try{null!==this.timeoutId&&(w.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:Je);this.timeoutId=w.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){g(e)}var e}getSessionAttributes(){const e=this.config.getConfig();return{...this.getDeviceAttributes(),cluster:e?.cluster||"",env:e?.environment||"",namespace:e?.namespace||"",releaseId:e?.releaseId||"",session_id:this.session.getSessionId(),session_start_time:this.session.getSessionStartTime(),user:e?.user||{},"service.name":e?.appId}}},et=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.enrichAttributes=e.enrichAttributes??null,this.idGenerator=e.idGenerator??new p}getPlatformAttributes(){if(!this.enrichAttributes)return{};try{return this.enrichAttributes()??{}}catch(e){return this.logger.log("[event-enricher] platform attribute contributor threw; continuing without it",e),{}}}shouldSample(){const e=this.config.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}formatEventObject(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:I(e)?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:n.has(e)?{[t||"circular_reference"]:"[Circular]"}:(n.add(e),Object.entries(e).reduce(((e,[i,s])=>{const o=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[o]=s.map(((e,t)=>"object"==typeof e&&null!==e?this.formatEventObject(e,`${o}[${t}]`,n,r+1):e)):Object.assign(e,this.formatEventObject(s,o,n,r+1)):e[o]=s,e}),{}))}catch(e){return this.logger.log("[event-enricher.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}enrich(e){const t=S(Date.now()),n=this.idGenerator.generateId(),r=e.spanId||this.idGenerator.generateSpanId(),i=e.traceId||this.idGenerator.generateTraceId(),s=e.parentSpanId||"",o=this.formatEventObject(e.attributes||{}),a=this.getPlatformAttributes(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...o,...a}};return e.span_name&&(l.span_name=e.span_name),"network"===e.type?(l.start_timestamp=e.timestamp||t,l.end_timestamp=e?.end_timestamp):l.timestamp=t,l}};function tt(e,t){if(!t)return{data:(new TextEncoder).encode(e),isCompressed:!1};try{const t=l(e);return{data:c(t),isCompressed:!0}}catch(t){return{data:(new TextEncoder).encode(e),isCompressed:!1}}}var nt=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.sendBatch=e.sendBatch,this.encodeAsync=e.encodeAsync??null}compressAsync(e,t){if(!this.encodeAsync)return Promise.resolve(tt(e,t));try{return this.encodeAsync(e,t).catch((()=>tt(e,t)))}catch{return Promise.resolve(tt(e,t))}}async send(e,{lifecycle:t=!1}={}){const n=this.config.getConfig();if(n)try{n?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const r=n.apiKey,i=this.buildEndpoint();if(!r)return void this.logger.log("No API key found");const s=JSON.stringify(e),o=!!n?.options?.transport?.compression,{data:a,isCompressed:l}=t?tt(s,o):await this.compressAsync(s,o),c={"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""};this.sendBatch(i,{method:"POST",headers:c,body:a}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){n?.options?.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();return e?`${e.getEndpoint()}/json/rum`:""}},rt=class{constructor(e){this.storage=e}getItem(e){try{return this.storage?.getItem(e)??null}catch(e){return g(e),null}}setItem(e,t){try{this.storage?.setItem(e,t)}catch(e){g(e)}}removeItem(e){try{this.storage?.removeItem(e)}catch(e){g(e)}}getNumericItem(e,t=0){const n=this.getItem(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}},it=class{constructor(e){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage=e.storage,this.getMaxDurationMs=e.getMaxDurationMs??null}getSessionId(){if(this.sessionId)return this.sessionId;return this.storage.getItem("gcId")||""}setSessionId(e){this.sessionId=e,this.storage.setItem("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:this.storage.getNumericItem("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,this.storage.setItem("gcStartTime",String(e)),this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcLastActivity")}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:this.storage.getNumericItem("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,this.storage.setItem("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs(),n=t>0?t:k(this.getSessionStartTime());return n>0&&e-n>=Ne}hasUserActivity(){return this.getLastActivityMs()>0}clearSamplingDecision(){this.storage.removeItem(Ce)}clearSessionState(){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcId"),this.storage.removeItem("gcStartTime"),this.storage.removeItem("gcLastActivity"),this.clearSamplingDecision()}getSessionMaxDuration(){return this.getMaxDurationMs?.()??qe}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-k(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}};function st(){const e=navigator.userAgent;let t="unknown",n="unknown";const r=navigator.platform||"unknown",i=/Mobile|Android|iPhone|iPad|iPod/i.test(e);return/Edg/.test(e)?(t="Edge",n=e.match(/Edg\/([\d.]+)/)?.[1]||n):/Chrome/.test(e)&&!/Chromium/.test(e)?(t="Chrome",n=e.match(/Chrome\/([\d.]+)/)?.[1]||n):/Firefox/.test(e)?(t="Firefox",n=e.match(/Firefox\/([\d.]+)/)?.[1]||n):/Safari/.test(e)&&!/Chrome/.test(e)?(t="Safari",n=e.match(/Version\/([\d.]+)/)?.[1]||n):/Trident/.test(e)?(t="Internet Explorer",n=/rv:([^)]+)\)/i.test(e)?e.match(/rv:([^)]+)\)/i)?.[1]||n:e.match(/MSIE ([^;]+)/)?.[1]||n):/OPR/.test(e)&&(t="Opera",n=e.match(/OPR\/([\d.]+)/)?.[1]||n),{userAgent:e,browser:{name:t,version:n,platform:r,language:navigator.language,mobile:i}}}var ot,at=["navigation","dom.event"],lt=class{constructor(e){this.core=null,this.hideWired=!1,this.hideHandler=()=>{try{if("undefined"==typeof document||"hidden"!==document.visibilityState)return;this.core?.session.persistLastActivity(),this.core?.pool.flush({lifecycle:!0})}catch(e){g(e)}},this.logger=d.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.storage=new rt(function(){try{return void 0!==globalThis.sessionStorage?globalThis.sessionStorage:null}catch{return null}}()),this.idGenerator=new p;const t=new Ge;t.initialize(e);const n=new it({storage:this.storage,getMaxDurationMs:()=>t.getConfig()?.options?.sessionMaxDuration});!function({session:e,idGenerator:t,providedSessionId:n}){const r=d.getInstance();try{const i=e.getSessionId();n&&n!==i?(e.setSessionId(n),e.setSessionStartTime(S(Date.now())),e.clearSamplingDecision(),r.log("[session-bootstrap] using provided sessionId:",n)):n?(e.setSessionId(n),r.log("[session-bootstrap] continuing provided sessionId:",n)):i||e.setSessionId(t.generateId());const s=6e4,o=Date.now(),a=k(e.getSessionStartTime());if(a>0&&o-a>=-s){if(e.isSessionExpired(o)||e.isSessionInactive(o)){const n=e.isSessionExpired(o)?"persisted session past cap":"inactivity gap across reload",i=e.getSessionId(),s=t.generateId();e.setSessionId(s),e.setSessionStartTime(S(o)),e.clearSamplingDecision(),r.log(`[session-bootstrap] init-time rotation: ${n}`,{from:i,to:s})}}else e.setSessionStartTime(S(o))}catch(e){r.log("[session-bootstrap] session bootstrap failed:",e)}}({session:n,idGenerator:this.idGenerator,providedSessionId:e.sessionId});if(!function({storage:e,sessionSampleRate:t}){const n=d.getInstance();if(void 0===t||!Number.isFinite(t)||1===t)return!0;const r=t;try{const t=e.getItem(Ce);if(t){const e="1"===t;return n.log("[session-bootstrap] using stored sampling decision:",e),e}const i=Math.random()<r;return e.setItem(Ce,i?"1":"0"),n.log("[session-bootstrap] stored new sampling decision:",i),i}catch(e){n.log("[session-bootstrap] storage access failed:",e);const t=Math.random()<r;return n.log("[session-bootstrap] using fallback sampling decision:",t),t}}({storage:this.storage,sessionSampleRate:e.options?.sessionSampleRate}))return void this.logger.log("[session-manager] session is not sampled");const r=new nt({config:t,sendBatch:(e,t)=>fetch(e,t),encodeAsync:(e,t)=>Me.withFallback((n=>n.encodeBatch(e,t)),(()=>tt(e,t)),"transporter")}),i=new Ze({config:t,session:n,transporter:r,getDeviceAttributes:st,eventsToSkipFlush:at}),s=function(e){return()=>{let t="";try{t=w?.document?.title||""}catch(e){g(e)}try{const n=w?.location;if(!n)return{path:"",url:"",title:t};const r=n.hash&&!n.hash.match(/^#[a-z0-9-]+$/i)&&n.hash.startsWith("#/"),i=r?n.hash:n.pathname,s=e.getPrivacy(),o=s.shouldMaskNetworkQueryParams,a={sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"};return{path:o&&r?D(i,a):i,url:o?D(n.href,a):n.href,title:t}}catch(e){return g(e),{path:"",url:"",title:t}}}}(t),o=new et({config:t,enrichAttributes:()=>({location:s()}),idGenerator:this.idGenerator}),a=new Oe({config:t,session:n,eventsPool:i,enricher:o});try{i.initialize(),Me.getInstance(),this.wireHideHandler(),a.instrument(),this.core={config:t,session:n,pool:i,instrumentation:a}}catch(e){this.logger.log("[session-manager] initialization failed — tearing down partial startup:",e);try{a.uninstrument()}catch(e){g(e)}throw i.destroy(),this.unwireHideHandler(),this.core=null,e}}wireHideHandler(){if(!this.hideWired&&"undefined"!=typeof document){this.hideWired=!0;try{document.addEventListener("visibilitychange",this.hideHandler)}catch(e){g(e)}}}unwireHideHandler(){if(this.hideWired&&"undefined"!=typeof document){this.hideWired=!1;try{document.removeEventListener("visibilitychange",this.hideHandler)}catch(e){g(e)}}}identifyUser(e){this.logger.log("[session-manager] identifyUser called"),this.core?this.core.config.updateConfig({user:e}):this.logger.log("[session-manager] cannot identify user: SDK not initialized")}updateConfig(e){if(!this.core)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");this.core.config.updateConfig(e);const t=e.options,n=!!t&&"privacy"in t,r=!!t&&"object"==typeof t.replay&&null!==t.replay&&"blockedSelectors"in t.replay;(n||r)&&this.core.instrumentation.restartReplayForConfigChange()}sendCustomEvent(e){this.core?this.core.instrumentation.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.core?this.core.instrumentation.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.core?this.core.instrumentation.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.core?this.core.instrumentation.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.core?this.core.instrumentation.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.core?this.core.session.getSessionId():(this.logger.log("[session-manager] cannot get session ID: SDK not initialized"),"")}async setSessionId(e){if(this.logger.log("[session-manager] setSessionId called"),this.core)try{this.core.instrumentation.flushPendingReplay(),await this.core.pool.flushSync();const t=e||this.idGenerator.generateId();this.core.session.setSessionId(t),this.core.session.setSessionStartTime(S(Date.now())),this.logger.log("[session-manager] session ID set successfully:",t)}catch(e){this.logger.log("[session-manager] failed to set session ID:",e)}else this.logger.log("[session-manager] cannot set session ID: SDK not initialized")}startReplayRecording(){this.core?this.core.instrumentation.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.core?this.core.instrumentation.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}handoffForReinit(){const e=this.core;if(!e)return;const t=e.session.hasUserActivity();e.instrumentation.uninstrument(),t&&e.pool.flush({lifecycle:!0}),e.pool.destroy(),this.unwireHideHandler(),this.core=null}destroy(){const e=this.core;e&&(e.instrumentation.uninstrument(),e.pool.destroy(),this.unwireHideHandler(),Me.getInstance().terminate(),e.session.clearSessionState(),this.core=null)}},ct=new class{constructor(e){this.manager=e}emit(e,t,n){this.manager&&this.manager.emitLog(t,e,n)}log(e,t){this.emit("log",e,t)}info(e,t){this.emit("info",e,t)}warn(e,t){this.emit("warn",e,t)}error(e,t){this.emit("error",e,t)}debug(e,t){this.emit("debug",e,t)}trace(e,t){this.emit("trace",e,t)}};var ht={init:function(e){try{ot?.handoffForReinit(),ot=new lt({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",user:e?.user,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),ct.manager=ot}catch(e){g(e)}},identifyUser:function(e){ot?ot.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){ot&&ot.sendCustomEvent(e)},captureException:function(e,t){ot&&ot.captureException(e,t)},logger:ct,updateConfig:function(e){if(ot)try{ot.updateConfig(e)}catch(e){g(e)}},startNavigation:function(e){ot?ot.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){ot?ot.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return ot?ot.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(ot)try{await ot.setSessionId(e)}catch(e){console.error("[groundcover] setSessionId: failed to set session ID:",e)}else console.warn("[groundcover] setSessionId: groundcover is not initialized. please call init() first")},startReplayRecording:function(){ot?ot.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){ot?ot.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=ht}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var dt=ht;export{dt as default};
1
+ import e from"error-stack-parser";import{onCLS as t,onLCP as n,onFCP as r,onTTFB as i,onINP as s}from"web-vitals";import{record as o}from"rrweb";import{pack as a}from"@rrweb/packer";import{strToU8 as l,gzipSync as c}from"fflate";var h=console.log.bind(console),d=class e{constructor(){this.isDebugEnabled=!1,this.prefix=""}static initialize(t){return e.instance||(e.instance=new e),t&&(e.instance.isDebugEnabled=t.debug??!1,e.instance.prefix=t.prefix??""),e.instance}static getInstance(t){return e?.instance||e.initialize(t)}formatMessage(e){return`[${(new Date).toISOString()}] ${this.prefix} ${e}`}log(e,...t){this.isDebugEnabled&&h(this.formatMessage(e),...t)}updateConfig(e){this.isDebugEnabled=e.debug??this.isDebugEnabled,this.prefix=e.prefix??this.prefix}},u=d.getInstance();function g(e){u.log("[error-handler.handleError] called",e,{groundcoverIgnore:!0})}var p=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)f[e]=Math.floor(16*Math.random())+48,f[e]>=58&&(f[e]+=39);return v+String.fromCharCode.apply(null,f.slice(0,16))},this.generateSpanId=m(8),this.generateId=m(16)}},f=Array(32);function m(e){return function(){for(let t=0;t<2*e;t++)f[t]=Math.floor(16*Math.random())+48,f[t]>=58&&(f[t]+=39);return String.fromCharCode.apply(null,f.slice(0,2*e))}}var v="0000000000000000";function y({text:e,maxLength:t=1e4,ellipsis:n=""}){if(null==e)return"";const r="string"==typeof e?e:String(e);return r.length<=t?r:r.substring(0,t)+n}function b(e){return(e||"").replace(/\s+/g," ").trim()}var w=globalThis,E=1e6;function S(e){return e*E}function k(e){return e/E}function T(e){if(null==e||"object"!=typeof e)return!1;try{return"number"==typeof e.nodeType&&"string"==typeof e.nodeName&&"ownerDocument"in e}catch{return!1}}var I="[REDACTED]",R=["authorization","cookie","set-cookie"],L=/(token|key|secret|passwd|password|auth|bearer|credential)/i,M=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,x=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),N=1e5;function q(e,t){if(!e)return!1;if(M.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function A(e,t){return x.has(e.toLowerCase())||q(e,t)}function C(e){return e.includes("-")&&L.test(e)}function H(e,t){return q(e,t)||C(e)}function z(e,t){const n=e.sensitive?I:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return g(e),n}}function _(e,t={}){if(!e)return e;try{return e.split("&").map((e=>{const n=e.indexOf("=");if(-1===n)return e;const r=e.slice(0,n),i=e.slice(n+1);let s=r;try{s=decodeURIComponent(r)}catch{}let o=i;try{o=decodeURIComponent(i)}catch{}const a=A(s,t.sensitiveKeys),l=z({key:s,value:o,path:[s],kind:t.kind??"query",sensitive:a},t.redact);return l===o?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function P(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${_(e.slice(n+1),t)}`}function D(e,t={}){if(!e)return e;const n={...t,kind:t.kind??"query"},r=e.indexOf("#"),i=-1===r?e:e.slice(0,r),s=-1===r?"":e.slice(r+1),o=P(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${I}@`))}(i),n);return-1===r?o:`${o}#${P(s,n)}`}function F(e,t,n,r,i,s){const o=!!e&&q(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(o||i>8)return I;if(T(t))return I;if(s.has(t))return I;s.add(t);try{if(Array.isArray(t))return t.map((t=>F(e,t,n,r,i+1,s)));const o={};for(const[e,a]of Object.entries(t))o[e]=F(e,a,[...n,e],r,i+1,s);return o}catch(e){return g(e),I}finally{s.delete(t)}}return z({key:e,value:t,path:n,kind:r.kind??"log",sensitive:o},r.redact)}function O(e,t={}){if(!e)return e;if(e.length>N)return`${O(e.slice(0,N),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>H(n,t.sensitiveKeys)?`"${n}":"${I}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return A(e,t)||C(e)}(n,t.sensitiveKeys)?`${n}=${I}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>H(n,t.sensitiveKeys)?`${n}: ${I}`:e))}catch(t){g(t),n=e}if(t.redact)try{const n=t.redact({key:"",value:e,path:[],kind:t.kind??"log",sensitive:!1});if(void 0!==n)return null===n?"":String(n)}catch(e){g(e)}return n}function j(e,t={}){try{const n=F("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return g(e),{}}}function B(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:O(t,r),attributes:n?j(n,r):n}}var K=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.pool=e.pool,this.enricher=e.enricher}sendCustomEvent(e){this.logger.log("[manual-event-emitter.sendCustomEvent] called",e);try{const t=this.enricher.enrich({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.pool.addEvent(t)}catch(e){g(e)}}emitLog(e,t,n){this.logger.log("[manual-event-emitter.emitLog] called",{message:e,level:t,attributes:n});try{const r={...n||{}};delete r.message,delete r.level,delete r.location;const{message:i,attributes:s}=B(this.config.getPrivacy(),e,r),o=this.enricher.enrich({type:"log",attributes:{...s,message:y({text:i}),level:t}});this.pool.addEvent(o)}catch(e){g(e)}}},U=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.eventsPool=e.eventsPool,this.enricher=e.enricher}};function X(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function Y(e){const t=e.getPrivacy(),n=e.getConfig()?.providedOptions?.privacy;return{...t,maskSelectors:X(n?.maskSelectors)}}var $="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function W(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Q(e){try{const t=$?.call(e);return"string"==typeof t?t:""}catch{return""}}function G(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function V(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>W(e,t))).filter(Boolean)}(e).some((e=>q(e,t))))}function J(e,t){return"allow"!==t.level&&(!!e&&(!!G(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>G(e,t))))||("mask-all"===t.level||function(e){const t=Q(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&V(e,t.sensitiveKeys)))))}var Z={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},ee=["button","a","input","select","textarea","label","summary",'[role~="button"]','[role~="link"]','[role~="menuitem"]','[role~="menuitemcheckbox"]','[role~="menuitemradio"]','[role~="tab"]','[role~="checkbox"]','[role~="radio"]','[role~="switch"]','[role~="option"]','[role~="treeitem"]','[role~="slider"]','[role~="spinbutton"]','[role~="combobox"]','[role~="textbox"]','[role~="searchbox"]'].join(", "),te=[ee,"li","option","tr","td","th",'[role~="listitem"]','[role~="row"]','[role~="gridcell"]','[role~="cell"]'].join(", ");function ne(e){return!!e&&1===e.nodeType}function re(e){const t=Q(e).toLowerCase();return"body"===t||"html"===t}function ie(e){return y({text:e,maxLength:255})}function se(e){return y({text:e,maxLength:99,ellipsis:"…"})}function oe(e){const t=b(W(e,"role"));return t?t.split(" ")[0]??t:function(e){switch(Q(e).toLowerCase()){case"a":return W(e,"href")?"link":"";case"button":return"button";case"input":switch(W(e,"type").toLowerCase()){case"checkbox":return"checkbox";case"radio":return"radio";case"submit":case"button":case"reset":return"button";case"range":return"slider";case"number":return"spinbutton";default:return"textbox"}case"textarea":return"textbox";case"select":return"combobox";case"img":return"img";case"nav":return"navigation";case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"heading";default:return""}}(e)}function ae(e){if(!ne(e))return"";try{if(re(e))return"";if(function(e){try{return e.querySelectorAll(te).length>=2}catch{return!1}}(e))return"";const t=b(e.textContent||"");return t?t.length>1e3?"":y({text:t,maxLength:255}):""}catch{return""}}function le(e){return W(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5)}function ce(e,t){if(re(e))return"";const n=function(e){const t=[];for(const n of le(e))try{const e=ae(document.getElementById(n));e&&t.push(e)}catch{}return b(t.join(" "))}(e);if(n)return se(n);const r=b(W(e,"aria-label"));if(r)return se(r);const i=b(W(e,"alt"));if(i)return se(i);if(function(e){const t=Q(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=W(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=b(W(e,"value"));if(t)return se(t)}const s=t??ae(e);if(s)return se(s);const o=b(W(e,"title"));if(o)return se(o);const a=b(W(e,"placeholder"));return a?se(a):""}function he(e,t){if("allow"===t.level)return!1;try{return!!e.querySelector("[data-private]")||t.maskSelectors.some((t=>{try{return null!=e.querySelector(t)}catch{return!1}}))}catch{return!1}}var de=class extends U{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.getShouldMaskText=e=>J(e.target,Y(this.config)),this.getKeyCode=(e,t)=>e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key?t?"*":e.key:"",this.getCoordinates=e=>{if({mouseup:!0,mousedown:!0,mousemove:!0,mouseover:!0}[e.type]){const{clientX:t,clientY:n}=e||{};return{clientX:t,clientY:n}}return null}}initialize(){try{this.logger.log("[dom-events-listener.initialize] called"),this.capturedEvents?.forEach((e=>{const t=e=>{try{this.handleEvent(e)}catch(e){g(e)}};this.eventHandlers.push({type:e,handler:t}),w?.addEventListener(e,t)}))}catch(e){g(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}}buildEvent(e){const t=this.getCoordinates(e),n=e.target,r=function(e){if(!ne(e))return null;try{return e.closest(ee)}catch{return null}}(n)??n,i=Y(this.config),s=this.getShouldMaskText({target:n||null})||!!r&&(he(r,i)||function(e,t){if("allow"===t.level)return!1;try{for(const n of le(e)){const e=document.getElementById(n);if(e&&ae(e)&&(J(e,t)||he(e,t)))return!0}}catch{}return!1}(r,i)),o=r?this.generateSelector(r,s?{priorityAttributes:["id","class","name","type"]}:{}):"",a=this.getKeyCode(e,s),l=ae(r),c=function(e,t){if(!ne(e))return{...Z};try{return{role:ie(oe(e)),accessibleName:ce(e,t),ariaLabel:ie(b(W(e,"aria-label"))),title:ie(b(W(e,"title"))),alt:ie(b(W(e,"alt"))),placeholder:ie(b(W(e,"placeholder"))),name:ie(W(e,"name")),inputType:ie(W(e,"type")),href:ie(W(e,"href"))}}catch{return{...Z}}}(r,l),h=i.shouldMaskNetworkQueryParams?D(c.href,{sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"}):c.href,d=e=>s&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");const u={dom_event_selector:o,dom_event_key_code:a,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:W(r,"id"),tagName:Q(r),className:W(r,"class"),text:s?"*":l,role:c.role,accessibleName:d(c.accessibleName),ariaLabel:d(c.ariaLabel),title:d(c.title),alt:d(c.alt),placeholder:d(c.placeholder),name:c.name,inputType:c.inputType,href:d(h)}};return this.enricher.enrich({type:"dom.event",attributes:u})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const n=t.root||document.body||document.documentElement,r=t.maxAttempts||10,i=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===Q(e).toLowerCase())return"html";let s="",o=0,a=e;const l=[];for(;a&&a!==n&&a!==document.documentElement&&o<r;){let e=Q(a).toLowerCase();try{const t=a.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(a.classList?.length){const t=Array.from(a.classList).filter((e=>e&&"string"==typeof e)).map((e=>`.${e}`));t.length&&(e+=t.join(""))}for(const t of i)if("id"!==t&&"class"!==t)try{const n=a.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Q(a).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{a=a.parentElement}catch(e){break}o++}return s||"*"}},ue=["log","info","warn","error","debug","assert","trace"],ge=class extends U{constructor(){super(...arguments),this.originalConsole=null,this.patchedConsole=null,this.isInitialized=!1}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods();const e={};ue.forEach((t=>{if(!(t in console))return;const n=(...e)=>{try{this.isInitialized&&this.handleEvent(e,t)}catch(e){g(e)}finally{this.originalConsole?.[t]&&this.originalConsole[t](...e)}};console[t]=n,e[t]=n})),this.patchedConsole=e,this.isInitialized=!0}catch(e){g(e)}}destroy(){try{if(!this.isInitialized)return;ue.forEach((e=>{this.originalConsole?.[e]&&this.patchedConsole?.[e]&&console[e]===this.patchedConsole[e]&&(console[e]=this.originalConsole[e])})),this.patchedConsole=null,this.isInitialized=!1}catch(e){g(e)}}handleEvent(e,t){try{if(!this.enricher.shouldSample())return;const n=Array.isArray(e)?e:[e];if("assert"===t&&n[0])return;const r=this.formatMessage(n,t);if(!r||r?.includes("groundcoverIgnore"))return;const i=this.extractAttributes(n),s=this.buildEvent({message:r,level:t,attributes:i});this.queueEvent(s)}catch(e){g(e)}}buildEvent({message:e,level:t,attributes:n}){const{message:r,attributes:i}=B(this.config.getPrivacy(),e,n);return this.enricher.enrich({type:"log",attributes:{...i,message:y({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const n of e)null!==n&&"object"==typeof n&&"[object Object]"===Object.prototype.toString.call(n)&&Object.assign(t,n);return delete t.message,delete t.level,delete t.location,t}catch(e){return void g(e)}}formatMessage(e,t){if(!Array.isArray(e))return String(e);try{return e.map((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if("object"==typeof e){if(e instanceof Error)try{return"error"===t&&e.stack||e.toString()}catch{try{const t={name:e.name,message:e.message,stack:e.stack};return JSON.stringify(t)}catch{return Object.prototype.toString.call(e)}}try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}return String(e)})).join(" ")}catch(e){return g(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{ue.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){g(e)}return e}};function pe(e){try{if(null==e)return"";if("string"==typeof e)return e;if("undefined"!=typeof FormData&&e instanceof FormData)return"[form data]";if("undefined"!=typeof Blob&&e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if(ArrayBuffer.isView(e))return"[arraybuffer data]";if("undefined"!=typeof ReadableStream&&e instanceof ReadableStream)return"[stream data]";if(9===e?.nodeType)return"[document data]";if("undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams)try{return e.toString()}catch{return"[unreadable body]"}return Array.isArray(e)||"object"==typeof e?JSON.stringify(e):String(e)}catch(e){return g(`Failed to format body: ${e}`),"[unreadable body]"}}var fe="[request body too large]",me="[request body unavailable]",ve="[response body too large]",ye="[response body unavailable]",be="[unreadable response body]",we="[form data]",Ee="[binary data]",Se=class extends U{constructor(){super(...arguments),this.maxBodyLength=5e3,this.requestBodyReadTimeoutMs=3e3,this.responseBodyReadTimeoutMs=3e3,this.idGenerator=new p,this.patched=null,this.active=!1,this.handleEvent=e=>{try{if(!this.active)return;if(this.shouldIgnoreRequest(e.url))return;if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}},this.buildEvent=e=>{let t=e.url,n=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const r=this.config.getPrivacy(),i={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};try{t=new URL(e.url).pathname}catch(s){n=new URL(e.url,globalThis.location.href).href,r.shouldMaskNetworkQueryParams&&(t=D(t,i))}r.shouldMaskNetworkQueryParams&&(n=D(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),o=this.formatHeaders(e.response.headers),a=e.method?.toUpperCase()||"UNKNOWN",{traceId:l,spanId:c}=this.extractTraceIds(e.request.headers),h=(e,t)=>r.shouldMaskNetworkBodies?function(e,t={}){if(!e)return e;const n=e.trim();if(n.length<=N&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(F("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?_(e,t):O(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=y({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=y({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),g={type:"HTTP",operation:{name:a},resource_name:t,status:e.status?.toString(),subType:a,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:o,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:u}}},p={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?S(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?S(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:g};return l&&(p.traceId=l),c&&(p.spanId=c),this.enricher.enrich(p)}}async readBodyStreamCapped(e,t={}){if(!e)return"";const{timeoutMs:n,overflowPlaceholder:r,timeoutPlaceholder:i}=t,s=e.getReader(),o=new TextDecoder;let a,l="",c=0,h=!1,d=!1;const u=null!=n?new Promise((e=>{a=setTimeout((()=>e({timedOut:!0})),n)})):void 0;try{for(;;){const e=u?await Promise.race([s.read(),u]):await s.read();if("timedOut"in e){d=!0;break}const{done:t,value:n}=e;if(t)break;if(c+n.byteLength>=this.maxBodyLength){const e=n.subarray(0,this.maxBodyLength-c);l+=o.decode(e,{stream:!0}),h=!0;break}c+=n.byteLength,l+=o.decode(n,{stream:!0})}return l+=o.decode(),d&&null!=i?i:h&&null!=r?r:l}finally{clearTimeout(a);try{s.cancel()?.catch((()=>{}))}catch{}}}mimeEssence(e){return(e.split(";")[0]||"").trim().toLowerCase()}isTextualContentType(e){const t=this.mimeEssence(e);return!!t&&(!!t.startsWith("text/")||("application/x-www-form-urlencoded"===t||"application/javascript"===t||"application/ecmascript"===t||"application/graphql"===t||/^application\/([\w.-]+\+)?(json|xml)$/.test(t)))}binaryLabel(e){const t=this.mimeEssence(e);return t.startsWith("image/")?"[image data]":t.startsWith("audio/")?"[audio data]":t.startsWith("video/")?"[video data]":t.startsWith("font/")||t.startsWith("application/font")||"application/vnd.ms-fontobject"===t?"[font data]":"application/pdf"===t?"[pdf data]":"application/zip"===t||"application/gzip"===t||"application/x-gzip"===t||"application/x-tar"===t||"application/x-7z-compressed"===t||"application/x-rar-compressed"===t?"[archive data]":"application/wasm"===t?"[wasm data]":t.includes("protobuf")||t.startsWith("application/grpc")?"[protobuf data]":Ee}classifyByContentType(e){const t=(e||"").toLowerCase();return t.includes("multipart/form-data")?we:this.isTextualContentType(t)?null:this.binaryLabel(t)}capBodyText(e,t){return e&&(e.length>=this.maxBodyLength||(new TextEncoder).encode(e).length>=this.maxBodyLength)?t:e}async getRequestBody(e,t){try{if(!e.body)return"";const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.requestBodyReadTimeoutMs,overflowPlaceholder:fe,timeoutPlaceholder:me})}catch{return me}}async getResponseBody(e){if(!e.body)return"";const t=e.headers?.get?.("content-type")??"";if("text/event-stream"===this.mimeEssence(t))return be;const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.responseBodyReadTimeoutMs,overflowPlaceholder:ve,timeoutPlaceholder:ye})}initialize(){this.logger.log("[network-events-listener.initialize] called");const e=globalThis.fetch,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;try{this.patchXHR(),this.patchFetch()}catch(i){return globalThis.fetch=e,globalThis.XMLHttpRequest.prototype.open=t,globalThis.XMLHttpRequest.prototype.send=n,globalThis.XMLHttpRequest.prototype.setRequestHeader=r,this.patched=null,void g(i)}this.patched={originalFetch:e,wrappedFetch:globalThis.fetch,originalXHROpen:t,wrappedXHROpen:globalThis.XMLHttpRequest.prototype.open,originalXHRSend:n,wrappedXHRSend:globalThis.XMLHttpRequest.prototype.send,originalXHRSetRequestHeader:r,wrappedXHRSetRequestHeader:globalThis.XMLHttpRequest.prototype.setRequestHeader},this.active=!0}destroy(){this.active=!1;const e=this.patched;e&&(globalThis.fetch===e.wrappedFetch&&(globalThis.fetch=e.originalFetch),globalThis.XMLHttpRequest.prototype.open===e.wrappedXHROpen&&(globalThis.XMLHttpRequest.prototype.open=e.originalXHROpen),globalThis.XMLHttpRequest.prototype.send===e.wrappedXHRSend&&(globalThis.XMLHttpRequest.prototype.send=e.originalXHRSend),globalThis.XMLHttpRequest.prototype.setRequestHeader===e.wrappedXHRSetRequestHeader&&(globalThis.XMLHttpRequest.prototype.setRequestHeader=e.originalXHRSetRequestHeader),this.patched=null)}shouldIgnoreRequest(e){try{const t=this.config.getConfig()?.getEndpoint();if(t&&e.includes(t))return!0;if([".tsx",".jsx",".css"].some((t=>e.toLowerCase().endsWith(t))))return!0;return(this.config.getConfig()?.options?.excludedUrls||[]).some((t=>{if(t instanceof RegExp)return t.test(e);if("string"==typeof t&&(t.includes("*")||t.includes("?"))){const n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(n).test(e)}return e===t}))}catch(e){return g(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,r=globalThis.XMLHttpRequest.prototype.setRequestHeader;let i;globalThis.XMLHttpRequest.prototype.open=function(n,r,s=!0,o,a){if(!e.active)return t.apply(this,[n,r,s,o,a]);if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,o,a]);const l=new URL(r.toString(),globalThis.location.href).href;return this._requestMethod=n,this._requestUrl=l,this._requestHeaders={},t.apply(this,[n,r,s,o,a])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(t,n){return e.active?(this._requestHeaders&&(this._requestHeaders[t]=n),r.apply(this,[t,n])):r.apply(this,[t,n])},globalThis.XMLHttpRequest.prototype.send=function(...t){if(!e.active)return n.apply(this,t);const r=this._requestUrl?.toString();if(!r||e.shouldIgnoreRequest(r))return n.apply(this,t);if(e.shouldAddTraceHeader(r)){const t=e.config.getConfig(),n=e.getTraceIds();t?.options?.tracing?.origin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),n&&(t?.options?.tracing?.traceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId}),Boolean(t?.options?.tracing?.propagationHeaders)&&t?.options?.tracing?.propagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:n.traceparent})})),t?.options?.tracing?.propagationHeaders?.length||e.addHeaderToXhrRequest({request:this,headerName:"traceparent",headerValue:n.traceparent}))}return this._requestBody=t[0]||"",this.addEventListener("load",(()=>{const t=Date.now(),n={};this.getAllResponseHeaders().split(/\r?\n/).forEach((e=>{const[t,r]=e.split(": ");t&&r&&(n[t.trim()]=r.trim())}));const r=e.capBodyText(pe(this._requestBody),fe),s=""===this.responseType||"text"===this.responseType,o=s?this.responseText:this.response,a=(s?e.classifyByContentType(n["content-type"]||""):null)??e.capBodyText(pe(o),ve),l={timestamp:i,end_time:t,method:this._requestMethod,url:this._requestUrl,body:r,status:this.status,request:{headers:this._requestHeaders||{},body:r},response:{headers:n,body:a}};e.handleEvent(l)})),n.apply(this,t)}}normalizeHeaders(e,t){try{const n=e?new Headers(e):new Headers;return t?(t instanceof Headers?t.forEach(((e,t)=>n.set(t,e))):Array.isArray(t)?new Headers(t).forEach(((e,t)=>n.set(t,e))):"object"==typeof t&&Object.entries(t).forEach((([e,t])=>n.set(e,t))),n):n}catch{return new Headers}}addTraceHeaders(e){const t=this.config.getConfig(),n=this.getTraceIds();if(t?.options?.tracing?.origin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.origin.name,headerValue:t.options.tracing.origin.value}),!n)return;t?.options?.tracing?.traceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.traceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracing?.spanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracing.spanIdHeaderName,headerValue:n.decimalSpanId});const r=t?.options?.tracing?.propagationHeaders;(r?.length?r:["traceparent"]).forEach((t=>{this.addHeaderToFetchRequest({init:e,headerName:t,headerValue:n.traceparent})}))}extractHeadersRecord(e){const t={};return e instanceof Headers&&e.forEach(((e,n)=>{t[n]=e})),t}patchFetch(){const e=globalThis.fetch;globalThis.fetch=(...t)=>{if(!this.active)return e.apply(globalThis,t);const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,o=i?.method||(s?r.method:"GET"),a=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(a))return e.apply(globalThis,t);const l=this.shouldAddTraceHeader(a);i.headers=this.normalizeHeaders(s?r.headers:void 0,i.headers),l&&this.addTraceHeaders(i);const c=this.extractHeadersRecord(i.headers),h=null!=i?.body?this.capBodyText(pe(i.body),fe):"",d=null!=i?.body?Promise.resolve(h):s?this.getRequestBody(r,"content-type"in c?c["content-type"]:r.headers.get("content-type")??""):Promise.resolve("");let u;return d.then((e=>{u=e})).catch((()=>{})),e.apply(globalThis,t).then((e=>{const t=Date.now(),r={};e.headers.forEach(((e,t)=>{r[t]=e}));const i={method:o,url:a,timestamp:n,body:"",status:e.status,end_time:t,request:{headers:c,body:""},response:{headers:r,body:""}},s=()=>{d.then((e=>{i.body=e,i.request.body=e,this.handleEvent(i)}))};return this.getResponseBody(e).then((e=>{i.response.body=e,s()})).catch((e=>{i.response.body=be,s(),this.logger.log("[network-events-listener.patchFetch] error",{error:e})})),e})).catch((e=>{const t=Date.now();let r="NetworkError";const i=e.message||"Unknown network error";e instanceof TypeError&&i.includes("Failed to fetch")?r="ERR_NETWORK_FAILURE":i.includes("Name not resolved")?r="ERR_NAME_NOT_RESOLVED":i.includes("Connection refused")&&(r="ERR_CONNECTION_REFUSED");const s=u??h,l={method:o,url:a,timestamp:n,body:s,status:0,end_time:t,request:{headers:c,body:s},response:{headers:{},body:""},error:{type:r}};throw this.handleEvent(l),e}))}}formatHeaders(e){const t=this.config.getPrivacy(),n="allow"===t.level,r=function(e,t={}){return e?Object.entries(e).reduce(((e,[n,r])=>{const i=n.toLowerCase(),s=z({key:n,value:r,path:[n],kind:"header",sensitive:R.includes(i)||L.test(i)||q(n,t.sensitiveKeys)},t.redact);return e[n]=null===s?"":String(s),e}),{}):e}(e,{sensitiveKeys:n?void 0:t.sensitiveKeys,redact:n?void 0:t.redact});return Object.entries(r)?.reduce(((e,[t,n])=>(e[t]=y({text:n}),e)),{})}extractTraceIds(e){const t=this.config.getConfig();let n="",r="";if(t?.options?.tracing?.traceIdHeaderName){const r=e[t.options.tracing.traceIdHeaderName];r&&"string"==typeof r&&(n=r)}if(t?.options?.tracing?.spanIdHeaderName){const n=e[t.options.tracing.spanIdHeaderName];n&&"string"==typeof n&&(r=n)}if(!n||!r){const t=this.extractTraceparentHeader(e);if(t){const e=t.split("-");4===e.length&&"00"===e[0]&&(!n&&e[1]&&32===e[1].length&&(n=e[1]),!r&&e[2]&&16===e[2].length&&(r=e[2]))}}return{traceId:n,spanId:r}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracing?.propagationHeaders?.length)for(const n of t.options.tracing.propagationHeaders){const t=e[n];if(t&&"string"==typeof t)return t}const n=e.traceparent;return n&&"string"==typeof n?n:""}getTraceIds(){const e=this.idGenerator.generateSpanId(),t=this.idGenerator.generateTraceId();let n,r;try{n=BigInt("0x"+t).toString(10),r=BigInt("0x"+e).toString(10)}catch(i){this.logger.log("[network-events-listener.getTraceIds] error",{error:i}),n=t,r=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:n,decimalSpanId:r}}addHeaderToXhrRequest({request:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToXhrRequest] called",{request:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.setRequestHeader(t,n),e._requestHeaders[t]=n}catch(e){this.logger.log("[network-events-listener.addHeaderToXhrRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToXhrRequest] Invalid header name",{headerName:t})}addHeaderToFetchRequest({init:e,headerName:t,headerValue:n}){if(this.logger.log("[network-events-listener.addHeaderToFetchRequest] called",{init:e,headerName:t,headerValue:n}),this.isValidHeaderName(t))try{e.headers instanceof Headers?e.headers.set(t,n):e.headers={...e.headers,[t]:n}}catch(e){this.logger.log("[network-events-listener.addHeaderToFetchRequest] Error setting header",{error:e,headerName:t,headerValue:n})}else this.logger.log("[network-events-listener.addHeaderToFetchRequest] Invalid header name",{headerName:t})}isValidHeaderName(e){if(!e||"string"!=typeof e)return!1;return/^[a-zA-Z0-9!#$&'*+\-.^_`|~]+$/.test(e)}shouldAddTraceHeader(e){const t=this.config.getConfig();if(this.logger.log("[network-events-listener.shouldAddTraceHeader] called",{url:e,config:t}),!t?.options?.tracing?.propagationUrls?.length)return!1;const n=t.options.tracing.propagationUrls?.some((t=>{const n=t.replace(/\*/g,".*"),r=new RegExp(`^${n}$`),i=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return r.test(i)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:n}),n}},ke=class extends U{constructor(){super(...arguments),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const r=this.buildEvent(n,t);this.queueEvent(r)}catch(e){g(e)}}}initialize(){w?.addEventListener("error",this.handleEvent),w?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){w?.removeEventListener("error",this.handleEvent),w?.removeEventListener("unhandledrejection",this.handleEvent)}buildEvent(e,t){const n=this.config.getPrivacy(),r=n.shouldMaskErrors,i={sensitiveKeys:n.sensitiveKeys,redact:n.redact,kind:"error"},s=e.message||"Unknown error",o=r?O(s,i):s,a=r&&t?.metadata?j(t.metadata,i):t?.metadata,l={error_type:e.name||"Error",error_message:o,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${y({text:o,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:a};return this.enricher.enrich({type:"exception",attributes:l})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}enhanceError(e,t){const{filename:n,lineno:r,colno:i}=t||{};n&&!e.fileName&&Object.defineProperty(e,"fileName",{value:n}),r&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:r}),i&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:i})}createUnhandledRejectionError(e){let t;if(e.reason instanceof Error)t=e.reason;else{const n="object"==typeof e.reason?JSON.stringify(e.reason,null,2):String(e.reason);t=new Error(n),t.name="UnhandledRejection",Object.defineProperty(t,"originalReason",{value:e.reason,enumerable:!1})}return t}buildStackTrace(t){if(!t)return[];try{return e.parse(t).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Te=class extends U{constructor(e,{isEnabled:t}){if(super(e),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.patchedPushState=null,this.patchedReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&t)try{this.isAutomaticNavigationEnabled=t,this.currentUrl=w.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){g(e)}}isInBrowserEnvironment(){try{return void 0!==w&&void 0!==w.location&&void 0!==w.history&&"function"==typeof w.addEventListener}catch(e){return g(e),!1}}initialize(){try{if(this.logger.log("[navigation-listener.initialize] called"),!this.isInBrowserEnvironment()||!this.originalPushState||!this.originalReplaceState)return void this.logger.log("[navigation-listener.initialize] Browser environment not available, skipping initialization");if(!this.isAutomaticNavigationEnabled)return void this.logger.log("[navigation-listener.initialize] Automatic navigation is disabled, skipping initialization");const e=this.originalPushState,t=this.originalReplaceState,n=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},r=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n};history.pushState=n,history.replaceState=r,this.patchedPushState=n,this.patchedReplaceState=r,w&&"function"==typeof w.addEventListener&&(w.addEventListener("popstate",this.popStateHandler),w.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){g(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState===this.patchedPushState&&(history.pushState=this.originalPushState),history.replaceState===this.patchedReplaceState&&(history.replaceState=this.originalReplaceState)),this.patchedPushState=null,this.patchedReplaceState=null,w&&"function"==typeof w.removeEventListener&&(w.removeEventListener("popstate",this.popStateHandler),w.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){g(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){g(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",w.location.href);const e=this.config.getPrivacy(),t="allow"===e.level,n=w.location.href,r=this.activeNavigation?.metadata,i={page_url:e.shouldMaskNetworkQueryParams?D(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?j(r,{sensitiveKeys:e.sensitiveKeys,redact:e.redact}):r,duration_ms:this.activeNavigation?.duration_ms||0,start_timestamp:this.activeNavigation?.startTime||0,end_timestamp:this.activeNavigation?.endTime||0};return this.enricher.enrich({type:"navigation",attributes:i})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}startNavigation(e){try{this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:w?.location?.href||"",metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}catch(e){g(e)}}endNavigation(e){try{if(this.logger.log("[navigation-listener.endNavigation] called",e),!this.activeNavigation)return void this.logger.log("[navigation-listener.endNavigation] no active navigation found");this.logger.log("[navigation-listener.endNavigation] active navigation",this.activeNavigation),this.activeNavigation.endTime=Date.now(),this.activeNavigation.duration_ms=this.activeNavigation.endTime-this.activeNavigation.startTime,this.handleEvent()}catch(e){g(e)}}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===w.location.href)return;let e,t;try{e=new URL(w.location.href),t=new URL(this.currentUrl)}catch(e){return void g(e)}const n=e=>e.startsWith("#/"),r=n(e.hash)||n(t.hash);(e.pathname!==t.pathname||r&&e.hash!==t.hash)&&(this.currentUrl=w.location.href,this.handleEvent())}catch(e){g(e)}}},Ie=class extends U{constructor(e){super(e),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",w),"complete"===w?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):w?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),g(e)}}destroy(){w?.removeEventListener("load",this.loadEventHandler)}handleEvent(){try{this.logger.log("[page-load-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){g(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,n=performance.getEntriesByType("resource"),r={count:n.length,totalSize:0,totalDuration:0,byType:{}};n.forEach((e=>{const t=e,n=t.transferSize||0,i=t.duration,s=t.initiatorType;r.totalSize+=n,r.totalDuration+=i,r.byType[s]||(r.byType[s]={count:0,size:0,duration:0}),r.byType[s].count++,r.byType[s].size+=n,r.byType[s].duration+=i}));const i=this.config.getPrivacy(),s=i.shouldMaskNetworkQueryParams,o={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},a=w?.location?.href||"",l=w?.document?.referrer||"",c={page_url:s?D(a,o):a,page_load_time:t,page_referrer:s?D(l,o):l,page_resources:r};return this.enricher.enrich({type:"pageload",attributes:c})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},Re=class extends U{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!this.enricher.shouldSample())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}}}initialize(){t(this.handleEvent),n(this.handleEvent),r(this.handleEvent),i(this.handleEvent),s(this.handleEvent)}destroy(){}buildEvent(e){const t={performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""};return this.enricher.enrich({type:"performance",attributes:t})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},Le=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.consecutiveTimeouts=0,this.isAvailable=!1,this.logger=d.getInstance(),"undefined"==typeof Worker||"undefined"==typeof URL||"undefined"==typeof Blob)return;const e=new Blob(['!function(){"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,t=new r([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),f=new r([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(r,t){for(var f=new n(31),o=0;o<31;++o)f[o]=t+=1<<r[o-1];var a=new e(f[30]);for(o=1;o<30;++o)for(var i=f[o];i<f[o+1];++i)a[i]=i-f[o]<<5|o;return{b:f,r:a}},i=a(t,2),u=i.b,v=i.r;u[28]=258,v[258]=28;var s=a(f,0).r,l=new n(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>1|(21845&Y)<<1))>>2|(13107&Q)<<2))>>4|(3855&Q)<<4,l[Y]=((65280&Q)>>8|(255&Q)<<8)>>1;var c=function(r,e,t){for(var f=r.length,o=0,a=new n(e);o<f;++o)r[o]&&++a[r[o]-1];var i,u=new n(e);for(o=1;o<e;++o)u[o]=u[o-1]+a[o-1]<<1;for(i=new n(f),o=0;o<f;++o)r[o]&&(i[o]=l[u[r[o]-1]++]>>15-r[o]);return i},h=new r(288);for(Y=0;Y<144;++Y)h[Y]=8;for(Y=144;Y<256;++Y)h[Y]=9;for(Y=256;Y<280;++Y)h[Y]=7;for(Y=280;Y<288;++Y)h[Y]=8;var w=new r(32);for(Y=0;Y<32;++Y)w[Y]=5;var g=c(h,9),d=c(w,5),m=function(r){return(r+7)/8|0},p=function(n,e,t){return(null==t||t>n.length)&&(t=n.length),new r(n.subarray(e,t))},y=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8},M=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8,r[t+2]|=e>>16},b=function(e,t){for(var f=[],o=0;o<e.length;++o)e[o]&&f.push({s:o,f:e[o]});var a=f.length,i=f.slice();if(!a)return{t:U,l:0};if(1==a){var u=new r(f[0].s+1);return u[f[0].s]=1,{t:u,l:1}}f.sort((function(r,n){return r.f-n.f})),f.push({s:-1,f:25001});var v=f[0],s=f[1],l=0,c=1,h=2;for(f[0]={s:-1,f:v.f+s.f,l:v,r:s};c!=a-1;)v=f[f[l].f<f[h].f?l++:h++],s=f[l!=c&&f[l].f<f[h].f?l++:h++],f[c++]={s:-1,f:v.f+s.f,l:v,r:s};var w=i[0].s;for(o=1;o<a;++o)i[o].s>w&&(w=i[o].s);var g=new n(w+1),d=k(f[c-1],g,0);if(d>t){o=0;var m=0,p=d-t,y=1<<p;for(i.sort((function(r,n){return g[n.s]-g[r.s]||r.f-n.f}));o<a;++o){var M=i[o].s;if(!(g[M]>t))break;m+=y-(1<<d-g[M]),g[M]=t}for(m>>=p;m>0;){var b=i[o].s;g[b]<t?m-=1<<t-g[b]++-1:++o}for(;o>=0&&m;--o){var x=i[o].s;g[x]==t&&(--g[x],++m)}d=t}return{t:new r(g),l:d}},k=function(r,n,e){return-1==r.s?Math.max(k(r.l,n,e+1),k(r.r,n,e+1)):n[r.s]=e},x=function(r){for(var e=r.length;e&&!r[--e];);for(var t=new n(++e),f=0,o=r[0],a=1,i=function(r){t[f++]=r},u=1;u<=e;++u)if(r[u]==o&&u!=e)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=r[u]}return{c:t.subarray(0,f),n:e}},A=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},C=function(r,n,e){var t=e.length,f=m(n+2);r[f]=255&t,r[f+1]=t>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},T=function(r,e,a,i,u,v,s,l,m,p,k){y(e,k++,a),++u[256];for(var T=b(u,15),E=T.t,U=T.l,D=b(v,15),S=D.t,I=D.l,j=x(E),z=j.c,J=j.n,N=x(S),O=N.c,q=N.n,B=new n(19),F=0;F<z.length;++F)++B[31&z[F]];for(F=0;F<O.length;++F)++B[31&O[F]];for(var G=b(B,7),H=G.t,K=G.l,L=19;L>4&&!H[o[L-1]];--L);var P,Q,R,V,W=p+5<<3,X=A(u,h)+A(v,w)+s,Y=A(u,E)+A(v,S)+s+14+3*L+A(B,H)+2*B[16]+3*B[17]+7*B[18];if(m>=0&&W<=X&&W<=Y)return C(e,k,r.subarray(m,m+p));if(y(e,k,1+(Y<X)),k+=2,Y<X){P=c(E,U),Q=E,R=c(S,I),V=S;var Z=c(H,K);y(e,k,J-257),y(e,k+5,q-1),y(e,k+10,L-4),k+=14;for(F=0;F<L;++F)y(e,k+3*F,H[o[F]]);k+=3*L;for(var $=[z,O],_=0;_<2;++_){var rr=$[_];for(F=0;F<rr.length;++F){var nr=31&rr[F];y(e,k,Z[nr]),k+=H[nr],nr>15&&(y(e,k,rr[F]>>5&127),k+=rr[F]>>12)}}}else P=g,Q=h,R=d,V=w;for(F=0;F<l;++F){var er=i[F];if(er>255){M(e,k,P[(nr=er>>18&31)+257]),k+=Q[nr+257],nr>7&&(y(e,k,er>>23&31),k+=t[nr]);var tr=31&er;M(e,k,R[tr]),k+=V[tr],tr>3&&(M(e,k,er>>5&8191),k+=f[tr])}else M(e,k,P[er]),k+=Q[er]}return M(e,k,P[256]),k+Q[256]},E=new e([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),U=new r(0),D=function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var e=n,t=9;--t;)e=(1&e&&-306674912)^e>>>1;r[n]=e}return r}(),S=function(o,a,i,u,l){if(!l&&(l={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),h=new r(c.length+o.length);h.set(c),h.set(o,c.length),o=h,l.w=c.length}return function(o,a,i,u,l,c){var h=c.z||o.length,w=new r(u+h+5*(1+Math.ceil(h/7e3))+l),g=w.subarray(u,w.length-l),d=c.l,y=7&(c.r||0);if(a){y&&(g[0]=c.r>>3);for(var M=E[a-1],b=M>>13,k=8191&M,x=(1<<i)-1,A=c.p||new n(32768),U=c.h||new n(x+1),D=Math.ceil(i/3),S=2*D,I=function(r){return(o[r]^o[r+1]<<D^o[r+2]<<S)&x},j=new e(25e3),z=new n(288),J=new n(32),N=0,O=0,q=c.i||0,B=0,F=c.w||0,G=0;q+2<h;++q){var H=I(q),K=32767&q,L=U[H];if(A[K]=L,U[H]=K,F<=q){var P=h-q;if((N>7e3||B>24576)&&(P>423||!d)){y=T(o,g,0,j,z,J,O,B,G,q-G,y),B=N=O=0,G=q;for(var Q=0;Q<286;++Q)z[Q]=0;for(Q=0;Q<30;++Q)J[Q]=0}var R=2,V=0,W=k,X=K-L&32767;if(P>2&&H==I(q-X))for(var Y=Math.min(b,P)-1,Z=Math.min(32767,q),$=Math.min(258,P);X<=Z&&--W&&K!=L;){if(o[q+R]==o[q+R-X]){for(var _=0;_<$&&o[q+_]==o[q+_-X];++_);if(_>R){if(R=_,V=X,_>Y)break;var rr=Math.min(X,_-2),nr=0;for(Q=0;Q<rr;++Q){var er=q-X+Q&32767,tr=er-A[er]&32767;tr>nr&&(nr=tr,L=er)}}}X+=(K=L)-(L=A[K])&32767}if(V){j[B++]=268435456|v[R]<<18|s[V];var fr=31&v[R],or=31&s[V];O+=t[fr]+f[or],++z[257+fr],++J[or],F=q+R,++N}else j[B++]=o[q],++z[o[q]]}}for(q=Math.max(q,F);q<h;++q)j[B++]=o[q],++z[o[q]];y=T(o,g,d,j,z,J,O,B,G,q-G,y),d||(c.r=7&y|g[y/8|0]<<3,y-=7,c.h=U,c.p=A,c.i=q,c.w=F)}else{for(q=c.w||0;q<h+d;q+=65535){var ar=q+65535;ar>=h&&(g[y/8|0]=d,ar=h),y=C(g,y+1,o.subarray(q,ar))}c.i=h}return p(w,0,u+m(y)+l)}(o,null==a.level?6:a.level,null==a.mem?l.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(o.length)))):20:12+a.mem,i,u,l)},I=function(r,n,e){for(;e;++n)r[n]=e,e>>>=8};function j(r,n){n||(n={});var e=function(){var r=-1;return{p:function(n){for(var e=r,t=0;t<n.length;++t)e=D[255&e^n[t]]^e>>>8;r=e},d:function(){return~r}}}(),t=r.length;e.p(r);var f,o=S(r,n,10+((f=n).filename?f.filename.length+1:0),8),a=o.length;return function(r,n){var e=n.filename;if(r[0]=31,r[1]=139,r[2]=8,r[8]=n.level<2?4:9==n.level?2:0,r[9]=3,0!=n.mtime&&I(r,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){r[3]=8;for(var t=0;t<=e.length;++t)r[t+10]=e.charCodeAt(t)}}(o,n),I(o,a-8,e.d()),I(o,a-4,t),o}var z="undefined"!=typeof TextEncoder&&new TextEncoder,J="undefined"!=typeof TextDecoder&&new TextDecoder;try{J.decode(U,{stream:!0})}catch(r){}var N=Uint8Array,O=Uint16Array,q=Uint32Array,B=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),F=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),G=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),H=function(r,n){for(var e=new O(31),t=0;t<31;++t)e[t]=n+=1<<r[t-1];var f=new q(e[30]);for(t=1;t<30;++t)for(var o=e[t];o<e[t+1];++o)f[o]=o-e[t]<<5|t;return[e,f]},K=H(B,2),L=K[0],P=K[1];L[28]=258,P[258]=28;var Q,R=H(F,0)[1],V=new O(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>>1|(21845&Y)<<1))>>>2|(13107&Q)<<2))>>>4|(3855&Q)<<4,V[Y]=((65280&Q)>>>8|(255&Q)<<8)>>>1;var W=function(r,n,e){for(var t=r.length,f=0,o=new O(n);f<t;++f)++o[r[f]-1];var a,i=new O(n);for(f=0;f<n;++f)i[f]=i[f-1]+o[f-1]<<1;for(a=new O(t),f=0;f<t;++f)a[f]=V[i[r[f]-1]++]>>>15-r[f];return a},X=new N(288);for(Y=0;Y<144;++Y)X[Y]=8;for(Y=144;Y<256;++Y)X[Y]=9;for(Y=256;Y<280;++Y)X[Y]=7;for(Y=280;Y<288;++Y)X[Y]=8;var Y,Z=new N(32);for(Y=0;Y<32;++Y)Z[Y]=5;var $=W(X,9),_=W(Z,5),rr=function(r){return(r/8|0)+(7&r&&1)},nr=function(r,n,e){(null==e||e>r.length)&&(e=r.length);var t=new(r instanceof O?O:r instanceof q?q:N)(e-n);return t.set(r.subarray(n,e)),t},er=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8},tr=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8,r[t+2]|=e>>>16},fr=function(r,n){for(var e=[],t=0;t<r.length;++t)r[t]&&e.push({s:t,f:r[t]});var f=e.length,o=e.slice();if(!f)return[new N(0),0];if(1==f){var a=new N(e[0].s+1);return a[e[0].s]=1,[a,1]}e.sort((function(r,n){return r.f-n.f})),e.push({s:-1,f:25001});var i=e[0],u=e[1],v=0,s=1,l=2;for(e[0]={s:-1,f:i.f+u.f,l:i,r:u};s!=f-1;)i=e[e[v].f<e[l].f?v++:l++],u=e[v!=s&&e[v].f<e[l].f?v++:l++],e[s++]={s:-1,f:i.f+u.f,l:i,r:u};var c=o[0].s;for(t=1;t<f;++t)o[t].s>c&&(c=o[t].s);var h=new O(c+1),w=or(e[s-1],h,0);if(w>n){t=0;var g=0,d=w-n,m=1<<d;for(o.sort((function(r,n){return h[n.s]-h[r.s]||r.f-n.f}));t<f;++t){var p=o[t].s;if(!(h[p]>n))break;g+=m-(1<<w-h[p]),h[p]=n}for(g>>>=d;g>0;){var y=o[t].s;h[y]<n?g-=1<<n-h[y]++-1:++t}for(;t>=0&&g;--t){var M=o[t].s;h[M]==n&&(--h[M],++g)}w=n}return[new N(h),w]},or=function(r,n,e){return-1==r.s?Math.max(or(r.l,n,e+1),or(r.r,n,e+1)):n[r.s]=e},ar=function(r){for(var n=r.length;n&&!r[--n];);for(var e=new O(++n),t=0,f=r[0],o=1,a=function(r){e[t++]=r},i=1;i<=n;++i)if(r[i]==f&&i!=n)++o;else{if(!f&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(f),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(f);o=1,f=r[i]}return[e.subarray(0,t),n]},ir=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},ur=function(r,n,e){var t=e.length,f=rr(n+2);r[f]=255&t,r[f+1]=t>>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},vr=function(r,n,e,t,f,o,a,i,u,v,s){er(n,s++,e),++f[256];for(var l=fr(f,15),c=l[0],h=l[1],w=fr(o,15),g=w[0],d=w[1],m=ar(c),p=m[0],y=m[1],M=ar(g),b=M[0],k=M[1],x=new O(19),A=0;A<p.length;++A)x[31&p[A]]++;for(A=0;A<b.length;++A)x[31&b[A]]++;for(var C=fr(x,7),T=C[0],E=C[1],U=19;U>4&&!T[G[U-1]];--U);var D,S,I,j,z=v+5<<3,J=ir(f,X)+ir(o,Z)+a,N=ir(f,c)+ir(o,g)+a+14+3*U+ir(x,T)+(2*x[16]+3*x[17]+7*x[18]);if(z<=J&&z<=N)return ur(n,s,r.subarray(u,u+v));if(er(n,s,1+(N<J)),s+=2,N<J){D=W(c,h),S=c,I=W(g,d),j=g;var q=W(T,E);er(n,s,y-257),er(n,s+5,k-1),er(n,s+10,U-4),s+=14;for(A=0;A<U;++A)er(n,s+3*A,T[G[A]]);s+=3*U;for(var H=[p,b],K=0;K<2;++K){var L=H[K];for(A=0;A<L.length;++A){var P=31&L[A];er(n,s,q[P]),s+=T[P],P>15&&(er(n,s,L[A]>>>5&127),s+=L[A]>>>12)}}}else D=$,S=X,I=_,j=Z;for(A=0;A<i;++A)if(t[A]>255){P=t[A]>>>18&31;tr(n,s,D[P+257]),s+=S[P+257],P>7&&(er(n,s,t[A]>>>23&31),s+=B[P]);var Q=31&t[A];tr(n,s,I[Q]),s+=j[Q],Q>3&&(tr(n,s,t[A]>>>5&8191),s+=F[Q])}else tr(n,s,D[t[A]]),s+=S[t[A]];return tr(n,s,D[256]),s+S[256]},sr=new q([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lr=function(r,n,e,t,f){return function(r,n,e,t,f,o){var a=r.length,i=new N(t+a+5*(1+Math.floor(a/7e3))+f),u=i.subarray(t,i.length-f),v=0;if(!n||a<8)for(var s=0;s<=a;s+=65535){var l=s+65535;l<a?v=ur(u,v,r.subarray(s,l)):(u[s]=o,v=ur(u,v,r.subarray(s,a)))}else{for(var c=sr[n-1],h=c>>>13,w=8191&c,g=(1<<e)-1,d=new O(32768),m=new O(g+1),p=Math.ceil(e/3),y=2*p,M=function(n){return(r[n]^r[n+1]<<p^r[n+2]<<y)&g},b=new q(25e3),k=new O(288),x=new O(32),A=0,C=0,T=(s=0,0),E=0,U=0;s<a;++s){var D=M(s),S=32767&s,I=m[D];if(d[S]=I,m[D]=S,E<=s){var j=a-s;if((A>7e3||T>24576)&&j>423){v=vr(r,u,0,b,k,x,C,T,U,s-U,v),T=A=C=0,U=s;for(var z=0;z<286;++z)k[z]=0;for(z=0;z<30;++z)x[z]=0}var J=2,G=0,H=w,K=S-I&32767;if(j>2&&D==M(s-K))for(var L=Math.min(h,j)-1,Q=Math.min(32767,s),V=Math.min(258,j);K<=Q&&--H&&S!=I;){if(r[s+J]==r[s+J-K]){for(var W=0;W<V&&r[s+W]==r[s+W-K];++W);if(W>J){if(J=W,G=K,W>L)break;var X=Math.min(K,W-2),Y=0;for(z=0;z<X;++z){var Z=s-K+z+32768&32767,$=Z-d[Z]+32768&32767;$>Y&&(Y=$,I=Z)}}}K+=(S=I)-(I=d[S])+32768&32767}if(G){b[T++]=268435456|P[J]<<18|R[G];var _=31&P[J],er=31&R[G];C+=B[_]+F[er],++k[257+_],++x[er],E=s+J,++A}else b[T++]=r[s],++k[r[s]]}}v=vr(r,u,o,b,k,x,C,T,U,s-U,v)}return nr(i,0,t+rr(v)+f)}(r,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(r.length)))):12+n.mem,e,t,!0)};function cr(r,n){void 0===n&&(n={});var e=function(){var r=1,n=0;return{p:function(e){for(var t=r,f=n,o=e.length,a=0;a!=o;){for(var i=Math.min(a+5552,o);a<i;++a)f+=t+=e[a];t%=65521,f%=65521}r=t,n=f},d:function(){return(r>>>8<<16|(255&n)<<8|n>>>8)+2*((255&r)<<23)}}}();e.p(r);var t,f,o,a=lr(r,n,2,4);return t=a,f=n.level,o=0==f?0:f<6?1:9==f?3:2,t[0]=120,t[1]=o<<6|(o?32-2*o:1),function(r,n,e){for(;e;++n)r[n]=e,e>>>=8}(a,a.length-4,e.d()),a}var hr=r=>{const n={...r,v:"v1"};return function(r){for(var n="",e=0;e<r.length;){var t=r[e++];n+=String.fromCharCode(t)}return n}(cr(function(r,n){var e=r.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(r);for(var t=new N(r.length+(r.length>>>1)),f=0,o=function(r){t[f++]=r},a=0;a<e;++a){if(f+5>t.length){var i=new N(f+8+(e-a<<1));i.set(t),t=i}var u=r.charCodeAt(a);u<128||n?o(u):u<2048?(o(192|u>>>6),o(128|63&u)):u>55295&&u<57344?(o(240|(u=65536+(1047552&u)|1023&r.charCodeAt(++a))>>>18),o(128|u>>>12&63),o(128|u>>>6&63),o(128|63&u)):(o(224|u>>>12),o(128|u>>>6&63),o(128|63&u))}return nr(t,0,f)}(JSON.stringify(n))))},wr=self;wr.onmessage=n=>{const e=n.data;if(!e||"number"!=typeof e.id||"pack-replay"!==e.op&&"encode-batch"!==e.op)return void(e&&"number"==typeof e.id&&wr.postMessage({id:e.id,ok:!1,error:"malformed message"}));const{id:t,op:f,payload:o}=e;try{if("pack-replay"===f){const r=o.events.map((r=>hr(r)));return void wr.postMessage({id:t,ok:!0,result:{packed:r}})}if("encode-batch"===f){const{json:n,compress:e}=o;if(!e){const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}try{const e=j(function(n,e){if(z)return z.encode(n);for(var t=n.length,f=new r(n.length+(n.length>>1)),o=0,a=function(r){f[o++]=r},i=0;i<t;++i){if(o+5>f.length){var u=new r(o+8+(t-i<<1));u.set(f),f=u}var v=n.charCodeAt(i);v<128||e?a(v):v<2048?(a(192|v>>6),a(128|63&v)):v>55295&&v<57344?(a(240|(v=65536+(1047552&v)|1023&n.charCodeAt(++i))>>18),a(128|v>>12&63),a(128|v>>6&63),a(128|63&v)):(a(224|v>>12),a(128|v>>6&63),a(128|63&v))}return p(f,0,o)}(n));return void wr.postMessage({id:t,ok:!0,result:{bytes:e,isCompressed:!0}},[e.buffer])}catch{const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}}wr.postMessage({id:t,ok:!1,error:"unknown op"})}catch(r){wr.postMessage({id:t,ok:!1,error:r instanceof Error?r.message:String(r)})}}}();'],{type:"application/javascript"}),t=URL.createObjectURL(e);try{this.worker=new Worker(t),Promise.resolve().then((()=>URL.revokeObjectURL(t))),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFatalFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.logger.log("[worker-client] worker onmessageerror — single message dropped, worker still alive"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){URL.revokeObjectURL(t),this.logger.log("[worker-client] failed to spawn worker, falling back to main thread:",e),this.worker=null,this.isAvailable=!1}}static getInstance(){return e.instance||(e.instance=new e),e.instance}static __resetForTests(){e.instance&&e.instance.terminate(),e.instance=null}static async withFallback(t,n,r){const i=e.getInstance();if(!i.isAvailable)return n();try{return await t(i)}catch(e){return d.getInstance().log(`[${r}] worker call failed, using inline fallback:`,e),n()}}packReplay(e){return this.dispatch("pack-replay",{events:e}).then((e=>e.packed))}encodeBatch(e,t){return this.dispatch("encode-batch",{json:e,compress:t}).then((e=>({data:e.bytes,isCompressed:e.isCompressed})))}terminate(){if(this.worker){try{this.worker.terminate()}catch(e){this.logger.log("[worker-client] failed to terminate worker:",e)}this.worker=null}this.isAvailable=!1,this.rejectAllPending(new Error("worker terminated")),e.instance===this&&(e.instance=null)}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,r=this.worker;return new Promise(((i,s)=>{const o=setTimeout((()=>{this.pending.has(n)&&(this.pending.delete(n),this.consecutiveTimeouts+=1,this.consecutiveTimeouts>=3&&this.handleFatalFailure("worker latched after 3 consecutive timeouts"),s(new Error("worker request timed out")))}),1500);this.pending.set(n,{resolve:i,reject:s,timeoutId:o});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(o),this.pending.delete(n),s(e instanceof Error?e:new Error(String(e)))}}))}handleMessage(e){const t=this.pending.get(e.id);t&&(clearTimeout(t.timeoutId),this.pending.delete(e.id),this.consecutiveTimeouts=0,e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFatalFailure(e,t){if(this.logger.log(`[worker-client] ${e}${t?": "+t:""}`),this.isAvailable=!1,this.rejectAllPending(new Error(e)),this.worker){try{this.worker.terminate()}catch{}this.worker=null}}rejectAllPending(e){for(const t of this.pending.values())clearTimeout(t.timeoutId),t.reject(e);this.pending.clear()}};Le.instance=null;var Me=Le;var xe=class{constructor(e){this.logger=d.getInstance(),this.stopFn=null,this.isRecording=!1,this.events=[],this.startTime=0,this.batchSize=3,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,this.sendTimerId=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher}initialize(){this.logger.log("[session-replay-listener] initialize called"),this.isRecording?this.logger.log("[session-replay-listener] already recording"):this.startRecording()}startRecording(){try{this.startTime=Date.now(),this.events=[],this.isRecording=!0,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0;const e=this.configManager.getConfig()?.options?.replay,t=e?.blockedSelectors?.filter(Boolean),n=t?.length?t.join(", "):void 0,r=Y(this.configManager),i=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=X(t?.maskSelectors),s=t?.replay,o="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,a="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;return l="mask-all"===n||!r&&void 0!==o?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0,{maskTextSelector:l,maskAllInputs:!r,maskTextFn:o,maskInputFn:a}}(this.configManager.getConfig()?.providedOptions),s=i.maskInputFn??("allow"===r.level?void 0:(e,t)=>J(t,r)?"*".repeat(e.length):e);this.stopFn=o({...n?{blockSelector:n}:{},...i.maskTextSelector?{maskTextSelector:i.maskTextSelector}:{},maskAllInputs:i.maskAllInputs,...i.maskTextFn?{maskTextFn:i.maskTextFn}:{},...s?{maskInputFn:s}:{},slimDOMOptions:{script:!1,comment:!1,headWhitespace:!1},sampling:{mousemove:100,input:"last",scroll:150},checkoutEveryNms:3e4,emit:(e,t)=>{if(this.isRecording)try{this.events.push(e),t&&(this.batchContainsFullSnapshot=!0,this.fullSnapshotTimestamp=Date.now(),this.logger.log("[session-replay-listener] full snapshot captured at",this.fullSnapshotTimestamp)),this.events.length>=this.batchSize&&this.scheduleSendBatch()}catch(e){g(e),this.logger.log("[session-replay-listener] failed to process event in emit callback:",e)}}})||null,this.logger.log("[session-replay-listener] started recording with full snapshot interval:",3e4,"ms")}catch(e){g(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=w.setTimeout((()=>{this.sendTimerId=null,this.isRecording&&this.sendBatchAsync().catch((e=>{g(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}))}),0))}clearScheduledSend(){null!==this.sendTimerId&&(w.clearTimeout(this.sendTimerId),this.sendTimerId=null)}flushPendingSync(){this.clearScheduledSend(),0!==this.events.length&&this.sendBatchSync()}async sendBatchAsync(){if(0===this.events.length)return;const e=this.drainBatch(),t=this.session.getSessionId(),n=Me.getInstance();let r;if(n.isAvailable)try{r=await n.packReplay(e.events)}catch(t){g(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),r=e.events.map((e=>a(e)))}else r=e.events.map((e=>a(e)));this.session.getSessionId()===t?this.enqueueReplayEvent(r,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during pack",{drained:r.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>a(e)));this.enqueueReplayEvent(t,e.containsFullSnapshot,e.snapshotTimestamp)}drainBatch(){const e=this.events,t=this.batchContainsFullSnapshot,n=this.fullSnapshotTimestamp;return this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,{events:e,containsFullSnapshot:t,snapshotTimestamp:n}}enqueueReplayEvent(e,t,n){try{const r={_gc_replay_data:{events:e}};t&&(r.replay_is_full_snapshot=!0,r.replay_full_snapshot_timestamp=n);const i=this.enricher.enrich({type:"replay",attributes:r});this.eventsPool.addEvent(i),this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){g(e),this.logger.log("[session-replay-listener] failed to send batch:",e)}}stopRecording(){if(this.isRecording)try{this.clearScheduledSend(),this.stopFn?.(),this.isRecording=!1,this.events.length>0&&this.sendBatchSync(),this.stopFn=null,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0}catch(e){g(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},Ne=144e5,qe=288e5,Ae=18e5,Ce="gcSample",He={eventSampleRate:1,sessionSampleRate:1,debug:!1,privacy:{level:"mask-sensitive"},enabledEvents:[],tracing:{propagationUrls:[],propagationHeaders:[],traceIdHeaderName:"",spanIdHeaderName:"",origin:{name:"",value:""}},transport:{batchSize:10,batchTimeout:1e4,compression:!0},replay:{},sessionMaxDuration:Ne},ze=["pointerdown","keydown","scroll","touchstart","mousemove"],_e=class{constructor(e){this.logger=d.getInstance(),this.lastSignalMs=0,this.idleTimer=null,this.installed=!1,this.handleInput=()=>{const e=Date.now();if(!(e-this.lastSignalMs<3e4)){this.notePresence(e);try{this.callbacks.onPresence(e)}catch(e){g(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,ze.forEach((e=>{try{w.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){g(e)}})),this.armIdleTimer(),this.logger.log("[user-presence-monitor] installed"))}notePresence(e){this.lastSignalMs=e,this.armIdleTimer()}resetIdleTimer(){this.armIdleTimer()}armIdleTimer(){try{this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null,this.idleTimer=setTimeout((()=>{this.idleTimer=null,this.logger.log("[user-presence-monitor] user idle for",Ae,"ms");try{this.callbacks.onIdle()}catch(e){g(e)}}),Ae)}catch(e){g(e)}}destroy(){if(this.installed){this.installed=!1,ze.forEach((e=>{try{w.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){g(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){g(e)}finally{this.idleTimer=null}}}};function Pe(e,t,n){return"number"==typeof e&&e>0&&e<=t&&e>t-n}function De(e,t,n){let r=null;const i=e=>{Pe(e,t,n)&&(null===r||e<r)&&(r=e)};try{for(const t of e)if(t){try{i(t.timestamp)}catch(e){g(e)}try{i(t.start_timestamp)}catch(e){g(e)}}}catch(e){g(e)}return r}var Fe=class{constructor(e){this.logger=d.getInstance(),this.rotating=!1,this.session=e.session,this.pool=e.pool,this.idGenerator=e.idGenerator,this.activityEventTypes=e.activityEventTypes,this.ignoredEventTypes=e.ignoredEventTypes,this.hooks=e.hooks??{}}get isRotating(){return this.rotating}install(){this.pool.setBeforeEnqueueHook((e=>this.reconcileOnEnqueue(e))),this.pool.setFlushGate((()=>this.session.hasUserActivity()))}uninstall(e){this.pool.setBeforeEnqueueHook(null);try{e?.()}catch(e){g(e)}this.pool.setFlushGate(null)}reconcile(e,t,n){if(this.rotating)return;t&&this.session.isSessionInactive(e)&&this.rotate({reason:"inactivity gap",triggeringEvent:n});const r=this.session.getSessionElapsedMs(e),i=this.session.getSessionMaxDuration(),s=r>=i;this.logger.log("[session-lifecycle] session reconcile",{userPresent:t,elapsedMs:r,maxDurationMs:i,expired:s}),s&&this.rotate({reason:"max session duration",triggeringEvent:n}),this.hooks.onReconcile?.(t),t&&(this.session.setLastActivityMs(e),this.hooks.onPresenceStamped?.(e))}reconcileOnEnqueue(e){this.rotating||(this.ignoredEventTypes.has(e.type)?this.logger.log("[session-lifecycle] enqueue rotation check: ignoring heartbeat-style event",e.type):this.reconcile(Date.now(),this.activityEventTypes.has(e.type),e))}rotateIfStale(e,t){(this.session.isSessionInactive(e)||this.session.isSessionExpired(e))&&this.rotate({reason:t})}rotate(e){if(this.rotating)return;this.rotating=!0;const t=(e,t)=>{try{this.logger.log(`[session-lifecycle] session rotation: ${e}`),t()}catch(t){g(t),this.logger.log(`[session-lifecycle] failed to ${e} during session rotation:`,t)}};try{const n=this.session.getSessionId();let r;t("capture host rotation context",(()=>{r=this.hooks.captureRotationContext?.()}));const i=this.session.hasUserActivity();this.logger.log("[session-lifecycle] session rotation start",{reason:e.reason,previousId:n,wasConfirmed:i}),t("host beforeRotate",(()=>this.hooks.beforeRotate?.())),t(i?"flush events":"discard unconfirmed events",(()=>i?this.pool.flush():this.pool.discardBuffer())),t("rotate session ids",(()=>{const t=this.idGenerator.generateId(),r=this.resolveNewSessionStartTime(e.triggeringEvent);this.session.setSessionId(t),this.session.setSessionStartTime(r),this.session.clearSamplingDecision(),this.logger.log("[session-lifecycle] session id rotated",{from:n,to:t})})),t("host afterRotate",(()=>this.hooks.afterRotate?.(r)))}finally{this.rotating=!1,this.logger.log("[session-lifecycle] session rotation complete",{reason:e.reason})}}resolveNewSessionStartTime(e){const t=S(Date.now());let n=t;try{const r=S(Math.min(this.session.getSessionMaxDuration(),Ae)),i=[De([e],t,r),this.pool.getEarliestEventTimestamp(t,r)];for(const e of i)Pe(e,t,r)&&e<n&&(n=e)}catch(e){g(e)}return n}},Oe=new Set(["dom.event"]),je=new Set(["replay"]),Be=class{constructor(e){this.logger=d.getInstance(),this.idGenerator=new p,this.logEventsListener=null,this.domEventsListener=null,this.errorsEventsListener=null,this.networkEventsListener=null,this.navigationListener=null,this.performanceListener=null,this.pageLoadListener=null,this.sessionReplayListener=null,this.replayDesired=!1,this.presenceMonitor=null,this.configManager=e.config,this.session=e.session,this.eventsPool=e.eventsPool,this.enricher=e.enricher,this.manualEvents=new K({config:this.configManager,pool:this.eventsPool,enricher:this.enricher}),this.lifecycle=new Fe({session:this.session,pool:this.eventsPool,idGenerator:this.idGenerator,activityEventTypes:Oe,ignoredEventTypes:je,hooks:{captureRotationContext:()=>this.isReplayRecording(),beforeRotate:()=>this.stopReplayListener(),afterRotate:e=>this.syncReplayState(e),onReconcile:e=>this.syncReplayState(e),onPresenceStamped:e=>this.presenceMonitor?.notePresence(e)}})}listenerDeps(){return{config:this.configManager,eventsPool:this.eventsPool,enricher:this.enricher}}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.lifecycle.install(),this.presenceMonitor?.destroy(),this.presenceMonitor=new _e({onPresence:e=>this.lifecycle.reconcile(e,!0),onIdle:()=>this.pauseReplayOnIdle()}),this.presenceMonitor.initialize();const e=this.configManager.getConfig(),t=e?.options?.enabledEvents,n=!t||0===t.length,r=[];(n||t?.includes("pageload"))&&(this.pageLoadListener=new Ie(this.listenerDeps()),this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new de(this.listenerDeps()),this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new ge(this.listenerDeps()),this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new ke(this.listenerDeps()),this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new Se(this.listenerDeps()),this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new Re(this.listenerDeps()),this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Te(this.listenerDeps(),{isEnabled:n||t?.includes("navigation")}),this.navigationListener.initialize(),r.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",r)}sendCustomEvent(e){this.manualEvents.sendCustomEvent(e)}emitLog(e,t,n){this.logEventsListener&&this.manualEvents.emitLog(e,t,n)}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){g(e)}}isNavigationTrackingEnabled(){const e=this.configManager.getConfig();return e?.options?.enabledEvents?.includes("navigation")||0===e?.options?.enabledEvents?.length}startNavigation(e){this.logger.log("[instrumentation-manager.startNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.startNavigation] startNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.startNavigation(e)}endNavigation(e){this.logger.log("[instrumentation-manager.endNavigation] called",e),this.isNavigationTrackingEnabled()?this.logger.log("[instrumentation-manager.endNavigation] endNavigation called while navigation tracking is enabled. Ignoring. If you wish to track navigations manually, please disable navigation tracking via the enabledEvents array in the config."):this.navigationListener?.endNavigation(e)}isReplayRecording(){return null!==this.sessionReplayListener}restartReplayForConfigChange(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] restarting replay to apply config change"),this.stopReplayListener(),this.startReplayListener())}startReplayRecording(){this.replayDesired=!0,this.isReplayRecording()?this.logger.log("[instrumentation-manager] replay recording already started"):(this.lifecycle.rotateIfStale(Date.now(),"replay start into stale session"),this.startReplayListener(),this.presenceMonitor?.resetIdleTimer())}stopReplayRecording(){this.replayDesired=!1,this.stopReplayListener()}flushPendingReplay(){this.sessionReplayListener?.flushPendingSync()}syncReplayState(e){this.replayDesired&&e&&!this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] user present and replay desired — starting replay"),this.startReplayListener())}pauseReplayOnIdle(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] pausing replay: user idle window elapsed"),this.stopReplayListener())}startReplayListener(){if(this.sessionReplayListener)this.logger.log("[instrumentation-manager] replay recording already started");else try{const e=new xe({...this.listenerDeps(),session:this.session});e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){g(e),this.logger.log("[instrumentation-manager] failed to start replay recording:",e)}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.lifecycle.uninstall((()=>{this.presenceMonitor?.destroy(),this.presenceMonitor=null,this.domEventsListener?.destroy(),this.logEventsListener?.destroy(),this.errorsEventsListener?.destroy(),this.networkEventsListener?.destroy(),this.navigationListener?.destroy(),this.performanceListener?.destroy(),this.pageLoadListener?.destroy(),this.sessionReplayListener?.destroy(),this.sessionReplayListener=null,this.replayDesired=!1}))}};function Ke(e){try{console.warn(e)}catch{}}function Ue(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var Xe=["privacy","tracing","transport","replay"],Ye={tracing:"origin",privacy:"replay"};function $e(e,t){if(!Ue(e))return e;const n={...e};return t&&Ue(n[t])&&(n[t]={...n[t]}),n}function We(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];Ue(i)&&Ue(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!Ue(s)?r[n]=Ue(i)?{...i}:i:Ue(r[n])&&(r[n]={...r[n]})}return r}function Qe(e,t){const n={...e,...t},r=t,i=e;for(const e of Xe){if(!Object.hasOwn(r,e)){Ue(i[e])&&(n[e]=$e(i[e],Ye[e]));continue}const t=r[e];Ue(t)?n[e]=We(i[e],t,Ye[e]):n[e]=$e(i[e],Ye[e])}return n}var Ge=class e{constructor(t){this.dsn=t?.dsn||"",this.appId=t?.appId||"",this.cluster=t?.cluster||"",this.apiKey=t?.apiKey||"",this.environment=t?.environment||"",this.namespace=t?.namespace||"",this.releaseId=t?.releaseId,this.user=t?.user||null,this.providedOptions={...t?.options||{}},this.options=Qe(He,t?.options||{}),this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration),e.warnRemovedOptions(t?.options),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)}static stripRemovedOptions(t){const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&delete n[t]}static warnRemovedOptions(t){if(!t||"object"!=typeof t)return;const n=t;for(const t of e.REMOVED_OPTION_KEYS)Object.hasOwn(n,t)&&Ke(`[groundcover] \`options.${t}\` was removed in 1.0.0 and is ignored. Configure masking via \`options.privacy\` instead — see the migration guide: https://github.com/groundcover-com/rum/tree/main/packages/browser#migrating-to-100`)}static normalizeSessionMaxDuration(e){return void 0===e?Ne:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>qe?(Ke("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),Ne):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=Qe(this.providedOptions||{},t.options),this.options=Qe(this.options,t.options),void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration)),e.stripRemovedOptions(this.providedOptions),e.stripRemovedOptions(this.options)),void 0!==t.user&&(this.user=null===t.user?null:{...this.user,...t.user}),t.appId&&(this.appId=t.appId),t.dsn&&(this.dsn=t.dsn),t.apiKey&&(this.apiKey=t.apiKey),t.cluster&&(this.cluster=t.cluster),t.environment&&(this.environment=t.environment),t.namespace&&(this.namespace=t.namespace),t.releaseId&&(this.releaseId=t.releaseId)}};Ge.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var Ve=Ge,Je=class{constructor(){this.config=null,this.logger=d.getInstance(),this.privacyCache=null}initialize(e){this.config||(this.config=new Ve(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getPrivacy(){return this.privacyCache||(this.privacyCache=function(e){const t=e?.privacy,n=function(e){return"mask-sensitive"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level)??"mask-sensitive",r="allow"===n,i=e=>!r&&(e??!0),s=i(t?.maskNetworkBodies),o=i(t?.maskNetworkQueryParams),a=i(t?.maskLogs),l=i(t?.maskErrors);return{level:n,maskNetworkBodies:s,maskNetworkQueryParams:o,maskLogs:a,maskErrors:l,shouldMaskNetworkBodies:!r&&s,shouldMaskNetworkQueryParams:!r&&o,shouldMaskLogs:!r&&a,shouldMaskErrors:!r&&l,sensitiveKeys:X(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0}}(this.config?.providedOptions)),this.privacyCache}updateConfig(e){this.logger.log("[config-manager] updateConfig called"),this.config?e&&(this.logger.log("[config-manager] updating options"),this.config.updateConfig(e),this.privacyCache=null):this.logger.log("[config-manager] configuration not initialized")}},Ze=He.transport?.batchSize??10,et=He.transport?.batchTimeout??1e4;var tt=class{constructor(e){this.events=[],this.timeoutId=null,this.logger=d.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.unusableEnrichWarned=!1,this.onBeforeEnqueue=null,this.flushGate=null,this.config=e.config,this.session=e.session,this.transporter=e.transporter,this.getDeviceAttributes=e.getDeviceAttributes,this.eventsToSkipFlush=e.eventsToSkipFlush}initialize(){try{if(this.initialized)return;this.scheduleFlush(),this.initialized=!0}catch(e){g(e)}}destroy(){try{null!==this.timeoutId&&(w.clearTimeout(this.timeoutId),this.timeoutId=null),this.events=[],this.initialized=!1}catch(e){g(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}setFlushGate(e){this.flushGate=e}discardBuffer(){this.events=[]}getEarliestEventTimestamp(e,t){return De(this.events,e,t)}isFlushAllowed(){if(null===this.flushGate)return!0;try{return this.flushGate()}catch(e){return g(e),!0}}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;let i=e;if(n&&!n(i))return;if(r){const e=r(i);if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"string"==typeof e.type}catch(e){return g(e),!1}}(e))return void(this.unusableEnrichWarned||(this.unusableEnrichWarned=!0,this.logger.log("[events-pool.addEvent] dropping event: enrichEvent returned an unusable value")));i=e}if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(i)}catch(e){g(e)}if(!this.isFlushAllowed()&&this.events.length>=500)return;this.events.push(i);const s=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:Ze);this.events.length>=s&&!this.eventsToSkipFlush.includes(i.type)&&this.flush()}catch(e){g(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;if(!this.isFlushAllowed())return void this.scheduleFlush();if(!this.events?.length)return void this.scheduleFlush();if(!this.config.getConfig()?.cluster)return this.noClusterWarned||(this.noClusterWarned=!0,this.logger.log("[events-pool.flush] skipping flush: no cluster")),void this.scheduleFlush();this.noClusterWarned=!1;const t={sessionAttributes:this.getSessionAttributes(),events:this.events};e?this.transporter.send(t,{lifecycle:!0}):this.transporter.send(t),this.events=[],this.scheduleFlush()}catch(e){g(e)}}async flushSync(){try{if(!this.events?.length||!this.initialized)return;if(!this.isFlushAllowed())return void this.discardBuffer();if(!this.config.getConfig()?.cluster)return void this.logger.log("[events-pool.flush] skipping flush: no cluster");await this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[]}catch(e){g(e)}}scheduleFlush(){try{null!==this.timeoutId&&(w.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:et);this.timeoutId=w.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){g(e)}var e}getSessionAttributes(){const e=this.config.getConfig();return{...this.getDeviceAttributes(),cluster:e?.cluster||"",env:e?.environment||"",namespace:e?.namespace||"",releaseId:e?.releaseId||"",session_id:this.session.getSessionId(),session_start_time:this.session.getSessionStartTime(),user:e?.user||{},"service.name":e?.appId}}},nt=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.enrichAttributes=e.enrichAttributes??null,this.idGenerator=e.idGenerator??new p}getPlatformAttributes(){if(!this.enrichAttributes)return{};try{return this.enrichAttributes()??{}}catch(e){return this.logger.log("[event-enricher] platform attribute contributor threw; continuing without it",e),{}}}shouldSample(){const e=this.config.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}formatEventObject(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:T(e)?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:n.has(e)?{[t||"circular_reference"]:"[Circular]"}:(n.add(e),Object.entries(e).reduce(((e,[i,s])=>{const o=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[o]=s.map(((e,t)=>"object"==typeof e&&null!==e?this.formatEventObject(e,`${o}[${t}]`,n,r+1):e)):Object.assign(e,this.formatEventObject(s,o,n,r+1)):e[o]=s,e}),{}))}catch(e){return this.logger.log("[event-enricher.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}enrich(e){const t=S(Date.now()),n=this.idGenerator.generateId(),r=e.spanId||this.idGenerator.generateSpanId(),i=e.traceId||this.idGenerator.generateTraceId(),s=e.parentSpanId||"",o=this.formatEventObject(e.attributes||{}),a=this.getPlatformAttributes(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...o,...a}};return e.span_name&&(l.span_name=e.span_name),"network"===e.type?(l.start_timestamp=e.timestamp||t,l.end_timestamp=e?.end_timestamp):l.timestamp=t,l}};function rt(e,t){if(!t)return{data:(new TextEncoder).encode(e),isCompressed:!1};try{const t=l(e);return{data:c(t),isCompressed:!0}}catch(t){return{data:(new TextEncoder).encode(e),isCompressed:!1}}}var it=class{constructor(e){this.logger=d.getInstance(),this.config=e.config,this.sendBatch=e.sendBatch,this.encodeAsync=e.encodeAsync??null}compressAsync(e,t){if(!this.encodeAsync)return Promise.resolve(rt(e,t));try{return this.encodeAsync(e,t).catch((()=>rt(e,t)))}catch{return Promise.resolve(rt(e,t))}}async send(e,{lifecycle:t=!1}={}){const n=this.config.getConfig();if(n)try{n?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const r=n.apiKey,i=this.buildEndpoint();if(!r)return void this.logger.log("No API key found");const s=JSON.stringify(e),o=!!n?.options?.transport?.compression,{data:a,isCompressed:l}=t?rt(s,o):await this.compressAsync(s,o),c={"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""};this.sendBatch(i,{method:"POST",headers:c,body:a}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){n?.options?.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();return e?`${e.getEndpoint()}/json/rum`:""}},st=class{constructor(e){this.storage=e}getItem(e){try{return this.storage?.getItem(e)??null}catch(e){return g(e),null}}setItem(e,t){try{this.storage?.setItem(e,t)}catch(e){g(e)}}removeItem(e){try{this.storage?.removeItem(e)}catch(e){g(e)}}getNumericItem(e,t=0){const n=this.getItem(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}},ot=class{constructor(e){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage=e.storage,this.getMaxDurationMs=e.getMaxDurationMs??null}getSessionId(){if(this.sessionId)return this.sessionId;return this.storage.getItem("gcId")||""}setSessionId(e){this.sessionId=e,this.storage.setItem("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:this.storage.getNumericItem("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,this.storage.setItem("gcStartTime",String(e)),this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcLastActivity")}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:this.storage.getNumericItem("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,this.storage.setItem("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs(),n=t>0?t:k(this.getSessionStartTime());return n>0&&e-n>=Ae}hasUserActivity(){return this.getLastActivityMs()>0}clearSamplingDecision(){this.storage.removeItem(Ce)}clearSessionState(){this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.storage.removeItem("gcId"),this.storage.removeItem("gcStartTime"),this.storage.removeItem("gcLastActivity"),this.clearSamplingDecision()}getSessionMaxDuration(){return this.getMaxDurationMs?.()??Ne}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-k(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}};function at(){const e=navigator.userAgent;let t="unknown",n="unknown";const r=navigator.platform||"unknown",i=/Mobile|Android|iPhone|iPad|iPod/i.test(e);return/Edg/.test(e)?(t="Edge",n=e.match(/Edg\/([\d.]+)/)?.[1]||n):/Chrome/.test(e)&&!/Chromium/.test(e)?(t="Chrome",n=e.match(/Chrome\/([\d.]+)/)?.[1]||n):/Firefox/.test(e)?(t="Firefox",n=e.match(/Firefox\/([\d.]+)/)?.[1]||n):/Safari/.test(e)&&!/Chrome/.test(e)?(t="Safari",n=e.match(/Version\/([\d.]+)/)?.[1]||n):/Trident/.test(e)?(t="Internet Explorer",n=/rv:([^)]+)\)/i.test(e)?e.match(/rv:([^)]+)\)/i)?.[1]||n:e.match(/MSIE ([^;]+)/)?.[1]||n):/OPR/.test(e)&&(t="Opera",n=e.match(/OPR\/([\d.]+)/)?.[1]||n),{userAgent:e,browser:{name:t,version:n,platform:r,language:navigator.language,mobile:i}}}var lt,ct=["navigation","dom.event"],ht=class{constructor(e){this.core=null,this.hideWired=!1,this.hideHandler=()=>{try{if("undefined"==typeof document||"hidden"!==document.visibilityState)return;this.core?.session.persistLastActivity(),this.core?.pool.flush({lifecycle:!0})}catch(e){g(e)}},this.logger=d.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.storage=new st(function(){try{return void 0!==globalThis.sessionStorage?globalThis.sessionStorage:null}catch{return null}}()),this.idGenerator=new p;const t=new Je;t.initialize(e);const n=new ot({storage:this.storage,getMaxDurationMs:()=>t.getConfig()?.options?.sessionMaxDuration});!function({session:e,idGenerator:t,providedSessionId:n}){const r=d.getInstance();try{const i=e.getSessionId();n&&n!==i?(e.setSessionId(n),e.setSessionStartTime(S(Date.now())),e.clearSamplingDecision(),r.log("[session-bootstrap] using provided sessionId:",n)):n?(e.setSessionId(n),r.log("[session-bootstrap] continuing provided sessionId:",n)):i||e.setSessionId(t.generateId());const s=6e4,o=Date.now(),a=k(e.getSessionStartTime());if(a>0&&o-a>=-s){if(e.isSessionExpired(o)||e.isSessionInactive(o)){const n=e.isSessionExpired(o)?"persisted session past cap":"inactivity gap across reload",i=e.getSessionId(),s=t.generateId();e.setSessionId(s),e.setSessionStartTime(S(o)),e.clearSamplingDecision(),r.log(`[session-bootstrap] init-time rotation: ${n}`,{from:i,to:s})}}else e.setSessionStartTime(S(o))}catch(e){r.log("[session-bootstrap] session bootstrap failed:",e)}}({session:n,idGenerator:this.idGenerator,providedSessionId:e.sessionId});if(!function({storage:e,sessionSampleRate:t}){const n=d.getInstance();if(void 0===t||!Number.isFinite(t)||1===t)return!0;const r=t;try{const t=e.getItem(Ce);if(t){const e="1"===t;return n.log("[session-bootstrap] using stored sampling decision:",e),e}const i=Math.random()<r;return e.setItem(Ce,i?"1":"0"),n.log("[session-bootstrap] stored new sampling decision:",i),i}catch(e){n.log("[session-bootstrap] storage access failed:",e);const t=Math.random()<r;return n.log("[session-bootstrap] using fallback sampling decision:",t),t}}({storage:this.storage,sessionSampleRate:e.options?.sessionSampleRate}))return void this.logger.log("[session-manager] session is not sampled");const r=new it({config:t,sendBatch:(e,t)=>fetch(e,t),encodeAsync:(e,t)=>Me.withFallback((n=>n.encodeBatch(e,t)),(()=>rt(e,t)),"transporter")}),i=new tt({config:t,session:n,transporter:r,getDeviceAttributes:at,eventsToSkipFlush:ct}),s=function(e){return()=>{let t="";try{t=w?.document?.title||""}catch(e){g(e)}try{const n=w?.location;if(!n)return{path:"",url:"",title:t};const r=n.hash&&!n.hash.match(/^#[a-z0-9-]+$/i)&&n.hash.startsWith("#/"),i=r?n.hash:n.pathname,s=e.getPrivacy(),o=s.shouldMaskNetworkQueryParams,a={sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"};return{path:o&&r?D(i,a):i,url:o?D(n.href,a):n.href,title:t}}catch(e){return g(e),{path:"",url:"",title:t}}}}(t),o=new nt({config:t,enrichAttributes:()=>({location:s()}),idGenerator:this.idGenerator}),a=new Be({config:t,session:n,eventsPool:i,enricher:o});try{i.initialize(),Me.getInstance(),this.wireHideHandler(),a.instrument(),this.core={config:t,session:n,pool:i,instrumentation:a}}catch(e){this.logger.log("[session-manager] initialization failed — tearing down partial startup:",e);try{a.uninstrument()}catch(e){g(e)}throw i.destroy(),this.unwireHideHandler(),this.core=null,e}}wireHideHandler(){if(!this.hideWired&&"undefined"!=typeof document){this.hideWired=!0;try{document.addEventListener("visibilitychange",this.hideHandler)}catch(e){g(e)}}}unwireHideHandler(){if(this.hideWired&&"undefined"!=typeof document){this.hideWired=!1;try{document.removeEventListener("visibilitychange",this.hideHandler)}catch(e){g(e)}}}identifyUser(e){this.logger.log("[session-manager] identifyUser called"),this.core?this.core.config.updateConfig({user:e}):this.logger.log("[session-manager] cannot identify user: SDK not initialized")}updateConfig(e){if(!this.core)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");this.core.config.updateConfig(e);const t=e.options,n=!!t&&"privacy"in t,r=!!t&&"object"==typeof t.replay&&null!==t.replay&&"blockedSelectors"in t.replay;(n||r)&&this.core.instrumentation.restartReplayForConfigChange()}sendCustomEvent(e){this.core?this.core.instrumentation.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.core?this.core.instrumentation.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.core?this.core.instrumentation.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.core?this.core.instrumentation.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.core?this.core.instrumentation.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.core?this.core.session.getSessionId():(this.logger.log("[session-manager] cannot get session ID: SDK not initialized"),"")}async setSessionId(e){if(this.logger.log("[session-manager] setSessionId called"),this.core)try{this.core.instrumentation.flushPendingReplay(),await this.core.pool.flushSync();const t=e||this.idGenerator.generateId();this.core.session.setSessionId(t),this.core.session.setSessionStartTime(S(Date.now())),this.logger.log("[session-manager] session ID set successfully:",t)}catch(e){this.logger.log("[session-manager] failed to set session ID:",e)}else this.logger.log("[session-manager] cannot set session ID: SDK not initialized")}startReplayRecording(){this.core?this.core.instrumentation.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.core?this.core.instrumentation.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}handoffForReinit(){const e=this.core;if(!e)return;const t=e.session.hasUserActivity();e.instrumentation.uninstrument(),t&&e.pool.flush({lifecycle:!0}),e.pool.destroy(),this.unwireHideHandler(),this.core=null}destroy(){const e=this.core;e&&(e.instrumentation.uninstrument(),e.pool.destroy(),this.unwireHideHandler(),Me.getInstance().terminate(),e.session.clearSessionState(),this.core=null)}},dt=new class{constructor(e){this.manager=e}emit(e,t,n){this.manager&&this.manager.emitLog(t,e,n)}log(e,t){this.emit("log",e,t)}info(e,t){this.emit("info",e,t)}warn(e,t){this.emit("warn",e,t)}error(e,t){this.emit("error",e,t)}debug(e,t){this.emit("debug",e,t)}trace(e,t){this.emit("trace",e,t)}};var ut={init:function(e){try{lt?.handoffForReinit(),lt=new ht({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",user:e?.user,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),dt.manager=lt}catch(e){g(e)}},identifyUser:function(e){lt?lt.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){lt&&lt.sendCustomEvent(e)},captureException:function(e,t){lt&&lt.captureException(e,t)},logger:dt,updateConfig:function(e){if(lt)try{lt.updateConfig(e)}catch(e){g(e)}},startNavigation:function(e){lt?lt.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){lt?lt.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return lt?lt.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(lt)try{await lt.setSessionId(e)}catch(e){console.error("[groundcover] setSessionId: failed to set session ID:",e)}else console.warn("[groundcover] setSessionId: groundcover is not initialized. please call init() first")},startReplayRecording:function(){lt?lt.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){lt?lt.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=ut}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var gt=ut;export{gt as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groundcover/browser",
3
- "version": "1.0.8-rc.7",
3
+ "version": "1.0.9-rc.0",
4
4
  "description": "groundcover Real User Monitoring (RUM) SDK for the browser \u2014 performance, errors, logs, distributed tracing and session replay",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",