@ihyeon/browser-error-log 0.2.0 → 0.2.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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- var X=Object.defineProperty;var W=(o,e,t)=>e in o?X(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var h=(o,e,t)=>W(o,typeof e!="symbol"?e+"":e,t);var k={count:20,bytes:12e3,category:40,message:256,dataKeys:6,dataKey:80,dataString:200};var K=20,I=48e3,J=10,Y=24e3,O=[250,500],U=/(?:password|passwd|token|secret|authorization|cookie|session|api.?key|credential|bearer|private.?key)/i,_=new Set(["javascript","promise","react","console","http","network","manual","resource"]),F=new Set(["browser","webview-ios","webview-android","unknown"]),Z=0;function s(o,e){try{return o==null?void 0:Reflect.get(Object(o),e)}catch{return}}function w(o){try{return String(o)}catch{return"[unavailable]"}}function G(o,e){return w(o).slice(0,e)}function S(){try{return performance.now()}catch{return Date.now()}}function H(){try{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch{}return`${Date.now().toString(36)}-${(++Z).toString(36)}-${Math.random().toString(36).slice(2,10)}`}function P(o,e){try{if(e?.aborted)return!0}catch{}return s(o,"name")==="AbortError"||s(o,"code")===20}function z(o){if(o==null)return{message:"Unknown error"};let e=s(o,"message"),t=s(o,"name"),r=s(o,"stack");return{message:e==null?w(o):w(e),...t==null?{}:{name:w(t)},...r==null?{}:{stack:w(r)}}}function B(o){return new TextEncoder().encode(o).length}function C(o,e,t,r){return typeof o=="number"&&Number.isFinite(o)?Math.min(t,Math.max(e,Math.floor(o))):r}var M=class extends Error{constructor(t){super(`Collector responded ${t}`);h(this,"status",t)}},R=class extends Error{},L=class extends Error{},q=class{constructor(e){h(this,"active");h(this,"endpoint");h(this,"options");h(this,"networkCaptureEnabled");h(this,"networkBreadcrumbCaptureEnabled");h(this,"navigationCaptureEnabled");h(this,"captureErrorCause");h(this,"resourceCaptureEnabled");h(this,"transportTimeoutMs");h(this,"startedAt",S());h(this,"viewId",H());h(this,"seenErrors",new WeakSet);h(this,"queue",[]);h(this,"breadcrumbs",[]);h(this,"maxQueueSize");h(this,"maxEventsPerMinute");h(this,"admittedAt",[]);h(this,"cancelWaits",new Set);h(this,"controllers",new Set);h(this,"destroySignal");h(this,"resolveDestroy");h(this,"interval");h(this,"flushing");h(this,"sequence",0);h(this,"inFlight",0);h(this,"sent",0);h(this,"dropped",0);h(this,"filtered",0);h(this,"deduplicated",0);h(this,"droppedByReason",{rateLimit:0,queueOverflow:0,payloadTooLarge:0,processingError:0,deliveryError:0,destroyed:0});h(this,"destroyed",!1);h(this,"lastAdmissionClock");h(this,"onError",e=>{try{if(!(s(e,"target")instanceof Window))return;let t=s(e,"filename"),r=s(e,"lineno"),n=s(e,"colno"),i={};typeof t=="string"&&t.trim()&&(i.filename=this.cleanUrl(t)),typeof r=="number"&&Number.isFinite(r)&&r>0&&(i.lineno=r),typeof n=="number"&&Number.isFinite(n)&&n>0&&(i.colno=n),this.captureException(s(e,"error")??s(e,"message")??"Script error",{type:"javascript",...Object.keys(i).length?{context:i}:{}})}catch{this.recordDrop("processingError")}});h(this,"onResourceError",e=>{if(!(this.destroyed||!this.active))try{let t=s(e,"target");if(s(t,"ownerDocument")!==document||!document.contains(t)||s(t,"namespaceURI")!=="http://www.w3.org/1999/xhtml")return;let r=s(t,"localName");if(r!=="script"&&r!=="link"&&r!=="img")return;let n=s(t,"getAttribute");if(typeof n!="function")return;let i=c=>{try{return Reflect.apply(n,t,[c])}catch{return}},d=r,l;if(d==="script"){let c=i("src");if(typeof c!="string"||!c.trim())return;l=s(t,"src")}else if(d==="link"){let c=s(t,"rel");if(typeof c!="string"||!c.split(/\s+/).some(m=>m.toLowerCase()==="stylesheet"))return;let f=i("href");if(typeof f!="string"||!f.trim())return;l=s(t,"href")}else{let c=s(t,"currentSrc");if(typeof c=="string"&&c.trim())l=c;else{let f=i("src");if(typeof f!="string"||!f.trim())return;l=s(t,"src")}}if(typeof l!="string"||!l.trim())return;let a;try{a=new URL(l,window.location.href)}catch{return}if(a.protocol!=="http:"&&a.protocol!=="https:"||this.isCollectorUrl(a.href))return;let u=this.cleanUrl(a.href),p;try{p=new URL(u)}catch{throw new R("Invalid resource URL")}if(p.protocol!=="http:"&&p.protocol!=="https:"||p.username||p.password||p.search||p.hash)throw new R("Unsafe resource URL");this.enqueue(this.makeEvent("resource",`Failed to load ${d} resource`,{name:"ResourceLoadError",context:{resourceTag:d,resourceUrl:u}}))}catch(t){(t instanceof R||t instanceof L)&&this.recordDrop("processingError")}});h(this,"onRejection",e=>{this.captureException(e.reason,{type:"promise"})});h(this,"onVisibility",()=>{document.visibilityState==="hidden"&&this.tryBeacon()});this.options=e,this.active=e.enabled!==!1&&typeof window<"u"&&typeof document<"u";let t=!e.transport||!!e.endpoint;if(this.networkCaptureEnabled=e.captureNetwork!==!1&&t,this.networkBreadcrumbCaptureEnabled=e.captureNetworkBreadcrumbs===!0&&t,this.navigationCaptureEnabled=e.captureNavigation===!0,this.captureErrorCause=e.captureErrorCause===!0,this.resourceCaptureEnabled=e.captureResourceErrors===!0,this.maxQueueSize=C(e.maxQueueSize,1,100,50),this.maxEventsPerMinute=typeof e.maxEventsPerMinute=="number"&&Number.isFinite(e.maxEventsPerMinute)?C(e.maxEventsPerMinute,1,1e3,1):void 0,this.transportTimeoutMs=C(e.transportTimeoutMs,250,6e4,5e3),this.destroySignal=new Promise(r=>{this.resolveDestroy=r}),!!this.active){if(!e.project||typeof e.project!="string")throw new Error("project is required");if(!e.transport&&!e.endpoint)throw new Error("endpoint or transport is required");this.endpoint=e.endpoint?this.absoluteUrl(e.endpoint):void 0,window.addEventListener("error",this.onError),this.resourceCaptureEnabled&&window.addEventListener("error",this.onResourceError,!0),window.addEventListener("unhandledrejection",this.onRejection),document.addEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&re(this),e.captureConsole===!0&&se(this),this.navigationCaptureEnabled&&Q(this),this.interval=setInterval(()=>{this.flush()},C(e.flushIntervalMs,10,6e4,1e4))}}captureException(e,t={}){if(!(!this.active||this.destroyed||P(e)))try{if(e!==null&&(typeof e=="object"||typeof e=="function")&&this.seenErrors.has(e)){this.deduplicated++;return}let r=this.exceptionFields(e),n=_.has(t.type)?t.type:"manual",i=this.makeEvent(n,r.message,{name:r.name,stack:r.stack,componentStack:t.componentStack,context:t.context});this.enqueue(i)&&e!==null&&(typeof e=="object"||typeof e=="function")&&this.seenErrors.add(e)}catch(r){(r instanceof R||r instanceof L)&&this.recordDrop("processingError")}}reportNetwork(e,t,r,n,i,d=!0){if(this.destroyed||!this.active||this.isCollectorUrl(t)||P(i))return;let l=this.networkCaptureEnabled&&d;if(l&&r!==void 0)try{l=this.options.shouldCaptureHttp?this.options.shouldCaptureHttp(r,t,e):r>=500}catch{this.recordDrop("processingError");return}if(this.networkBreadcrumbCaptureEnabled)try{let a=this.cleanBreadcrumbUrl(t);if(a.url){let u={method:this.cleanNetworkBreadcrumbMethod(e),url:a.url,durationMs:C(n,0,36e5,0)};r!==void 0&&Number.isInteger(r)&&r>=0&&r<=599&&(u.status=r),this.breadcrumbs.push({occurredAt:new Date().toISOString(),category:r===void 0?"network":"http",message:r===void 0?"Network failure":"HTTP response",data:u}),this.boundBreadcrumbs(this.breadcrumbs)}else if(l&&!a.safeForError){this.recordDrop("processingError");return}}catch{l&&this.recordDrop("processingError");return}if(l)try{let a={method:G(e||"GET",16).toUpperCase(),url:t,status:r,durationMs:n},u=i===void 0?void 0:z(i),p=this.makeEvent(r===void 0?"network":"http",r===void 0?u?.message||"Network request failed":`HTTP ${r}`,{name:u?.name,network:a});this.enqueue(p)}catch{this.recordDrop("processingError")}}reportZeroStatusCompletion(e,t,r){this.networkBreadcrumbCaptureEnabled&&this.reportNetwork(e,t,0,r,void 0,!1)}captureConsole(e){if(!(!this.active||this.destroyed))try{let t=e.map(w).join(" "),r;for(let n of e){let i=!1;try{i=n instanceof Error}catch{}if(i){r=this.exceptionFields(n);break}}this.enqueue(this.makeEvent("console",t,{name:r?.name,stack:r?.stack}))}catch{this.recordDrop("processingError")}}addBreadcrumb(e){if(!(!this.active||this.destroyed))try{let t=this.cleanBreadcrumb(e,new Date().toISOString());if(!t)return;this.breadcrumbs.push(t),this.boundBreadcrumbs(this.breadcrumbs)}catch{}}reportNavigation(e,t,r){if(!(!this.active||this.destroyed||!this.navigationCaptureEnabled))try{let n=this.cleanBreadcrumbUrl(e).url,i=this.cleanBreadcrumbUrl(t).url;if(!n||!i||n===i)return;this.breadcrumbs.push({occurredAt:new Date().toISOString(),category:"navigation",message:"Navigation",data:{from:n,to:i,trigger:r}}),this.boundBreadcrumbs(this.breadcrumbs)}catch{}}clearBreadcrumbs(){!this.active||this.destroyed||(this.breadcrumbs.length=0)}flush(){return!this.active||this.destroyed?Promise.resolve():this.flushing?this.flushing:(this.flushing=this.drain().finally(()=>{this.flushing=void 0}),this.flushing)}destroy(){if(!this.destroyed){this.destroyed=!0,this.interval&&clearInterval(this.interval),this.active&&(window.removeEventListener("error",this.onError),this.resourceCaptureEnabled&&window.removeEventListener("error",this.onResourceError,!0),window.removeEventListener("unhandledrejection",this.onRejection),document.removeEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&ne(this),this.options.captureConsole===!0&&ae(this),this.navigationCaptureEnabled&&ee(this)),this.recordDrop("destroyed",this.queue.length+this.inFlight),this.queue.length=0,this.breadcrumbs.length=0,this.admittedAt.length=0,this.lastAdmissionClock=void 0;for(let e of this.cancelWaits)e();for(let e of this.controllers)e.abort();this.resolveDestroy($)}}getStats(){return{queued:this.queue.length,sent:this.sent,dropped:this.dropped}}getDiagnostics(){return{...this.getStats(),inFlight:this.destroyed?0:this.inFlight,filtered:this.filtered,deduplicated:this.deduplicated,droppedByReason:{...this.droppedByReason}}}recordDrop(e,t=1){this.dropped+=t,this.droppedByReason[e]+=t}absoluteUrl(e){try{return new URL(e,window.location.href).href}catch{return e}}isCollectorUrl(e){if(!this.endpoint)return!1;try{let t=new URL(e,window.location.href),r=new URL(this.endpoint,window.location.href);return t.origin===r.origin&&t.pathname===r.pathname}catch{return e===this.endpoint}}cleanUrl(e){let t=w(e);if(this.options.sanitizeUrl){try{t=this.options.sanitizeUrl(t)}catch{throw new R("URL sanitizer failed")}if(typeof t!="string"||!t)throw new R("URL sanitizer returned no URL")}try{let r=new URL(t,window.location.href);return r.protocol!=="http:"&&r.protocol!=="https:"?"[unsupported URL]":(r.username="",r.password="",r.search="",r.hash="",this.cleanText(r.href,1024,!1))}catch{return this.cleanText(t,1024,!1).split(/[?#]/,1)[0]}}cleanBreadcrumbUrl(e){let t=this.cleanUrl(e);if(t==="[unsupported URL]")return{safeForError:!0};try{let r=new URL(t);return r.protocol!=="http:"&&r.protocol!=="https:"||r.username||r.password||r.search||r.hash?{safeForError:!1}:{url:t.slice(0,k.dataString),safeForError:!0}}catch{return{safeForError:!1}}}cleanNetworkBreadcrumbMethod(e){let t=w(e||"GET").trim().toUpperCase();return/^[A-Z0-9!#$%&'*+.^_`|~-]{1,16}$/.test(t)?t:"GET"}cleanText(e,t,r=!0){let n=w(e);return r&&(n=n.replace(/https?:\/\/[^\s<>"'()[\]]+/gi,i=>this.cleanUrl(i)),n=n.replace(/(^|[\s"'(\[=])((?:\/(?!\/)|\.{1,2}\/)[^\s<>"'()[\]?#]*[?#][^\s<>"'()[\]]+|[a-z][\w.-]*(?:\/[^\s<>"'()[\]?#]*)?(?:\?[a-z0-9_.-]+=[^\s<>"'()[\]]+|#[^\s<>"'()[\]]+)|\?[a-z0-9_.-]+=[^\s<>"'()[\]]+)/gi,(i,d,l)=>{let a=/[.,;!]+$/.exec(l)?.[0]??"",u=l.slice(0,l.length-a.length),p=this.options.sanitizeUrl?this.cleanUrl(u):u.startsWith("?")?"[redacted query]":this.cleanText(u.split(/[?#]/,1)[0],1024,!1);return`${d}${p}${a}`})),n.replace(/\bBearer\s+[A-Za-z0-9._~+\/-]+/gi,"Bearer [REDACTED]").replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"[REDACTED_EMAIL]").slice(0,t)}exceptionFields(e){let t=z(e);if(!this.captureErrorCause||e===null||typeof e!="object"&&typeof e!="function")return t;let r=new WeakSet([e]),n=[],i=e;for(let l=0;l<4;l++){let a=s(i,"cause");if(a===null||typeof a!="object"&&typeof a!="function"||r.has(a))break;r.add(a);let u=s(a,"message"),p=s(a,"stack");if(typeof u!="string"&&typeof p!="string")break;let c=s(a,"name"),f=this.cleanText(typeof c=="string"?c:"Error",100),m=typeof u=="string"?this.cleanText(u,256):"",g=typeof p=="string"?this.cleanText(p,480):"";n.push(`Caused by: ${f}: ${m}${g?`
1
+ var X=Object.defineProperty;var W=(o,e,t)=>e in o?X(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var h=(o,e,t)=>W(o,typeof e!="symbol"?e+"":e,t);var k={count:20,bytes:12e3,category:40,message:256,dataKeys:6,dataKey:80,dataString:200};var K=20,q=48e3,J=10,Y=24e3,O=[250,500],U=/(?:password|passwd|token|secret|authorization|cookie|session|api.?key|credential|bearer|private.?key)/i,_=new Set(["javascript","promise","react","console","http","network","manual","resource"]),F=new Set(["browser","webview-ios","webview-android","unknown"]),Z=0;function s(o,e){try{return o==null?void 0:Reflect.get(Object(o),e)}catch{return}}function w(o){try{return String(o)}catch{return"[unavailable]"}}function G(o,e){return w(o).slice(0,e)}function S(){try{return performance.now()}catch{return Date.now()}}function H(){try{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch{}return`${Date.now().toString(36)}-${(++Z).toString(36)}-${Math.random().toString(36).slice(2,10)}`}function P(o,e){try{if(e?.aborted)return!0}catch{}return s(o,"name")==="AbortError"||s(o,"code")===20}function z(o){if(o==null)return{message:"Unknown error"};let e=s(o,"message"),t=s(o,"name"),r=s(o,"stack");return{message:e==null?w(o):w(e),...t==null?{}:{name:w(t)},...r==null?{}:{stack:w(r)}}}function C(o){return new TextEncoder().encode(o).length}function T(o,e,t,r){return typeof o=="number"&&Number.isFinite(o)?Math.min(t,Math.max(e,Math.floor(o))):r}var M=class extends Error{constructor(t){super(`Collector responded ${t}`);h(this,"status",t)}},R=class extends Error{},L=class extends Error{},I=class{constructor(e){h(this,"active");h(this,"endpoint");h(this,"options");h(this,"networkCaptureEnabled");h(this,"networkBreadcrumbCaptureEnabled");h(this,"navigationCaptureEnabled");h(this,"captureErrorCause");h(this,"resourceCaptureEnabled");h(this,"transportTimeoutMs");h(this,"startedAt",S());h(this,"viewId",H());h(this,"seenErrors",new WeakSet);h(this,"queue",[]);h(this,"breadcrumbs",[]);h(this,"recordingBreadcrumb",!1);h(this,"maxQueueSize");h(this,"maxEventsPerMinute");h(this,"admittedAt",[]);h(this,"cancelWaits",new Set);h(this,"controllers",new Set);h(this,"destroySignal");h(this,"resolveDestroy");h(this,"interval");h(this,"flushing");h(this,"sequence",0);h(this,"inFlight",0);h(this,"sent",0);h(this,"dropped",0);h(this,"filtered",0);h(this,"deduplicated",0);h(this,"droppedByReason",{rateLimit:0,queueOverflow:0,payloadTooLarge:0,processingError:0,deliveryError:0,destroyed:0});h(this,"destroyed",!1);h(this,"lastAdmissionClock");h(this,"onError",e=>{try{if(!(s(e,"target")instanceof Window))return;let t=s(e,"filename"),r=s(e,"lineno"),n=s(e,"colno"),i={};typeof t=="string"&&t.trim()&&(i.filename=this.cleanUrl(t)),typeof r=="number"&&Number.isFinite(r)&&r>0&&(i.lineno=r),typeof n=="number"&&Number.isFinite(n)&&n>0&&(i.colno=n),this.captureException(s(e,"error")??s(e,"message")??"Script error",{type:"javascript",...Object.keys(i).length?{context:i}:{}})}catch{this.recordDrop("processingError")}});h(this,"onResourceError",e=>{if(!(this.destroyed||!this.active))try{let t=s(e,"target");if(s(t,"ownerDocument")!==document||!document.contains(t)||s(t,"namespaceURI")!=="http://www.w3.org/1999/xhtml")return;let r=s(t,"localName");if(r!=="script"&&r!=="link"&&r!=="img")return;let n=s(t,"getAttribute");if(typeof n!="function")return;let i=c=>{try{return Reflect.apply(n,t,[c])}catch{return}},d=r,l;if(d==="script"){let c=i("src");if(typeof c!="string"||!c.trim())return;l=s(t,"src")}else if(d==="link"){let c=s(t,"rel");if(typeof c!="string"||!c.split(/\s+/).some(m=>m.toLowerCase()==="stylesheet"))return;let f=i("href");if(typeof f!="string"||!f.trim())return;l=s(t,"href")}else{let c=s(t,"currentSrc");if(typeof c=="string"&&c.trim())l=c;else{let f=i("src");if(typeof f!="string"||!f.trim())return;l=s(t,"src")}}if(typeof l!="string"||!l.trim())return;let a;try{a=new URL(l,window.location.href)}catch{return}if(a.protocol!=="http:"&&a.protocol!=="https:"||this.isCollectorUrl(a.href))return;let u=this.cleanUrl(a.href),p;try{p=new URL(u)}catch{throw new R("Invalid resource URL")}if(p.protocol!=="http:"&&p.protocol!=="https:"||p.username||p.password||p.search||p.hash)throw new R("Unsafe resource URL");this.enqueue(this.makeEvent("resource",`Failed to load ${d} resource`,{name:"ResourceLoadError",context:{resourceTag:d,resourceUrl:u}}))}catch(t){(t instanceof R||t instanceof L)&&this.recordDrop("processingError")}});h(this,"onRejection",e=>{this.captureException(e.reason,{type:"promise"})});h(this,"onVisibility",()=>{document.visibilityState==="hidden"&&this.tryBeacon()});this.options=e,this.active=e.enabled!==!1&&typeof window<"u"&&typeof document<"u";let t=!e.transport||!!e.endpoint;if(this.networkCaptureEnabled=e.captureNetwork!==!1&&t,this.networkBreadcrumbCaptureEnabled=e.captureNetworkBreadcrumbs===!0&&t,this.navigationCaptureEnabled=e.captureNavigation===!0,this.captureErrorCause=e.captureErrorCause===!0,this.resourceCaptureEnabled=e.captureResourceErrors===!0,this.maxQueueSize=T(e.maxQueueSize,1,100,50),this.maxEventsPerMinute=typeof e.maxEventsPerMinute=="number"&&Number.isFinite(e.maxEventsPerMinute)?T(e.maxEventsPerMinute,1,1e3,1):void 0,this.transportTimeoutMs=T(e.transportTimeoutMs,250,6e4,5e3),this.destroySignal=new Promise(r=>{this.resolveDestroy=r}),!!this.active){if(!e.project||typeof e.project!="string")throw new Error("project is required");if(!e.transport&&!e.endpoint)throw new Error("endpoint or transport is required");this.endpoint=e.endpoint?this.absoluteUrl(e.endpoint):void 0,window.addEventListener("error",this.onError),this.resourceCaptureEnabled&&window.addEventListener("error",this.onResourceError,!0),window.addEventListener("unhandledrejection",this.onRejection),document.addEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&re(this),e.captureConsole===!0&&se(this),this.navigationCaptureEnabled&&Q(this),this.interval=setInterval(()=>{this.flush()},T(e.flushIntervalMs,10,6e4,1e4))}}captureException(e,t={}){if(!(!this.active||this.destroyed||P(e)))try{if(e!==null&&(typeof e=="object"||typeof e=="function")&&this.seenErrors.has(e)){this.deduplicated++;return}let r=this.exceptionFields(e),n=_.has(t.type)?t.type:"manual",i=this.makeEvent(n,r.message,{name:r.name,stack:r.stack,componentStack:t.componentStack,context:t.context});this.enqueue(i)&&e!==null&&(typeof e=="object"||typeof e=="function")&&this.seenErrors.add(e)}catch(r){(r instanceof R||r instanceof L)&&this.recordDrop("processingError")}}reportNetwork(e,t,r,n,i,d=!0){if(this.destroyed||!this.active||this.isCollectorUrl(t)||P(i))return;let l=this.networkCaptureEnabled&&d;if(l&&r!==void 0)try{l=this.options.shouldCaptureHttp?this.options.shouldCaptureHttp(r,t,e):r>=500}catch{this.recordDrop("processingError");return}if(this.networkBreadcrumbCaptureEnabled)try{let a=this.cleanBreadcrumbUrl(t);if(a.url){let u={method:this.cleanNetworkBreadcrumbMethod(e),url:a.url,durationMs:T(n,0,36e5,0)};r!==void 0&&Number.isInteger(r)&&r>=0&&r<=599&&(u.status=r),this.appendBreadcrumb({occurredAt:new Date().toISOString(),category:r===void 0?"network":"http",message:r===void 0?"Network failure":"HTTP response",data:u})}else if(l&&!a.safeForError){this.recordDrop("processingError");return}}catch{l&&this.recordDrop("processingError");return}if(l)try{let a={method:G(e||"GET",16).toUpperCase(),url:t,status:r,durationMs:n},u=i===void 0?void 0:z(i),p=this.makeEvent(r===void 0?"network":"http",r===void 0?u?.message||"Network request failed":`HTTP ${r}`,{name:u?.name,network:a});this.enqueue(p)}catch{this.recordDrop("processingError")}}reportZeroStatusCompletion(e,t,r){this.networkBreadcrumbCaptureEnabled&&this.reportNetwork(e,t,0,r,void 0,!1)}captureConsole(e){if(!(!this.active||this.destroyed))try{let t=e.map(w).join(" "),r;for(let n of e){let i=!1;try{i=n instanceof Error}catch{}if(i){r=this.exceptionFields(n);break}}this.enqueue(this.makeEvent("console",t,{name:r?.name,stack:r?.stack}))}catch{this.recordDrop("processingError")}}addBreadcrumb(e){if(!(!this.active||this.destroyed||this.recordingBreadcrumb))try{let t=this.cleanBreadcrumb(e,new Date().toISOString());if(!t)return;this.appendBreadcrumb(t)}catch{}}appendBreadcrumb(e){if(!(this.recordingBreadcrumb||this.destroyed)){if(!this.options.beforeBreadcrumb){this.breadcrumbs.push(e),this.boundBreadcrumbs(this.breadcrumbs);return}this.recordingBreadcrumb=!0;try{let t={...e,...e.data?{data:{...e.data}}:{}},r=this.options.beforeBreadcrumb(t);if(r===!1||r===null)return;let n=this.cleanBreadcrumb(r===void 0?t:r,e.occurredAt);if(!n||this.destroyed)return;this.breadcrumbs.push(n),this.boundBreadcrumbs(this.breadcrumbs)}catch{}finally{this.recordingBreadcrumb=!1}}}reportNavigation(e,t,r){if(!(!this.active||this.destroyed||!this.navigationCaptureEnabled))try{let n=this.cleanBreadcrumbUrl(e).url,i=this.cleanBreadcrumbUrl(t).url;if(!n||!i||n===i)return;this.appendBreadcrumb({occurredAt:new Date().toISOString(),category:"navigation",message:"Navigation",data:{from:n,to:i,trigger:r}})}catch{}}clearBreadcrumbs(){!this.active||this.destroyed||(this.breadcrumbs.length=0)}flush(){return!this.active||this.destroyed?Promise.resolve():this.flushing?this.flushing:(this.flushing=this.drain().finally(()=>{this.flushing=void 0}),this.flushing)}destroy(){if(!this.destroyed){this.destroyed=!0,this.interval&&clearInterval(this.interval),this.active&&(window.removeEventListener("error",this.onError),this.resourceCaptureEnabled&&window.removeEventListener("error",this.onResourceError,!0),window.removeEventListener("unhandledrejection",this.onRejection),document.removeEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&ne(this),this.options.captureConsole===!0&&ae(this),this.navigationCaptureEnabled&&ee(this)),this.recordDrop("destroyed",this.queue.length+this.inFlight),this.queue.length=0,this.breadcrumbs.length=0,this.admittedAt.length=0,this.lastAdmissionClock=void 0;for(let e of this.cancelWaits)e();for(let e of this.controllers)e.abort();this.resolveDestroy($)}}getStats(){return{queued:this.queue.length,sent:this.sent,dropped:this.dropped}}getDiagnostics(){return{...this.getStats(),inFlight:this.destroyed?0:this.inFlight,filtered:this.filtered,deduplicated:this.deduplicated,droppedByReason:{...this.droppedByReason}}}recordDrop(e,t=1){this.dropped+=t,this.droppedByReason[e]+=t}absoluteUrl(e){try{return new URL(e,window.location.href).href}catch{return e}}isCollectorUrl(e){if(!this.endpoint)return!1;try{let t=new URL(e,window.location.href),r=new URL(this.endpoint,window.location.href);return t.origin===r.origin&&t.pathname===r.pathname}catch{return e===this.endpoint}}cleanUrl(e){let t=w(e);if(this.options.sanitizeUrl){try{t=this.options.sanitizeUrl(t)}catch{throw new R("URL sanitizer failed")}if(typeof t!="string"||!t)throw new R("URL sanitizer returned no URL")}try{let r=new URL(t,window.location.href);return r.protocol!=="http:"&&r.protocol!=="https:"?"[unsupported URL]":(r.username="",r.password="",r.search="",r.hash="",this.cleanText(r.href,1024,!1))}catch{return this.cleanText(t,1024,!1).split(/[?#]/,1)[0]}}cleanBreadcrumbUrl(e){let t=this.cleanUrl(e);if(t==="[unsupported URL]")return{safeForError:!0};try{let r=new URL(t);return r.protocol!=="http:"&&r.protocol!=="https:"||r.username||r.password||r.search||r.hash?{safeForError:!1}:{url:t.slice(0,k.dataString),safeForError:!0}}catch{return{safeForError:!1}}}cleanNetworkBreadcrumbMethod(e){let t=w(e||"GET").trim().toUpperCase();return/^[A-Z0-9!#$%&'*+.^_`|~-]{1,16}$/.test(t)?t:"GET"}cleanText(e,t,r=!0){let n=w(e);return r&&(n=n.replace(/https?:\/\/[^\s<>"'()[\]]+/gi,i=>this.cleanUrl(i)),n=n.replace(/(^|[\s"'(\[=])((?:\/(?!\/)|\.{1,2}\/)[^\s<>"'()[\]?#]*[?#][^\s<>"'()[\]]+|[a-z][\w.-]*(?:\/[^\s<>"'()[\]?#]*)?(?:\?[a-z0-9_.-]+=[^\s<>"'()[\]]+|#[^\s<>"'()[\]]+)|\?[a-z0-9_.-]+=[^\s<>"'()[\]]+)/gi,(i,d,l)=>{let a=/[.,;!]+$/.exec(l)?.[0]??"",u=l.slice(0,l.length-a.length),p=this.options.sanitizeUrl?this.cleanUrl(u):u.startsWith("?")?"[redacted query]":this.cleanText(u.split(/[?#]/,1)[0],1024,!1);return`${d}${p}${a}`})),n.replace(/\bBearer\s+[A-Za-z0-9._~+\/-]+/gi,"Bearer [REDACTED]").replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"[REDACTED_EMAIL]").slice(0,t)}exceptionFields(e){let t=z(e);if(!this.captureErrorCause||e===null||typeof e!="object"&&typeof e!="function")return t;let r=new WeakSet([e]),n=[],i=e;for(let l=0;l<4;l++){let a=s(i,"cause");if(a===null||typeof a!="object"&&typeof a!="function"||r.has(a))break;r.add(a);let u=s(a,"message"),p=s(a,"stack");if(typeof u!="string"&&typeof p!="string")break;let c=s(a,"name"),f=this.cleanText(typeof c=="string"?c:"Error",100),m=typeof u=="string"?this.cleanText(u,256):"",g=typeof p=="string"?this.cleanText(p,480):"";n.push(`Caused by: ${f}: ${m}${g?`
2
2
  ${g}`:""}`.slice(0,480)),i=a}if(!n.length)return t;let d=t.stack===void 0?`${this.cleanText(t.name??"Error",100)}: ${this.cleanText(t.message,256)}`:this.cleanText(t.stack,2048);return{...t,stack:`${d}
3
3
  ${n.join(`
4
- `)}`}}cleanContext(e){if(!e||typeof e!="object")return;let t={},r;try{r=Object.keys(e)}catch{return}for(let n of r){if(Object.keys(t).length>=12)break;if(U.test(n))continue;let i=s(e,n),d=this.cleanText(n,80);typeof i=="string"?t[d]=this.cleanText(i,500):(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean"||i===null)&&(t[d]=i)}return Object.keys(t).length?t:void 0}cleanBreadcrumb(e,t){if(!e||typeof e!="object")return;let r=t??s(e,"occurredAt");if(typeof r!="string")return;try{if(new Date(r).toISOString()!==r)return}catch{return}let n=s(e,"category"),i=s(e,"message");if(n!==void 0&&typeof n!="string"||typeof i!="string")return;let d=this.cleanText(n??(t?"manual":""),k.category),l=this.cleanText(i,k.message);if(!d.trim()||!l.trim())return;let a=s(e,"data"),u={};if(a&&typeof a=="object"){let p;try{p=Object.keys(a)}catch{p=[]}for(let c of p){if(Object.keys(u).length>=k.dataKeys)break;if(U.test(c))continue;let f=this.cleanText(c,k.dataKey),m=s(a,c);typeof m=="string"?u[f]=this.cleanText(m,k.dataString):(typeof m=="number"&&Number.isFinite(m)||typeof m=="boolean"||m===null)&&(u[f]=m)}}return{occurredAt:r,category:d,message:l,...Object.keys(u).length?{data:u}:{}}}boundBreadcrumbs(e){for(;e.length>k.count||B(JSON.stringify(e))>k.bytes;)e.shift()}cleanBreadcrumbTrail(e){let t;try{if(!Array.isArray(e))return;t=e.length}catch{return}if(!Number.isSafeInteger(t)||t<0)return;let r=[];for(let n=Math.max(0,t-k.count);n<t;n++){let i=this.cleanBreadcrumb(s(e,n));i&&(r.push(i),this.boundBreadcrumbs(r))}return r.length?r:void 0}cleanNetwork(e){if(!e||typeof e!="object")return;let t=s(e,"status"),r=typeof t=="number"&&Number.isInteger(t)&&t>=100&&t<=599?t:void 0;return{method:this.cleanText(s(e,"method")??"GET",16).toUpperCase(),url:this.cleanUrl(s(e,"url")??""),...r===void 0?{}:{status:r},durationMs:C(s(e,"durationMs"),0,36e5,0)}}makeEvent(e,t,r={}){let n=s(navigator,"userAgent"),i=this.cleanContext(r.context),d;try{d=this.options.getContext?.()}catch{throw new L("Context resolver failed")}let l=this.cleanContext(d),a=this.cleanContext(this.options.context),u=i;if(l||a){u={...i};for(let c of[l,a])if(c)for(let f of Object.keys(c)){if(Object.keys(u).length>=12)break;Object.prototype.hasOwnProperty.call(u,f)||(u[f]=c[f])}}let p=this.cleanNetwork(r.network);return{schemaVersion:1,eventId:H(),project:this.cleanText(this.options.project,80),environment:this.cleanText(this.options.environment??"development",80),release:this.cleanText(this.options.release??"unknown",120),sdkVersion:"0.2.0",occurredAt:new Date().toISOString(),viewId:this.viewId,sequence:++this.sequence,elapsedMs:C(S()-this.startedAt,0,36e5,0),type:e,message:this.cleanText(t,1024),...r.name===void 0?{}:{name:this.cleanText(r.name,100)},...r.stack===void 0?{}:{stack:this.cleanText(r.stack,4096)},...r.componentStack===void 0?{}:{componentStack:this.cleanText(r.componentStack,2048)},page:this.cleanUrl(window.location.href),runtime:F.has(this.options.runtime)?this.options.runtime:"browser",...typeof n=="string"?{browser:this.cleanText(n,300)}:{},...u?{context:u}:{},...this.breadcrumbs.length?{breadcrumbs:this.breadcrumbs.map(c=>({...c,...c.data?{data:{...c.data}}:{}}))}:{},...p?{network:p}:{}}}sanitizeReplacement(e,t){let r=s(e,"type"),n=s(e,"runtime"),i=s(e,"name"),d=s(e,"stack"),l=s(e,"componentStack"),a=s(e,"browser"),u=this.cleanContext(s(e,"context")),p=this.cleanBreadcrumbTrail(s(e,"breadcrumbs")),c=this.cleanNetwork(s(e,"network"));return{...t,type:_.has(r)?r:t.type,message:this.cleanText(s(e,"message")??t.message,1024),...i===void 0?{name:t.name}:{name:this.cleanText(i,100)},...d===void 0?{stack:void 0}:{stack:this.cleanText(d,4096)},...l===void 0?{componentStack:t.componentStack}:{componentStack:this.cleanText(l,2048)},page:this.cleanUrl(s(e,"page")??t.page),runtime:F.has(n)?n:t.runtime,...a===void 0?{browser:t.browser}:{browser:this.cleanText(a,300)},...u?{context:u}:{context:void 0},...p?{breadcrumbs:p}:{breadcrumbs:void 0},...c?{network:c}:{network:void 0}}}admissionTime(){let e=S(),t=Number.isFinite(e)?Math.max(0,e,this.lastAdmissionClock??0):this.lastAdmissionClock??0;for(this.lastAdmissionClock=t;this.admittedAt.length&&t-this.admittedAt[0]>=6e4;)this.admittedAt.shift();return this.admittedAt.length<this.maxEventsPerMinute?t:void 0}enqueue(e){if(this.destroyed)return!1;if(this.maxEventsPerMinute!==void 0&&this.admissionTime()===void 0)return this.recordDrop("rateLimit"),!1;let t=e;if(this.options.beforeSend)try{let n={...e,context:e.context&&{...e.context},breadcrumbs:e.breadcrumbs?.map(d=>({...d,data:d.data&&{...d.data}})),network:e.network&&{...e.network}},i=this.options.beforeSend(n);if(i===!1||i===null)return this.filtered++,!1;t=this.sanitizeReplacement(i===void 0?n:i,e)}catch{return this.recordDrop("processingError"),!1}if(B(JSON.stringify(t))>I)return this.recordDrop("payloadTooLarge"),!1;let r=this.maxEventsPerMinute===void 0?void 0:this.admissionTime();return this.maxEventsPerMinute!==void 0&&r===void 0?(this.recordDrop("rateLimit"),!1):(this.queue.length>=this.maxQueueSize&&(this.queue.shift(),this.recordDrop("queueOverflow")),this.queue.push(t),r!==void 0&&this.admittedAt.push(r),this.queue.length>=this.maxQueueSize&&this.flush(),!0)}takeBatch(e=K,t=I){let r=[],n=B('{"schemaVersion":1,"events":[]}');for(;this.queue.length&&r.length<e;){let i=this.queue[0],d=B(JSON.stringify(i))+(r.length?1:0);if(r.length&&n+d>t)break;if(!r.length&&n+d>t){this.queue.shift(),this.recordDrop("payloadTooLarge");continue}r.push(this.queue.shift()),n+=d}return{schemaVersion:1,events:r}}async drain(){for(;!this.destroyed&&this.queue.length;){let e=this.takeBatch();if(e.events.length){this.inFlight+=e.events.length;try{await this.sendWithRetry(e)}finally{this.inFlight-=e.events.length}}}}async sendWithRetry(e){for(let t=0;t<=O.length&&!this.destroyed;t++){let r=new AbortController;this.controllers.add(r);let n,i=new Promise((l,a)=>{n=setTimeout(()=>{r.abort(),a(new Error("Collector transport timed out"))},this.transportTimeoutMs)}),d;try{if(await Promise.race([this.send(e,r.signal),i,this.destroySignal])===$||this.destroyed)return;this.sent+=e.events.length;return}catch(l){if(this.destroyed)return;let a=s(l,"status");if(!(typeof a!="number"||a===429||a>=500)||t===O.length)break;d=O[t]}finally{n&&clearTimeout(n),this.controllers.delete(r)}d!==void 0&&await this.wait(d)}this.destroyed||this.recordDrop("deliveryError",e.events.length)}async send(e,t){if(this.options.transport){await this.options.transport(e,{signal:t});return}let r=await window.fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),credentials:"omit",signal:t});if(!r.ok)throw new M(r.status)}wait(e){return new Promise(t=>{let r=()=>{clearTimeout(n),this.cancelWaits.delete(r),t()},n=setTimeout(r,e);this.cancelWaits.add(r)})}tryBeacon(){if(!(this.destroyed||this.options.transport||!this.endpoint||!this.queue.length))try{let e=new URL(this.endpoint);if(e.origin!==window.location.origin||e.search||e.hash||e.username||e.password||typeof navigator.sendBeacon!="function")return;let t=this.queue.slice(0,J);for(;t.length>0;){let n=JSON.stringify({schemaVersion:1,events:t});if(B(n)<=Y){navigator.sendBeacon(this.endpoint,new Blob([n],{type:"application/json"}))&&(this.queue.splice(0,t.length),this.sent+=t.length);return}t.pop()}}catch{}}},$=Symbol("destroyed"),A,N,D;function Q(o){D||(D=te()),D?.clients.add(o)}function ee(o){let e=D;e&&(e.clients.delete(o),e.clients.size||(e.cleanup(),D=void 0))}function V(o,e){let t=new Set,r=Object.getPrototypeOf(o);for(;r&&!t.has(r);){t.add(r);let n=Object.getOwnPropertyDescriptor(r,e);if(n)return n;r=Object.getPrototypeOf(r)}}function te(){let o,e,t,r,n,i,d,l;try{if(o=window.history,e=window.location.href,n=Object.getOwnPropertyDescriptor(o,"pushState"),i=Object.getOwnPropertyDescriptor(o,"replaceState"),d=n?void 0:V(o,"pushState"),l=i?void 0:V(o,"replaceState"),n&&!("value"in n)||i&&!("value"in i)||!n&&(!d||!("value"in d)||d.writable!==!0)||!i&&(!l||!("value"in l)||l.writable!==!0)||(t=n?n.value:o.pushState,r=i?i.value:o.replaceState,typeof t!="function"||typeof r!="function"))return;let b=y=>y?y.configurable===!0||y.writable===!0:Object.isExtensible(o);if(!b(n)||!b(i))return}catch{return}let a=new Set,u=b=>{try{let y=window.location.href;if(y===e)return;let T=e;e=y;for(let v of a)try{v.reportNavigation(T,y,b)}catch{}}catch{}},p=function(...b){let y=Reflect.apply(t,this,b);return u("pushState"),y},c=function(...b){let y=Reflect.apply(r,this,b);return u("replaceState"),y},f=()=>{u("popstate")},m=()=>{u("hashchange")},g=(b,y,T)=>{try{let v=Object.getOwnPropertyDescriptor(o,b);if(!v||!("value"in v)||v.value!==y)return;T?Object.defineProperty(o,b,T):Reflect.deleteProperty(o,b)}catch{}},E=!1,x=!1;try{Object.defineProperty(o,"pushState",{configurable:n?.configurable??!0,enumerable:n?.enumerable??!1,writable:n?.writable??!0,value:p}),E=!0,Object.defineProperty(o,"replaceState",{configurable:i?.configurable??!0,enumerable:i?.enumerable??!1,writable:i?.writable??!0,value:c}),x=!0,window.addEventListener("popstate",f),window.addEventListener("hashchange",m)}catch{try{window.removeEventListener("hashchange",m)}catch{}try{window.removeEventListener("popstate",f)}catch{}x&&g("replaceState",c,i),E&&g("pushState",p,n);return}return{clients:a,cleanup(){try{window.removeEventListener("popstate",f)}catch{}try{window.removeEventListener("hashchange",m)}catch{}g("pushState",p,n),g("replaceState",c,i)}}}function re(o){A||(A=ie()),A.clients.add(o)}function ne(o){let e=A;e&&(e.clients.delete(o),e.clients.size||(e.cleanup(),A=void 0))}function oe(o,e){let t;if(typeof Request<"u"&&o!==null&&typeof o=="object")if(o instanceof Request)t=s(o,"url");else try{t=Object.getOwnPropertyDescriptor(Request.prototype,"url")?.get?.call(o)}catch{}let r=s(e,"signal");return{url:t??w(o),method:w(s(e,"method")??(t===void 0?void 0:s(o,"method"))??"GET"),signal:r===void 0?t===void 0?void 0:s(o,"signal"):r}}function ie(){let o=new Set,e=window.fetch,t;typeof e=="function"&&(t=function(...p){if(!o.size)return Reflect.apply(e,this,p);let c=S(),f;try{f=oe(p[0],p[1])}catch{f={url:"",method:"GET"}}let m;try{m=Reflect.apply(e,this,p)}catch(g){if(!P(g,f.signal))for(let E of o)E.reportNetwork(f.method,f.url,void 0,S()-c,g);throw g}return m.then(g=>{try{let E=g.status;for(let x of o)x.reportNetwork(f.method,f.url,E,S()-c)}catch{}return g},g=>{if(!P(g,f.signal))for(let E of o)E.reportNetwork(f.method,f.url,void 0,S()-c,g);throw g})},window.fetch=t);let r=typeof XMLHttpRequest>"u"?void 0:XMLHttpRequest.prototype,n=r?.open,i=r?.send,d=new WeakMap,l=new WeakMap,a,u;return r&&n&&i&&(a=(function(...p){let c=Reflect.apply(n,this,p);l.get(this)?.();try{d.set(this,{method:w(p[0]),url:w(p[1])})}catch{}return c}),u=function(...p){if(!o.size)return Reflect.apply(i,this,p);let c=d.get(this);if(!c)return Reflect.apply(i,this,p);let f=S(),m=!1,g=!1,E=!1,x=()=>{m=!0},b=()=>{g=!0},y=()=>{this.removeEventListener("abort",x),this.removeEventListener("error",b),this.removeEventListener("timeout",b),this.removeEventListener("loadend",T),l.get(this)===y&&l.delete(this)},T=()=>{if(E=!0,y(),!m)try{let v=this.status;if(v===0&&!g){for(let j of o)j.reportZeroStatusCompletion(c.method,c.url,S()-f);return}for(let j of o)j.reportNetwork(c.method,c.url,v===0?void 0:v,S()-f)}catch{}};try{this.addEventListener("abort",x),this.addEventListener("error",b),this.addEventListener("timeout",b),this.addEventListener("loadend",T)}catch{return y(),Reflect.apply(i,this,p)}try{let v=Reflect.apply(i,this,p);return E||l.set(this,y),v}catch(v){throw y(),v}},r.open=a,r.send=u),{clients:o,cleanup(){t&&window.fetch===t&&(window.fetch=e),r&&a&&r.open===a&&(r.open=n),r&&u&&r.send===u&&(r.send=i)}}}function se(o){N||(N=ce()),N.clients.add(o)}function ae(o){let e=N;e&&(e.clients.delete(o),e.clients.size||(e.cleanup(),N=void 0))}function ce(){let o=new Set,e=console.error,t=function(...r){try{return Reflect.apply(e,this,r)}finally{for(let n of o)n.captureConsole(r)}};return console.error=t,{clients:o,cleanup(){console.error===t&&(console.error=e)}}}function pe(o){return new q(o)}export{pe as init};
4
+ `)}`}}cleanContext(e){if(!e||typeof e!="object")return;let t={},r;try{r=Object.keys(e)}catch{return}for(let n of r){if(Object.keys(t).length>=12)break;if(U.test(n))continue;let i=s(e,n),d=this.cleanText(n,80);typeof i=="string"?t[d]=this.cleanText(i,500):(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean"||i===null)&&(t[d]=i)}return Object.keys(t).length?t:void 0}cleanBreadcrumb(e,t){if(!e||typeof e!="object")return;let r=t??s(e,"occurredAt");if(typeof r!="string")return;try{if(new Date(r).toISOString()!==r)return}catch{return}let n=s(e,"category"),i=s(e,"message");if(n!==void 0&&typeof n!="string"||typeof i!="string")return;let d=this.cleanText(n??(t?"manual":""),k.category),l=this.cleanText(i,k.message);if(!d.trim()||!l.trim())return;let a=s(e,"data"),u={};if(a&&typeof a=="object"){let p;try{p=Object.keys(a)}catch{p=[]}for(let c of p){if(Object.keys(u).length>=k.dataKeys)break;if(U.test(c))continue;let f=this.cleanText(c,k.dataKey),m=s(a,c);typeof m=="string"?u[f]=this.cleanText(m,k.dataString):(typeof m=="number"&&Number.isFinite(m)||typeof m=="boolean"||m===null)&&(u[f]=m)}}return{occurredAt:r,category:d,message:l,...Object.keys(u).length?{data:u}:{}}}boundBreadcrumbs(e){for(;e.length>k.count||C(JSON.stringify(e))>k.bytes;)e.shift()}cleanBreadcrumbTrail(e){let t;try{if(!Array.isArray(e))return;t=e.length}catch{return}if(!Number.isSafeInteger(t)||t<0)return;let r=[];for(let n=Math.max(0,t-k.count);n<t;n++){let i=this.cleanBreadcrumb(s(e,n));i&&(r.push(i),this.boundBreadcrumbs(r))}return r.length?r:void 0}cleanNetwork(e){if(!e||typeof e!="object")return;let t=s(e,"status"),r=typeof t=="number"&&Number.isInteger(t)&&t>=100&&t<=599?t:void 0;return{method:this.cleanText(s(e,"method")??"GET",16).toUpperCase(),url:this.cleanUrl(s(e,"url")??""),...r===void 0?{}:{status:r},durationMs:T(s(e,"durationMs"),0,36e5,0)}}makeEvent(e,t,r={}){let n=s(navigator,"userAgent"),i=this.cleanContext(r.context),d;try{d=this.options.getContext?.()}catch{throw new L("Context resolver failed")}let l=this.cleanContext(d),a=this.cleanContext(this.options.context),u=i;if(l||a){u={...i};for(let c of[l,a])if(c)for(let f of Object.keys(c)){if(Object.keys(u).length>=12)break;Object.prototype.hasOwnProperty.call(u,f)||(u[f]=c[f])}}let p=this.cleanNetwork(r.network);return{schemaVersion:1,eventId:H(),project:this.cleanText(this.options.project,80),environment:this.cleanText(this.options.environment??"development",80),release:this.cleanText(this.options.release??"unknown",120),sdkVersion:"0.2.1",occurredAt:new Date().toISOString(),viewId:this.viewId,sequence:++this.sequence,elapsedMs:T(S()-this.startedAt,0,36e5,0),type:e,message:this.cleanText(t,1024),...r.name===void 0?{}:{name:this.cleanText(r.name,100)},...r.stack===void 0?{}:{stack:this.cleanText(r.stack,4096)},...r.componentStack===void 0?{}:{componentStack:this.cleanText(r.componentStack,2048)},page:this.cleanUrl(window.location.href),runtime:F.has(this.options.runtime)?this.options.runtime:"browser",...typeof n=="string"?{browser:this.cleanText(n,300)}:{},...u?{context:u}:{},...this.breadcrumbs.length?{breadcrumbs:this.breadcrumbs.map(c=>({...c,...c.data?{data:{...c.data}}:{}}))}:{},...p?{network:p}:{}}}sanitizeReplacement(e,t){let r=s(e,"type"),n=s(e,"runtime"),i=s(e,"name"),d=s(e,"stack"),l=s(e,"componentStack"),a=s(e,"browser"),u=this.cleanContext(s(e,"context")),p=this.cleanBreadcrumbTrail(s(e,"breadcrumbs")),c=this.cleanNetwork(s(e,"network"));return{...t,type:_.has(r)?r:t.type,message:this.cleanText(s(e,"message")??t.message,1024),...i===void 0?{name:t.name}:{name:this.cleanText(i,100)},...d===void 0?{stack:void 0}:{stack:this.cleanText(d,4096)},...l===void 0?{componentStack:t.componentStack}:{componentStack:this.cleanText(l,2048)},page:this.cleanUrl(s(e,"page")??t.page),runtime:F.has(n)?n:t.runtime,...a===void 0?{browser:t.browser}:{browser:this.cleanText(a,300)},...u?{context:u}:{context:void 0},...p?{breadcrumbs:p}:{breadcrumbs:void 0},...c?{network:c}:{network:void 0}}}admissionTime(){let e=S(),t=Number.isFinite(e)?Math.max(0,e,this.lastAdmissionClock??0):this.lastAdmissionClock??0;for(this.lastAdmissionClock=t;this.admittedAt.length&&t-this.admittedAt[0]>=6e4;)this.admittedAt.shift();return this.admittedAt.length<this.maxEventsPerMinute?t:void 0}enqueue(e){if(this.destroyed)return!1;if(this.maxEventsPerMinute!==void 0&&this.admissionTime()===void 0)return this.recordDrop("rateLimit"),!1;let t=e;if(this.options.beforeSend)try{let n={...e,context:e.context&&{...e.context},breadcrumbs:e.breadcrumbs?.map(d=>({...d,data:d.data&&{...d.data}})),network:e.network&&{...e.network}},i=this.options.beforeSend(n);if(i===!1||i===null)return this.filtered++,!1;t=this.sanitizeReplacement(i===void 0?n:i,e)}catch{return this.recordDrop("processingError"),!1}if(C(JSON.stringify(t))>q)return this.recordDrop("payloadTooLarge"),!1;let r=this.maxEventsPerMinute===void 0?void 0:this.admissionTime();return this.maxEventsPerMinute!==void 0&&r===void 0?(this.recordDrop("rateLimit"),!1):(this.queue.length>=this.maxQueueSize&&(this.queue.shift(),this.recordDrop("queueOverflow")),this.queue.push(t),r!==void 0&&this.admittedAt.push(r),this.queue.length>=this.maxQueueSize&&this.flush(),!0)}takeBatch(e=K,t=q){let r=[],n=C('{"schemaVersion":1,"events":[]}');for(;this.queue.length&&r.length<e;){let i=this.queue[0],d=C(JSON.stringify(i))+(r.length?1:0);if(r.length&&n+d>t)break;if(!r.length&&n+d>t){this.queue.shift(),this.recordDrop("payloadTooLarge");continue}r.push(this.queue.shift()),n+=d}return{schemaVersion:1,events:r}}async drain(){for(;!this.destroyed&&this.queue.length;){let e=this.takeBatch();if(e.events.length){this.inFlight+=e.events.length;try{await this.sendWithRetry(e)}finally{this.inFlight-=e.events.length}}}}async sendWithRetry(e){for(let t=0;t<=O.length&&!this.destroyed;t++){let r=new AbortController;this.controllers.add(r);let n,i=new Promise((l,a)=>{n=setTimeout(()=>{r.abort(),a(new Error("Collector transport timed out"))},this.transportTimeoutMs)}),d;try{if(await Promise.race([this.send(e,r.signal),i,this.destroySignal])===$||this.destroyed)return;this.sent+=e.events.length;return}catch(l){if(this.destroyed)return;let a=s(l,"status");if(!(typeof a!="number"||a===429||a>=500)||t===O.length)break;d=O[t]}finally{n&&clearTimeout(n),this.controllers.delete(r)}d!==void 0&&await this.wait(d)}this.destroyed||this.recordDrop("deliveryError",e.events.length)}async send(e,t){if(this.options.transport){await this.options.transport(e,{signal:t});return}let r=await window.fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),credentials:"omit",signal:t});if(!r.ok)throw new M(r.status)}wait(e){return new Promise(t=>{let r=()=>{clearTimeout(n),this.cancelWaits.delete(r),t()},n=setTimeout(r,e);this.cancelWaits.add(r)})}tryBeacon(){if(!(this.destroyed||this.options.transport||!this.endpoint||!this.queue.length))try{let e=new URL(this.endpoint);if(e.origin!==window.location.origin||e.search||e.hash||e.username||e.password||typeof navigator.sendBeacon!="function")return;let t=this.queue.slice(0,J);for(;t.length>0;){let n=JSON.stringify({schemaVersion:1,events:t});if(C(n)<=Y){navigator.sendBeacon(this.endpoint,new Blob([n],{type:"application/json"}))&&(this.queue.splice(0,t.length),this.sent+=t.length);return}t.pop()}}catch{}}},$=Symbol("destroyed"),A,N,D;function Q(o){D||(D=te()),D?.clients.add(o)}function ee(o){let e=D;e&&(e.clients.delete(o),e.clients.size||(e.cleanup(),D=void 0))}function V(o,e){let t=new Set,r=Object.getPrototypeOf(o);for(;r&&!t.has(r);){t.add(r);let n=Object.getOwnPropertyDescriptor(r,e);if(n)return n;r=Object.getPrototypeOf(r)}}function te(){let o,e,t,r,n,i,d,l;try{if(o=window.history,e=window.location.href,n=Object.getOwnPropertyDescriptor(o,"pushState"),i=Object.getOwnPropertyDescriptor(o,"replaceState"),d=n?void 0:V(o,"pushState"),l=i?void 0:V(o,"replaceState"),n&&!("value"in n)||i&&!("value"in i)||!n&&(!d||!("value"in d)||d.writable!==!0)||!i&&(!l||!("value"in l)||l.writable!==!0)||(t=n?n.value:o.pushState,r=i?i.value:o.replaceState,typeof t!="function"||typeof r!="function"))return;let b=y=>y?y.configurable===!0||y.writable===!0:Object.isExtensible(o);if(!b(n)||!b(i))return}catch{return}let a=new Set,u=b=>{try{let y=window.location.href;if(y===e)return;let B=e;e=y;for(let v of a)try{v.reportNavigation(B,y,b)}catch{}}catch{}},p=function(...b){let y=Reflect.apply(t,this,b);return u("pushState"),y},c=function(...b){let y=Reflect.apply(r,this,b);return u("replaceState"),y},f=()=>{u("popstate")},m=()=>{u("hashchange")},g=(b,y,B)=>{try{let v=Object.getOwnPropertyDescriptor(o,b);if(!v||!("value"in v)||v.value!==y)return;B?Object.defineProperty(o,b,B):Reflect.deleteProperty(o,b)}catch{}},E=!1,x=!1;try{Object.defineProperty(o,"pushState",{configurable:n?.configurable??!0,enumerable:n?.enumerable??!1,writable:n?.writable??!0,value:p}),E=!0,Object.defineProperty(o,"replaceState",{configurable:i?.configurable??!0,enumerable:i?.enumerable??!1,writable:i?.writable??!0,value:c}),x=!0,window.addEventListener("popstate",f),window.addEventListener("hashchange",m)}catch{try{window.removeEventListener("hashchange",m)}catch{}try{window.removeEventListener("popstate",f)}catch{}x&&g("replaceState",c,i),E&&g("pushState",p,n);return}return{clients:a,cleanup(){try{window.removeEventListener("popstate",f)}catch{}try{window.removeEventListener("hashchange",m)}catch{}g("pushState",p,n),g("replaceState",c,i)}}}function re(o){A||(A=ie()),A.clients.add(o)}function ne(o){let e=A;e&&(e.clients.delete(o),e.clients.size||(e.cleanup(),A=void 0))}function oe(o,e){let t;if(typeof Request<"u"&&o!==null&&typeof o=="object")if(o instanceof Request)t=s(o,"url");else try{t=Object.getOwnPropertyDescriptor(Request.prototype,"url")?.get?.call(o)}catch{}let r=s(e,"signal");return{url:t??w(o),method:w(s(e,"method")??(t===void 0?void 0:s(o,"method"))??"GET"),signal:r===void 0?t===void 0?void 0:s(o,"signal"):r}}function ie(){let o=new Set,e=window.fetch,t;typeof e=="function"&&(t=function(...p){if(!o.size)return Reflect.apply(e,this,p);let c=S(),f;try{f=oe(p[0],p[1])}catch{f={url:"",method:"GET"}}let m;try{m=Reflect.apply(e,this,p)}catch(g){if(!P(g,f.signal))for(let E of o)E.reportNetwork(f.method,f.url,void 0,S()-c,g);throw g}return m.then(g=>{try{let E=g.status;for(let x of o)x.reportNetwork(f.method,f.url,E,S()-c)}catch{}return g},g=>{if(!P(g,f.signal))for(let E of o)E.reportNetwork(f.method,f.url,void 0,S()-c,g);throw g})},window.fetch=t);let r=typeof XMLHttpRequest>"u"?void 0:XMLHttpRequest.prototype,n=r?.open,i=r?.send,d=new WeakMap,l=new WeakMap,a,u;return r&&n&&i&&(a=(function(...p){let c=Reflect.apply(n,this,p);l.get(this)?.();try{d.set(this,{method:w(p[0]),url:w(p[1])})}catch{}return c}),u=function(...p){if(!o.size)return Reflect.apply(i,this,p);let c=d.get(this);if(!c)return Reflect.apply(i,this,p);let f=S(),m=!1,g=!1,E=!1,x=()=>{m=!0},b=()=>{g=!0},y=()=>{this.removeEventListener("abort",x),this.removeEventListener("error",b),this.removeEventListener("timeout",b),this.removeEventListener("loadend",B),l.get(this)===y&&l.delete(this)},B=()=>{if(E=!0,y(),!m)try{let v=this.status;if(v===0&&!g){for(let j of o)j.reportZeroStatusCompletion(c.method,c.url,S()-f);return}for(let j of o)j.reportNetwork(c.method,c.url,v===0?void 0:v,S()-f)}catch{}};try{this.addEventListener("abort",x),this.addEventListener("error",b),this.addEventListener("timeout",b),this.addEventListener("loadend",B)}catch{return y(),Reflect.apply(i,this,p)}try{let v=Reflect.apply(i,this,p);return E||l.set(this,y),v}catch(v){throw y(),v}},r.open=a,r.send=u),{clients:o,cleanup(){t&&window.fetch===t&&(window.fetch=e),r&&a&&r.open===a&&(r.open=n),r&&u&&r.send===u&&(r.send=i)}}}function se(o){N||(N=ce()),N.clients.add(o)}function ae(o){let e=N;e&&(e.clients.delete(o),e.clients.size||(e.cleanup(),N=void 0))}function ce(){let o=new Set,e=console.error,t=function(...r){try{return Reflect.apply(e,this,r)}finally{for(let n of o)n.captureConsole(r)}};return console.error=t,{clients:o,cleanup(){console.error===t&&(console.error=e)}}}function pe(o){return new I(o)}export{pe as init};
5
5
  //# sourceMappingURL=index.js.map