@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 +74 -43
- package/README.md +11 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
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.
|
|
7
|
+
## [1.0.9-rc.0]
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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&<.sendCustomEvent(e)},captureException:function(e,t){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.
|
|
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",
|