@groundcover/browser 1.0.6-rc.0 → 1.0.6-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ 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.5]
8
+
9
+ ### Added
10
+
11
+ - **Network request & response body capture.** `fetch` and XHR request/response bodies are recorded —
12
+ including `fetch(new Request(url, { body }))` (openapi-fetch), where the body lives on the `Request`
13
+ and was previously dropped. Bodies are read from a clone taken before the request is sent, so the
14
+ app's copy is never consumed.
15
+
16
+ ### Changed
17
+
18
+ - **Unified, fail-closed body capture across every path.** `init.body`, `Request`-object, XHR
19
+ request/response, and fetch response capture now share one contract: each emits either a complete
20
+ body within the size cap or a placeholder — never a truncated, partial, or binary body (which
21
+ breaks `redactBody`'s structured pass and can leak nested secrets). Over-cap →
22
+ `[request body too large]` / `[response body too large]`; slow or never-closing read →
23
+ `[… body unavailable]`; binary/multipart classified by content-type → `[binary data]`, a typed
24
+ label (`[image data]`, `[pdf data]`, …), or `[form data]`. Redaction runs *before* truncation so
25
+ sensitive keys in a within-cap body are always masked.
26
+
27
+ ### Fixed
28
+
29
+ - **Fetch response bodies are now hardened like request bodies (FE-12851).** Responses are classified
30
+ by content-type (binary → placeholder, no mojibake) and their read is bounded by a timeout, so a
31
+ slow or never-ending response stream can no longer stall the network event. An over-cap response is
32
+ placeholdered instead of emitting an unredactable truncated slice.
33
+
7
34
  ## [1.0.2]
8
35
 
9
36
  ### Changed
package/README.md CHANGED
@@ -230,11 +230,20 @@ static imports before its body, so a client built at module scope is often const
230
230
  **XHR-based clients (e.g. axios) are always instrumented** regardless of init order — the SDK patches
231
231
  `XMLHttpRequest.prototype`, so every request created after `init()` is covered.
232
232
 
233
- **`Request`-object calls have their HTTP method captured.** Clients that call
234
- `fetch(new Request(url, { method, body }))` (openapi-fetch does) carry the method on the `Request`
235
- rather than in an `init` argument; the SDK reads it from either (since 1.0.4). Note: the request
236
- *body* for the `Request`-object form is not captured yet — the method, URL, headers, status, and
237
- response body are.
233
+ **`Request`-object calls are captured.** Clients that call
234
+ `fetch(new Request(url, { method, body }))` (openapi-fetch does) carry the method and body on the
235
+ `Request` rather than in an `init` argument; the SDK reads the method from either (since 1.0.4) and
236
+ the request *body* from either (since 1.0.5). Method, URL, headers, status, request body, and
237
+ response body are recorded. The `Request` body is read from a clone taken before the request is
238
+ sent, so the app's copy is never consumed.
239
+
240
+ Request and response bodies are captured the same way: up to a size cap, with redaction applied
241
+ *before* truncation so sensitive keys are always masked. A body larger than the cap is recorded as
242
+ `[request body too large]` / `[response body too large]` rather than a truncated fragment — a partial
243
+ body can't be parsed for structured redaction, so it is never emitted. Non-text bodies are
244
+ placeholdered by content-type (`[binary data]`, `[image data]`, `[pdf data]`, `[form data]`, …), and
245
+ a slow or never-closing body read resolves to `[request body unavailable]` /
246
+ `[response body unavailable]` so it can never defer the event.
238
247
 
239
248
  ---
240
249
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("fflate"),t=require("error-stack-parser"),n=require("web-vitals"),r=require("rrweb"),i=require("@rrweb/packer");function s(e){return e&&e.__esModule?e:{default:e}}var a=s(t),o=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&&o(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="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},u=1e6;function g(e){return e*u}function f(e){return e/u}function p(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 v=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)m[e]=Math.floor(16*Math.random())+48,m[e]>=58&&(m[e]+=39);return b+String.fromCharCode.apply(null,m.slice(0,16))},this.generateSpanId=y(8),this.generateId=y(16)}},m=Array(32);function y(e){return function(){for(let t=0;t<2*e;t++)m[t]=Math.floor(16*Math.random())+48,m[t]>=58&&(m[t]+=39);return String.fromCharCode.apply(null,m.slice(0,2*e))}}var b="0000000000000000";var w=144e5,E=288e5,k=18e5,S={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:w};function I(e){try{console.warn(e)}catch{}}function T(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var R=["privacy","tracing","transport","replay"],L={tracing:"origin",privacy:"replay"};function M(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];T(i)&&T(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!T(s)&&(r[n]=i)}return r}function N(e,t){const n={...e,...t},r=t,i=e;for(const e of R){if(!Object.hasOwn(r,e))continue;const t=r[e];T(t)?n[e]=M(i[e],t,L[e]):n[e]=i[e]}return n}var x=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=N(S,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)&&I(`[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?w:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>E?(I("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),w):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=N(this.providedOptions||{},t.options),this.options=N(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)}};x.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var q=x;function A(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function C(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return h(e),null}}function z(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){h(e)}}function _(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){h(e)}}function H(e,t=0){const n=C(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}var P=class e{constructor(){this.config=null,this.logger=l.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.privacyCache=null,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){h(e)}},this.activityPersistHooked=!1}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(e){if(!this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!0;try{document.addEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){h(e)}}this.config||(this.config=new q(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=A(t?.maskSelectors),s=t?.replay,a="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,o="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;l="mask-all"===n||!r&&void 0!==a?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0;const c=e=>!r&&(e??!0),h=c(t?.maskNetworkBodies),d=c(t?.maskNetworkQueryParams),u=c(t?.maskLogs),g=c(t?.maskErrors);return{level:n,maskTextSelector:l,maskSelectors:i,maskInputs:!r,maskNetworkBodies:h,maskNetworkQueryParams:d,maskLogs:u,maskErrors:g,shouldMaskNetworkBodies:!r&&h,shouldMaskNetworkQueryParams:!r&&d,shouldMaskLogs:!r&&u,shouldMaskErrors:!r&&g,sensitiveKeys:A(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:a,maskInputFn:o}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return C("gcId")||""}setSessionId(e){this.sessionId=e,z("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:H("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,z("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:H("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,z("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=k}clearSessionState(){if(this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!1;try{document.removeEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){h(e)}}_("gcId"),_("gcStartTime"),_("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??w}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-f(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}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")}},D="[REDACTED]",O=["authorization","cookie","set-cookie"],F=/(token|key|secret|passwd|password|auth|bearer|credential)/i,j=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,K=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),U=1e5;function B(e,t){if(!e)return!1;if(j.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function Y(e,t){return K.has(e.toLowerCase())||B(e,t)}function $(e){return e.includes("-")&&F.test(e)}function Q(e,t){return B(e,t)||$(e)}function X(e,t){const n=e.sensitive?D:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return h(e),n}}function W(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 a=i;try{a=decodeURIComponent(i)}catch{}const o=Y(s,t.sensitiveKeys),l=X({key:s,value:a,path:[s],kind:t.kind??"query",sensitive:o},t.redact);return l===a?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function V(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${W(e.slice(n+1),t)}`}function J(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),a=V(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${D}@`))}(i),n);return-1===r?a:`${a}#${V(s,n)}`}function G(e,t,n,r,i,s){const a=!!e&&B(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(a||i>8)return D;if(p(t))return D;if(s.has(t))return D;s.add(t);try{if(Array.isArray(t))return t.map((t=>G(e,t,n,r,i+1,s)));const a={};for(const[e,o]of Object.entries(t))a[e]=G(e,o,[...n,e],r,i+1,s);return a}catch(e){return h(e),D}finally{s.delete(t)}}return X({key:e,value:t,path:n,kind:r.kind??"log",sensitive:a},r.redact)}function Z(e,t={}){if(!e)return e;if(e.length>U)return`${Z(e.slice(0,U),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>Q(n,t.sensitiveKeys)?`"${n}":"${D}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return Y(e,t)||$(e)}(n,t.sensitiveKeys)?`${n}=${D}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>Q(n,t.sensitiveKeys)?`${n}: ${D}`: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 ee(e,t={}){try{const n=G("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return h(e),{}}}function te(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:Z(t,r),attributes:n?ee(n,r):n}}var ne=P.getInstance(),re=new v,ie=l.getInstance();function se(){const e=ne?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function ae(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:p(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 a=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[a]=s.map(((e,t)=>"object"==typeof e&&null!==e?ae(e,`${a}[${t}]`,n,r+1):e)):Object.assign(e,ae(s,a,n,r+1)):e[a]=s,e}),{}))}catch(e){return ie.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}function oe(e){const t=g(Date.now()),n=re.generateId(),r=e.spanId||re.generateSpanId(),i=e.traceId||re.generateTraceId(),s=e.parentSpanId||"",a=ae(e.attributes||{}),o=function(){const e=d?.location;if(!e)return{path:"",url:"",title:d?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),n=t?e.hash:e.pathname,r=ne.getPrivacy(),i=r.shouldMaskNetworkQueryParams,s={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};return{path:i&&t?J(n,s):n,url:i?J(e.href,s):e.href,title:d?.document?.title||""}}(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...a,location:o}};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 le({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}function ce(e){return(e||"").replace(/\s+/g," ").trim()}var he=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 a=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:a});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(a),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()}};he.instance=null;var de=he,ue=class{constructor(){this.logger=l.getInstance(),this.config=P.getInstance()}compressInline(t,n){if(!n)return{data:(new TextEncoder).encode(t),isCompressed:!1};try{const n=e.strToU8(t);return{data:e.gzipSync(n),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(t),isCompressed:!1}}}compressAsync(e,t){return de.withFallback((n=>n.encodeBatch(e,t)),(()=>this.compressInline(e,t)),"transporter")}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),a=!!n?.options?.transport?.compression,{data:o,isCompressed:l}=t?this.compressInline(s,a):await this.compressAsync(s,a);fetch(i,{method:"POST",headers:{"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""},body:o}).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`:""}},ge=["navigation","dom.event"],fe=S.transport?.batchSize??10,pe=S.transport?.batchTimeout??1e4;var ve=class e{constructor(){this.events=[],this.timeoutId=null,this.config=P.getInstance(),this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush({lifecycle:!0})},this.transporter=new ue}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(){try{if(this.initialized)return;this.scheduleFlush(),"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.visibilityHandler),this.initialized=!0}catch(e){h(e)}}destroy(){try{null!==this.timeoutId&&(d.clearTimeout(this.timeoutId),this.timeoutId=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.events=[],this.initialized=!1}catch(e){h(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;if(n&&!n(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){h(e)}r&&(e=r(e)),this.events.push(e);const i=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:fe);this.events.length>=i&&!ge.includes(e.type)&&this.flush()}catch(e){h(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;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.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&&(d.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:pe);this.timeoutId=d.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){h(e)}var e}detectBrowser(){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),{name:t,version:n,platform:r,language:navigator.language,mobile:i}}getSessionAttributes(){const e=this.detectBrowser(),t=this.config.getConfig();return{cluster:t?.cluster||"",env:t?.environment||"",namespace:t?.namespace||"",releaseId:t?.releaseId||"",session_id:this.config.getSessionId(),session_start_time:this.config.getSessionStartTime(),user:t?.user||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};ve.instance=null;var me=ve,ye=class{constructor(){this.logger=l.getInstance(),this.eventsPool=me.getInstance()}},be="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function we(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Ee(e){try{const t=be?.call(e);return"string"==typeof t?t:""}catch{return""}}function ke(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function Se(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>we(e,t))).filter(Boolean)}(e).some((e=>B(e,t))))}function Ie(e,t){return"allow"!==t.level&&(!!e&&(!!ke(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>ke(e,t))))||("mask-all"===t.level||function(e){const t=Ee(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&Se(e,t.sensitiveKeys)))))}var Te={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},Re=["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"]'].join(", ");function Le(e){return!!e&&1===e.nodeType}function Me(e){return le({text:e,maxLength:255})}function Ne(e){const t=we(e,"role");return t?ce(t):function(e){switch(Ee(e).toLowerCase()){case"a":return we(e,"href")?"link":"";case"button":return"button";case"input":switch(we(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 xe(e){if(!Le(e))return"";try{const t=ce(e.textContent||"");return t?t.length>1e3?"":le({text:t,maxLength:255}):""}catch{return""}}function qe(e){const t=function(e){const t=we(e,"aria-labelledby").split(/\s+/).filter(Boolean);if(!t.length)return"";const n=[];for(const e of t.slice(0,5))try{const t=document.getElementById(e);t?.textContent&&n.push(t.textContent)}catch{}return ce(n.join(" "))}(e);if(t)return Me(t);const n=ce(we(e,"aria-label"));if(n)return Me(n);const r=ce(we(e,"alt"));if(r)return Me(r);if(function(e){const t=Ee(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=we(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=ce(we(e,"value"));if(t)return Me(t)}const i=ce(we(e,"title"));if(i)return Me(i);const s=ce(we(e,"placeholder"));return s?Me(s):xe(e)}var Ae=class extends ye{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=P.getInstance(),this.getShouldMaskText=e=>Ie(e.target,this.config.getPrivacy()),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}),d?.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(!se())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(!Le(e))return null;try{return e.closest(Re)}catch{return null}}(n)??n,i=r?this.generateSelector(r):"",s=this.config.getPrivacy(),a=this.getShouldMaskText({target:n||null})||!!r&&(function(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}}(r,s)||function(e,t){if("allow"===t.level)return!1;try{const n=we(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5);for(const e of n){const n=document.getElementById(e);if(n&&Ie(n,t))return!0}}catch{}return!1}(r,s)),o=this.getKeyCode(e,a),l=function(e){if(!Le(e))return{...Te};try{return{role:Me(Ne(e)),accessibleName:qe(e),ariaLabel:Me(ce(we(e,"aria-label"))),title:Me(ce(we(e,"title"))),alt:Me(ce(we(e,"alt"))),placeholder:Me(ce(we(e,"placeholder"))),name:Me(we(e,"name")),inputType:Me(we(e,"type")),href:Me(we(e,"href"))}}catch{return{...Te}}}(r),c=s.shouldMaskNetworkQueryParams?J(l.href,{sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"}):l.href,h=e=>a&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");return oe({type:"dom.event",attributes:{dom_event_selector:i,dom_event_key_code:o,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:we(r,"id"),tagName:Ee(r),className:we(r,"class"),text:a?"*":xe(r),role:l.role,accessibleName:h(l.accessibleName),ariaLabel:h(l.ariaLabel),title:h(l.title),alt:h(l.alt),placeholder:h(l.placeholder),name:l.name,inputType:l.inputType,href:h(c)}}})}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"===Ee(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<r;){let e=Ee(o).toLowerCase();try{const t=o.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(o.classList?.length){const t=Array.from(o.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=o.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Ee(o).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return s||"*"}},Ce=["log","info","warn","error","debug","assert","trace"],ze=class extends ye{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=P.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),Ce.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){h(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){h(e)}}destroy(){try{if(!this.isInitialized)return;Ce.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){h(e)}}handleEvent(e,t){try{if(!se())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}=te(this.config.getPrivacy(),e,n);return oe({type:"log",attributes:{...i,message:le({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 _e(e){try{if(null==e)return"";if("string"==typeof e)return e;if(e instanceof FormData)return"[form data]";if(e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if("undefined"!=typeof Document){if(e instanceof Document)return"[document data]";const t=e;if(9===t?.nodeType)return"[document data]"}if(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 He,Pe=class extends ye{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=P.getInstance(),this.idGenerator=new v,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!se())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=J(t,i))}r.shouldMaskNetworkQueryParams&&(n=J(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),a=this.formatHeaders(e.response.headers),o=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<=U&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(G("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?W(e,t):Z(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=le({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=le({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),f={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:a,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)?g(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?g(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:f};return l&&(p.traceId=l),c&&(p.spanId=c),oe(p)}}async getResponseBody(e){const t=e.body;if(!t)return"";const n=t.getReader(),r=new TextDecoder;let i="",s=0;for(;;){const{done:e,value:t}=await n.read();if(e)break;if(s+t.byteLength>=this.maxBodyLength){const e=t.subarray(0,this.maxBodyLength-s);i+=r.decode(e,{stream:!0}),n.cancel().catch((()=>{}));break}s+=t.byteLength,i+=r.decode(t,{stream:!0})}return i+=r.decode(),i}initialize(){this.logger.log("[network-events-listener.initialize] called"),this.patchXHR(),this.patchFetch()}destroy(){globalThis.XMLHttpRequest.prototype.open=globalThis.XMLHttpRequest.prototype.open,globalThis.XMLHttpRequest.prototype.send=globalThis.XMLHttpRequest.prototype.send,globalThis.fetch=globalThis.fetch}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,a,o){if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,a,o]);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,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),r.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...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(this._requestBody),s=_e(""===this.responseType||"text"===this.responseType?this.responseText:this.response),a={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:s}};e.handleEvent(a)})),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)=>{const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,a=i?.method||(s?r.method:"GET"),o=i?.body||"",l=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(l))return e.apply(globalThis,t);const c=this.shouldAddTraceHeader(l);i||(t[1]={},i=t[1]),i.headers=this.normalizeHeaders(s?r.headers:void 0,i.headers),c&&this.addTraceHeaders(i);const h=this.extractHeadersRecord(i.headers),d=_e(o);return e.apply(globalThis,t).then((e=>{const t=Date.now(),r={};e.headers.forEach(((e,t)=>{r[t]=e}));const i={method:a,url:l,timestamp:n,body:d,status:e.status,end_time:t,request:{headers:h,body:d},response:{headers:r,body:""}};try{r["content-type"]?.includes("text/event-stream")?(i.response.body="[unreadable response body]",this.handleEvent(i)):this.getResponseBody(e.clone()).then((e=>{i.response.body=e,this.handleEvent(i)})).catch((e=>{i.response.body="[unreadable response body]",this.handleEvent(i),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}))}catch(e){i.response.body="[unreadable response body]",this.handleEvent(i),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}return e})).catch((e=>{const t=Date.now();let n="NetworkError";const r=e.message||"Unknown network error";e instanceof TypeError&&r.includes("Failed to fetch")?n="ERR_NETWORK_FAILURE":r.includes("Name not resolved")?n="ERR_NAME_NOT_RESOLVED":r.includes("Connection refused")&&(n="ERR_CONNECTION_REFUSED");const i={method:a,url:l,body:d,status:0,end_time:t,request:{headers:h,body:d},response:{headers:{},body:""},error:{type:n}};throw this.handleEvent(i),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=X({key:n,value:r,path:[n],kind:"header",sensitive:O.includes(i)||F.test(i)||B(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]=le({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}},De=class extends ye{constructor(){super(...arguments),this.config=P.getInstance(),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(){d?.addEventListener("error",this.handleEvent),d?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){d?.removeEventListener("error",this.handleEvent),d?.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",a=r?Z(s,i):s,o=r&&t?.metadata?ee(t.metadata,i):t?.metadata;return oe({type:"exception",attributes:{error_type:e.name||"Error",error_message:a,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${le({text:a,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:o}})}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 a.default.parse(e).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Oe=class extends ye{constructor({isEnabled:e}){if(super(),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&e)try{this.isAutomaticNavigationEnabled=e,this.currentUrl=d.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){h(e)}}isInBrowserEnvironment(){try{return void 0!==d&&void 0!==d.location&&void 0!==d.history&&"function"==typeof d.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;history.pushState=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},history.replaceState=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n},d&&"function"==typeof d.addEventListener&&(d.addEventListener("popstate",this.popStateHandler),d.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.originalPushState,history.replaceState=this.originalReplaceState),d&&"function"==typeof d.removeEventListener&&(d.removeEventListener("popstate",this.popStateHandler),d.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",d.location.href);const e=P.getInstance().getPrivacy(),t="allow"===e.level,n=d.location.href,r=this.activeNavigation?.metadata;return oe({type:"navigation",attributes:{page_url:e.shouldMaskNetworkQueryParams?J(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?ee(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}})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}startNavigation(e){this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:d.location.href,metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}endNavigation(e){this.logger.log("[navigation-listener.endNavigation] called",e),this.activeNavigation?(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()):this.logger.log("[navigation-listener.endNavigation] no active navigation found")}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===d.location.href)return;let e,t;try{e=new URL(d.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=d.location.href,this.handleEvent())}catch(e){h(e)}}},Fe=class extends ye{constructor(){super(),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",d),"complete"===d?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):d?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),h(e)}}destroy(){d?.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=P.getInstance().getPrivacy(),s=i.shouldMaskNetworkQueryParams,a={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},o=d?.location?.href||"",l=d?.document?.referrer||"";return oe({type:"pageload",attributes:{page_url:s?J(o,a):o,page_load_time:t,page_referrer:s?J(l,a):l,page_resources:r}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},je=class extends ye{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!se())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}}initialize(){n.onCLS(this.handleEvent),n.onLCP(this.handleEvent),n.onFCP(this.handleEvent),n.onTTFB(this.handleEvent),n.onINP(this.handleEvent)}destroy(){}buildEvent(e){return oe({type:"performance",attributes:{performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""}})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},Ke=class{constructor(){this.logger=l.getInstance(),this.eventsPool=me.getInstance(),this.configManager=P.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}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?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0,n=this.configManager.getPrivacy(),i=n.maskInputFn??("allow"===n.level?void 0:(e,t)=>Ie(t,n)?"*".repeat(e.length):e);this.stopFn=r.record({...t?{blockSelector:t}:{},...n.maskTextSelector?{maskTextSelector:n.maskTextSelector}:{},maskAllInputs:n.maskInputs,...n.maskTextFn?{maskTextFn:n.maskTextFn}:{},...i?{maskInputFn:i}:{},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=d.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&&(d.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.configManager.getSessionId(),n=de.getInstance();let r;if(n.isAvailable)try{r=await n.packReplay(e.events)}catch(t){h(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),r=e.events.map((e=>i.pack(e)))}else r=e.events.map((e=>i.pack(e)));this.configManager.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=>i.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=oe({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()}},Ue=["pointerdown","keydown","scroll","touchstart","mousemove"],Be=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,Ue.forEach((e=>{try{d.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",k,"ms");try{this.callbacks.onIdle()}catch(e){h(e)}}),k)}catch(e){h(e)}}destroy(){if(this.installed){this.installed=!1,Ue.forEach((e=>{try{d.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){h(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){h(e)}finally{this.idleTimer=null}}}},Ye=new Set(["dom.event","navigation","pageload"]),$e=class{constructor(){this.logger=l.getInstance(),this.eventsPool=me.getInstance(),this.configManager=P.getInstance(),this.idGenerator=new v,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.isRotating=!1,this.replayDesired=!1,this.presenceMonitor=null}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.eventsPool.setBeforeEnqueueHook((e=>this.reconcileSessionOnEnqueue(e))),this.presenceMonitor?.destroy(),this.presenceMonitor=new Be({onPresence:e=>this.reconcileSession(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 Fe,this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new Ae,this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new ze,this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new De,this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new Pe,this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new je,this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Oe({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.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=oe({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){h(e)}}emitLog(e,t,n){if(this.logEventsListener){this.logger.log("[instrumentation-manager.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}=te(P.getInstance().getPrivacy(),e,r),a=oe({type:"log",attributes:{...s,message:le({text:i}),level:t}});this.eventsPool.addEvent(a)}catch(e){h(e)}}}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(){if(this.replayDesired=!0,this.isReplayRecording())return void this.logger.log("[instrumentation-manager] replay recording already started");const e=Date.now();(this.configManager.isSessionInactive(e)||this.configManager.isSessionExpired(e))&&this.rotateSession({reason:"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 Ke;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)}}reconcileSession(e,t){if(this.isRotating)return;t&&this.configManager.isSessionInactive(e)&&this.rotateSession({reason:"inactivity gap"});const n=this.configManager.getSessionElapsedMs(e),r=this.configManager.getSessionMaxDuration(),i=n>=r;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:r,expired:i}),i&&this.rotateSession({reason:"max session duration"}),this.syncReplayState(t),t&&(this.configManager.setLastActivityMs(e),this.presenceMonitor?.notePresence(e))}reconcileSessionOnEnqueue(e){this.isRotating||("replay"!==e.type?this.reconcileSession(Date.now(),Ye.has(e.type)):this.logger.log("[instrumentation-manager] enqueue rotation check: ignoring replay event"))}rotateSession(e){if(this.isRotating)return;this.isRotating=!0;const t=this.configManager.getSessionId(),n=this.isReplayRecording();this.logger.log("[instrumentation-manager] session rotation start",{reason:e.reason,previousId:t,wasReplayActive:n});const r=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){h(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{r("stop replay",(()=>this.stopReplayListener())),r("flush events",(()=>this.eventsPool.flush())),r("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(g(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),r("sync replay",(()=>this.syncReplayState(n)))}finally{this.isRotating=!1,this.logger.log("[instrumentation-manager] session rotation complete",{reason:e.reason})}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.eventsPool.setBeforeEnqueueHook(null),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}},Qe="gcSample",Xe=class{constructor(e){this.initialized=!1,this.logger=l.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.instrumentationManager=new $e,this.idGenerator=new v;if(!this.getSamplingDecision(e.options?.sessionSampleRate))return void this.logger.log("[session-manager] session is not sampled");if(this.initialized)return void this.logger.log("[session-manager] SDK already initialized");const t=P.getInstance();t.initialize(e);me.getInstance().initialize(),de.getInstance();const n=e.sessionId,r=t.getSessionId();n&&n!==r?(t.setSessionId(n),t.setSessionStartTime(g(Date.now())),this.logger.log("[session-manager] using provided sessionId:",n)):n?(t.setSessionId(n),this.logger.log("[session-manager] continuing provided sessionId:",n)):r||t.setSessionId(this.idGenerator.generateId());const i=Date.now(),s=f(t.getSessionStartTime());if(s>0&&i-s>=-6e4){if(t.isSessionExpired(i)||t.isSessionInactive(i)){const e=t.isSessionExpired(i)?"persisted session past cap":"inactivity gap across reload",n=t.getSessionId(),r=this.idGenerator.generateId();t.setSessionId(r),t.setSessionStartTime(g(i)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:r})}}else t.setSessionStartTime(g(i));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=C(Qe);if(t){const e="1"===t;return this.logger.log("[session-manager] using stored sampling decision:",e),e}const n=!e||Math.random()<e;return z(Qe,n?"1":"0"),this.logger.log("[session-manager] stored new sampling decision:",n),n}catch(t){this.logger.log("[session-manager] session storage access failed:",t);const n=!e||Math.random()<e;return this.logger.log("[session-manager] using fallback sampling decision:",n),n}}identifyUser(e){if(this.logger.log("[session-manager] identifyUser called"),!this.initialized)return void this.logger.log("[session-manager] cannot identify user: SDK not initialized");P.getInstance().updateConfig({user:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");P.getInstance().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.instrumentationManager.restartReplayForConfigChange()}sendCustomEvent(e){this.initialized?this.instrumentationManager.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.initialized?this.instrumentationManager.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.initialized?this.instrumentationManager.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.initialized?this.instrumentationManager.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.initialized?this.instrumentationManager.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?P.getInstance().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.initialized)try{this.instrumentationManager.flushPendingReplay();const t=me.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),r=P.getInstance();r.setSessionId(n),r.setSessionStartTime(g(Date.now())),this.logger.log("[session-manager] session ID set successfully:",n)}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.initialized?this.instrumentationManager.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.initialized?this.instrumentationManager.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}destroy(){this.initialized&&(this.instrumentationManager.uninstrument(),me.getInstance().destroy(),de.getInstance().terminate(),P.getInstance().clearSessionState(),this.initialized=!1)}},We=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 Ve={init:function(e){try{He=new Xe({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}),We.manager=He}catch(e){h(e)}},identifyUser:function(e){He?He.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){He&&He.sendCustomEvent(e)},captureException:function(e,t){He&&He.captureException(e,t)},logger:We,updateConfig:function(e){if(He)try{He.updateConfig(e)}catch(e){h(e)}},startNavigation:function(e){He?He.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){He?He.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return He?He.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(He)try{await He.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(){He?He.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){He?He.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=Ve}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var Je=Ve;module.exports=Je;
1
+ "use strict";var e=require("fflate"),t=require("error-stack-parser"),n=require("web-vitals"),r=require("rrweb"),i=require("@rrweb/packer");function s(e){return e&&e.__esModule?e:{default:e}}var a=s(t),o=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&&o(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="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},u=1e6;function g(e){return e*u}function f(e){return e/u}function p(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 m=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)v[e]=Math.floor(16*Math.random())+48,v[e]>=58&&(v[e]+=39);return b+String.fromCharCode.apply(null,v.slice(0,16))},this.generateSpanId=y(8),this.generateId=y(16)}},v=Array(32);function y(e){return function(){for(let t=0;t<2*e;t++)v[t]=Math.floor(16*Math.random())+48,v[t]>=58&&(v[t]+=39);return String.fromCharCode.apply(null,v.slice(0,2*e))}}var b="0000000000000000";var w=144e5,E=288e5,k=18e5,S={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:w};function I(e){try{console.warn(e)}catch{}}function T(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var R=["privacy","tracing","transport","replay"],L={tracing:"origin",privacy:"replay"};function M(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];T(i)&&T(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!T(s)&&(r[n]=i)}return r}function x(e,t){const n={...e,...t},r=t,i=e;for(const e of R){if(!Object.hasOwn(r,e))continue;const t=r[e];T(t)?n[e]=M(i[e],t,L[e]):n[e]=i[e]}return n}var N=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=x(S,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)&&I(`[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?w:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>E?(I("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),w):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=x(this.providedOptions||{},t.options),this.options=x(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)}};N.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var q=N;function C(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function A(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return h(e),null}}function z(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){h(e)}}function _(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){h(e)}}function H(e,t=0){const n=A(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}var P=class e{constructor(){this.config=null,this.logger=l.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.privacyCache=null,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){h(e)}},this.activityPersistHooked=!1}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(e){if(!this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!0;try{document.addEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){h(e)}}this.config||(this.config=new q(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=C(t?.maskSelectors),s=t?.replay,a="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,o="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;l="mask-all"===n||!r&&void 0!==a?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0;const c=e=>!r&&(e??!0),h=c(t?.maskNetworkBodies),d=c(t?.maskNetworkQueryParams),u=c(t?.maskLogs),g=c(t?.maskErrors);return{level:n,maskTextSelector:l,maskSelectors:i,maskInputs:!r,maskNetworkBodies:h,maskNetworkQueryParams:d,maskLogs:u,maskErrors:g,shouldMaskNetworkBodies:!r&&h,shouldMaskNetworkQueryParams:!r&&d,shouldMaskLogs:!r&&u,shouldMaskErrors:!r&&g,sensitiveKeys:C(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:a,maskInputFn:o}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return A("gcId")||""}setSessionId(e){this.sessionId=e,z("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:H("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,z("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:H("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,z("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=k}clearSessionState(){if(this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!1;try{document.removeEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){h(e)}}_("gcId"),_("gcStartTime"),_("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??w}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-f(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}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")}},O="[REDACTED]",D=["authorization","cookie","set-cookie"],F=/(token|key|secret|passwd|password|auth|bearer|credential)/i,j=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,B=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),K=1e5;function U(e,t){if(!e)return!1;if(j.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function Y(e,t){return B.has(e.toLowerCase())||U(e,t)}function $(e){return e.includes("-")&&F.test(e)}function Q(e,t){return U(e,t)||$(e)}function X(e,t){const n=e.sensitive?O:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return h(e),n}}function W(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 a=i;try{a=decodeURIComponent(i)}catch{}const o=Y(s,t.sensitiveKeys),l=X({key:s,value:a,path:[s],kind:t.kind??"query",sensitive:o},t.redact);return l===a?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function V(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${W(e.slice(n+1),t)}`}function J(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),a=V(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${O}@`))}(i),n);return-1===r?a:`${a}#${V(s,n)}`}function G(e,t,n,r,i,s){const a=!!e&&U(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(a||i>8)return O;if(p(t))return O;if(s.has(t))return O;s.add(t);try{if(Array.isArray(t))return t.map((t=>G(e,t,n,r,i+1,s)));const a={};for(const[e,o]of Object.entries(t))a[e]=G(e,o,[...n,e],r,i+1,s);return a}catch(e){return h(e),O}finally{s.delete(t)}}return X({key:e,value:t,path:n,kind:r.kind??"log",sensitive:a},r.redact)}function Z(e,t={}){if(!e)return e;if(e.length>K)return`${Z(e.slice(0,K),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>Q(n,t.sensitiveKeys)?`"${n}":"${O}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return Y(e,t)||$(e)}(n,t.sensitiveKeys)?`${n}=${O}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>Q(n,t.sensitiveKeys)?`${n}: ${O}`: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 ee(e,t={}){try{const n=G("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return h(e),{}}}function te(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:Z(t,r),attributes:n?ee(n,r):n}}var ne=P.getInstance(),re=new m,ie=l.getInstance();function se(){const e=ne?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function ae(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:p(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 a=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[a]=s.map(((e,t)=>"object"==typeof e&&null!==e?ae(e,`${a}[${t}]`,n,r+1):e)):Object.assign(e,ae(s,a,n,r+1)):e[a]=s,e}),{}))}catch(e){return ie.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}function oe(e){const t=g(Date.now()),n=re.generateId(),r=e.spanId||re.generateSpanId(),i=e.traceId||re.generateTraceId(),s=e.parentSpanId||"",a=ae(e.attributes||{}),o=function(){const e=d?.location;if(!e)return{path:"",url:"",title:d?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),n=t?e.hash:e.pathname,r=ne.getPrivacy(),i=r.shouldMaskNetworkQueryParams,s={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};return{path:i&&t?J(n,s):n,url:i?J(e.href,s):e.href,title:d?.document?.title||""}}(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...a,location:o}};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 le({text:e,maxLength:t=1e4,ellipsis:n=""}){return e?"string"!=typeof e||e.length<=t?e:e.substring(0,t)+n:""}function ce(e){return(e||"").replace(/\s+/g," ").trim()}var he=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 a=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:a});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(a),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()}};he.instance=null;var de=he,ue=class{constructor(){this.logger=l.getInstance(),this.config=P.getInstance()}compressInline(t,n){if(!n)return{data:(new TextEncoder).encode(t),isCompressed:!1};try{const n=e.strToU8(t);return{data:e.gzipSync(n),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(t),isCompressed:!1}}}compressAsync(e,t){return de.withFallback((n=>n.encodeBatch(e,t)),(()=>this.compressInline(e,t)),"transporter")}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),a=!!n?.options?.transport?.compression,{data:o,isCompressed:l}=t?this.compressInline(s,a):await this.compressAsync(s,a);fetch(i,{method:"POST",headers:{"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""},body:o}).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`:""}},ge=["navigation","dom.event"],fe=S.transport?.batchSize??10,pe=S.transport?.batchTimeout??1e4;var me=class e{constructor(){this.events=[],this.timeoutId=null,this.config=P.getInstance(),this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush({lifecycle:!0})},this.transporter=new ue}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(){try{if(this.initialized)return;this.scheduleFlush(),"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.visibilityHandler),this.initialized=!0}catch(e){h(e)}}destroy(){try{null!==this.timeoutId&&(d.clearTimeout(this.timeoutId),this.timeoutId=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.events=[],this.initialized=!1}catch(e){h(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;if(n&&!n(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){h(e)}r&&(e=r(e)),this.events.push(e);const i=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:fe);this.events.length>=i&&!ge.includes(e.type)&&this.flush()}catch(e){h(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;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.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&&(d.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:pe);this.timeoutId=d.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){h(e)}var e}detectBrowser(){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),{name:t,version:n,platform:r,language:navigator.language,mobile:i}}getSessionAttributes(){const e=this.detectBrowser(),t=this.config.getConfig();return{cluster:t?.cluster||"",env:t?.environment||"",namespace:t?.namespace||"",releaseId:t?.releaseId||"",session_id:this.config.getSessionId(),session_start_time:this.config.getSessionStartTime(),user:t?.user||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};me.instance=null;var ve=me,ye=class{constructor(){this.logger=l.getInstance(),this.eventsPool=ve.getInstance()}},be="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function we(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Ee(e){try{const t=be?.call(e);return"string"==typeof t?t:""}catch{return""}}function ke(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function Se(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>we(e,t))).filter(Boolean)}(e).some((e=>U(e,t))))}function Ie(e,t){return"allow"!==t.level&&(!!e&&(!!ke(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>ke(e,t))))||("mask-all"===t.level||function(e){const t=Ee(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&Se(e,t.sensitiveKeys)))))}var Te={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},Re=["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"]'].join(", "),Le=[Re,"li","option","tr","td","th",'[role="listitem"]','[role="row"]','[role="gridcell"]','[role="cell"]'].join(", ");function Me(e){return!!e&&1===e.nodeType}function xe(e){const t=Ee(e).toLowerCase();return"body"===t||"html"===t}function Ne(e){return le({text:e,maxLength:255})}function qe(e){return le({text:e,maxLength:100,ellipsis:"…"})}function Ce(e){const t=we(e,"role");return t?ce(t):function(e){switch(Ee(e).toLowerCase()){case"a":return we(e,"href")?"link":"";case"button":return"button";case"input":switch(we(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(!Me(e))return"";try{if(xe(e))return"";if(function(e){try{return e.querySelectorAll(Le).length>=2}catch{return!1}}(e))return"";const t=ce(e.textContent||"");return t?t.length>1e3?"":le({text:t,maxLength:255}):""}catch{return""}}function ze(e){return we(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5)}function _e(e){if(xe(e))return"";const t=function(e){const t=[];for(const n of ze(e))try{const e=document.getElementById(n);e?.textContent&&t.push(e.textContent)}catch{}return ce(t.join(" "))}(e);if(t)return qe(t);const n=ce(we(e,"aria-label"));if(n)return qe(n);const r=ce(we(e,"alt"));if(r)return qe(r);if(function(e){const t=Ee(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=we(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=ce(we(e,"value"));if(t)return qe(t)}const i=ce(we(e,"title"));if(i)return qe(i);const s=ce(we(e,"placeholder"));return qe(s||Ae(e))}var He=class extends ye{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=P.getInstance(),this.getShouldMaskText=e=>Ie(e.target,this.config.getPrivacy()),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}),d?.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(!se())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(!Me(e))return null;try{return e.closest(Re)}catch{return null}}(n)??n,i=r?this.generateSelector(r):"",s=this.config.getPrivacy(),a=this.getShouldMaskText({target:n||null})||!!r&&(function(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}}(r,s)||function(e,t){if("allow"===t.level)return!1;try{for(const n of ze(e)){const e=document.getElementById(n);if(e&&Ie(e,t))return!0}}catch{}return!1}(r,s)),o=this.getKeyCode(e,a),l=function(e){if(!Me(e))return{...Te};try{return{role:Ne(Ce(e)),accessibleName:_e(e),ariaLabel:Ne(ce(we(e,"aria-label"))),title:Ne(ce(we(e,"title"))),alt:Ne(ce(we(e,"alt"))),placeholder:Ne(ce(we(e,"placeholder"))),name:Ne(we(e,"name")),inputType:Ne(we(e,"type")),href:Ne(we(e,"href"))}}catch{return{...Te}}}(r),c=s.shouldMaskNetworkQueryParams?J(l.href,{sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"}):l.href,h=e=>a&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");return oe({type:"dom.event",attributes:{dom_event_selector:i,dom_event_key_code:o,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:we(r,"id"),tagName:Ee(r),className:we(r,"class"),text:a?"*":Ae(r),role:l.role,accessibleName:h(l.accessibleName),ariaLabel:h(l.ariaLabel),title:h(l.title),alt:h(l.alt),placeholder:h(l.placeholder),name:l.name,inputType:l.inputType,href:h(c)}}})}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"===Ee(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<r;){let e=Ee(o).toLowerCase();try{const t=o.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(o.classList?.length){const t=Array.from(o.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=o.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Ee(o).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return s||"*"}},Pe=["log","info","warn","error","debug","assert","trace"],Oe=class extends ye{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=P.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),Pe.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){h(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){h(e)}}destroy(){try{if(!this.isInitialized)return;Pe.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){h(e)}}handleEvent(e,t){try{if(!se())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}=te(this.config.getPrivacy(),e,n);return oe({type:"log",attributes:{...i,message:le({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{Pe.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(e instanceof FormData)return"[form data]";if(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("undefined"!=typeof Document){if(e instanceof Document)return"[document data]";const t=e;if(9===t?.nodeType)return"[document data]"}if(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 Fe,je="[request body too large]",Be="[request body unavailable]",Ke="[response body too large]",Ue="[response body unavailable]",Ye="[unreadable response body]",$e="[form data]",Qe="[binary data]",Xe=class extends ye{constructor(){super(...arguments),this.maxBodyLength=5e3,this.requestBodyReadTimeoutMs=3e3,this.responseBodyReadTimeoutMs=3e3,this.config=P.getInstance(),this.idGenerator=new m,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!se())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=J(t,i))}r.shouldMaskNetworkQueryParams&&(n=J(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),a=this.formatHeaders(e.response.headers),o=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<=K&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(G("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?W(e,t):Z(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=le({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=le({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),f={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:a,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)?g(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?g(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:f};return l&&(p.traceId=l),c&&(p.spanId=c),oe(p)}}async readBodyStreamCapped(e,t={}){if(!e)return"";const{timeoutMs:n,overflowPlaceholder:r,timeoutPlaceholder:i}=t,s=e.getReader(),a=new TextDecoder;let o,l="",c=0,h=!1,d=!1;const u=null!=n?new Promise((e=>{o=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+=a.decode(e,{stream:!0}),h=!0;break}c+=n.byteLength,l+=a.decode(n,{stream:!0})}return l+=a.decode(),d&&null!=i?i:h&&null!=r?r:l}finally{clearTimeout(o);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]":Qe}classifyByContentType(e){const t=(e||"").toLowerCase();return t.includes("multipart/form-data")?$e: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:je,timeoutPlaceholder:Be})}catch{return Be}}async getResponseBody(e){if(!e.body)return"";const t=e.headers?.get?.("content-type")??"";if("text/event-stream"===this.mimeEssence(t))return Ye;const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.responseBodyReadTimeoutMs,overflowPlaceholder:Ke,timeoutPlaceholder:Ue})}initialize(){this.logger.log("[network-events-listener.initialize] called"),this.patchXHR(),this.patchFetch()}destroy(){globalThis.XMLHttpRequest.prototype.open=globalThis.XMLHttpRequest.prototype.open,globalThis.XMLHttpRequest.prototype.send=globalThis.XMLHttpRequest.prototype.send,globalThis.fetch=globalThis.fetch}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,a,o){if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,a,o]);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,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),r.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...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),je),s=""===this.responseType||"text"===this.responseType,a=s?this.responseText:this.response,o=(s?e.classifyByContentType(n["content-type"]||""):null)??e.capBodyText(De(a),Ke),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:o}};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)=>{const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,a=i?.method||(s?r.method:"GET"),o=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(o))return e.apply(globalThis,t);const l=this.shouldAddTraceHeader(o);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),je):"",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:a,url:o,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=Ye,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:a,url:o,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=X({key:n,value:r,path:[n],kind:"header",sensitive:D.includes(i)||F.test(i)||U(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]=le({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 ye{constructor(){super(...arguments),this.config=P.getInstance(),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(){d?.addEventListener("error",this.handleEvent),d?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){d?.removeEventListener("error",this.handleEvent),d?.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",a=r?Z(s,i):s,o=r&&t?.metadata?ee(t.metadata,i):t?.metadata;return oe({type:"exception",attributes:{error_type:e.name||"Error",error_message:a,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${le({text:a,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:o}})}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 a.default.parse(e).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Ve=class extends ye{constructor({isEnabled:e}){if(super(),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&e)try{this.isAutomaticNavigationEnabled=e,this.currentUrl=d.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){h(e)}}isInBrowserEnvironment(){try{return void 0!==d&&void 0!==d.location&&void 0!==d.history&&"function"==typeof d.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;history.pushState=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},history.replaceState=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n},d&&"function"==typeof d.addEventListener&&(d.addEventListener("popstate",this.popStateHandler),d.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.originalPushState,history.replaceState=this.originalReplaceState),d&&"function"==typeof d.removeEventListener&&(d.removeEventListener("popstate",this.popStateHandler),d.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",d.location.href);const e=P.getInstance().getPrivacy(),t="allow"===e.level,n=d.location.href,r=this.activeNavigation?.metadata;return oe({type:"navigation",attributes:{page_url:e.shouldMaskNetworkQueryParams?J(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?ee(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}})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}startNavigation(e){this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:d.location.href,metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}endNavigation(e){this.logger.log("[navigation-listener.endNavigation] called",e),this.activeNavigation?(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()):this.logger.log("[navigation-listener.endNavigation] no active navigation found")}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===d.location.href)return;let e,t;try{e=new URL(d.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=d.location.href,this.handleEvent())}catch(e){h(e)}}},Je=class extends ye{constructor(){super(),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",d),"complete"===d?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):d?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),h(e)}}destroy(){d?.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=P.getInstance().getPrivacy(),s=i.shouldMaskNetworkQueryParams,a={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},o=d?.location?.href||"",l=d?.document?.referrer||"";return oe({type:"pageload",attributes:{page_url:s?J(o,a):o,page_load_time:t,page_referrer:s?J(l,a):l,page_resources:r}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},Ge=class extends ye{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!se())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}}initialize(){n.onCLS(this.handleEvent),n.onLCP(this.handleEvent),n.onFCP(this.handleEvent),n.onTTFB(this.handleEvent),n.onINP(this.handleEvent)}destroy(){}buildEvent(e){return oe({type:"performance",attributes:{performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""}})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},Ze=class{constructor(){this.logger=l.getInstance(),this.eventsPool=ve.getInstance(),this.configManager=P.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}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?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0,n=this.configManager.getPrivacy(),i=n.maskInputFn??("allow"===n.level?void 0:(e,t)=>Ie(t,n)?"*".repeat(e.length):e);this.stopFn=r.record({...t?{blockSelector:t}:{},...n.maskTextSelector?{maskTextSelector:n.maskTextSelector}:{},maskAllInputs:n.maskInputs,...n.maskTextFn?{maskTextFn:n.maskTextFn}:{},...i?{maskInputFn:i}:{},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=d.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&&(d.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.configManager.getSessionId(),n=de.getInstance();let r;if(n.isAvailable)try{r=await n.packReplay(e.events)}catch(t){h(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),r=e.events.map((e=>i.pack(e)))}else r=e.events.map((e=>i.pack(e)));this.configManager.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=>i.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=oe({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()}},et=["pointerdown","keydown","scroll","touchstart","mousemove"],tt=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,et.forEach((e=>{try{d.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",k,"ms");try{this.callbacks.onIdle()}catch(e){h(e)}}),k)}catch(e){h(e)}}destroy(){if(this.installed){this.installed=!1,et.forEach((e=>{try{d.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){h(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){h(e)}finally{this.idleTimer=null}}}},nt=new Set(["dom.event","navigation","pageload"]),rt=class{constructor(){this.logger=l.getInstance(),this.eventsPool=ve.getInstance(),this.configManager=P.getInstance(),this.idGenerator=new m,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.isRotating=!1,this.replayDesired=!1,this.presenceMonitor=null}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.eventsPool.setBeforeEnqueueHook((e=>this.reconcileSessionOnEnqueue(e))),this.presenceMonitor?.destroy(),this.presenceMonitor=new tt({onPresence:e=>this.reconcileSession(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 Je,this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new He,this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new Oe,this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new We,this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new Xe,this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new Ge,this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Ve({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.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=oe({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){h(e)}}emitLog(e,t,n){if(this.logEventsListener){this.logger.log("[instrumentation-manager.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}=te(P.getInstance().getPrivacy(),e,r),a=oe({type:"log",attributes:{...s,message:le({text:i}),level:t}});this.eventsPool.addEvent(a)}catch(e){h(e)}}}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(){if(this.replayDesired=!0,this.isReplayRecording())return void this.logger.log("[instrumentation-manager] replay recording already started");const e=Date.now();(this.configManager.isSessionInactive(e)||this.configManager.isSessionExpired(e))&&this.rotateSession({reason:"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 Ze;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)}}reconcileSession(e,t){if(this.isRotating)return;t&&this.configManager.isSessionInactive(e)&&this.rotateSession({reason:"inactivity gap"});const n=this.configManager.getSessionElapsedMs(e),r=this.configManager.getSessionMaxDuration(),i=n>=r;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:r,expired:i}),i&&this.rotateSession({reason:"max session duration"}),this.syncReplayState(t),t&&(this.configManager.setLastActivityMs(e),this.presenceMonitor?.notePresence(e))}reconcileSessionOnEnqueue(e){this.isRotating||("replay"!==e.type?this.reconcileSession(Date.now(),nt.has(e.type)):this.logger.log("[instrumentation-manager] enqueue rotation check: ignoring replay event"))}rotateSession(e){if(this.isRotating)return;this.isRotating=!0;const t=this.configManager.getSessionId(),n=this.isReplayRecording();this.logger.log("[instrumentation-manager] session rotation start",{reason:e.reason,previousId:t,wasReplayActive:n});const r=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){h(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{r("stop replay",(()=>this.stopReplayListener())),r("flush events",(()=>this.eventsPool.flush())),r("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(g(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),r("sync replay",(()=>this.syncReplayState(n)))}finally{this.isRotating=!1,this.logger.log("[instrumentation-manager] session rotation complete",{reason:e.reason})}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.eventsPool.setBeforeEnqueueHook(null),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}},it="gcSample",st=class{constructor(e){this.initialized=!1,this.logger=l.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.instrumentationManager=new rt,this.idGenerator=new m;if(!this.getSamplingDecision(e.options?.sessionSampleRate))return void this.logger.log("[session-manager] session is not sampled");if(this.initialized)return void this.logger.log("[session-manager] SDK already initialized");const t=P.getInstance();t.initialize(e);ve.getInstance().initialize(),de.getInstance();const n=e.sessionId,r=t.getSessionId();n&&n!==r?(t.setSessionId(n),t.setSessionStartTime(g(Date.now())),this.logger.log("[session-manager] using provided sessionId:",n)):n?(t.setSessionId(n),this.logger.log("[session-manager] continuing provided sessionId:",n)):r||t.setSessionId(this.idGenerator.generateId());const i=Date.now(),s=f(t.getSessionStartTime());if(s>0&&i-s>=-6e4){if(t.isSessionExpired(i)||t.isSessionInactive(i)){const e=t.isSessionExpired(i)?"persisted session past cap":"inactivity gap across reload",n=t.getSessionId(),r=this.idGenerator.generateId();t.setSessionId(r),t.setSessionStartTime(g(i)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:r})}}else t.setSessionStartTime(g(i));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=A(it);if(t){const e="1"===t;return this.logger.log("[session-manager] using stored sampling decision:",e),e}const n=!e||Math.random()<e;return z(it,n?"1":"0"),this.logger.log("[session-manager] stored new sampling decision:",n),n}catch(t){this.logger.log("[session-manager] session storage access failed:",t);const n=!e||Math.random()<e;return this.logger.log("[session-manager] using fallback sampling decision:",n),n}}identifyUser(e){if(this.logger.log("[session-manager] identifyUser called"),!this.initialized)return void this.logger.log("[session-manager] cannot identify user: SDK not initialized");P.getInstance().updateConfig({user:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");P.getInstance().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.instrumentationManager.restartReplayForConfigChange()}sendCustomEvent(e){this.initialized?this.instrumentationManager.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.initialized?this.instrumentationManager.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.initialized?this.instrumentationManager.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.initialized?this.instrumentationManager.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.initialized?this.instrumentationManager.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?P.getInstance().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.initialized)try{this.instrumentationManager.flushPendingReplay();const t=ve.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),r=P.getInstance();r.setSessionId(n),r.setSessionStartTime(g(Date.now())),this.logger.log("[session-manager] session ID set successfully:",n)}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.initialized?this.instrumentationManager.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.initialized?this.instrumentationManager.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}destroy(){this.initialized&&(this.instrumentationManager.uninstrument(),ve.getInstance().destroy(),de.getInstance().terminate(),P.getInstance().clearSessionState(),this.initialized=!1)}},at=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 ot={init:function(e){try{Fe=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}),at.manager=Fe}catch(e){h(e)}},identifyUser:function(e){Fe?Fe.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){Fe&&Fe.sendCustomEvent(e)},captureException:function(e,t){Fe&&Fe.captureException(e,t)},logger:at,updateConfig:function(e){if(Fe)try{Fe.updateConfig(e)}catch(e){h(e)}},startNavigation:function(e){Fe?Fe.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){Fe?Fe.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return Fe?Fe.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(Fe)try{await Fe.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(){Fe?Fe.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){Fe?Fe.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=ot}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var lt=ot;module.exports=lt;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{strToU8 as e,gzipSync as t}from"fflate";import n from"error-stack-parser";import{onCLS as r,onLCP as i,onFCP as s,onTTFB as a,onINP as o}from"web-vitals";import{record as l}from"rrweb";import{pack as c}from"@rrweb/packer";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 f="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},p=1e6;function m(e){return e*p}function v(e){return e/p}function y(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 b=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)w[e]=Math.floor(16*Math.random())+48,w[e]>=58&&(w[e]+=39);return k+String.fromCharCode.apply(null,w.slice(0,16))},this.generateSpanId=E(8),this.generateId=E(16)}},w=Array(32);function E(e){return function(){for(let t=0;t<2*e;t++)w[t]=Math.floor(16*Math.random())+48,w[t]>=58&&(w[t]+=39);return String.fromCharCode.apply(null,w.slice(0,2*e))}}var k="0000000000000000";var S=144e5,I=288e5,T=18e5,R={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:S};function L(e){try{console.warn(e)}catch{}}function M(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var N=["privacy","tracing","transport","replay"],x={tracing:"origin",privacy:"replay"};function A(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];M(i)&&M(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!M(s)&&(r[n]=i)}return r}function q(e,t){const n={...e,...t},r=t,i=e;for(const e of N){if(!Object.hasOwn(r,e))continue;const t=r[e];M(t)?n[e]=A(i[e],t,x[e]):n[e]=i[e]}return n}var C=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=q(R,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)&&L(`[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?S:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>I?(L("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),S):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=q(this.providedOptions||{},t.options),this.options=q(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)}};C.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var z=C;function _(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function H(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return g(e),null}}function P(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){g(e)}}function D(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){g(e)}}function O(e,t=0){const n=H(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}var F=class e{constructor(){this.config=null,this.logger=d.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.privacyCache=null,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){g(e)}},this.activityPersistHooked=!1}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(e){if(!this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!0;try{document.addEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){g(e)}}this.config||(this.config=new z(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=_(t?.maskSelectors),s=t?.replay,a="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,o="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;l="mask-all"===n||!r&&void 0!==a?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0;const c=e=>!r&&(e??!0),h=c(t?.maskNetworkBodies),d=c(t?.maskNetworkQueryParams),u=c(t?.maskLogs),g=c(t?.maskErrors);return{level:n,maskTextSelector:l,maskSelectors:i,maskInputs:!r,maskNetworkBodies:h,maskNetworkQueryParams:d,maskLogs:u,maskErrors:g,shouldMaskNetworkBodies:!r&&h,shouldMaskNetworkQueryParams:!r&&d,shouldMaskLogs:!r&&u,shouldMaskErrors:!r&&g,sensitiveKeys:_(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:a,maskInputFn:o}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return H("gcId")||""}setSessionId(e){this.sessionId=e,P("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:O("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,P("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:O("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,P("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=T}clearSessionState(){if(this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!1;try{document.removeEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){g(e)}}D("gcId"),D("gcStartTime"),D("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??S}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-v(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}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")}},j="[REDACTED]",K=["authorization","cookie","set-cookie"],U=/(token|key|secret|passwd|password|auth|bearer|credential)/i,B=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,Y=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),$=1e5;function Q(e,t){if(!e)return!1;if(B.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 Y.has(e.toLowerCase())||Q(e,t)}function W(e){return e.includes("-")&&U.test(e)}function V(e,t){return Q(e,t)||W(e)}function J(e,t){const n=e.sensitive?j:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return g(e),n}}function G(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 a=i;try{a=decodeURIComponent(i)}catch{}const o=X(s,t.sensitiveKeys),l=J({key:s,value:a,path:[s],kind:t.kind??"query",sensitive:o},t.redact);return l===a?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function Z(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${G(e.slice(n+1),t)}`}function ee(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),a=Z(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${j}@`))}(i),n);return-1===r?a:`${a}#${Z(s,n)}`}function te(e,t,n,r,i,s){const a=!!e&&Q(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(a||i>8)return j;if(y(t))return j;if(s.has(t))return j;s.add(t);try{if(Array.isArray(t))return t.map((t=>te(e,t,n,r,i+1,s)));const a={};for(const[e,o]of Object.entries(t))a[e]=te(e,o,[...n,e],r,i+1,s);return a}catch(e){return g(e),j}finally{s.delete(t)}}return J({key:e,value:t,path:n,kind:r.kind??"log",sensitive:a},r.redact)}function ne(e,t={}){if(!e)return e;if(e.length>$)return`${ne(e.slice(0,$),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>V(n,t.sensitiveKeys)?`"${n}":"${j}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return X(e,t)||W(e)}(n,t.sensitiveKeys)?`${n}=${j}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>V(n,t.sensitiveKeys)?`${n}: ${j}`: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 re(e,t={}){try{const n=te("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return g(e),{}}}function ie(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:ne(t,r),attributes:n?re(n,r):n}}var se=F.getInstance(),ae=new b,oe=d.getInstance();function le(){const e=se?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function ce(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:y(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 a=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[a]=s.map(((e,t)=>"object"==typeof e&&null!==e?ce(e,`${a}[${t}]`,n,r+1):e)):Object.assign(e,ce(s,a,n,r+1)):e[a]=s,e}),{}))}catch(e){return oe.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}function he(e){const t=m(Date.now()),n=ae.generateId(),r=e.spanId||ae.generateSpanId(),i=e.traceId||ae.generateTraceId(),s=e.parentSpanId||"",a=ce(e.attributes||{}),o=function(){const e=f?.location;if(!e)return{path:"",url:"",title:f?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),n=t?e.hash:e.pathname,r=se.getPrivacy(),i=r.shouldMaskNetworkQueryParams,s={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};return{path:i&&t?ee(n,s):n,url:i?ee(e.href,s):e.href,title:f?.document?.title||""}}(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...a,location:o}};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 de({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}function ue(e){return(e||"").replace(/\s+/g," ").trim()}var ge=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 a=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:a});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(a),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()}};ge.instance=null;var fe=ge,pe=class{constructor(){this.logger=d.getInstance(),this.config=F.getInstance()}compressInline(n,r){if(!r)return{data:(new TextEncoder).encode(n),isCompressed:!1};try{const r=e(n);return{data:t(r),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(n),isCompressed:!1}}}compressAsync(e,t){return fe.withFallback((n=>n.encodeBatch(e,t)),(()=>this.compressInline(e,t)),"transporter")}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),a=!!n?.options?.transport?.compression,{data:o,isCompressed:l}=t?this.compressInline(s,a):await this.compressAsync(s,a);fetch(i,{method:"POST",headers:{"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""},body:o}).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`:""}},me=["navigation","dom.event"],ve=R.transport?.batchSize??10,ye=R.transport?.batchTimeout??1e4;var be=class e{constructor(){this.events=[],this.timeoutId=null,this.config=F.getInstance(),this.logger=d.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush({lifecycle:!0})},this.transporter=new pe}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(){try{if(this.initialized)return;this.scheduleFlush(),"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.visibilityHandler),this.initialized=!0}catch(e){g(e)}}destroy(){try{null!==this.timeoutId&&(f.clearTimeout(this.timeoutId),this.timeoutId=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.events=[],this.initialized=!1}catch(e){g(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;if(n&&!n(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){g(e)}r&&(e=r(e)),this.events.push(e);const i=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:ve);this.events.length>=i&&!me.includes(e.type)&&this.flush()}catch(e){g(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;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.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&&(f.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:ye);this.timeoutId=f.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){g(e)}var e}detectBrowser(){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),{name:t,version:n,platform:r,language:navigator.language,mobile:i}}getSessionAttributes(){const e=this.detectBrowser(),t=this.config.getConfig();return{cluster:t?.cluster||"",env:t?.environment||"",namespace:t?.namespace||"",releaseId:t?.releaseId||"",session_id:this.config.getSessionId(),session_start_time:this.config.getSessionStartTime(),user:t?.user||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};be.instance=null;var we=be,Ee=class{constructor(){this.logger=d.getInstance(),this.eventsPool=we.getInstance()}},ke="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function Se(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Ie(e){try{const t=ke?.call(e);return"string"==typeof t?t:""}catch{return""}}function Te(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function Re(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>Se(e,t))).filter(Boolean)}(e).some((e=>Q(e,t))))}function Le(e,t){return"allow"!==t.level&&(!!e&&(!!Te(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>Te(e,t))))||("mask-all"===t.level||function(e){const t=Ie(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&Re(e,t.sensitiveKeys)))))}var Me={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},Ne=["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"]'].join(", ");function xe(e){return!!e&&1===e.nodeType}function Ae(e){return de({text:e,maxLength:255})}function qe(e){const t=Se(e,"role");return t?ue(t):function(e){switch(Ie(e).toLowerCase()){case"a":return Se(e,"href")?"link":"";case"button":return"button";case"input":switch(Se(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 Ce(e){if(!xe(e))return"";try{const t=ue(e.textContent||"");return t?t.length>1e3?"":de({text:t,maxLength:255}):""}catch{return""}}function ze(e){const t=function(e){const t=Se(e,"aria-labelledby").split(/\s+/).filter(Boolean);if(!t.length)return"";const n=[];for(const e of t.slice(0,5))try{const t=document.getElementById(e);t?.textContent&&n.push(t.textContent)}catch{}return ue(n.join(" "))}(e);if(t)return Ae(t);const n=ue(Se(e,"aria-label"));if(n)return Ae(n);const r=ue(Se(e,"alt"));if(r)return Ae(r);if(function(e){const t=Ie(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=Se(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=ue(Se(e,"value"));if(t)return Ae(t)}const i=ue(Se(e,"title"));if(i)return Ae(i);const s=ue(Se(e,"placeholder"));return s?Ae(s):Ce(e)}var _e=class extends Ee{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=F.getInstance(),this.getShouldMaskText=e=>Le(e.target,this.config.getPrivacy()),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}),f?.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(!le())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(!xe(e))return null;try{return e.closest(Ne)}catch{return null}}(n)??n,i=r?this.generateSelector(r):"",s=this.config.getPrivacy(),a=this.getShouldMaskText({target:n||null})||!!r&&(function(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}}(r,s)||function(e,t){if("allow"===t.level)return!1;try{const n=Se(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5);for(const e of n){const n=document.getElementById(e);if(n&&Le(n,t))return!0}}catch{}return!1}(r,s)),o=this.getKeyCode(e,a),l=function(e){if(!xe(e))return{...Me};try{return{role:Ae(qe(e)),accessibleName:ze(e),ariaLabel:Ae(ue(Se(e,"aria-label"))),title:Ae(ue(Se(e,"title"))),alt:Ae(ue(Se(e,"alt"))),placeholder:Ae(ue(Se(e,"placeholder"))),name:Ae(Se(e,"name")),inputType:Ae(Se(e,"type")),href:Ae(Se(e,"href"))}}catch{return{...Me}}}(r),c=s.shouldMaskNetworkQueryParams?ee(l.href,{sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"}):l.href,h=e=>a&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");return he({type:"dom.event",attributes:{dom_event_selector:i,dom_event_key_code:o,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:Se(r,"id"),tagName:Ie(r),className:Se(r,"class"),text:a?"*":Ce(r),role:l.role,accessibleName:h(l.accessibleName),ariaLabel:h(l.ariaLabel),title:h(l.title),alt:h(l.alt),placeholder:h(l.placeholder),name:l.name,inputType:l.inputType,href:h(c)}}})}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"===Ie(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<r;){let e=Ie(o).toLowerCase();try{const t=o.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(o.classList?.length){const t=Array.from(o.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=o.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Ie(o).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return s||"*"}},He=["log","info","warn","error","debug","assert","trace"],Pe=class extends Ee{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=F.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),He.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){g(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){g(e)}}destroy(){try{if(!this.isInitialized)return;He.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){g(e)}}handleEvent(e,t){try{if(!le())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}=ie(this.config.getPrivacy(),e,n);return he({type:"log",attributes:{...i,message:de({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{He.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){g(e)}return e}};function De(e){try{if(null==e)return"";if("string"==typeof e)return e;if(e instanceof FormData)return"[form data]";if(e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if("undefined"!=typeof Document){if(e instanceof Document)return"[document data]";const t=e;if(9===t?.nodeType)return"[document data]"}if(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 Oe,Fe=class extends Ee{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=F.getInstance(),this.idGenerator=new b,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!le())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=ee(t,i))}r.shouldMaskNetworkQueryParams&&(n=ee(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),a=this.formatHeaders(e.response.headers),o=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.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(te("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?G(e,t):ne(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=de({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=de({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),g={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:a,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:u}}},f={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?m(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?m(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:g};return l&&(f.traceId=l),c&&(f.spanId=c),he(f)}}async getResponseBody(e){const t=e.body;if(!t)return"";const n=t.getReader(),r=new TextDecoder;let i="",s=0;for(;;){const{done:e,value:t}=await n.read();if(e)break;if(s+t.byteLength>=this.maxBodyLength){const e=t.subarray(0,this.maxBodyLength-s);i+=r.decode(e,{stream:!0}),n.cancel().catch((()=>{}));break}s+=t.byteLength,i+=r.decode(t,{stream:!0})}return i+=r.decode(),i}initialize(){this.logger.log("[network-events-listener.initialize] called"),this.patchXHR(),this.patchFetch()}destroy(){globalThis.XMLHttpRequest.prototype.open=globalThis.XMLHttpRequest.prototype.open,globalThis.XMLHttpRequest.prototype.send=globalThis.XMLHttpRequest.prototype.send,globalThis.fetch=globalThis.fetch}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,a,o){if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,a,o]);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,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),r.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...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=De(this._requestBody),s=De(""===this.responseType||"text"===this.responseType?this.responseText:this.response),a={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:s}};e.handleEvent(a)})),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)=>{const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,a=i?.method||(s?r.method:"GET"),o=i?.body||"",l=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(l))return e.apply(globalThis,t);const c=this.shouldAddTraceHeader(l);i||(t[1]={},i=t[1]),i.headers=this.normalizeHeaders(s?r.headers:void 0,i.headers),c&&this.addTraceHeaders(i);const h=this.extractHeadersRecord(i.headers),d=De(o);return e.apply(globalThis,t).then((e=>{const t=Date.now(),r={};e.headers.forEach(((e,t)=>{r[t]=e}));const i={method:a,url:l,timestamp:n,body:d,status:e.status,end_time:t,request:{headers:h,body:d},response:{headers:r,body:""}};try{r["content-type"]?.includes("text/event-stream")?(i.response.body="[unreadable response body]",this.handleEvent(i)):this.getResponseBody(e.clone()).then((e=>{i.response.body=e,this.handleEvent(i)})).catch((e=>{i.response.body="[unreadable response body]",this.handleEvent(i),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}))}catch(e){i.response.body="[unreadable response body]",this.handleEvent(i),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}return e})).catch((e=>{const t=Date.now();let n="NetworkError";const r=e.message||"Unknown network error";e instanceof TypeError&&r.includes("Failed to fetch")?n="ERR_NETWORK_FAILURE":r.includes("Name not resolved")?n="ERR_NAME_NOT_RESOLVED":r.includes("Connection refused")&&(n="ERR_CONNECTION_REFUSED");const i={method:a,url:l,body:d,status:0,end_time:t,request:{headers:h,body:d},response:{headers:{},body:""},error:{type:n}};throw this.handleEvent(i),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=J({key:n,value:r,path:[n],kind:"header",sensitive:K.includes(i)||U.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]=de({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}},je=class extends Ee{constructor(){super(...arguments),this.config=F.getInstance(),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(){f?.addEventListener("error",this.handleEvent),f?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){f?.removeEventListener("error",this.handleEvent),f?.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",a=r?ne(s,i):s,o=r&&t?.metadata?re(t.metadata,i):t?.metadata;return he({type:"exception",attributes:{error_type:e.name||"Error",error_message:a,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${de({text:a,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:o}})}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(e){if(!e)return[];try{return n.parse(e).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Ke=class extends Ee{constructor({isEnabled:e}){if(super(),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&e)try{this.isAutomaticNavigationEnabled=e,this.currentUrl=f.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){g(e)}}isInBrowserEnvironment(){try{return void 0!==f&&void 0!==f.location&&void 0!==f.history&&"function"==typeof f.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;history.pushState=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},history.replaceState=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n},f&&"function"==typeof f.addEventListener&&(f.addEventListener("popstate",this.popStateHandler),f.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.originalPushState,history.replaceState=this.originalReplaceState),f&&"function"==typeof f.removeEventListener&&(f.removeEventListener("popstate",this.popStateHandler),f.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",f.location.href);const e=F.getInstance().getPrivacy(),t="allow"===e.level,n=f.location.href,r=this.activeNavigation?.metadata;return he({type:"navigation",attributes:{page_url:e.shouldMaskNetworkQueryParams?ee(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?re(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}})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}startNavigation(e){this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:f.location.href,metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}endNavigation(e){this.logger.log("[navigation-listener.endNavigation] called",e),this.activeNavigation?(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()):this.logger.log("[navigation-listener.endNavigation] no active navigation found")}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===f.location.href)return;let e,t;try{e=new URL(f.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=f.location.href,this.handleEvent())}catch(e){g(e)}}},Ue=class extends Ee{constructor(){super(),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",f),"complete"===f?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):f?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),g(e)}}destroy(){f?.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=F.getInstance().getPrivacy(),s=i.shouldMaskNetworkQueryParams,a={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},o=f?.location?.href||"",l=f?.document?.referrer||"";return he({type:"pageload",attributes:{page_url:s?ee(o,a):o,page_load_time:t,page_referrer:s?ee(l,a):l,page_resources:r}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},Be=class extends Ee{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!le())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}}}initialize(){r(this.handleEvent),i(this.handleEvent),s(this.handleEvent),a(this.handleEvent),o(this.handleEvent)}destroy(){}buildEvent(e){return he({type:"performance",attributes:{performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""}})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},Ye=class{constructor(){this.logger=d.getInstance(),this.eventsPool=we.getInstance(),this.configManager=F.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}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?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0,n=this.configManager.getPrivacy(),r=n.maskInputFn??("allow"===n.level?void 0:(e,t)=>Le(t,n)?"*".repeat(e.length):e);this.stopFn=l({...t?{blockSelector:t}:{},...n.maskTextSelector?{maskTextSelector:n.maskTextSelector}:{},maskAllInputs:n.maskInputs,...n.maskTextFn?{maskTextFn:n.maskTextFn}:{},...r?{maskInputFn:r}:{},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=f.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&&(f.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.configManager.getSessionId(),n=fe.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=>c(e)))}else r=e.events.map((e=>c(e)));this.configManager.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=>c(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=he({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()}},$e=["pointerdown","keydown","scroll","touchstart","mousemove"],Qe=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,$e.forEach((e=>{try{f.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",T,"ms");try{this.callbacks.onIdle()}catch(e){g(e)}}),T)}catch(e){g(e)}}destroy(){if(this.installed){this.installed=!1,$e.forEach((e=>{try{f.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){g(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){g(e)}finally{this.idleTimer=null}}}},Xe=new Set(["dom.event","navigation","pageload"]),We=class{constructor(){this.logger=d.getInstance(),this.eventsPool=we.getInstance(),this.configManager=F.getInstance(),this.idGenerator=new b,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.isRotating=!1,this.replayDesired=!1,this.presenceMonitor=null}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.eventsPool.setBeforeEnqueueHook((e=>this.reconcileSessionOnEnqueue(e))),this.presenceMonitor?.destroy(),this.presenceMonitor=new Qe({onPresence:e=>this.reconcileSession(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 Ue,this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new _e,this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new Pe,this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new je,this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new Fe,this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new Be,this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Ke({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.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=he({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){g(e)}}emitLog(e,t,n){if(this.logEventsListener){this.logger.log("[instrumentation-manager.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}=ie(F.getInstance().getPrivacy(),e,r),a=he({type:"log",attributes:{...s,message:de({text:i}),level:t}});this.eventsPool.addEvent(a)}catch(e){g(e)}}}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(){if(this.replayDesired=!0,this.isReplayRecording())return void this.logger.log("[instrumentation-manager] replay recording already started");const e=Date.now();(this.configManager.isSessionInactive(e)||this.configManager.isSessionExpired(e))&&this.rotateSession({reason:"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 Ye;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)}}reconcileSession(e,t){if(this.isRotating)return;t&&this.configManager.isSessionInactive(e)&&this.rotateSession({reason:"inactivity gap"});const n=this.configManager.getSessionElapsedMs(e),r=this.configManager.getSessionMaxDuration(),i=n>=r;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:r,expired:i}),i&&this.rotateSession({reason:"max session duration"}),this.syncReplayState(t),t&&(this.configManager.setLastActivityMs(e),this.presenceMonitor?.notePresence(e))}reconcileSessionOnEnqueue(e){this.isRotating||("replay"!==e.type?this.reconcileSession(Date.now(),Xe.has(e.type)):this.logger.log("[instrumentation-manager] enqueue rotation check: ignoring replay event"))}rotateSession(e){if(this.isRotating)return;this.isRotating=!0;const t=this.configManager.getSessionId(),n=this.isReplayRecording();this.logger.log("[instrumentation-manager] session rotation start",{reason:e.reason,previousId:t,wasReplayActive:n});const r=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){g(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{r("stop replay",(()=>this.stopReplayListener())),r("flush events",(()=>this.eventsPool.flush())),r("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(m(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),r("sync replay",(()=>this.syncReplayState(n)))}finally{this.isRotating=!1,this.logger.log("[instrumentation-manager] session rotation complete",{reason:e.reason})}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.eventsPool.setBeforeEnqueueHook(null),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}},Ve="gcSample",Je=class{constructor(e){this.initialized=!1,this.logger=d.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.instrumentationManager=new We,this.idGenerator=new b;if(!this.getSamplingDecision(e.options?.sessionSampleRate))return void this.logger.log("[session-manager] session is not sampled");if(this.initialized)return void this.logger.log("[session-manager] SDK already initialized");const t=F.getInstance();t.initialize(e);we.getInstance().initialize(),fe.getInstance();const n=e.sessionId,r=t.getSessionId();n&&n!==r?(t.setSessionId(n),t.setSessionStartTime(m(Date.now())),this.logger.log("[session-manager] using provided sessionId:",n)):n?(t.setSessionId(n),this.logger.log("[session-manager] continuing provided sessionId:",n)):r||t.setSessionId(this.idGenerator.generateId());const i=Date.now(),s=v(t.getSessionStartTime());if(s>0&&i-s>=-6e4){if(t.isSessionExpired(i)||t.isSessionInactive(i)){const e=t.isSessionExpired(i)?"persisted session past cap":"inactivity gap across reload",n=t.getSessionId(),r=this.idGenerator.generateId();t.setSessionId(r),t.setSessionStartTime(m(i)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:r})}}else t.setSessionStartTime(m(i));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=H(Ve);if(t){const e="1"===t;return this.logger.log("[session-manager] using stored sampling decision:",e),e}const n=!e||Math.random()<e;return P(Ve,n?"1":"0"),this.logger.log("[session-manager] stored new sampling decision:",n),n}catch(t){this.logger.log("[session-manager] session storage access failed:",t);const n=!e||Math.random()<e;return this.logger.log("[session-manager] using fallback sampling decision:",n),n}}identifyUser(e){if(this.logger.log("[session-manager] identifyUser called"),!this.initialized)return void this.logger.log("[session-manager] cannot identify user: SDK not initialized");F.getInstance().updateConfig({user:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");F.getInstance().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.instrumentationManager.restartReplayForConfigChange()}sendCustomEvent(e){this.initialized?this.instrumentationManager.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.initialized?this.instrumentationManager.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.initialized?this.instrumentationManager.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.initialized?this.instrumentationManager.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.initialized?this.instrumentationManager.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?F.getInstance().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.initialized)try{this.instrumentationManager.flushPendingReplay();const t=we.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),r=F.getInstance();r.setSessionId(n),r.setSessionStartTime(m(Date.now())),this.logger.log("[session-manager] session ID set successfully:",n)}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.initialized?this.instrumentationManager.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.initialized?this.instrumentationManager.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}destroy(){this.initialized&&(this.instrumentationManager.uninstrument(),we.getInstance().destroy(),fe.getInstance().terminate(),F.getInstance().clearSessionState(),this.initialized=!1)}},Ge=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 Ze={init:function(e){try{Oe=new Je({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}),Ge.manager=Oe}catch(e){g(e)}},identifyUser:function(e){Oe?Oe.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){Oe&&Oe.sendCustomEvent(e)},captureException:function(e,t){Oe&&Oe.captureException(e,t)},logger:Ge,updateConfig:function(e){if(Oe)try{Oe.updateConfig(e)}catch(e){g(e)}},startNavigation:function(e){Oe?Oe.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){Oe?Oe.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return Oe?Oe.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(Oe)try{await Oe.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(){Oe?Oe.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){Oe?Oe.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=Ze}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var et=Ze;export{et as default};
1
+ import{strToU8 as e,gzipSync as t}from"fflate";import n from"error-stack-parser";import{onCLS as r,onLCP as i,onFCP as s,onTTFB as a,onINP as o}from"web-vitals";import{record as l}from"rrweb";import{pack as c}from"@rrweb/packer";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 f="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},p=1e6;function m(e){return e*p}function v(e){return e/p}function y(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 b=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)w[e]=Math.floor(16*Math.random())+48,w[e]>=58&&(w[e]+=39);return k+String.fromCharCode.apply(null,w.slice(0,16))},this.generateSpanId=E(8),this.generateId=E(16)}},w=Array(32);function E(e){return function(){for(let t=0;t<2*e;t++)w[t]=Math.floor(16*Math.random())+48,w[t]>=58&&(w[t]+=39);return String.fromCharCode.apply(null,w.slice(0,2*e))}}var k="0000000000000000";var S=144e5,I=288e5,T=18e5,R={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:S};function L(e){try{console.warn(e)}catch{}}function M(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var x=["privacy","tracing","transport","replay"],N={tracing:"origin",privacy:"replay"};function q(e,t,n){const r={...e,...t};if(n){const i=e?.[n],s=t[n];M(i)&&M(s)?r[n]={...i,...s}:Object.hasOwn(t,n)&&!M(s)&&(r[n]=i)}return r}function A(e,t){const n={...e,...t},r=t,i=e;for(const e of x){if(!Object.hasOwn(r,e))continue;const t=r[e];M(t)?n[e]=q(i[e],t,N[e]):n[e]=i[e]}return n}var C=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=A(R,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)&&L(`[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?S:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>I?(L("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),S):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(e.warnRemovedOptions(t.options),this.providedOptions=A(this.providedOptions||{},t.options),this.options=A(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)}};C.REMOVED_OPTION_KEYS=["enableMasking","maskFields"];var z=C;function _(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function H(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return g(e),null}}function P(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){g(e)}}function O(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){g(e)}}function D(e,t=0){const n=H(e);if(null===n)return t;const r=Number(n);return Number.isFinite(r)?r:t}var F=class e{constructor(){this.config=null,this.logger=d.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.privacyCache=null,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){g(e)}},this.activityPersistHooked=!1}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(e){if(!this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!0;try{document.addEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){g(e)}}this.config||(this.config=new z(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=_(t?.maskSelectors),s=t?.replay,a="function"==typeof s?.maskTextFn?s.maskTextFn:void 0,o="function"==typeof s?.maskInputFn?s.maskInputFn:void 0;let l;l="mask-all"===n||!r&&void 0!==a?["*",...i].join(", "):"mask-sensitive"===n?["[data-private]",...i].join(", "):void 0;const c=e=>!r&&(e??!0),h=c(t?.maskNetworkBodies),d=c(t?.maskNetworkQueryParams),u=c(t?.maskLogs),g=c(t?.maskErrors);return{level:n,maskTextSelector:l,maskSelectors:i,maskInputs:!r,maskNetworkBodies:h,maskNetworkQueryParams:d,maskLogs:u,maskErrors:g,shouldMaskNetworkBodies:!r&&h,shouldMaskNetworkQueryParams:!r&&d,shouldMaskLogs:!r&&u,shouldMaskErrors:!r&&g,sensitiveKeys:_(t?.sensitiveKeys),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:a,maskInputFn:o}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return H("gcId")||""}setSessionId(e){this.sessionId=e,P("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:D("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,P("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:D("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,P("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=T}clearSessionState(){if(this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!1;try{document.removeEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){g(e)}}O("gcId"),O("gcStartTime"),O("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??S}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-v(t):0}isSessionExpired(e=Date.now()){return this.getSessionElapsedMs(e)>=this.getSessionMaxDuration()}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")}},j="[REDACTED]",B=["authorization","cookie","set-cookie"],K=/(token|key|secret|passwd|password|auth|bearer|credential)/i,U=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,Y=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]),$=1e5;function Q(e,t){if(!e)return!1;if(U.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 Y.has(e.toLowerCase())||Q(e,t)}function W(e){return e.includes("-")&&K.test(e)}function V(e,t){return Q(e,t)||W(e)}function J(e,t){const n=e.sensitive?j:e.value;if(!t)return n;try{const r=t(e);return void 0===r?n:r}catch(e){return g(e),n}}function G(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 a=i;try{a=decodeURIComponent(i)}catch{}const o=X(s,t.sensitiveKeys),l=J({key:s,value:a,path:[s],kind:t.kind??"query",sensitive:o},t.redact);return l===a?e:`${r}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function Z(e,t){const n=e.indexOf("?");return-1===n?e:`${e.slice(0,n)}?${G(e.slice(n+1),t)}`}function ee(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),a=Z(function(e){return e.replace(/^([a-zA-Z][\w+.-]*:\/\/)[^/?#@]*@/,((e,t)=>`${t}${j}@`))}(i),n);return-1===r?a:`${a}#${Z(s,n)}`}function te(e,t,n,r,i,s){const a=!!e&&Q(e,r.sensitiveKeys);if(null!==t&&"object"==typeof t){if(a||i>8)return j;if(y(t))return j;if(s.has(t))return j;s.add(t);try{if(Array.isArray(t))return t.map((t=>te(e,t,n,r,i+1,s)));const a={};for(const[e,o]of Object.entries(t))a[e]=te(e,o,[...n,e],r,i+1,s);return a}catch(e){return g(e),j}finally{s.delete(t)}}return J({key:e,value:t,path:n,kind:r.kind??"log",sensitive:a},r.redact)}function ne(e,t={}){if(!e)return e;if(e.length>$)return`${ne(e.slice(0,$),t)}…`;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>V(n,t.sensitiveKeys)?`"${n}":"${j}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;?]+)/g,((e,n)=>function(e,t){return X(e,t)||W(e)}(n,t.sensitiveKeys)?`${n}=${j}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>V(n,t.sensitiveKeys)?`${n}: ${j}`: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 re(e,t={}){try{const n=te("",e,[],t,0,new WeakSet);return null!==n&&"object"==typeof n?n:{}}catch(e){return g(e),{}}}function ie(e,t,n){if(!e.shouldMaskLogs)return{message:t,attributes:n};const r={sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"log"};return{message:ne(t,r),attributes:n?re(n,r):n}}var se=F.getInstance(),ae=new b,oe=d.getInstance();function le(){const e=se?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function ce(e,t="",n=new WeakSet,r=0){try{return r>=10?{[t||"depth_limit"]:"[Depth Limit]"}:y(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 a=t?`${t}.${i}`:i;return"object"==typeof s&&null!==s?Array.isArray(s)?e[a]=s.map(((e,t)=>"object"==typeof e&&null!==e?ce(e,`${a}[${t}]`,n,r+1):e)):Object.assign(e,ce(s,a,n,r+1)):e[a]=s,e}),{}))}catch(e){return oe.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}}function he(e){const t=m(Date.now()),n=ae.generateId(),r=e.spanId||ae.generateSpanId(),i=e.traceId||ae.generateTraceId(),s=e.parentSpanId||"",a=ce(e.attributes||{}),o=function(){const e=f?.location;if(!e)return{path:"",url:"",title:f?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),n=t?e.hash:e.pathname,r=se.getPrivacy(),i=r.shouldMaskNetworkQueryParams,s={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"};return{path:i&&t?ee(n,s):n,url:i?ee(e.href,s):e.href,title:f?.document?.title||""}}(),l={type:e.type,id:n,spanId:r,parentSpanId:s,traceId:i,attributes:{...a,location:o}};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 de({text:e,maxLength:t=1e4,ellipsis:n=""}){return e?"string"!=typeof e||e.length<=t?e:e.substring(0,t)+n:""}function ue(e){return(e||"").replace(/\s+/g," ").trim()}var ge=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 a=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:a});try{r.postMessage({id:n,op:e,payload:t})}catch(e){clearTimeout(a),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()}};ge.instance=null;var fe=ge,pe=class{constructor(){this.logger=d.getInstance(),this.config=F.getInstance()}compressInline(n,r){if(!r)return{data:(new TextEncoder).encode(n),isCompressed:!1};try{const r=e(n);return{data:t(r),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(n),isCompressed:!1}}}compressAsync(e,t){return fe.withFallback((n=>n.encodeBatch(e,t)),(()=>this.compressInline(e,t)),"transporter")}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),a=!!n?.options?.transport?.compression,{data:o,isCompressed:l}=t?this.compressInline(s,a):await this.compressAsync(s,a);fetch(i,{method:"POST",headers:{"Content-Type":"application/json",apikey:r,"Content-Encoding":l?"gzip":""},body:o}).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`:""}},me=["navigation","dom.event"],ve=R.transport?.batchSize??10,ye=R.transport?.batchTimeout??1e4;var be=class e{constructor(){this.events=[],this.timeoutId=null,this.config=F.getInstance(),this.logger=d.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush({lifecycle:!0})},this.transporter=new pe}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(){try{if(this.initialized)return;this.scheduleFlush(),"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.visibilityHandler),this.initialized=!0}catch(e){g(e)}}destroy(){try{null!==this.timeoutId&&(f.clearTimeout(this.timeoutId),this.timeoutId=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.events=[],this.initialized=!1}catch(e){g(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){var t;if(e&&this.initialized)try{const n=this.config.getConfig()?.options?.beforeSend,r=this.config.getConfig()?.options?.enrichEvent;if(n&&!n(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){g(e)}r&&(e=r(e)),this.events.push(e);const i=(t=this.config.getConfig()?.options?.transport?.batchSize,"number"==typeof t&&Number.isFinite(t)&&t>=0?t:ve);this.events.length>=i&&!me.includes(e.type)&&this.flush()}catch(e){g(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;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.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&&(f.clearTimeout(this.timeoutId),this.timeoutId=null);const t=(e=this.config.getConfig()?.options?.transport?.batchTimeout,"number"==typeof e&&Number.isFinite(e)&&e>0?e:ye);this.timeoutId=f.setTimeout((()=>{this.timeoutId=null,this.flush()}),t)}catch(e){g(e)}var e}detectBrowser(){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),{name:t,version:n,platform:r,language:navigator.language,mobile:i}}getSessionAttributes(){const e=this.detectBrowser(),t=this.config.getConfig();return{cluster:t?.cluster||"",env:t?.environment||"",namespace:t?.namespace||"",releaseId:t?.releaseId||"",session_id:this.config.getSessionId(),session_start_time:this.config.getSessionStartTime(),user:t?.user||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};be.instance=null;var we=be,Ee=class{constructor(){this.logger=d.getInstance(),this.eventsPool=we.getInstance()}},ke="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function Se(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Ie(e){try{const t=ke?.call(e);return"string"==typeof t?t:""}catch{return""}}function Te(e,t){try{return null!=e.closest?.(t)}catch{return!1}}function Re(e,t){return!!e&&("password"===e.type||function(e){return["id","name","class","aria-label","placeholder"].map((t=>Se(e,t))).filter(Boolean)}(e).some((e=>Q(e,t))))}function Le(e,t){return"allow"!==t.level&&(!!e&&(!!Te(e,"[data-private]")||(!(!t.maskSelectors.length||!t.maskSelectors.some((t=>Te(e,t))))||("mask-all"===t.level||function(e){const t=Ie(e).toLowerCase();return"input"===t||"textarea"===t||"select"===t}(e)&&Re(e,t.sensitiveKeys)))))}var Me={role:"",accessibleName:"",ariaLabel:"",title:"",alt:"",placeholder:"",name:"",inputType:"",href:""},xe=["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"]'].join(", "),Ne=[xe,"li","option","tr","td","th",'[role="listitem"]','[role="row"]','[role="gridcell"]','[role="cell"]'].join(", ");function qe(e){return!!e&&1===e.nodeType}function Ae(e){const t=Ie(e).toLowerCase();return"body"===t||"html"===t}function Ce(e){return de({text:e,maxLength:255})}function ze(e){return de({text:e,maxLength:100,ellipsis:"…"})}function _e(e){const t=Se(e,"role");return t?ue(t):function(e){switch(Ie(e).toLowerCase()){case"a":return Se(e,"href")?"link":"";case"button":return"button";case"input":switch(Se(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 He(e){if(!qe(e))return"";try{if(Ae(e))return"";if(function(e){try{return e.querySelectorAll(Ne).length>=2}catch{return!1}}(e))return"";const t=ue(e.textContent||"");return t?t.length>1e3?"":de({text:t,maxLength:255}):""}catch{return""}}function Pe(e){return Se(e,"aria-labelledby").split(/\s+/).filter(Boolean).slice(0,5)}function Oe(e){if(Ae(e))return"";const t=function(e){const t=[];for(const n of Pe(e))try{const e=document.getElementById(n);e?.textContent&&t.push(e.textContent)}catch{}return ue(t.join(" "))}(e);if(t)return ze(t);const n=ue(Se(e,"aria-label"));if(n)return ze(n);const r=ue(Se(e,"alt"));if(r)return ze(r);if(function(e){const t=Ie(e).toLowerCase();if("button"===t)return!0;if("input"!==t)return!1;const n=Se(e,"type").toLowerCase();return"submit"===n||"button"===n||"reset"===n}(e)){const t=ue(Se(e,"value"));if(t)return ze(t)}const i=ue(Se(e,"title"));if(i)return ze(i);const s=ue(Se(e,"placeholder"));return ze(s||He(e))}var De=class extends Ee{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=F.getInstance(),this.getShouldMaskText=e=>Le(e.target,this.config.getPrivacy()),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}),f?.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(!le())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(!qe(e))return null;try{return e.closest(xe)}catch{return null}}(n)??n,i=r?this.generateSelector(r):"",s=this.config.getPrivacy(),a=this.getShouldMaskText({target:n||null})||!!r&&(function(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}}(r,s)||function(e,t){if("allow"===t.level)return!1;try{for(const n of Pe(e)){const e=document.getElementById(n);if(e&&Le(e,t))return!0}}catch{}return!1}(r,s)),o=this.getKeyCode(e,a),l=function(e){if(!qe(e))return{...Me};try{return{role:Ce(_e(e)),accessibleName:Oe(e),ariaLabel:Ce(ue(Se(e,"aria-label"))),title:Ce(ue(Se(e,"title"))),alt:Ce(ue(Se(e,"alt"))),placeholder:Ce(ue(Se(e,"placeholder"))),name:Ce(Se(e,"name")),inputType:Ce(Se(e,"type")),href:Ce(Se(e,"href"))}}catch{return{...Me}}}(r),c=s.shouldMaskNetworkQueryParams?ee(l.href,{sensitiveKeys:s.sensitiveKeys,redact:s.redact,kind:"query"}):l.href,h=e=>a&&e?"*":e;this.logger.log("[dom-events-listener.buildEvent] called");return he({type:"dom.event",attributes:{dom_event_selector:i,dom_event_key_code:o,dom_event_type:e.type,dom_event_coordinates:t||{clientX:0,clientY:0},dom_event_target:{id:Se(r,"id"),tagName:Ie(r),className:Se(r,"class"),text:a?"*":He(r),role:l.role,accessibleName:h(l.accessibleName),ariaLabel:h(l.ariaLabel),title:h(l.title),alt:h(l.alt),placeholder:h(l.placeholder),name:l.name,inputType:l.inputType,href:h(c)}}})}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"===Ie(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<r;){let e=Ie(o).toLowerCase();try{const t=o.getAttribute("id");if(t&&/^[a-zA-Z][\w-]*$/.test(t))return`#${t}`;if(o.classList?.length){const t=Array.from(o.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=o.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Ie(o).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return s||"*"}},Fe=["log","info","warn","error","debug","assert","trace"],je=class extends Ee{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=F.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),Fe.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){g(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){g(e)}}destroy(){try{if(!this.isInitialized)return;Fe.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){g(e)}}handleEvent(e,t){try{if(!le())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}=ie(this.config.getPrivacy(),e,n);return he({type:"log",attributes:{...i,message:de({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{Fe.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){g(e)}return e}};function Be(e){try{if(null==e)return"";if("string"==typeof e)return e;if(e instanceof FormData)return"[form data]";if(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("undefined"!=typeof Document){if(e instanceof Document)return"[document data]";const t=e;if(9===t?.nodeType)return"[document data]"}if(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 Ke,Ue="[request body too large]",Ye="[request body unavailable]",$e="[response body too large]",Qe="[response body unavailable]",Xe="[unreadable response body]",We="[form data]",Ve="[binary data]",Je=class extends Ee{constructor(){super(...arguments),this.maxBodyLength=5e3,this.requestBodyReadTimeoutMs=3e3,this.responseBodyReadTimeoutMs=3e3,this.config=F.getInstance(),this.idGenerator=new b,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!le())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=ee(t,i))}r.shouldMaskNetworkQueryParams&&(n=ee(n,i)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),a=this.formatHeaders(e.response.headers),o=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.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(te("",e,[],t,0,new WeakSet))}catch{}return e.includes("=")&&!e.includes("{")?G(e,t):ne(e,t)}(e,{sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:t}):e,d=de({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),u=de({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),g={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:a,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:u}}},f={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?m(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?m(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:g};return l&&(f.traceId=l),c&&(f.spanId=c),he(f)}}async readBodyStreamCapped(e,t={}){if(!e)return"";const{timeoutMs:n,overflowPlaceholder:r,timeoutPlaceholder:i}=t,s=e.getReader(),a=new TextDecoder;let o,l="",c=0,h=!1,d=!1;const u=null!=n?new Promise((e=>{o=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+=a.decode(e,{stream:!0}),h=!0;break}c+=n.byteLength,l+=a.decode(n,{stream:!0})}return l+=a.decode(),d&&null!=i?i:h&&null!=r?r:l}finally{clearTimeout(o);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]":Ve}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:Ue,timeoutPlaceholder:Ye})}catch{return Ye}}async getResponseBody(e){if(!e.body)return"";const t=e.headers?.get?.("content-type")??"";if("text/event-stream"===this.mimeEssence(t))return Xe;const n=this.classifyByContentType(t);return null!=n?n:await this.readBodyStreamCapped(e.clone().body,{timeoutMs:this.responseBodyReadTimeoutMs,overflowPlaceholder:$e,timeoutPlaceholder:Qe})}initialize(){this.logger.log("[network-events-listener.initialize] called"),this.patchXHR(),this.patchFetch()}destroy(){globalThis.XMLHttpRequest.prototype.open=globalThis.XMLHttpRequest.prototype.open,globalThis.XMLHttpRequest.prototype.send=globalThis.XMLHttpRequest.prototype.send,globalThis.fetch=globalThis.fetch}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,a,o){if(i=Date.now(),e.shouldIgnoreRequest(r.toString()))return t.apply(this,[n,r,s,a,o]);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,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),r.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...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(Be(this._requestBody),Ue),s=""===this.responseType||"text"===this.responseType,a=s?this.responseText:this.response,o=(s?e.classifyByContentType(n["content-type"]||""):null)??e.capBodyText(Be(a),$e),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:o}};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)=>{const n=Date.now();let[r,i]=t;i={...i||{}},t[1]=i;const s=r instanceof Request,a=i?.method||(s?r.method:"GET"),o=r instanceof Request?r.url:r.toString();if(this.shouldIgnoreRequest(o))return e.apply(globalThis,t);const l=this.shouldAddTraceHeader(o);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(Be(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:a,url:o,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=Xe,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:a,url:o,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=J({key:n,value:r,path:[n],kind:"header",sensitive:B.includes(i)||K.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]=de({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}},Ge=class extends Ee{constructor(){super(...arguments),this.config=F.getInstance(),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(){f?.addEventListener("error",this.handleEvent),f?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){f?.removeEventListener("error",this.handleEvent),f?.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",a=r?ne(s,i):s,o=r&&t?.metadata?re(t.metadata,i):t?.metadata;return he({type:"exception",attributes:{error_type:e.name||"Error",error_message:a,error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${de({text:a,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:o}})}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(e){if(!e)return[];try{return n.parse(e).map((e=>({filename:e.fileName||"unknown",function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0})))}catch(e){return[]}}},Ze=class extends Ee{constructor({isEnabled:e}){if(super(),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&e)try{this.isAutomaticNavigationEnabled=e,this.currentUrl=f.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){g(e)}}isInBrowserEnvironment(){try{return void 0!==f&&void 0!==f.location&&void 0!==f.history&&"function"==typeof f.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;history.pushState=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},history.replaceState=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n},f&&"function"==typeof f.addEventListener&&(f.addEventListener("popstate",this.popStateHandler),f.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.originalPushState,history.replaceState=this.originalReplaceState),f&&"function"==typeof f.removeEventListener&&(f.removeEventListener("popstate",this.popStateHandler),f.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",f.location.href);const e=F.getInstance().getPrivacy(),t="allow"===e.level,n=f.location.href,r=this.activeNavigation?.metadata;return he({type:"navigation",attributes:{page_url:e.shouldMaskNetworkQueryParams?ee(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&r?re(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}})}queueEvent(e){try{this.logger.log("[navigation-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}startNavigation(e){this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:f.location.href,metadata:e,startTime:Date.now(),endTime:0,duration_ms:0}}endNavigation(e){this.logger.log("[navigation-listener.endNavigation] called",e),this.activeNavigation?(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()):this.logger.log("[navigation-listener.endNavigation] no active navigation found")}handleLocationChange(){try{if(!this.isInitialized)return;if(this.logger.log("[navigation-listener.handleLocationChange] called"),this.currentUrl===f.location.href)return;let e,t;try{e=new URL(f.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=f.location.href,this.handleEvent())}catch(e){g(e)}}},et=class extends Ee{constructor(){super(),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",f),"complete"===f?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):f?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),g(e)}}destroy(){f?.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=F.getInstance().getPrivacy(),s=i.shouldMaskNetworkQueryParams,a={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"},o=f?.location?.href||"",l=f?.document?.referrer||"";return he({type:"pageload",attributes:{page_url:s?ee(o,a):o,page_load_time:t,page_referrer:s?ee(l,a):l,page_resources:r}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},tt=class extends Ee{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!le())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){g(e)}}}initialize(){r(this.handleEvent),i(this.handleEvent),s(this.handleEvent),a(this.handleEvent),o(this.handleEvent)}destroy(){}buildEvent(e){return he({type:"performance",attributes:{performance_metric_name:e.name,performance_metric_value:e.value,performance_metric_id:e.id,performance_metric_navigation_type:e.navigationType||""}})}queueEvent(e){try{this.logger.log("[performance-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){g(e)}}},nt=class{constructor(){this.logger=d.getInstance(),this.eventsPool=we.getInstance(),this.configManager=F.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}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?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0,n=this.configManager.getPrivacy(),r=n.maskInputFn??("allow"===n.level?void 0:(e,t)=>Le(t,n)?"*".repeat(e.length):e);this.stopFn=l({...t?{blockSelector:t}:{},...n.maskTextSelector?{maskTextSelector:n.maskTextSelector}:{},maskAllInputs:n.maskInputs,...n.maskTextFn?{maskTextFn:n.maskTextFn}:{},...r?{maskInputFn:r}:{},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=f.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&&(f.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.configManager.getSessionId(),n=fe.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=>c(e)))}else r=e.events.map((e=>c(e)));this.configManager.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=>c(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=he({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()}},rt=["pointerdown","keydown","scroll","touchstart","mousemove"],it=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,rt.forEach((e=>{try{f.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",T,"ms");try{this.callbacks.onIdle()}catch(e){g(e)}}),T)}catch(e){g(e)}}destroy(){if(this.installed){this.installed=!1,rt.forEach((e=>{try{f.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){g(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){g(e)}finally{this.idleTimer=null}}}},st=new Set(["dom.event","navigation","pageload"]),at=class{constructor(){this.logger=d.getInstance(),this.eventsPool=we.getInstance(),this.configManager=F.getInstance(),this.idGenerator=new b,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.isRotating=!1,this.replayDesired=!1,this.presenceMonitor=null}instrument(){this.logger.log("[instrumentation-manager.instrument] called"),this.eventsPool.setBeforeEnqueueHook((e=>this.reconcileSessionOnEnqueue(e))),this.presenceMonitor?.destroy(),this.presenceMonitor=new it({onPresence:e=>this.reconcileSession(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 et,this.pageLoadListener.initialize(),r.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new De,this.domEventsListener.initialize(),r.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new je,this.logEventsListener.initialize(),r.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new Ge,this.errorsEventsListener.initialize(),r.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new Je,this.networkEventsListener.initialize(),r.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new tt,this.performanceListener.initialize(),r.push("performance")),this.navigationListener=new Ze({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.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=he({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){g(e)}}emitLog(e,t,n){if(this.logEventsListener){this.logger.log("[instrumentation-manager.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}=ie(F.getInstance().getPrivacy(),e,r),a=he({type:"log",attributes:{...s,message:de({text:i}),level:t}});this.eventsPool.addEvent(a)}catch(e){g(e)}}}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(){if(this.replayDesired=!0,this.isReplayRecording())return void this.logger.log("[instrumentation-manager] replay recording already started");const e=Date.now();(this.configManager.isSessionInactive(e)||this.configManager.isSessionExpired(e))&&this.rotateSession({reason:"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 nt;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)}}reconcileSession(e,t){if(this.isRotating)return;t&&this.configManager.isSessionInactive(e)&&this.rotateSession({reason:"inactivity gap"});const n=this.configManager.getSessionElapsedMs(e),r=this.configManager.getSessionMaxDuration(),i=n>=r;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:r,expired:i}),i&&this.rotateSession({reason:"max session duration"}),this.syncReplayState(t),t&&(this.configManager.setLastActivityMs(e),this.presenceMonitor?.notePresence(e))}reconcileSessionOnEnqueue(e){this.isRotating||("replay"!==e.type?this.reconcileSession(Date.now(),st.has(e.type)):this.logger.log("[instrumentation-manager] enqueue rotation check: ignoring replay event"))}rotateSession(e){if(this.isRotating)return;this.isRotating=!0;const t=this.configManager.getSessionId(),n=this.isReplayRecording();this.logger.log("[instrumentation-manager] session rotation start",{reason:e.reason,previousId:t,wasReplayActive:n});const r=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){g(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{r("stop replay",(()=>this.stopReplayListener())),r("flush events",(()=>this.eventsPool.flush())),r("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(m(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),r("sync replay",(()=>this.syncReplayState(n)))}finally{this.isRotating=!1,this.logger.log("[instrumentation-manager] session rotation complete",{reason:e.reason})}}stopReplayListener(){this.sessionReplayListener?(this.sessionReplayListener.stopRecording(),this.sessionReplayListener=null):this.logger.log("[instrumentation-manager] cannot stop replay recording: replay listener not initialized")}uninstrument(){this.eventsPool.setBeforeEnqueueHook(null),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}},ot="gcSample",lt=class{constructor(e){this.initialized=!1,this.logger=d.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.instrumentationManager=new at,this.idGenerator=new b;if(!this.getSamplingDecision(e.options?.sessionSampleRate))return void this.logger.log("[session-manager] session is not sampled");if(this.initialized)return void this.logger.log("[session-manager] SDK already initialized");const t=F.getInstance();t.initialize(e);we.getInstance().initialize(),fe.getInstance();const n=e.sessionId,r=t.getSessionId();n&&n!==r?(t.setSessionId(n),t.setSessionStartTime(m(Date.now())),this.logger.log("[session-manager] using provided sessionId:",n)):n?(t.setSessionId(n),this.logger.log("[session-manager] continuing provided sessionId:",n)):r||t.setSessionId(this.idGenerator.generateId());const i=Date.now(),s=v(t.getSessionStartTime());if(s>0&&i-s>=-6e4){if(t.isSessionExpired(i)||t.isSessionInactive(i)){const e=t.isSessionExpired(i)?"persisted session past cap":"inactivity gap across reload",n=t.getSessionId(),r=this.idGenerator.generateId();t.setSessionId(r),t.setSessionStartTime(m(i)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:r})}}else t.setSessionStartTime(m(i));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=H(ot);if(t){const e="1"===t;return this.logger.log("[session-manager] using stored sampling decision:",e),e}const n=!e||Math.random()<e;return P(ot,n?"1":"0"),this.logger.log("[session-manager] stored new sampling decision:",n),n}catch(t){this.logger.log("[session-manager] session storage access failed:",t);const n=!e||Math.random()<e;return this.logger.log("[session-manager] using fallback sampling decision:",n),n}}identifyUser(e){if(this.logger.log("[session-manager] identifyUser called"),!this.initialized)return void this.logger.log("[session-manager] cannot identify user: SDK not initialized");F.getInstance().updateConfig({user:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");F.getInstance().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.instrumentationManager.restartReplayForConfigChange()}sendCustomEvent(e){this.initialized?this.instrumentationManager.sendCustomEvent(e):this.logger.log("[session-manager] cannot send custom event: SDK not initialized")}startNavigation(e){this.initialized?this.instrumentationManager.startNavigation(e):this.logger.log("[session-manager] cannot start navigation: SDK not initialized")}endNavigation(e){this.initialized?this.instrumentationManager.endNavigation(e):this.logger.log("[session-manager] cannot end navigation: SDK not initialized")}captureException(e,t){this.initialized?this.instrumentationManager.captureException(e,t):this.logger.log("[session-manager] Cannot capture exception: SDK not initialized")}emitLog(e,t,n){this.initialized?this.instrumentationManager.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?F.getInstance().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.initialized)try{this.instrumentationManager.flushPendingReplay();const t=we.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),r=F.getInstance();r.setSessionId(n),r.setSessionStartTime(m(Date.now())),this.logger.log("[session-manager] session ID set successfully:",n)}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.initialized?this.instrumentationManager.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.initialized?this.instrumentationManager.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}destroy(){this.initialized&&(this.instrumentationManager.uninstrument(),we.getInstance().destroy(),fe.getInstance().terminate(),F.getInstance().clearSessionState(),this.initialized=!1)}},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{Ke=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=Ke}catch(e){g(e)}},identifyUser:function(e){Ke?Ke.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){Ke&&Ke.sendCustomEvent(e)},captureException:function(e,t){Ke&&Ke.captureException(e,t)},logger:ct,updateConfig:function(e){if(Ke)try{Ke.updateConfig(e)}catch(e){g(e)}},startNavigation:function(e){Ke?Ke.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){Ke?Ke.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return Ke?Ke.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(Ke)try{await Ke.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(){Ke?Ke.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){Ke?Ke.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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groundcover/browser",
3
- "version": "1.0.6-rc.0",
3
+ "version": "1.0.6-rc.1",
4
4
  "description": "groundcover Real User Monitoring (RUM) SDK for the browser — performance, errors, logs, distributed tracing and session replay",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",