@ihyeon/browser-error-log 0.1.20 → 0.1.21

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.ko.md CHANGED
@@ -65,6 +65,25 @@ try {
65
65
 
66
66
  선택적인 `@ihyeon/browser-error-log-react` 패키지는 Error Boundary를 제공합니다. 기본 SDK에는 React가 필요하지 않습니다. SSR에서 import·초기화할 수 있지만 서버 오류는 수집하지 않으므로 프레임워크의 브라우저/클라이언트 진입점에서 초기화하세요.
67
67
 
68
+ ## 연결된 원인 오류 수집
69
+
70
+ ```ts
71
+ const errorLog = init({
72
+ project: 'my-web',
73
+ endpoint: '/api/events',
74
+ captureErrorCause: true,
75
+ });
76
+
77
+ const cause = new TypeError('Invalid response');
78
+ errorLog.captureException(new Error('Dashboard could not load', { cause }));
79
+ ```
80
+
81
+ 선택 옵션으로 최대 4단계의 `cause` 객체를 따라가 이름·메시지·스택을 기존 `stack` 필드의 `Caused by:` 구간에 붙입니다. 바깥 오류의 이름과 메시지는 유지하며 원인별로 이벤트를 추가하거나 수집 한도를 더 쓰지 않습니다. 수동·전역·Promise·React 수집에 적용하고, console 수집이 켜져 있으면 기존처럼 같은 창의 첫 Error 인자에도 적용합니다. 자동 네트워크 오류 이벤트는 기존 메타데이터 수집 방식을 유지합니다.
82
+
83
+ 문자열 `message` 또는 `stack`이 있는 객체만 따라가며 다른 창에서 생성한 Error도 포함합니다. 원시 값 원인, 그 밖의 객체 데이터, `AggregateError.errors`는 펼치지 않습니다. 순환 참조나 읽을 수 없는 속성은 앱에 영향을 주지 않고 원인 정보 추적을 중단하거나 생략합니다. 기본값은 꺼짐이고 초기화 시 고정하며, 수집이 꺼져 있으면 `cause`를 읽지 않습니다.
84
+
85
+ 유효한 원인이 있으면 바깥 스택은 최대 2,048자, 각 원인 구간은 최대 480자를 사용하며 전체 스택은 기존 4,096자 안으로 제한합니다. 구간을 자르기 전에 기존 텍스트·URL 필터를 적용합니다. 프로토콜 필드나 수집기 갱신 없이 기존 뷰어의 스택 상세에서 볼 수 있습니다. 원인 메시지와 경로에도 민감정보가 있을 수 있으므로 앱별 필터를 검토한 뒤 켜세요. `beforeSend`에서 합쳐진 스택을 수정하거나 `delete event.stack`·`event.stack = undefined`로 제거하고 이벤트 전체를 제외할 수도 있습니다. URL 필터가 실패하면 필터링하지 않은 원인 정보를 보내지 않고 이벤트를 버립니다.
86
+
68
87
  ## 오류 전 작업 기록
69
88
 
70
89
  ```ts
package/README.md CHANGED
@@ -65,6 +65,25 @@ try {
65
65
 
66
66
  The optional `@ihyeon/browser-error-log-react` package provides an Error Boundary. The base SDK does not require React. Imports and initialization are safe during SSR but do not collect server-side errors; initialize in your framework's browser/client entry point.
67
67
 
68
+ ## Include linked error causes
69
+
70
+ ```ts
71
+ const errorLog = init({
72
+ project: 'my-web',
73
+ endpoint: '/api/events',
74
+ captureErrorCause: true,
75
+ });
76
+
77
+ const cause = new TypeError('Invalid response');
78
+ errorLog.captureException(new Error('Dashboard could not load', { cause }));
79
+ ```
80
+
81
+ This opt-in setting follows up to four linked `cause` objects and appends their names, messages, and available stacks as `Caused by:` sections in the existing `stack` field. The outer error keeps its original name and message; causes do not produce separate events or consume additional rate-limit capacity. Manual, global, promise, and React captures use this path. With console capture enabled, it also applies to the first existing same-window Error argument. Automatic network error events keep their existing metadata-only behavior.
82
+
83
+ Only objects with a string `message` or `stack` are followed, including Error objects from another window. Primitive causes, other object payloads, and `AggregateError.errors` are not expanded. Cycles and inaccessible properties stop or omit cause information without affecting the app. The option is disabled by default and is fixed at initialization; disabled capture does not read `cause`.
84
+
85
+ When a valid cause is present, the outer stack uses up to 2,048 characters and each cause section up to 480, within the existing 4,096-character total stack limit. The existing text/URL filters run before section clipping. No new protocol fields or collector upgrade are needed, and existing viewer stack details show the chain. Review application-specific filters before opting in: cause messages and paths can contain additional sensitive data. `beforeSend` can edit the combined stack, remove it with `delete event.stack` or `event.stack = undefined`, or reject the event. A failing URL sanitizer drops the event rather than sending unfiltered cause data.
86
+
68
87
  ## Record the steps before an error
69
88
 
70
89
  ```ts
package/dist/index.cjs CHANGED
@@ -1,2 +1,5 @@
1
- "use strict";var D=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var J=Object.prototype.hasOwnProperty;var Y=(n,e,t)=>e in n?D(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Z=(n,e)=>{for(var t in e)D(n,t,{get:e[t],enumerable:!0})},G=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of W(e))!J.call(n,i)&&i!==t&&D(n,i,{get:()=>e[i],enumerable:!(r=$(e,i))||r.enumerable});return n};var Q=n=>G(D({},"__esModule",{value:!0}),n);var u=(n,e,t)=>Y(n,typeof e!="symbol"?e+"":e,t);var ge={};Z(ge,{init:()=>me});module.exports=Q(ge);var k={count:20,bytes:12e3,category:40,message:256,dataKeys:6,dataKey:80,dataString:200};var ee=20,_=48e3,te=10,re=24e3,M=[250,500],H=/(?:password|passwd|token|secret|authorization|cookie|session|api.?key|credential|bearer|private.?key)/i,F=new Set(["javascript","promise","react","console","http","network","manual"]),z=new Set(["browser","webview-ios","webview-android","unknown"]),ne=0;function s(n,e){try{return n==null?void 0:Reflect.get(Object(n),e)}catch{return}}function w(n){try{return String(n)}catch{return"[unavailable]"}}function ie(n,e){return w(n).slice(0,e)}function S(){try{return performance.now()}catch{return Date.now()}}function V(){try{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch{}return`${Date.now().toString(36)}-${(++ne).toString(36)}-${Math.random().toString(36).slice(2,10)}`}function P(n,e){try{if(e?.aborted)return!0}catch{}return s(n,"name")==="AbortError"||s(n,"code")===20}function q(n){if(n==null)return{message:"Unknown error"};let e=s(n,"message"),t=s(n,"name"),r=s(n,"stack");return{message:e==null?w(n):w(e),...t==null?{}:{name:w(t)},...r==null?{}:{stack:w(r)}}}function B(n){return new TextEncoder().encode(n).length}function T(n,e,t,r){return typeof n=="number"&&Number.isFinite(n)?Math.min(t,Math.max(e,Math.floor(n))):r}var I=class extends Error{constructor(t){super(`Collector responded ${t}`);u(this,"status",t)}},C=class extends Error{},O=class extends Error{},U=class{constructor(e){u(this,"active");u(this,"endpoint");u(this,"options");u(this,"networkCaptureEnabled");u(this,"networkBreadcrumbCaptureEnabled");u(this,"navigationCaptureEnabled");u(this,"transportTimeoutMs");u(this,"startedAt",S());u(this,"viewId",V());u(this,"seenErrors",new WeakSet);u(this,"queue",[]);u(this,"breadcrumbs",[]);u(this,"maxQueueSize");u(this,"maxEventsPerMinute");u(this,"admittedAt",[]);u(this,"cancelWaits",new Set);u(this,"controllers",new Set);u(this,"destroySignal");u(this,"resolveDestroy");u(this,"interval");u(this,"flushing");u(this,"sequence",0);u(this,"inFlight",0);u(this,"sent",0);u(this,"dropped",0);u(this,"filtered",0);u(this,"deduplicated",0);u(this,"droppedByReason",{rateLimit:0,queueOverflow:0,payloadTooLarge:0,processingError:0,deliveryError:0,destroyed:0});u(this,"destroyed",!1);u(this,"lastAdmissionClock");u(this,"onError",e=>{try{let t=s(e,"filename"),r=s(e,"lineno"),i=s(e,"colno"),o={};typeof t=="string"&&t.trim()&&(o.filename=this.cleanUrl(t)),typeof r=="number"&&Number.isFinite(r)&&r>0&&(o.lineno=r),typeof i=="number"&&Number.isFinite(i)&&i>0&&(o.colno=i),this.captureException(s(e,"error")??s(e,"message")??"Script error",{type:"javascript",...Object.keys(o).length?{context:o}:{}})}catch{this.recordDrop("processingError")}});u(this,"onRejection",e=>{this.captureException(e.reason,{type:"promise"})});u(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.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),window.addEventListener("unhandledrejection",this.onRejection),document.addEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&ce(this),e.captureConsole===!0&&pe(this),this.navigationCaptureEnabled&&oe(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=q(e),i=F.has(t.type)?t.type:"manual",o=this.makeEvent(i,r.message,{name:r.name,stack:r.stack,componentStack:t.componentStack,context:t.context});this.enqueue(o)&&e!==null&&(typeof e=="object"||typeof e=="function")&&this.seenErrors.add(e)}catch(r){(r instanceof C||r instanceof O)&&this.recordDrop("processingError")}}reportNetwork(e,t,r,i,o,c=!0){if(this.destroyed||!this.active||this.isCollectorUrl(t)||P(o))return;let l=this.networkCaptureEnabled&&c;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 d=this.cleanBreadcrumbUrl(t);if(d.url){let a={method:this.cleanNetworkBreadcrumbMethod(e),url:d.url,durationMs:T(i,0,36e5,0)};r!==void 0&&Number.isInteger(r)&&r>=0&&r<=599&&(a.status=r),this.breadcrumbs.push({occurredAt:new Date().toISOString(),category:r===void 0?"network":"http",message:r===void 0?"Network failure":"HTTP response",data:a}),this.boundBreadcrumbs(this.breadcrumbs)}else if(l&&!d.safeForError){this.recordDrop("processingError");return}}catch{l&&this.recordDrop("processingError");return}if(l)try{let d={method:ie(e||"GET",16).toUpperCase(),url:t,status:r,durationMs:i},a=o===void 0?void 0:q(o),p=this.makeEvent(r===void 0?"network":"http",r===void 0?a?.message||"Network request failed":`HTTP ${r}`,{name:a?.name,network:d});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 i of e)try{if(i instanceof Error){r=q(i);break}}catch{}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 i=this.cleanBreadcrumbUrl(e).url,o=this.cleanBreadcrumbUrl(t).url;if(!i||!o||i===o)return;this.breadcrumbs.push({occurredAt:new Date().toISOString(),category:"navigation",message:"Navigation",data:{from:i,to:o,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),window.removeEventListener("unhandledrejection",this.onRejection),document.removeEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&ue(this),this.options.captureConsole===!0&&he(this),this.navigationCaptureEnabled&&se(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(X)}}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 C("URL sanitizer failed")}if(typeof t!="string"||!t)throw new C("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 i=w(e);return r&&(i=i.replace(/https?:\/\/[^\s<>"'()[\]]+/gi,o=>this.cleanUrl(o)),i=i.replace(/(^|[\s"'(\[=])((?:\/(?!\/)|\.{1,2}\/)[^\s<>"'()[\]?#]*[?#][^\s<>"'()[\]]+|[a-z][\w.-]*(?:\/[^\s<>"'()[\]?#]*)?(?:\?[a-z0-9_.-]+=[^\s<>"'()[\]]+|#[^\s<>"'()[\]]+)|\?[a-z0-9_.-]+=[^\s<>"'()[\]]+)/gi,(o,c,l)=>{let d=/[.,;!]+$/.exec(l)?.[0]??"",a=l.slice(0,l.length-d.length),p=this.options.sanitizeUrl?this.cleanUrl(a):a.startsWith("?")?"[redacted query]":this.cleanText(a.split(/[?#]/,1)[0],1024,!1);return`${c}${p}${d}`})),i.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)}cleanContext(e){if(!e||typeof e!="object")return;let t={},r;try{r=Object.keys(e)}catch{return}for(let i of r){if(Object.keys(t).length>=12)break;if(H.test(i))continue;let o=s(e,i),c=this.cleanText(i,80);typeof o=="string"?t[c]=this.cleanText(o,500):(typeof o=="number"&&Number.isFinite(o)||typeof o=="boolean"||o===null)&&(t[c]=o)}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 i=s(e,"category"),o=s(e,"message");if(i!==void 0&&typeof i!="string"||typeof o!="string")return;let c=this.cleanText(i??(t?"manual":""),k.category),l=this.cleanText(o,k.message);if(!c.trim()||!l.trim())return;let d=s(e,"data"),a={};if(d&&typeof d=="object"){let p;try{p=Object.keys(d)}catch{p=[]}for(let h of p){if(Object.keys(a).length>=k.dataKeys)break;if(H.test(h))continue;let f=this.cleanText(h,k.dataKey),g=s(d,h);typeof g=="string"?a[f]=this.cleanText(g,k.dataString):(typeof g=="number"&&Number.isFinite(g)||typeof g=="boolean"||g===null)&&(a[f]=g)}}return{occurredAt:r,category:c,message:l,...Object.keys(a).length?{data:a}:{}}}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 i=Math.max(0,t-k.count);i<t;i++){let o=this.cleanBreadcrumb(s(e,i));o&&(r.push(o),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 i=s(navigator,"userAgent"),o=this.cleanContext(r.context),c;try{c=this.options.getContext?.()}catch{throw new O("Context resolver failed")}let l=this.cleanContext(c),d=this.cleanContext(this.options.context),a=o;if(l||d){a={...o};for(let h of[l,d])if(h)for(let f of Object.keys(h)){if(Object.keys(a).length>=12)break;Object.prototype.hasOwnProperty.call(a,f)||(a[f]=h[f])}}let p=this.cleanNetwork(r.network);return{schemaVersion:1,eventId:V(),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.1.20",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:z.has(this.options.runtime)?this.options.runtime:"browser",...typeof i=="string"?{browser:this.cleanText(i,300)}:{},...a?{context:a}:{},...this.breadcrumbs.length?{breadcrumbs:this.breadcrumbs.map(h=>({...h,...h.data?{data:{...h.data}}:{}}))}:{},...p?{network:p}:{}}}sanitizeReplacement(e,t){let r=s(e,"type"),i=s(e,"runtime"),o=s(e,"name"),c=s(e,"stack"),l=s(e,"componentStack"),d=s(e,"browser"),a=this.cleanContext(s(e,"context")),p=this.cleanBreadcrumbTrail(s(e,"breadcrumbs")),h=this.cleanNetwork(s(e,"network"));return{...t,type:F.has(r)?r:t.type,message:this.cleanText(s(e,"message")??t.message,1024),...o===void 0?{name:t.name}:{name:this.cleanText(o,100)},...c===void 0?{stack:t.stack}:{stack:this.cleanText(c,4096)},...l===void 0?{componentStack:t.componentStack}:{componentStack:this.cleanText(l,2048)},page:this.cleanUrl(s(e,"page")??t.page),runtime:z.has(i)?i:t.runtime,...d===void 0?{browser:t.browser}:{browser:this.cleanText(d,300)},...a?{context:a}:{context:void 0},...p?{breadcrumbs:p}:{breadcrumbs:void 0},...h?{network:h}:{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 i={...e,context:e.context&&{...e.context},breadcrumbs:e.breadcrumbs?.map(c=>({...c,data:c.data&&{...c.data}})),network:e.network&&{...e.network}},o=this.options.beforeSend(i);if(o===!1||o===null)return this.filtered++,!1;t=this.sanitizeReplacement(o===void 0?i:o,e)}catch{return this.recordDrop("processingError"),!1}if(B(JSON.stringify(t))>_)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=ee,t=_){let r=[],i=B('{"schemaVersion":1,"events":[]}');for(;this.queue.length&&r.length<e;){let o=this.queue[0],c=B(JSON.stringify(o))+(r.length?1:0);if(r.length&&i+c>t)break;if(!r.length&&i+c>t){this.queue.shift(),this.recordDrop("payloadTooLarge");continue}r.push(this.queue.shift()),i+=c}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<=M.length&&!this.destroyed;t++){let r=new AbortController;this.controllers.add(r);let i,o=new Promise((l,d)=>{i=setTimeout(()=>{r.abort(),d(new Error("Collector transport timed out"))},this.transportTimeoutMs)}),c;try{if(await Promise.race([this.send(e,r.signal),o,this.destroySignal])===X||this.destroyed)return;this.sent+=e.events.length;return}catch(l){if(this.destroyed)return;let d=s(l,"status");if(!(typeof d!="number"||d===429||d>=500)||t===M.length)break;c=M[t]}finally{i&&clearTimeout(i),this.controllers.delete(r)}c!==void 0&&await this.wait(c)}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 I(r.status)}wait(e){return new Promise(t=>{let r=()=>{clearTimeout(i),this.cancelWaits.delete(r),t()},i=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,te);for(;t.length>0;){let i=JSON.stringify({schemaVersion:1,events:t});if(B(i)<=re){navigator.sendBeacon(this.endpoint,new Blob([i],{type:"application/json"}))&&(this.queue.splice(0,t.length),this.sent+=t.length);return}t.pop()}}catch{}}},X=Symbol("destroyed"),L,A,N;function oe(n){N||(N=ae()),N?.clients.add(n)}function se(n){let e=N;e&&(e.clients.delete(n),e.clients.size||(e.cleanup(),N=void 0))}function K(n,e){let t=new Set,r=Object.getPrototypeOf(n);for(;r&&!t.has(r);){t.add(r);let i=Object.getOwnPropertyDescriptor(r,e);if(i)return i;r=Object.getPrototypeOf(r)}}function ae(){let n,e,t,r,i,o,c,l;try{if(n=window.history,e=window.location.href,i=Object.getOwnPropertyDescriptor(n,"pushState"),o=Object.getOwnPropertyDescriptor(n,"replaceState"),c=i?void 0:K(n,"pushState"),l=o?void 0:K(n,"replaceState"),i&&!("value"in i)||o&&!("value"in o)||!i&&(!c||!("value"in c)||c.writable!==!0)||!o&&(!l||!("value"in l)||l.writable!==!0)||(t=i?i.value:n.pushState,r=o?o.value:n.replaceState,typeof t!="function"||typeof r!="function"))return;let b=m=>m?m.configurable===!0||m.writable===!0:Object.isExtensible(n);if(!b(i)||!b(o))return}catch{return}let d=new Set,a=b=>{try{let m=window.location.href;if(m===e)return;let x=e;e=m;for(let v of d)try{v.reportNavigation(x,m,b)}catch{}}catch{}},p=function(...b){let m=Reflect.apply(t,this,b);return a("pushState"),m},h=function(...b){let m=Reflect.apply(r,this,b);return a("replaceState"),m},f=()=>{a("popstate")},g=()=>{a("hashchange")},y=(b,m,x)=>{try{let v=Object.getOwnPropertyDescriptor(n,b);if(!v||!("value"in v)||v.value!==m)return;x?Object.defineProperty(n,b,x):Reflect.deleteProperty(n,b)}catch{}},E=!1,R=!1;try{Object.defineProperty(n,"pushState",{configurable:i?.configurable??!0,enumerable:i?.enumerable??!1,writable:i?.writable??!0,value:p}),E=!0,Object.defineProperty(n,"replaceState",{configurable:o?.configurable??!0,enumerable:o?.enumerable??!1,writable:o?.writable??!0,value:h}),R=!0,window.addEventListener("popstate",f),window.addEventListener("hashchange",g)}catch{try{window.removeEventListener("hashchange",g)}catch{}try{window.removeEventListener("popstate",f)}catch{}R&&y("replaceState",h,o),E&&y("pushState",p,i);return}return{clients:d,cleanup(){try{window.removeEventListener("popstate",f)}catch{}try{window.removeEventListener("hashchange",g)}catch{}y("pushState",p,i),y("replaceState",h,o)}}}function ce(n){L||(L=le()),L.clients.add(n)}function ue(n){let e=L;e&&(e.clients.delete(n),e.clients.size||(e.cleanup(),L=void 0))}function de(n,e){let t;if(typeof Request<"u"&&n!==null&&typeof n=="object")if(n instanceof Request)t=s(n,"url");else try{t=Object.getOwnPropertyDescriptor(Request.prototype,"url")?.get?.call(n)}catch{}let r=s(e,"signal");return{url:t??w(n),method:w(s(e,"method")??(t===void 0?void 0:s(n,"method"))??"GET"),signal:r===void 0?t===void 0?void 0:s(n,"signal"):r}}function le(){let n=new Set,e=window.fetch,t;typeof e=="function"&&(t=function(...p){if(!n.size)return Reflect.apply(e,this,p);let h=S(),f;try{f=de(p[0],p[1])}catch{f={url:"",method:"GET"}}let g;try{g=Reflect.apply(e,this,p)}catch(y){if(!P(y,f.signal))for(let E of n)E.reportNetwork(f.method,f.url,void 0,S()-h,y);throw y}return g.then(y=>{try{let E=y.status;for(let R of n)R.reportNetwork(f.method,f.url,E,S()-h)}catch{}return y},y=>{if(!P(y,f.signal))for(let E of n)E.reportNetwork(f.method,f.url,void 0,S()-h,y);throw y})},window.fetch=t);let r=typeof XMLHttpRequest>"u"?void 0:XMLHttpRequest.prototype,i=r?.open,o=r?.send,c=new WeakMap,l=new WeakMap,d,a;return r&&i&&o&&(d=(function(...p){let h=Reflect.apply(i,this,p);l.get(this)?.();try{c.set(this,{method:w(p[0]),url:w(p[1])})}catch{}return h}),a=function(...p){if(!n.size)return Reflect.apply(o,this,p);let h=c.get(this);if(!h)return Reflect.apply(o,this,p);let f=S(),g=!1,y=!1,E=!1,R=()=>{g=!0},b=()=>{y=!0},m=()=>{this.removeEventListener("abort",R),this.removeEventListener("error",b),this.removeEventListener("timeout",b),this.removeEventListener("loadend",x),l.get(this)===m&&l.delete(this)},x=()=>{if(E=!0,m(),!g)try{let v=this.status;if(v===0&&!y){for(let j of n)j.reportZeroStatusCompletion(h.method,h.url,S()-f);return}for(let j of n)j.reportNetwork(h.method,h.url,v===0?void 0:v,S()-f)}catch{}};try{this.addEventListener("abort",R),this.addEventListener("error",b),this.addEventListener("timeout",b),this.addEventListener("loadend",x)}catch{return m(),Reflect.apply(o,this,p)}try{let v=Reflect.apply(o,this,p);return E||l.set(this,m),v}catch(v){throw m(),v}},r.open=d,r.send=a),{clients:n,cleanup(){t&&window.fetch===t&&(window.fetch=e),r&&d&&r.open===d&&(r.open=i),r&&a&&r.send===a&&(r.send=o)}}}function pe(n){A||(A=fe()),A.clients.add(n)}function he(n){let e=A;e&&(e.clients.delete(n),e.clients.size||(e.cleanup(),A=void 0))}function fe(){let n=new Set,e=console.error,t=function(...r){try{return Reflect.apply(e,this,r)}finally{for(let i of n)i.captureConsole(r)}};return console.error=t,{clients:n,cleanup(){console.error===t&&(console.error=e)}}}function me(n){return new U(n)}
1
+ "use strict";var D=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var J=Object.prototype.hasOwnProperty;var Y=(n,e,t)=>e in n?D(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Z=(n,e)=>{for(var t in e)D(n,t,{get:e[t],enumerable:!0})},G=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of W(e))!J.call(n,i)&&i!==t&&D(n,i,{get:()=>e[i],enumerable:!(r=K(e,i))||r.enumerable});return n};var Q=n=>G(D({},"__esModule",{value:!0}),n);var d=(n,e,t)=>Y(n,typeof e!="symbol"?e+"":e,t);var ge={};Z(ge,{init:()=>me});module.exports=Q(ge);var k={count:20,bytes:12e3,category:40,message:256,dataKeys:6,dataKey:80,dataString:200};var ee=20,U=48e3,te=10,re=24e3,M=[250,500],_=/(?:password|passwd|token|secret|authorization|cookie|session|api.?key|credential|bearer|private.?key)/i,F=new Set(["javascript","promise","react","console","http","network","manual"]),H=new Set(["browser","webview-ios","webview-android","unknown"]),ne=0;function a(n,e){try{return n==null?void 0:Reflect.get(Object(n),e)}catch{return}}function w(n){try{return String(n)}catch{return"[unavailable]"}}function ie(n,e){return w(n).slice(0,e)}function S(){try{return performance.now()}catch{return Date.now()}}function z(){try{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch{}return`${Date.now().toString(36)}-${(++ne).toString(36)}-${Math.random().toString(36).slice(2,10)}`}function P(n,e){try{if(e?.aborted)return!0}catch{}return a(n,"name")==="AbortError"||a(n,"code")===20}function $(n){if(n==null)return{message:"Unknown error"};let e=a(n,"message"),t=a(n,"name"),r=a(n,"stack");return{message:e==null?w(n):w(e),...t==null?{}:{name:w(t)},...r==null?{}:{stack:w(r)}}}function C(n){return new TextEncoder().encode(n).length}function T(n,e,t,r){return typeof n=="number"&&Number.isFinite(n)?Math.min(t,Math.max(e,Math.floor(n))):r}var q=class extends Error{constructor(t){super(`Collector responded ${t}`);d(this,"status",t)}},B=class extends Error{},j=class extends Error{},I=class{constructor(e){d(this,"active");d(this,"endpoint");d(this,"options");d(this,"networkCaptureEnabled");d(this,"networkBreadcrumbCaptureEnabled");d(this,"navigationCaptureEnabled");d(this,"captureErrorCause");d(this,"transportTimeoutMs");d(this,"startedAt",S());d(this,"viewId",z());d(this,"seenErrors",new WeakSet);d(this,"queue",[]);d(this,"breadcrumbs",[]);d(this,"maxQueueSize");d(this,"maxEventsPerMinute");d(this,"admittedAt",[]);d(this,"cancelWaits",new Set);d(this,"controllers",new Set);d(this,"destroySignal");d(this,"resolveDestroy");d(this,"interval");d(this,"flushing");d(this,"sequence",0);d(this,"inFlight",0);d(this,"sent",0);d(this,"dropped",0);d(this,"filtered",0);d(this,"deduplicated",0);d(this,"droppedByReason",{rateLimit:0,queueOverflow:0,payloadTooLarge:0,processingError:0,deliveryError:0,destroyed:0});d(this,"destroyed",!1);d(this,"lastAdmissionClock");d(this,"onError",e=>{try{let t=a(e,"filename"),r=a(e,"lineno"),i=a(e,"colno"),o={};typeof t=="string"&&t.trim()&&(o.filename=this.cleanUrl(t)),typeof r=="number"&&Number.isFinite(r)&&r>0&&(o.lineno=r),typeof i=="number"&&Number.isFinite(i)&&i>0&&(o.colno=i),this.captureException(a(e,"error")??a(e,"message")??"Script error",{type:"javascript",...Object.keys(o).length?{context:o}:{}})}catch{this.recordDrop("processingError")}});d(this,"onRejection",e=>{this.captureException(e.reason,{type:"promise"})});d(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.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),window.addEventListener("unhandledrejection",this.onRejection),document.addEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&ce(this),e.captureConsole===!0&&pe(this),this.navigationCaptureEnabled&&oe(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),i=F.has(t.type)?t.type:"manual",o=this.makeEvent(i,r.message,{name:r.name,stack:r.stack,componentStack:t.componentStack,context:t.context});this.enqueue(o)&&e!==null&&(typeof e=="object"||typeof e=="function")&&this.seenErrors.add(e)}catch(r){(r instanceof B||r instanceof j)&&this.recordDrop("processingError")}}reportNetwork(e,t,r,i,o,u=!0){if(this.destroyed||!this.active||this.isCollectorUrl(t)||P(o))return;let l=this.networkCaptureEnabled&&u;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 s=this.cleanBreadcrumbUrl(t);if(s.url){let c={method:this.cleanNetworkBreadcrumbMethod(e),url:s.url,durationMs:T(i,0,36e5,0)};r!==void 0&&Number.isInteger(r)&&r>=0&&r<=599&&(c.status=r),this.breadcrumbs.push({occurredAt:new Date().toISOString(),category:r===void 0?"network":"http",message:r===void 0?"Network failure":"HTTP response",data:c}),this.boundBreadcrumbs(this.breadcrumbs)}else if(l&&!s.safeForError){this.recordDrop("processingError");return}}catch{l&&this.recordDrop("processingError");return}if(l)try{let s={method:ie(e||"GET",16).toUpperCase(),url:t,status:r,durationMs:i},c=o===void 0?void 0:$(o),p=this.makeEvent(r===void 0?"network":"http",r===void 0?c?.message||"Network request failed":`HTTP ${r}`,{name:c?.name,network:s});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 i of e){let o=!1;try{o=i instanceof Error}catch{}if(o){r=this.exceptionFields(i);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 i=this.cleanBreadcrumbUrl(e).url,o=this.cleanBreadcrumbUrl(t).url;if(!i||!o||i===o)return;this.breadcrumbs.push({occurredAt:new Date().toISOString(),category:"navigation",message:"Navigation",data:{from:i,to:o,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),window.removeEventListener("unhandledrejection",this.onRejection),document.removeEventListener("visibilitychange",this.onVisibility),(this.networkCaptureEnabled||this.networkBreadcrumbCaptureEnabled)&&ue(this),this.options.captureConsole===!0&&he(this),this.navigationCaptureEnabled&&se(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(V)}}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 B("URL sanitizer failed")}if(typeof t!="string"||!t)throw new B("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 i=w(e);return r&&(i=i.replace(/https?:\/\/[^\s<>"'()[\]]+/gi,o=>this.cleanUrl(o)),i=i.replace(/(^|[\s"'(\[=])((?:\/(?!\/)|\.{1,2}\/)[^\s<>"'()[\]?#]*[?#][^\s<>"'()[\]]+|[a-z][\w.-]*(?:\/[^\s<>"'()[\]?#]*)?(?:\?[a-z0-9_.-]+=[^\s<>"'()[\]]+|#[^\s<>"'()[\]]+)|\?[a-z0-9_.-]+=[^\s<>"'()[\]]+)/gi,(o,u,l)=>{let s=/[.,;!]+$/.exec(l)?.[0]??"",c=l.slice(0,l.length-s.length),p=this.options.sanitizeUrl?this.cleanUrl(c):c.startsWith("?")?"[redacted query]":this.cleanText(c.split(/[?#]/,1)[0],1024,!1);return`${u}${p}${s}`})),i.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=$(e);if(!this.captureErrorCause||e===null||typeof e!="object"&&typeof e!="function")return t;let r=new WeakSet([e]),i=[],o=e;for(let l=0;l<4;l++){let s=a(o,"cause");if(s===null||typeof s!="object"&&typeof s!="function"||r.has(s))break;r.add(s);let c=a(s,"message"),p=a(s,"stack");if(typeof c!="string"&&typeof p!="string")break;let h=a(s,"name"),f=this.cleanText(typeof h=="string"?h:"Error",100),g=typeof c=="string"?this.cleanText(c,256):"",m=typeof p=="string"?this.cleanText(p,480):"";i.push(`Caused by: ${f}: ${g}${m?`
2
+ ${m}`:""}`.slice(0,480)),o=s}if(!i.length)return t;let u=t.stack===void 0?`${this.cleanText(t.name??"Error",100)}: ${this.cleanText(t.message,256)}`:this.cleanText(t.stack,2048);return{...t,stack:`${u}
3
+ ${i.join(`
4
+ `)}`}}cleanContext(e){if(!e||typeof e!="object")return;let t={},r;try{r=Object.keys(e)}catch{return}for(let i of r){if(Object.keys(t).length>=12)break;if(_.test(i))continue;let o=a(e,i),u=this.cleanText(i,80);typeof o=="string"?t[u]=this.cleanText(o,500):(typeof o=="number"&&Number.isFinite(o)||typeof o=="boolean"||o===null)&&(t[u]=o)}return Object.keys(t).length?t:void 0}cleanBreadcrumb(e,t){if(!e||typeof e!="object")return;let r=t??a(e,"occurredAt");if(typeof r!="string")return;try{if(new Date(r).toISOString()!==r)return}catch{return}let i=a(e,"category"),o=a(e,"message");if(i!==void 0&&typeof i!="string"||typeof o!="string")return;let u=this.cleanText(i??(t?"manual":""),k.category),l=this.cleanText(o,k.message);if(!u.trim()||!l.trim())return;let s=a(e,"data"),c={};if(s&&typeof s=="object"){let p;try{p=Object.keys(s)}catch{p=[]}for(let h of p){if(Object.keys(c).length>=k.dataKeys)break;if(_.test(h))continue;let f=this.cleanText(h,k.dataKey),g=a(s,h);typeof g=="string"?c[f]=this.cleanText(g,k.dataString):(typeof g=="number"&&Number.isFinite(g)||typeof g=="boolean"||g===null)&&(c[f]=g)}}return{occurredAt:r,category:u,message:l,...Object.keys(c).length?{data:c}:{}}}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 i=Math.max(0,t-k.count);i<t;i++){let o=this.cleanBreadcrumb(a(e,i));o&&(r.push(o),this.boundBreadcrumbs(r))}return r.length?r:void 0}cleanNetwork(e){if(!e||typeof e!="object")return;let t=a(e,"status"),r=typeof t=="number"&&Number.isInteger(t)&&t>=100&&t<=599?t:void 0;return{method:this.cleanText(a(e,"method")??"GET",16).toUpperCase(),url:this.cleanUrl(a(e,"url")??""),...r===void 0?{}:{status:r},durationMs:T(a(e,"durationMs"),0,36e5,0)}}makeEvent(e,t,r={}){let i=a(navigator,"userAgent"),o=this.cleanContext(r.context),u;try{u=this.options.getContext?.()}catch{throw new j("Context resolver failed")}let l=this.cleanContext(u),s=this.cleanContext(this.options.context),c=o;if(l||s){c={...o};for(let h of[l,s])if(h)for(let f of Object.keys(h)){if(Object.keys(c).length>=12)break;Object.prototype.hasOwnProperty.call(c,f)||(c[f]=h[f])}}let p=this.cleanNetwork(r.network);return{schemaVersion:1,eventId:z(),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.1.21",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:H.has(this.options.runtime)?this.options.runtime:"browser",...typeof i=="string"?{browser:this.cleanText(i,300)}:{},...c?{context:c}:{},...this.breadcrumbs.length?{breadcrumbs:this.breadcrumbs.map(h=>({...h,...h.data?{data:{...h.data}}:{}}))}:{},...p?{network:p}:{}}}sanitizeReplacement(e,t){let r=a(e,"type"),i=a(e,"runtime"),o=a(e,"name"),u=a(e,"stack"),l=a(e,"componentStack"),s=a(e,"browser"),c=this.cleanContext(a(e,"context")),p=this.cleanBreadcrumbTrail(a(e,"breadcrumbs")),h=this.cleanNetwork(a(e,"network"));return{...t,type:F.has(r)?r:t.type,message:this.cleanText(a(e,"message")??t.message,1024),...o===void 0?{name:t.name}:{name:this.cleanText(o,100)},...u===void 0?{stack:void 0}:{stack:this.cleanText(u,4096)},...l===void 0?{componentStack:t.componentStack}:{componentStack:this.cleanText(l,2048)},page:this.cleanUrl(a(e,"page")??t.page),runtime:H.has(i)?i:t.runtime,...s===void 0?{browser:t.browser}:{browser:this.cleanText(s,300)},...c?{context:c}:{context:void 0},...p?{breadcrumbs:p}:{breadcrumbs:void 0},...h?{network:h}:{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 i={...e,context:e.context&&{...e.context},breadcrumbs:e.breadcrumbs?.map(u=>({...u,data:u.data&&{...u.data}})),network:e.network&&{...e.network}},o=this.options.beforeSend(i);if(o===!1||o===null)return this.filtered++,!1;t=this.sanitizeReplacement(o===void 0?i:o,e)}catch{return this.recordDrop("processingError"),!1}if(C(JSON.stringify(t))>U)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=ee,t=U){let r=[],i=C('{"schemaVersion":1,"events":[]}');for(;this.queue.length&&r.length<e;){let o=this.queue[0],u=C(JSON.stringify(o))+(r.length?1:0);if(r.length&&i+u>t)break;if(!r.length&&i+u>t){this.queue.shift(),this.recordDrop("payloadTooLarge");continue}r.push(this.queue.shift()),i+=u}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<=M.length&&!this.destroyed;t++){let r=new AbortController;this.controllers.add(r);let i,o=new Promise((l,s)=>{i=setTimeout(()=>{r.abort(),s(new Error("Collector transport timed out"))},this.transportTimeoutMs)}),u;try{if(await Promise.race([this.send(e,r.signal),o,this.destroySignal])===V||this.destroyed)return;this.sent+=e.events.length;return}catch(l){if(this.destroyed)return;let s=a(l,"status");if(!(typeof s!="number"||s===429||s>=500)||t===M.length)break;u=M[t]}finally{i&&clearTimeout(i),this.controllers.delete(r)}u!==void 0&&await this.wait(u)}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 q(r.status)}wait(e){return new Promise(t=>{let r=()=>{clearTimeout(i),this.cancelWaits.delete(r),t()},i=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,te);for(;t.length>0;){let i=JSON.stringify({schemaVersion:1,events:t});if(C(i)<=re){navigator.sendBeacon(this.endpoint,new Blob([i],{type:"application/json"}))&&(this.queue.splice(0,t.length),this.sent+=t.length);return}t.pop()}}catch{}}},V=Symbol("destroyed"),L,A,N;function oe(n){N||(N=ae()),N?.clients.add(n)}function se(n){let e=N;e&&(e.clients.delete(n),e.clients.size||(e.cleanup(),N=void 0))}function X(n,e){let t=new Set,r=Object.getPrototypeOf(n);for(;r&&!t.has(r);){t.add(r);let i=Object.getOwnPropertyDescriptor(r,e);if(i)return i;r=Object.getPrototypeOf(r)}}function ae(){let n,e,t,r,i,o,u,l;try{if(n=window.history,e=window.location.href,i=Object.getOwnPropertyDescriptor(n,"pushState"),o=Object.getOwnPropertyDescriptor(n,"replaceState"),u=i?void 0:X(n,"pushState"),l=o?void 0:X(n,"replaceState"),i&&!("value"in i)||o&&!("value"in o)||!i&&(!u||!("value"in u)||u.writable!==!0)||!o&&(!l||!("value"in l)||l.writable!==!0)||(t=i?i.value:n.pushState,r=o?o.value:n.replaceState,typeof t!="function"||typeof r!="function"))return;let b=y=>y?y.configurable===!0||y.writable===!0:Object.isExtensible(n);if(!b(i)||!b(o))return}catch{return}let s=new Set,c=b=>{try{let y=window.location.href;if(y===e)return;let R=e;e=y;for(let v of s)try{v.reportNavigation(R,y,b)}catch{}}catch{}},p=function(...b){let y=Reflect.apply(t,this,b);return c("pushState"),y},h=function(...b){let y=Reflect.apply(r,this,b);return c("replaceState"),y},f=()=>{c("popstate")},g=()=>{c("hashchange")},m=(b,y,R)=>{try{let v=Object.getOwnPropertyDescriptor(n,b);if(!v||!("value"in v)||v.value!==y)return;R?Object.defineProperty(n,b,R):Reflect.deleteProperty(n,b)}catch{}},E=!1,x=!1;try{Object.defineProperty(n,"pushState",{configurable:i?.configurable??!0,enumerable:i?.enumerable??!1,writable:i?.writable??!0,value:p}),E=!0,Object.defineProperty(n,"replaceState",{configurable:o?.configurable??!0,enumerable:o?.enumerable??!1,writable:o?.writable??!0,value:h}),x=!0,window.addEventListener("popstate",f),window.addEventListener("hashchange",g)}catch{try{window.removeEventListener("hashchange",g)}catch{}try{window.removeEventListener("popstate",f)}catch{}x&&m("replaceState",h,o),E&&m("pushState",p,i);return}return{clients:s,cleanup(){try{window.removeEventListener("popstate",f)}catch{}try{window.removeEventListener("hashchange",g)}catch{}m("pushState",p,i),m("replaceState",h,o)}}}function ce(n){L||(L=le()),L.clients.add(n)}function ue(n){let e=L;e&&(e.clients.delete(n),e.clients.size||(e.cleanup(),L=void 0))}function de(n,e){let t;if(typeof Request<"u"&&n!==null&&typeof n=="object")if(n instanceof Request)t=a(n,"url");else try{t=Object.getOwnPropertyDescriptor(Request.prototype,"url")?.get?.call(n)}catch{}let r=a(e,"signal");return{url:t??w(n),method:w(a(e,"method")??(t===void 0?void 0:a(n,"method"))??"GET"),signal:r===void 0?t===void 0?void 0:a(n,"signal"):r}}function le(){let n=new Set,e=window.fetch,t;typeof e=="function"&&(t=function(...p){if(!n.size)return Reflect.apply(e,this,p);let h=S(),f;try{f=de(p[0],p[1])}catch{f={url:"",method:"GET"}}let g;try{g=Reflect.apply(e,this,p)}catch(m){if(!P(m,f.signal))for(let E of n)E.reportNetwork(f.method,f.url,void 0,S()-h,m);throw m}return g.then(m=>{try{let E=m.status;for(let x of n)x.reportNetwork(f.method,f.url,E,S()-h)}catch{}return m},m=>{if(!P(m,f.signal))for(let E of n)E.reportNetwork(f.method,f.url,void 0,S()-h,m);throw m})},window.fetch=t);let r=typeof XMLHttpRequest>"u"?void 0:XMLHttpRequest.prototype,i=r?.open,o=r?.send,u=new WeakMap,l=new WeakMap,s,c;return r&&i&&o&&(s=(function(...p){let h=Reflect.apply(i,this,p);l.get(this)?.();try{u.set(this,{method:w(p[0]),url:w(p[1])})}catch{}return h}),c=function(...p){if(!n.size)return Reflect.apply(o,this,p);let h=u.get(this);if(!h)return Reflect.apply(o,this,p);let f=S(),g=!1,m=!1,E=!1,x=()=>{g=!0},b=()=>{m=!0},y=()=>{this.removeEventListener("abort",x),this.removeEventListener("error",b),this.removeEventListener("timeout",b),this.removeEventListener("loadend",R),l.get(this)===y&&l.delete(this)},R=()=>{if(E=!0,y(),!g)try{let v=this.status;if(v===0&&!m){for(let O of n)O.reportZeroStatusCompletion(h.method,h.url,S()-f);return}for(let O of n)O.reportNetwork(h.method,h.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",R)}catch{return y(),Reflect.apply(o,this,p)}try{let v=Reflect.apply(o,this,p);return E||l.set(this,y),v}catch(v){throw y(),v}},r.open=s,r.send=c),{clients:n,cleanup(){t&&window.fetch===t&&(window.fetch=e),r&&s&&r.open===s&&(r.open=i),r&&c&&r.send===c&&(r.send=o)}}}function pe(n){A||(A=fe()),A.clients.add(n)}function he(n){let e=A;e&&(e.clients.delete(n),e.clients.size||(e.cleanup(),A=void 0))}function fe(){let n=new Set,e=console.error,t=function(...r){try{return Reflect.apply(e,this,r)}finally{for(let i of n)i.captureConsole(r)}};return console.error=t,{clients:n,cleanup(){console.error===t&&(console.error=e)}}}function me(n){return new I(n)}
2
5
  //# sourceMappingURL=index.cjs.map