@groundcover/browser 0.0.78-rc.1 → 0.0.79-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -6
- package/dist/index.d.mts +47 -1
- package/dist/index.d.ts +47 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +5 -6
- package/dist/.worker-build/worker.js +0 -1
package/README.md
CHANGED
|
@@ -151,12 +151,6 @@ Because rotation is activity-gated, a session that goes idle keeps its id past t
|
|
|
151
151
|
|
|
152
152
|
The flush is best-effort and the rotation always proceeds regardless of delivery success. Values outside the allowed range or otherwise invalid fall back to the default with a `console.warn`.
|
|
153
153
|
|
|
154
|
-
## Web Worker offloading
|
|
155
|
-
|
|
156
|
-
The SDK spawns a dedicated Web Worker on init and offloads CPU-heavy work — session-replay event packing and outgoing-batch gzip — off the main thread so it doesn't compete with the host page's UI work.
|
|
157
|
-
|
|
158
|
-
The worker is bundled inline (no extra files to host) and spawned from a `blob:` URL. On environments that don't permit blob-sourced workers — strict Content Security Policy without `worker-src 'self' blob:`, sandboxed iframes, SSR — the SDK silently falls back to the existing main-thread implementation. Behavior, wire format, and the public API are identical in both modes.
|
|
159
|
-
|
|
160
154
|
You can pass the values by calling the init function:
|
|
161
155
|
|
|
162
156
|
```typescript
|
package/dist/index.d.mts
CHANGED
|
@@ -173,6 +173,41 @@ type EventTypes = {
|
|
|
173
173
|
performance: Event<"performance", PerformanceEventAttributes>;
|
|
174
174
|
replay: Event<"replay", ReplayEventAttributes>;
|
|
175
175
|
};
|
|
176
|
+
type PrivacyLevel = "mask-user-input" | "mask-all" | "allow";
|
|
177
|
+
type Redactor = (value: string, ctx: {
|
|
178
|
+
kind: "body" | "query" | "header" | "log" | "error";
|
|
179
|
+
url?: string;
|
|
180
|
+
}) => string;
|
|
181
|
+
interface PrivacyOptions {
|
|
182
|
+
/**
|
|
183
|
+
* Master switch for replay + non-replay masking. `'mask-user-input'`
|
|
184
|
+
* (default) masks inputs/keystrokes and redacts network/log/error payloads
|
|
185
|
+
* but keeps static text; `'mask-all'` also masks all text; `'allow'` opts out.
|
|
186
|
+
*/
|
|
187
|
+
level?: PrivacyLevel;
|
|
188
|
+
/** CSS selectors whose text/inputs are always masked (replay + DOM), regardless of `level` except `'allow'`. */
|
|
189
|
+
maskSelectors?: string[];
|
|
190
|
+
/** Redact network request/response bodies. Default on unless `level` is `'allow'`. */
|
|
191
|
+
maskNetworkBodies?: boolean;
|
|
192
|
+
/** Redact network URL query params. Default on unless `level` is `'allow'`. */
|
|
193
|
+
maskNetworkQueryParams?: boolean;
|
|
194
|
+
/** Redact console log messages and attributes. Default on unless `level` is `'allow'`. */
|
|
195
|
+
maskLogs?: boolean;
|
|
196
|
+
/** Redact error messages, metadata and stack-frame URLs. Default on unless `level` is `'allow'`. */
|
|
197
|
+
maskErrors?: boolean;
|
|
198
|
+
/** Extra case-insensitive key substrings treated as sensitive, merged with the built-in patterns. */
|
|
199
|
+
sensitiveKeys?: string[];
|
|
200
|
+
/**
|
|
201
|
+
* Custom redactor applied AFTER built-in redaction to string fields of
|
|
202
|
+
* network (body/query/header), log and error events. Thrown errors are
|
|
203
|
+
* swallowed (built-in result kept).
|
|
204
|
+
*/
|
|
205
|
+
redact?: Redactor;
|
|
206
|
+
/** Advanced: rrweb `maskTextFn` pass-through for session replay. */
|
|
207
|
+
maskTextFn?: (text: string, el: HTMLElement | null) => string;
|
|
208
|
+
/** Advanced: rrweb `maskInputFn` pass-through for session replay. */
|
|
209
|
+
maskInputFn?: (text: string, el: HTMLElement) => string;
|
|
210
|
+
}
|
|
176
211
|
interface SDKOptions {
|
|
177
212
|
batchSize: number;
|
|
178
213
|
batchTimeout: number;
|
|
@@ -181,7 +216,9 @@ interface SDKOptions {
|
|
|
181
216
|
sessionSampleRate: number;
|
|
182
217
|
environment: string;
|
|
183
218
|
debug: boolean;
|
|
219
|
+
/** @deprecated Use `privacy.maskSelectors` / `privacy.sensitiveKeys`. Still honored. */
|
|
184
220
|
maskFields: string[];
|
|
221
|
+
/** @deprecated Use `privacy.level`. Still honored: `true` → `'mask-all'`, explicit `false` → `'allow'`. */
|
|
185
222
|
enableMasking: boolean;
|
|
186
223
|
tracePropagationUrls: string[];
|
|
187
224
|
tracePropagationHeaders: string[];
|
|
@@ -195,12 +232,20 @@ interface SDKOptions {
|
|
|
195
232
|
excludedUrls?: Array<string | RegExp>;
|
|
196
233
|
beforeSend?: (event: EventTypes[keyof EventTypes]) => boolean;
|
|
197
234
|
enrichEvent?: (event: EventTypes[keyof EventTypes]) => EventTypes[keyof EventTypes];
|
|
235
|
+
/**
|
|
236
|
+
* Unified privacy / data-masking config driving replay + non-replay masking.
|
|
237
|
+
* ON by default (`level: 'mask-user-input'`); see {@link PrivacyOptions}.
|
|
238
|
+
*/
|
|
239
|
+
privacy?: PrivacyOptions;
|
|
198
240
|
sessionReplay?: {
|
|
199
241
|
/**
|
|
200
242
|
* CSS selectors whose matching elements (and their subtrees) are
|
|
201
243
|
* excluded from session recording. Matching elements appear in the
|
|
202
244
|
* replay as empty placeholders of their original size. Useful for
|
|
203
245
|
* skipping noisy DOM injected by browser extensions (e.g. Grammarly).
|
|
246
|
+
*
|
|
247
|
+
* NOTE: this is a noise-reduction control, NOT a privacy control. To mask
|
|
248
|
+
* sensitive content use `privacy` instead.
|
|
204
249
|
*/
|
|
205
250
|
blockedSelectors?: string[];
|
|
206
251
|
};
|
|
@@ -266,6 +311,7 @@ declare class SDKConfig {
|
|
|
266
311
|
apiKey: string;
|
|
267
312
|
userIdentifier: Partial<UserIdentifiers> | null;
|
|
268
313
|
options: Partial<SDKOptions>;
|
|
314
|
+
providedOptions?: Partial<SDKOptions>;
|
|
269
315
|
constructor(input?: SDKConfigInput);
|
|
270
316
|
private static normalizeSessionMaxDuration;
|
|
271
317
|
getEndpoint(): string;
|
|
@@ -353,4 +399,4 @@ declare const groundcover: {
|
|
|
353
399
|
stopReplayRecording: typeof stopReplayRecording;
|
|
354
400
|
};
|
|
355
401
|
|
|
356
|
-
export { type EventTypes, type SDKOptions, groundcover as default };
|
|
402
|
+
export { type EventTypes, type PrivacyLevel, type PrivacyOptions, type Redactor, type SDKOptions, groundcover as default };
|
package/dist/index.d.ts
CHANGED
|
@@ -173,6 +173,41 @@ type EventTypes = {
|
|
|
173
173
|
performance: Event<"performance", PerformanceEventAttributes>;
|
|
174
174
|
replay: Event<"replay", ReplayEventAttributes>;
|
|
175
175
|
};
|
|
176
|
+
type PrivacyLevel = "mask-user-input" | "mask-all" | "allow";
|
|
177
|
+
type Redactor = (value: string, ctx: {
|
|
178
|
+
kind: "body" | "query" | "header" | "log" | "error";
|
|
179
|
+
url?: string;
|
|
180
|
+
}) => string;
|
|
181
|
+
interface PrivacyOptions {
|
|
182
|
+
/**
|
|
183
|
+
* Master switch for replay + non-replay masking. `'mask-user-input'`
|
|
184
|
+
* (default) masks inputs/keystrokes and redacts network/log/error payloads
|
|
185
|
+
* but keeps static text; `'mask-all'` also masks all text; `'allow'` opts out.
|
|
186
|
+
*/
|
|
187
|
+
level?: PrivacyLevel;
|
|
188
|
+
/** CSS selectors whose text/inputs are always masked (replay + DOM), regardless of `level` except `'allow'`. */
|
|
189
|
+
maskSelectors?: string[];
|
|
190
|
+
/** Redact network request/response bodies. Default on unless `level` is `'allow'`. */
|
|
191
|
+
maskNetworkBodies?: boolean;
|
|
192
|
+
/** Redact network URL query params. Default on unless `level` is `'allow'`. */
|
|
193
|
+
maskNetworkQueryParams?: boolean;
|
|
194
|
+
/** Redact console log messages and attributes. Default on unless `level` is `'allow'`. */
|
|
195
|
+
maskLogs?: boolean;
|
|
196
|
+
/** Redact error messages, metadata and stack-frame URLs. Default on unless `level` is `'allow'`. */
|
|
197
|
+
maskErrors?: boolean;
|
|
198
|
+
/** Extra case-insensitive key substrings treated as sensitive, merged with the built-in patterns. */
|
|
199
|
+
sensitiveKeys?: string[];
|
|
200
|
+
/**
|
|
201
|
+
* Custom redactor applied AFTER built-in redaction to string fields of
|
|
202
|
+
* network (body/query/header), log and error events. Thrown errors are
|
|
203
|
+
* swallowed (built-in result kept).
|
|
204
|
+
*/
|
|
205
|
+
redact?: Redactor;
|
|
206
|
+
/** Advanced: rrweb `maskTextFn` pass-through for session replay. */
|
|
207
|
+
maskTextFn?: (text: string, el: HTMLElement | null) => string;
|
|
208
|
+
/** Advanced: rrweb `maskInputFn` pass-through for session replay. */
|
|
209
|
+
maskInputFn?: (text: string, el: HTMLElement) => string;
|
|
210
|
+
}
|
|
176
211
|
interface SDKOptions {
|
|
177
212
|
batchSize: number;
|
|
178
213
|
batchTimeout: number;
|
|
@@ -181,7 +216,9 @@ interface SDKOptions {
|
|
|
181
216
|
sessionSampleRate: number;
|
|
182
217
|
environment: string;
|
|
183
218
|
debug: boolean;
|
|
219
|
+
/** @deprecated Use `privacy.maskSelectors` / `privacy.sensitiveKeys`. Still honored. */
|
|
184
220
|
maskFields: string[];
|
|
221
|
+
/** @deprecated Use `privacy.level`. Still honored: `true` → `'mask-all'`, explicit `false` → `'allow'`. */
|
|
185
222
|
enableMasking: boolean;
|
|
186
223
|
tracePropagationUrls: string[];
|
|
187
224
|
tracePropagationHeaders: string[];
|
|
@@ -195,12 +232,20 @@ interface SDKOptions {
|
|
|
195
232
|
excludedUrls?: Array<string | RegExp>;
|
|
196
233
|
beforeSend?: (event: EventTypes[keyof EventTypes]) => boolean;
|
|
197
234
|
enrichEvent?: (event: EventTypes[keyof EventTypes]) => EventTypes[keyof EventTypes];
|
|
235
|
+
/**
|
|
236
|
+
* Unified privacy / data-masking config driving replay + non-replay masking.
|
|
237
|
+
* ON by default (`level: 'mask-user-input'`); see {@link PrivacyOptions}.
|
|
238
|
+
*/
|
|
239
|
+
privacy?: PrivacyOptions;
|
|
198
240
|
sessionReplay?: {
|
|
199
241
|
/**
|
|
200
242
|
* CSS selectors whose matching elements (and their subtrees) are
|
|
201
243
|
* excluded from session recording. Matching elements appear in the
|
|
202
244
|
* replay as empty placeholders of their original size. Useful for
|
|
203
245
|
* skipping noisy DOM injected by browser extensions (e.g. Grammarly).
|
|
246
|
+
*
|
|
247
|
+
* NOTE: this is a noise-reduction control, NOT a privacy control. To mask
|
|
248
|
+
* sensitive content use `privacy` instead.
|
|
204
249
|
*/
|
|
205
250
|
blockedSelectors?: string[];
|
|
206
251
|
};
|
|
@@ -266,6 +311,7 @@ declare class SDKConfig {
|
|
|
266
311
|
apiKey: string;
|
|
267
312
|
userIdentifier: Partial<UserIdentifiers> | null;
|
|
268
313
|
options: Partial<SDKOptions>;
|
|
314
|
+
providedOptions?: Partial<SDKOptions>;
|
|
269
315
|
constructor(input?: SDKConfigInput);
|
|
270
316
|
private static normalizeSessionMaxDuration;
|
|
271
317
|
getEndpoint(): string;
|
|
@@ -353,4 +399,4 @@ declare const groundcover: {
|
|
|
353
399
|
stopReplayRecording: typeof stopReplayRecording;
|
|
354
400
|
};
|
|
355
401
|
|
|
356
|
-
export { type EventTypes, type SDKOptions, groundcover as default };
|
|
402
|
+
export { type EventTypes, type PrivacyLevel, type PrivacyOptions, type Redactor, type SDKOptions, groundcover as default };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("fflate"),t=require("error-stack-parser"),n=require("web-vitals"),i=require("rrweb"),r=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:{},g=1e6;function u(e){return e*g}function f(e){return e/g}var p=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 y+String.fromCharCode.apply(null,m.slice(0,16))},this.generateSpanId=v(8),this.generateId=v(16)}},m=Array(32);function v(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 y="0000000000000000";var b=144e5,w=288e5,E=18e5,S={batchSize:10,batchTimeout:1e4,eventSampleRate:1,sessionSampleRate:1,environment:"development",debug:!1,enableCompression:!0,maskFields:[],enableMasking:!1,enabledEvents:[],tracePropagationUrls:[],tracePropagationHeaders:[],tracePropagationTraceIdHeaderName:"",tracePropagationSpanIdHeaderName:"",traceOrigin:{name:"",value:""},sessionMaxDuration:b},I=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.userIdentifier=t?.userIdentifier||null,this.options={...S,...t?.options||{}},this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration)}static normalizeSessionMaxDuration(e){return void 0===e?b:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>w?(console.warn("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),b):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){t.options&&(this.options={...this.options,...t.options},void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration))),t.userIdentifier&&(this.userIdentifier={...this.userIdentifier,...t.userIdentifier}),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)}};function T(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return h(e),null}}function k(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){h(e)}}function R(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){h(e)}}function L(e,t=0){const n=T(e);if(null===n)return t;const i=Number(n);return Number.isFinite(i)?i:t}var M=class e{constructor(){this.config=null,this.logger=l.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,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 I(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getSessionId(){if(this.sessionId)return this.sessionId;return T("gcId")||""}setSessionId(e){this.sessionId=e,k("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:L("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,k("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:L("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,k("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=E}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)}}R("gcId"),R("gcStartTime"),R("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??b}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)),e?.userIdentifier&&(this.logger.log("[config-manager] updating user identifier"),this.config.userIdentifier={...this.config.userIdentifier,...e.userIdentifier})):this.logger.log("[config-manager] configuration not initialized")}},N=M.getInstance(),q=new p,A=l.getInstance();function z(){const e=N?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function x(e,t="",n=new WeakSet,i=0){try{return i>=10?{[t||"depth_limit"]:"[Depth Limit]"}:null!=(r=e)&&"number"==typeof r.nodeType&&"string"==typeof r.nodeName?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:n.has(e)?{[t||"circular_reference"]:"[Circular]"}:(n.add(e),Object.entries(e).reduce(((e,[r,s])=>{const a=t?`${t}.${r}`:r;return"object"==typeof s&&null!==s?Array.isArray(s)?e[a]=s.map(((e,t)=>"object"==typeof e&&null!==e?x(e,`${a}[${t}]`,n,i+1):e)):Object.assign(e,x(s,a,n,i+1)):e[a]=s,e}),{}))}catch(e){return A.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}var r}function C(e){const t=u(Date.now()),n=q.generateId(),i=e.spanId||q.generateSpanId(),r=e.traceId||q.generateTraceId(),s=e.parentSpanId||"",a=x(e.attributes||{}),o=function(){const e=d?.location;return e?{path:e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/")?e.hash:e.pathname,url:e.href,title:d?.document?.title||""}:{path:"",url:"",title:d?.document?.title||""}}(),l={type:e.type,id:n,spanId:i,parentSpanId:s,traceId:r,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 H({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var _=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.isAvailable=!1,this.logger=l.getInstance(),"undefined"!=typeof Worker&&"undefined"!=typeof URL&&"undefined"!=typeof Blob)try{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);this.worker=new Worker(t),URL.revokeObjectURL(t),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.handleFailure("worker onmessageerror"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){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}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})}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"))}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,i=this.worker;return new Promise(((r,s)=>{const a=setTimeout((()=>{this.pending.has(n)&&this.handleFailure("worker request timed out")}),1e4);this.pending.set(n,{resolve:r,reject:s,timeoutId:a});try{i.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),e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFailure(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()}};_.instance=null;var P=_,D=class{constructor(){this.logger=l.getInstance(),this.config=M.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}}}async compressAsync(e,t){const n=P.getInstance();if(n.isAvailable)try{const{bytes:i,isCompressed:r}=await n.encodeBatch(e,t);return{data:i,isCompressed:r}}catch(e){this.logger.log("[transporter] worker encode failed, using inline fallback:",e)}return this.compressInline(e,t)}async send(e){const t=this.config.getConfig();if(t)try{t?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const n=t.apiKey,i=this.buildEndpoint();if(!n)return void this.logger.log("No API key found");const r=JSON.stringify(e),{data:s,isCompressed:a}=await this.compressAsync(r,!!t?.options?.enableCompression);fetch(i,{method:"POST",headers:{"Content-Type":"application/json",apikey:n,"Content-Encoding":a?"gzip":""},body:s}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){t.options.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();if(!e)return"";const{dsn:t}=e;return`${t}/json/rum`}},F=["navigation","dom.event"],O=class e{constructor(){this.events=[],this.timeoutId=null,this.config=M.getInstance(),this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush()},this.transporter=new D}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){if(e&&this.initialized)try{const t=this.config.getConfig()?.options?.beforeSend,n=this.config.getConfig()?.options?.enrichEvent;if(t&&!t(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){h(e)}n&&(e=n(e)),this.events.push(e);const i=this.config.getConfig()?.options?.batchSize||100;this.events.length>=i&&!F.includes(e.type)&&this.flush()}catch(e){h(e)}}flush(){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,this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),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 e=this.config.getConfig()?.options?.batchTimeout;if(!e)return;this.timeoutId=d.setTimeout((()=>{this.timeoutId=null,this.flush()}),e)}catch(e){h(e)}}detectBrowser(){const e=navigator.userAgent;let t="unknown",n="unknown";const i=navigator.platform||"unknown",r=/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:i,language:navigator.language,mobile:r}}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?.userIdentifier||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};O.instance=null;var j=O,U=class{constructor(){this.logger=l.getInstance(),this.eventsPool=j.getInstance()}},Y="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function B(e,t){try{return e.getAttribute(t)||""}catch{return""}}function K(e){try{const t=Y?.call(e);return"string"==typeof t?t:""}catch{return""}}var X=class extends U{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=M.getInstance(),this.getShouldMaskText=e=>{const t=this.config.getConfig(),n=t?.options?.maskFields||[],i=t?.options?.enableMasking||!1;return(["password"===e.target?.type,e.target?.id?.toLowerCase().includes("password"),e.target?.id?.toLowerCase().includes("credit-card"),e.target?.id?.toLowerCase().includes("cc"),e.target?.className?.toLowerCase().includes("cc"),e.target?.className?.toLowerCase().includes("credit-card"),e.target?.className?.toLowerCase().includes("credit-card"),e.target?.hasAttribute("data-private")].some((e=>e))||n.some((t=>e.target?.id?.toLowerCase().includes(t))))&&i},this.getKeyCode=e=>{if(e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key){const t=this.getShouldMaskText({target:e.target});return t||t?"*":e.key}return""},this.getText=e=>{const t=e.target,n=this.config.getConfig();return n?.options?.enableMasking||!1?"*":H({text:t.innerText||""})},this.getSelector=e=>e.target instanceof Element&&this.generateSelector(e.target)||"",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(!z())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}}buildEvent(e){const t=this.getSelector(e),n=this.getCoordinates(e),i=e.target,r=this.getKeyCode(e),s=this.getText(e);this.logger.log("[dom-events-listener.buildEvent] called");return C({type:"dom.event",attributes:{dom_event_selector:t,dom_event_key_code:r,dom_event_type:e.type,dom_event_coordinates:n||{clientX:0,clientY:0},dom_event_target:{id:B(i,"id"),tagName:K(i),className:B(i,"class"),text:s}}})}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,i=t.maxAttempts||10,r=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===K(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<i;){let e=K(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 r)if("id"!==t&&"class"!==t)try{const n=o.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=K(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||"*"}},$=["log","info","warn","error","debug","assert","trace"],Q=class extends U{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),$.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;$.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){h(e)}}handleEvent(e,t){try{if(!z())return;const n=Array.isArray(e)?e:[e],i=this.formatMessage(n,t);if(!i||i?.includes("groundcoverIgnore"))return;const r=this.extractAttributes(n),s=this.buildEvent({message:i,level:t,attributes:r});this.queueEvent(s)}catch(e){h(e)}}buildEvent({message:e,level:t,attributes:n}){return C({type:"log",attributes:{...n,message:H({text:e}),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{$.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){h(e)}return e}};function W(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 V,G=class extends U{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=M.getInstance(),this.idGenerator=new p,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!z())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});try{t=new URL(e.url).pathname}catch(t){n=new URL(e.url,globalThis.location.href).href}this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const i=this.formatHeaders(e.request.headers),r=this.formatHeaders(e.response.headers),s=e.method?.toUpperCase()||"UNKNOWN",{traceId:a,spanId:o}=this.extractTraceIds(e.request.headers),l=H({text:e.request.body,maxLength:this.maxBodyLength}),c=H({text:e.response.body,maxLength:this.maxBodyLength}),h={type:"HTTP",operation:{name:s},resource_name:t,status:e.status?.toString(),subType:s,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:i,method:e.method},response:{headers:r,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:l},response:{body:c}}},d={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?u(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?u(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:h};return a&&(d.traceId=a),o&&(d.spanId=o),C(d)}}async getResponseBody(e){let t;try{const n=e.body;if(n){const e=n.getReader(),i=new TextDecoder;let r="";for(;;){const{done:t,value:n}=await e.read();if(t){r+=i.decode();break}if(r+=i.decode(n,{stream:!0}),r.length>=this.maxBodyLength){await e.cancel();break}}t=r}else t=""}catch(e){t=`Unable to read response body: ${e}`}return t}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,i=globalThis.XMLHttpRequest.prototype.setRequestHeader;let r;globalThis.XMLHttpRequest.prototype.open=function(n,i,s=!0,a,o){if(r=Date.now(),e.shouldIgnoreRequest(i.toString()))return t.apply(this,[n,i,s,a,o]);const l=new URL(i.toString(),globalThis.location.href).href;return this._requestMethod=n,this._requestUrl=l,this._requestHeaders={},t.apply(this,[n,i,s,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),i.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...t){const i=this._requestUrl?.toString();if(!i||e.shouldIgnoreRequest(i))return n.apply(this,t);if(e.shouldAddTraceHeader(i)){const t=e.config.getConfig(),n=e.getTraceIds();t?.options?.traceOrigin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),n&&(t?.options?.tracePropagationTraceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:n.decimalSpanId}),Boolean(t?.options?.tracePropagationHeaders)&&t?.options?.tracePropagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:n.traceparent})})),t?.options?.tracePropagationHeaders?.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,i]=e.split(": ");t&&i&&(n[t.trim()]=i.trim())}));const i=W(this._requestBody),s=W(""===this.responseType||"text"===this.responseType?this.responseText:this.response),a={timestamp:r,end_time:t,method:this._requestMethod,url:this._requestUrl,body:i,status:this.status,request:{headers:this._requestHeaders||{},body:i},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?.traceOrigin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),!n)return;t?.options?.tracePropagationTraceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:n.decimalSpanId});const i=t?.options?.tracePropagationHeaders;(i?.length?i:["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[i,r]=t;r={...r||{}},t[1]=r;const s=i instanceof Request,a=r?.method||"GET",o=r?.body||"",l=i instanceof Request?i.url:i.toString();if(this.shouldIgnoreRequest(l))return e.apply(globalThis,t);const c=this.shouldAddTraceHeader(l);r||(t[1]={},r=t[1]),r.headers=this.normalizeHeaders(s?i.headers:void 0,r.headers),c&&this.addTraceHeaders(r);const h=this.extractHeadersRecord(r.headers),d=W(o);return e.apply(globalThis,t).then((e=>{const t=Date.now(),i={};e.headers.forEach(((e,t)=>{i[t]=e}));const r={method:a,url:l,timestamp:n,body:d,status:e.status,end_time:t,request:{headers:h,body:d},response:{headers:i,body:""}};try{i["content-type"]?.includes("text/event-stream")?(r.response.body="[unreadable response body]",this.handleEvent(r)):this.getResponseBody(e.clone()).then((e=>{r.response.body=e,this.handleEvent(r)})).catch((e=>{r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}))}catch(e){r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}return e})).catch((e=>{const t=Date.now();let n="NetworkError";const i=e.message||"Unknown network error";e instanceof TypeError&&i.includes("Failed to fetch")?n="ERR_NETWORK_FAILURE":i.includes("Name not resolved")?n="ERR_NAME_NOT_RESOLVED":i.includes("Connection refused")&&(n="ERR_CONNECTION_REFUSED");const r={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(r),e}))}}formatHeaders(e){const t=["authorization","cookie","set-cookie"];return Object.entries(e)?.reduce(((e,[n,i])=>{const r=n.toLowerCase();return t.includes(r)||/(token|key|secret|password)/i.test(r)?e[n]="[REDACTED]":e[n]=H({text:i}),e}),{})}extractTraceIds(e){const t=this.config.getConfig();let n="",i="";if(t?.options?.tracePropagationTraceIdHeaderName){const i=e[t.options.tracePropagationTraceIdHeaderName];i&&"string"==typeof i&&(n=i)}if(t?.options?.tracePropagationSpanIdHeaderName){const n=e[t.options.tracePropagationSpanIdHeaderName];n&&"string"==typeof n&&(i=n)}if(!n||!i){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]),!i&&e[2]&&16===e[2].length&&(i=e[2]))}}return{traceId:n,spanId:i}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracePropagationHeaders?.length)for(const n of t.options.tracePropagationHeaders){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,i;try{n=BigInt("0x"+t).toString(10),i=BigInt("0x"+e).toString(10)}catch(r){this.logger.log("[network-events-listener.getTraceIds] error",{error:r}),n=t,i=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:n,decimalSpanId:i}}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?.tracePropagationUrls?.length)return!1;const n=t.options.tracePropagationUrls?.some((t=>{const n=t.replace(/\*/g,".*"),i=new RegExp(`^${n}$`),r=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return i.test(r)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:n}),n}},J=class extends U{constructor(){super(...arguments),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const i=this.buildEvent(n,t);this.queueEvent(i)}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){return C({type:"exception",attributes:{error_type:e.name||"Error",error_message:e.message||"Unknown error",error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${H({text:e.message,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:t?.metadata}})}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:i,colno:r}=t||{};n&&!e.fileName&&Object.defineProperty(e,"fileName",{value:n}),i&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:i}),r&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:r})}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[]}}},Z=class extends U{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);return C({type:"navigation",attributes:{page_url:d.location.href,metadata:this.activeNavigation?.metadata,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("#/"),i=n(e.hash)||n(t.hash);(e.pathname!==t.pathname||i&&e.hash!==t.hash)&&(this.currentUrl=d.location.href,this.handleEvent())}catch(e){h(e)}}},ee=class extends U{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"),i={count:n.length,totalSize:0,totalDuration:0,byType:{}};n.forEach((e=>{const t=e,n=t.transferSize||0,r=t.duration,s=t.initiatorType;i.totalSize+=n,i.totalDuration+=r,i.byType[s]||(i.byType[s]={count:0,size:0,duration:0}),i.byType[s].count++,i.byType[s].size+=n,i.byType[s].duration+=r}));return C({type:"pageload",attributes:{page_url:d?.location?.href||"",page_load_time:t,page_referrer:d?.document?.referrer||"",page_resources:i}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},te=class extends U{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!z())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 C({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)}}},ne=class{constructor(){this.logger=l.getInstance(),this.eventsPool=j.getInstance(),this.configManager=M.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?.sessionReplay?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0;this.stopFn=i.record({...t?{blockSelector:t}:{},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();let n;const i=P.getInstance();if(i.isAvailable)try{n=await i.packReplay(e.events)}catch(t){h(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),n=e.events.map((e=>r.pack(e)))}else n=e.events.map((e=>r.pack(e)));this.configManager.getSessionId()===t?this.enqueueReplayEvent(n,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during worker pack",{drained:n.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>r.pack(e)));this.enqueueReplayEvent(t,e.containsFullSnapshot,e.snapshotTimestamp)}drainBatch(){const e=this.events,t=this.batchContainsFullSnapshot,n=this.fullSnapshotTimestamp;return this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,{events:e,containsFullSnapshot:t,snapshotTimestamp:n}}enqueueReplayEvent(e,t,n){try{const i={_gc_replay_data:{events:e}};t&&(i.replay_is_full_snapshot=!0,i.replay_full_snapshot_timestamp=n);const r=C({type:"replay",attributes:i});this.eventsPool.addEvent(r),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()}},ie=["pointerdown","keydown","scroll","touchstart","mousemove"],re=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,ie.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",E,"ms");try{this.callbacks.onIdle()}catch(e){h(e)}}),E)}catch(e){h(e)}}destroy(){if(this.installed){this.installed=!1,ie.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}}}},se=new Set(["dom.event","navigation","pageload","custom"]),ae=class{constructor(){this.logger=l.getInstance(),this.eventsPool=j.getInstance(),this.configManager=M.getInstance(),this.idGenerator=new p,this.logEventsListener=null,this.domEventsListener=null,this.errorsEventsListener=null,this.networkEventsListener=null,this.navigationListener=null,this.performanceListener=null,this.pageLoadListener=null,this.sessionReplayListener=null,this.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 re({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,i=[];(n||t?.includes("pageload"))&&(this.pageLoadListener=new ee,this.pageLoadListener.initialize(),i.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new X,this.domEventsListener.initialize(),i.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new Q,this.logEventsListener.initialize(),i.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new J,this.errorsEventsListener.initialize(),i.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new G,this.networkEventsListener.initialize(),i.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new te,this.performanceListener.initialize(),i.push("performance")),this.navigationListener=new Z({isEnabled:n||t?.includes("navigation")}),this.navigationListener.initialize(),i.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",i)}sendCustomEvent(e){this.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=C({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 i={...n||{}};delete i.message,delete i.level,delete i.location;const r=C({type:"log",attributes:{...i,message:H({text:e}),level:t}});this.eventsPool.addEvent(r)}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}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 ne;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),i=this.configManager.getSessionMaxDuration(),r=n>=i;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:i,expired:r}),r&&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(),se.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 i=(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{i("stop replay",(()=>this.stopReplayListener())),i("flush events",(()=>this.eventsPool.flush())),i("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(u(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),i("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}},oe="gcSample",le=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 ae,this.idGenerator=new p;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=M.getInstance();t.initialize(e);j.getInstance().initialize(),P.getInstance();const n=e.sessionId,i=t.getSessionId();n&&n!==i?(t.setSessionId(n),t.setSessionStartTime(u(Date.now())),this.logger.log("[session-manager] using provided sessionId:",n)):n?(t.setSessionId(n),this.logger.log("[session-manager] continuing provided sessionId:",n)):i||t.setSessionId(this.idGenerator.generateId());const r=Date.now(),s=f(t.getSessionStartTime());if(s>0&&r-s>=-6e4){if(t.isSessionExpired(r)||t.isSessionInactive(r)){const e=t.isSessionExpired(r)?"persisted session past cap":"inactivity gap across reload",n=t.getSessionId(),i=this.idGenerator.generateId();t.setSessionId(i),t.setSessionStartTime(u(r)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:i})}}else t.setSessionStartTime(u(r));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=T(oe);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 k(oe,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");M.getInstance().updateConfig({userIdentifier:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");M.getInstance().updateConfig(e)}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?M.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=j.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),i=M.getInstance();i.setSessionId(n),i.setSessionStartTime(u(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(){if(this.initialized){this.instrumentationManager.uninstrument(),j.getInstance().destroy();try{P.getInstance().terminate()}catch(e){this.logger.log("[session-manager] worker terminate failed during destroy:",e)}M.getInstance().clearSessionState(),this.initialized=!1}}},ce=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 he={init:function(e){try{V=new le({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",userIdentifier:e?.userIdentifier,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),ce.manager=V}catch(e){h(e)}},identifyUser:function(e){V?V.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){V&&V.sendCustomEvent(e)},captureException:function(e,t){V&&V.captureException(e,t)},logger:ce,updateConfig:function(e){V&&V.updateConfig(e)},startNavigation:function(e){V?V.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){V?V.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return V?V.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(V)try{await V.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(){V?V.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){V?V.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=he}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var de=he;module.exports=de;
|
|
1
|
+
"use strict";var e=require("fflate"),t=require("error-stack-parser"),i=require("web-vitals"),n=require("rrweb"),s=require("@rrweb/packer");function r(e){return e&&e.__esModule?e:{default:e}}var a=r(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 d(e){c.log("[error-handler.handleError] called",e,{groundcoverIgnore:!0})}var h="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},g=1e6;function u(e){return e*g}function p(e){return e/g}var m=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)f[e]=Math.floor(16*Math.random())+48,f[e]>=58&&(f[e]+=39);return y+String.fromCharCode.apply(null,f.slice(0,16))},this.generateSpanId=v(8),this.generateId=v(16)}},f=Array(32);function v(e){return function(){for(let t=0;t<2*e;t++)f[t]=Math.floor(16*Math.random())+48,f[t]>=58&&(f[t]+=39);return String.fromCharCode.apply(null,f.slice(0,2*e))}}var y="0000000000000000";var b=144e5,E=288e5,S=18e5,I={batchSize:10,batchTimeout:1e4,eventSampleRate:1,sessionSampleRate:1,environment:"development",debug:!1,enableCompression:!0,maskFields:[],enableMasking:!1,privacy:{level:"mask-user-input"},enabledEvents:[],tracePropagationUrls:[],tracePropagationHeaders:[],tracePropagationTraceIdHeaderName:"",tracePropagationSpanIdHeaderName:"",traceOrigin:{name:"",value:""},sessionMaxDuration:b},T=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.userIdentifier=t?.userIdentifier||null,this.providedOptions={...t?.options||{}},this.options={...I,...t?.options||{}},this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration)}static normalizeSessionMaxDuration(e){return void 0===e?b:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>E?(console.warn("[groundcover] sessionMaxDuration must be a finite number between 60000 ms (1 minute) and 28800000 ms (8 hours); falling back to the 4-hour default"),b):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){if(t.options){const i=t.options.privacy?{...this.providedOptions?.privacy,...t.options.privacy}:void 0,n=t.options.privacy?{...this.options.privacy,...t.options.privacy}:void 0;this.providedOptions={...this.providedOptions,...t.options},this.options={...this.options,...t.options},i&&(this.providedOptions.privacy=i,this.options.privacy=n),void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration))}t.userIdentifier&&(this.userIdentifier={...this.userIdentifier,...t.userIdentifier}),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)}};function w(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function R(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return d(e),null}}function k(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){d(e)}}function L(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){d(e)}}function N(e,t=0){const i=R(e);if(null===i)return t;const n=Number(i);return Number.isFinite(n)?n:t}var C=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){d(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){d(e)}}this.config||(this.config=new T(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,i=!!e&&Object.prototype.hasOwnProperty.call(e,"enableMasking"),n=function(e){return"mask-user-input"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level);let s;s=n||(i?e?.enableMasking?"mask-all":"allow":"mask-user-input");const r="allow"===s,a=w(t?.maskSelectors);let o;o="mask-all"===s||!r&&"function"==typeof t?.maskTextFn?["*",...a].join(", "):"mask-user-input"===s&&a.length?a.join(", "):void 0;const l=e=>!r&&(e??!0);return{level:s,maskTextSelector:o,maskSelectors:a,maskInputs:!r,maskNetworkBodies:l(t?.maskNetworkBodies),maskNetworkQueryParams:l(t?.maskNetworkQueryParams),maskLogs:l(t?.maskLogs),maskErrors:l(t?.maskErrors),sensitiveKeys:w(t?.sensitiveKeys),maskFieldsLegacy:w(e?.maskFields),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:"function"==typeof t?.maskTextFn?t.maskTextFn:void 0,maskInputFn:"function"==typeof t?.maskInputFn?t.maskInputFn:void 0}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return R("gcId")||""}setSessionId(e){this.sessionId=e,k("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:N("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,k("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:N("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,k("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=S}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){d(e)}}L("gcId"),L("gcStartTime"),L("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??b}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-p(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),e?.userIdentifier&&(this.logger.log("[config-manager] updating user identifier"),this.config.userIdentifier={...this.config.userIdentifier,...e.userIdentifier})):this.logger.log("[config-manager] configuration not initialized")}},H="[REDACTED]",x=["authorization","cookie","set-cookie"],z=/(token|key|secret|passwd|password|auth|bearer|credential)/i,M=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i;function q(e,t){if(!e)return!1;if(M.test(e))return!0;if(t?.length){const i=e.toLowerCase();return t.some((e=>e&&i.includes(e.toLowerCase())))}return!1}function _(e,t){return q(e,t)||z.test(e)}function P(e,t){if(!e)return e;try{return e.split("&").map((e=>{const i=e.indexOf("=");if(-1===i)return e;const n=e.slice(0,i);let s=n;try{s=decodeURIComponent(n)}catch{}return q(s,t)?`${n}=${encodeURIComponent(H)}`:e})).join("&")}catch{return e}}function D(e,t){if(!e)return e;const i=e.indexOf("?");if(-1===i)return e;const n=e.slice(0,i),s=e.slice(i+1),r=s.indexOf("#"),a=-1===r?s:s.slice(0,r),o=-1===r?"":s.slice(r);return`${n}?${P(a,t)}${o}`}function A(e,t,i){if(i>8)return null!==e&&"object"==typeof e?H:e;if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map((e=>A(e,t,i+1)));const n={};for(const[s,r]of Object.entries(e))q(s,t)?n[s]=H:n[s]=A(r,t,i+1);return n}function O(e,t){if(!e)return e;try{let i=e.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,i)=>_(i,t)?`"${i}":"${H}"`:e));return i=i.replace(/([\w.-]{1,64})=([^\s&,;]+)/g,((e,i)=>_(i,t)?`${i}=${H}`:e)),i=i.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,i)=>_(i,t)?`${i}: ${H}`:e)),i}catch(t){return d(t),e}}function F(e,t){return A(e,t,0)}function j(e,t,i){if(!t||"string"!=typeof e)return e;try{const n=t(e,i);return"string"==typeof n?n:e}catch(t){return d(t),e}}var $=C.getInstance(),K=new m,U=l.getInstance();function B(){const e=$?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function X(e,t="",i=new WeakSet,n=0){try{return n>=10?{[t||"depth_limit"]:"[Depth Limit]"}:null!=(s=e)&&"number"==typeof s.nodeType&&"string"==typeof s.nodeName?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:i.has(e)?{[t||"circular_reference"]:"[Circular]"}:(i.add(e),Object.entries(e).reduce(((e,[s,r])=>{const a=t?`${t}.${s}`:s;return"object"==typeof r&&null!==r?Array.isArray(r)?e[a]=r.map(((e,t)=>"object"==typeof e&&null!==e?X(e,`${a}[${t}]`,i,n+1):e)):Object.assign(e,X(r,a,i,n+1)):e[a]=r,e}),{}))}catch(e){return U.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{i.delete(e)}var s}function V(e){const t=u(Date.now()),i=K.generateId(),n=e.spanId||K.generateSpanId(),s=e.traceId||K.generateTraceId(),r=e.parentSpanId||"",a=X(e.attributes||{}),o=function(){const e=h?.location;if(!e)return{path:"",url:"",title:h?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),i=t?e.hash:e.pathname,n=$.getPrivacy(),s="allow"!==n.level&&n.maskNetworkQueryParams;return{path:s&&t?D(i,n.sensitiveKeys):i,url:s?D(e.href,n.sensitiveKeys):e.href,title:h?.document?.title||""}}(),l={type:e.type,id:i,spanId:n,parentSpanId:r,traceId:s,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 W({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var G=class{constructor(){this.logger=l.getInstance(),this.config=C.getInstance()}compress(t){const i=this.config.getConfig();if(!i?.options?.enableCompression)return{data:(new TextEncoder).encode(t),isCompressed:!1};try{const i=e.strToU8(t);return{data:e.gzipSync(i),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(t),isCompressed:!1}}}async send(e){const t=this.config.getConfig();if(t)try{t?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const i=t.apiKey,n=this.buildEndpoint();if(!i)return void this.logger.log("No API key found");const s=JSON.stringify(e),{data:r,isCompressed:a}=this.compress(s);fetch(n,{method:"POST",headers:{"Content-Type":"application/json",apikey:i,"Content-Encoding":a?"gzip":""},body:r}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){t.options.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();if(!e)return"";const{dsn:t}=e;return`${t}/json/rum`}},J=["navigation","dom.event"],Q=class e{constructor(){this.events=[],this.timeoutId=null,this.config=C.getInstance(),this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush()},this.transporter=new G}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){d(e)}}destroy(){try{null!==this.timeoutId&&(h.clearTimeout(this.timeoutId),this.timeoutId=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.events=[],this.initialized=!1}catch(e){d(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){if(e&&this.initialized)try{const t=this.config.getConfig()?.options?.beforeSend,i=this.config.getConfig()?.options?.enrichEvent;if(t&&!t(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){d(e)}i&&(e=i(e)),this.events.push(e);const n=this.config.getConfig()?.options?.batchSize||100;this.events.length>=n&&!J.includes(e.type)&&this.flush()}catch(e){d(e)}}flush(){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,this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[],this.scheduleFlush()}catch(e){d(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){d(e)}}scheduleFlush(){try{null!==this.timeoutId&&(h.clearTimeout(this.timeoutId),this.timeoutId=null);const e=this.config.getConfig()?.options?.batchTimeout;if(!e)return;this.timeoutId=h.setTimeout((()=>{this.timeoutId=null,this.flush()}),e)}catch(e){d(e)}}detectBrowser(){const e=navigator.userAgent;let t="unknown",i="unknown";const n=navigator.platform||"unknown",s=/Mobile|Android|iPhone|iPad|iPod/i.test(e);return/Edg/.test(e)?(t="Edge",i=e.match(/Edg\/([\d.]+)/)?.[1]||i):/Chrome/.test(e)&&!/Chromium/.test(e)?(t="Chrome",i=e.match(/Chrome\/([\d.]+)/)?.[1]||i):/Firefox/.test(e)?(t="Firefox",i=e.match(/Firefox\/([\d.]+)/)?.[1]||i):/Safari/.test(e)&&!/Chrome/.test(e)?(t="Safari",i=e.match(/Version\/([\d.]+)/)?.[1]||i):/Trident/.test(e)?(t="Internet Explorer",i=/rv:([^)]+)\)/i.test(e)?e.match(/rv:([^)]+)\)/i)?.[1]||i:e.match(/MSIE ([^;]+)/)?.[1]||i):/OPR/.test(e)&&(t="Opera",i=e.match(/OPR\/([\d.]+)/)?.[1]||i),{name:t,version:i,platform:n,language:navigator.language,mobile:s}}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?.userIdentifier||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};Q.instance=null;var Y=Q,Z=class{constructor(){this.logger=l.getInstance(),this.eventsPool=Y.getInstance()}},ee="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function te(e,t){try{return e.getAttribute(t)||""}catch{return""}}function ie(e){try{const t=ee?.call(e);return"string"==typeof t?t:""}catch{return""}}var ne=class extends Z{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=C.getInstance(),this.isSensitiveElement=(e,t,i)=>{if(!e)return!1;if("password"===e.type)return!0;if(te(e,"data-private"))return!0;const n=["id","name","class","aria-label","placeholder"].map((t=>te(e,t))).filter(Boolean);if(n.some((e=>q(e,t))))return!0;if(i.length){const e=n.map((e=>e.toLowerCase()));if(i.some((t=>e.some((e=>e.includes(t.toLowerCase()))))))return!0}return!1},this.getShouldMaskText=e=>{const t=this.config.getPrivacy();if("allow"===t.level)return!1;const i=e.target;if(!i)return!1;try{if(t.maskSelectors.length&&t.maskSelectors.some((e=>{try{return i.matches?.(e)}catch{return!1}})))return!0}catch{}if(this.isSensitiveElement(i,t.sensitiveKeys,t.maskFieldsLegacy))return!0;if("mask-all"===t.level)return!0;const n=ie(i).toLowerCase();return"input"===n||"textarea"===n||"select"===n},this.getKeyCode=e=>{if(e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key){return this.getShouldMaskText({target:e.target})?"*":e.key}return""},this.getText=e=>{const t=e.target;return this.getShouldMaskText({target:e.target||null})?"*":W({text:t?.innerText||""})},this.getSelector=e=>e.target instanceof Element&&this.generateSelector(e.target)||"",this.getCoordinates=e=>{if({mouseup:!0,mousedown:!0,mousemove:!0,mouseover:!0}[e.type]){const{clientX:t,clientY:i}=e||{};return{clientX:t,clientY:i}}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){d(e)}};this.eventHandlers.push({type:e,handler:t}),h?.addEventListener(e,t)}))}catch(e){d(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!B())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){d(e)}}buildEvent(e){const t=this.getSelector(e),i=this.getCoordinates(e),n=e.target,s=this.getKeyCode(e),r=this.getText(e);this.logger.log("[dom-events-listener.buildEvent] called");return V({type:"dom.event",attributes:{dom_event_selector:t,dom_event_key_code:s,dom_event_type:e.type,dom_event_coordinates:i||{clientX:0,clientY:0},dom_event_target:{id:te(n,"id"),tagName:ie(n),className:te(n,"class"),text:r}}})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){d(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const i=t.root||document.body||document.documentElement,n=t.maxAttempts||10,s=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===ie(e).toLowerCase())return"html";let r="",a=0,o=e;const l=[];for(;o&&o!==i&&o!==document.documentElement&&a<n;){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 s)if("id"!==t&&"class"!==t)try{const i=o.getAttribute(t);i&&(e+=`[${t}="${i.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=ie(o).toLowerCase()||"*"}l.unshift(e||"*"),r=l.join(" > ");try{if(1===i.querySelectorAll(r).length)return r}catch(e){l.shift(),r=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return r||"*"}},se=["log","info","warn","error","debug","assert","trace"],re=class extends Z{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=C.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),se.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){d(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){d(e)}}destroy(){try{if(!this.isInitialized)return;se.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){d(e)}}handleEvent(e,t){try{if(!B())return;const i=Array.isArray(e)?e:[e],n=this.formatMessage(i,t);if(!n||n?.includes("groundcoverIgnore"))return;const s=this.extractAttributes(i),r=this.buildEvent({message:n,level:t,attributes:s});this.queueEvent(r)}catch(e){d(e)}}buildEvent({message:e,level:t,attributes:i}){const n=this.config.getPrivacy(),s=n.maskLogs&&"allow"!==n.level;let r=s?O(e,n.sensitiveKeys):e;"allow"!==n.level&&(r=j(r,n.redact,{kind:"log"}));return V({type:"log",attributes:{...s&&i?F(i,n.sensitiveKeys):i,message:W({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){d(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const i of e)null!==i&&"object"==typeof i&&"[object Object]"===Object.prototype.toString.call(i)&&Object.assign(t,i);return delete t.message,delete t.level,delete t.location,t}catch(e){return void d(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 d(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{se.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){d(e)}return e}};function ae(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 d(`Failed to format body: ${e}`),"[unreadable body]"}}var oe,le=class extends Z{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=C.getInstance(),this.idGenerator=new m,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!B())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){d(e)}},this.buildEvent=e=>{let t=e.url,i=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const n=this.config.getPrivacy(),s="allow"===n.level;try{t=new URL(e.url).pathname}catch(r){i=new URL(e.url,globalThis.location.href).href,n.maskNetworkQueryParams&&!s&&(t=D(t,n.sensitiveKeys))}n.maskNetworkQueryParams&&!s&&(i=D(i,n.sensitiveKeys)),s||(i=j(i,n.redact,{kind:"query",url:i})),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:i});const r=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),d=n.maskNetworkBodies&&!s,h=e=>{const t=d?function(e,t){if(!e)return e;const i=e.trim();if(i.length<=1e5&&(i.startsWith("{")||i.startsWith("[")))try{const e=JSON.parse(i);return JSON.stringify(A(e,t,0))}catch{}return e.includes("=")&&!e.includes("{")?P(e,t):O(e,t)}(e,n.sensitiveKeys):e;return s?t:j(t,n.redact,{kind:"body",url:i})},g=W({text:h(e.request.body),maxLength:this.maxBodyLength}),p=W({text:h(e.response.body),maxLength:this.maxBodyLength}),m={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:i},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:r,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:g},response:{body:p}}},f={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?u(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?u(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:m};return l&&(f.traceId=l),c&&(f.spanId=c),V(f)}}async getResponseBody(e){let t;try{const i=e.clone().body;if(i){let e,n=i.getReader(),s=new TextDecoder,r="";for(;!(e=await n.read()).done;){let t=e.value;r+=s.decode(t)}t=r}else t=""}catch(e){t=`Unable to clone response: ${e}`}return t}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 i=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(i).test(e)}return e===t}))}catch(e){return d(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){d(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,i=globalThis.XMLHttpRequest.prototype.send,n=globalThis.XMLHttpRequest.prototype.setRequestHeader;let s;globalThis.XMLHttpRequest.prototype.open=function(i,n,r=!0,a,o){if(s=Date.now(),e.shouldIgnoreRequest(n.toString()))return t.apply(this,[i,n,r,a,o]);const l=new URL(n.toString(),globalThis.location.href).href;return this._requestMethod=i,this._requestUrl=l,this._requestHeaders={},t.apply(this,[i,n,r,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),n.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...t){const n=this._requestUrl?.toString();if(!n||e.shouldIgnoreRequest(n))return i.apply(this,t);if(e.shouldAddTraceHeader(n)){const t=e.config.getConfig(),i=e.getTraceIds();t?.options?.traceOrigin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),i&&(t?.options?.tracePropagationTraceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:i.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:i.decimalSpanId}),Boolean(t?.options?.tracePropagationHeaders)&&t?.options?.tracePropagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:i.traceparent})})),t?.options?.tracePropagationHeaders?.length||e.addHeaderToXhrRequest({request:this,headerName:"traceparent",headerValue:i.traceparent}))}return this._requestBody=t[0]||"",this.addEventListener("load",(()=>{const t=Date.now(),i={};this.getAllResponseHeaders().split(/\r?\n/).forEach((e=>{const[t,n]=e.split(": ");t&&n&&(i[t.trim()]=n.trim())}));const n=ae(this._requestBody),r=ae(""===this.responseType||"text"===this.responseType?this.responseText:this.response),a={timestamp:s,end_time:t,method:this._requestMethod,url:this._requestUrl,body:n,status:this.status,request:{headers:this._requestHeaders||{},body:n},response:{headers:i,body:r}};e.handleEvent(a)})),i.apply(this,t)}}normalizeHeaders(e,t){try{const i=e?new Headers(e):new Headers;return t?(t instanceof Headers?t.forEach(((e,t)=>i.set(t,e))):Array.isArray(t)?new Headers(t).forEach(((e,t)=>i.set(t,e))):"object"==typeof t&&Object.entries(t).forEach((([e,t])=>i.set(e,t))),i):i}catch{return new Headers}}addTraceHeaders(e){const t=this.config.getConfig(),i=this.getTraceIds();if(t?.options?.traceOrigin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),!i)return;t?.options?.tracePropagationTraceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:i.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:i.decimalSpanId});const n=t?.options?.tracePropagationHeaders;(n?.length?n:["traceparent"]).forEach((t=>{this.addHeaderToFetchRequest({init:e,headerName:t,headerValue:i.traceparent})}))}extractHeadersRecord(e){const t={};return e instanceof Headers&&e.forEach(((e,i)=>{t[i]=e})),t}patchFetch(){const e=globalThis.fetch;globalThis.fetch=(...t)=>{const i=Date.now();let[n,s]=t;s={...s||{}},t[1]=s;const r=n instanceof Request,a=s?.method||"GET",o=s?.body||"",l=n instanceof Request?n.url:n.toString();if(this.shouldIgnoreRequest(l))return e.apply(globalThis,t);const c=this.shouldAddTraceHeader(l);s||(t[1]={},s=t[1]),s.headers=this.normalizeHeaders(r?n.headers:void 0,s.headers),c&&this.addTraceHeaders(s);const d=this.extractHeadersRecord(s.headers),h=ae(o);return e.apply(globalThis,t).then((e=>{const t=Date.now(),n=e.clone(),s={};n.headers.forEach(((e,t)=>{s[t]=e}));const r={method:a,url:l,timestamp:i,body:h,status:n.status,end_time:t,request:{headers:d,body:h},response:{headers:s,body:""}};try{s["content-type"]?.includes("text/event-stream")?(r.response.body="[unreadable response body]",this.handleEvent(r)):this.getResponseBody(n).then((e=>{r.response.body=e,this.handleEvent(r)})).catch((e=>{r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}))}catch(e){r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}return e})).catch((e=>{const t=Date.now();let i="NetworkError";const n=e.message||"Unknown network error";e instanceof TypeError&&n.includes("Failed to fetch")?i="ERR_NETWORK_FAILURE":n.includes("Name not resolved")?i="ERR_NAME_NOT_RESOLVED":n.includes("Connection refused")&&(i="ERR_CONNECTION_REFUSED");const s={method:a,url:l,body:h,status:0,end_time:t,request:{headers:d,body:h},response:{headers:{},body:""},error:{type:i}};throw this.handleEvent(s),e}))}}formatHeaders(e){const t=this.config.getPrivacy(),i="allow"===t.level,n=function(e,t){return e?Object.entries(e).reduce(((e,[i,n])=>{const s=i.toLowerCase();return x.includes(s)||z.test(s)||q(i,t)?e[i]=H:e[i]=n,e}),{}):e}(e,i?void 0:t.sensitiveKeys);return Object.entries(n)?.reduce(((e,[n,s])=>{if("[REDACTED]"===s)return e[n]=s,e;const r=i?s:j(s,t.redact,{kind:"header"});return e[n]=W({text:r}),e}),{})}extractTraceIds(e){const t=this.config.getConfig();let i="",n="";if(t?.options?.tracePropagationTraceIdHeaderName){const n=e[t.options.tracePropagationTraceIdHeaderName];n&&"string"==typeof n&&(i=n)}if(t?.options?.tracePropagationSpanIdHeaderName){const i=e[t.options.tracePropagationSpanIdHeaderName];i&&"string"==typeof i&&(n=i)}if(!i||!n){const t=this.extractTraceparentHeader(e);if(t){const e=t.split("-");4===e.length&&"00"===e[0]&&(!i&&e[1]&&32===e[1].length&&(i=e[1]),!n&&e[2]&&16===e[2].length&&(n=e[2]))}}return{traceId:i,spanId:n}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracePropagationHeaders?.length)for(const i of t.options.tracePropagationHeaders){const t=e[i];if(t&&"string"==typeof t)return t}const i=e.traceparent;return i&&"string"==typeof i?i:""}getTraceIds(){const e=this.idGenerator.generateSpanId(),t=this.idGenerator.generateTraceId();let i,n;try{i=BigInt("0x"+t).toString(10),n=BigInt("0x"+e).toString(10)}catch(s){this.logger.log("[network-events-listener.getTraceIds] error",{error:s}),i=t,n=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:i,decimalSpanId:n}}addHeaderToXhrRequest({request:e,headerName:t,headerValue:i}){if(this.logger.log("[network-events-listener.addHeaderToXhrRequest] called",{request:e,headerName:t,headerValue:i}),this.isValidHeaderName(t))try{e.setRequestHeader(t,i),e._requestHeaders[t]=i}catch(e){this.logger.log("[network-events-listener.addHeaderToXhrRequest] Error setting header",{error:e,headerName:t,headerValue:i})}else this.logger.log("[network-events-listener.addHeaderToXhrRequest] Invalid header name",{headerName:t})}addHeaderToFetchRequest({init:e,headerName:t,headerValue:i}){if(this.logger.log("[network-events-listener.addHeaderToFetchRequest] called",{init:e,headerName:t,headerValue:i}),this.isValidHeaderName(t))try{e.headers instanceof Headers?e.headers.set(t,i):e.headers={...e.headers,[t]:i}}catch(e){this.logger.log("[network-events-listener.addHeaderToFetchRequest] Error setting header",{error:e,headerName:t,headerValue:i})}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?.tracePropagationUrls?.length)return!1;const i=t.options.tracePropagationUrls?.some((t=>{const i=t.replace(/\*/g,".*"),n=new RegExp(`^${i}$`),s=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return n.test(s)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:i}),i}},ce=class extends Z{constructor(){super(...arguments),this.config=C.getInstance(),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let i;if(e instanceof Error)i=e,this.enhanceError(i);else if(e instanceof ErrorEvent){if(i=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(i.message))return;this.enhanceError(i,e)}else{if(!(e instanceof PromiseRejectionEvent))return;i=this.createUnhandledRejectionError(e)}const n=this.buildEvent(i,t);this.queueEvent(n)}catch(e){d(e)}}}initialize(){h?.addEventListener("error",this.handleEvent),h?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){h?.removeEventListener("error",this.handleEvent),h?.removeEventListener("unhandledrejection",this.handleEvent)}buildEvent(e,t){const i=this.config.getPrivacy(),n=i.maskErrors&&"allow"!==i.level,s=e.message||"Unknown error";let r=n?O(s,i.sensitiveKeys):s;"allow"!==i.level&&(r=j(r,i.redact,{kind:"error"}));const a=n&&t?.metadata?F(t.metadata,i.sensitiveKeys):t?.metadata;return V({type:"exception",attributes:{error_type:e.name||"Error",error_message:r,error_stacktrace:this.buildStackTrace(e,n,i.sensitiveKeys),error_fingerprint:`${e.name}:${W({text:r,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:a}})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){d(e)}}enhanceError(e,t){const{filename:i,lineno:n,colno:s}=t||{};i&&!e.fileName&&Object.defineProperty(e,"fileName",{value:i}),n&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:n}),s&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:s})}createUnhandledRejectionError(e){let t;if(e.reason instanceof Error)t=e.reason;else{const i="object"==typeof e.reason?JSON.stringify(e.reason,null,2):String(e.reason);t=new Error(i),t.name="UnhandledRejection",Object.defineProperty(t,"originalReason",{value:e.reason,enumerable:!1})}return t}buildStackTrace(e,t=!1,i=[]){if(!e)return[];try{return a.default.parse(e).map((e=>{const n=e.fileName||"unknown";return{filename:t?D(n,i):n,function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0}}))}catch(e){return[]}}},de=class extends Z{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=h.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){d(e)}}isInBrowserEnvironment(){try{return void 0!==h&&void 0!==h.location&&void 0!==h.history&&"function"==typeof h.addEventListener}catch(e){return d(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 i=e.apply(history,t);return this.handleLocationChange(),i},history.replaceState=(...e)=>{const i=t.apply(history,e);return this.handleLocationChange(),i},h&&"function"==typeof h.addEventListener&&(h.addEventListener("popstate",this.popStateHandler),h.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){d(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState=this.originalPushState,history.replaceState=this.originalReplaceState),h&&"function"==typeof h.removeEventListener&&(h.removeEventListener("popstate",this.popStateHandler),h.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){d(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){d(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",h.location.href);const e=C.getInstance().getPrivacy(),t="allow"===e.level,i=h.location.href,n=this.activeNavigation?.metadata;return V({type:"navigation",attributes:{page_url:!t&&e.maskNetworkQueryParams?D(i,e.sensitiveKeys):i,metadata:!t&&n?F(n,e.sensitiveKeys):n,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){d(e)}}startNavigation(e){this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:h.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===h.location.href)return;let e,t;try{e=new URL(h.location.href),t=new URL(this.currentUrl)}catch(e){return void d(e)}const i=e=>e.startsWith("#/"),n=i(e.hash)||i(t.hash);(e.pathname!==t.pathname||n&&e.hash!==t.hash)&&(this.currentUrl=h.location.href,this.handleEvent())}catch(e){d(e)}}},he=class extends Z{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",h),"complete"===h?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):h?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),d(e)}}destroy(){h?.removeEventListener("load",this.loadEventHandler)}handleEvent(){try{this.logger.log("[page-load-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){d(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,i=performance.getEntriesByType("resource"),n={count:i.length,totalSize:0,totalDuration:0,byType:{}};i.forEach((e=>{const t=e,i=t.transferSize||0,s=t.duration,r=t.initiatorType;n.totalSize+=i,n.totalDuration+=s,n.byType[r]||(n.byType[r]={count:0,size:0,duration:0}),n.byType[r].count++,n.byType[r].size+=i,n.byType[r].duration+=s}));const s=C.getInstance().getPrivacy(),r="allow"!==s.level&&s.maskNetworkQueryParams,a=h?.location?.href||"",o=h?.document?.referrer||"";return V({type:"pageload",attributes:{page_url:r?D(a,s.sensitiveKeys):a,page_load_time:t,page_referrer:r?D(o,s.sensitiveKeys):o,page_resources:n}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){d(e)}}},ge=class extends Z{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!B())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){d(e)}}}initialize(){i.onCLS(this.handleEvent),i.onLCP(this.handleEvent),i.onFCP(this.handleEvent),i.onTTFB(this.handleEvent),i.onINP(this.handleEvent)}destroy(){}buildEvent(e){return V({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){d(e)}}},ue=class{constructor(){this.logger=l.getInstance(),this.eventsPool=Y.getInstance(),this.configManager=C.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?.sessionReplay?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0,i=this.configManager.getPrivacy();this.stopFn=n.record({...t?{blockSelector:t}:{},...i.maskTextSelector?{maskTextSelector:i.maskTextSelector}:{},maskAllInputs:i.maskInputs,...i.maskTextFn?{maskTextFn:i.maskTextFn}:{},...i.maskInputFn?{maskInputFn:i.maskInputFn}:{},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){d(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){d(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=h.setTimeout((()=>{if(this.sendTimerId=null,this.isRecording)try{this.sendBatch()}catch(e){d(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}}),0))}clearScheduledSend(){null!==this.sendTimerId&&(h.clearTimeout(this.sendTimerId),this.sendTimerId=null)}sendBatch(){if(0!==this.events.length)try{const e=this.events.map((e=>s.pack(e))),t=this.batchContainsFullSnapshot,i=this.fullSnapshotTimestamp,n={_gc_replay_data:{events:e}};t&&(n.replay_is_full_snapshot=!0,n.replay_full_snapshot_timestamp=i);const r=V({type:"replay",attributes:n});this.eventsPool.addEvent(r),this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){d(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.sendBatch(),this.stopFn=null,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0}catch(e){d(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},pe=["pointerdown","keydown","scroll","touchstart","mousemove"],me=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){d(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,pe.forEach((e=>{try{h.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){d(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",S,"ms");try{this.callbacks.onIdle()}catch(e){d(e)}}),S)}catch(e){d(e)}}destroy(){if(this.installed){this.installed=!1,pe.forEach((e=>{try{h.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){d(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){d(e)}finally{this.idleTimer=null}}}},fe=new Set(["dom.event","navigation","pageload","custom"]),ve=class{constructor(){this.logger=l.getInstance(),this.eventsPool=Y.getInstance(),this.configManager=C.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 me({onPresence:e=>this.reconcileSession(e,!0),onIdle:()=>this.pauseReplayOnIdle()}),this.presenceMonitor.initialize();const e=this.configManager.getConfig(),t=e?.options?.enabledEvents,i=!t||0===t.length,n=[];(i||t?.includes("pageload"))&&(this.pageLoadListener=new he,this.pageLoadListener.initialize(),n.push("pageload")),(i||t?.includes("dom"))&&(this.domEventsListener=new ne,this.domEventsListener.initialize(),n.push("dom")),(i||t?.includes("logs"))&&(this.logEventsListener=new re,this.logEventsListener.initialize(),n.push("logs")),(i||t?.includes("exceptions"))&&(this.errorsEventsListener=new ce,this.errorsEventsListener.initialize(),n.push("exceptions")),(i||t?.includes("network"))&&(this.networkEventsListener=new le,this.networkEventsListener.initialize(),n.push("network")),(i||t?.includes("performance"))&&(this.performanceListener=new ge,this.performanceListener.initialize(),n.push("performance")),this.navigationListener=new de({isEnabled:i||t?.includes("navigation")}),this.navigationListener.initialize(),n.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",n)}sendCustomEvent(e){this.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=V({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){d(e)}}emitLog(e,t,i){if(this.logEventsListener){this.logger.log("[instrumentation-manager.emitLog] called",{message:e,level:t,attributes:i});try{const n={...i||{}};delete n.message,delete n.level,delete n.location;const s=V({type:"log",attributes:{...n,message:W({text:e}),level:t}});this.eventsPool.addEvent(s)}catch(e){d(e)}}}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){d(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()}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 ue;e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){d(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 i=this.configManager.getSessionElapsedMs(e),n=this.configManager.getSessionMaxDuration(),s=i>=n;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:i,maxDurationMs:n,expired:s}),s&&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(),fe.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(),i=this.isReplayRecording();this.logger.log("[instrumentation-manager] session rotation start",{reason:e.reason,previousId:t,wasReplayActive:i});const n=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){d(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{n("stop replay",(()=>this.stopReplayListener())),n("flush events",(()=>this.eventsPool.flush())),n("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(u(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),n("sync replay",(()=>this.syncReplayState(i)))}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}},ye="gcSample",be=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 ve,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=C.getInstance();t.initialize(e);Y.getInstance().initialize();const i=e.sessionId,n=t.getSessionId();i&&i!==n?(t.setSessionId(i),t.setSessionStartTime(u(Date.now())),this.logger.log("[session-manager] using provided sessionId:",i)):i?(t.setSessionId(i),this.logger.log("[session-manager] continuing provided sessionId:",i)):n||t.setSessionId(this.idGenerator.generateId());const s=Date.now(),r=p(t.getSessionStartTime());if(r>0&&s-r>=-6e4){if(t.isSessionExpired(s)||t.isSessionInactive(s)){const e=t.isSessionExpired(s)?"persisted session past cap":"inactivity gap across reload",i=t.getSessionId(),n=this.idGenerator.generateId();t.setSessionId(n),t.setSessionStartTime(u(s)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:i,to:n})}}else t.setSessionStartTime(u(s));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=R(ye);if(t){const e="1"===t;return this.logger.log("[session-manager] using stored sampling decision:",e),e}const i=!e||Math.random()<e;return k(ye,i?"1":"0"),this.logger.log("[session-manager] stored new sampling decision:",i),i}catch(t){this.logger.log("[session-manager] session storage access failed:",t);const i=!e||Math.random()<e;return this.logger.log("[session-manager] using fallback sampling decision:",i),i}}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");C.getInstance().updateConfig({userIdentifier:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");C.getInstance().updateConfig(e);const t=e.options;!!t&&("privacy"in t||"enableMasking"in t||"maskFields"in t)&&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,i){this.initialized?this.instrumentationManager.emitLog(e,t,i):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?C.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{const t=Y.getInstance();await t.flushSync();const i=e||this.idGenerator.generateId(),n=C.getInstance();n.setSessionId(i),n.setSessionStartTime(u(Date.now())),this.logger.log("[session-manager] session ID set successfully:",i)}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(),Y.getInstance().destroy(),C.getInstance().clearSessionState(),this.initialized=!1)}},Ee=new class{constructor(e){this.manager=e}emit(e,t,i){this.manager&&this.manager.emitLog(t,e,i)}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 Se={init:function(e){try{oe=new be({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",userIdentifier:e?.userIdentifier,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),Ee.manager=oe}catch(e){d(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:Ee,updateConfig:function(e){oe&&oe.updateConfig(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=Se}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var Ie=Se;module.exports=Ie;
|
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 i,onLCP as r,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}},g=d.getInstance();function u(e){g.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}var y=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)b[e]=Math.floor(16*Math.random())+48,b[e]>=58&&(b[e]+=39);return E+String.fromCharCode.apply(null,b.slice(0,16))},this.generateSpanId=w(8),this.generateId=w(16)}},b=Array(32);function w(e){return function(){for(let t=0;t<2*e;t++)b[t]=Math.floor(16*Math.random())+48,b[t]>=58&&(b[t]+=39);return String.fromCharCode.apply(null,b.slice(0,2*e))}}var E="0000000000000000";var S=144e5,I=288e5,T=18e5,k={batchSize:10,batchTimeout:1e4,eventSampleRate:1,sessionSampleRate:1,environment:"development",debug:!1,enableCompression:!0,maskFields:[],enableMasking:!1,enabledEvents:[],tracePropagationUrls:[],tracePropagationHeaders:[],tracePropagationTraceIdHeaderName:"",tracePropagationSpanIdHeaderName:"",traceOrigin:{name:"",value:""},sessionMaxDuration:S},R=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.userIdentifier=t?.userIdentifier||null,this.options={...k,...t?.options||{}},this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration)}static normalizeSessionMaxDuration(e){return void 0===e?S:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>I?(console.warn("[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&&(this.options={...this.options,...t.options},void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration))),t.userIdentifier&&(this.userIdentifier={...this.userIdentifier,...t.userIdentifier}),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)}};function L(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return u(e),null}}function M(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){u(e)}}function N(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){u(e)}}function A(e,t=0){const n=L(e);if(null===n)return t;const i=Number(n);return Number.isFinite(i)?i:t}var q=class e{constructor(){this.config=null,this.logger=d.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){u(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){u(e)}}this.config||(this.config=new R(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getSessionId(){if(this.sessionId)return this.sessionId;return L("gcId")||""}setSessionId(e){this.sessionId=e,M("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:A("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,M("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:A("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,M("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){u(e)}}N("gcId"),N("gcStartTime"),N("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)),e?.userIdentifier&&(this.logger.log("[config-manager] updating user identifier"),this.config.userIdentifier={...this.config.userIdentifier,...e.userIdentifier})):this.logger.log("[config-manager] configuration not initialized")}},z=q.getInstance(),x=new y,C=d.getInstance();function H(){const e=z?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function _(e,t="",n=new WeakSet,i=0){try{return i>=10?{[t||"depth_limit"]:"[Depth Limit]"}:null!=(r=e)&&"number"==typeof r.nodeType&&"string"==typeof r.nodeName?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:n.has(e)?{[t||"circular_reference"]:"[Circular]"}:(n.add(e),Object.entries(e).reduce(((e,[r,s])=>{const a=t?`${t}.${r}`:r;return"object"==typeof s&&null!==s?Array.isArray(s)?e[a]=s.map(((e,t)=>"object"==typeof e&&null!==e?_(e,`${a}[${t}]`,n,i+1):e)):Object.assign(e,_(s,a,n,i+1)):e[a]=s,e}),{}))}catch(e){return C.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}var r}function P(e){const t=m(Date.now()),n=x.generateId(),i=e.spanId||x.generateSpanId(),r=e.traceId||x.generateTraceId(),s=e.parentSpanId||"",a=_(e.attributes||{}),o=function(){const e=f?.location;return e?{path:e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/")?e.hash:e.pathname,url:e.href,title:f?.document?.title||""}:{path:"",url:"",title:f?.document?.title||""}}(),l={type:e.type,id:n,spanId:i,parentSpanId:s,traceId:r,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 D({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var F=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.isAvailable=!1,this.logger=d.getInstance(),"undefined"!=typeof Worker&&"undefined"!=typeof URL&&"undefined"!=typeof Blob)try{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);this.worker=new Worker(t),URL.revokeObjectURL(t),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.handleFailure("worker onmessageerror"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){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}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})}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"))}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,i=this.worker;return new Promise(((r,s)=>{const a=setTimeout((()=>{this.pending.has(n)&&this.handleFailure("worker request timed out")}),1e4);this.pending.set(n,{resolve:r,reject:s,timeoutId:a});try{i.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),e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFailure(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()}};F.instance=null;var O=F,j=class{constructor(){this.logger=d.getInstance(),this.config=q.getInstance()}compressInline(n,i){if(!i)return{data:(new TextEncoder).encode(n),isCompressed:!1};try{const i=e(n);return{data:t(i),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(n),isCompressed:!1}}}async compressAsync(e,t){const n=O.getInstance();if(n.isAvailable)try{const{bytes:i,isCompressed:r}=await n.encodeBatch(e,t);return{data:i,isCompressed:r}}catch(e){this.logger.log("[transporter] worker encode failed, using inline fallback:",e)}return this.compressInline(e,t)}async send(e){const t=this.config.getConfig();if(t)try{t?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const n=t.apiKey,i=this.buildEndpoint();if(!n)return void this.logger.log("No API key found");const r=JSON.stringify(e),{data:s,isCompressed:a}=await this.compressAsync(r,!!t?.options?.enableCompression);fetch(i,{method:"POST",headers:{"Content-Type":"application/json",apikey:n,"Content-Encoding":a?"gzip":""},body:s}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){t.options.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();if(!e)return"";const{dsn:t}=e;return`${t}/json/rum`}},U=["navigation","dom.event"],Y=class e{constructor(){this.events=[],this.timeoutId=null,this.config=q.getInstance(),this.logger=d.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush()},this.transporter=new j}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){u(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){u(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){if(e&&this.initialized)try{const t=this.config.getConfig()?.options?.beforeSend,n=this.config.getConfig()?.options?.enrichEvent;if(t&&!t(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){u(e)}n&&(e=n(e)),this.events.push(e);const i=this.config.getConfig()?.options?.batchSize||100;this.events.length>=i&&!U.includes(e.type)&&this.flush()}catch(e){u(e)}}flush(){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,this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[],this.scheduleFlush()}catch(e){u(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){u(e)}}scheduleFlush(){try{null!==this.timeoutId&&(f.clearTimeout(this.timeoutId),this.timeoutId=null);const e=this.config.getConfig()?.options?.batchTimeout;if(!e)return;this.timeoutId=f.setTimeout((()=>{this.timeoutId=null,this.flush()}),e)}catch(e){u(e)}}detectBrowser(){const e=navigator.userAgent;let t="unknown",n="unknown";const i=navigator.platform||"unknown",r=/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:i,language:navigator.language,mobile:r}}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?.userIdentifier||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};Y.instance=null;var B=Y,K=class{constructor(){this.logger=d.getInstance(),this.eventsPool=B.getInstance()}},X="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function $(e,t){try{return e.getAttribute(t)||""}catch{return""}}function Q(e){try{const t=X?.call(e);return"string"==typeof t?t:""}catch{return""}}var W=class extends K{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=q.getInstance(),this.getShouldMaskText=e=>{const t=this.config.getConfig(),n=t?.options?.maskFields||[],i=t?.options?.enableMasking||!1;return(["password"===e.target?.type,e.target?.id?.toLowerCase().includes("password"),e.target?.id?.toLowerCase().includes("credit-card"),e.target?.id?.toLowerCase().includes("cc"),e.target?.className?.toLowerCase().includes("cc"),e.target?.className?.toLowerCase().includes("credit-card"),e.target?.className?.toLowerCase().includes("credit-card"),e.target?.hasAttribute("data-private")].some((e=>e))||n.some((t=>e.target?.id?.toLowerCase().includes(t))))&&i},this.getKeyCode=e=>{if(e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key){const t=this.getShouldMaskText({target:e.target});return t||t?"*":e.key}return""},this.getText=e=>{const t=e.target,n=this.config.getConfig();return n?.options?.enableMasking||!1?"*":D({text:t.innerText||""})},this.getSelector=e=>e.target instanceof Element&&this.generateSelector(e.target)||"",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){u(e)}};this.eventHandlers.push({type:e,handler:t}),f?.addEventListener(e,t)}))}catch(e){u(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!H())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){u(e)}}buildEvent(e){const t=this.getSelector(e),n=this.getCoordinates(e),i=e.target,r=this.getKeyCode(e),s=this.getText(e);this.logger.log("[dom-events-listener.buildEvent] called");return P({type:"dom.event",attributes:{dom_event_selector:t,dom_event_key_code:r,dom_event_type:e.type,dom_event_coordinates:n||{clientX:0,clientY:0},dom_event_target:{id:$(i,"id"),tagName:Q(i),className:$(i,"class"),text:s}}})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const n=t.root||document.body||document.documentElement,i=t.maxAttempts||10,r=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===Q(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<i;){let e=Q(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 r)if("id"!==t&&"class"!==t)try{const n=o.getAttribute(t);n&&(e+=`[${t}="${n.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=Q(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||"*"}},V=["log","info","warn","error","debug","assert","trace"],G=class extends K{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),V.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){u(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){u(e)}}destroy(){try{if(!this.isInitialized)return;V.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){u(e)}}handleEvent(e,t){try{if(!H())return;const n=Array.isArray(e)?e:[e],i=this.formatMessage(n,t);if(!i||i?.includes("groundcoverIgnore"))return;const r=this.extractAttributes(n),s=this.buildEvent({message:i,level:t,attributes:r});this.queueEvent(s)}catch(e){u(e)}}buildEvent({message:e,level:t,attributes:n}){return P({type:"log",attributes:{...n,message:D({text:e}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(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 u(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 u(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{V.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){u(e)}return e}};function J(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 u(`Failed to format body: ${e}`),"[unreadable body]"}}var Z,ee=class extends K{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=q.getInstance(),this.idGenerator=new y,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!H())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){u(e)}},this.buildEvent=e=>{let t=e.url,n=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});try{t=new URL(e.url).pathname}catch(t){n=new URL(e.url,globalThis.location.href).href}this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const i=this.formatHeaders(e.request.headers),r=this.formatHeaders(e.response.headers),s=e.method?.toUpperCase()||"UNKNOWN",{traceId:a,spanId:o}=this.extractTraceIds(e.request.headers),l=D({text:e.request.body,maxLength:this.maxBodyLength}),c=D({text:e.response.body,maxLength:this.maxBodyLength}),h={type:"HTTP",operation:{name:s},resource_name:t,status:e.status?.toString(),subType:s,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:i,method:e.method},response:{headers:r,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:l},response:{body:c}}},d={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:h};return a&&(d.traceId=a),o&&(d.spanId=o),P(d)}}async getResponseBody(e){let t;try{const n=e.body;if(n){const e=n.getReader(),i=new TextDecoder;let r="";for(;;){const{done:t,value:n}=await e.read();if(t){r+=i.decode();break}if(r+=i.decode(n,{stream:!0}),r.length>=this.maxBodyLength){await e.cancel();break}}t=r}else t=""}catch(e){t=`Unable to read response body: ${e}`}return t}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 u(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,n=globalThis.XMLHttpRequest.prototype.send,i=globalThis.XMLHttpRequest.prototype.setRequestHeader;let r;globalThis.XMLHttpRequest.prototype.open=function(n,i,s=!0,a,o){if(r=Date.now(),e.shouldIgnoreRequest(i.toString()))return t.apply(this,[n,i,s,a,o]);const l=new URL(i.toString(),globalThis.location.href).href;return this._requestMethod=n,this._requestUrl=l,this._requestHeaders={},t.apply(this,[n,i,s,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),i.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...t){const i=this._requestUrl?.toString();if(!i||e.shouldIgnoreRequest(i))return n.apply(this,t);if(e.shouldAddTraceHeader(i)){const t=e.config.getConfig(),n=e.getTraceIds();t?.options?.traceOrigin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),n&&(t?.options?.tracePropagationTraceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:n.decimalSpanId}),Boolean(t?.options?.tracePropagationHeaders)&&t?.options?.tracePropagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:n.traceparent})})),t?.options?.tracePropagationHeaders?.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,i]=e.split(": ");t&&i&&(n[t.trim()]=i.trim())}));const i=J(this._requestBody),s=J(""===this.responseType||"text"===this.responseType?this.responseText:this.response),a={timestamp:r,end_time:t,method:this._requestMethod,url:this._requestUrl,body:i,status:this.status,request:{headers:this._requestHeaders||{},body:i},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?.traceOrigin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),!n)return;t?.options?.tracePropagationTraceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:n.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:n.decimalSpanId});const i=t?.options?.tracePropagationHeaders;(i?.length?i:["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[i,r]=t;r={...r||{}},t[1]=r;const s=i instanceof Request,a=r?.method||"GET",o=r?.body||"",l=i instanceof Request?i.url:i.toString();if(this.shouldIgnoreRequest(l))return e.apply(globalThis,t);const c=this.shouldAddTraceHeader(l);r||(t[1]={},r=t[1]),r.headers=this.normalizeHeaders(s?i.headers:void 0,r.headers),c&&this.addTraceHeaders(r);const h=this.extractHeadersRecord(r.headers),d=J(o);return e.apply(globalThis,t).then((e=>{const t=Date.now(),i={};e.headers.forEach(((e,t)=>{i[t]=e}));const r={method:a,url:l,timestamp:n,body:d,status:e.status,end_time:t,request:{headers:h,body:d},response:{headers:i,body:""}};try{i["content-type"]?.includes("text/event-stream")?(r.response.body="[unreadable response body]",this.handleEvent(r)):this.getResponseBody(e.clone()).then((e=>{r.response.body=e,this.handleEvent(r)})).catch((e=>{r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}))}catch(e){r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}return e})).catch((e=>{const t=Date.now();let n="NetworkError";const i=e.message||"Unknown network error";e instanceof TypeError&&i.includes("Failed to fetch")?n="ERR_NETWORK_FAILURE":i.includes("Name not resolved")?n="ERR_NAME_NOT_RESOLVED":i.includes("Connection refused")&&(n="ERR_CONNECTION_REFUSED");const r={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(r),e}))}}formatHeaders(e){const t=["authorization","cookie","set-cookie"];return Object.entries(e)?.reduce(((e,[n,i])=>{const r=n.toLowerCase();return t.includes(r)||/(token|key|secret|password)/i.test(r)?e[n]="[REDACTED]":e[n]=D({text:i}),e}),{})}extractTraceIds(e){const t=this.config.getConfig();let n="",i="";if(t?.options?.tracePropagationTraceIdHeaderName){const i=e[t.options.tracePropagationTraceIdHeaderName];i&&"string"==typeof i&&(n=i)}if(t?.options?.tracePropagationSpanIdHeaderName){const n=e[t.options.tracePropagationSpanIdHeaderName];n&&"string"==typeof n&&(i=n)}if(!n||!i){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]),!i&&e[2]&&16===e[2].length&&(i=e[2]))}}return{traceId:n,spanId:i}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracePropagationHeaders?.length)for(const n of t.options.tracePropagationHeaders){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,i;try{n=BigInt("0x"+t).toString(10),i=BigInt("0x"+e).toString(10)}catch(r){this.logger.log("[network-events-listener.getTraceIds] error",{error:r}),n=t,i=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:n,decimalSpanId:i}}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?.tracePropagationUrls?.length)return!1;const n=t.options.tracePropagationUrls?.some((t=>{const n=t.replace(/\*/g,".*"),i=new RegExp(`^${n}$`),r=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return i.test(r)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:n}),n}},te=class extends K{constructor(){super(...arguments),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const i=this.buildEvent(n,t);this.queueEvent(i)}catch(e){u(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){return P({type:"exception",attributes:{error_type:e.name||"Error",error_message:e.message||"Unknown error",error_stacktrace:this.buildStackTrace(e),error_fingerprint:`${e.name}:${D({text:e.message,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:t?.metadata}})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}enhanceError(e,t){const{filename:n,lineno:i,colno:r}=t||{};n&&!e.fileName&&Object.defineProperty(e,"fileName",{value:n}),i&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:i}),r&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:r})}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[]}}},ne=class extends K{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){u(e)}}isInBrowserEnvironment(){try{return void 0!==f&&void 0!==f.location&&void 0!==f.history&&"function"==typeof f.addEventListener}catch(e){return u(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){u(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){u(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){u(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",f.location.href);return P({type:"navigation",attributes:{page_url:f.location.href,metadata:this.activeNavigation?.metadata,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){u(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 u(e)}const n=e=>e.startsWith("#/"),i=n(e.hash)||n(t.hash);(e.pathname!==t.pathname||i&&e.hash!==t.hash)&&(this.currentUrl=f.location.href,this.handleEvent())}catch(e){u(e)}}},ie=class extends K{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),u(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){u(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,n=performance.getEntriesByType("resource"),i={count:n.length,totalSize:0,totalDuration:0,byType:{}};n.forEach((e=>{const t=e,n=t.transferSize||0,r=t.duration,s=t.initiatorType;i.totalSize+=n,i.totalDuration+=r,i.byType[s]||(i.byType[s]={count:0,size:0,duration:0}),i.byType[s].count++,i.byType[s].size+=n,i.byType[s].duration+=r}));return P({type:"pageload",attributes:{page_url:f?.location?.href||"",page_load_time:t,page_referrer:f?.document?.referrer||"",page_resources:i}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}},re=class extends K{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!H())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){u(e)}}}initialize(){i(this.handleEvent),r(this.handleEvent),s(this.handleEvent),a(this.handleEvent),o(this.handleEvent)}destroy(){}buildEvent(e){return P({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){u(e)}}},se=class{constructor(){this.logger=d.getInstance(),this.eventsPool=B.getInstance(),this.configManager=q.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?.sessionReplay?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0;this.stopFn=l({...t?{blockSelector:t}:{},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){u(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){u(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=>{u(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();let n;const i=O.getInstance();if(i.isAvailable)try{n=await i.packReplay(e.events)}catch(t){u(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),n=e.events.map((e=>c(e)))}else n=e.events.map((e=>c(e)));this.configManager.getSessionId()===t?this.enqueueReplayEvent(n,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during worker pack",{drained:n.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 i={_gc_replay_data:{events:e}};t&&(i.replay_is_full_snapshot=!0,i.replay_full_snapshot_timestamp=n);const r=P({type:"replay",attributes:i});this.eventsPool.addEvent(r),this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){u(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){u(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},ae=["pointerdown","keydown","scroll","touchstart","mousemove"],oe=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){u(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,ae.forEach((e=>{try{f.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){u(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){u(e)}}),T)}catch(e){u(e)}}destroy(){if(this.installed){this.installed=!1,ae.forEach((e=>{try{f.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){u(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){u(e)}finally{this.idleTimer=null}}}},le=new Set(["dom.event","navigation","pageload","custom"]),ce=class{constructor(){this.logger=d.getInstance(),this.eventsPool=B.getInstance(),this.configManager=q.getInstance(),this.idGenerator=new y,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 oe({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,i=[];(n||t?.includes("pageload"))&&(this.pageLoadListener=new ie,this.pageLoadListener.initialize(),i.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new W,this.domEventsListener.initialize(),i.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new G,this.logEventsListener.initialize(),i.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new te,this.errorsEventsListener.initialize(),i.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new ee,this.networkEventsListener.initialize(),i.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new re,this.performanceListener.initialize(),i.push("performance")),this.navigationListener=new ne({isEnabled:n||t?.includes("navigation")}),this.navigationListener.initialize(),i.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",i)}sendCustomEvent(e){this.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=P({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){u(e)}}emitLog(e,t,n){if(this.logEventsListener){this.logger.log("[instrumentation-manager.emitLog] called",{message:e,level:t,attributes:n});try{const i={...n||{}};delete i.message,delete i.level,delete i.location;const r=P({type:"log",attributes:{...i,message:D({text:e}),level:t}});this.eventsPool.addEvent(r)}catch(e){u(e)}}}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){u(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}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 se;e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){u(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),i=this.configManager.getSessionMaxDuration(),r=n>=i;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:n,maxDurationMs:i,expired:r}),r&&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(),le.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 i=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){u(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{i("stop replay",(()=>this.stopReplayListener())),i("flush events",(()=>this.eventsPool.flush())),i("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})})),i("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}},he="gcSample",de=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 ce,this.idGenerator=new y;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=q.getInstance();t.initialize(e);B.getInstance().initialize(),O.getInstance();const n=e.sessionId,i=t.getSessionId();n&&n!==i?(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)):i||t.setSessionId(this.idGenerator.generateId());const r=Date.now(),s=v(t.getSessionStartTime());if(s>0&&r-s>=-6e4){if(t.isSessionExpired(r)||t.isSessionInactive(r)){const e=t.isSessionExpired(r)?"persisted session past cap":"inactivity gap across reload",n=t.getSessionId(),i=this.idGenerator.generateId();t.setSessionId(i),t.setSessionStartTime(m(r)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:i})}}else t.setSessionStartTime(m(r));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=L(he);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 M(he,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");q.getInstance().updateConfig({userIdentifier:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");q.getInstance().updateConfig(e)}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?q.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=B.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),i=q.getInstance();i.setSessionId(n),i.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(){if(this.initialized){this.instrumentationManager.uninstrument(),B.getInstance().destroy();try{O.getInstance().terminate()}catch(e){this.logger.log("[session-manager] worker terminate failed during destroy:",e)}q.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 ue={init:function(e){try{Z=new de({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",userIdentifier:e?.userIdentifier,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),ge.manager=Z}catch(e){u(e)}},identifyUser:function(e){Z?Z.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){Z&&Z.sendCustomEvent(e)},captureException:function(e,t){Z&&Z.captureException(e,t)},logger:ge,updateConfig:function(e){Z&&Z.updateConfig(e)},startNavigation:function(e){Z?Z.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){Z?Z.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return Z?Z.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(Z)try{await Z.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(){Z?Z.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){Z?Z.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=ue}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var fe=ue;export{fe as default};
|
|
1
|
+
import{strToU8 as e,gzipSync as t}from"fflate";import i from"error-stack-parser";import{onCLS as n,onLCP as s,onFCP as r,onTTFB as a,onINP as o}from"web-vitals";import{record as l}from"rrweb";import{pack as c}from"@rrweb/packer";var d=console.log.bind(console),h=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&&d(this.formatMessage(e),...t)}updateConfig(e){this.isDebugEnabled=e.debug??this.isDebugEnabled,this.prefix=e.prefix??this.prefix}},g=h.getInstance();function u(e){g.log("[error-handler.handleError] called",e,{groundcoverIgnore:!0})}var p="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},m=1e6;function f(e){return e*m}function v(e){return e/m}var y=class{constructor(){this.generateTraceId=function(){for(let e=0;e<16;e++)b[e]=Math.floor(16*Math.random())+48,b[e]>=58&&(b[e]+=39);return I+String.fromCharCode.apply(null,b.slice(0,16))},this.generateSpanId=E(8),this.generateId=E(16)}},b=Array(32);function E(e){return function(){for(let t=0;t<2*e;t++)b[t]=Math.floor(16*Math.random())+48,b[t]>=58&&(b[t]+=39);return String.fromCharCode.apply(null,b.slice(0,2*e))}}var I="0000000000000000";var S=144e5,w=288e5,T=18e5,R={batchSize:10,batchTimeout:1e4,eventSampleRate:1,sessionSampleRate:1,environment:"development",debug:!1,enableCompression:!0,maskFields:[],enableMasking:!1,privacy:{level:"mask-user-input"},enabledEvents:[],tracePropagationUrls:[],tracePropagationHeaders:[],tracePropagationTraceIdHeaderName:"",tracePropagationSpanIdHeaderName:"",traceOrigin:{name:"",value:""},sessionMaxDuration:S},k=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.userIdentifier=t?.userIdentifier||null,this.providedOptions={...t?.options||{}},this.options={...R,...t?.options||{}},this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration)}static normalizeSessionMaxDuration(e){return void 0===e?S:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>w?(console.warn("[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){if(t.options){const i=t.options.privacy?{...this.providedOptions?.privacy,...t.options.privacy}:void 0,n=t.options.privacy?{...this.options.privacy,...t.options.privacy}:void 0;this.providedOptions={...this.providedOptions,...t.options},this.options={...this.options,...t.options},i&&(this.providedOptions.privacy=i,this.options.privacy=n),void 0!==t.options.sessionMaxDuration&&(this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t.options.sessionMaxDuration))}t.userIdentifier&&(this.userIdentifier={...this.userIdentifier,...t.userIdentifier}),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)}};function L(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function N(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return u(e),null}}function C(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){u(e)}}function H(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){u(e)}}function x(e,t=0){const i=N(e);if(null===i)return t;const n=Number(i);return Number.isFinite(n)?n:t}var z=class e{constructor(){this.config=null,this.logger=h.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){u(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){u(e)}}this.config||(this.config=new k(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,i=!!e&&Object.prototype.hasOwnProperty.call(e,"enableMasking"),n=function(e){return"mask-user-input"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level);let s;s=n||(i?e?.enableMasking?"mask-all":"allow":"mask-user-input");const r="allow"===s,a=L(t?.maskSelectors);let o;o="mask-all"===s||!r&&"function"==typeof t?.maskTextFn?["*",...a].join(", "):"mask-user-input"===s&&a.length?a.join(", "):void 0;const l=e=>!r&&(e??!0);return{level:s,maskTextSelector:o,maskSelectors:a,maskInputs:!r,maskNetworkBodies:l(t?.maskNetworkBodies),maskNetworkQueryParams:l(t?.maskNetworkQueryParams),maskLogs:l(t?.maskLogs),maskErrors:l(t?.maskErrors),sensitiveKeys:L(t?.sensitiveKeys),maskFieldsLegacy:L(e?.maskFields),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:"function"==typeof t?.maskTextFn?t.maskTextFn:void 0,maskInputFn:"function"==typeof t?.maskInputFn?t.maskInputFn:void 0}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return N("gcId")||""}setSessionId(e){this.sessionId=e,C("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:x("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,C("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:x("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,C("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){u(e)}}H("gcId"),H("gcStartTime"),H("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),e?.userIdentifier&&(this.logger.log("[config-manager] updating user identifier"),this.config.userIdentifier={...this.config.userIdentifier,...e.userIdentifier})):this.logger.log("[config-manager] configuration not initialized")}},M="[REDACTED]",_=["authorization","cookie","set-cookie"],q=/(token|key|secret|passwd|password|auth|bearer|credential)/i,P=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i;function D(e,t){if(!e)return!1;if(P.test(e))return!0;if(t?.length){const i=e.toLowerCase();return t.some((e=>e&&i.includes(e.toLowerCase())))}return!1}function A(e,t){return D(e,t)||q.test(e)}function O(e,t){if(!e)return e;try{return e.split("&").map((e=>{const i=e.indexOf("=");if(-1===i)return e;const n=e.slice(0,i);let s=n;try{s=decodeURIComponent(n)}catch{}return D(s,t)?`${n}=${encodeURIComponent(M)}`:e})).join("&")}catch{return e}}function F(e,t){if(!e)return e;const i=e.indexOf("?");if(-1===i)return e;const n=e.slice(0,i),s=e.slice(i+1),r=s.indexOf("#"),a=-1===r?s:s.slice(0,r),o=-1===r?"":s.slice(r);return`${n}?${O(a,t)}${o}`}function j(e,t,i){if(i>8)return null!==e&&"object"==typeof e?M:e;if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map((e=>j(e,t,i+1)));const n={};for(const[s,r]of Object.entries(e))D(s,t)?n[s]=M:n[s]=j(r,t,i+1);return n}function $(e,t){if(!e)return e;try{let i=e.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,i)=>A(i,t)?`"${i}":"${M}"`:e));return i=i.replace(/([\w.-]{1,64})=([^\s&,;]+)/g,((e,i)=>A(i,t)?`${i}=${M}`:e)),i=i.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,i)=>A(i,t)?`${i}: ${M}`:e)),i}catch(t){return u(t),e}}function K(e,t){return j(e,t,0)}function U(e,t,i){if(!t||"string"!=typeof e)return e;try{const n=t(e,i);return"string"==typeof n?n:e}catch(t){return u(t),e}}var B=z.getInstance(),X=new y,V=h.getInstance();function W(){const e=B?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function G(e,t="",i=new WeakSet,n=0){try{return n>=10?{[t||"depth_limit"]:"[Depth Limit]"}:null!=(s=e)&&"number"==typeof s.nodeType&&"string"==typeof s.nodeName?{[t||"dom_node"]:`[${e?.constructor?.name||"DomNode"}]`}:i.has(e)?{[t||"circular_reference"]:"[Circular]"}:(i.add(e),Object.entries(e).reduce(((e,[s,r])=>{const a=t?`${t}.${s}`:s;return"object"==typeof r&&null!==r?Array.isArray(r)?e[a]=r.map(((e,t)=>"object"==typeof e&&null!==e?G(e,`${a}[${t}]`,i,n+1):e)):Object.assign(e,G(r,a,i,n+1)):e[a]=r,e}),{}))}catch(e){return V.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{i.delete(e)}var s}function J(e){const t=f(Date.now()),i=X.generateId(),n=e.spanId||X.generateSpanId(),s=e.traceId||X.generateTraceId(),r=e.parentSpanId||"",a=G(e.attributes||{}),o=function(){const e=p?.location;if(!e)return{path:"",url:"",title:p?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),i=t?e.hash:e.pathname,n=B.getPrivacy(),s="allow"!==n.level&&n.maskNetworkQueryParams;return{path:s&&t?F(i,n.sensitiveKeys):i,url:s?F(e.href,n.sensitiveKeys):e.href,title:p?.document?.title||""}}(),l={type:e.type,id:i,spanId:n,parentSpanId:r,traceId:s,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 Q({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var Y=class{constructor(){this.logger=h.getInstance(),this.config=z.getInstance()}compress(i){const n=this.config.getConfig();if(!n?.options?.enableCompression)return{data:(new TextEncoder).encode(i),isCompressed:!1};try{const n=e(i);return{data:t(n),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(i),isCompressed:!1}}}async send(e){const t=this.config.getConfig();if(t)try{t?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const i=t.apiKey,n=this.buildEndpoint();if(!i)return void this.logger.log("No API key found");const s=JSON.stringify(e),{data:r,isCompressed:a}=this.compress(s);fetch(n,{method:"POST",headers:{"Content-Type":"application/json",apikey:i,"Content-Encoding":a?"gzip":""},body:r}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){t.options.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();if(!e)return"";const{dsn:t}=e;return`${t}/json/rum`}},Z=["navigation","dom.event"],ee=class e{constructor(){this.events=[],this.timeoutId=null,this.config=z.getInstance(),this.logger=h.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush()},this.transporter=new Y}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){u(e)}}destroy(){try{null!==this.timeoutId&&(p.clearTimeout(this.timeoutId),this.timeoutId=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.events=[],this.initialized=!1}catch(e){u(e)}}setBeforeEnqueueHook(e){this.onBeforeEnqueue=e}addEvent(e){if(e&&this.initialized)try{const t=this.config.getConfig()?.options?.beforeSend,i=this.config.getConfig()?.options?.enrichEvent;if(t&&!t(e))return;if(this.onBeforeEnqueue)try{this.onBeforeEnqueue(e)}catch(e){u(e)}i&&(e=i(e)),this.events.push(e);const n=this.config.getConfig()?.options?.batchSize||100;this.events.length>=n&&!Z.includes(e.type)&&this.flush()}catch(e){u(e)}}flush(){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,this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[],this.scheduleFlush()}catch(e){u(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){u(e)}}scheduleFlush(){try{null!==this.timeoutId&&(p.clearTimeout(this.timeoutId),this.timeoutId=null);const e=this.config.getConfig()?.options?.batchTimeout;if(!e)return;this.timeoutId=p.setTimeout((()=>{this.timeoutId=null,this.flush()}),e)}catch(e){u(e)}}detectBrowser(){const e=navigator.userAgent;let t="unknown",i="unknown";const n=navigator.platform||"unknown",s=/Mobile|Android|iPhone|iPad|iPod/i.test(e);return/Edg/.test(e)?(t="Edge",i=e.match(/Edg\/([\d.]+)/)?.[1]||i):/Chrome/.test(e)&&!/Chromium/.test(e)?(t="Chrome",i=e.match(/Chrome\/([\d.]+)/)?.[1]||i):/Firefox/.test(e)?(t="Firefox",i=e.match(/Firefox\/([\d.]+)/)?.[1]||i):/Safari/.test(e)&&!/Chrome/.test(e)?(t="Safari",i=e.match(/Version\/([\d.]+)/)?.[1]||i):/Trident/.test(e)?(t="Internet Explorer",i=/rv:([^)]+)\)/i.test(e)?e.match(/rv:([^)]+)\)/i)?.[1]||i:e.match(/MSIE ([^;]+)/)?.[1]||i):/OPR/.test(e)&&(t="Opera",i=e.match(/OPR\/([\d.]+)/)?.[1]||i),{name:t,version:i,platform:n,language:navigator.language,mobile:s}}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?.userIdentifier||{},"service.name":t?.appId,userAgent:navigator.userAgent,browser:e}}};ee.instance=null;var te=ee,ie=class{constructor(){this.logger=h.getInstance(),this.eventsPool=te.getInstance()}},ne="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function se(e,t){try{return e.getAttribute(t)||""}catch{return""}}function re(e){try{const t=ne?.call(e);return"string"==typeof t?t:""}catch{return""}}var ae=class extends ie{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=z.getInstance(),this.isSensitiveElement=(e,t,i)=>{if(!e)return!1;if("password"===e.type)return!0;if(se(e,"data-private"))return!0;const n=["id","name","class","aria-label","placeholder"].map((t=>se(e,t))).filter(Boolean);if(n.some((e=>D(e,t))))return!0;if(i.length){const e=n.map((e=>e.toLowerCase()));if(i.some((t=>e.some((e=>e.includes(t.toLowerCase()))))))return!0}return!1},this.getShouldMaskText=e=>{const t=this.config.getPrivacy();if("allow"===t.level)return!1;const i=e.target;if(!i)return!1;try{if(t.maskSelectors.length&&t.maskSelectors.some((e=>{try{return i.matches?.(e)}catch{return!1}})))return!0}catch{}if(this.isSensitiveElement(i,t.sensitiveKeys,t.maskFieldsLegacy))return!0;if("mask-all"===t.level)return!0;const n=re(i).toLowerCase();return"input"===n||"textarea"===n||"select"===n},this.getKeyCode=e=>{if(e instanceof KeyboardEvent&&e.code&&"Dead"!==e.key){return this.getShouldMaskText({target:e.target})?"*":e.key}return""},this.getText=e=>{const t=e.target;return this.getShouldMaskText({target:e.target||null})?"*":Q({text:t?.innerText||""})},this.getSelector=e=>e.target instanceof Element&&this.generateSelector(e.target)||"",this.getCoordinates=e=>{if({mouseup:!0,mousedown:!0,mousemove:!0,mouseover:!0}[e.type]){const{clientX:t,clientY:i}=e||{};return{clientX:t,clientY:i}}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){u(e)}};this.eventHandlers.push({type:e,handler:t}),p?.addEventListener(e,t)}))}catch(e){u(e)}}destroy(){this.eventHandlers.forEach((({type:e,handler:t})=>{global?.removeEventListener?.(e,t)})),this.eventHandlers=[]}handleEvent(e){try{if(!W())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){u(e)}}buildEvent(e){const t=this.getSelector(e),i=this.getCoordinates(e),n=e.target,s=this.getKeyCode(e),r=this.getText(e);this.logger.log("[dom-events-listener.buildEvent] called");return J({type:"dom.event",attributes:{dom_event_selector:t,dom_event_key_code:s,dom_event_type:e.type,dom_event_coordinates:i||{clientX:0,clientY:0},dom_event_target:{id:se(n,"id"),tagName:re(n),className:se(n,"class"),text:r}}})}queueEvent(e){try{this.logger.log("[dom-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}generateSelector(e,t={}){if(!e||!e.nodeType||e.nodeType!==Node.ELEMENT_NODE)return"";const i=t.root||document.body||document.documentElement,n=t.maxAttempts||10,s=t.priorityAttributes||["id","class","name","aria-label","type","title","alt"];if("html"===re(e).toLowerCase())return"html";let r="",a=0,o=e;const l=[];for(;o&&o!==i&&o!==document.documentElement&&a<n;){let e=re(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 s)if("id"!==t&&"class"!==t)try{const i=o.getAttribute(t);i&&(e+=`[${t}="${i.replace(/"/g,'\\"')}"]`)}catch(e){}}catch(t){e=re(o).toLowerCase()||"*"}l.unshift(e||"*"),r=l.join(" > ");try{if(1===i.querySelectorAll(r).length)return r}catch(e){l.shift(),r=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return r||"*"}},oe=["log","info","warn","error","debug","assert","trace"],le=class extends ie{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=z.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),oe.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){u(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){u(e)}}destroy(){try{if(!this.isInitialized)return;oe.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){u(e)}}handleEvent(e,t){try{if(!W())return;const i=Array.isArray(e)?e:[e],n=this.formatMessage(i,t);if(!n||n?.includes("groundcoverIgnore"))return;const s=this.extractAttributes(i),r=this.buildEvent({message:n,level:t,attributes:s});this.queueEvent(r)}catch(e){u(e)}}buildEvent({message:e,level:t,attributes:i}){const n=this.config.getPrivacy(),s=n.maskLogs&&"allow"!==n.level;let r=s?$(e,n.sensitiveKeys):e;"allow"!==n.level&&(r=U(r,n.redact,{kind:"log"}));return J({type:"log",attributes:{...s&&i?K(i,n.sensitiveKeys):i,message:Q({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const i of e)null!==i&&"object"==typeof i&&"[object Object]"===Object.prototype.toString.call(i)&&Object.assign(t,i);return delete t.message,delete t.level,delete t.location,t}catch(e){return void u(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 u(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{oe.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){u(e)}return e}};function ce(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 u(`Failed to format body: ${e}`),"[unreadable body]"}}var de,he=class extends ie{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=z.getInstance(),this.idGenerator=new y,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!W())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){u(e)}},this.buildEvent=e=>{let t=e.url,i=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const n=this.config.getPrivacy(),s="allow"===n.level;try{t=new URL(e.url).pathname}catch(r){i=new URL(e.url,globalThis.location.href).href,n.maskNetworkQueryParams&&!s&&(t=F(t,n.sensitiveKeys))}n.maskNetworkQueryParams&&!s&&(i=F(i,n.sensitiveKeys)),s||(i=U(i,n.redact,{kind:"query",url:i})),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:i});const r=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),d=n.maskNetworkBodies&&!s,h=e=>{const t=d?function(e,t){if(!e)return e;const i=e.trim();if(i.length<=1e5&&(i.startsWith("{")||i.startsWith("[")))try{const e=JSON.parse(i);return JSON.stringify(j(e,t,0))}catch{}return e.includes("=")&&!e.includes("{")?O(e,t):$(e,t)}(e,n.sensitiveKeys):e;return s?t:U(t,n.redact,{kind:"body",url:i})},g=Q({text:h(e.request.body),maxLength:this.maxBodyLength}),u=Q({text:h(e.response.body),maxLength:this.maxBodyLength}),p={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:i},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:r,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:g},response:{body:u}}},m={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?f(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?f(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:p};return l&&(m.traceId=l),c&&(m.spanId=c),J(m)}}async getResponseBody(e){let t;try{const i=e.clone().body;if(i){let e,n=i.getReader(),s=new TextDecoder,r="";for(;!(e=await n.read()).done;){let t=e.value;r+=s.decode(t)}t=r}else t=""}catch(e){t=`Unable to clone response: ${e}`}return t}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 i=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(i).test(e)}return e===t}))}catch(e){return u(e),!1}}queueEvent(e){try{this.logger.log("[network-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}patchXHR(){const e=this,t=globalThis.XMLHttpRequest.prototype.open,i=globalThis.XMLHttpRequest.prototype.send,n=globalThis.XMLHttpRequest.prototype.setRequestHeader;let s;globalThis.XMLHttpRequest.prototype.open=function(i,n,r=!0,a,o){if(s=Date.now(),e.shouldIgnoreRequest(n.toString()))return t.apply(this,[i,n,r,a,o]);const l=new URL(n.toString(),globalThis.location.href).href;return this._requestMethod=i,this._requestUrl=l,this._requestHeaders={},t.apply(this,[i,n,r,a,o])},globalThis.XMLHttpRequest.prototype.setRequestHeader=function(e,t){return this._requestHeaders&&(this._requestHeaders[e]=t),n.apply(this,[e,t])},globalThis.XMLHttpRequest.prototype.send=function(...t){const n=this._requestUrl?.toString();if(!n||e.shouldIgnoreRequest(n))return i.apply(this,t);if(e.shouldAddTraceHeader(n)){const t=e.config.getConfig(),i=e.getTraceIds();t?.options?.traceOrigin?.name&&e.addHeaderToXhrRequest({request:this,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),i&&(t?.options?.tracePropagationTraceIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:i.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&e.addHeaderToXhrRequest({request:this,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:i.decimalSpanId}),Boolean(t?.options?.tracePropagationHeaders)&&t?.options?.tracePropagationHeaders?.forEach((t=>{e.addHeaderToXhrRequest({request:this,headerName:t,headerValue:i.traceparent})})),t?.options?.tracePropagationHeaders?.length||e.addHeaderToXhrRequest({request:this,headerName:"traceparent",headerValue:i.traceparent}))}return this._requestBody=t[0]||"",this.addEventListener("load",(()=>{const t=Date.now(),i={};this.getAllResponseHeaders().split(/\r?\n/).forEach((e=>{const[t,n]=e.split(": ");t&&n&&(i[t.trim()]=n.trim())}));const n=ce(this._requestBody),r=ce(""===this.responseType||"text"===this.responseType?this.responseText:this.response),a={timestamp:s,end_time:t,method:this._requestMethod,url:this._requestUrl,body:n,status:this.status,request:{headers:this._requestHeaders||{},body:n},response:{headers:i,body:r}};e.handleEvent(a)})),i.apply(this,t)}}normalizeHeaders(e,t){try{const i=e?new Headers(e):new Headers;return t?(t instanceof Headers?t.forEach(((e,t)=>i.set(t,e))):Array.isArray(t)?new Headers(t).forEach(((e,t)=>i.set(t,e))):"object"==typeof t&&Object.entries(t).forEach((([e,t])=>i.set(e,t))),i):i}catch{return new Headers}}addTraceHeaders(e){const t=this.config.getConfig(),i=this.getTraceIds();if(t?.options?.traceOrigin?.name&&this.addHeaderToFetchRequest({init:e,headerName:t.options.traceOrigin.name,headerValue:t.options.traceOrigin.value}),!i)return;t?.options?.tracePropagationTraceIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationTraceIdHeaderName,headerValue:i.decimalTraceId}),t?.options?.tracePropagationSpanIdHeaderName&&this.addHeaderToFetchRequest({init:e,headerName:t.options.tracePropagationSpanIdHeaderName,headerValue:i.decimalSpanId});const n=t?.options?.tracePropagationHeaders;(n?.length?n:["traceparent"]).forEach((t=>{this.addHeaderToFetchRequest({init:e,headerName:t,headerValue:i.traceparent})}))}extractHeadersRecord(e){const t={};return e instanceof Headers&&e.forEach(((e,i)=>{t[i]=e})),t}patchFetch(){const e=globalThis.fetch;globalThis.fetch=(...t)=>{const i=Date.now();let[n,s]=t;s={...s||{}},t[1]=s;const r=n instanceof Request,a=s?.method||"GET",o=s?.body||"",l=n instanceof Request?n.url:n.toString();if(this.shouldIgnoreRequest(l))return e.apply(globalThis,t);const c=this.shouldAddTraceHeader(l);s||(t[1]={},s=t[1]),s.headers=this.normalizeHeaders(r?n.headers:void 0,s.headers),c&&this.addTraceHeaders(s);const d=this.extractHeadersRecord(s.headers),h=ce(o);return e.apply(globalThis,t).then((e=>{const t=Date.now(),n=e.clone(),s={};n.headers.forEach(((e,t)=>{s[t]=e}));const r={method:a,url:l,timestamp:i,body:h,status:n.status,end_time:t,request:{headers:d,body:h},response:{headers:s,body:""}};try{s["content-type"]?.includes("text/event-stream")?(r.response.body="[unreadable response body]",this.handleEvent(r)):this.getResponseBody(n).then((e=>{r.response.body=e,this.handleEvent(r)})).catch((e=>{r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}))}catch(e){r.response.body="[unreadable response body]",this.handleEvent(r),this.logger.log("[network-events-listener.patchFetch] error",{error:e})}return e})).catch((e=>{const t=Date.now();let i="NetworkError";const n=e.message||"Unknown network error";e instanceof TypeError&&n.includes("Failed to fetch")?i="ERR_NETWORK_FAILURE":n.includes("Name not resolved")?i="ERR_NAME_NOT_RESOLVED":n.includes("Connection refused")&&(i="ERR_CONNECTION_REFUSED");const s={method:a,url:l,body:h,status:0,end_time:t,request:{headers:d,body:h},response:{headers:{},body:""},error:{type:i}};throw this.handleEvent(s),e}))}}formatHeaders(e){const t=this.config.getPrivacy(),i="allow"===t.level,n=function(e,t){return e?Object.entries(e).reduce(((e,[i,n])=>{const s=i.toLowerCase();return _.includes(s)||q.test(s)||D(i,t)?e[i]=M:e[i]=n,e}),{}):e}(e,i?void 0:t.sensitiveKeys);return Object.entries(n)?.reduce(((e,[n,s])=>{if("[REDACTED]"===s)return e[n]=s,e;const r=i?s:U(s,t.redact,{kind:"header"});return e[n]=Q({text:r}),e}),{})}extractTraceIds(e){const t=this.config.getConfig();let i="",n="";if(t?.options?.tracePropagationTraceIdHeaderName){const n=e[t.options.tracePropagationTraceIdHeaderName];n&&"string"==typeof n&&(i=n)}if(t?.options?.tracePropagationSpanIdHeaderName){const i=e[t.options.tracePropagationSpanIdHeaderName];i&&"string"==typeof i&&(n=i)}if(!i||!n){const t=this.extractTraceparentHeader(e);if(t){const e=t.split("-");4===e.length&&"00"===e[0]&&(!i&&e[1]&&32===e[1].length&&(i=e[1]),!n&&e[2]&&16===e[2].length&&(n=e[2]))}}return{traceId:i,spanId:n}}extractTraceparentHeader(e){const t=this.config.getConfig();if(t?.options?.tracePropagationHeaders?.length)for(const i of t.options.tracePropagationHeaders){const t=e[i];if(t&&"string"==typeof t)return t}const i=e.traceparent;return i&&"string"==typeof i?i:""}getTraceIds(){const e=this.idGenerator.generateSpanId(),t=this.idGenerator.generateTraceId();let i,n;try{i=BigInt("0x"+t).toString(10),n=BigInt("0x"+e).toString(10)}catch(s){this.logger.log("[network-events-listener.getTraceIds] error",{error:s}),i=t,n=e}return{traceparent:`00-${t}-${e}-01`,traceId:t,spanId:e,decimalTraceId:i,decimalSpanId:n}}addHeaderToXhrRequest({request:e,headerName:t,headerValue:i}){if(this.logger.log("[network-events-listener.addHeaderToXhrRequest] called",{request:e,headerName:t,headerValue:i}),this.isValidHeaderName(t))try{e.setRequestHeader(t,i),e._requestHeaders[t]=i}catch(e){this.logger.log("[network-events-listener.addHeaderToXhrRequest] Error setting header",{error:e,headerName:t,headerValue:i})}else this.logger.log("[network-events-listener.addHeaderToXhrRequest] Invalid header name",{headerName:t})}addHeaderToFetchRequest({init:e,headerName:t,headerValue:i}){if(this.logger.log("[network-events-listener.addHeaderToFetchRequest] called",{init:e,headerName:t,headerValue:i}),this.isValidHeaderName(t))try{e.headers instanceof Headers?e.headers.set(t,i):e.headers={...e.headers,[t]:i}}catch(e){this.logger.log("[network-events-listener.addHeaderToFetchRequest] Error setting header",{error:e,headerName:t,headerValue:i})}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?.tracePropagationUrls?.length)return!1;const i=t.options.tracePropagationUrls?.some((t=>{const i=t.replace(/\*/g,".*"),n=new RegExp(`^${i}$`),s=e.startsWith("/")?new URL(e,globalThis.location.href).pathname:e;return n.test(s)}));return this.logger.log("[network-events-listener.shouldAddTraceHeader] result",{url:e,result:i}),i}},ge=class extends ie{constructor(){super(...arguments),this.config=z.getInstance(),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let i;if(e instanceof Error)i=e,this.enhanceError(i);else if(e instanceof ErrorEvent){if(i=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(i.message))return;this.enhanceError(i,e)}else{if(!(e instanceof PromiseRejectionEvent))return;i=this.createUnhandledRejectionError(e)}const n=this.buildEvent(i,t);this.queueEvent(n)}catch(e){u(e)}}}initialize(){p?.addEventListener("error",this.handleEvent),p?.addEventListener("unhandledrejection",this.handleEvent)}destroy(){p?.removeEventListener("error",this.handleEvent),p?.removeEventListener("unhandledrejection",this.handleEvent)}buildEvent(e,t){const i=this.config.getPrivacy(),n=i.maskErrors&&"allow"!==i.level,s=e.message||"Unknown error";let r=n?$(s,i.sensitiveKeys):s;"allow"!==i.level&&(r=U(r,i.redact,{kind:"error"}));const a=n&&t?.metadata?K(t.metadata,i.sensitiveKeys):t?.metadata;return J({type:"exception",attributes:{error_type:e.name||"Error",error_message:r,error_stacktrace:this.buildStackTrace(e,n,i.sensitiveKeys),error_fingerprint:`${e.name}:${Q({text:r,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:a}})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}enhanceError(e,t){const{filename:i,lineno:n,colno:s}=t||{};i&&!e.fileName&&Object.defineProperty(e,"fileName",{value:i}),n&&!e.lineNumber&&Object.defineProperty(e,"lineNumber",{value:n}),s&&!e.columnNumber&&Object.defineProperty(e,"columnNumber",{value:s})}createUnhandledRejectionError(e){let t;if(e.reason instanceof Error)t=e.reason;else{const i="object"==typeof e.reason?JSON.stringify(e.reason,null,2):String(e.reason);t=new Error(i),t.name="UnhandledRejection",Object.defineProperty(t,"originalReason",{value:e.reason,enumerable:!1})}return t}buildStackTrace(e,t=!1,n=[]){if(!e)return[];try{return i.parse(e).map((e=>{const i=e.fileName||"unknown";return{filename:t?F(i,n):i,function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0}}))}catch(e){return[]}}},ue=class extends ie{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=p.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){u(e)}}isInBrowserEnvironment(){try{return void 0!==p&&void 0!==p.location&&void 0!==p.history&&"function"==typeof p.addEventListener}catch(e){return u(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 i=e.apply(history,t);return this.handleLocationChange(),i},history.replaceState=(...e)=>{const i=t.apply(history,e);return this.handleLocationChange(),i},p&&"function"==typeof p.addEventListener&&(p.addEventListener("popstate",this.popStateHandler),p.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){u(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState=this.originalPushState,history.replaceState=this.originalReplaceState),p&&"function"==typeof p.removeEventListener&&(p.removeEventListener("popstate",this.popStateHandler),p.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){u(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){u(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",p.location.href);const e=z.getInstance().getPrivacy(),t="allow"===e.level,i=p.location.href,n=this.activeNavigation?.metadata;return J({type:"navigation",attributes:{page_url:!t&&e.maskNetworkQueryParams?F(i,e.sensitiveKeys):i,metadata:!t&&n?K(n,e.sensitiveKeys):n,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){u(e)}}startNavigation(e){this.logger.log("[navigation-listener.startNavigation] called",e),this.activeNavigation={page_url:p.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===p.location.href)return;let e,t;try{e=new URL(p.location.href),t=new URL(this.currentUrl)}catch(e){return void u(e)}const i=e=>e.startsWith("#/"),n=i(e.hash)||i(t.hash);(e.pathname!==t.pathname||n&&e.hash!==t.hash)&&(this.currentUrl=p.location.href,this.handleEvent())}catch(e){u(e)}}},pe=class extends ie{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",p),"complete"===p?.document?.readyState?(this.logger.log("Page already loaded, triggering event immediately"),this.handleEvent()):p?.addEventListener("load",this.loadEventHandler)}catch(e){this.logger.log("[page-load-listener.initialize] error",e),u(e)}}destroy(){p?.removeEventListener("load",this.loadEventHandler)}handleEvent(){try{this.logger.log("[page-load-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){u(e)}}buildEvent(){const e=performance.getEntriesByType("navigation")[0],t=e?e.loadEventEnd-e.startTime:0,i=performance.getEntriesByType("resource"),n={count:i.length,totalSize:0,totalDuration:0,byType:{}};i.forEach((e=>{const t=e,i=t.transferSize||0,s=t.duration,r=t.initiatorType;n.totalSize+=i,n.totalDuration+=s,n.byType[r]||(n.byType[r]={count:0,size:0,duration:0}),n.byType[r].count++,n.byType[r].size+=i,n.byType[r].duration+=s}));const s=z.getInstance().getPrivacy(),r="allow"!==s.level&&s.maskNetworkQueryParams,a=p?.location?.href||"",o=p?.document?.referrer||"";return J({type:"pageload",attributes:{page_url:r?F(a,s.sensitiveKeys):a,page_load_time:t,page_referrer:r?F(o,s.sensitiveKeys):o,page_resources:n}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}},me=class extends ie{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!W())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){u(e)}}}initialize(){n(this.handleEvent),s(this.handleEvent),r(this.handleEvent),a(this.handleEvent),o(this.handleEvent)}destroy(){}buildEvent(e){return J({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){u(e)}}},fe=class{constructor(){this.logger=h.getInstance(),this.eventsPool=te.getInstance(),this.configManager=z.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?.sessionReplay?.blockedSelectors?.filter(Boolean),t=e?.length?e.join(", "):void 0,i=this.configManager.getPrivacy();this.stopFn=l({...t?{blockSelector:t}:{},...i.maskTextSelector?{maskTextSelector:i.maskTextSelector}:{},maskAllInputs:i.maskInputs,...i.maskTextFn?{maskTextFn:i.maskTextFn}:{},...i.maskInputFn?{maskInputFn:i.maskInputFn}:{},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){u(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){u(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=p.setTimeout((()=>{if(this.sendTimerId=null,this.isRecording)try{this.sendBatch()}catch(e){u(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}}),0))}clearScheduledSend(){null!==this.sendTimerId&&(p.clearTimeout(this.sendTimerId),this.sendTimerId=null)}sendBatch(){if(0!==this.events.length)try{const e=this.events.map((e=>c(e))),t=this.batchContainsFullSnapshot,i=this.fullSnapshotTimestamp,n={_gc_replay_data:{events:e}};t&&(n.replay_is_full_snapshot=!0,n.replay_full_snapshot_timestamp=i);const s=J({type:"replay",attributes:n});this.eventsPool.addEvent(s),this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,this.logger.log("[session-replay-listener] sent batch with",e.length,"events",t?"(includes full snapshot)":"")}catch(e){u(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.sendBatch(),this.stopFn=null,this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0}catch(e){u(e),this.logger.log("[session-replay-listener] failed to stop recording:",e)}}destroy(){this.stopRecording()}},ve=["pointerdown","keydown","scroll","touchstart","mousemove"],ye=class{constructor(e){this.logger=h.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){u(e)}}},this.callbacks=e}initialize(){this.installed||(this.installed=!0,ve.forEach((e=>{try{p.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){u(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){u(e)}}),T)}catch(e){u(e)}}destroy(){if(this.installed){this.installed=!1,ve.forEach((e=>{try{p.removeEventListener?.(e,this.handleInput,{capture:!0})}catch(e){u(e)}}));try{this.idleTimer&&clearTimeout(this.idleTimer)}catch(e){u(e)}finally{this.idleTimer=null}}}},be=new Set(["dom.event","navigation","pageload","custom"]),Ee=class{constructor(){this.logger=h.getInstance(),this.eventsPool=te.getInstance(),this.configManager=z.getInstance(),this.idGenerator=new y,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 ye({onPresence:e=>this.reconcileSession(e,!0),onIdle:()=>this.pauseReplayOnIdle()}),this.presenceMonitor.initialize();const e=this.configManager.getConfig(),t=e?.options?.enabledEvents,i=!t||0===t.length,n=[];(i||t?.includes("pageload"))&&(this.pageLoadListener=new pe,this.pageLoadListener.initialize(),n.push("pageload")),(i||t?.includes("dom"))&&(this.domEventsListener=new ae,this.domEventsListener.initialize(),n.push("dom")),(i||t?.includes("logs"))&&(this.logEventsListener=new le,this.logEventsListener.initialize(),n.push("logs")),(i||t?.includes("exceptions"))&&(this.errorsEventsListener=new ge,this.errorsEventsListener.initialize(),n.push("exceptions")),(i||t?.includes("network"))&&(this.networkEventsListener=new he,this.networkEventsListener.initialize(),n.push("network")),(i||t?.includes("performance"))&&(this.performanceListener=new me,this.performanceListener.initialize(),n.push("performance")),this.navigationListener=new ue({isEnabled:i||t?.includes("navigation")}),this.navigationListener.initialize(),n.push("navigation"),this.logger.log("[instrumentation-manager.instrument] initialized listeners based on config:",n)}sendCustomEvent(e){this.logger.log("[instrumentation-manager.sendCustomEvent] called",e);try{const t=J({type:"custom",attributes:{custom_event_name:e?.event,custom_event_attributes:e?.attributes}});this.eventsPool.addEvent(t)}catch(e){u(e)}}emitLog(e,t,i){if(this.logEventsListener){this.logger.log("[instrumentation-manager.emitLog] called",{message:e,level:t,attributes:i});try{const n={...i||{}};delete n.message,delete n.level,delete n.location;const s=J({type:"log",attributes:{...n,message:Q({text:e}),level:t}});this.eventsPool.addEvent(s)}catch(e){u(e)}}}captureException(e,t){try{this.logger.log("[instrumentation-manager.captureException] called",e),this.errorsEventsListener?.handleEvent(e,{handled:!0,metadata:t})}catch(e){u(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()}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 fe;e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){u(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 i=this.configManager.getSessionElapsedMs(e),n=this.configManager.getSessionMaxDuration(),s=i>=n;this.logger.log("[instrumentation-manager] session reconcile",{userPresent:t,elapsedMs:i,maxDurationMs:n,expired:s}),s&&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(),be.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(),i=this.isReplayRecording();this.logger.log("[instrumentation-manager] session rotation start",{reason:e.reason,previousId:t,wasReplayActive:i});const n=(e,t)=>{try{this.logger.log(`[instrumentation-manager] session rotation: ${e}`),t()}catch(t){u(t),this.logger.log(`[instrumentation-manager] failed to ${e} during session rotation:`,t)}};try{n("stop replay",(()=>this.stopReplayListener())),n("flush events",(()=>this.eventsPool.flush())),n("rotate session ids",(()=>{const e=this.idGenerator.generateId();this.configManager.setSessionId(e),this.configManager.setSessionStartTime(f(Date.now())),this.logger.log("[instrumentation-manager] session id rotated",{from:t,to:e})})),n("sync replay",(()=>this.syncReplayState(i)))}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}},Ie="gcSample",Se=class{constructor(e){this.initialized=!1,this.logger=h.initialize({debug:e.options?.debug||!1,prefix:"[groundcover]"}),this.logger.log("[session-manager] initialize called"),this.instrumentationManager=new Ee,this.idGenerator=new y;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=z.getInstance();t.initialize(e);te.getInstance().initialize();const i=e.sessionId,n=t.getSessionId();i&&i!==n?(t.setSessionId(i),t.setSessionStartTime(f(Date.now())),this.logger.log("[session-manager] using provided sessionId:",i)):i?(t.setSessionId(i),this.logger.log("[session-manager] continuing provided sessionId:",i)):n||t.setSessionId(this.idGenerator.generateId());const s=Date.now(),r=v(t.getSessionStartTime());if(r>0&&s-r>=-6e4){if(t.isSessionExpired(s)||t.isSessionInactive(s)){const e=t.isSessionExpired(s)?"persisted session past cap":"inactivity gap across reload",i=t.getSessionId(),n=this.idGenerator.generateId();t.setSessionId(n),t.setSessionStartTime(f(s)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:i,to:n})}}else t.setSessionStartTime(f(s));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=N(Ie);if(t){const e="1"===t;return this.logger.log("[session-manager] using stored sampling decision:",e),e}const i=!e||Math.random()<e;return C(Ie,i?"1":"0"),this.logger.log("[session-manager] stored new sampling decision:",i),i}catch(t){this.logger.log("[session-manager] session storage access failed:",t);const i=!e||Math.random()<e;return this.logger.log("[session-manager] using fallback sampling decision:",i),i}}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");z.getInstance().updateConfig({userIdentifier:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");z.getInstance().updateConfig(e);const t=e.options;!!t&&("privacy"in t||"enableMasking"in t||"maskFields"in t)&&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,i){this.initialized?this.instrumentationManager.emitLog(e,t,i):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?z.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{const t=te.getInstance();await t.flushSync();const i=e||this.idGenerator.generateId(),n=z.getInstance();n.setSessionId(i),n.setSessionStartTime(f(Date.now())),this.logger.log("[session-manager] session ID set successfully:",i)}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(),te.getInstance().destroy(),z.getInstance().clearSessionState(),this.initialized=!1)}},we=new class{constructor(e){this.manager=e}emit(e,t,i){this.manager&&this.manager.emitLog(t,e,i)}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 Te={init:function(e){try{de=new Se({cluster:e?.cluster||"",environment:e?.environment||"",namespace:e?.namespace,releaseId:e?.releaseId,dsn:e?.dsn||"",appId:e?.appId||"",userIdentifier:e?.userIdentifier,apiKey:e?.apiKey||"",options:e?.options,sessionId:e?.sessionId}),we.manager=de}catch(e){u(e)}},identifyUser:function(e){de?de.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){de&&de.sendCustomEvent(e)},captureException:function(e,t){de&&de.captureException(e,t)},logger:we,updateConfig:function(e){de&&de.updateConfig(e)},startNavigation:function(e){de?de.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){de?de.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return de?de.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(de)try{await de.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(){de?de.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){de?de.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=Te}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var Re=Te;export{Re as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@groundcover/browser",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.79-rc.0",
|
|
4
4
|
"description": "groundcover browser SDK",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -19,9 +19,8 @@
|
|
|
19
19
|
"LICENSE"
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build:
|
|
23
|
-
"build
|
|
24
|
-
"build": "npm run build:worker && tsc --noEmit && tsup",
|
|
22
|
+
"build:watch": "tsc --noEmit && WATCH=true tsup --watch",
|
|
23
|
+
"build": "tsc --noEmit && tsup",
|
|
25
24
|
"size": "npm run build && size-limit",
|
|
26
25
|
"lint": "eslint .",
|
|
27
26
|
"test": "vitest && npm run lint && npm run size",
|
|
@@ -60,11 +59,11 @@
|
|
|
60
59
|
"size-limit": [
|
|
61
60
|
{
|
|
62
61
|
"path": "dist/index.js",
|
|
63
|
-
"limit": "
|
|
62
|
+
"limit": "84 kB"
|
|
64
63
|
},
|
|
65
64
|
{
|
|
66
65
|
"path": "dist/index.mjs",
|
|
67
|
-
"limit": "
|
|
66
|
+
"limit": "83 kB"
|
|
68
67
|
}
|
|
69
68
|
]
|
|
70
69
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!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)})}}}();
|