iris-recorder 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var pe=Object.defineProperty;var ye=(e,r,s)=>r in e?pe(e,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[r]=s;var O=(e,r,s)=>ye(e,typeof r!="symbol"?r+"":r,s);function P(e){let s=Y(e,1,{keys:32});return s&&Object.keys(s).length>0?s:void 0}function Y(e,r,s){if(typeof e!="object"||e===null||Array.isArray(e))return;let o={};for(let[a,d]of Object.entries(e)){if(s.keys<=0)break;let f=a.slice(0,64);if(f){if(typeof d=="string")o[f]=d.slice(0,300),s.keys-=1;else if(typeof d=="number"||typeof d=="boolean")o[f]=String(d),s.keys-=1;else if(typeof d=="object"&&d!==null&&!Array.isArray(d)&&r<3){s.keys-=1;let g=Y(d,r+1,s);g&&Object.keys(g).length>0?o[f]=g:s.keys+=1}}}return o}function F(e){for(let r of["id","userId","email","username","name"]){let s=e[r];if(typeof s=="string"&&s)return s}for(let r of Object.values(e))if(typeof r=="string"&&r)return r}var X="iris.sid",me=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function K(e){return typeof e=="string"&&me.test(e)}function G(){try{let e=sessionStorage.getItem(X);return K(e)?e:void 0}catch(e){return}}function he(e){try{if(K(e))return sessionStorage.setItem(X,e),e;let r=G();if(r)return r;let s=crypto.randomUUID();return sessionStorage.setItem(X,s),s}catch(r){return K(e)?e:crypto.randomUUID()}}function Q(e,r,s){let o=P(typeof r=="string"?{id:r}:r);return{sessionId:he(s),user:o,userId:o?F(o):void 0,release:e,startedAt:Date.now(),url:location.href,userAgent:navigator.userAgent}}import{gzipSync as ge,strToU8 as ke}from"fflate";var N=class{constructor(r){O(this,"opts",r);O(this,"queue",[]);O(this,"bytes",0);O(this,"timer");O(this,"flushBytes");O(this,"maxBytes",4e6);var s,o;this.flushBytes=(s=r.flushBytes)!=null?s:64e3,this.timer=setInterval(()=>this.flush(!1),(o=r.flushMs)!=null?o:5e3),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.flush(!0)}),addEventListener("pagehide",()=>this.flush(!0))}push(r){this.queue.push(r),this.bytes+=Z(r),this.bytes>=this.flushBytes&&this.flush(!1)}flush(r){if(this.queue.length===0)return;let s=this.queue;this.queue=[],this.bytes=0;let o={meta:this.opts.meta,events:s},a=ge(ke(JSON.stringify(o))),d=`${this.opts.endpoint}/v1/ingest`;if(this.log(`flush via ${r?"beacon":"fetch"}: ${s.length} events, ${a.length}b gz \u2192 ${d}`),r&&"sendBeacon"in navigator){let f=!1;try{f=navigator.sendBeacon(d,new Blob([a],{type:"application/octet-stream"}))}catch(g){f=!1}f||(this.log("beacon refused \u2014 re-queueing"),this.requeue(s));return}fetch(d,{method:"POST",body:a,keepalive:r,headers:{"content-encoding":"gzip","content-type":"application/octet-stream","x-iris-key":this.opts.projectKey}}).then(f=>{this.log(`ingest responded ${f.status}`),f.ok||this.requeue(s)}).catch(f=>{this.log("ingest request failed",f),this.requeue(s)})}identify(r){var o;let s=P(typeof r=="string"?{id:r}:r);s&&(this.opts.meta.user=s,this.opts.meta.userId=F(s),this.log(`identified as ${(o=this.opts.meta.userId)!=null?o:"(unnamed user)"}`))}log(...r){this.opts.debug&&console.debug("[iris]",...r)}requeue(r){let s=r.concat(this.queue),o=0;for(let a of s)o+=Z(a);o>this.maxBytes||(this.queue=s,this.bytes=o)}stop(){this.timer&&clearInterval(this.timer),this.flush(!0)}};function Z(e){return JSON.stringify(e).length}var be=["authorization","cookie","set-cookie","proxy-authorization","x-api-key","x-auth-token","x-csrf-token","x-xsrf-token"],ve=/pass(word|wd)?|secret|token|api[-_]?key|auth|credential|session|cvv|card[-_]?(number|num)?|ssn|pin/i;var we="[redacted]",H="[masked]";function U(e={}){var R,b,L,A;let r=new Set([...be,...((R=e.redactHeaders)!=null?R:[]).map(l=>l.toLowerCase())]),s=(b=e.maskKeys)!=null?b:ve,o=new Set(((L=e.maskExtraKeys)!=null?L:[]).map(l=>l.toLowerCase())),a=l=>s.test(l)||o.has(l.toLowerCase()),d=(A=e.maxBodyChars)!=null?A:1e4,f=()=>typeof location!="undefined"?location.href:void 0,g=l=>{try{let h=new URL(l,f()),k=!1;for(let x of[...h.searchParams.keys()])a(x)&&(h.searchParams.set(x,H),k=!0);return k?h.toString():l}catch(h){return l}},w=l=>{let h={};for(let k of Object.keys(l))h[k]=r.has(k.toLowerCase())?we:l[k];return h},S=l=>{if(Array.isArray(l))return l.map(S);if(l&&typeof l=="object"){let h={};for(let[k,x]of Object.entries(l))h[k]=a(k)?H:S(x);return h}return l},I=(l,h=d)=>l.length>h?`${l.slice(0,h)}\u2026[+${l.length-h} chars]`:l;return{maskUrl:g,maskHeaders:w,maskBody:(l,h=d)=>{if(l==null||l==="")return;let k=String(l),x;try{x=JSON.stringify(S(JSON.parse(k)))}catch(_){if(/^[^={}\s]+=[^&]*(?:&[^=]+=[^&]*)*$/.test(k))try{let i=new URLSearchParams(k);for(let t of[...i.keys()])a(t)&&i.set(t,H);x=i.toString()}catch(i){x=k}else x=k}return I(x,h)},maskObject:l=>S(l),truncate:I,isMaskedKey:a,maxBodyChars:d}}var Ee=500,Se=8e3,xe=120;function ee(e,r={},s={}){var w,S;let o=U(r),a=(w=s.maxEvents)!=null?w:Ee,d=(S=s.maxPropsChars)!=null?S:Se,f=0,g=!1;return(I,E)=>{try{let q=typeof I=="string"?I.trim().slice(0,xe):"";if(!q)return;if(f>=a){g||(g=!0,console.warn(`[iris] track() budget exhausted (${a} events) \u2014 further events are dropped`));return}f++;let R={type:"custom",ts:Date.now(),name:q};if(E!=null&&typeof E=="object"){let b=null,L=1/0;try{b=o.maskObject(E),L=JSON.stringify(b).length}catch(A){b=null}R.props=b!=null&&L<=d?b:{"[iris]":`props dropped (${Number.isFinite(L)?`${L} chars > ${d}`:"not serializable"})`}}e(R)}catch(q){}}}import{record as Ie}from"rrweb";function te(e,r={}){var o;let s=Ie({emit(a){e({type:"replay",ts:Date.now(),data:a})},maskAllInputs:(o=r.maskAllInputs)!=null?o:!0,maskTextSelector:r.maskTextSelector,blockSelector:r.blockSelector,sampling:{mousemove:50,scroll:150,input:"last"},checkoutEveryNms:3e4});return()=>s==null?void 0:s()}function re(e){let r=o=>{var a,d,f,g;e({type:"error",ts:Date.now(),source:"error",name:(d=(a=o.error)==null?void 0:a.name)!=null?d:"Error",message:(f=o.message)!=null?f:String(o.error),stack:(g=o.error)==null?void 0:g.stack})},s=o=>{var d,f;let a=o.reason;e({type:"error",ts:Date.now(),source:"unhandledrejection",name:(d=a==null?void 0:a.name)!=null?d:"UnhandledRejection",message:(f=a==null?void 0:a.message)!=null?f:String(a),stack:a==null?void 0:a.stack})};return addEventListener("error",r),addEventListener("unhandledrejection",s),()=>{removeEventListener("error",r),removeEventListener("unhandledrejection",s)}}var ne=512e3;function se(e,r={}){var _;let s=(_=r.ignoreUrls)!=null?_:[],o=r.captureBodies!==!1,{maskUrl:a,maskHeaders:d,maskBody:f,truncate:g,isMaskedKey:w}=U(r),S=i=>typeof i=="string"&&s.some(t=>typeof t=="string"?i.includes(t):t.test(i)),I=i=>{let t={};if(!i)return t;if(typeof Headers!="undefined"&&i instanceof Headers)i.forEach((n,c)=>t[c]=n);else if(Array.isArray(i))for(let n of i)n&&n.length>=2&&(t[String(n[0])]=String(n[1]));else if(typeof i=="object")for(let[n,c]of Object.entries(i))t[n]=String(c);return t},E=i=>!!i&&/(json|text|xml|javascript|x-www-form-urlencoded|html)/i.test(i),q=i=>!!i&&/event-stream/i.test(i),R=i=>{let t={};if(!i)return t;for(let n of i.trim().split(/[\r\n]+/)){let c=n.indexOf(":");c>0&&(t[n.slice(0,c).trim()]=n.slice(c+1).trim())}return t},b=i=>{let t=[];return i.forEach((n,c)=>{typeof n=="string"?t.push(`${c}=${w(c)?H:n}`):t.push(`${c}=[file ${n.name||"blob"} ${n.size}B]`)}),t.join("&")},L=(i,t)=>{var c;let n=t==null?void 0:t.body;if(typeof n=="string")return{text:n,size:n.length};if(typeof URLSearchParams!="undefined"&&n instanceof URLSearchParams){let u=n.toString();return{text:u,size:u.length}}if(typeof FormData!="undefined"&&n instanceof FormData){let u=b(n);return{text:u,size:u.length,premasked:!0}}if(typeof Blob!="undefined"&&n instanceof Blob)return{size:n.size};if(typeof ArrayBuffer!="undefined"){if(n instanceof ArrayBuffer)return{size:n.byteLength};if(ArrayBuffer.isView(n))return{size:n.byteLength}}if(n==null&&typeof Request!="undefined"&&i instanceof Request){let u=i.method.toUpperCase();if(u!=="GET"&&u!=="HEAD"&&!i.bodyUsed){let y=(c=i.headers.get("content-type"))!=null?c:void 0;try{if(y&&/multipart\/form-data/i.test(y))return{textPromise:i.clone().formData().then(b).catch(()=>{}),premasked:!0};if(E(y))return{textPromise:i.clone().text().catch(()=>{})}}catch(m){}}}return{}},A=async i=>{let t=i.body;if(!t||typeof t.getReader!="function"){let m=await i.text();return{text:m,bytes:m.length,complete:!0}}let n=t.getReader(),c=new TextDecoder,u="",y=0;for(;;){let{done:m,value:p}=await n.read();if(m)return{text:u+c.decode(),bytes:y,complete:!0};if(y+=p.byteLength,u+=c.decode(p,{stream:!0}),y>=ne)return n.cancel().catch(()=>{}),{text:u,bytes:y,complete:!1}}},l=window.fetch;window.fetch=async function(...i){var m,p,v,M,C;let t=Date.now(),n=i[0],c=typeof n=="string"?n:n instanceof URL?n.href:n instanceof Request?n.url:String(n),u=((p=(m=i[1])==null?void 0:m.method)!=null?p:n instanceof Request?n.method:"GET").toUpperCase(),y={};if(o&&!S(c))try{y=L(n,i[1])}catch(T){y={}}try{let T=await l.apply(this,i);try{if(!S(c)){let B={type:"network",ts:t,method:u,url:a(c),status:T.status,durationMs:Date.now()-t,initiator:"fetch"};if(!o)e(B);else{let le=(M=(v=i[1])==null?void 0:v.headers)!=null?M:n instanceof Request?n.headers:void 0;B.reqHeaders=d(I(le)),B.resHeaders=d(I(T.headers));let j=(C=T.headers.get("content-type"))!=null?C:void 0;j&&(B.contentType=j);let D=Number(T.headers.get("content-length"));Number.isFinite(D)&&(B.resSize=D);let $=null;E(j)&&!q(j)&&!(Number.isFinite(D)&&D>ne)&&($=A(T.clone())),(async()=>{var V,J;try{let z=(V=y.text)!=null?V:y.textPromise?await y.textPromise:void 0;if(z?(B.reqBody=y.premasked?g(z):f(z),B.reqSize=(J=y.size)!=null?J:z.length):y.size!=null&&(B.reqSize=y.size),$){let W=await $;W.text&&(B.resBody=f(W.text)),Number.isFinite(D)||(B.resSize=W.bytes)}}catch(z){}e(B)})()}}}catch(B){}return T}catch(T){try{S(c)||e({type:"network",ts:t,method:u,url:a(c),status:0,durationMs:Date.now()-t,initiator:"fetch"})}catch(B){}throw T}};let h=XMLHttpRequest.prototype.open,k=XMLHttpRequest.prototype.send,x=XMLHttpRequest.prototype.setRequestHeader;return XMLHttpRequest.prototype.open=function(i,t,...n){return this.__iris={method:String(i).toUpperCase(),url:String(t),start:0,reqHeaders:{},reqBody:void 0,reqSize:void 0,premasked:!1},h.apply(this,[i,t,...n])},XMLHttpRequest.prototype.setRequestHeader=function(i,t){let n=this.__iris;return n&&(n.reqHeaders[i]=t),x.apply(this,[i,t])},XMLHttpRequest.prototype.send=function(...i){let t=this.__iris;if(t){t.start=Date.now();let n=i[0];typeof n=="string"?(t.reqBody=n,t.reqSize=n.length):typeof URLSearchParams!="undefined"&&n instanceof URLSearchParams?(t.reqBody=n.toString(),t.reqSize=t.reqBody.length):typeof FormData!="undefined"&&n instanceof FormData?(t.reqBody=b(n),t.reqSize=t.reqBody.length,t.premasked=!0):typeof Blob!="undefined"&&n instanceof Blob?t.reqSize=n.size:(typeof ArrayBuffer!="undefined"&&n instanceof ArrayBuffer||typeof ArrayBuffer!="undefined"&&ArrayBuffer.isView(n))&&(t.reqSize=n.byteLength),this.addEventListener("loadend",()=>{var c;try{if(S(t.url))return;let u={type:"network",ts:t.start,method:t.method,url:a(t.url),status:this.status,durationMs:Date.now()-t.start,initiator:"xhr"};if(o){u.reqHeaders=d(t.reqHeaders),u.resHeaders=d(R(this.getAllResponseHeaders()));let y=(c=this.getResponseHeader("content-type"))!=null?c:void 0;y&&(u.contentType=y),t.reqBody!=null&&(u.reqBody=t.premasked?g(t.reqBody):f(t.reqBody)),t.reqSize!=null&&(u.reqSize=t.reqSize);let m=this.responseType;if(m===""||m==="text")try{let p=this.responseText;p&&(u.resBody=f(p),u.resSize=p.length)}catch(p){}else if(m==="json")try{let p=this.response;if(p!=null){let v=JSON.stringify(p);u.resBody=f(v),u.resSize=v.length}}catch(p){}else if(m==="arraybuffer"){let p=this.response;p&&(u.resSize=p.byteLength)}else if(m==="blob"){let p=this.response;p&&(u.resSize=p.size)}}e(u)}catch(u){}})}return k.apply(this,i)},()=>{window.fetch=l,XMLHttpRequest.prototype.open=h,XMLHttpRequest.prototype.send=k,XMLHttpRequest.prototype.setRequestHeader=x}}var Re=200,Le=2e3,oe=0;function ie(e,r={},s=!1){var k,x,_,i;let o=U(r),a=(k=r.wsMaxFrames)!=null?k:Re,d=(x=r.wsMaxFrameChars)!=null?x:Le,f=new Set((_=r.wsFrameTypes)!=null?_:["text","binary"]),g=(i=r.ignoreUrls)!=null?i:[],w=t=>{let n=t.trim();if(!n.startsWith("{")&&!n.startsWith("["))return!1;try{return JSON.parse(n),!0}catch(c){return!1}},S=t=>typeof t=="string"?f.has("text")?!0:f.has("json")?w(t):!1:f.has("binary"),I=t=>typeof t=="string"&&g.some(n=>typeof n=="string"?t.includes(n):n.test(t)),E=t=>{try{e(t)}catch(n){}},q=(...t)=>{s&&console.debug("[iris]",...t)},R=t=>{if(typeof t=="string")return{data:o.maskBody(t,d),size:t.length};if(typeof Blob!="undefined"&&t instanceof Blob)return{binary:!0,size:t.size};if(typeof ArrayBuffer!="undefined"){if(t instanceof ArrayBuffer)return{binary:!0,size:t.byteLength};if(ArrayBuffer.isView(t))return{binary:!0,size:t.byteLength}}return{}},b=window.WebSocket,L=!1,A;if(typeof b=="function"){L=!0;class t extends b{constructor(u,y){super(u,y);try{let m=typeof u=="string"?u:String(u);if(I(m))return;let p=`ws${++oe}`,v={sent:0,recv:0,dropped:0};this.__iris={connId:p,budget:v},E({type:"ws",ts:Date.now(),connId:p,op:"open",transport:"websocket",url:o.maskUrl(m)}),this.addEventListener("message",M=>{if(S(M.data)){if(v.recv>=a){v.dropped++;return}v.recv++,E({type:"ws",ts:Date.now(),connId:p,op:"message",transport:"websocket",...R(M.data)})}}),this.addEventListener("close",M=>{E({type:"ws",ts:Date.now(),connId:p,op:"close",transport:"websocket",code:M.code,reason:M.reason||void 0,dropped:v.dropped||void 0}),q(`ws ${p} closed (${M.code}) \u2014 frames \u2191${v.sent} \u2193${v.recv}, dropped ${v.dropped}`)}),this.addEventListener("error",()=>{E({type:"ws",ts:Date.now(),connId:p,op:"error",transport:"websocket"})})}catch(m){}}}A=b.prototype.send;let n=A;b.prototype.send=function(c){try{let u=this.__iris;u&&S(c)&&(u.budget.sent>=a?u.budget.dropped++:(u.budget.sent++,E({type:"ws",ts:Date.now(),connId:u.connId,op:"send",transport:"websocket",...R(c)})))}catch(u){}return n.call(this,c)},window.WebSocket=t}let l=window.EventSource,h=!1;if(typeof l=="function"){h=!0;class t extends l{constructor(c,u){super(c,u);try{let y=typeof c=="string"?c:String(c);if(I(y))return;let m=`es${++oe}`,p={recv:0,dropped:0},v=(C,T)=>{if(S(C.data)){if(p.recv>=a){p.dropped++;return}p.recv++,E({type:"ws",ts:Date.now(),connId:m,op:"message",transport:"eventsource",...T?{event:T}:{},...R(C.data)})}};this.__iris={record:v,mirrored:new Set},E({type:"ws",ts:Date.now(),connId:m,op:"open",transport:"eventsource",url:o.maskUrl(y)}),super.addEventListener("message",C=>v(C)),super.addEventListener("error",()=>{E({type:"ws",ts:Date.now(),connId:m,op:"error",transport:"eventsource"})});let M=this.close.bind(this);this.close=()=>{try{E({type:"ws",ts:Date.now(),connId:m,op:"close",transport:"eventsource",dropped:p.dropped||void 0}),q(`es ${m} closed \u2014 frames \u2193${p.recv}, dropped ${p.dropped}`)}catch(C){}M()}}catch(y){}}addEventListener(c,u,y){try{let m=this.__iris;m&&c!=="message"&&c!=="error"&&c!=="open"&&!m.mirrored.has(c)&&(m.mirrored.add(c),super.addEventListener(c,(p=>m.record(p,c))))}catch(m){}super.addEventListener(c,u,y)}}window.EventSource=t}return()=>{L&&(window.WebSocket=b,A&&(b.prototype.send=A)),h&&(window.EventSource=l)}}var ae=["log","info","warn","error","debug"],Ae=e=>typeof e[0]=="string"&&e[0].startsWith("[iris]");function ce(e,r={}){let s=r.captureIrisLogs===!0,o={};for(let a of ae)o[a]=console[a].bind(console),console[a]=(...d)=>{try{(s||!Ae(d))&&e({type:"console",ts:Date.now(),level:a,args:d.map(Me)})}catch(f){}o[a](...d)};return()=>{for(let a of ae)o[a]&&(console[a]=o[a])}}function Me(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch(r){return String(e)}}import{onCLS as Be,onFCP as qe,onINP as _e,onLCP as Te,onTTFB as Ce}from"web-vitals";function ue(e){let r=s=>o=>{e({type:"vital",ts:Date.now(),metric:s,value:o.value,rating:o.rating})};Te(r("LCP")),Be(r("CLS")),_e(r("INP")),qe(r("FCP")),Ce(r("TTFB"))}function de(e){let r=location.href,s=()=>{try{let d=location.href;if(d===r)return;let f=r;r=d,e({type:"navigation",ts:Date.now(),from:f,to:d})}catch(d){}},o=history.pushState,a=history.replaceState;return history.pushState=function(...d){let f=o.apply(this,d);return s(),f},history.replaceState=function(...d){let f=a.apply(this,d);return s(),f},addEventListener("popstate",s),addEventListener("hashchange",s),()=>{history.pushState=o,history.replaceState=a,removeEventListener("popstate",s),removeEventListener("hashchange",s)}}function fe(e,r={}){var A,l,h,k,x;let s=(A=r.rageThreshold)!=null?A:3,o=(l=r.rageWindowMs)!=null?l:1e3,a=(h=r.rageRadiusPx)!=null?h:30,d=(k=r.deadWindowMs)!=null?k:2500,f=(x=r.errorWindowMs)!=null?x:2500,g=0,w=0,S=0,I=[],E=()=>{g=Date.now()},q=new MutationObserver(E);q.observe(document,{subtree:!0,childList:!0,attributes:!0,characterData:!0}),addEventListener("scroll",E,!0);let R=()=>{w=Date.now()};addEventListener("error",R,!0),addEventListener("unhandledrejection",R,!0);let b=(_,i,t,n,c,u)=>{e({type:"click",ts:i,kind:_,selector:Oe(t),text:Ue(t),x:n,y:c,...u?{count:u}:{}})},L=_=>{try{let i=Date.now(),t=_.clientX,n=_.clientY,c=_.target;for(;I.length&&i-I[0].t>o;)I.shift();let u=I.filter(v=>Math.hypot(v.x-t,v.y-n)<=a).length;if(I.push({x:t,y:n,t:i}),u+1>=s&&(S=i,b("rage",i,c,t,n,u+1),I.length=0),u>0)return;let y=w;if(setTimeout(()=>{w>y&&b("error",i,c,t,n)},f),!De(c))return;let m=g,p=location.href;setTimeout(()=>{let v=g>m||location.href!==p,M=w>y;!v&&!M&&S<i&&b("dead",i,c,t,n)},d)}catch(i){}};return addEventListener("click",L,!0),()=>{q.disconnect(),removeEventListener("scroll",E,!0),removeEventListener("error",R,!0),removeEventListener("unhandledrejection",R,!0),removeEventListener("click",L,!0)}}function Oe(e){var o;if(!e||!e.tagName)return"unknown";let r=e.tagName.toLowerCase();e.id&&(r+=`#${e.id}`);let s=((o=e.getAttribute("class"))!=null?o:"").trim().split(/\s+/).filter(Boolean)[0];return s&&(r+=`.${s}`),r}function Ue(e){var r;if(e)try{if(e.closest(".twc-mask, .twc-block"))return;let s=e.getAttribute("aria-label"),o=((r=s!=null?s:e.textContent)!=null?r:"").replace(/\s+/g," ").trim();return o?o.length>50?`${o.slice(0,50)}\u2026`:o:void 0}catch(s){return}}function De(e){if(!e||e.closest("input, textarea, select, label"))return!1;if(e.closest('a, button, [role="button"], [onclick]'))return!0;try{return getComputedStyle(e).cursor==="pointer"}catch(r){return!1}}function kt(e){var f,g;let r=Q(e.release,(f=e.user)!=null?f:e.userId,e.sessionId),s=new N({endpoint:e.endpoint,projectKey:e.projectKey,meta:r,debug:e.debug}),o=s.push.bind(s),a=[],d=e.track===!1?()=>{}:ee(o,typeof e.network=="object"?e.network:{},typeof e.track=="object"?e.track:{});if(e.replay!==!1&&a.push(te(o,{maskAllInputs:(g=e.maskAllInputs)!=null?g:!0,maskTextSelector:e.maskTextSelector,blockSelector:e.blockSelector})),e.errors!==!1&&a.push(re(o)),e.console!==!1&&a.push(ce(o,typeof e.console=="object"?e.console:{})),e.navigation!==!1&&a.push(de(o)),e.frustration!==!1&&a.push(fe(o)),e.vitals!==!1&&ue(o),e.network!==!1){let w={ignoreUrls:[`${e.endpoint}/v1/ingest`],...typeof e.network=="object"?e.network:{}};a.push(se(o,w)),w.captureWebSockets!==!1&&a.push(ie(o,w,e.debug))}return e.debug&&console.debug("[iris] recording",r.sessionId,"\u2192",e.endpoint),{sessionId:r.sessionId,identify:w=>s.identify(w),track:d,flush:()=>s.flush(!1),stop:()=>{a.forEach(w=>w()),s.stop()}}}export{G as currentSessionId,kt as record};
1
+ var ve=Object.defineProperty;var we=(e,t,n)=>t in e?ve(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var U=(e,t,n)=>we(e,typeof t!="symbol"?t+"":t,n);function P(e){let n=Z(e,1,{keys:32});return n&&Object.keys(n).length>0?n:void 0}function Z(e,t,n){if(typeof e!="object"||e===null||Array.isArray(e))return;let o={};for(let[i,u]of Object.entries(e)){if(n.keys<=0)break;let c=i.slice(0,64);if(c){if(typeof u=="string")o[c]=u.slice(0,300),n.keys-=1;else if(typeof u=="number"||typeof u=="boolean")o[c]=String(u),n.keys-=1;else if(typeof u=="object"&&u!==null&&!Array.isArray(u)&&t<3){n.keys-=1;let y=Z(u,t+1,n);y&&Object.keys(y).length>0?o[c]=y:n.keys+=1}}}return o}function N(e){for(let t of["id","userId","email","username","name"]){let n=e[t];if(typeof n=="string"&&n)return n}for(let t of Object.values(e))if(typeof t=="string"&&t)return t}var J="iris.sid",Ee=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Y(e){return typeof e=="string"&&Ee.test(e)}function ee(){try{let e=sessionStorage.getItem(J);return Y(e)?e:void 0}catch(e){return}}function xe(e){try{if(Y(e))return sessionStorage.setItem(J,e),e;let t=ee();if(t)return t;let n=crypto.randomUUID();return sessionStorage.setItem(J,n),n}catch(t){return Y(e)?e:crypto.randomUUID()}}function te(e,t,n){let o=P(typeof t=="string"?{id:t}:t);return{sessionId:xe(n),user:o,userId:o?N(o):void 0,release:e,startedAt:Date.now(),url:location.href,userAgent:navigator.userAgent}}import{gzipSync as Se,strToU8 as Ie}from"fflate";var $=class{constructor(t){U(this,"opts",t);U(this,"queue",[]);U(this,"bytes",0);U(this,"timer");U(this,"flushBytes");U(this,"maxBytes",4e6);var n,o;this.flushBytes=(n=t.flushBytes)!=null?n:64e3,this.timer=setInterval(()=>this.flush(!1),(o=t.flushMs)!=null?o:5e3),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.flush(!0)}),addEventListener("pagehide",()=>this.flush(!0))}push(t){this.queue.push(t),this.bytes+=re(t),this.bytes>=this.flushBytes&&this.flush(!1)}flush(t){if(this.queue.length===0)return;let n=this.queue;this.queue=[],this.bytes=0;let o={meta:this.opts.meta,events:n},i=Se(Ie(JSON.stringify(o))),u=`${this.opts.endpoint}/v1/ingest`;if(this.log(`flush via ${t?"beacon":"fetch"}: ${n.length} events, ${i.length}b gz \u2192 ${u}`),t&&"sendBeacon"in navigator){let c=!1;try{let y=`${u}?k=${encodeURIComponent(this.opts.projectKey)}`;c=navigator.sendBeacon(y,new Blob([i],{type:"text/plain"}))}catch(y){c=!1}c||(this.log("beacon refused \u2014 re-queueing"),this.requeue(n));return}fetch(u,{method:"POST",body:i,keepalive:t,headers:{"content-encoding":"gzip","content-type":"application/octet-stream","x-iris-key":this.opts.projectKey}}).then(c=>{this.log(`ingest responded ${c.status}`),c.ok||this.requeue(n)}).catch(c=>{this.log("ingest request failed",c),this.requeue(n)})}identify(t){var o;let n=P(typeof t=="string"?{id:t}:t);n&&(this.opts.meta.user=n,this.opts.meta.userId=N(n),this.log(`identified as ${(o=this.opts.meta.userId)!=null?o:"(unnamed user)"}`))}log(...t){this.opts.debug&&console.debug("[iris]",...t)}requeue(t){let n=t.concat(this.queue),o=0;for(let i of n)o+=re(i);o>this.maxBytes||(this.queue=n,this.bytes=o)}stop(){this.timer&&clearInterval(this.timer),this.flush(!0)}};function re(e){return JSON.stringify(e).length}var Re=["authorization","cookie","set-cookie","proxy-authorization","x-api-key","x-auth-token","x-csrf-token","x-xsrf-token"],Me=/pass(word|wd)?|secret|token|api[-_]?key|auth|credential|session|cvv|card[-_]?(number|num)?|ssn|pin/i;var Ae="[redacted]",z="[masked]";function T(e={}){var R,w,M,A;let t=new Set([...Re,...((R=e.redactHeaders)!=null?R:[]).map(f=>f.toLowerCase())]),n=(w=e.maskKeys)!=null?w:Me,o=new Set(((M=e.maskExtraKeys)!=null?M:[]).map(f=>f.toLowerCase())),i=f=>n.test(f)||o.has(f.toLowerCase()),u=(A=e.maxBodyChars)!=null?A:1e4,c=()=>typeof location!="undefined"?location.href:void 0,y=f=>{try{let k=new URL(f,c()),b=!1;for(let I of[...k.searchParams.keys()])i(I)&&(k.searchParams.set(I,z),b=!0);return b?k.toString():f}catch(k){return f}},S=f=>{let k={};for(let b of Object.keys(f))k[b]=t.has(b.toLowerCase())?Ae:f[b];return k},m=f=>{if(Array.isArray(f))return f.map(m);if(f&&typeof f=="object"){let k={};for(let[b,I]of Object.entries(f))k[b]=i(b)?z:m(I);return k}return f},v=(f,k=u)=>f.length>k?`${f.slice(0,k)}\u2026[+${f.length-k} chars]`:f;return{maskUrl:y,maskHeaders:S,maskBody:(f,k=u)=>{if(f==null||f==="")return;let b=String(f),I;try{I=JSON.stringify(m(JSON.parse(b)))}catch(B){if(/^[^={}\s]+=[^&]*(?:&[^=]+=[^&]*)*$/.test(b))try{let a=new URLSearchParams(b);for(let r of[...a.keys()])i(r)&&a.set(r,z);I=a.toString()}catch(a){I=b}else I=b}return v(I,k)},maskObject:f=>m(f),truncate:v,isMaskedKey:i,maxBodyChars:u}}var Ce=500,Le=8e3,_e=120;function ne(e,t={},n={}){var S,m;let o=T(t),i=(S=n.maxEvents)!=null?S:Ce,u=(m=n.maxPropsChars)!=null?m:Le,c=0,y=!1;return(v,E)=>{try{let _=typeof v=="string"?v.trim().slice(0,_e):"";if(!_)return;if(c>=i){y||(y=!0,console.warn(`[iris] track() budget exhausted (${i} events) \u2014 further events are dropped`));return}c++;let R={type:"custom",ts:Date.now(),name:_};if(E!=null&&typeof E=="object"){let w=null,M=1/0;try{w=o.maskObject(E),M=JSON.stringify(w).length}catch(A){w=null}R.props=w!=null&&M<=u?w:{"[iris]":`props dropped (${Number.isFinite(M)?`${M} chars > ${u}`:"not serializable"})`}}e(R)}catch(_){}}}var se=100,oe=8e3,Be=2e3,ie=new WeakSet;function W(e){return e===null||typeof e!="object"?!0:ie.has(e)?!1:(ie.add(e),!0)}var X={captureException:()=>{},captureMessage:()=>{}};function ae(e,t={}){let n=T(t),o=0,i=!1,u=(c,y)=>{if(o>=se){i||(i=!0,console.warn(`[iris] capture budget exhausted (${se} errors) \u2014 further captures are dropped`));return}o++;let S={type:"error",ts:Date.now(),source:"manual",name:c.name,message:c.message.slice(0,Be),...c.stack?{stack:c.stack}:{}};if(y!=null&&typeof y=="object"){let m=null,v=1/0;try{m=n.maskObject(y),v=JSON.stringify(m).length}catch(E){m=null}S.context=m!=null&&v<=oe?m:{"[iris]":`context dropped (${Number.isFinite(v)?`${v} chars > ${oe}`:"not serializable"})`}}e(S)};return{captureException(c,y){try{if(!W(c))return;u(qe(c),y)}catch(S){}},captureMessage(c,y){try{u({name:"Message",message:String(c)},y)}catch(S){}}}}function qe(e){var n;if(e&&typeof e=="object"&&typeof e.message=="string"){let o=e;return{name:typeof o.name=="string"&&o.name?o.name:"Error",message:o.message,...typeof o.stack=="string"?{stack:o.stack}:{}}}if(typeof e=="string")return{name:"Error",message:e};let t;try{t=(n=JSON.stringify(e))!=null?n:String(e)}catch(o){t=String(e)}return{name:"Error",message:t}}import{record as Oe}from"rrweb";function ce(e,t={}){var o;let n=Oe({emit(i){e({type:"replay",ts:Date.now(),data:i})},maskAllInputs:(o=t.maskAllInputs)!=null?o:!0,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,sampling:{mousemove:50,scroll:150,input:"last"},checkoutEveryNms:3e4});return()=>n==null?void 0:n()}function ue(e){let t=o=>{var i,u,c,y;W(o.error)&&e({type:"error",ts:Date.now(),source:"error",name:(u=(i=o.error)==null?void 0:i.name)!=null?u:"Error",message:(c=o.message)!=null?c:String(o.error),stack:(y=o.error)==null?void 0:y.stack})},n=o=>{var u,c;let i=o.reason;W(i)&&e({type:"error",ts:Date.now(),source:"unhandledrejection",name:(u=i==null?void 0:i.name)!=null?u:"UnhandledRejection",message:(c=i==null?void 0:i.message)!=null?c:String(i),stack:i==null?void 0:i.stack})};return addEventListener("error",t),addEventListener("unhandledrejection",n),()=>{removeEventListener("error",t),removeEventListener("unhandledrejection",n)}}var pe=512e3;function de(e,t={}){var B;let n=(B=t.ignoreUrls)!=null?B:[],o=t.captureBodies!==!1,{maskUrl:i,maskHeaders:u,maskBody:c,truncate:y,isMaskedKey:S}=T(t),m=a=>typeof a=="string"&&n.some(r=>typeof r=="string"?a.includes(r):r.test(a)),v=a=>{let r={};if(!a)return r;if(typeof Headers!="undefined"&&a instanceof Headers)a.forEach((s,p)=>r[p]=s);else if(Array.isArray(a))for(let s of a)s&&s.length>=2&&(r[String(s[0])]=String(s[1]));else if(typeof a=="object")for(let[s,p]of Object.entries(a))r[s]=String(p);return r},E=a=>!!a&&/(json|text|xml|javascript|x-www-form-urlencoded|html)/i.test(a),_=a=>!!a&&/event-stream/i.test(a),R=a=>{let r={};if(!a)return r;for(let s of a.trim().split(/[\r\n]+/)){let p=s.indexOf(":");p>0&&(r[s.slice(0,p).trim()]=s.slice(p+1).trim())}return r},w=a=>{let r=[];return a.forEach((s,p)=>{typeof s=="string"?r.push(`${p}=${S(p)?z:s}`):r.push(`${p}=[file ${s.name||"blob"} ${s.size}B]`)}),r.join("&")},M=(a,r)=>{var p;let s=r==null?void 0:r.body;if(typeof s=="string")return{text:s,size:s.length};if(typeof URLSearchParams!="undefined"&&s instanceof URLSearchParams){let d=s.toString();return{text:d,size:d.length}}if(typeof FormData!="undefined"&&s instanceof FormData){let d=w(s);return{text:d,size:d.length,premasked:!0}}if(typeof Blob!="undefined"&&s instanceof Blob)return{size:s.size};if(typeof ArrayBuffer!="undefined"){if(s instanceof ArrayBuffer)return{size:s.byteLength};if(ArrayBuffer.isView(s))return{size:s.byteLength}}if(s==null&&typeof Request!="undefined"&&a instanceof Request){let d=a.method.toUpperCase();if(d!=="GET"&&d!=="HEAD"&&!a.bodyUsed){let g=(p=a.headers.get("content-type"))!=null?p:void 0;try{if(g&&/multipart\/form-data/i.test(g))return{textPromise:a.clone().formData().then(w).catch(()=>{}),premasked:!0};if(E(g))return{textPromise:a.clone().text().catch(()=>{})}}catch(h){}}}return{}},A=async a=>{let r=a.body;if(!r||typeof r.getReader!="function"){let h=await a.text();return{text:h,bytes:h.length,complete:!0}}let s=r.getReader(),p=new TextDecoder,d="",g=0;for(;;){let{done:h,value:l}=await s.read();if(h)return{text:d+p.decode(),bytes:g,complete:!0};if(g+=l.byteLength,d+=p.decode(l,{stream:!0}),g>=pe)return s.cancel().catch(()=>{}),{text:d,bytes:g,complete:!1}}},f=window.fetch;window.fetch=async function(...a){var h,l,x,C,O;let r=Date.now(),s=a[0],p=typeof s=="string"?s:s instanceof URL?s.href:s instanceof Request?s.url:String(s),d=((l=(h=a[1])==null?void 0:h.method)!=null?l:s instanceof Request?s.method:"GET").toUpperCase(),g={};if(o&&!m(p))try{g=M(s,a[1])}catch(q){g={}}try{let q=await f.apply(this,a);try{if(!m(p)){let L={type:"network",ts:r,method:d,url:i(p),status:q.status,durationMs:Date.now()-r,initiator:"fetch"};if(!o)e(L);else{let be=(C=(x=a[1])==null?void 0:x.headers)!=null?C:s instanceof Request?s.headers:void 0;L.reqHeaders=u(v(be)),L.resHeaders=u(v(q.headers));let H=(O=q.headers.get("content-type"))!=null?O:void 0;H&&(L.contentType=H);let D=Number(q.headers.get("content-length"));Number.isFinite(D)&&(L.resSize=D);let K=null;E(H)&&!_(H)&&!(Number.isFinite(D)&&D>pe)&&(K=A(q.clone())),(async()=>{var G,Q;try{let F=(G=g.text)!=null?G:g.textPromise?await g.textPromise:void 0;if(F?(L.reqBody=g.premasked?y(F):c(F),L.reqSize=(Q=g.size)!=null?Q:F.length):g.size!=null&&(L.reqSize=g.size),K){let V=await K;V.text&&(L.resBody=c(V.text)),Number.isFinite(D)||(L.resSize=V.bytes)}}catch(F){}e(L)})()}}}catch(L){}return q}catch(q){try{m(p)||e({type:"network",ts:r,method:d,url:i(p),status:0,durationMs:Date.now()-r,initiator:"fetch"})}catch(L){}throw q}};let k=XMLHttpRequest.prototype.open,b=XMLHttpRequest.prototype.send,I=XMLHttpRequest.prototype.setRequestHeader;return XMLHttpRequest.prototype.open=function(a,r,...s){return this.__iris={method:String(a).toUpperCase(),url:String(r),start:0,reqHeaders:{},reqBody:void 0,reqSize:void 0,premasked:!1},k.apply(this,[a,r,...s])},XMLHttpRequest.prototype.setRequestHeader=function(a,r){let s=this.__iris;return s&&(s.reqHeaders[a]=r),I.apply(this,[a,r])},XMLHttpRequest.prototype.send=function(...a){let r=this.__iris;if(r){r.start=Date.now();let s=a[0];typeof s=="string"?(r.reqBody=s,r.reqSize=s.length):typeof URLSearchParams!="undefined"&&s instanceof URLSearchParams?(r.reqBody=s.toString(),r.reqSize=r.reqBody.length):typeof FormData!="undefined"&&s instanceof FormData?(r.reqBody=w(s),r.reqSize=r.reqBody.length,r.premasked=!0):typeof Blob!="undefined"&&s instanceof Blob?r.reqSize=s.size:(typeof ArrayBuffer!="undefined"&&s instanceof ArrayBuffer||typeof ArrayBuffer!="undefined"&&ArrayBuffer.isView(s))&&(r.reqSize=s.byteLength),this.addEventListener("loadend",()=>{var p;try{if(m(r.url))return;let d={type:"network",ts:r.start,method:r.method,url:i(r.url),status:this.status,durationMs:Date.now()-r.start,initiator:"xhr"};if(o){d.reqHeaders=u(r.reqHeaders),d.resHeaders=u(R(this.getAllResponseHeaders()));let g=(p=this.getResponseHeader("content-type"))!=null?p:void 0;g&&(d.contentType=g),r.reqBody!=null&&(d.reqBody=r.premasked?y(r.reqBody):c(r.reqBody)),r.reqSize!=null&&(d.reqSize=r.reqSize);let h=this.responseType;if(h===""||h==="text")try{let l=this.responseText;l&&(d.resBody=c(l),d.resSize=l.length)}catch(l){}else if(h==="json")try{let l=this.response;if(l!=null){let x=JSON.stringify(l);d.resBody=c(x),d.resSize=x.length}}catch(l){}else if(h==="arraybuffer"){let l=this.response;l&&(d.resSize=l.byteLength)}else if(h==="blob"){let l=this.response;l&&(d.resSize=l.size)}}e(d)}catch(d){}})}return b.apply(this,a)},()=>{window.fetch=f,XMLHttpRequest.prototype.open=k,XMLHttpRequest.prototype.send=b,XMLHttpRequest.prototype.setRequestHeader=I}}var Te=200,Ue=2e3,fe=0;function le(e,t={},n=!1){var b,I,B,a;let o=T(t),i=(b=t.wsMaxFrames)!=null?b:Te,u=(I=t.wsMaxFrameChars)!=null?I:Ue,c=new Set((B=t.wsFrameTypes)!=null?B:["text","binary"]),y=(a=t.ignoreUrls)!=null?a:[],S=r=>{let s=r.trim();if(!s.startsWith("{")&&!s.startsWith("["))return!1;try{return JSON.parse(s),!0}catch(p){return!1}},m=r=>typeof r=="string"?c.has("text")?!0:c.has("json")?S(r):!1:c.has("binary"),v=r=>typeof r=="string"&&y.some(s=>typeof s=="string"?r.includes(s):s.test(r)),E=r=>{try{e(r)}catch(s){}},_=(...r)=>{n&&console.debug("[iris]",...r)},R=r=>{if(typeof r=="string")return{data:o.maskBody(r,u),size:r.length};if(typeof Blob!="undefined"&&r instanceof Blob)return{binary:!0,size:r.size};if(typeof ArrayBuffer!="undefined"){if(r instanceof ArrayBuffer)return{binary:!0,size:r.byteLength};if(ArrayBuffer.isView(r))return{binary:!0,size:r.byteLength}}return{}},w=window.WebSocket,M=!1,A;if(typeof w=="function"){M=!0;class r extends w{constructor(d,g){super(d,g);try{let h=typeof d=="string"?d:String(d);if(v(h))return;let l=`ws${++fe}`,x={sent:0,recv:0,dropped:0};this.__iris={connId:l,budget:x},E({type:"ws",ts:Date.now(),connId:l,op:"open",transport:"websocket",url:o.maskUrl(h)}),this.addEventListener("message",C=>{if(m(C.data)){if(x.recv>=i){x.dropped++;return}x.recv++,E({type:"ws",ts:Date.now(),connId:l,op:"message",transport:"websocket",...R(C.data)})}}),this.addEventListener("close",C=>{E({type:"ws",ts:Date.now(),connId:l,op:"close",transport:"websocket",code:C.code,reason:C.reason||void 0,dropped:x.dropped||void 0}),_(`ws ${l} closed (${C.code}) \u2014 frames \u2191${x.sent} \u2193${x.recv}, dropped ${x.dropped}`)}),this.addEventListener("error",()=>{E({type:"ws",ts:Date.now(),connId:l,op:"error",transport:"websocket"})})}catch(h){}}}A=w.prototype.send;let s=A;w.prototype.send=function(p){try{let d=this.__iris;d&&m(p)&&(d.budget.sent>=i?d.budget.dropped++:(d.budget.sent++,E({type:"ws",ts:Date.now(),connId:d.connId,op:"send",transport:"websocket",...R(p)})))}catch(d){}return s.call(this,p)},window.WebSocket=r}let f=window.EventSource,k=!1;if(typeof f=="function"){k=!0;class r extends f{constructor(p,d){super(p,d);try{let g=typeof p=="string"?p:String(p);if(v(g))return;let h=`es${++fe}`,l={recv:0,dropped:0},x=(O,q)=>{if(m(O.data)){if(l.recv>=i){l.dropped++;return}l.recv++,E({type:"ws",ts:Date.now(),connId:h,op:"message",transport:"eventsource",...q?{event:q}:{},...R(O.data)})}};this.__iris={record:x,mirrored:new Set},E({type:"ws",ts:Date.now(),connId:h,op:"open",transport:"eventsource",url:o.maskUrl(g)}),super.addEventListener("message",O=>x(O)),super.addEventListener("error",()=>{E({type:"ws",ts:Date.now(),connId:h,op:"error",transport:"eventsource"})});let C=this.close.bind(this);this.close=()=>{try{E({type:"ws",ts:Date.now(),connId:h,op:"close",transport:"eventsource",dropped:l.dropped||void 0}),_(`es ${h} closed \u2014 frames \u2193${l.recv}, dropped ${l.dropped}`)}catch(O){}C()}}catch(g){}}addEventListener(p,d,g){try{let h=this.__iris;h&&p!=="message"&&p!=="error"&&p!=="open"&&!h.mirrored.has(p)&&(h.mirrored.add(p),super.addEventListener(p,(l=>h.record(l,p))))}catch(h){}super.addEventListener(p,d,g)}}window.EventSource=r}return()=>{M&&(window.WebSocket=w,A&&(w.prototype.send=A)),k&&(window.EventSource=f)}}var ye=["log","info","warn","error","debug"],De=e=>typeof e[0]=="string"&&e[0].startsWith("[iris]");function me(e,t={}){let n=t.captureIrisLogs===!0,o={};for(let i of ye)o[i]=console[i].bind(console),console[i]=(...u)=>{try{(n||!De(u))&&e({type:"console",ts:Date.now(),level:i,args:u.map(Fe)})}catch(c){}o[i](...u)};return()=>{for(let i of ye)o[i]&&(console[i]=o[i])}}function Fe(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch(t){return String(e)}}import{onCLS as ze,onFCP as je,onINP as He,onLCP as Pe,onTTFB as Ne}from"web-vitals";function ge(e){let t=n=>o=>{e({type:"vital",ts:Date.now(),metric:n,value:o.value,rating:o.rating})};Pe(t("LCP")),ze(t("CLS")),He(t("INP")),je(t("FCP")),Ne(t("TTFB"))}function he(e){let t=location.href,n=()=>{try{let u=location.href;if(u===t)return;let c=t;t=u,e({type:"navigation",ts:Date.now(),from:c,to:u})}catch(u){}},o=history.pushState,i=history.replaceState;return history.pushState=function(...u){let c=o.apply(this,u);return n(),c},history.replaceState=function(...u){let c=i.apply(this,u);return n(),c},addEventListener("popstate",n),addEventListener("hashchange",n),()=>{history.pushState=o,history.replaceState=i,removeEventListener("popstate",n),removeEventListener("hashchange",n)}}function ke(e,t={}){var A,f,k,b,I;let n=(A=t.rageThreshold)!=null?A:3,o=(f=t.rageWindowMs)!=null?f:1e3,i=(k=t.rageRadiusPx)!=null?k:30,u=(b=t.deadWindowMs)!=null?b:2500,c=(I=t.errorWindowMs)!=null?I:2500,y=0,S=0,m=0,v=[],E=()=>{y=Date.now()},_=new MutationObserver(E);_.observe(document,{subtree:!0,childList:!0,attributes:!0,characterData:!0}),addEventListener("scroll",E,!0);let R=()=>{S=Date.now()};addEventListener("error",R,!0),addEventListener("unhandledrejection",R,!0);let w=(B,a,r,s,p,d)=>{e({type:"click",ts:a,kind:B,selector:$e(r),text:We(r),x:s,y:p,...d?{count:d}:{}})},M=B=>{try{let a=Date.now(),r=B.clientX,s=B.clientY,p=B.target;for(;v.length&&a-v[0].t>o;)v.shift();let d=v.filter(x=>Math.hypot(x.x-r,x.y-s)<=i).length;if(v.push({x:r,y:s,t:a}),d+1>=n&&(m=a,w("rage",a,p,r,s,d+1),v.length=0),d>0)return;let g=S;if(setTimeout(()=>{S>g&&w("error",a,p,r,s)},c),!Xe(p))return;let h=y,l=location.href;setTimeout(()=>{let x=y>h||location.href!==l,C=S>g;!x&&!C&&m<a&&w("dead",a,p,r,s)},u)}catch(a){}};return addEventListener("click",M,!0),()=>{_.disconnect(),removeEventListener("scroll",E,!0),removeEventListener("error",R,!0),removeEventListener("unhandledrejection",R,!0),removeEventListener("click",M,!0)}}function $e(e){var o;if(!e||!e.tagName)return"unknown";let t=e.tagName.toLowerCase();e.id&&(t+=`#${e.id}`);let n=((o=e.getAttribute("class"))!=null?o:"").trim().split(/\s+/).filter(Boolean)[0];return n&&(t+=`.${n}`),t}function We(e){var t;if(e)try{if(e.closest(".twc-mask, .twc-block"))return;let n=e.getAttribute("aria-label"),o=((t=n!=null?n:e.textContent)!=null?t:"").replace(/\s+/g," ").trim();return o?o.length>50?`${o.slice(0,50)}\u2026`:o:void 0}catch(n){return}}function Xe(e){if(!e||e.closest("input, textarea, select, label"))return!1;if(e.closest('a, button, [role="button"], [onclick]'))return!0;try{return getComputedStyle(e).cursor==="pointer"}catch(t){return!1}}var j=X;function _t(e){var y,S;let t=te(e.release,(y=e.user)!=null?y:e.userId,e.sessionId),n=new $({endpoint:e.endpoint,projectKey:e.projectKey,meta:t,debug:e.debug}),o=n.push.bind(n),i=[],u=e.track===!1?()=>{}:ne(o,typeof e.network=="object"?e.network:{},typeof e.track=="object"?e.track:{}),c=e.errors===!1?X:ae(o,typeof e.network=="object"?e.network:{});if(j=c,e.replay!==!1&&i.push(ce(o,{maskAllInputs:(S=e.maskAllInputs)!=null?S:!0,maskTextSelector:e.maskTextSelector,blockSelector:e.blockSelector})),e.errors!==!1&&i.push(ue(o)),e.console!==!1&&i.push(me(o,typeof e.console=="object"?e.console:{})),e.navigation!==!1&&i.push(he(o)),e.frustration!==!1&&i.push(ke(o)),e.vitals!==!1&&ge(o),e.network!==!1){let m={ignoreUrls:[`${e.endpoint}/v1/ingest`],...typeof e.network=="object"?e.network:{}};i.push(de(o,m)),m.captureWebSockets!==!1&&i.push(le(o,m,e.debug))}return e.debug&&console.debug("[iris] recording",t.sessionId,"\u2192",e.endpoint),{sessionId:t.sessionId,identify:m=>n.identify(m),track:u,captureException:c.captureException,captureMessage:c.captureMessage,flush:()=>n.flush(!1),stop:()=>{j===c&&(j=X),i.forEach(m=>m()),n.stop()}}}var Bt=(e,t)=>j.captureException(e,t),qt=(e,t)=>j.captureMessage(e,t);export{Bt as captureException,qt as captureMessage,ee as currentSessionId,_t as record};
2
2
  //# sourceMappingURL=index.js.map