@groundcover/browser 0.0.79-rc.1 → 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -151,6 +151,12 @@ 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
+
154
160
  You can pass the values by calling the init function:
155
161
 
156
162
  ```typescript
@@ -0,0 +1 @@
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)})}}}();
package/dist/index.d.mts CHANGED
@@ -174,10 +174,28 @@ type EventTypes = {
174
174
  replay: Event<"replay", ReplayEventAttributes>;
175
175
  };
176
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;
177
+ /** The non-replay event surface a redactor field belongs to. */
178
+ type RedactKind = "request-body" | "response-body" | "query" | "header" | "log" | "error";
179
+ interface RedactField {
180
+ /** Immediate key of the value; `""` for whole-string fields (log/error message). */
181
+ key: string;
182
+ /** The leaf value — always a primitive, never an object/array. */
183
+ value: string | number | boolean | null;
184
+ /** Full key path to this leaf; `[]` for whole-string fields. */
185
+ path: string[];
186
+ /** Which event surface this field came from (header name is in `key`). */
187
+ kind: RedactKind;
188
+ /** Whether the built-in patterns + `sensitiveKeys` would redact this field. */
189
+ sensitive: boolean;
190
+ }
191
+ /**
192
+ * Per-field redaction hook. Invoked on each LEAF value during the redaction
193
+ * walk (never on objects/arrays — the SDK recurses those itself and never
194
+ * passes them here). Return a primitive replacement, or `undefined` to defer
195
+ * to the SDK default (`sensitive ? '[REDACTED]' : value`) — so a hook that
196
+ * only cares about one field can't accidentally disable masking elsewhere.
197
+ */
198
+ type Redactor = (field: RedactField) => string | number | boolean | null | undefined;
181
199
  interface PrivacyOptions {
182
200
  /**
183
201
  * Master switch for replay + non-replay masking. `'mask-user-input'`
@@ -198,15 +216,18 @@ interface PrivacyOptions {
198
216
  /** Extra case-insensitive key substrings treated as sensitive, merged with the built-in patterns. */
199
217
  sensitiveKeys?: string[];
200
218
  /**
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).
219
+ * Per-field custom redaction hook for non-replay events. Called on each leaf
220
+ * value during the redaction walk with the original typed value; see
221
+ * {@link Redactor}. For arbitrary whole-event changes use `enrichEvent`.
204
222
  */
205
223
  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;
224
+ /** Session-recording (rrweb replay) masking — the only place replay can be masked. */
225
+ replay?: {
226
+ /** rrweb `maskTextFn` pass-through. */
227
+ maskTextFn?: (text: string, el: HTMLElement | null) => string;
228
+ /** rrweb `maskInputFn` pass-through. */
229
+ maskInputFn?: (text: string, el: HTMLElement) => string;
230
+ };
210
231
  }
211
232
  interface SDKOptions {
212
233
  batchSize: number;
@@ -399,4 +420,4 @@ declare const groundcover: {
399
420
  stopReplayRecording: typeof stopReplayRecording;
400
421
  };
401
422
 
402
- export { type EventTypes, type PrivacyLevel, type PrivacyOptions, type Redactor, type SDKOptions, groundcover as default };
423
+ export { type EventTypes, type PrivacyLevel, type PrivacyOptions, type RedactField, type RedactKind, type Redactor, type SDKOptions, groundcover as default };
package/dist/index.d.ts CHANGED
@@ -174,10 +174,28 @@ type EventTypes = {
174
174
  replay: Event<"replay", ReplayEventAttributes>;
175
175
  };
176
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;
177
+ /** The non-replay event surface a redactor field belongs to. */
178
+ type RedactKind = "request-body" | "response-body" | "query" | "header" | "log" | "error";
179
+ interface RedactField {
180
+ /** Immediate key of the value; `""` for whole-string fields (log/error message). */
181
+ key: string;
182
+ /** The leaf value — always a primitive, never an object/array. */
183
+ value: string | number | boolean | null;
184
+ /** Full key path to this leaf; `[]` for whole-string fields. */
185
+ path: string[];
186
+ /** Which event surface this field came from (header name is in `key`). */
187
+ kind: RedactKind;
188
+ /** Whether the built-in patterns + `sensitiveKeys` would redact this field. */
189
+ sensitive: boolean;
190
+ }
191
+ /**
192
+ * Per-field redaction hook. Invoked on each LEAF value during the redaction
193
+ * walk (never on objects/arrays — the SDK recurses those itself and never
194
+ * passes them here). Return a primitive replacement, or `undefined` to defer
195
+ * to the SDK default (`sensitive ? '[REDACTED]' : value`) — so a hook that
196
+ * only cares about one field can't accidentally disable masking elsewhere.
197
+ */
198
+ type Redactor = (field: RedactField) => string | number | boolean | null | undefined;
181
199
  interface PrivacyOptions {
182
200
  /**
183
201
  * Master switch for replay + non-replay masking. `'mask-user-input'`
@@ -198,15 +216,18 @@ interface PrivacyOptions {
198
216
  /** Extra case-insensitive key substrings treated as sensitive, merged with the built-in patterns. */
199
217
  sensitiveKeys?: string[];
200
218
  /**
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).
219
+ * Per-field custom redaction hook for non-replay events. Called on each leaf
220
+ * value during the redaction walk with the original typed value; see
221
+ * {@link Redactor}. For arbitrary whole-event changes use `enrichEvent`.
204
222
  */
205
223
  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;
224
+ /** Session-recording (rrweb replay) masking — the only place replay can be masked. */
225
+ replay?: {
226
+ /** rrweb `maskTextFn` pass-through. */
227
+ maskTextFn?: (text: string, el: HTMLElement | null) => string;
228
+ /** rrweb `maskInputFn` pass-through. */
229
+ maskInputFn?: (text: string, el: HTMLElement) => string;
230
+ };
210
231
  }
211
232
  interface SDKOptions {
212
233
  batchSize: number;
@@ -399,4 +420,4 @@ declare const groundcover: {
399
420
  stopReplayRecording: typeof stopReplayRecording;
400
421
  };
401
422
 
402
- export { type EventTypes, type PrivacyLevel, type PrivacyOptions, type Redactor, type SDKOptions, groundcover as default };
423
+ export { type EventTypes, type PrivacyLevel, type PrivacyOptions, type RedactField, type RedactKind, 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"),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},w=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 T(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function k(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return d(e),null}}function R(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=k(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 w(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=T(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:T(t?.sensitiveKeys),maskFieldsLegacy:T(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 k("gcId")||""}setSessionId(e){this.sessionId=e,R("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:N("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,R("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,R("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|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,_=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]);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 P(e,t){return q(e,t)||z.test(e)}function D(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 function(e,t){return _.has(e.toLowerCase())||q(e,t)}(s,t)?`${n}=${encodeURIComponent(H)}`:e})).join("&")}catch{return e}}function A(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}?${D(a,t)}${o}`}function O(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=>O(e,t,i+1)));const n={};for(const[s,r]of Object.entries(e))q(s,t)?n[s]=H:n[s]=O(r,t,i+1);return n}function F(e,t){if(!e)return e;try{let i=e.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,i)=>P(i,t)?`"${i}":"${H}"`:e));return i=i.replace(/([\w.-]{1,64})=([^\s&,;]+)/g,((e,i)=>P(i,t)?`${i}=${H}`:e)),i=i.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,i)=>P(i,t)?`${i}: ${H}`:e)),i}catch(t){return d(t),e}}function j(e,t){return O(e,t,0)}function $(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 K=C.getInstance(),U=new m,B=l.getInstance();function X(){const e=K?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function V(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?V(e,`${a}[${t}]`,i,n+1):e)):Object.assign(e,V(r,a,i,n+1)):e[a]=r,e}),{}))}catch(e){return B.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{i.delete(e)}var s}function W(e){const t=u(Date.now()),i=U.generateId(),n=e.spanId||U.generateSpanId(),s=e.traceId||U.generateTraceId(),r=e.parentSpanId||"",a=V(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=K.getPrivacy(),s="allow"!==n.level&&n.maskNetworkQueryParams;return{path:s&&t?A(i,n.sensitiveKeys):i,url:s?A(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 G({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var J=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`}},Q=["navigation","dom.event"],Y=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 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){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&&!Q.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}}};Y.instance=null;var Z=Y,ee=class{constructor(){this.logger=l.getInstance(),this.eventsPool=Z.getInstance()}},te="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function ie(e,t){try{return e.getAttribute(t)||""}catch{return""}}function ne(e){try{const t=te?.call(e);return"string"==typeof t?t:""}catch{return""}}var se=class extends ee{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(ie(e,"data-private"))return!0;const n=["id","name","class","aria-label","placeholder"].map((t=>ie(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=ne(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})?"*":G({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(!X())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 W({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:ie(n,"id"),tagName:ne(n),className:ie(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"===ne(e).toLowerCase())return"html";let r="",a=0,o=e;const l=[];for(;o&&o!==i&&o!==document.documentElement&&a<n;){let e=ne(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=ne(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||"*"}},re=["log","info","warn","error","debug","assert","trace"],ae=class extends ee{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=C.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),re.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;re.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){d(e)}}handleEvent(e,t){try{if(!X())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?F(e,n.sensitiveKeys):e;"allow"!==n.level&&(r=$(r,n.redact,{kind:"log"}));return W({type:"log",attributes:{...s&&i?j(i,n.sensitiveKeys):i,message:G({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{re.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){d(e)}return e}};function oe(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 le,ce=class extends ee{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(!X())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=A(t,n.sensitiveKeys))}n.maskNetworkQueryParams&&!s&&(i=A(i,n.sensitiveKeys)),s||(i=$(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(O(e,t,0))}catch{}return e.includes("=")&&!e.includes("{")?D(e,t):F(e,t)}(e,n.sensitiveKeys):e;return s?t:$(t,n.redact,{kind:"body",url:i})},g=G({text:h(e.request.body),maxLength:this.maxBodyLength}),p=G({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),W(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=oe(this._requestBody),r=oe(""===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=oe(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:$(s,t.redact,{kind:"header"});return e[n]=G({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}},de=class extends ee{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?F(s,i.sensitiveKeys):s;"allow"!==i.level&&(r=$(r,i.redact,{kind:"error"}));const a=n&&t?.metadata?j(t.metadata,i.sensitiveKeys):t?.metadata;return W({type:"exception",attributes:{error_type:e.name||"Error",error_message:r,error_stacktrace:this.buildStackTrace(e,n,i.sensitiveKeys),error_fingerprint:`${e.name}:${G({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?A(n,i):n,function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0}}))}catch(e){return[]}}},he=class extends ee{constructor({isEnabled:e}){if(super(),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&e)try{this.isAutomaticNavigationEnabled=e,this.currentUrl=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 W({type:"navigation",attributes:{page_url:!t&&e.maskNetworkQueryParams?A(i,e.sensitiveKeys):i,metadata:!t&&n?j(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)}}},ge=class extends ee{constructor(){super(),this.loadEventHandler=()=>{this.logger.log("load event"),this.handleEvent()}}initialize(){try{this.logger.log("[page-load-listener.initialize] called"),this.logger.log("globalThis",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 W({type:"pageload",attributes:{page_url:r?A(a,s.sensitiveKeys):a,page_load_time:t,page_referrer:r?A(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)}}},ue=class extends ee{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!X())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 W({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)}}},pe=class{constructor(){this.logger=l.getInstance(),this.eventsPool=Z.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=W({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()}},me=["pointerdown","keydown","scroll","touchstart","mousemove"],fe=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,me.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,me.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}}}},ve=new Set(["dom.event","navigation","pageload","custom"]),ye=class{constructor(){this.logger=l.getInstance(),this.eventsPool=Z.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 fe({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 ge,this.pageLoadListener.initialize(),n.push("pageload")),(i||t?.includes("dom"))&&(this.domEventsListener=new se,this.domEventsListener.initialize(),n.push("dom")),(i||t?.includes("logs"))&&(this.logEventsListener=new ae,this.logEventsListener.initialize(),n.push("logs")),(i||t?.includes("exceptions"))&&(this.errorsEventsListener=new de,this.errorsEventsListener.initialize(),n.push("exceptions")),(i||t?.includes("network"))&&(this.networkEventsListener=new ce,this.networkEventsListener.initialize(),n.push("network")),(i||t?.includes("performance"))&&(this.performanceListener=new ue,this.performanceListener.initialize(),n.push("performance")),this.navigationListener=new he({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=W({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=W({type:"log",attributes:{...n,message:G({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 pe;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(),ve.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}},be="gcSample",Ee=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 ye,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);Z.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=k(be);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 R(be,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=Z.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(),Z.getInstance().destroy(),C.getInstance().clearSessionState(),this.initialized=!1)}},Se=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 Ie={init:function(e){try{le=new Ee({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}),Se.manager=le}catch(e){d(e)}},identifyUser:function(e){le?le.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){le&&le.sendCustomEvent(e)},captureException:function(e,t){le&&le.captureException(e,t)},logger:Se,updateConfig:function(e){le&&le.updateConfig(e)},startNavigation:function(e){le?le.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){le?le.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return le?le.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(le)try{await le.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(){le?le.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){le?le.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=Ie}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var we=Ie;module.exports=we;
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++)v[e]=Math.floor(16*Math.random())+48,v[e]>=58&&(v[e]+=39);return y+String.fromCharCode.apply(null,v.slice(0,16))},this.generateSpanId=m(8),this.generateId=m(16)}},v=Array(32);function m(e){return function(){for(let t=0;t<2*e;t++)v[t]=Math.floor(16*Math.random())+48,v[t]>=58&&(v[t]+=39);return String.fromCharCode.apply(null,v.slice(0,2*e))}}var y="0000000000000000";var b=144e5,w=288e5,k=18e5,E={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},S=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={...E,...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){if(t.options){const n=t.options.privacy?{...this.providedOptions?.privacy,...t.options.privacy}:void 0,i=t.options.privacy?{...this.options.privacy,...t.options.privacy}:void 0;this.providedOptions={...this.providedOptions,...t.options},this.options={...this.options,...t.options},n&&(this.providedOptions.privacy=n,this.options.privacy=i),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 I(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function T(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return h(e),null}}function R(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){h(e)}}function M(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 N=class e{constructor(){this.config=null,this.logger=l.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.privacyCache=null,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){h(e)}},this.activityPersistHooked=!1}static getInstance(){return e.instance||(e.instance=new e),e.instance}initialize(e){if(!this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!0;try{document.addEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){h(e)}}this.config||(this.config=new S(e))}getConfig(){return this.config?this.config:(this.logger.log("[config-manager] configuration not initialized"),null)}getPrivacy(){return this.privacyCache||(this.privacyCache=function(e){const t=e?.privacy,n=!!e&&Object.prototype.hasOwnProperty.call(e,"enableMasking"),i=function(e){return"mask-user-input"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level);let r;r=i||(n?e?.enableMasking?"mask-all":"allow":"mask-user-input");const s="allow"===r,a=I(t?.maskSelectors),o=t?.replay,l="function"==typeof o?.maskTextFn?o.maskTextFn:void 0,c="function"==typeof o?.maskInputFn?o.maskInputFn:void 0;let h;h="mask-all"===r||!s&&void 0!==l?["*",...a].join(", "):"mask-user-input"===r&&a.length?a.join(", "):void 0;const d=e=>!s&&(e??!0),g=d(t?.maskNetworkBodies),u=d(t?.maskNetworkQueryParams),f=d(t?.maskLogs),p=d(t?.maskErrors);return{level:r,maskTextSelector:h,maskSelectors:a,maskInputs:!s,maskNetworkBodies:g,maskNetworkQueryParams:u,maskLogs:f,maskErrors:p,shouldMaskNetworkBodies:!s&&g,shouldMaskNetworkQueryParams:!s&&u,shouldMaskLogs:!s&&f,shouldMaskErrors:!s&&p,sensitiveKeys:I(t?.sensitiveKeys),maskFieldsLegacy:I(e?.maskFields),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:l,maskInputFn:c}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return T("gcId")||""}setSessionId(e){this.sessionId=e,R("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:L("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,R("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,R("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=k}clearSessionState(){if(this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.activityPersistHooked&&"undefined"!=typeof document){this.activityPersistHooked=!1;try{document.removeEventListener("visibilitychange",this.flushActivityOnHide)}catch(e){h(e)}}M("gcId"),M("gcStartTime"),M("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),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")}},q="[REDACTED]",A=["authorization","cookie","set-cookie"],x=/(token|key|secret|passwd|password|auth|bearer|credential)/i,C=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,z=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]);function P(e,t){if(!e)return!1;if(C.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function H(e,t){return z.has(e.toLowerCase())||P(e,t)}function _(e){return e.includes("-")&&x.test(e)}function D(e,t){return P(e,t)||_(e)}function F(e,t){const n=e.sensitive?q:e.value;if(!t)return n;try{const i=t(e);return void 0===i?n:i}catch(e){return h(e),n}}function O(e,t={}){if(!e)return e;try{return e.split("&").map((e=>{const n=e.indexOf("=");if(-1===n)return e;const i=e.slice(0,n),r=e.slice(n+1);let s=i;try{s=decodeURIComponent(i)}catch{}let a=r;try{a=decodeURIComponent(r)}catch{}const o=H(s,t.sensitiveKeys),l=F({key:s,value:a,path:[s],kind:t.kind??"query",sensitive:o},t.redact);return l===a?e:`${i}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function j(e,t={}){if(!e)return e;const n=e.indexOf("?");if(-1===n)return e;const i=e.slice(0,n),r=e.slice(n+1),s=r.indexOf("#"),a=-1===s?r:r.slice(0,s),o=-1===s?"":r.slice(s);return`${i}?${O(a,{...t,kind:t.kind??"query"})}${o}`}function K(e,t,n,i,r){const s=!!e&&P(e,i.sensitiveKeys);if(null!==t&&"object"==typeof t){if(s||r>8)return q;if(Array.isArray(t))return t.map((t=>K(e,t,n,i,r+1)));const a={};for(const[e,s]of Object.entries(t))a[e]=K(e,s,[...n,e],i,r+1);return a}return F({key:e,value:t,path:n,kind:i.kind??"log",sensitive:s},i.redact)}function U(e,t={}){if(!e)return e;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>D(n,t.sensitiveKeys)?`"${n}":"${q}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;]+)/g,((e,n)=>function(e,t){return H(e,t)||_(e)}(n,t.sensitiveKeys)?`${n}=${q}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>D(n,t.sensitiveKeys)?`${n}: ${q}`:e))}catch(t){h(t),n=e}if(t.redact)try{const n=t.redact({key:"",value:e,path:[],kind:t.kind??"log",sensitive:!1});if("string"==typeof n)return n}catch(e){h(e)}return n}function B(e,t={}){return K("",e,[],t,0)}var Y=N.getInstance(),$=new p,Q=l.getInstance();function X(){const e=Y?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function W(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?W(e,`${a}[${t}]`,n,i+1):e)):Object.assign(e,W(s,a,n,i+1)):e[a]=s,e}),{}))}catch(e){return Q.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}var r}function V(e){const t=u(Date.now()),n=$.generateId(),i=e.spanId||$.generateSpanId(),r=e.traceId||$.generateTraceId(),s=e.parentSpanId||"",a=W(e.attributes||{}),o=function(){const e=d?.location;if(!e)return{path:"",url:"",title:d?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),n=t?e.hash:e.pathname,i=Y.getPrivacy(),r=i.shouldMaskNetworkQueryParams,s={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"};return{path:r&&t?j(n,s):n,url:r?j(e.href,s):e.href,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 J({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var G=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.consecutiveTimeouts=0,this.isAvailable=!1,this.logger=l.getInstance(),"undefined"==typeof Worker||"undefined"==typeof URL||"undefined"==typeof Blob)return;const e=new Blob(['!function(){"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,t=new r([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),f=new r([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(r,t){for(var f=new n(31),o=0;o<31;++o)f[o]=t+=1<<r[o-1];var a=new e(f[30]);for(o=1;o<30;++o)for(var i=f[o];i<f[o+1];++i)a[i]=i-f[o]<<5|o;return{b:f,r:a}},i=a(t,2),u=i.b,v=i.r;u[28]=258,v[258]=28;var s=a(f,0).r,l=new n(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>1|(21845&Y)<<1))>>2|(13107&Q)<<2))>>4|(3855&Q)<<4,l[Y]=((65280&Q)>>8|(255&Q)<<8)>>1;var c=function(r,e,t){for(var f=r.length,o=0,a=new n(e);o<f;++o)r[o]&&++a[r[o]-1];var i,u=new n(e);for(o=1;o<e;++o)u[o]=u[o-1]+a[o-1]<<1;for(i=new n(f),o=0;o<f;++o)r[o]&&(i[o]=l[u[r[o]-1]++]>>15-r[o]);return i},h=new r(288);for(Y=0;Y<144;++Y)h[Y]=8;for(Y=144;Y<256;++Y)h[Y]=9;for(Y=256;Y<280;++Y)h[Y]=7;for(Y=280;Y<288;++Y)h[Y]=8;var w=new r(32);for(Y=0;Y<32;++Y)w[Y]=5;var g=c(h,9),d=c(w,5),m=function(r){return(r+7)/8|0},p=function(n,e,t){return(null==t||t>n.length)&&(t=n.length),new r(n.subarray(e,t))},y=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8},M=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8,r[t+2]|=e>>16},b=function(e,t){for(var f=[],o=0;o<e.length;++o)e[o]&&f.push({s:o,f:e[o]});var a=f.length,i=f.slice();if(!a)return{t:U,l:0};if(1==a){var u=new r(f[0].s+1);return u[f[0].s]=1,{t:u,l:1}}f.sort((function(r,n){return r.f-n.f})),f.push({s:-1,f:25001});var v=f[0],s=f[1],l=0,c=1,h=2;for(f[0]={s:-1,f:v.f+s.f,l:v,r:s};c!=a-1;)v=f[f[l].f<f[h].f?l++:h++],s=f[l!=c&&f[l].f<f[h].f?l++:h++],f[c++]={s:-1,f:v.f+s.f,l:v,r:s};var w=i[0].s;for(o=1;o<a;++o)i[o].s>w&&(w=i[o].s);var g=new n(w+1),d=k(f[c-1],g,0);if(d>t){o=0;var m=0,p=d-t,y=1<<p;for(i.sort((function(r,n){return g[n.s]-g[r.s]||r.f-n.f}));o<a;++o){var M=i[o].s;if(!(g[M]>t))break;m+=y-(1<<d-g[M]),g[M]=t}for(m>>=p;m>0;){var b=i[o].s;g[b]<t?m-=1<<t-g[b]++-1:++o}for(;o>=0&&m;--o){var x=i[o].s;g[x]==t&&(--g[x],++m)}d=t}return{t:new r(g),l:d}},k=function(r,n,e){return-1==r.s?Math.max(k(r.l,n,e+1),k(r.r,n,e+1)):n[r.s]=e},x=function(r){for(var e=r.length;e&&!r[--e];);for(var t=new n(++e),f=0,o=r[0],a=1,i=function(r){t[f++]=r},u=1;u<=e;++u)if(r[u]==o&&u!=e)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=r[u]}return{c:t.subarray(0,f),n:e}},A=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},C=function(r,n,e){var t=e.length,f=m(n+2);r[f]=255&t,r[f+1]=t>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},T=function(r,e,a,i,u,v,s,l,m,p,k){y(e,k++,a),++u[256];for(var T=b(u,15),E=T.t,U=T.l,D=b(v,15),S=D.t,I=D.l,j=x(E),z=j.c,J=j.n,N=x(S),O=N.c,q=N.n,B=new n(19),F=0;F<z.length;++F)++B[31&z[F]];for(F=0;F<O.length;++F)++B[31&O[F]];for(var G=b(B,7),H=G.t,K=G.l,L=19;L>4&&!H[o[L-1]];--L);var P,Q,R,V,W=p+5<<3,X=A(u,h)+A(v,w)+s,Y=A(u,E)+A(v,S)+s+14+3*L+A(B,H)+2*B[16]+3*B[17]+7*B[18];if(m>=0&&W<=X&&W<=Y)return C(e,k,r.subarray(m,m+p));if(y(e,k,1+(Y<X)),k+=2,Y<X){P=c(E,U),Q=E,R=c(S,I),V=S;var Z=c(H,K);y(e,k,J-257),y(e,k+5,q-1),y(e,k+10,L-4),k+=14;for(F=0;F<L;++F)y(e,k+3*F,H[o[F]]);k+=3*L;for(var $=[z,O],_=0;_<2;++_){var rr=$[_];for(F=0;F<rr.length;++F){var nr=31&rr[F];y(e,k,Z[nr]),k+=H[nr],nr>15&&(y(e,k,rr[F]>>5&127),k+=rr[F]>>12)}}}else P=g,Q=h,R=d,V=w;for(F=0;F<l;++F){var er=i[F];if(er>255){M(e,k,P[(nr=er>>18&31)+257]),k+=Q[nr+257],nr>7&&(y(e,k,er>>23&31),k+=t[nr]);var tr=31&er;M(e,k,R[tr]),k+=V[tr],tr>3&&(M(e,k,er>>5&8191),k+=f[tr])}else M(e,k,P[er]),k+=Q[er]}return M(e,k,P[256]),k+Q[256]},E=new e([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),U=new r(0),D=function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var e=n,t=9;--t;)e=(1&e&&-306674912)^e>>>1;r[n]=e}return r}(),S=function(o,a,i,u,l){if(!l&&(l={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),h=new r(c.length+o.length);h.set(c),h.set(o,c.length),o=h,l.w=c.length}return function(o,a,i,u,l,c){var h=c.z||o.length,w=new r(u+h+5*(1+Math.ceil(h/7e3))+l),g=w.subarray(u,w.length-l),d=c.l,y=7&(c.r||0);if(a){y&&(g[0]=c.r>>3);for(var M=E[a-1],b=M>>13,k=8191&M,x=(1<<i)-1,A=c.p||new n(32768),U=c.h||new n(x+1),D=Math.ceil(i/3),S=2*D,I=function(r){return(o[r]^o[r+1]<<D^o[r+2]<<S)&x},j=new e(25e3),z=new n(288),J=new n(32),N=0,O=0,q=c.i||0,B=0,F=c.w||0,G=0;q+2<h;++q){var H=I(q),K=32767&q,L=U[H];if(A[K]=L,U[H]=K,F<=q){var P=h-q;if((N>7e3||B>24576)&&(P>423||!d)){y=T(o,g,0,j,z,J,O,B,G,q-G,y),B=N=O=0,G=q;for(var Q=0;Q<286;++Q)z[Q]=0;for(Q=0;Q<30;++Q)J[Q]=0}var R=2,V=0,W=k,X=K-L&32767;if(P>2&&H==I(q-X))for(var Y=Math.min(b,P)-1,Z=Math.min(32767,q),$=Math.min(258,P);X<=Z&&--W&&K!=L;){if(o[q+R]==o[q+R-X]){for(var _=0;_<$&&o[q+_]==o[q+_-X];++_);if(_>R){if(R=_,V=X,_>Y)break;var rr=Math.min(X,_-2),nr=0;for(Q=0;Q<rr;++Q){var er=q-X+Q&32767,tr=er-A[er]&32767;tr>nr&&(nr=tr,L=er)}}}X+=(K=L)-(L=A[K])&32767}if(V){j[B++]=268435456|v[R]<<18|s[V];var fr=31&v[R],or=31&s[V];O+=t[fr]+f[or],++z[257+fr],++J[or],F=q+R,++N}else j[B++]=o[q],++z[o[q]]}}for(q=Math.max(q,F);q<h;++q)j[B++]=o[q],++z[o[q]];y=T(o,g,d,j,z,J,O,B,G,q-G,y),d||(c.r=7&y|g[y/8|0]<<3,y-=7,c.h=U,c.p=A,c.i=q,c.w=F)}else{for(q=c.w||0;q<h+d;q+=65535){var ar=q+65535;ar>=h&&(g[y/8|0]=d,ar=h),y=C(g,y+1,o.subarray(q,ar))}c.i=h}return p(w,0,u+m(y)+l)}(o,null==a.level?6:a.level,null==a.mem?l.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(o.length)))):20:12+a.mem,i,u,l)},I=function(r,n,e){for(;e;++n)r[n]=e,e>>>=8};function j(r,n){n||(n={});var e=function(){var r=-1;return{p:function(n){for(var e=r,t=0;t<n.length;++t)e=D[255&e^n[t]]^e>>>8;r=e},d:function(){return~r}}}(),t=r.length;e.p(r);var f,o=S(r,n,10+((f=n).filename?f.filename.length+1:0),8),a=o.length;return function(r,n){var e=n.filename;if(r[0]=31,r[1]=139,r[2]=8,r[8]=n.level<2?4:9==n.level?2:0,r[9]=3,0!=n.mtime&&I(r,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){r[3]=8;for(var t=0;t<=e.length;++t)r[t+10]=e.charCodeAt(t)}}(o,n),I(o,a-8,e.d()),I(o,a-4,t),o}var z="undefined"!=typeof TextEncoder&&new TextEncoder,J="undefined"!=typeof TextDecoder&&new TextDecoder;try{J.decode(U,{stream:!0})}catch(r){}var N=Uint8Array,O=Uint16Array,q=Uint32Array,B=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),F=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),G=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),H=function(r,n){for(var e=new O(31),t=0;t<31;++t)e[t]=n+=1<<r[t-1];var f=new q(e[30]);for(t=1;t<30;++t)for(var o=e[t];o<e[t+1];++o)f[o]=o-e[t]<<5|t;return[e,f]},K=H(B,2),L=K[0],P=K[1];L[28]=258,P[258]=28;var Q,R=H(F,0)[1],V=new O(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>>1|(21845&Y)<<1))>>>2|(13107&Q)<<2))>>>4|(3855&Q)<<4,V[Y]=((65280&Q)>>>8|(255&Q)<<8)>>>1;var W=function(r,n,e){for(var t=r.length,f=0,o=new O(n);f<t;++f)++o[r[f]-1];var a,i=new O(n);for(f=0;f<n;++f)i[f]=i[f-1]+o[f-1]<<1;for(a=new O(t),f=0;f<t;++f)a[f]=V[i[r[f]-1]++]>>>15-r[f];return a},X=new N(288);for(Y=0;Y<144;++Y)X[Y]=8;for(Y=144;Y<256;++Y)X[Y]=9;for(Y=256;Y<280;++Y)X[Y]=7;for(Y=280;Y<288;++Y)X[Y]=8;var Y,Z=new N(32);for(Y=0;Y<32;++Y)Z[Y]=5;var $=W(X,9),_=W(Z,5),rr=function(r){return(r/8|0)+(7&r&&1)},nr=function(r,n,e){(null==e||e>r.length)&&(e=r.length);var t=new(r instanceof O?O:r instanceof q?q:N)(e-n);return t.set(r.subarray(n,e)),t},er=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8},tr=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8,r[t+2]|=e>>>16},fr=function(r,n){for(var e=[],t=0;t<r.length;++t)r[t]&&e.push({s:t,f:r[t]});var f=e.length,o=e.slice();if(!f)return[new N(0),0];if(1==f){var a=new N(e[0].s+1);return a[e[0].s]=1,[a,1]}e.sort((function(r,n){return r.f-n.f})),e.push({s:-1,f:25001});var i=e[0],u=e[1],v=0,s=1,l=2;for(e[0]={s:-1,f:i.f+u.f,l:i,r:u};s!=f-1;)i=e[e[v].f<e[l].f?v++:l++],u=e[v!=s&&e[v].f<e[l].f?v++:l++],e[s++]={s:-1,f:i.f+u.f,l:i,r:u};var c=o[0].s;for(t=1;t<f;++t)o[t].s>c&&(c=o[t].s);var h=new O(c+1),w=or(e[s-1],h,0);if(w>n){t=0;var g=0,d=w-n,m=1<<d;for(o.sort((function(r,n){return h[n.s]-h[r.s]||r.f-n.f}));t<f;++t){var p=o[t].s;if(!(h[p]>n))break;g+=m-(1<<w-h[p]),h[p]=n}for(g>>>=d;g>0;){var y=o[t].s;h[y]<n?g-=1<<n-h[y]++-1:++t}for(;t>=0&&g;--t){var M=o[t].s;h[M]==n&&(--h[M],++g)}w=n}return[new N(h),w]},or=function(r,n,e){return-1==r.s?Math.max(or(r.l,n,e+1),or(r.r,n,e+1)):n[r.s]=e},ar=function(r){for(var n=r.length;n&&!r[--n];);for(var e=new O(++n),t=0,f=r[0],o=1,a=function(r){e[t++]=r},i=1;i<=n;++i)if(r[i]==f&&i!=n)++o;else{if(!f&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(f),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(f);o=1,f=r[i]}return[e.subarray(0,t),n]},ir=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},ur=function(r,n,e){var t=e.length,f=rr(n+2);r[f]=255&t,r[f+1]=t>>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},vr=function(r,n,e,t,f,o,a,i,u,v,s){er(n,s++,e),++f[256];for(var l=fr(f,15),c=l[0],h=l[1],w=fr(o,15),g=w[0],d=w[1],m=ar(c),p=m[0],y=m[1],M=ar(g),b=M[0],k=M[1],x=new O(19),A=0;A<p.length;++A)x[31&p[A]]++;for(A=0;A<b.length;++A)x[31&b[A]]++;for(var C=fr(x,7),T=C[0],E=C[1],U=19;U>4&&!T[G[U-1]];--U);var D,S,I,j,z=v+5<<3,J=ir(f,X)+ir(o,Z)+a,N=ir(f,c)+ir(o,g)+a+14+3*U+ir(x,T)+(2*x[16]+3*x[17]+7*x[18]);if(z<=J&&z<=N)return ur(n,s,r.subarray(u,u+v));if(er(n,s,1+(N<J)),s+=2,N<J){D=W(c,h),S=c,I=W(g,d),j=g;var q=W(T,E);er(n,s,y-257),er(n,s+5,k-1),er(n,s+10,U-4),s+=14;for(A=0;A<U;++A)er(n,s+3*A,T[G[A]]);s+=3*U;for(var H=[p,b],K=0;K<2;++K){var L=H[K];for(A=0;A<L.length;++A){var P=31&L[A];er(n,s,q[P]),s+=T[P],P>15&&(er(n,s,L[A]>>>5&127),s+=L[A]>>>12)}}}else D=$,S=X,I=_,j=Z;for(A=0;A<i;++A)if(t[A]>255){P=t[A]>>>18&31;tr(n,s,D[P+257]),s+=S[P+257],P>7&&(er(n,s,t[A]>>>23&31),s+=B[P]);var Q=31&t[A];tr(n,s,I[Q]),s+=j[Q],Q>3&&(tr(n,s,t[A]>>>5&8191),s+=F[Q])}else tr(n,s,D[t[A]]),s+=S[t[A]];return tr(n,s,D[256]),s+S[256]},sr=new q([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lr=function(r,n,e,t,f){return function(r,n,e,t,f,o){var a=r.length,i=new N(t+a+5*(1+Math.floor(a/7e3))+f),u=i.subarray(t,i.length-f),v=0;if(!n||a<8)for(var s=0;s<=a;s+=65535){var l=s+65535;l<a?v=ur(u,v,r.subarray(s,l)):(u[s]=o,v=ur(u,v,r.subarray(s,a)))}else{for(var c=sr[n-1],h=c>>>13,w=8191&c,g=(1<<e)-1,d=new O(32768),m=new O(g+1),p=Math.ceil(e/3),y=2*p,M=function(n){return(r[n]^r[n+1]<<p^r[n+2]<<y)&g},b=new q(25e3),k=new O(288),x=new O(32),A=0,C=0,T=(s=0,0),E=0,U=0;s<a;++s){var D=M(s),S=32767&s,I=m[D];if(d[S]=I,m[D]=S,E<=s){var j=a-s;if((A>7e3||T>24576)&&j>423){v=vr(r,u,0,b,k,x,C,T,U,s-U,v),T=A=C=0,U=s;for(var z=0;z<286;++z)k[z]=0;for(z=0;z<30;++z)x[z]=0}var J=2,G=0,H=w,K=S-I&32767;if(j>2&&D==M(s-K))for(var L=Math.min(h,j)-1,Q=Math.min(32767,s),V=Math.min(258,j);K<=Q&&--H&&S!=I;){if(r[s+J]==r[s+J-K]){for(var W=0;W<V&&r[s+W]==r[s+W-K];++W);if(W>J){if(J=W,G=K,W>L)break;var X=Math.min(K,W-2),Y=0;for(z=0;z<X;++z){var Z=s-K+z+32768&32767,$=Z-d[Z]+32768&32767;$>Y&&(Y=$,I=Z)}}}K+=(S=I)-(I=d[S])+32768&32767}if(G){b[T++]=268435456|P[J]<<18|R[G];var _=31&P[J],er=31&R[G];C+=B[_]+F[er],++k[257+_],++x[er],E=s+J,++A}else b[T++]=r[s],++k[r[s]]}}v=vr(r,u,o,b,k,x,C,T,U,s-U,v)}return nr(i,0,t+rr(v)+f)}(r,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(r.length)))):12+n.mem,e,t,!0)};function cr(r,n){void 0===n&&(n={});var e=function(){var r=1,n=0;return{p:function(e){for(var t=r,f=n,o=e.length,a=0;a!=o;){for(var i=Math.min(a+5552,o);a<i;++a)f+=t+=e[a];t%=65521,f%=65521}r=t,n=f},d:function(){return(r>>>8<<16|(255&n)<<8|n>>>8)+2*((255&r)<<23)}}}();e.p(r);var t,f,o,a=lr(r,n,2,4);return t=a,f=n.level,o=0==f?0:f<6?1:9==f?3:2,t[0]=120,t[1]=o<<6|(o?32-2*o:1),function(r,n,e){for(;e;++n)r[n]=e,e>>>=8}(a,a.length-4,e.d()),a}var hr=r=>{const n={...r,v:"v1"};return function(r){for(var n="",e=0;e<r.length;){var t=r[e++];n+=String.fromCharCode(t)}return n}(cr(function(r,n){var e=r.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(r);for(var t=new N(r.length+(r.length>>>1)),f=0,o=function(r){t[f++]=r},a=0;a<e;++a){if(f+5>t.length){var i=new N(f+8+(e-a<<1));i.set(t),t=i}var u=r.charCodeAt(a);u<128||n?o(u):u<2048?(o(192|u>>>6),o(128|63&u)):u>55295&&u<57344?(o(240|(u=65536+(1047552&u)|1023&r.charCodeAt(++a))>>>18),o(128|u>>>12&63),o(128|u>>>6&63),o(128|63&u)):(o(224|u>>>12),o(128|u>>>6&63),o(128|63&u))}return nr(t,0,f)}(JSON.stringify(n))))},wr=self;wr.onmessage=n=>{const e=n.data;if(!e||"number"!=typeof e.id||"pack-replay"!==e.op&&"encode-batch"!==e.op)return void(e&&"number"==typeof e.id&&wr.postMessage({id:e.id,ok:!1,error:"malformed message"}));const{id:t,op:f,payload:o}=e;try{if("pack-replay"===f){const r=o.events.map((r=>hr(r)));return void wr.postMessage({id:t,ok:!0,result:{packed:r}})}if("encode-batch"===f){const{json:n,compress:e}=o;if(!e){const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}try{const e=j(function(n,e){if(z)return z.encode(n);for(var t=n.length,f=new r(n.length+(n.length>>1)),o=0,a=function(r){f[o++]=r},i=0;i<t;++i){if(o+5>f.length){var u=new r(o+8+(t-i<<1));u.set(f),f=u}var v=n.charCodeAt(i);v<128||e?a(v):v<2048?(a(192|v>>6),a(128|63&v)):v>55295&&v<57344?(a(240|(v=65536+(1047552&v)|1023&n.charCodeAt(++i))>>18),a(128|v>>12&63),a(128|v>>6&63),a(128|63&v)):(a(224|v>>12),a(128|v>>6&63),a(128|63&v))}return p(f,0,o)}(n));return void wr.postMessage({id:t,ok:!0,result:{bytes:e,isCompressed:!0}},[e.buffer])}catch{const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}}wr.postMessage({id:t,ok:!1,error:"unknown op"})}catch(r){wr.postMessage({id:t,ok:!1,error:r instanceof Error?r.message:String(r)})}}}();'],{type:"application/javascript"}),t=URL.createObjectURL(e);try{this.worker=new Worker(t),Promise.resolve().then((()=>URL.revokeObjectURL(t))),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFatalFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.logger.log("[worker-client] worker onmessageerror — single message dropped, worker still alive"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){URL.revokeObjectURL(t),this.logger.log("[worker-client] failed to spawn worker, falling back to main thread:",e),this.worker=null,this.isAvailable=!1}}static getInstance(){return e.instance||(e.instance=new e),e.instance}static __resetForTests(){e.instance&&e.instance.terminate(),e.instance=null}static async withFallback(t,n,i){const r=e.getInstance();if(!r.isAvailable)return n();try{return await t(r)}catch(e){return l.getInstance().log(`[${i}] worker call failed, using inline fallback:`,e),n()}}packReplay(e){return this.dispatch("pack-replay",{events:e}).then((e=>e.packed))}encodeBatch(e,t){return this.dispatch("encode-batch",{json:e,compress:t}).then((e=>({data:e.bytes,isCompressed:e.isCompressed})))}terminate(){if(this.worker){try{this.worker.terminate()}catch(e){this.logger.log("[worker-client] failed to terminate worker:",e)}this.worker=null}this.isAvailable=!1,this.rejectAllPending(new Error("worker terminated")),e.instance===this&&(e.instance=null)}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,i=this.worker;return new Promise(((r,s)=>{const a=setTimeout((()=>{this.pending.has(n)&&(this.pending.delete(n),this.consecutiveTimeouts+=1,this.consecutiveTimeouts>=3&&this.handleFatalFailure("worker latched after 3 consecutive timeouts"),s(new Error("worker request timed out")))}),1500);this.pending.set(n,{resolve: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),this.consecutiveTimeouts=0,e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFatalFailure(e,t){if(this.logger.log(`[worker-client] ${e}${t?": "+t:""}`),this.isAvailable=!1,this.rejectAllPending(new Error(e)),this.worker){try{this.worker.terminate()}catch{}this.worker=null}}rejectAllPending(e){for(const t of this.pending.values())clearTimeout(t.timeoutId),t.reject(e);this.pending.clear()}};G.instance=null;var Z=G,ee=class{constructor(){this.logger=l.getInstance(),this.config=N.getInstance()}compressInline(t,n){if(!n)return{data:(new TextEncoder).encode(t),isCompressed:!1};try{const n=e.strToU8(t);return{data:e.gzipSync(n),isCompressed:!0}}catch(e){return{data:(new TextEncoder).encode(t),isCompressed:!1}}}compressAsync(e,t){return Z.withFallback((n=>n.encodeBatch(e,t)),(()=>this.compressInline(e,t)),"transporter")}async send(e,{lifecycle:t=!1}={}){const n=this.config.getConfig();if(n)try{n?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const i=n.apiKey,r=this.buildEndpoint();if(!i)return void this.logger.log("No API key found");const s=JSON.stringify(e),a=!!n?.options?.enableCompression,{data:o,isCompressed:l}=t?this.compressInline(s,a):await this.compressAsync(s,a);fetch(r,{method:"POST",headers:{"Content-Type":"application/json",apikey:i,"Content-Encoding":l?"gzip":""},body:o}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){n.options.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();if(!e)return"";const{dsn:t}=e;return`${t}/json/rum`}},te=["navigation","dom.event"],ne=class e{constructor(){this.events=[],this.timeoutId=null,this.config=N.getInstance(),this.logger=l.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush({lifecycle:!0})},this.transporter=new ee}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&&!te.includes(e.type)&&this.flush()}catch(e){h(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;if(!this.events?.length)return void this.scheduleFlush();if(!this.config.getConfig()?.cluster)return this.noClusterWarned||(this.noClusterWarned=!0,this.logger.log("[events-pool.flush] skipping flush: no cluster")),void this.scheduleFlush();this.noClusterWarned=!1;const t={sessionAttributes:this.getSessionAttributes(),events:this.events};e?this.transporter.send(t,{lifecycle:!0}):this.transporter.send(t),this.events=[],this.scheduleFlush()}catch(e){h(e)}}async flushSync(){try{if(!this.events?.length||!this.initialized)return;if(!this.config.getConfig()?.cluster)return void this.logger.log("[events-pool.flush] skipping flush: no cluster");await this.transporter.send({sessionAttributes:this.getSessionAttributes(),events:this.events}),this.events=[]}catch(e){h(e)}}scheduleFlush(){try{null!==this.timeoutId&&(d.clearTimeout(this.timeoutId),this.timeoutId=null);const 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}}};ne.instance=null;var ie=ne,re=class{constructor(){this.logger=l.getInstance(),this.eventsPool=ie.getInstance()}},se="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function ae(e,t){try{return e.getAttribute(t)||""}catch{return""}}function oe(e){try{const t=se?.call(e);return"string"==typeof t?t:""}catch{return""}}var le=class extends re{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=N.getInstance(),this.isSensitiveElement=(e,t,n)=>{if(!e)return!1;if("password"===e.type)return!0;if(ae(e,"data-private"))return!0;const i=["id","name","class","aria-label","placeholder"].map((t=>ae(e,t))).filter(Boolean);if(i.some((e=>P(e,t))))return!0;if(n.length){const e=i.map((e=>e.toLowerCase()));if(n.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 n=e.target;if(!n)return!1;try{if(t.maskSelectors.length&&t.maskSelectors.some((e=>{try{return n.matches?.(e)}catch{return!1}})))return!0}catch{}if(this.isSensitiveElement(n,t.sensitiveKeys,t.maskFieldsLegacy))return!0;if("mask-all"===t.level)return!0;const i=oe(n).toLowerCase();return"input"===i||"textarea"===i||"select"===i},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})?"*":J({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(!X())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 V({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:ae(i,"id"),tagName:oe(i),className:ae(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"===oe(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<i;){let e=oe(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=oe(o).toLowerCase()||"*"}l.unshift(e||"*"),s=l.join(" > ");try{if(1===n.querySelectorAll(s).length)return s}catch(e){l.shift(),s=l.join(" > ")}try{o=o.parentElement}catch(e){break}a++}return s||"*"}},ce=["log","info","warn","error","debug","assert","trace"],he=class extends re{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=N.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),ce.forEach((e=>{e in console&&(console[e]=(...t)=>{try{this.handleEvent(t,e)}catch(e){h(e)}finally{this.originalConsole?.[e]&&this.originalConsole[e](...t)}})})),this.isInitialized=!0}catch(e){h(e)}}destroy(){try{if(!this.isInitialized)return;ce.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){h(e)}}handleEvent(e,t){try{if(!X())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}){const i=this.config.getPrivacy(),r={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"log"},s=i.shouldMaskLogs?U(e,r):e;return V({type:"log",attributes:{...i.shouldMaskLogs&&n?B(n,r):n,message:J({text:s}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}extractAttributes(e){if(Array.isArray(e)&&0!==e.length)try{const t={};for(const n of e)null!==n&&"object"==typeof n&&"[object Object]"===Object.prototype.toString.call(n)&&Object.assign(t,n);return delete t.message,delete t.level,delete t.location,t}catch(e){return void h(e)}}formatMessage(e,t){if(!Array.isArray(e))return String(e);try{return e.map((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if("object"==typeof e){if(e instanceof Error)try{return"error"===t&&e.stack||e.toString()}catch{try{const t={name:e.name,message:e.message,stack:e.stack};return JSON.stringify(t)}catch{return Object.prototype.toString.call(e)}}try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}return String(e)})).join(" ")}catch(e){return h(e),"[Error formatting console message]"}}captureConsoleMethods(){const e={};try{ce.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){h(e)}return e}};function de(e){try{if(null==e)return"";if("string"==typeof e)return e;if(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 ge,ue=class extends re{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=N.getInstance(),this.idGenerator=new p,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!X())return;const t=this.buildEvent(e);this.queueEvent(t)}catch(e){h(e)}},this.buildEvent=e=>{let t=e.url,n=e.url;this.logger.log("[network-events-listener.buildEvent] called",{event:e});const i=this.config.getPrivacy(),r={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"};try{t=new URL(e.url).pathname}catch(s){n=new URL(e.url,globalThis.location.href).href,i.shouldMaskNetworkQueryParams&&(t=j(t,r))}i.shouldMaskNetworkQueryParams&&(n=j(n,r)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),a=this.formatHeaders(e.response.headers),o=e.method?.toUpperCase()||"UNKNOWN",{traceId:l,spanId:c}=this.extractTraceIds(e.request.headers),h=(e,t)=>i.shouldMaskNetworkBodies?function(e,t={}){if(!e)return e;const n=e.trim();if(n.length<=1e5&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(K("",e,[],t,0))}catch{}return e.includes("=")&&!e.includes("{")?O(e,t):U(e,t)}(e,{sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:t}):e,d=J({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),g=J({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),f={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:a,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:g}}},p={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:f};return l&&(p.traceId=l),c&&(p.spanId=c),V(p)}}async getResponseBody(e){const t=e.body;if(!t)return"";const n=t.getReader(),i=new TextDecoder;let r="",s=0;for(;;){const{done:e,value:t}=await n.read();if(e)break;if(s+t.byteLength>=this.maxBodyLength){const e=t.subarray(0,this.maxBodyLength-s);r+=i.decode(e,{stream:!0}),n.cancel().catch((()=>{}));break}s+=t.byteLength,r+=i.decode(t,{stream:!0})}return r+=i.decode(),r}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=de(this._requestBody),s=de(""===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=de(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=this.config.getPrivacy(),n="allow"===t.level,i=function(e,t={}){return e?Object.entries(e).reduce(((e,[n,i])=>{const r=n.toLowerCase(),s=F({key:n,value:i,path:[n],kind:"header",sensitive:A.includes(r)||x.test(r)||P(n,t.sensitiveKeys)},t.redact);return e[n]=null===s?"":String(s),e}),{}):e}(e,{sensitiveKeys:n?void 0:t.sensitiveKeys,redact:n?void 0:t.redact});return Object.entries(i)?.reduce(((e,[t,n])=>(e[t]=J({text:n}),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}},fe=class extends re{constructor(){super(...arguments),this.config=N.getInstance(),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const 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){const n=this.config.getPrivacy(),i=n.shouldMaskErrors,r={sensitiveKeys:n.sensitiveKeys,redact:n.redact,kind:"error"},s=e.message||"Unknown error",a=i?U(s,r):s,o=i&&t?.metadata?B(t.metadata,r):t?.metadata;return V({type:"exception",attributes:{error_type:e.name||"Error",error_message:a,error_stacktrace:this.buildStackTrace(e,i,n.sensitiveKeys),error_fingerprint:`${e.name}:${J({text:a,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:o}})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}enhanceError(e,t){const{filename:n,lineno: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,t=!1,n=[]){if(!e)return[];try{return a.default.parse(e).map((e=>{const i=e.fileName||"unknown";return{filename:t?j(i,{sensitiveKeys:n,kind:"query"}):i,function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0}}))}catch(e){return[]}}},pe=class extends re{constructor({isEnabled:e}){if(super(),this.currentUrl="",this.originalPushState=null,this.originalReplaceState=null,this.isInitialized=!1,this.isAutomaticNavigationEnabled=!1,this.activeNavigation=null,this.popStateHandler=()=>{this.handleLocationChange()},this.hashChangeHandler=()=>{this.handleLocationChange()},this.isInBrowserEnvironment()&&e)try{this.isAutomaticNavigationEnabled=e,this.currentUrl=d.location.href,this.originalPushState=history.pushState,this.originalReplaceState=history.replaceState}catch(e){h(e)}}isInBrowserEnvironment(){try{return void 0!==d&&void 0!==d.location&&void 0!==d.history&&"function"==typeof d.addEventListener}catch(e){return h(e),!1}}initialize(){try{if(this.logger.log("[navigation-listener.initialize] called"),!this.isInBrowserEnvironment()||!this.originalPushState||!this.originalReplaceState)return void this.logger.log("[navigation-listener.initialize] Browser environment not available, skipping initialization");if(!this.isAutomaticNavigationEnabled)return void this.logger.log("[navigation-listener.initialize] Automatic navigation is disabled, skipping initialization");const e=this.originalPushState,t=this.originalReplaceState;history.pushState=(...t)=>{const n=e.apply(history,t);return this.handleLocationChange(),n},history.replaceState=(...e)=>{const n=t.apply(history,e);return this.handleLocationChange(),n},d&&"function"==typeof d.addEventListener&&(d.addEventListener("popstate",this.popStateHandler),d.addEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!0}catch(e){h(e)}}destroy(){try{this.logger.log("[navigation-listener.destroy] called"),this.isInitialized&&this.originalPushState&&this.originalReplaceState&&(history.pushState=this.originalPushState,history.replaceState=this.originalReplaceState),d&&"function"==typeof d.removeEventListener&&(d.removeEventListener("popstate",this.popStateHandler),d.removeEventListener("hashchange",this.hashChangeHandler)),this.isInitialized=!1}catch(e){h(e)}}handleEvent(){try{this.logger.log("[navigation-listener.handleEvent] called");const e=this.buildEvent();this.queueEvent(e)}catch(e){h(e)}}buildEvent(){this.logger.log("[navigation-listener.buildEvent] called",d.location.href);const e=N.getInstance().getPrivacy(),t="allow"===e.level,n=d.location.href,i=this.activeNavigation?.metadata;return V({type:"navigation",attributes:{page_url:e.shouldMaskNetworkQueryParams?j(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&i?B(i,{sensitiveKeys:e.sensitiveKeys}):i,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)}}},ve=class extends re{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}));const r=N.getInstance().getPrivacy(),s=r.shouldMaskNetworkQueryParams,a={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"},o=d?.location?.href||"",l=d?.document?.referrer||"";return V({type:"pageload",attributes:{page_url:s?j(o,a):o,page_load_time:t,page_referrer:s?j(l,a):l,page_resources:i}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){h(e)}}},me=class extends re{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!X())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 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){h(e)}}},ye=class{constructor(){this.logger=l.getInstance(),this.eventsPool=ie.getInstance(),this.configManager=N.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,n=this.configManager.getPrivacy();this.stopFn=i.record({...t?{blockSelector:t}:{},...n.maskTextSelector?{maskTextSelector:n.maskTextSelector}:{},maskAllInputs:n.maskInputs,...n.maskTextFn?{maskTextFn:n.maskTextFn}:{},...n.maskInputFn?{maskInputFn:n.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){h(e),this.logger.log("[session-replay-listener] failed to process event in emit callback:",e)}}})||null,this.logger.log("[session-replay-listener] started recording with full snapshot interval:",3e4,"ms")}catch(e){h(e),this.logger.log("[session-replay-listener] failed to start recording:",e),this.isRecording=!1}}scheduleSendBatch(){null===this.sendTimerId&&(this.sendTimerId=d.setTimeout((()=>{this.sendTimerId=null,this.isRecording&&this.sendBatchAsync().catch((e=>{h(e),this.logger.log("[session-replay-listener] failed to send deferred batch:",e)}))}),0))}clearScheduledSend(){null!==this.sendTimerId&&(d.clearTimeout(this.sendTimerId),this.sendTimerId=null)}flushPendingSync(){this.clearScheduledSend(),0!==this.events.length&&this.sendBatchSync()}async sendBatchAsync(){if(0===this.events.length)return;const e=this.drainBatch(),t=this.configManager.getSessionId(),n=Z.getInstance();let i;if(n.isAvailable)try{i=await n.packReplay(e.events)}catch(t){h(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),i=e.events.map((e=>r.pack(e)))}else i=e.events.map((e=>r.pack(e)));this.configManager.getSessionId()===t?this.enqueueReplayEvent(i,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during pack",{drained:i.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>r.pack(e)));this.enqueueReplayEvent(t,e.containsFullSnapshot,e.snapshotTimestamp)}drainBatch(){const e=this.events,t=this.batchContainsFullSnapshot,n=this.fullSnapshotTimestamp;return this.events=[],this.batchContainsFullSnapshot=!1,this.fullSnapshotTimestamp=void 0,{events:e,containsFullSnapshot:t,snapshotTimestamp:n}}enqueueReplayEvent(e,t,n){try{const i={_gc_replay_data:{events:e}};t&&(i.replay_is_full_snapshot=!0,i.replay_full_snapshot_timestamp=n);const r=V({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()}},be=["pointerdown","keydown","scroll","touchstart","mousemove"],we=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,be.forEach((e=>{try{d.addEventListener?.(e,this.handleInput,{capture:!0,passive:!0})}catch(e){h(e)}})),this.armIdleTimer(),this.logger.log("[user-presence-monitor] installed"))}notePresence(e){this.lastSignalMs=e,this.armIdleTimer()}resetIdleTimer(){this.armIdleTimer()}armIdleTimer(){try{this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null,this.idleTimer=setTimeout((()=>{this.idleTimer=null,this.logger.log("[user-presence-monitor] user idle for",k,"ms");try{this.callbacks.onIdle()}catch(e){h(e)}}),k)}catch(e){h(e)}}destroy(){if(this.installed){this.installed=!1,be.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}}}},ke=new Set(["dom.event","navigation","pageload","custom"]),Ee=class{constructor(){this.logger=l.getInstance(),this.eventsPool=ie.getInstance(),this.configManager=N.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 we({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 ve,this.pageLoadListener.initialize(),i.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new le,this.domEventsListener.initialize(),i.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new he,this.logEventsListener.initialize(),i.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new fe,this.errorsEventsListener.initialize(),i.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new ue,this.networkEventsListener.initialize(),i.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new me,this.performanceListener.initialize(),i.push("performance")),this.navigationListener=new pe({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=V({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=V({type:"log",attributes:{...i,message:J({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}restartReplayForConfigChange(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] restarting replay to apply config change"),this.stopReplayListener(),this.startReplayListener())}startReplayRecording(){if(this.replayDesired=!0,this.isReplayRecording())return void this.logger.log("[instrumentation-manager] replay recording already started");const e=Date.now();(this.configManager.isSessionInactive(e)||this.configManager.isSessionExpired(e))&&this.rotateSession({reason:"replay start into stale session"}),this.startReplayListener(),this.presenceMonitor?.resetIdleTimer()}stopReplayRecording(){this.replayDesired=!1,this.stopReplayListener()}flushPendingReplay(){this.sessionReplayListener?.flushPendingSync()}syncReplayState(e){this.replayDesired&&e&&!this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] user present and replay desired — starting replay"),this.startReplayListener())}pauseReplayOnIdle(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] pausing replay: user idle window elapsed"),this.stopReplayListener())}startReplayListener(){if(this.sessionReplayListener)this.logger.log("[instrumentation-manager] replay recording already started");else try{const e=new ye;e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){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(),ke.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}},Se="gcSample",Ie=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 Ee,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=N.getInstance();t.initialize(e);ie.getInstance().initialize(),Z.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(Se);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 R(Se,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");N.getInstance().updateConfig({userIdentifier:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");N.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,n){this.initialized?this.instrumentationManager.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?N.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=ie.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),i=N.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(){this.initialized&&(this.instrumentationManager.uninstrument(),ie.getInstance().destroy(),Z.getInstance().terminate(),N.getInstance().clearSessionState(),this.initialized=!1)}},Te=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 Re={init:function(e){try{ge=new Ie({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}),Te.manager=ge}catch(e){h(e)}},identifyUser:function(e){ge?ge.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){ge&&ge.sendCustomEvent(e)},captureException:function(e,t){ge&&ge.captureException(e,t)},logger:Te,updateConfig:function(e){ge&&ge.updateConfig(e)},startNavigation:function(e){ge?ge.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){ge?ge.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return ge?ge.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(ge)try{await ge.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(){ge?ge.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){ge?ge.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=Re}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var Me=Re;module.exports=Me;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
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 S+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 S="0000000000000000";var I=144e5,w=288e5,T=18e5,k={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:I},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.providedOptions={...t?.options||{}},this.options={...k,...t?.options||{}},this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration)}static normalizeSessionMaxDuration(e){return void 0===e?I:"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"),I):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 R(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??I}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|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,D=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]);function A(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 O(e,t){return A(e,t)||q.test(e)}function F(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 function(e,t){return D.has(e.toLowerCase())||A(e,t)}(s,t)?`${n}=${encodeURIComponent(M)}`:e})).join("&")}catch{return e}}function j(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}?${F(a,t)}${o}`}function $(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=>$(e,t,i+1)));const n={};for(const[s,r]of Object.entries(e))A(s,t)?n[s]=M:n[s]=$(r,t,i+1);return n}function K(e,t){if(!e)return e;try{let i=e.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,i)=>O(i,t)?`"${i}":"${M}"`:e));return i=i.replace(/([\w.-]{1,64})=([^\s&,;]+)/g,((e,i)=>O(i,t)?`${i}=${M}`:e)),i=i.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,i)=>O(i,t)?`${i}: ${M}`:e)),i}catch(t){return u(t),e}}function U(e,t){return $(e,t,0)}function B(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 X=z.getInstance(),V=new y,W=h.getInstance();function G(){const e=X?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function J(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?J(e,`${a}[${t}]`,i,n+1):e)):Object.assign(e,J(r,a,i,n+1)):e[a]=r,e}),{}))}catch(e){return W.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{i.delete(e)}var s}function Q(e){const t=f(Date.now()),i=V.generateId(),n=e.spanId||V.generateSpanId(),s=e.traceId||V.generateTraceId(),r=e.parentSpanId||"",a=J(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=X.getPrivacy(),s="allow"!==n.level&&n.maskNetworkQueryParams;return{path:s&&t?j(i,n.sensitiveKeys):i,url:s?j(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 Y({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var Z=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`}},ee=["navigation","dom.event"],te=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 Z}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&&!ee.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}}};te.instance=null;var ie=te,ne=class{constructor(){this.logger=h.getInstance(),this.eventsPool=ie.getInstance()}},se="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function re(e,t){try{return e.getAttribute(t)||""}catch{return""}}function ae(e){try{const t=se?.call(e);return"string"==typeof t?t:""}catch{return""}}var oe=class extends ne{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(re(e,"data-private"))return!0;const n=["id","name","class","aria-label","placeholder"].map((t=>re(e,t))).filter(Boolean);if(n.some((e=>A(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=ae(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})?"*":Y({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(!G())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 Q({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:re(n,"id"),tagName:ae(n),className:re(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"===ae(e).toLowerCase())return"html";let r="",a=0,o=e;const l=[];for(;o&&o!==i&&o!==document.documentElement&&a<n;){let e=ae(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=ae(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||"*"}},le=["log","info","warn","error","debug","assert","trace"],ce=class extends ne{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=z.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),le.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;le.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){u(e)}}handleEvent(e,t){try{if(!G())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?K(e,n.sensitiveKeys):e;"allow"!==n.level&&(r=B(r,n.redact,{kind:"log"}));return Q({type:"log",attributes:{...s&&i?U(i,n.sensitiveKeys):i,message:Y({text:r}),level:t}})}queueEvent(e){try{this.logger.log("[logs-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){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{le.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){u(e)}return e}};function de(e){try{if(null==e)return"";if("string"==typeof e)return e;if(e instanceof FormData)return"[form data]";if(e instanceof Blob)return"[blob data]";if(e instanceof ArrayBuffer)return"[arraybuffer data]";if("undefined"!=typeof Document){if(e instanceof Document)return"[document data]";const t=e;if(9===t?.nodeType)return"[document data]"}if(e instanceof URLSearchParams)try{return e.toString()}catch{return"[unreadable body]"}return Array.isArray(e)||"object"==typeof e?JSON.stringify(e):String(e)}catch(e){return u(`Failed to format body: ${e}`),"[unreadable body]"}}var he,ge=class extends ne{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(!G())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=j(t,n.sensitiveKeys))}n.maskNetworkQueryParams&&!s&&(i=j(i,n.sensitiveKeys)),s||(i=B(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($(e,t,0))}catch{}return e.includes("=")&&!e.includes("{")?F(e,t):K(e,t)}(e,n.sensitiveKeys):e;return s?t:B(t,n.redact,{kind:"body",url:i})},g=Y({text:h(e.request.body),maxLength:this.maxBodyLength}),u=Y({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),Q(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=de(this._requestBody),r=de(""===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=de(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)||A(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:B(s,t.redact,{kind:"header"});return e[n]=Y({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}},ue=class extends ne{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?K(s,i.sensitiveKeys):s;"allow"!==i.level&&(r=B(r,i.redact,{kind:"error"}));const a=n&&t?.metadata?U(t.metadata,i.sensitiveKeys):t?.metadata;return Q({type:"exception",attributes:{error_type:e.name||"Error",error_message:r,error_stacktrace:this.buildStackTrace(e,n,i.sensitiveKeys),error_fingerprint:`${e.name}:${Y({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?j(i,n):i,function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0}}))}catch(e){return[]}}},pe=class extends ne{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 Q({type:"navigation",attributes:{page_url:!t&&e.maskNetworkQueryParams?j(i,e.sensitiveKeys):i,metadata:!t&&n?U(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)}}},me=class extends ne{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 Q({type:"pageload",attributes:{page_url:r?j(a,s.sensitiveKeys):a,page_load_time:t,page_referrer:r?j(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)}}},fe=class extends ne{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!G())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 Q({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)}}},ve=class{constructor(){this.logger=h.getInstance(),this.eventsPool=ie.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=Q({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()}},ye=["pointerdown","keydown","scroll","touchstart","mousemove"],be=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,ye.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,ye.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}}}},Ee=new Set(["dom.event","navigation","pageload","custom"]),Se=class{constructor(){this.logger=h.getInstance(),this.eventsPool=ie.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 be({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 me,this.pageLoadListener.initialize(),n.push("pageload")),(i||t?.includes("dom"))&&(this.domEventsListener=new oe,this.domEventsListener.initialize(),n.push("dom")),(i||t?.includes("logs"))&&(this.logEventsListener=new ce,this.logEventsListener.initialize(),n.push("logs")),(i||t?.includes("exceptions"))&&(this.errorsEventsListener=new ue,this.errorsEventsListener.initialize(),n.push("exceptions")),(i||t?.includes("network"))&&(this.networkEventsListener=new ge,this.networkEventsListener.initialize(),n.push("network")),(i||t?.includes("performance"))&&(this.performanceListener=new fe,this.performanceListener.initialize(),n.push("performance")),this.navigationListener=new pe({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=Q({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=Q({type:"log",attributes:{...n,message:Y({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 ve;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(),Ee.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",we=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 Se,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);ie.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=ie.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(),ie.getInstance().destroy(),z.getInstance().clearSessionState(),this.initialized=!1)}},Te=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 ke={init:function(e){try{he=new we({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}),Te.manager=he}catch(e){u(e)}},identifyUser:function(e){he?he.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){he&&he.sendCustomEvent(e)},captureException:function(e,t){he&&he.captureException(e,t)},logger:Te,updateConfig:function(e){he&&he.updateConfig(e)},startNavigation:function(e){he?he.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){he?he.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return he?he.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(he)try{await he.setSessionId(e)}catch(e){console.error("[groundcover] setSessionId: failed to set session ID:",e)}else console.warn("[groundcover] setSessionId: groundcover is not initialized. please call init() first")},startReplayRecording:function(){he?he.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){he?he.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=ke}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var Re=ke;export{Re as default};
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 v(e){return e*p}function m(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 k+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 k="0000000000000000";var E=144e5,S=288e5,I=18e5,T={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:E},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.providedOptions={...t?.options||{}},this.options={...T,...t?.options||{}},this.options.sessionMaxDuration=e.normalizeSessionMaxDuration(t?.options?.sessionMaxDuration)}static normalizeSessionMaxDuration(e){return void 0===e?E:"number"!=typeof e||!Number.isFinite(e)||e<6e4||e>S?(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"),E):e}getEndpoint(){return this.dsn?.startsWith("http")?this.dsn:`https://${this.dsn}`}updateConfig(t){if(t.options){const n=t.options.privacy?{...this.providedOptions?.privacy,...t.options.privacy}:void 0,i=t.options.privacy?{...this.options.privacy,...t.options.privacy}:void 0;this.providedOptions={...this.providedOptions,...t.options},this.options={...this.options,...t.options},n&&(this.providedOptions.privacy=n,this.options.privacy=i),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 M(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter((e=>e.length>0)):[]}function L(e){try{return globalThis?.sessionStorage?.getItem(e)??null}catch(e){return u(e),null}}function N(e,t){try{globalThis?.sessionStorage?.setItem(e,t)}catch(e){u(e)}}function A(e){try{globalThis?.sessionStorage?.removeItem(e)}catch(e){u(e)}}function q(e,t=0){const n=L(e);if(null===n)return t;const i=Number(n);return Number.isFinite(i)?i:t}var x=class e{constructor(){this.config=null,this.logger=d.getInstance(),this.sessionId=null,this.sessionStartTime=null,this.lastActivityMs=null,this.lastPersistedActivityMs=0,this.privacyCache=null,this.flushActivityOnHide=()=>{try{if("undefined"!=typeof document&&"hidden"!==document.visibilityState)return;this.persistLastActivity()}catch(e){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)}getPrivacy(){return this.privacyCache||(this.privacyCache=function(e){const t=e?.privacy,n=!!e&&Object.prototype.hasOwnProperty.call(e,"enableMasking"),i=function(e){return"mask-user-input"===e||"mask-all"===e||"allow"===e?e:void 0}(t?.level);let r;r=i||(n?e?.enableMasking?"mask-all":"allow":"mask-user-input");const s="allow"===r,a=M(t?.maskSelectors),o=t?.replay,l="function"==typeof o?.maskTextFn?o.maskTextFn:void 0,c="function"==typeof o?.maskInputFn?o.maskInputFn:void 0;let h;h="mask-all"===r||!s&&void 0!==l?["*",...a].join(", "):"mask-user-input"===r&&a.length?a.join(", "):void 0;const d=e=>!s&&(e??!0),g=d(t?.maskNetworkBodies),u=d(t?.maskNetworkQueryParams),f=d(t?.maskLogs),p=d(t?.maskErrors);return{level:r,maskTextSelector:h,maskSelectors:a,maskInputs:!s,maskNetworkBodies:g,maskNetworkQueryParams:u,maskLogs:f,maskErrors:p,shouldMaskNetworkBodies:!s&&g,shouldMaskNetworkQueryParams:!s&&u,shouldMaskLogs:!s&&f,shouldMaskErrors:!s&&p,sensitiveKeys:M(t?.sensitiveKeys),maskFieldsLegacy:M(e?.maskFields),redact:"function"==typeof t?.redact?t.redact:void 0,maskTextFn:l,maskInputFn:c}}(this.config?.providedOptions)),this.privacyCache}getSessionId(){if(this.sessionId)return this.sessionId;return L("gcId")||""}setSessionId(e){this.sessionId=e,N("gcId",e)}getSessionStartTime(){return this.sessionStartTime?this.sessionStartTime:q("gcStartTime",0)}setSessionStartTime(e){this.sessionStartTime=e,N("gcStartTime",String(e)),this.setLastActivityMs(Date.now())}getLastActivityMs(){return null!==this.lastActivityMs?this.lastActivityMs:q("gcLastActivity",0)}setLastActivityMs(e){this.lastActivityMs=e,e-this.lastPersistedActivityMs>=6e4&&this.persistLastActivity()}persistLastActivity(){null!==this.lastActivityMs&&(this.lastPersistedActivityMs=this.lastActivityMs,N("gcLastActivity",String(this.lastActivityMs)))}isSessionInactive(e=Date.now()){const t=this.getLastActivityMs();return t>0&&e-t>=I}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)}}A("gcId"),A("gcStartTime"),A("gcLastActivity")}getSessionMaxDuration(){return this.config?.options?.sessionMaxDuration??E}getSessionElapsedMs(e=Date.now()){const t=this.getSessionStartTime();return t?e-m(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")}},z="[REDACTED]",C=["authorization","cookie","set-cookie"],H=/(token|key|secret|passwd|password|auth|bearer|credential)/i,P=/(token|secret|passwd|password|api[_-]?key|access[_-]?key|write[_-]?key|auth|bearer|credential|cvv|ssn|credit[_-]?card|card[_-]?number)/i,_=new Set(["code","state","session_state","id_token","access_token","refresh_token","token"]);function D(e,t){if(!e)return!1;if(P.test(e))return!0;if(t?.length){const n=e.toLowerCase();return t.some((e=>e&&n.includes(e.toLowerCase())))}return!1}function F(e,t){return _.has(e.toLowerCase())||D(e,t)}function O(e){return e.includes("-")&&H.test(e)}function j(e,t){return D(e,t)||O(e)}function K(e,t){const n=e.sensitive?z:e.value;if(!t)return n;try{const i=t(e);return void 0===i?n:i}catch(e){return u(e),n}}function U(e,t={}){if(!e)return e;try{return e.split("&").map((e=>{const n=e.indexOf("=");if(-1===n)return e;const i=e.slice(0,n),r=e.slice(n+1);let s=i;try{s=decodeURIComponent(i)}catch{}let a=r;try{a=decodeURIComponent(r)}catch{}const o=F(s,t.sensitiveKeys),l=K({key:s,value:a,path:[s],kind:t.kind??"query",sensitive:o},t.redact);return l===a?e:`${i}=${encodeURIComponent(null===l?"":String(l))}`})).join("&")}catch{return e}}function B(e,t={}){if(!e)return e;const n=e.indexOf("?");if(-1===n)return e;const i=e.slice(0,n),r=e.slice(n+1),s=r.indexOf("#"),a=-1===s?r:r.slice(0,s),o=-1===s?"":r.slice(s);return`${i}?${U(a,{...t,kind:t.kind??"query"})}${o}`}function Y(e,t,n,i,r){const s=!!e&&D(e,i.sensitiveKeys);if(null!==t&&"object"==typeof t){if(s||r>8)return z;if(Array.isArray(t))return t.map((t=>Y(e,t,n,i,r+1)));const a={};for(const[e,s]of Object.entries(t))a[e]=Y(e,s,[...n,e],i,r+1);return a}return K({key:e,value:t,path:n,kind:i.kind??"log",sensitive:s},i.redact)}function $(e,t={}){if(!e)return e;let n=e;try{n=n.replace(/"([\w.-]{1,64})"\s*:\s*("(?:[^"\\]|\\.)*"|[^\s,}\]]+)/g,((e,n)=>j(n,t.sensitiveKeys)?`"${n}":"${z}"`:e)),n=n.replace(/([\w.-]{1,64})=([^\s&,;]+)/g,((e,n)=>function(e,t){return F(e,t)||O(e)}(n,t.sensitiveKeys)?`${n}=${z}`:e)),n=n.replace(/([\w.-]{1,64}):[ \t]*([^\n,;&]{1,4096})/g,((e,n)=>j(n,t.sensitiveKeys)?`${n}: ${z}`:e))}catch(t){u(t),n=e}if(t.redact)try{const n=t.redact({key:"",value:e,path:[],kind:t.kind??"log",sensitive:!1});if("string"==typeof n)return n}catch(e){u(e)}return n}function Q(e,t={}){return Y("",e,[],t,0)}var X=x.getInstance(),W=new y,V=d.getInstance();function J(){const e=X?.getConfig()?.options?.eventSampleRate;return!(void 0!==e&&!Number.isNaN(e))||Math.random()<=e}function G(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?G(e,`${a}[${t}]`,n,i+1):e)):Object.assign(e,G(s,a,n,i+1)):e[a]=s,e}),{}))}catch(e){return V.log("[events-processors.formatEventObject] Error formatting event object",e),{[t||"format_error"]:"[Error formatting object]"}}finally{n.delete(e)}var r}function Z(e){const t=v(Date.now()),n=W.generateId(),i=e.spanId||W.generateSpanId(),r=e.traceId||W.generateTraceId(),s=e.parentSpanId||"",a=G(e.attributes||{}),o=function(){const e=f?.location;if(!e)return{path:"",url:"",title:f?.document?.title||""};const t=e.hash&&!e.hash.match(/^#[a-z0-9-]+$/i)&&e.hash.startsWith("#/"),n=t?e.hash:e.pathname,i=X.getPrivacy(),r=i.shouldMaskNetworkQueryParams,s={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"};return{path:r&&t?B(n,s):n,url:r?B(e.href,s):e.href,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 ee({text:e,maxLength:t=1e4}){return e?e.length<=t||"string"!=typeof e?e:e.substring(0,t):""}var te=class e{constructor(){if(this.worker=null,this.pending=new Map,this.nextId=0,this.consecutiveTimeouts=0,this.isAvailable=!1,this.logger=d.getInstance(),"undefined"==typeof Worker||"undefined"==typeof URL||"undefined"==typeof Blob)return;const e=new Blob(['!function(){"use strict";var r=Uint8Array,n=Uint16Array,e=Int32Array,t=new r([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),f=new r([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new r([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(r,t){for(var f=new n(31),o=0;o<31;++o)f[o]=t+=1<<r[o-1];var a=new e(f[30]);for(o=1;o<30;++o)for(var i=f[o];i<f[o+1];++i)a[i]=i-f[o]<<5|o;return{b:f,r:a}},i=a(t,2),u=i.b,v=i.r;u[28]=258,v[258]=28;var s=a(f,0).r,l=new n(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>1|(21845&Y)<<1))>>2|(13107&Q)<<2))>>4|(3855&Q)<<4,l[Y]=((65280&Q)>>8|(255&Q)<<8)>>1;var c=function(r,e,t){for(var f=r.length,o=0,a=new n(e);o<f;++o)r[o]&&++a[r[o]-1];var i,u=new n(e);for(o=1;o<e;++o)u[o]=u[o-1]+a[o-1]<<1;for(i=new n(f),o=0;o<f;++o)r[o]&&(i[o]=l[u[r[o]-1]++]>>15-r[o]);return i},h=new r(288);for(Y=0;Y<144;++Y)h[Y]=8;for(Y=144;Y<256;++Y)h[Y]=9;for(Y=256;Y<280;++Y)h[Y]=7;for(Y=280;Y<288;++Y)h[Y]=8;var w=new r(32);for(Y=0;Y<32;++Y)w[Y]=5;var g=c(h,9),d=c(w,5),m=function(r){return(r+7)/8|0},p=function(n,e,t){return(null==t||t>n.length)&&(t=n.length),new r(n.subarray(e,t))},y=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8},M=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>8,r[t+2]|=e>>16},b=function(e,t){for(var f=[],o=0;o<e.length;++o)e[o]&&f.push({s:o,f:e[o]});var a=f.length,i=f.slice();if(!a)return{t:U,l:0};if(1==a){var u=new r(f[0].s+1);return u[f[0].s]=1,{t:u,l:1}}f.sort((function(r,n){return r.f-n.f})),f.push({s:-1,f:25001});var v=f[0],s=f[1],l=0,c=1,h=2;for(f[0]={s:-1,f:v.f+s.f,l:v,r:s};c!=a-1;)v=f[f[l].f<f[h].f?l++:h++],s=f[l!=c&&f[l].f<f[h].f?l++:h++],f[c++]={s:-1,f:v.f+s.f,l:v,r:s};var w=i[0].s;for(o=1;o<a;++o)i[o].s>w&&(w=i[o].s);var g=new n(w+1),d=k(f[c-1],g,0);if(d>t){o=0;var m=0,p=d-t,y=1<<p;for(i.sort((function(r,n){return g[n.s]-g[r.s]||r.f-n.f}));o<a;++o){var M=i[o].s;if(!(g[M]>t))break;m+=y-(1<<d-g[M]),g[M]=t}for(m>>=p;m>0;){var b=i[o].s;g[b]<t?m-=1<<t-g[b]++-1:++o}for(;o>=0&&m;--o){var x=i[o].s;g[x]==t&&(--g[x],++m)}d=t}return{t:new r(g),l:d}},k=function(r,n,e){return-1==r.s?Math.max(k(r.l,n,e+1),k(r.r,n,e+1)):n[r.s]=e},x=function(r){for(var e=r.length;e&&!r[--e];);for(var t=new n(++e),f=0,o=r[0],a=1,i=function(r){t[f++]=r},u=1;u<=e;++u)if(r[u]==o&&u!=e)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=r[u]}return{c:t.subarray(0,f),n:e}},A=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},C=function(r,n,e){var t=e.length,f=m(n+2);r[f]=255&t,r[f+1]=t>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},T=function(r,e,a,i,u,v,s,l,m,p,k){y(e,k++,a),++u[256];for(var T=b(u,15),E=T.t,U=T.l,D=b(v,15),S=D.t,I=D.l,j=x(E),z=j.c,J=j.n,N=x(S),O=N.c,q=N.n,B=new n(19),F=0;F<z.length;++F)++B[31&z[F]];for(F=0;F<O.length;++F)++B[31&O[F]];for(var G=b(B,7),H=G.t,K=G.l,L=19;L>4&&!H[o[L-1]];--L);var P,Q,R,V,W=p+5<<3,X=A(u,h)+A(v,w)+s,Y=A(u,E)+A(v,S)+s+14+3*L+A(B,H)+2*B[16]+3*B[17]+7*B[18];if(m>=0&&W<=X&&W<=Y)return C(e,k,r.subarray(m,m+p));if(y(e,k,1+(Y<X)),k+=2,Y<X){P=c(E,U),Q=E,R=c(S,I),V=S;var Z=c(H,K);y(e,k,J-257),y(e,k+5,q-1),y(e,k+10,L-4),k+=14;for(F=0;F<L;++F)y(e,k+3*F,H[o[F]]);k+=3*L;for(var $=[z,O],_=0;_<2;++_){var rr=$[_];for(F=0;F<rr.length;++F){var nr=31&rr[F];y(e,k,Z[nr]),k+=H[nr],nr>15&&(y(e,k,rr[F]>>5&127),k+=rr[F]>>12)}}}else P=g,Q=h,R=d,V=w;for(F=0;F<l;++F){var er=i[F];if(er>255){M(e,k,P[(nr=er>>18&31)+257]),k+=Q[nr+257],nr>7&&(y(e,k,er>>23&31),k+=t[nr]);var tr=31&er;M(e,k,R[tr]),k+=V[tr],tr>3&&(M(e,k,er>>5&8191),k+=f[tr])}else M(e,k,P[er]),k+=Q[er]}return M(e,k,P[256]),k+Q[256]},E=new e([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),U=new r(0),D=function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var e=n,t=9;--t;)e=(1&e&&-306674912)^e>>>1;r[n]=e}return r}(),S=function(o,a,i,u,l){if(!l&&(l={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),h=new r(c.length+o.length);h.set(c),h.set(o,c.length),o=h,l.w=c.length}return function(o,a,i,u,l,c){var h=c.z||o.length,w=new r(u+h+5*(1+Math.ceil(h/7e3))+l),g=w.subarray(u,w.length-l),d=c.l,y=7&(c.r||0);if(a){y&&(g[0]=c.r>>3);for(var M=E[a-1],b=M>>13,k=8191&M,x=(1<<i)-1,A=c.p||new n(32768),U=c.h||new n(x+1),D=Math.ceil(i/3),S=2*D,I=function(r){return(o[r]^o[r+1]<<D^o[r+2]<<S)&x},j=new e(25e3),z=new n(288),J=new n(32),N=0,O=0,q=c.i||0,B=0,F=c.w||0,G=0;q+2<h;++q){var H=I(q),K=32767&q,L=U[H];if(A[K]=L,U[H]=K,F<=q){var P=h-q;if((N>7e3||B>24576)&&(P>423||!d)){y=T(o,g,0,j,z,J,O,B,G,q-G,y),B=N=O=0,G=q;for(var Q=0;Q<286;++Q)z[Q]=0;for(Q=0;Q<30;++Q)J[Q]=0}var R=2,V=0,W=k,X=K-L&32767;if(P>2&&H==I(q-X))for(var Y=Math.min(b,P)-1,Z=Math.min(32767,q),$=Math.min(258,P);X<=Z&&--W&&K!=L;){if(o[q+R]==o[q+R-X]){for(var _=0;_<$&&o[q+_]==o[q+_-X];++_);if(_>R){if(R=_,V=X,_>Y)break;var rr=Math.min(X,_-2),nr=0;for(Q=0;Q<rr;++Q){var er=q-X+Q&32767,tr=er-A[er]&32767;tr>nr&&(nr=tr,L=er)}}}X+=(K=L)-(L=A[K])&32767}if(V){j[B++]=268435456|v[R]<<18|s[V];var fr=31&v[R],or=31&s[V];O+=t[fr]+f[or],++z[257+fr],++J[or],F=q+R,++N}else j[B++]=o[q],++z[o[q]]}}for(q=Math.max(q,F);q<h;++q)j[B++]=o[q],++z[o[q]];y=T(o,g,d,j,z,J,O,B,G,q-G,y),d||(c.r=7&y|g[y/8|0]<<3,y-=7,c.h=U,c.p=A,c.i=q,c.w=F)}else{for(q=c.w||0;q<h+d;q+=65535){var ar=q+65535;ar>=h&&(g[y/8|0]=d,ar=h),y=C(g,y+1,o.subarray(q,ar))}c.i=h}return p(w,0,u+m(y)+l)}(o,null==a.level?6:a.level,null==a.mem?l.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(o.length)))):20:12+a.mem,i,u,l)},I=function(r,n,e){for(;e;++n)r[n]=e,e>>>=8};function j(r,n){n||(n={});var e=function(){var r=-1;return{p:function(n){for(var e=r,t=0;t<n.length;++t)e=D[255&e^n[t]]^e>>>8;r=e},d:function(){return~r}}}(),t=r.length;e.p(r);var f,o=S(r,n,10+((f=n).filename?f.filename.length+1:0),8),a=o.length;return function(r,n){var e=n.filename;if(r[0]=31,r[1]=139,r[2]=8,r[8]=n.level<2?4:9==n.level?2:0,r[9]=3,0!=n.mtime&&I(r,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){r[3]=8;for(var t=0;t<=e.length;++t)r[t+10]=e.charCodeAt(t)}}(o,n),I(o,a-8,e.d()),I(o,a-4,t),o}var z="undefined"!=typeof TextEncoder&&new TextEncoder,J="undefined"!=typeof TextDecoder&&new TextDecoder;try{J.decode(U,{stream:!0})}catch(r){}var N=Uint8Array,O=Uint16Array,q=Uint32Array,B=new N([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),F=new N([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),G=new N([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),H=function(r,n){for(var e=new O(31),t=0;t<31;++t)e[t]=n+=1<<r[t-1];var f=new q(e[30]);for(t=1;t<30;++t)for(var o=e[t];o<e[t+1];++o)f[o]=o-e[t]<<5|t;return[e,f]},K=H(B,2),L=K[0],P=K[1];L[28]=258,P[258]=28;var Q,R=H(F,0)[1],V=new O(32768);for(Y=0;Y<32768;++Y)Q=(61680&(Q=(52428&(Q=(43690&Y)>>>1|(21845&Y)<<1))>>>2|(13107&Q)<<2))>>>4|(3855&Q)<<4,V[Y]=((65280&Q)>>>8|(255&Q)<<8)>>>1;var W=function(r,n,e){for(var t=r.length,f=0,o=new O(n);f<t;++f)++o[r[f]-1];var a,i=new O(n);for(f=0;f<n;++f)i[f]=i[f-1]+o[f-1]<<1;for(a=new O(t),f=0;f<t;++f)a[f]=V[i[r[f]-1]++]>>>15-r[f];return a},X=new N(288);for(Y=0;Y<144;++Y)X[Y]=8;for(Y=144;Y<256;++Y)X[Y]=9;for(Y=256;Y<280;++Y)X[Y]=7;for(Y=280;Y<288;++Y)X[Y]=8;var Y,Z=new N(32);for(Y=0;Y<32;++Y)Z[Y]=5;var $=W(X,9),_=W(Z,5),rr=function(r){return(r/8|0)+(7&r&&1)},nr=function(r,n,e){(null==e||e>r.length)&&(e=r.length);var t=new(r instanceof O?O:r instanceof q?q:N)(e-n);return t.set(r.subarray(n,e)),t},er=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8},tr=function(r,n,e){e<<=7&n;var t=n/8|0;r[t]|=e,r[t+1]|=e>>>8,r[t+2]|=e>>>16},fr=function(r,n){for(var e=[],t=0;t<r.length;++t)r[t]&&e.push({s:t,f:r[t]});var f=e.length,o=e.slice();if(!f)return[new N(0),0];if(1==f){var a=new N(e[0].s+1);return a[e[0].s]=1,[a,1]}e.sort((function(r,n){return r.f-n.f})),e.push({s:-1,f:25001});var i=e[0],u=e[1],v=0,s=1,l=2;for(e[0]={s:-1,f:i.f+u.f,l:i,r:u};s!=f-1;)i=e[e[v].f<e[l].f?v++:l++],u=e[v!=s&&e[v].f<e[l].f?v++:l++],e[s++]={s:-1,f:i.f+u.f,l:i,r:u};var c=o[0].s;for(t=1;t<f;++t)o[t].s>c&&(c=o[t].s);var h=new O(c+1),w=or(e[s-1],h,0);if(w>n){t=0;var g=0,d=w-n,m=1<<d;for(o.sort((function(r,n){return h[n.s]-h[r.s]||r.f-n.f}));t<f;++t){var p=o[t].s;if(!(h[p]>n))break;g+=m-(1<<w-h[p]),h[p]=n}for(g>>>=d;g>0;){var y=o[t].s;h[y]<n?g-=1<<n-h[y]++-1:++t}for(;t>=0&&g;--t){var M=o[t].s;h[M]==n&&(--h[M],++g)}w=n}return[new N(h),w]},or=function(r,n,e){return-1==r.s?Math.max(or(r.l,n,e+1),or(r.r,n,e+1)):n[r.s]=e},ar=function(r){for(var n=r.length;n&&!r[--n];);for(var e=new O(++n),t=0,f=r[0],o=1,a=function(r){e[t++]=r},i=1;i<=n;++i)if(r[i]==f&&i!=n)++o;else{if(!f&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(f),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(f);o=1,f=r[i]}return[e.subarray(0,t),n]},ir=function(r,n){for(var e=0,t=0;t<n.length;++t)e+=r[t]*n[t];return e},ur=function(r,n,e){var t=e.length,f=rr(n+2);r[f]=255&t,r[f+1]=t>>>8,r[f+2]=255^r[f],r[f+3]=255^r[f+1];for(var o=0;o<t;++o)r[f+o+4]=e[o];return 8*(f+4+t)},vr=function(r,n,e,t,f,o,a,i,u,v,s){er(n,s++,e),++f[256];for(var l=fr(f,15),c=l[0],h=l[1],w=fr(o,15),g=w[0],d=w[1],m=ar(c),p=m[0],y=m[1],M=ar(g),b=M[0],k=M[1],x=new O(19),A=0;A<p.length;++A)x[31&p[A]]++;for(A=0;A<b.length;++A)x[31&b[A]]++;for(var C=fr(x,7),T=C[0],E=C[1],U=19;U>4&&!T[G[U-1]];--U);var D,S,I,j,z=v+5<<3,J=ir(f,X)+ir(o,Z)+a,N=ir(f,c)+ir(o,g)+a+14+3*U+ir(x,T)+(2*x[16]+3*x[17]+7*x[18]);if(z<=J&&z<=N)return ur(n,s,r.subarray(u,u+v));if(er(n,s,1+(N<J)),s+=2,N<J){D=W(c,h),S=c,I=W(g,d),j=g;var q=W(T,E);er(n,s,y-257),er(n,s+5,k-1),er(n,s+10,U-4),s+=14;for(A=0;A<U;++A)er(n,s+3*A,T[G[A]]);s+=3*U;for(var H=[p,b],K=0;K<2;++K){var L=H[K];for(A=0;A<L.length;++A){var P=31&L[A];er(n,s,q[P]),s+=T[P],P>15&&(er(n,s,L[A]>>>5&127),s+=L[A]>>>12)}}}else D=$,S=X,I=_,j=Z;for(A=0;A<i;++A)if(t[A]>255){P=t[A]>>>18&31;tr(n,s,D[P+257]),s+=S[P+257],P>7&&(er(n,s,t[A]>>>23&31),s+=B[P]);var Q=31&t[A];tr(n,s,I[Q]),s+=j[Q],Q>3&&(tr(n,s,t[A]>>>5&8191),s+=F[Q])}else tr(n,s,D[t[A]]),s+=S[t[A]];return tr(n,s,D[256]),s+S[256]},sr=new q([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lr=function(r,n,e,t,f){return function(r,n,e,t,f,o){var a=r.length,i=new N(t+a+5*(1+Math.floor(a/7e3))+f),u=i.subarray(t,i.length-f),v=0;if(!n||a<8)for(var s=0;s<=a;s+=65535){var l=s+65535;l<a?v=ur(u,v,r.subarray(s,l)):(u[s]=o,v=ur(u,v,r.subarray(s,a)))}else{for(var c=sr[n-1],h=c>>>13,w=8191&c,g=(1<<e)-1,d=new O(32768),m=new O(g+1),p=Math.ceil(e/3),y=2*p,M=function(n){return(r[n]^r[n+1]<<p^r[n+2]<<y)&g},b=new q(25e3),k=new O(288),x=new O(32),A=0,C=0,T=(s=0,0),E=0,U=0;s<a;++s){var D=M(s),S=32767&s,I=m[D];if(d[S]=I,m[D]=S,E<=s){var j=a-s;if((A>7e3||T>24576)&&j>423){v=vr(r,u,0,b,k,x,C,T,U,s-U,v),T=A=C=0,U=s;for(var z=0;z<286;++z)k[z]=0;for(z=0;z<30;++z)x[z]=0}var J=2,G=0,H=w,K=S-I&32767;if(j>2&&D==M(s-K))for(var L=Math.min(h,j)-1,Q=Math.min(32767,s),V=Math.min(258,j);K<=Q&&--H&&S!=I;){if(r[s+J]==r[s+J-K]){for(var W=0;W<V&&r[s+W]==r[s+W-K];++W);if(W>J){if(J=W,G=K,W>L)break;var X=Math.min(K,W-2),Y=0;for(z=0;z<X;++z){var Z=s-K+z+32768&32767,$=Z-d[Z]+32768&32767;$>Y&&(Y=$,I=Z)}}}K+=(S=I)-(I=d[S])+32768&32767}if(G){b[T++]=268435456|P[J]<<18|R[G];var _=31&P[J],er=31&R[G];C+=B[_]+F[er],++k[257+_],++x[er],E=s+J,++A}else b[T++]=r[s],++k[r[s]]}}v=vr(r,u,o,b,k,x,C,T,U,s-U,v)}return nr(i,0,t+rr(v)+f)}(r,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(r.length)))):12+n.mem,e,t,!0)};function cr(r,n){void 0===n&&(n={});var e=function(){var r=1,n=0;return{p:function(e){for(var t=r,f=n,o=e.length,a=0;a!=o;){for(var i=Math.min(a+5552,o);a<i;++a)f+=t+=e[a];t%=65521,f%=65521}r=t,n=f},d:function(){return(r>>>8<<16|(255&n)<<8|n>>>8)+2*((255&r)<<23)}}}();e.p(r);var t,f,o,a=lr(r,n,2,4);return t=a,f=n.level,o=0==f?0:f<6?1:9==f?3:2,t[0]=120,t[1]=o<<6|(o?32-2*o:1),function(r,n,e){for(;e;++n)r[n]=e,e>>>=8}(a,a.length-4,e.d()),a}var hr=r=>{const n={...r,v:"v1"};return function(r){for(var n="",e=0;e<r.length;){var t=r[e++];n+=String.fromCharCode(t)}return n}(cr(function(r,n){var e=r.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(r);for(var t=new N(r.length+(r.length>>>1)),f=0,o=function(r){t[f++]=r},a=0;a<e;++a){if(f+5>t.length){var i=new N(f+8+(e-a<<1));i.set(t),t=i}var u=r.charCodeAt(a);u<128||n?o(u):u<2048?(o(192|u>>>6),o(128|63&u)):u>55295&&u<57344?(o(240|(u=65536+(1047552&u)|1023&r.charCodeAt(++a))>>>18),o(128|u>>>12&63),o(128|u>>>6&63),o(128|63&u)):(o(224|u>>>12),o(128|u>>>6&63),o(128|63&u))}return nr(t,0,f)}(JSON.stringify(n))))},wr=self;wr.onmessage=n=>{const e=n.data;if(!e||"number"!=typeof e.id||"pack-replay"!==e.op&&"encode-batch"!==e.op)return void(e&&"number"==typeof e.id&&wr.postMessage({id:e.id,ok:!1,error:"malformed message"}));const{id:t,op:f,payload:o}=e;try{if("pack-replay"===f){const r=o.events.map((r=>hr(r)));return void wr.postMessage({id:t,ok:!0,result:{packed:r}})}if("encode-batch"===f){const{json:n,compress:e}=o;if(!e){const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}try{const e=j(function(n,e){if(z)return z.encode(n);for(var t=n.length,f=new r(n.length+(n.length>>1)),o=0,a=function(r){f[o++]=r},i=0;i<t;++i){if(o+5>f.length){var u=new r(o+8+(t-i<<1));u.set(f),f=u}var v=n.charCodeAt(i);v<128||e?a(v):v<2048?(a(192|v>>6),a(128|63&v)):v>55295&&v<57344?(a(240|(v=65536+(1047552&v)|1023&n.charCodeAt(++i))>>18),a(128|v>>12&63),a(128|v>>6&63),a(128|63&v)):(a(224|v>>12),a(128|v>>6&63),a(128|63&v))}return p(f,0,o)}(n));return void wr.postMessage({id:t,ok:!0,result:{bytes:e,isCompressed:!0}},[e.buffer])}catch{const r=(new TextEncoder).encode(n);return void wr.postMessage({id:t,ok:!0,result:{bytes:r,isCompressed:!1}},[r.buffer])}}wr.postMessage({id:t,ok:!1,error:"unknown op"})}catch(r){wr.postMessage({id:t,ok:!1,error:r instanceof Error?r.message:String(r)})}}}();'],{type:"application/javascript"}),t=URL.createObjectURL(e);try{this.worker=new Worker(t),Promise.resolve().then((()=>URL.revokeObjectURL(t))),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.handleFatalFailure("worker onerror",e.message),this.worker.onmessageerror=()=>this.logger.log("[worker-client] worker onmessageerror — single message dropped, worker still alive"),this.isAvailable=!0,this.logger.log("[worker-client] worker spawned")}catch(e){URL.revokeObjectURL(t),this.logger.log("[worker-client] failed to spawn worker, falling back to main thread:",e),this.worker=null,this.isAvailable=!1}}static getInstance(){return e.instance||(e.instance=new e),e.instance}static __resetForTests(){e.instance&&e.instance.terminate(),e.instance=null}static async withFallback(t,n,i){const r=e.getInstance();if(!r.isAvailable)return n();try{return await t(r)}catch(e){return d.getInstance().log(`[${i}] worker call failed, using inline fallback:`,e),n()}}packReplay(e){return this.dispatch("pack-replay",{events:e}).then((e=>e.packed))}encodeBatch(e,t){return this.dispatch("encode-batch",{json:e,compress:t}).then((e=>({data:e.bytes,isCompressed:e.isCompressed})))}terminate(){if(this.worker){try{this.worker.terminate()}catch(e){this.logger.log("[worker-client] failed to terminate worker:",e)}this.worker=null}this.isAvailable=!1,this.rejectAllPending(new Error("worker terminated")),e.instance===this&&(e.instance=null)}dispatch(e,t){if(!this.worker||!this.isAvailable)return Promise.reject(new Error("worker not available"));const n=this.nextId++,i=this.worker;return new Promise(((r,s)=>{const a=setTimeout((()=>{this.pending.has(n)&&(this.pending.delete(n),this.consecutiveTimeouts+=1,this.consecutiveTimeouts>=3&&this.handleFatalFailure("worker latched after 3 consecutive timeouts"),s(new Error("worker request timed out")))}),1500);this.pending.set(n,{resolve: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),this.consecutiveTimeouts=0,e.ok?t.resolve(e.result):t.reject(new Error(e.error)))}handleFatalFailure(e,t){if(this.logger.log(`[worker-client] ${e}${t?": "+t:""}`),this.isAvailable=!1,this.rejectAllPending(new Error(e)),this.worker){try{this.worker.terminate()}catch{}this.worker=null}}rejectAllPending(e){for(const t of this.pending.values())clearTimeout(t.timeoutId),t.reject(e);this.pending.clear()}};te.instance=null;var ne=te,ie=class{constructor(){this.logger=d.getInstance(),this.config=x.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}}}compressAsync(e,t){return ne.withFallback((n=>n.encodeBatch(e,t)),(()=>this.compressInline(e,t)),"transporter")}async send(e,{lifecycle:t=!1}={}){const n=this.config.getConfig();if(n)try{n?.options?.debug&&this.logger.log("Sending batch:",e,{groundcoverIgnore:!0});const i=n.apiKey,r=this.buildEndpoint();if(!i)return void this.logger.log("No API key found");const s=JSON.stringify(e),a=!!n?.options?.enableCompression,{data:o,isCompressed:l}=t?this.compressInline(s,a):await this.compressAsync(s,a);fetch(r,{method:"POST",headers:{"Content-Type":"application/json",apikey:i,"Content-Encoding":l?"gzip":""},body:o}).catch((e=>{this.logger.log("Network error while sending batch:",e,{groundcoverIgnore:!0})}))}catch(e){n.options.debug&&this.logger.log("Failed to send batch:",e,{groundcoverIgnore:!0})}}buildEndpoint(){const e=this.config.getConfig();if(!e)return"";const{dsn:t}=e;return`${t}/json/rum`}},re=["navigation","dom.event"],se=class e{constructor(){this.events=[],this.timeoutId=null,this.config=x.getInstance(),this.logger=d.getInstance(),this.initialized=!1,this.noClusterWarned=!1,this.onBeforeEnqueue=null,this.visibilityHandler=()=>{"hidden"===document.visibilityState&&this.flush({lifecycle:!0})},this.transporter=new ie}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&&!re.includes(e.type)&&this.flush()}catch(e){u(e)}}flush({lifecycle:e=!1}={}){try{if(!this.initialized)return;if(!this.events?.length)return void this.scheduleFlush();if(!this.config.getConfig()?.cluster)return this.noClusterWarned||(this.noClusterWarned=!0,this.logger.log("[events-pool.flush] skipping flush: no cluster")),void this.scheduleFlush();this.noClusterWarned=!1;const t={sessionAttributes:this.getSessionAttributes(),events:this.events};e?this.transporter.send(t,{lifecycle:!0}):this.transporter.send(t),this.events=[],this.scheduleFlush()}catch(e){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}}};se.instance=null;var ae=se,oe=class{constructor(){this.logger=d.getInstance(),this.eventsPool=ae.getInstance()}},le="undefined"!=typeof Element?Object.getOwnPropertyDescriptor(Element.prototype,"tagName")?.get:void 0;function ce(e,t){try{return e.getAttribute(t)||""}catch{return""}}function he(e){try{const t=le?.call(e);return"string"==typeof t?t:""}catch{return""}}var de=class extends oe{constructor(){super(...arguments),this.eventHandlers=[],this.capturedEvents=["click","change","keydown","select","submit"],this.config=x.getInstance(),this.isSensitiveElement=(e,t,n)=>{if(!e)return!1;if("password"===e.type)return!0;if(ce(e,"data-private"))return!0;const i=["id","name","class","aria-label","placeholder"].map((t=>ce(e,t))).filter(Boolean);if(i.some((e=>D(e,t))))return!0;if(n.length){const e=i.map((e=>e.toLowerCase()));if(n.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 n=e.target;if(!n)return!1;try{if(t.maskSelectors.length&&t.maskSelectors.some((e=>{try{return n.matches?.(e)}catch{return!1}})))return!0}catch{}if(this.isSensitiveElement(n,t.sensitiveKeys,t.maskFieldsLegacy))return!0;if("mask-all"===t.level)return!0;const i=he(n).toLowerCase();return"input"===i||"textarea"===i||"select"===i},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})?"*":ee({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(!J())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 Z({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:ce(i,"id"),tagName:he(i),className:ce(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"===he(e).toLowerCase())return"html";let s="",a=0,o=e;const l=[];for(;o&&o!==n&&o!==document.documentElement&&a<i;){let e=he(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=he(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||"*"}},ge=["log","info","warn","error","debug","assert","trace"],ue=class extends oe{constructor(){super(...arguments),this.originalConsole=null,this.isInitialized=!1,this.config=x.getInstance()}initialize(){if(!this.isInitialized)try{this.originalConsole=this.captureConsoleMethods(),ge.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;ge.forEach((e=>{this.originalConsole&&this.originalConsole[e]&&(console[e]=this.originalConsole[e])})),this.isInitialized=!1}catch(e){u(e)}}handleEvent(e,t){try{if(!J())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}){const i=this.config.getPrivacy(),r={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"log"},s=i.shouldMaskLogs?$(e,r):e;return Z({type:"log",attributes:{...i.shouldMaskLogs&&n?Q(n,r):n,message:ee({text:s}),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{ge.forEach((t=>{console&&"function"==typeof console[t]&&(e[t]=console[t].bind(console))}))}catch(e){u(e)}return e}};function fe(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 pe,ve=class extends oe{constructor(){super(...arguments),this.maxBodyLength=5e3,this.config=x.getInstance(),this.idGenerator=new y,this.handleEvent=e=>{try{if(this.shouldIgnoreRequest(e.url))return;if(!J())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});const i=this.config.getPrivacy(),r={sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:"query"};try{t=new URL(e.url).pathname}catch(s){n=new URL(e.url,globalThis.location.href).href,i.shouldMaskNetworkQueryParams&&(t=B(t,r))}i.shouldMaskNetworkQueryParams&&(n=B(n,r)),this.logger.log("[network-events-listener.buildEvent] fullUrl",{fullUrl:n});const s=this.formatHeaders(e.request.headers),a=this.formatHeaders(e.response.headers),o=e.method?.toUpperCase()||"UNKNOWN",{traceId:l,spanId:c}=this.extractTraceIds(e.request.headers),h=(e,t)=>i.shouldMaskNetworkBodies?function(e,t={}){if(!e)return e;const n=e.trim();if(n.length<=1e5&&(n.startsWith("{")||n.startsWith("[")))try{const e=JSON.parse(n);return JSON.stringify(Y("",e,[],t,0))}catch{}return e.includes("=")&&!e.includes("{")?U(e,t):$(e,t)}(e,{sensitiveKeys:i.sensitiveKeys,redact:i.redact,kind:t}):e,d=ee({text:h(e.request.body,"request-body"),maxLength:this.maxBodyLength}),g=ee({text:h(e.response.body,"response-body"),maxLength:this.maxBodyLength}),u={type:"HTTP",operation:{name:o},resource_name:t,status:e.status?.toString(),subType:o,url:{full:n},http:{route:t,path:t,method:e.method,status:e.status?.toString(),request:{headers:s,method:e.method},response:{headers:a,status_code:e.status?.toString()}},error:e?.error?.type?{type:e.error?.type||"Unknown error"}:void 0,gc:{request:{body:d},response:{body:g}}},f={type:"network",timestamp:e?.timestamp&&!Number.isNaN(e.timestamp)?v(e.timestamp):void 0,end_timestamp:e?.end_time&&!Number.isNaN(e.end_time)?v(e.end_time):void 0,span_name:`${e.method} ${t}`,attributes:u};return l&&(f.traceId=l),c&&(f.spanId=c),Z(f)}}async getResponseBody(e){const t=e.body;if(!t)return"";const n=t.getReader(),i=new TextDecoder;let r="",s=0;for(;;){const{done:e,value:t}=await n.read();if(e)break;if(s+t.byteLength>=this.maxBodyLength){const e=t.subarray(0,this.maxBodyLength-s);r+=i.decode(e,{stream:!0}),n.cancel().catch((()=>{}));break}s+=t.byteLength,r+=i.decode(t,{stream:!0})}return r+=i.decode(),r}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=fe(this._requestBody),s=fe(""===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=fe(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=this.config.getPrivacy(),n="allow"===t.level,i=function(e,t={}){return e?Object.entries(e).reduce(((e,[n,i])=>{const r=n.toLowerCase(),s=K({key:n,value:i,path:[n],kind:"header",sensitive:C.includes(r)||H.test(r)||D(n,t.sensitiveKeys)},t.redact);return e[n]=null===s?"":String(s),e}),{}):e}(e,{sensitiveKeys:n?void 0:t.sensitiveKeys,redact:n?void 0:t.redact});return Object.entries(i)?.reduce(((e,[t,n])=>(e[t]=ee({text:n}),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}},me=class extends oe{constructor(){super(...arguments),this.config=x.getInstance(),this.handleEvent=(e,t)=>{this.logger.log("[errors-events-listener.handleEvent] called");try{let n;if(e instanceof Error)n=e,this.enhanceError(n);else if(e instanceof ErrorEvent){if(n=e.error||new Error(e.message||"Unknown error"),/Script error\.?/.test(n.message))return;this.enhanceError(n,e)}else{if(!(e instanceof PromiseRejectionEvent))return;n=this.createUnhandledRejectionError(e)}const 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){const n=this.config.getPrivacy(),i=n.shouldMaskErrors,r={sensitiveKeys:n.sensitiveKeys,redact:n.redact,kind:"error"},s=e.message||"Unknown error",a=i?$(s,r):s,o=i&&t?.metadata?Q(t.metadata,r):t?.metadata;return Z({type:"exception",attributes:{error_type:e.name||"Error",error_message:a,error_stacktrace:this.buildStackTrace(e,i,n.sensitiveKeys),error_fingerprint:`${e.name}:${ee({text:a,maxLength:400})}`,error_handled:t?.handled||!1,error_metadata:o}})}queueEvent(e){try{this.logger.log("[errors-events-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){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,t=!1,i=[]){if(!e)return[];try{return n.parse(e).map((e=>{const n=e.fileName||"unknown";return{filename:t?B(n,{sensitiveKeys:i,kind:"query"}):n,function:e.functionName||"anonymous",lineno:e.lineNumber||0,colno:e.columnNumber||0}}))}catch(e){return[]}}},ye=class extends oe{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);const e=x.getInstance().getPrivacy(),t="allow"===e.level,n=f.location.href,i=this.activeNavigation?.metadata;return Z({type:"navigation",attributes:{page_url:e.shouldMaskNetworkQueryParams?B(n,{sensitiveKeys:e.sensitiveKeys,redact:e.redact,kind:"query"}):n,metadata:!t&&i?Q(i,{sensitiveKeys:e.sensitiveKeys}):i,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)}}},be=class extends oe{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}));const r=x.getInstance().getPrivacy(),s=r.shouldMaskNetworkQueryParams,a={sensitiveKeys:r.sensitiveKeys,redact:r.redact,kind:"query"},o=f?.location?.href||"",l=f?.document?.referrer||"";return Z({type:"pageload",attributes:{page_url:s?B(o,a):o,page_load_time:t,page_referrer:s?B(l,a):l,page_resources:i}})}queueEvent(e){try{this.logger.log("[page-load-listener.queueEvent] called"),e&&this.eventsPool.addEvent(e)}catch(e){u(e)}}},we=class extends oe{constructor(){super(...arguments),this.handleEvent=e=>{try{if(!J())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 Z({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)}}},ke=class{constructor(){this.logger=d.getInstance(),this.eventsPool=ae.getInstance(),this.configManager=x.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,n=this.configManager.getPrivacy();this.stopFn=l({...t?{blockSelector:t}:{},...n.maskTextSelector?{maskTextSelector:n.maskTextSelector}:{},maskAllInputs:n.maskInputs,...n.maskTextFn?{maskTextFn:n.maskTextFn}:{},...n.maskInputFn?{maskInputFn:n.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=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(),n=ne.getInstance();let i;if(n.isAvailable)try{i=await n.packReplay(e.events)}catch(t){u(t),this.logger.log("[session-replay-listener] worker pack failed, using inline fallback:",t),i=e.events.map((e=>c(e)))}else i=e.events.map((e=>c(e)));this.configManager.getSessionId()===t?this.enqueueReplayEvent(i,e.containsFullSnapshot,e.snapshotTimestamp):this.logger.log("[session-replay-listener] dropping packed batch: session rotated during pack",{drained:i.length})}sendBatchSync(){if(0===this.events.length)return;const e=this.drainBatch(),t=e.events.map((e=>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=Z({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()}},Ee=["pointerdown","keydown","scroll","touchstart","mousemove"],Se=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,Ee.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",I,"ms");try{this.callbacks.onIdle()}catch(e){u(e)}}),I)}catch(e){u(e)}}destroy(){if(this.installed){this.installed=!1,Ee.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}}}},Ie=new Set(["dom.event","navigation","pageload","custom"]),Te=class{constructor(){this.logger=d.getInstance(),this.eventsPool=ae.getInstance(),this.configManager=x.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 Se({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 be,this.pageLoadListener.initialize(),i.push("pageload")),(n||t?.includes("dom"))&&(this.domEventsListener=new de,this.domEventsListener.initialize(),i.push("dom")),(n||t?.includes("logs"))&&(this.logEventsListener=new ue,this.logEventsListener.initialize(),i.push("logs")),(n||t?.includes("exceptions"))&&(this.errorsEventsListener=new me,this.errorsEventsListener.initialize(),i.push("exceptions")),(n||t?.includes("network"))&&(this.networkEventsListener=new ve,this.networkEventsListener.initialize(),i.push("network")),(n||t?.includes("performance"))&&(this.performanceListener=new we,this.performanceListener.initialize(),i.push("performance")),this.navigationListener=new ye({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=Z({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=Z({type:"log",attributes:{...i,message:ee({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}restartReplayForConfigChange(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] restarting replay to apply config change"),this.stopReplayListener(),this.startReplayListener())}startReplayRecording(){if(this.replayDesired=!0,this.isReplayRecording())return void this.logger.log("[instrumentation-manager] replay recording already started");const e=Date.now();(this.configManager.isSessionInactive(e)||this.configManager.isSessionExpired(e))&&this.rotateSession({reason:"replay start into stale session"}),this.startReplayListener(),this.presenceMonitor?.resetIdleTimer()}stopReplayRecording(){this.replayDesired=!1,this.stopReplayListener()}flushPendingReplay(){this.sessionReplayListener?.flushPendingSync()}syncReplayState(e){this.replayDesired&&e&&!this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] user present and replay desired — starting replay"),this.startReplayListener())}pauseReplayOnIdle(){this.isReplayRecording()&&(this.logger.log("[instrumentation-manager] pausing replay: user idle window elapsed"),this.stopReplayListener())}startReplayListener(){if(this.sessionReplayListener)this.logger.log("[instrumentation-manager] replay recording already started");else try{const e=new ke;e.initialize(),this.sessionReplayListener=e,this.logger.log("[instrumentation-manager] started replay recording")}catch(e){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(),Ie.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(v(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}},Re="gcSample",Me=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 Te,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=x.getInstance();t.initialize(e);ae.getInstance().initialize(),ne.getInstance();const n=e.sessionId,i=t.getSessionId();n&&n!==i?(t.setSessionId(n),t.setSessionStartTime(v(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=m(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(v(r)),this.logger.log(`[session-manager] init-time rotation: ${e}`,{from:n,to:i})}}else t.setSessionStartTime(v(r));this.instrumentationManager.instrument(),this.initialized=!0}getSamplingDecision(e){try{if(!e||1===e)return!0;const t=L(Re);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 N(Re,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");x.getInstance().updateConfig({userIdentifier:e})}updateConfig(e){if(!this.initialized)return void this.logger.log("[session-manager] cannot update config: SDK not initialized");x.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,n){this.initialized?this.instrumentationManager.emitLog(e,t,n):this.logger.log("[session-manager] Cannot emit log: SDK not initialized")}getSessionId(){return this.initialized?x.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=ae.getInstance();await t.flushSync();const n=e||this.idGenerator.generateId(),i=x.getInstance();i.setSessionId(n),i.setSessionStartTime(v(Date.now())),this.logger.log("[session-manager] session ID set successfully:",n)}catch(e){this.logger.log("[session-manager] failed to set session ID:",e)}else this.logger.log("[session-manager] cannot set session ID: SDK not initialized")}startReplayRecording(){this.initialized?this.instrumentationManager.startReplayRecording():this.logger.log("[session-manager] cannot start replay recording: SDK not initialized")}stopReplayRecording(){this.initialized?this.instrumentationManager.stopReplayRecording():this.logger.log("[session-manager] cannot stop replay recording: SDK not initialized")}destroy(){this.initialized&&(this.instrumentationManager.uninstrument(),ae.getInstance().destroy(),ne.getInstance().terminate(),x.getInstance().clearSessionState(),this.initialized=!1)}},Le=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 Ne={init:function(e){try{pe=new Me({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}),Le.manager=pe}catch(e){u(e)}},identifyUser:function(e){pe?pe.identifyUser(e):console.warn("[groundcover] identifyUser: groundcover is not initialized. please call init() first")},sendCustomEvent:function(e){pe&&pe.sendCustomEvent(e)},captureException:function(e,t){pe&&pe.captureException(e,t)},logger:Le,updateConfig:function(e){pe&&pe.updateConfig(e)},startNavigation:function(e){pe?pe.startNavigation(e):console.warn("[groundcover] startNavigation: groundcover is not initialized. please call init() first")},endNavigation:function(e){pe?pe.endNavigation(e):console.warn("[groundcover] endNavigation: groundcover is not initialized. please call init() first")},getSessionId:function(){return pe?pe.getSessionId():(console.warn("[groundcover] getSessionId: groundcover is not initialized. please call init() first"),"")},setSessionId:async function(e){if(pe)try{await pe.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(){pe?pe.startReplayRecording():console.warn("[groundcover] startReplayRecording: groundcover is not initialized. please call init() first")},stopReplayRecording:function(){pe?pe.stopReplayRecording():console.warn("[groundcover] stopReplayRecording: groundcover is not initialized. please call init() first")}};if("undefined"!=typeof window&&!window.groundcover)try{window.groundcover=Ne}catch(e){console.warn("[groundcover] Failed to expose groundcover on window:",e)}var Ae=Ne;export{Ae as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groundcover/browser",
3
- "version": "0.0.79-rc.1",
3
+ "version": "0.1.0-rc.1",
4
4
  "description": "groundcover browser SDK",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -19,8 +19,9 @@
19
19
  "LICENSE"
20
20
  ],
21
21
  "scripts": {
22
- "build:watch": "tsc --noEmit && WATCH=true tsup --watch",
23
- "build": "tsc --noEmit && tsup",
22
+ "build:worker": "tsup --config tsup.worker.config.ts && node scripts/inline-worker.mjs",
23
+ "build:watch": "npm run build:worker && tsc --noEmit && node scripts/watch.mjs",
24
+ "build": "npm run build:worker && tsc --noEmit && tsup",
24
25
  "size": "npm run build && size-limit",
25
26
  "lint": "eslint .",
26
27
  "test": "vitest && npm run lint && npm run size",
@@ -59,11 +60,11 @@
59
60
  "size-limit": [
60
61
  {
61
62
  "path": "dist/index.js",
62
- "limit": "84 kB"
63
+ "limit": "100 kB"
63
64
  },
64
65
  {
65
66
  "path": "dist/index.mjs",
66
- "limit": "83 kB"
67
+ "limit": "100 kB"
67
68
  }
68
69
  ]
69
70
  }