@bluewhaleops/browser 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-SJIZN76S.js +2 -0
- package/dist/chunk-SJIZN76S.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/web-vitals-FH47FXFS.js +2 -0
- package/dist/web-vitals-FH47FXFS.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var f=Object.defineProperty,g=Object.defineProperties;var h=Object.getOwnPropertyDescriptors;var d=Object.getOwnPropertySymbols;var i=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var e=(c,a,b)=>a in c?f(c,a,{enumerable:!0,configurable:!0,writable:!0,value:b}):c[a]=b,k=(c,a)=>{for(var b in a||(a={}))i.call(a,b)&&e(c,b,a[b]);if(d)for(var b of d(a))j.call(a,b)&&e(c,b,a[b]);return c},l=(c,a)=>g(c,h(a));export{k as a,l as b};
|
|
2
|
+
//# sourceMappingURL=chunk-SJIZN76S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var f=Object.defineProperty,b=Object.defineProperties,E=Object.getOwnPropertyDescriptor,B=Object.getOwnPropertyDescriptors,k=Object.getOwnPropertyNames,v=Object.getOwnPropertySymbols;var y=Object.prototype.hasOwnProperty,S=Object.prototype.propertyIsEnumerable;var w=(r,e,t)=>e in r?f(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,u=(r,e)=>{for(var t in e||(e={}))y.call(e,t)&&w(r,t,e[t]);if(v)for(var t of v(e))S.call(e,t)&&w(r,t,e[t]);return r},h=(r,e)=>b(r,B(e));var x=(r,e)=>{for(var t in e)f(r,t,{get:e[t],enumerable:!0})},q=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of k(e))!y.call(r,i)&&i!==t&&f(r,i,{get:()=>e[i],enumerable:!(n=E(e,i))||n.enumerable});return r};var C=r=>q(f({},"__esModule",{value:!0}),r);var U={};x(U,{BlueWhaleClient:()=>d,addBreadcrumb:()=>P,captureError:()=>_,init:()=>W,setUser:()=>R});module.exports=C(U);var l=class{constructor(e=50){this.buffer=[];this.max=e}add(e){this.buffer.push(e),this.buffer.length>this.max&&this.buffer.shift()}flush(){return[...this.buffer]}instrument(){if(typeof window=="undefined")return;let e=history.pushState.bind(history);history.pushState=(...n)=>{var i;return this.add({type:"navigation",message:`\u2192 ${(i=n[2])!=null?i:""}`,timestamp:Date.now()}),e(...n)},["log","warn","error","info"].forEach(n=>{let i=console[n].bind(console);console[n]=(...o)=>{let a=n==="log"?"info":n;this.add({type:"console",category:n,message:o.map(String).join(" ").slice(0,300),level:a,timestamp:Date.now()}),i(...o)}});let t=window.fetch.bind(window);window.fetch=async(n,i)=>{var g;let o=typeof n=="string"?n:n instanceof URL?n.href:n.url,a=(g=i==null?void 0:i.method)!=null?g:"GET",m=Date.now();try{let c=await t(n,i);return this.add({type:"fetch",category:"http",message:`${a} ${o}`,level:c.ok?"info":"warn",timestamp:m,data:{status:c.status,duration_ms:Date.now()-m}}),c}catch(c){throw this.add({type:"fetch",category:"http",message:`${a} ${o} failed`,level:"error",timestamp:m,data:{error:String(c)}}),c}},document.addEventListener("click",n=>{var a;let i=n.target;if(!i)return;let o=i.getAttribute("aria-label")||((a=i.innerText)==null?void 0:a.slice(0,60))||i.tagName;this.add({type:"click",message:o,timestamp:Date.now()})},{passive:!0,capture:!0})}};var D="1.0.0",p=class{constructor(e,t){this.queue=[];this.flushing=!1;this.endpoint=e,this.apiKey=t}enqueue(e){this.queue.length>=20&&this.queue.shift(),this.queue.push(h(u({},e),{sdk_version:D})),this.flush()}async flush(){if(this.flushing||this.queue.length===0)return;this.flushing=!0;let e=this.queue.shift();try{await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(e),keepalive:!0})}catch(t){}finally{this.flushing=!1,this.queue.length>0&&this.flush()}}};var T="https://bluewhaleops.com/api/ingest/error",d=class{constructor(e){this.initialized=!1;this.config=u({endpoint:T,environment:"production",release:"",maxBreadcrumbs:50,silent:!1,ventureId:""},e),this.crumbs=new l(this.config.maxBreadcrumbs),this.transport=new p(this.config.endpoint,this.config.apiKey)}init(){this.initialized||typeof window=="undefined"||(this.initialized=!0,this.crumbs.instrument(),window.addEventListener("error",e=>{var t,n,i;this.capture({error_type:(n=(t=e.error)==null?void 0:t.name)!=null?n:"Error",message:e.message||"Unknown error",stack:(i=e.error)==null?void 0:i.stack,url:window.location.href,source:"browser"})}),window.addEventListener("unhandledrejection",e=>{var n,i;let t=e.reason;this.capture({error_type:(n=t==null?void 0:t.name)!=null?n:"UnhandledRejection",message:(i=t==null?void 0:t.message)!=null?i:String(t),stack:t==null?void 0:t.stack,url:window.location.href,source:"browser"})}))}capture(e){let t=h(u({error_type:"Error"},e),{user_agent:typeof navigator!="undefined"?navigator.userAgent:void 0,environment:this.config.environment,release:this.config.release||void 0,venture_id:this.config.ventureId||void 0,breadcrumbs:this.crumbs.flush()});if(this.config.beforeSend){let n=this.config.beforeSend(t);if(n===!1)return;t=n}this.transport.enqueue(t)}setUser(e){this._userId=e}addBreadcrumb(e,t){this.crumbs.add({type:"custom",message:e,timestamp:Date.now(),data:t})}};var s=null;function W(r){s=new d(r),s.init()}function _(r,e){if(!s)return;let t=r instanceof Error?r:new Error(String(r));s.capture(u({error_type:t.name,message:t.message,stack:t.stack,source:"browser"},e))}function P(r,e){s==null||s.addBreadcrumb(r,e)}function R(r){s==null||s.setUser(r)}0&&(module.exports={BlueWhaleClient,addBreadcrumb,captureError,init,setUser});
|
|
1
|
+
"use strict";var L=Object.defineProperty,ge=Object.defineProperties,ye=Object.getOwnPropertyDescriptor,we=Object.getOwnPropertyDescriptors,Ee=Object.getOwnPropertyNames,X=Object.getOwnPropertySymbols;var Q=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var Y=(n,e,t)=>e in n?L(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,v=(n,e)=>{for(var t in e||(e={}))Q.call(e,t)&&Y(n,t,e[t]);if(X)for(var t of X(e))be.call(e,t)&&Y(n,t,e[t]);return n},C=(n,e)=>ge(n,we(e));var Te=(n,e)=>()=>(n&&(e=n(n=0)),e);var Z=(n,e)=>{for(var t in e)L(n,t,{get:e[t],enumerable:!0})},Se=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Ee(e))!Q.call(n,r)&&r!==t&&L(n,r,{get:()=>e[r],enumerable:!(i=ye(e,r))||i.enumerable});return n};var Le=n=>Se(L({},"__esModule",{value:!0}),n);var le={};Z(le,{CLSThresholds:()=>U,FCPThresholds:()=>O,FIDThresholds:()=>W,INPThresholds:()=>z,LCPThresholds:()=>H,TTFBThresholds:()=>j,getCLS:()=>Ie,getFCP:()=>se,getFID:()=>Pe,getINP:()=>Fe,getLCP:()=>De,getTTFB:()=>_e,onCLS:()=>Ie,onFCP:()=>se,onFID:()=>Pe,onINP:()=>Fe,onLCP:()=>De,onTTFB:()=>_e});var m,b,oe,B,q,ae,g,K,A,d,w,p,V,R,$,y,ee,P,te,ke,J,T,O,se,U,Ie,E,xe,ne,ue,Be,ce,W,Pe,de,M,x,Ae,pe,Re,z,fe,re,f,_,ie,Fe,H,N,De,j,Me,_e,he=Te(()=>{"use strict";ae=-1,g=function(n){addEventListener("pageshow",(function(e){e.persisted&&(ae=e.timeStamp,n(e))}),!0)},K=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},A=function(){var n=K();return n&&n.activationStart||0},d=function(n,e){var t=K(),i="navigate";return ae>=0?i="back-forward-cache":t&&(document.prerendering||A()>0?i="prerender":document.wasDiscarded?i="restore":t.type&&(i=t.type.replace(/_/g,"-"))),{name:n,value:e===void 0?-1:e,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},w=function(n,e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(n)){var i=new PerformanceObserver((function(r){Promise.resolve().then((function(){e(r.getEntries())}))}));return i.observe(Object.assign({type:n,buffered:!0},t||{})),i}}catch(r){}},p=function(n,e,t,i){var r,o;return function(u){e.value>=0&&(u||i)&&((o=e.value-(r||0))||r===void 0)&&(r=e.value,e.delta=o,e.rating=(function(a,s){return a>s[1]?"poor":a>s[0]?"needs-improvement":"good"})(e.value,t),n(e))}},V=function(n){requestAnimationFrame((function(){return requestAnimationFrame((function(){return n()}))}))},R=function(n){var e=function(t){t.type!=="pagehide"&&document.visibilityState!=="hidden"||n(t)};addEventListener("visibilitychange",e,!0),addEventListener("pagehide",e,!0)},$=function(n){var e=!1;return function(t){e||(n(t),e=!0)}},y=-1,ee=function(){return document.visibilityState!=="hidden"||document.prerendering?1/0:0},P=function(n){document.visibilityState==="hidden"&&y>-1&&(y=n.type==="visibilitychange"?n.timeStamp:0,ke())},te=function(){addEventListener("visibilitychange",P,!0),addEventListener("prerenderingchange",P,!0)},ke=function(){removeEventListener("visibilitychange",P,!0),removeEventListener("prerenderingchange",P,!0)},J=function(){return y<0&&(y=ee(),te(),g((function(){setTimeout((function(){y=ee(),te()}),0)}))),{get firstHiddenTime(){return y}}},T=function(n){document.prerendering?addEventListener("prerenderingchange",(function(){return n()}),!0):n()},O=[1800,3e3],se=function(n,e){e=e||{},T((function(){var t,i=J(),r=d("FCP"),o=w("paint",(function(u){u.forEach((function(a){a.name==="first-contentful-paint"&&(o.disconnect(),a.startTime<i.firstHiddenTime&&(r.value=Math.max(a.startTime-A(),0),r.entries.push(a),t(!0)))}))}));o&&(t=p(n,r,O,e.reportAllChanges),g((function(u){r=d("FCP"),t=p(n,r,O,e.reportAllChanges),V((function(){r.value=performance.now()-u.timeStamp,t(!0)}))})))}))},U=[.1,.25],Ie=function(n,e){e=e||{},se($((function(){var t,i=d("CLS",0),r=0,o=[],u=function(s){s.forEach((function(c){if(!c.hadRecentInput){var h=o[0],D=o[o.length-1];r&&c.startTime-D.startTime<1e3&&c.startTime-h.startTime<5e3?(r+=c.value,o.push(c)):(r=c.value,o=[c])}})),r>i.value&&(i.value=r,i.entries=o,t())},a=w("layout-shift",u);a&&(t=p(n,i,U,e.reportAllChanges),R((function(){u(a.takeRecords()),t(!0)})),g((function(){r=0,i=d("CLS",0),t=p(n,i,U,e.reportAllChanges),V((function(){return t()}))})),setTimeout(t,0))})))},E={passive:!0,capture:!0},xe=new Date,ne=function(n,e){m||(m=e,b=n,oe=new Date,ce(removeEventListener),ue())},ue=function(){if(b>=0&&b<oe-xe){var n={entryType:"first-input",name:m.type,target:m.target,cancelable:m.cancelable,startTime:m.timeStamp,processingStart:m.timeStamp+b};B.forEach((function(e){e(n)})),B=[]}},Be=function(n){if(n.cancelable){var e=(n.timeStamp>1e12?new Date:performance.now())-n.timeStamp;n.type=="pointerdown"?(function(t,i){var r=function(){ne(t,i),u()},o=function(){u()},u=function(){removeEventListener("pointerup",r,E),removeEventListener("pointercancel",o,E)};addEventListener("pointerup",r,E),addEventListener("pointercancel",o,E)})(e,n):ne(e,n)}},ce=function(n){["mousedown","keydown","touchstart","pointerdown"].forEach((function(e){return n(e,Be,E)}))},W=[100,300],Pe=function(n,e){e=e||{},T((function(){var t,i=J(),r=d("FID"),o=function(s){s.startTime<i.firstHiddenTime&&(r.value=s.processingStart-s.startTime,r.entries.push(s),t(!0))},u=function(s){s.forEach(o)},a=w("first-input",u);t=p(n,r,W,e.reportAllChanges),a&&R($((function(){u(a.takeRecords()),a.disconnect()}))),a&&g((function(){var s;r=d("FID"),t=p(n,r,W,e.reportAllChanges),B=[],b=-1,m=null,ce(addEventListener),s=o,B.push(s),ue()}))}))},de=0,M=1/0,x=0,Ae=function(n){n.forEach((function(e){e.interactionId&&(M=Math.min(M,e.interactionId),x=Math.max(x,e.interactionId),de=x?(x-M)/7+1:0)}))},pe=function(){return q?de:performance.interactionCount||0},Re=function(){"interactionCount"in performance||q||(q=w("event",Ae,{type:"event",buffered:!0,durationThreshold:0}))},z=[200,500],fe=0,re=function(){return pe()-fe},f=[],_={},ie=function(n){var e=f[f.length-1],t=_[n.interactionId];if(t||f.length<10||n.duration>e.latency){if(t)t.entries.push(n),t.latency=Math.max(t.latency,n.duration);else{var i={id:n.interactionId,latency:n.duration,entries:[n]};_[i.id]=i,f.push(i)}f.sort((function(r,o){return o.latency-r.latency})),f.splice(10).forEach((function(r){delete _[r.id]}))}},Fe=function(n,e){e=e||{},T((function(){var t;Re();var i,r=d("INP"),o=function(a){a.forEach((function(h){h.interactionId&&ie(h),h.entryType==="first-input"&&!f.some((function(D){return D.entries.some((function(G){return h.duration===G.duration&&h.startTime===G.startTime}))}))&&ie(h)}));var s,c=(s=Math.min(f.length-1,Math.floor(re()/50)),f[s]);c&&c.latency!==r.value&&(r.value=c.latency,r.entries=c.entries,i())},u=w("event",o,{durationThreshold:(t=e.durationThreshold)!==null&&t!==void 0?t:40});i=p(n,r,z,e.reportAllChanges),u&&("PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&u.observe({type:"first-input",buffered:!0}),R((function(){o(u.takeRecords()),r.value<0&&re()>0&&(r.value=0,r.entries=[]),i(!0)})),g((function(){f=[],fe=pe(),r=d("INP"),i=p(n,r,z,e.reportAllChanges)})))}))},H=[2500,4e3],N={},De=function(n,e){e=e||{},T((function(){var t,i=J(),r=d("LCP"),o=function(s){var c=s[s.length-1];c&&c.startTime<i.firstHiddenTime&&(r.value=Math.max(c.startTime-A(),0),r.entries=[c],t())},u=w("largest-contentful-paint",o);if(u){t=p(n,r,H,e.reportAllChanges);var a=$((function(){N[r.id]||(o(u.takeRecords()),u.disconnect(),N[r.id]=!0,t(!0))}));["keydown","click"].forEach((function(s){addEventListener(s,(function(){return setTimeout(a,0)}),!0)})),R(a),g((function(s){r=d("LCP"),t=p(n,r,H,e.reportAllChanges),V((function(){r.value=performance.now()-s.timeStamp,N[r.id]=!0,t(!0)}))}))}}))},j=[800,1800],Me=function n(e){document.prerendering?T((function(){return n(e)})):document.readyState!=="complete"?addEventListener("load",(function(){return n(e)}),!0):setTimeout(e,0)},_e=function(n,e){e=e||{};var t=d("TTFB"),i=p(n,t,j,e.reportAllChanges);Me((function(){var r=K();if(r){var o=r.responseStart;if(o<=0||o>performance.now())return;t.value=Math.max(o-A(),0),t.entries=[r],i(!0),g((function(){t=d("TTFB",0),(i=p(n,t,j,e.reportAllChanges))(!0)}))}}))}});var ze={};Z(ze,{BlueWhaleClient:()=>S,SessionRecorder:()=>F,addBreadcrumb:()=>Ue,captureError:()=>Oe,init:()=>qe,setUser:()=>We,stopAndFlushReplay:()=>ve});module.exports=Le(ze);var k=class{constructor(e=50){this.buffer=[];this.max=e}add(e){this.buffer.push(e),this.buffer.length>this.max&&this.buffer.shift()}flush(){return[...this.buffer]}instrument(){if(typeof window=="undefined")return;let e=history.pushState.bind(history);history.pushState=(...i)=>{var r;return this.add({type:"navigation",message:`\u2192 ${(r=i[2])!=null?r:""}`,timestamp:Date.now()}),e(...i)},["log","warn","error","info"].forEach(i=>{let r=console[i].bind(console);console[i]=(...o)=>{let u=i==="log"?"info":i;this.add({type:"console",category:i,message:o.map(String).join(" ").slice(0,300),level:u,timestamp:Date.now()}),r(...o)}});let t=window.fetch.bind(window);window.fetch=async(i,r)=>{var s;let o=typeof i=="string"?i:i instanceof URL?i.href:i.url,u=(s=r==null?void 0:r.method)!=null?s:"GET",a=Date.now();try{let c=await t(i,r);return this.add({type:"fetch",category:"http",message:`${u} ${o}`,level:c.ok?"info":"warn",timestamp:a,data:{status:c.status,duration_ms:Date.now()-a}}),c}catch(c){throw this.add({type:"fetch",category:"http",message:`${u} ${o} failed`,level:"error",timestamp:a,data:{error:String(c)}}),c}},document.addEventListener("click",i=>{var u;let r=i.target;if(!r)return;let o=r.getAttribute("aria-label")||((u=r.innerText)==null?void 0:u.slice(0,60))||r.tagName;this.add({type:"click",message:o,timestamp:Date.now()})},{passive:!0,capture:!0})}};var Ce="1.0.0",I=class{constructor(e,t){this.queue=[];this.flushing=!1;this.endpoint=e,this.apiKey=t}enqueue(e){this.queue.length>=20&&this.queue.shift(),this.queue.push(C(v({},e),{sdk_version:Ce})),this.flush()}async flush(){if(this.flushing||this.queue.length===0)return;this.flushing=!0;let e=this.queue.shift();try{await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(e),keepalive:!0})}catch(t){}finally{this.flushing=!1,this.queue.length>0&&this.flush()}}};function me(n){typeof window!="undefined"&&Promise.resolve().then(()=>(he(),le)).then(({onLCP:e,onCLS:t,onINP:i,onFCP:r,onTTFB:o})=>{[e,t,i,r,o].forEach(u=>{try{u(a=>n(a.name,a.value,a.rating))}catch(a){}})}).catch(()=>{})}var Ne="https://bluewhaleops.com/api/ingest/error",S=class{constructor(e){this.initialized=!1;this.config=v({endpoint:Ne,environment:"production",release:"",maxBreadcrumbs:50,silent:!1,ventureId:""},e),this.crumbs=new k(this.config.maxBreadcrumbs),this.transport=new I(this.config.endpoint,this.config.apiKey)}init(){this.initialized||typeof window=="undefined"||(this.initialized=!0,this.crumbs.instrument(),window.addEventListener("error",e=>{var t,i,r;this.capture({error_type:(i=(t=e.error)==null?void 0:t.name)!=null?i:"Error",message:e.message||"Unknown error",stack:(r=e.error)==null?void 0:r.stack,url:window.location.href,source:"browser"})}),window.addEventListener("unhandledrejection",e=>{var i,r;let t=e.reason;this.capture({error_type:(i=t==null?void 0:t.name)!=null?i:"UnhandledRejection",message:(r=t==null?void 0:t.message)!=null?r:String(t),stack:t==null?void 0:t.stack,url:window.location.href,source:"browser"})}),me((e,t,i)=>{this.capture({error_type:"WebVital",message:e+": "+t.toFixed(1),source:"browser",tags:{vital:e,rating:i,value:String(Math.round(t))}})}))}capture(e){let t=C(v({error_type:"Error"},e),{user_agent:typeof navigator!="undefined"?navigator.userAgent:void 0,environment:this.config.environment,release:this.config.release||void 0,venture_id:this.config.ventureId||void 0,breadcrumbs:this.crumbs.flush()});if(this.config.beforeSend){let i=this.config.beforeSend(t);if(i===!1)return;t=i}this.transport.enqueue(t)}setUser(e){this._userId=e}addBreadcrumb(e,t){this.crumbs.add({type:"custom",message:e,timestamp:Date.now(),data:t})}};var F=class{constructor(e=500){this.events=[];this.observer=null;this.cleanups=[];if(this.maxEvents=e,typeof crypto!="undefined"&&crypto.randomUUID)this.sessionId=crypto.randomUUID();else{let t=new Uint32Array(4);crypto.getRandomValues(t),this.sessionId=Array.from(t).map(i=>i.toString(16).padStart(8,"0")).join("")}}push(e){this.events.length>=this.maxEvents&&this.events.shift(),this.events.push(e)}start(){if(typeof window=="undefined")return;this.observer=new MutationObserver(a=>{var s;for(let c of a)this.push({type:"dom_mutation",timestamp:performance.now(),data:{kind:c.type,tag:(s=c.target.tagName)!=null?s:"unknown",added:c.addedNodes.length,removed:c.removedNodes.length}})}),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!0});let e=a=>{let s=a.target;this.push({type:"click",timestamp:performance.now(),data:{tag:s.tagName,label:(s.getAttribute("aria-label")||s.id||"").slice(0,60)}})};document.addEventListener("click",e,{passive:!0,capture:!0}),this.cleanups.push(()=>document.removeEventListener("click",e,!0));let t=a=>{let s=a.target;this.push({type:"input",timestamp:performance.now(),data:{name:(s.name||s.id||s.type||"field").slice(0,60)}})};document.addEventListener("input",t,{passive:!0}),this.cleanups.push(()=>document.removeEventListener("input",t));let i=0,r=()=>{let a=performance.now();a-i<500||(i=a,this.push({type:"scroll",timestamp:a,data:{x:window.scrollX,y:window.scrollY}}))};document.addEventListener("scroll",r,{passive:!0}),this.cleanups.push(()=>document.removeEventListener("scroll",r));let o=0,u=()=>{let a=performance.now();a-o<1e3||(o=a,this.push({type:"resize",timestamp:a,data:{w:window.innerWidth,h:window.innerHeight}}))};window.addEventListener("resize",u,{passive:!0}),this.cleanups.push(()=>window.removeEventListener("resize",u))}stop(){var e;(e=this.observer)==null||e.disconnect(),this.observer=null,this.cleanups.forEach(t=>t()),this.cleanups=[]}getEvents(){return[...this.events]}getSessionId(){return this.sessionId}};async function ve(n,e){var r;n.stop();let t=n.getEvents();if(!t.length)return;let i=(r=e.endpoint)!=null?r:"https://bluewhaleops.com";try{await fetch(i+"/api/ingest/replay",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+e.apiKey},body:JSON.stringify({session_id:n.getSessionId(),venture_id:e.ventureId,events:t,event_count:t.length,page_url:typeof window!="undefined"?window.location.href:""}),keepalive:!0})}catch(o){}}var l=null;function qe(n){l=new S(n),l.init()}function Oe(n,e){if(!l)return;let t=n instanceof Error?n:new Error(String(n));l.capture(v({error_type:t.name,message:t.message,stack:t.stack,source:"browser"},e))}function Ue(n,e){l==null||l.addBreadcrumb(n,e)}function We(n){l==null||l.setUser(n)}0&&(module.exports={BlueWhaleClient,SessionRecorder,addBreadcrumb,captureError,init,setUser,stopAndFlushReplay});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/breadcrumbs.ts","../src/transport.ts","../src/core.ts"],"sourcesContent":["import { BlueWhaleClient } from './core';\nimport type { BlueWhaleConfig, ErrorEvent, Breadcrumb } from './types';\n\nexport type { BlueWhaleConfig, ErrorEvent, Breadcrumb };\n\nlet _client: BlueWhaleClient | null = null;\n\n/**\n * Initialize BLUEWHALE error capture.\n * Call once — typically in your app's entry point or _app.tsx.\n *\n * @example\n * import { init } from '@bluewhaleops/browser';\n * init({ apiKey: 'bw_agent_xxx', ventureId: 'your-venture-uuid' });\n */\nexport function init(config: BlueWhaleConfig): void {\n _client = new BlueWhaleClient(config);\n _client.init();\n}\n\n/**\n * Manually capture an error or exception.\n */\nexport function captureError(err: unknown, extra?: Partial<ErrorEvent>): void {\n if (!_client) return;\n const e = err instanceof Error ? err : new Error(String(err));\n _client.capture({\n error_type: e.name,\n message: e.message,\n stack: e.stack,\n source: 'browser',\n ...extra,\n });\n}\n\n/**\n * Add a manual breadcrumb.\n */\nexport function addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n _client?.addBreadcrumb(message, data);\n}\n\n/**\n * Tag the current user for error reports.\n */\nexport function setUser(userId: string): void {\n _client?.setUser(userId);\n}\n\nexport { BlueWhaleClient };\n","import type { Breadcrumb } from './types';\n\nexport class BreadcrumbBuffer {\n private buffer: Breadcrumb[] = [];\n private max: number;\n\n constructor(max = 50) {\n this.max = max;\n }\n\n add(crumb: Breadcrumb): void {\n this.buffer.push(crumb);\n if (this.buffer.length > this.max) this.buffer.shift();\n }\n\n flush(): Breadcrumb[] {\n return [...this.buffer];\n }\n\n instrument(): void {\n if (typeof window === 'undefined') return;\n\n // Navigation breadcrumbs\n const origPushState = history.pushState.bind(history);\n history.pushState = (...args) => {\n this.add({ type: 'navigation', message: `→ ${args[2] ?? ''}`, timestamp: Date.now() });\n return origPushState(...args);\n };\n\n // Console breadcrumbs\n (['log', 'warn', 'error', 'info'] as const).forEach((method) => {\n const orig = console[method].bind(console);\n console[method] = (...args: unknown[]) => {\n const level = method === 'log' ? 'info' : method as 'warn' | 'error' | 'info';\n this.add({\n type: 'console',\n category: method,\n message: args.map(String).join(' ').slice(0, 300),\n level,\n timestamp: Date.now(),\n });\n orig(...args);\n };\n });\n\n // Fetch breadcrumbs\n const origFetch = window.fetch.bind(window);\n window.fetch = async (input, init) => {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method ?? 'GET';\n const start = Date.now();\n try {\n const res = await origFetch(input, init);\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url}`,\n level: res.ok ? 'info' : 'warn',\n timestamp: start,\n data: { status: res.status, duration_ms: Date.now() - start },\n });\n return res;\n } catch (err) {\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url} failed`,\n level: 'error',\n timestamp: start,\n data: { error: String(err) },\n });\n throw err;\n }\n };\n\n // Click breadcrumbs (top-level only, lightweight)\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n const label = target.getAttribute('aria-label') || target.innerText?.slice(0, 60) || target.tagName;\n this.add({ type: 'click', message: label, timestamp: Date.now() });\n }, { passive: true, capture: true });\n }\n}\n","import type { ErrorEvent } from './types';\n\nconst SDK_VERSION = '1.0.0';\n\nexport class Transport {\n private endpoint: string;\n private apiKey: string;\n private queue: ErrorEvent[] = [];\n private flushing = false;\n\n constructor(endpoint: string, apiKey: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n enqueue(event: ErrorEvent): void {\n // Cap queue at 20 to avoid memory bloat\n if (this.queue.length >= 20) this.queue.shift();\n this.queue.push({ ...event, sdk_version: SDK_VERSION });\n this.flush();\n }\n\n private async flush(): Promise<void> {\n if (this.flushing || this.queue.length === 0) return;\n this.flushing = true;\n const event = this.queue.shift()!;\n try {\n await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(event),\n keepalive: true, // survives page unload\n });\n } catch {\n // Silent fail — don't error-loop\n } finally {\n this.flushing = false;\n if (this.queue.length > 0) this.flush();\n }\n }\n}\n","import type { BlueWhaleConfig, ErrorEvent, ErrorSource } from './types';\nimport { BreadcrumbBuffer } from './breadcrumbs';\nimport { Transport } from './transport';\n\nconst DEFAULT_ENDPOINT = 'https://bluewhaleops.com/api/ingest/error';\n\nexport class BlueWhaleClient {\n private config: Required<Omit<BlueWhaleConfig, 'beforeSend'>> & Pick<BlueWhaleConfig, 'beforeSend'>;\n private crumbs: BreadcrumbBuffer;\n private transport: Transport;\n private initialized = false;\n\n constructor(config: BlueWhaleConfig) {\n this.config = {\n endpoint: DEFAULT_ENDPOINT,\n environment: 'production',\n release: '',\n maxBreadcrumbs: 50,\n silent: false,\n ventureId: '',\n ...config,\n };\n this.crumbs = new BreadcrumbBuffer(this.config.maxBreadcrumbs);\n this.transport = new Transport(this.config.endpoint, this.config.apiKey);\n }\n\n init(): void {\n if (this.initialized || typeof window === 'undefined') return;\n this.initialized = true;\n\n this.crumbs.instrument();\n\n // Global JS errors\n window.addEventListener('error', (e) => {\n this.capture({\n error_type: e.error?.name ?? 'Error',\n message: e.message || 'Unknown error',\n stack: e.error?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n\n // Unhandled promise rejections\n window.addEventListener('unhandledrejection', (e) => {\n const err = e.reason;\n this.capture({\n error_type: err?.name ?? 'UnhandledRejection',\n message: err?.message ?? String(err),\n stack: err?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n }\n\n capture(partial: Partial<ErrorEvent> & { message: string; source: ErrorSource }): void {\n let event: ErrorEvent = {\n error_type: 'Error',\n ...partial,\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n environment: this.config.environment,\n release: this.config.release || undefined,\n venture_id: this.config.ventureId || undefined,\n breadcrumbs: this.crumbs.flush(),\n };\n\n if (this.config.beforeSend) {\n const result = this.config.beforeSend(event);\n if (result === false) return;\n event = result;\n }\n\n this.transport.enqueue(event);\n }\n\n setUser(userId: string): void {\n // Store for next capture — patch via a tag\n (this as unknown as Record<string, unknown>)._userId = userId;\n }\n\n addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n this.crumbs.add({ type: 'custom', message, timestamp: Date.now(), data });\n }\n}\n"],"mappings":"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","names":["src_exports","__export","BlueWhaleClient","addBreadcrumb","captureError","init","setUser","__toCommonJS","BreadcrumbBuffer","max","crumb","origPushState","args","_a","method","orig","level","origFetch","input","init","url","start","res","err","e","target","label","SDK_VERSION","Transport","endpoint","apiKey","event","__spreadProps","__spreadValues","e","DEFAULT_ENDPOINT","BlueWhaleClient","config","__spreadValues","BreadcrumbBuffer","Transport","_a","_b","_c","err","partial","event","__spreadProps","result","userId","message","data","_client","init","config","BlueWhaleClient","captureError","err","extra","e","__spreadValues","addBreadcrumb","message","data","setUser","userId"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/web-vitals/dist/web-vitals.js","../src/index.ts","../src/breadcrumbs.ts","../src/transport.ts","../src/vitals.ts","../src/core.ts","../src/replay.ts"],"sourcesContent":["var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n","import { BlueWhaleClient } from './core';\nimport type { BlueWhaleConfig, ErrorEvent, Breadcrumb } from './types';\n\nexport type { BlueWhaleConfig, ErrorEvent, Breadcrumb };\n\nlet _client: BlueWhaleClient | null = null;\n\n/**\n * Initialize BLUEWHALE error capture.\n * Call once — typically in your app's entry point or _app.tsx.\n *\n * @example\n * import { init } from '@bluewhaleops/browser';\n * init({ apiKey: 'bw_agent_xxx', ventureId: 'your-venture-uuid' });\n */\nexport function init(config: BlueWhaleConfig): void {\n _client = new BlueWhaleClient(config);\n _client.init();\n}\n\n/**\n * Manually capture an error or exception.\n */\nexport function captureError(err: unknown, extra?: Partial<ErrorEvent>): void {\n if (!_client) return;\n const e = err instanceof Error ? err : new Error(String(err));\n _client.capture({\n error_type: e.name,\n message: e.message,\n stack: e.stack,\n source: 'browser',\n ...extra,\n });\n}\n\n/**\n * Add a manual breadcrumb.\n */\nexport function addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n _client?.addBreadcrumb(message, data);\n}\n\n/**\n * Tag the current user for error reports.\n */\nexport function setUser(userId: string): void {\n _client?.setUser(userId);\n}\n\nexport { BlueWhaleClient };\n\n// Session replay\nexport { SessionRecorder, stopAndFlushReplay } from './replay';\nexport type { ReplayEvent } from './replay';\n","import type { Breadcrumb } from './types';\n\nexport class BreadcrumbBuffer {\n private buffer: Breadcrumb[] = [];\n private max: number;\n\n constructor(max = 50) {\n this.max = max;\n }\n\n add(crumb: Breadcrumb): void {\n this.buffer.push(crumb);\n if (this.buffer.length > this.max) this.buffer.shift();\n }\n\n flush(): Breadcrumb[] {\n return [...this.buffer];\n }\n\n instrument(): void {\n if (typeof window === 'undefined') return;\n\n // Navigation breadcrumbs\n const origPushState = history.pushState.bind(history);\n history.pushState = (...args) => {\n this.add({ type: 'navigation', message: `→ ${args[2] ?? ''}`, timestamp: Date.now() });\n return origPushState(...args);\n };\n\n // Console breadcrumbs\n (['log', 'warn', 'error', 'info'] as const).forEach((method) => {\n const orig = console[method].bind(console);\n console[method] = (...args: unknown[]) => {\n const level = method === 'log' ? 'info' : method as 'warn' | 'error' | 'info';\n this.add({\n type: 'console',\n category: method,\n message: args.map(String).join(' ').slice(0, 300),\n level,\n timestamp: Date.now(),\n });\n orig(...args);\n };\n });\n\n // Fetch breadcrumbs\n const origFetch = window.fetch.bind(window);\n window.fetch = async (input, init) => {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method ?? 'GET';\n const start = Date.now();\n try {\n const res = await origFetch(input, init);\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url}`,\n level: res.ok ? 'info' : 'warn',\n timestamp: start,\n data: { status: res.status, duration_ms: Date.now() - start },\n });\n return res;\n } catch (err) {\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url} failed`,\n level: 'error',\n timestamp: start,\n data: { error: String(err) },\n });\n throw err;\n }\n };\n\n // Click breadcrumbs (top-level only, lightweight)\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n const label = target.getAttribute('aria-label') || target.innerText?.slice(0, 60) || target.tagName;\n this.add({ type: 'click', message: label, timestamp: Date.now() });\n }, { passive: true, capture: true });\n }\n}\n","import type { ErrorEvent } from './types';\n\nconst SDK_VERSION = '1.0.0';\n\nexport class Transport {\n private endpoint: string;\n private apiKey: string;\n private queue: ErrorEvent[] = [];\n private flushing = false;\n\n constructor(endpoint: string, apiKey: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n enqueue(event: ErrorEvent): void {\n // Cap queue at 20 to avoid memory bloat\n if (this.queue.length >= 20) this.queue.shift();\n this.queue.push({ ...event, sdk_version: SDK_VERSION });\n this.flush();\n }\n\n private async flush(): Promise<void> {\n if (this.flushing || this.queue.length === 0) return;\n this.flushing = true;\n const event = this.queue.shift()!;\n try {\n await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(event),\n keepalive: true, // survives page unload\n });\n } catch {\n // Silent fail — don't error-loop\n } finally {\n this.flushing = false;\n if (this.queue.length > 0) this.flush();\n }\n }\n}\n","export function captureWebVitals(\n send: (name: string, value: number, rating: string) => void\n): void {\n if (typeof window === 'undefined') return;\n import('web-vitals').then(({ onLCP, onCLS, onINP, onFCP, onTTFB }) => {\n [onLCP, onCLS, onINP, onFCP, onTTFB].forEach(fn => {\n try {\n fn((m: { name: string; value: number; rating: string }) =>\n send(m.name, m.value, m.rating)\n );\n } catch {}\n });\n }).catch(() => {});\n}\n","import type { BlueWhaleConfig, ErrorEvent, ErrorSource } from './types';\nimport { BreadcrumbBuffer } from './breadcrumbs';\nimport { Transport } from './transport';\nimport { captureWebVitals } from './vitals';\n\nconst DEFAULT_ENDPOINT = 'https://bluewhaleops.com/api/ingest/error';\n\nexport class BlueWhaleClient {\n private config: Required<Omit<BlueWhaleConfig, 'beforeSend'>> & Pick<BlueWhaleConfig, 'beforeSend'>;\n private crumbs: BreadcrumbBuffer;\n private transport: Transport;\n private initialized = false;\n\n constructor(config: BlueWhaleConfig) {\n this.config = {\n endpoint: DEFAULT_ENDPOINT,\n environment: 'production',\n release: '',\n maxBreadcrumbs: 50,\n silent: false,\n ventureId: '',\n ...config,\n };\n this.crumbs = new BreadcrumbBuffer(this.config.maxBreadcrumbs);\n this.transport = new Transport(this.config.endpoint, this.config.apiKey);\n }\n\n init(): void {\n if (this.initialized || typeof window === 'undefined') return;\n this.initialized = true;\n\n this.crumbs.instrument();\n\n // Global JS errors\n window.addEventListener('error', (e) => {\n this.capture({\n error_type: e.error?.name ?? 'Error',\n message: e.message || 'Unknown error',\n stack: e.error?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n\n // Unhandled promise rejections\n window.addEventListener('unhandledrejection', (e) => {\n const err = e.reason;\n this.capture({\n error_type: err?.name ?? 'UnhandledRejection',\n message: err?.message ?? String(err),\n stack: err?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n\n // Web Vitals — LCP, CLS, INP, FCP, TTFB\n captureWebVitals((name, value, rating) => {\n this.capture({\n error_type: 'WebVital',\n message: name + ': ' + value.toFixed(1),\n source: 'browser',\n tags: { vital: name, rating, value: String(Math.round(value)) },\n });\n });\n }\n\n capture(partial: Partial<ErrorEvent> & { message: string; source: ErrorSource }): void {\n let event: ErrorEvent = {\n error_type: 'Error',\n ...partial,\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n environment: this.config.environment,\n release: this.config.release || undefined,\n venture_id: this.config.ventureId || undefined,\n breadcrumbs: this.crumbs.flush(),\n };\n\n if (this.config.beforeSend) {\n const result = this.config.beforeSend(event);\n if (result === false) return;\n event = result;\n }\n\n this.transport.enqueue(event);\n }\n\n setUser(userId: string): void {\n // Store for next capture — patch via a tag\n (this as unknown as Record<string, unknown>)._userId = userId;\n }\n\n addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n this.crumbs.add({ type: 'custom', message, timestamp: Date.now(), data });\n }\n}\n","export interface ReplayEvent {\n type: 'dom_mutation' | 'click' | 'input' | 'scroll' | 'resize' | 'navigation';\n timestamp: number;\n data: Record<string, unknown>;\n}\n\nexport class SessionRecorder {\n private events: ReplayEvent[] = [];\n private maxEvents: number;\n private sessionId: string;\n private observer: MutationObserver | null = null;\n private cleanups: Array<() => void> = [];\n\n constructor(maxEvents = 500) {\n this.maxEvents = maxEvents;\n // Edge-compatible random ID — no Math.random, use crypto if available\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n this.sessionId = crypto.randomUUID();\n } else {\n const a = new Uint32Array(4);\n crypto.getRandomValues(a);\n this.sessionId = Array.from(a).map(n => n.toString(16).padStart(8, '0')).join('');\n }\n }\n\n private push(ev: ReplayEvent): void {\n if (this.events.length >= this.maxEvents) this.events.shift();\n this.events.push(ev);\n }\n\n start(): void {\n if (typeof window === 'undefined') return;\n\n // DOM mutations — structure only, never content\n this.observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n this.push({\n type: 'dom_mutation',\n timestamp: performance.now(),\n data: {\n kind: m.type,\n tag: (m.target as Element).tagName ?? 'unknown',\n added: m.addedNodes.length,\n removed: m.removedNodes.length,\n },\n });\n }\n });\n this.observer.observe(document.body, { childList: true, subtree: true, attributes: true });\n\n // Click — tag + label only\n const onClick = (e: Event) => {\n const t = e.target as HTMLElement;\n this.push({\n type: 'click',\n timestamp: performance.now(),\n data: { tag: t.tagName, label: (t.getAttribute('aria-label') || t.id || '').slice(0, 60) },\n });\n };\n document.addEventListener('click', onClick, { passive: true, capture: true });\n this.cleanups.push(() => document.removeEventListener('click', onClick, true));\n\n // Input — field name ONLY, never value (privacy)\n const onInput = (e: Event) => {\n const t = e.target as HTMLInputElement;\n this.push({\n type: 'input',\n timestamp: performance.now(),\n data: { name: (t.name || t.id || t.type || 'field').slice(0, 60) },\n });\n };\n document.addEventListener('input', onInput, { passive: true });\n this.cleanups.push(() => document.removeEventListener('input', onInput));\n\n // Scroll — throttled 500ms\n let lastScroll = 0;\n const onScroll = () => {\n const now = performance.now();\n if (now - lastScroll < 500) return;\n lastScroll = now;\n this.push({ type: 'scroll', timestamp: now, data: { x: window.scrollX, y: window.scrollY } });\n };\n document.addEventListener('scroll', onScroll, { passive: true });\n this.cleanups.push(() => document.removeEventListener('scroll', onScroll));\n\n // Resize — throttled 1000ms\n let lastResize = 0;\n const onResize = () => {\n const now = performance.now();\n if (now - lastResize < 1000) return;\n lastResize = now;\n this.push({ type: 'resize', timestamp: now, data: { w: window.innerWidth, h: window.innerHeight } });\n };\n window.addEventListener('resize', onResize, { passive: true });\n this.cleanups.push(() => window.removeEventListener('resize', onResize));\n }\n\n stop(): void {\n this.observer?.disconnect();\n this.observer = null;\n this.cleanups.forEach(fn => fn());\n this.cleanups = [];\n }\n\n getEvents(): ReplayEvent[] { return [...this.events]; }\n getSessionId(): string { return this.sessionId; }\n}\n\nexport async function stopAndFlushReplay(\n recorder: SessionRecorder,\n opts: { apiKey: string; endpoint?: string; ventureId?: string },\n): Promise<void> {\n recorder.stop();\n const events = recorder.getEvents();\n if (!events.length) return;\n const base = opts.endpoint ?? 'https://bluewhaleops.com';\n try {\n await fetch(base + '/api/ingest/replay', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + opts.apiKey,\n },\n body: JSON.stringify({\n session_id: recorder.getSessionId(),\n venture_id: opts.ventureId,\n events,\n event_count: events.length,\n page_url: typeof window !== 'undefined' ? window.location.href : '',\n }),\n keepalive: true,\n });\n } catch {}\n}\n"],"mappings":"qzBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,mBAAAE,EAAA,kBAAAC,EAAA,kBAAAC,EAAA,kBAAAC,EAAA,kBAAAC,EAAA,mBAAAC,EAAA,WAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,YAAAC,GAAA,UAAAL,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,WAAAC,KAAA,IAAIC,EAAEC,EAAEC,GAAEC,EAAEC,EAAEC,GAAKC,EAAgGC,EAAqHC,EAAuDC,EAAuWC,EAA+PC,EAA4NC,EAA2GC,EAA6KC,EAA2DC,EAAKC,GAAqFC,EAA4GC,GAAoGC,GAA0GC,EAA+HC,EAA4GhC,EAAaM,GAAmaP,EAAWM,GAA+f4B,EAA0BC,GAAWC,GAAoEC,GAA2MC,GAAqWC,GAA0GrC,EAAYM,GAAibgC,GAAIC,EAAMC,EAAIC,GAAwIC,GAAyDC,GAAmH1C,EAAY2C,GAAIC,GAA2BC,EAAKC,EAAKC,GAA6VzC,GAAmzBL,EAAa+C,EAAKzC,GAA0kBL,EAAa+C,GAA2KzC,GAAx8M0C,GAAAC,GAAA,kBAAcrC,GAAE,GAAGC,EAAE,SAASN,EAAE,CAAC,iBAAiB,YAAY,SAASC,EAAE,CAACA,EAAE,YAAYI,GAAEJ,EAAE,UAAUD,EAAEC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAEM,EAAE,UAAU,CAAC,OAAO,OAAO,aAAa,YAAY,kBAAkB,YAAY,iBAAiB,YAAY,EAAE,CAAC,CAAC,EAAEC,EAAE,UAAU,CAAC,IAAIR,EAAEO,EAAE,EAAE,OAAOP,GAAGA,EAAE,iBAAiB,CAAC,EAAES,EAAE,SAAST,EAAEC,EAAE,CAAC,IAAI,EAAEM,EAAE,EAAE,EAAE,WAAW,OAAAF,IAAG,EAAE,EAAE,qBAAqB,IAAI,SAAS,cAAcG,EAAE,EAAE,EAAE,EAAE,YAAY,SAAS,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,QAAQ,KAAK,GAAG,IAAU,CAAC,KAAKR,EAAE,MAAeC,IAAT,OAAW,GAAGA,EAAE,OAAO,OAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,MAAM,OAAO,KAAK,IAAI,EAAE,GAAG,EAAE,OAAO,KAAK,MAAM,cAAc,KAAK,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,EAAES,EAAE,SAASV,EAAEC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,oBAAoB,oBAAoB,SAASD,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,qBAAqB,SAASA,EAAE,CAAC,QAAQ,QAAQ,EAAE,MAAM,UAAU,CAACC,EAAED,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,OAAO,OAAO,CAAC,KAAKA,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAOA,EAAE,CAAC,CAAC,EAAEW,EAAE,SAASX,EAAEC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAEI,EAAE,OAAO,SAASC,EAAE,CAACL,EAAE,OAAO,IAAIK,GAAG,MAAMD,EAAEJ,EAAE,OAAO,GAAG,KAAc,IAAT,UAAc,EAAEA,EAAE,MAAMA,EAAE,MAAMI,EAAEJ,EAAE,QAAO,SAASD,EAAEC,EAAE,CAAC,OAAOD,EAAEC,EAAE,CAAC,EAAE,OAAOD,EAAEC,EAAE,CAAC,EAAE,oBAAoB,MAAM,GAAEA,EAAE,MAAM,CAAC,EAAED,EAAEC,CAAC,EAAE,CAAC,EAAEW,EAAE,SAASZ,EAAE,CAAC,uBAAuB,UAAU,CAAC,OAAO,uBAAuB,UAAU,CAAC,OAAOA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEa,EAAE,SAASb,EAAE,CAAC,IAAIC,EAAE,SAASA,EAAE,CAAcA,EAAE,OAAf,YAAgC,SAAS,kBAApB,UAAqCD,EAAEC,CAAC,CAAC,EAAE,iBAAiB,mBAAmBA,EAAE,EAAE,EAAE,iBAAiB,WAAWA,EAAE,EAAE,CAAC,EAAEa,EAAE,SAASd,EAAE,CAAC,IAAIC,EAAE,GAAG,OAAO,SAAS,EAAE,CAACA,IAAID,EAAE,CAAC,EAAEC,EAAE,GAAG,CAAC,EAAEc,EAAE,GAAGC,GAAE,UAAU,CAAC,OAAiB,SAAS,kBAApB,UAAqC,SAAS,aAAa,IAAI,CAAC,EAAEC,EAAE,SAASjB,EAAE,CAAY,SAAS,kBAApB,UAAqCe,EAAE,KAAKA,EAAuBf,EAAE,OAAvB,mBAA4BA,EAAE,UAAU,EAAEmB,GAAE,EAAE,EAAED,GAAE,UAAU,CAAC,iBAAiB,mBAAmBD,EAAE,EAAE,EAAE,iBAAiB,qBAAqBA,EAAE,EAAE,CAAC,EAAEE,GAAE,UAAU,CAAC,oBAAoB,mBAAmBF,EAAE,EAAE,EAAE,oBAAoB,qBAAqBA,EAAE,EAAE,CAAC,EAAEG,EAAE,UAAU,CAAC,OAAOL,EAAE,IAAIA,EAAEC,GAAE,EAAEE,GAAE,EAAEZ,GAAG,UAAU,CAAC,YAAY,UAAU,CAACS,EAAEC,GAAE,EAAEE,GAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,iBAAiB,CAAC,OAAOH,CAAC,CAAC,CAAC,EAAEM,EAAE,SAASrB,EAAE,CAAC,SAAS,aAAa,iBAAiB,sBAAsB,UAAU,CAAC,OAAOA,EAAE,CAAC,GAAG,EAAE,EAAEA,EAAE,CAAC,EAAEX,EAAE,CAAC,KAAK,GAAG,EAAEM,GAAE,SAASK,EAAEC,EAAE,CAACA,EAAEA,GAAG,CAAC,EAAEoB,GAAG,UAAU,CAAC,IAAI,EAAE,EAAED,EAAE,EAAE,EAAEX,EAAE,KAAK,EAAEJ,EAAEK,EAAE,SAAS,SAASV,EAAE,CAACA,EAAE,SAAS,SAASA,EAAE,CAA4BA,EAAE,OAA7B,2BAAoCK,EAAE,WAAW,EAAEL,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,KAAK,IAAIA,EAAE,UAAUQ,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAKR,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAEK,IAAI,EAAEM,EAAEX,EAAE,EAAEX,EAAEY,EAAE,gBAAgB,EAAEK,GAAG,SAASH,EAAE,CAAC,EAAEM,EAAE,KAAK,EAAE,EAAEE,EAAEX,EAAE,EAAEX,EAAEY,EAAE,gBAAgB,EAAEW,GAAG,UAAU,CAAC,EAAE,MAAM,YAAY,IAAI,EAAET,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAEf,EAAE,CAAC,GAAG,GAAG,EAAEM,GAAE,SAASM,EAAEC,EAAE,CAACA,EAAEA,GAAG,CAAC,EAAEN,GAAEmB,GAAG,UAAU,CAAC,IAAI,EAAE,EAAEL,EAAE,MAAM,CAAC,EAAE,EAAE,EAAEJ,EAAE,CAAC,EAAEE,EAAE,SAASP,EAAE,CAACA,EAAE,SAAS,SAASA,EAAE,CAAC,GAAG,CAACA,EAAE,eAAe,CAAC,IAAIC,EAAEI,EAAE,CAAC,EAAEH,EAAEG,EAAEA,EAAE,OAAO,CAAC,EAAE,GAAGL,EAAE,UAAUE,EAAE,UAAU,KAAKF,EAAE,UAAUC,EAAE,UAAU,KAAK,GAAGD,EAAE,MAAMK,EAAE,KAAKL,CAAC,IAAI,EAAEA,EAAE,MAAMK,EAAE,CAACL,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQK,EAAE,EAAE,EAAE,EAAEG,EAAEE,EAAE,eAAeH,CAAC,EAAEC,IAAI,EAAEG,EAAEX,EAAE,EAAEZ,EAAEa,EAAE,gBAAgB,EAAEY,GAAG,UAAU,CAACN,EAAEC,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAEF,GAAG,UAAU,CAAC,EAAE,EAAE,EAAEG,EAAE,MAAM,CAAC,EAAE,EAAEE,EAAEX,EAAE,EAAEZ,EAAEa,EAAE,gBAAgB,EAAEW,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAEU,EAAE,CAAC,QAAQ,GAAG,QAAQ,EAAE,EAAEC,GAAE,IAAI,KAAKC,GAAE,SAASrB,EAAEC,EAAE,CAACJ,IAAIA,EAAEI,EAAEH,EAAEE,EAAED,GAAE,IAAI,KAAKyB,GAAE,mBAAmB,EAAEF,GAAE,EAAE,EAAEA,GAAE,UAAU,CAAC,GAAGxB,GAAG,GAAGA,EAAEC,GAAEqB,GAAE,CAAC,IAAInB,EAAE,CAAC,UAAU,cAAc,KAAKJ,EAAE,KAAK,OAAOA,EAAE,OAAO,WAAWA,EAAE,WAAW,UAAUA,EAAE,UAAU,gBAAgBA,EAAE,UAAUC,CAAC,EAAEE,EAAE,SAAS,SAAS,EAAE,CAAC,EAAEC,CAAC,CAAC,EAAE,EAAED,EAAE,CAAC,CAAC,CAAC,EAAEuB,GAAE,SAAS1B,EAAE,CAAC,GAAGA,EAAE,WAAW,CAAC,IAAIC,GAAGD,EAAE,UAAU,KAAK,IAAI,KAAK,YAAY,IAAI,GAAGA,EAAE,UAAyBA,EAAE,MAAjB,eAAsB,SAASA,EAAEC,EAAE,CAAC,IAAIC,EAAE,UAAU,CAACsB,GAAExB,EAAEC,CAAC,EAAEG,EAAE,CAAC,EAAED,EAAE,UAAU,CAACC,EAAE,CAAC,EAAEA,EAAE,UAAU,CAAC,oBAAoB,YAAYF,EAAEoB,CAAC,EAAE,oBAAoB,gBAAgBnB,EAAEmB,CAAC,CAAC,EAAE,iBAAiB,YAAYpB,EAAEoB,CAAC,EAAE,iBAAiB,gBAAgBnB,EAAEmB,CAAC,CAAC,GAAErB,EAAED,CAAC,EAAEwB,GAAEvB,EAAED,CAAC,CAAC,CAAC,EAAE2B,GAAE,SAAS3B,EAAE,CAAC,CAAC,YAAY,UAAU,aAAa,aAAa,EAAE,SAAS,SAASC,EAAE,CAAC,OAAOD,EAAEC,EAAEyB,GAAEJ,CAAC,CAAC,EAAE,CAAC,EAAEhC,EAAE,CAAC,IAAI,GAAG,EAAEM,GAAE,SAASM,EAAEE,EAAE,CAACA,EAAEA,GAAG,CAAC,EAAEiB,GAAG,UAAU,CAAC,IAAIhB,EAAEE,EAAEa,EAAE,EAAEZ,EAAEC,EAAE,KAAK,EAAEG,EAAE,SAASZ,EAAE,CAACA,EAAE,UAAUO,EAAE,kBAAkBC,EAAE,MAAMR,EAAE,gBAAgBA,EAAE,UAAUQ,EAAE,QAAQ,KAAKR,CAAC,EAAEK,EAAE,EAAE,EAAE,EAAEU,EAAE,SAASf,EAAE,CAACA,EAAE,QAAQY,CAAC,CAAC,EAAEI,EAAEN,EAAE,cAAcK,CAAC,EAAEV,EAAEM,EAAET,EAAEM,EAAElB,EAAEc,EAAE,gBAAgB,EAAEY,GAAGH,EAAEC,GAAG,UAAU,CAACC,EAAEC,EAAE,YAAY,CAAC,EAAEA,EAAE,WAAW,CAAC,EAAE,CAAC,EAAEA,GAAGV,GAAG,UAAU,CAAC,IAAIA,EAAEE,EAAEC,EAAE,KAAK,EAAEJ,EAAEM,EAAET,EAAEM,EAAElB,EAAEc,EAAE,gBAAgB,EAAED,EAAE,CAAC,EAAEF,EAAE,GAAGD,EAAE,KAAK2B,GAAE,gBAAgB,EAAErB,EAAEM,EAAET,EAAE,KAAKG,CAAC,EAAEmB,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEG,GAAE,EAAEC,EAAE,IAAIC,EAAE,EAAEC,GAAE,SAAS/B,EAAE,CAACA,EAAE,SAAS,SAAS,EAAE,CAAC,EAAE,gBAAgB6B,EAAE,KAAK,IAAIA,EAAE,EAAE,aAAa,EAAEC,EAAE,KAAK,IAAIA,EAAE,EAAE,aAAa,EAAEF,GAAEE,GAAGA,EAAED,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEG,GAAE,UAAU,CAAC,OAAO5B,EAAEwB,GAAE,YAAY,kBAAkB,CAAC,EAAEK,GAAE,UAAU,CAAC,qBAAqB,aAAa7B,IAAIA,EAAEM,EAAE,QAAQqB,GAAE,CAAC,KAAK,QAAQ,SAAS,GAAG,kBAAkB,CAAC,CAAC,EAAE,EAAExC,EAAE,CAAC,IAAI,GAAG,EAAE2C,GAAE,EAAEC,GAAE,UAAU,CAAC,OAAOH,GAAE,EAAEE,EAAC,EAAEE,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEC,GAAE,SAAStC,EAAE,CAAC,IAAIC,EAAEmC,EAAEA,EAAE,OAAO,CAAC,EAAE,EAAEC,EAAErC,EAAE,aAAa,EAAE,GAAG,GAAGoC,EAAE,OAAO,IAAIpC,EAAE,SAASC,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,KAAKD,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQA,EAAE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,GAAGA,EAAE,cAAc,QAAQA,EAAE,SAAS,QAAQ,CAACA,CAAC,CAAC,EAAEqC,EAAE,EAAE,EAAE,EAAE,EAAED,EAAE,KAAK,CAAC,CAAC,CAACA,EAAE,MAAM,SAASpC,EAAEC,EAAE,CAAC,OAAOA,EAAE,QAAQD,EAAE,OAAO,EAAE,EAAEoC,EAAE,OAAO,EAAE,EAAE,SAAS,SAASpC,EAAE,CAAC,OAAOqC,EAAErC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEH,GAAE,SAASG,EAAEC,EAAE,CAACA,EAAEA,GAAG,CAAC,EAAEoB,GAAG,UAAU,CAAC,IAAI,EAAEY,GAAE,EAAE,IAAI,EAAE,EAAExB,EAAE,KAAK,EAAEJ,EAAE,SAASL,EAAE,CAACA,EAAE,SAAS,SAASA,EAAE,CAAEA,EAAE,eAAesC,GAAEtC,CAAC,EAAkBA,EAAE,YAAlB,eAA+B,CAACoC,EAAE,MAAM,SAASnC,EAAE,CAAC,OAAOA,EAAE,QAAQ,MAAM,SAASA,EAAE,CAAC,OAAOD,EAAE,WAAWC,EAAE,UAAUD,EAAE,YAAYC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAGqC,GAAEtC,CAAC,CAAE,EAAE,EAAE,IAAIC,EAAEC,GAAGD,EAAE,KAAK,IAAImC,EAAE,OAAO,EAAE,KAAK,MAAMD,GAAE,EAAE,EAAE,CAAC,EAAEC,EAAEnC,CAAC,GAAGC,GAAGA,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAMA,EAAE,QAAQ,EAAE,QAAQA,EAAE,QAAQ,EAAE,EAAE,EAAEK,EAAEG,EAAE,QAAQL,EAAE,CAAC,mBAA0B,EAAEJ,EAAE,qBAAZ,MAAyC,IAAT,OAAW,EAAE,EAAE,CAAC,EAAE,EAAEU,EAAEX,EAAE,EAAET,EAAEU,EAAE,gBAAgB,EAAEM,IAAI,2BAA2B,QAAQ,kBAAkB,uBAAuB,WAAWA,EAAE,QAAQ,CAAC,KAAK,cAAc,SAAS,EAAE,CAAC,EAAEM,GAAG,UAAU,CAACR,EAAEE,EAAE,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG4B,GAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE7B,GAAG,UAAU,CAAC8B,EAAE,CAAC,EAAEF,GAAEF,GAAE,EAAE,EAAEvB,EAAE,KAAK,EAAE,EAAEE,EAAEX,EAAE,EAAET,EAAEU,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAET,EAAE,CAAC,KAAK,GAAG,EAAE+C,EAAE,CAAC,EAAEzC,GAAE,SAASE,EAAEC,EAAE,CAACA,EAAEA,GAAG,CAAC,EAAEoB,GAAG,UAAU,CAAC,IAAI,EAAE,EAAED,EAAE,EAAE,EAAEX,EAAE,KAAK,EAAEJ,EAAE,SAASL,EAAE,CAAC,IAAIC,EAAED,EAAEA,EAAE,OAAO,CAAC,EAAEC,GAAGA,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,KAAK,IAAIA,EAAE,UAAUO,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAACP,CAAC,EAAE,EAAE,EAAE,EAAEM,EAAEG,EAAE,2BAA2BL,CAAC,EAAE,GAAGE,EAAE,CAAC,EAAEI,EAAEX,EAAE,EAAER,EAAES,EAAE,gBAAgB,EAAE,IAAIc,EAAED,GAAG,UAAU,CAACyB,EAAE,EAAE,EAAE,IAAIlC,EAAEE,EAAE,YAAY,CAAC,EAAEA,EAAE,WAAW,EAAEgC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,OAAO,EAAE,SAAS,SAASvC,EAAE,CAAC,iBAAiBA,GAAG,UAAU,CAAC,OAAO,WAAWe,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAEF,EAAEE,CAAC,EAAET,GAAG,SAASH,EAAE,CAAC,EAAEM,EAAE,KAAK,EAAE,EAAEE,EAAEX,EAAE,EAAER,EAAES,EAAE,gBAAgB,EAAEW,GAAG,UAAU,CAAC,EAAE,MAAM,YAAY,IAAI,EAAET,EAAE,UAAUoC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE9C,EAAE,CAAC,IAAI,IAAI,EAAE+C,GAAE,SAASxC,EAAEC,EAAE,CAAC,SAAS,aAAaoB,GAAG,UAAU,CAAC,OAAOrB,EAAEC,CAAC,CAAC,EAAE,EAAe,SAAS,aAAtB,WAAiC,iBAAiB,QAAQ,UAAU,CAAC,OAAOD,EAAEC,CAAC,CAAC,GAAG,EAAE,EAAE,WAAWA,EAAE,CAAC,CAAC,EAAEF,GAAE,SAASC,EAAEC,EAAE,CAACA,EAAEA,GAAG,CAAC,EAAE,IAAI,EAAEQ,EAAE,MAAM,EAAE,EAAEE,EAAEX,EAAE,EAAEP,EAAEQ,EAAE,gBAAgB,EAAEuC,IAAG,UAAU,CAAC,IAAI,EAAEjC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAIF,EAAE,EAAE,cAAc,GAAGA,GAAG,GAAGA,EAAE,YAAY,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAIA,EAAEG,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAEF,GAAG,UAAU,CAAC,EAAEG,EAAE,OAAO,CAAC,GAAG,EAAEE,EAAEX,EAAE,EAAEP,EAAEQ,EAAE,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,ICA1tN,IAAA0C,GAAA,GAAAC,EAAAD,GAAA,qBAAAE,EAAA,oBAAAC,EAAA,kBAAAC,GAAA,iBAAAC,GAAA,SAAAC,GAAA,YAAAC,GAAA,uBAAAC,KAAA,eAAAC,GAAAT,ICEO,IAAMU,EAAN,KAAuB,CAI5B,YAAYC,EAAM,GAAI,CAHtB,KAAQ,OAAuB,CAAC,EAI9B,KAAK,IAAMA,CACb,CAEA,IAAIC,EAAyB,CAC3B,KAAK,OAAO,KAAKA,CAAK,EAClB,KAAK,OAAO,OAAS,KAAK,KAAK,KAAK,OAAO,MAAM,CACvD,CAEA,OAAsB,CACpB,MAAO,CAAC,GAAG,KAAK,MAAM,CACxB,CAEA,YAAmB,CACjB,GAAI,OAAO,QAAW,YAAa,OAGnC,IAAMC,EAAgB,QAAQ,UAAU,KAAK,OAAO,EACpD,QAAQ,UAAY,IAAIC,IAAS,CAxBrC,IAAAC,EAyBM,YAAK,IAAI,CAAE,KAAM,aAAc,QAAS,WAAKA,EAAAD,EAAK,CAAC,IAAN,KAAAC,EAAW,EAAE,GAAI,UAAW,KAAK,IAAI,CAAE,CAAC,EAC9EF,EAAc,GAAGC,CAAI,CAC9B,EAGC,CAAC,MAAO,OAAQ,QAAS,MAAM,EAAY,QAASE,GAAW,CAC9D,IAAMC,EAAO,QAAQD,CAAM,EAAE,KAAK,OAAO,EACzC,QAAQA,CAAM,EAAI,IAAIF,IAAoB,CACxC,IAAMI,EAAQF,IAAW,MAAQ,OAASA,EAC1C,KAAK,IAAI,CACP,KAAM,UACN,SAAUA,EACV,QAASF,EAAK,IAAI,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,EAAG,GAAG,EAChD,MAAAI,EACA,UAAW,KAAK,IAAI,CACtB,CAAC,EACDD,EAAK,GAAGH,CAAI,CACd,CACF,CAAC,EAGD,IAAMK,EAAY,OAAO,MAAM,KAAK,MAAM,EAC1C,OAAO,MAAQ,MAAOC,EAAOC,IAAS,CA/C1C,IAAAN,EAgDM,IAAMO,EAAM,OAAOF,GAAU,SAAWA,EAAQA,aAAiB,IAAMA,EAAM,KAAOA,EAAM,IACpFJ,GAASD,EAAAM,GAAA,YAAAA,EAAM,SAAN,KAAAN,EAAgB,MACzBQ,EAAQ,KAAK,IAAI,EACvB,GAAI,CACF,IAAMC,EAAM,MAAML,EAAUC,EAAOC,CAAI,EACvC,YAAK,IAAI,CACP,KAAM,QACN,SAAU,OACV,QAAS,GAAGL,CAAM,IAAIM,CAAG,GACzB,MAAOE,EAAI,GAAK,OAAS,OACzB,UAAWD,EACX,KAAM,CAAE,OAAQC,EAAI,OAAQ,YAAa,KAAK,IAAI,EAAID,CAAM,CAC9D,CAAC,EACMC,CACT,OAASC,EAAK,CACZ,WAAK,IAAI,CACP,KAAM,QACN,SAAU,OACV,QAAS,GAAGT,CAAM,IAAIM,CAAG,UACzB,MAAO,QACP,UAAWC,EACX,KAAM,CAAE,MAAO,OAAOE,CAAG,CAAE,CAC7B,CAAC,EACKA,CACR,CACF,EAGA,SAAS,iBAAiB,QAAUC,GAAM,CA5E9C,IAAAX,EA6EM,IAAMY,EAASD,EAAE,OACjB,GAAI,CAACC,EAAQ,OACb,IAAMC,EAAQD,EAAO,aAAa,YAAY,KAAKZ,EAAAY,EAAO,YAAP,YAAAZ,EAAkB,MAAM,EAAG,MAAOY,EAAO,QAC5F,KAAK,IAAI,CAAE,KAAM,QAAS,QAASC,EAAO,UAAW,KAAK,IAAI,CAAE,CAAC,CACnE,EAAG,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,CACrC,CACF,ECjFA,IAAMC,GAAc,QAEPC,EAAN,KAAgB,CAMrB,YAAYC,EAAkBC,EAAgB,CAH9C,KAAQ,MAAsB,CAAC,EAC/B,KAAQ,SAAW,GAGjB,KAAK,SAAWD,EAChB,KAAK,OAASC,CAChB,CAEA,QAAQC,EAAyB,CAE3B,KAAK,MAAM,QAAU,IAAI,KAAK,MAAM,MAAM,EAC9C,KAAK,MAAM,KAAKC,EAAAC,EAAA,GAAKF,GAAL,CAAY,YAAaJ,EAAY,EAAC,EACtD,KAAK,MAAM,CACb,CAEA,MAAc,OAAuB,CACnC,GAAI,KAAK,UAAY,KAAK,MAAM,SAAW,EAAG,OAC9C,KAAK,SAAW,GAChB,IAAMI,EAAQ,KAAK,MAAM,MAAM,EAC/B,GAAI,CACF,MAAM,MAAM,KAAK,SAAU,CACzB,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAU,KAAK,MAAM,EACtC,EACA,KAAM,KAAK,UAAUA,CAAK,EAC1B,UAAW,EACb,CAAC,CACH,OAAQG,EAAA,CAER,QAAE,CACA,KAAK,SAAW,GACZ,KAAK,MAAM,OAAS,GAAG,KAAK,MAAM,CACxC,CACF,CACF,EC3CO,SAASC,GACdC,EACM,CACF,OAAO,QAAW,aACtB,sCAAqB,KAAK,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,MAAAC,EAAO,MAAAC,EAAO,OAAAC,CAAO,IAAM,CACpE,CAACJ,EAAOC,EAAOC,EAAOC,EAAOC,CAAM,EAAE,QAAQC,GAAM,CACjD,GAAI,CACFA,EAAIC,GACFP,EAAKO,EAAE,KAAMA,EAAE,MAAOA,EAAE,MAAM,CAChC,CACF,OAAQC,EAAA,CAAC,CACX,CAAC,CACH,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,CACnB,CCRA,IAAMC,GAAmB,4CAEZC,EAAN,KAAsB,CAM3B,YAAYC,EAAyB,CAFrC,KAAQ,YAAc,GAGpB,KAAK,OAASC,EAAA,CACZ,SAAUH,GACV,YAAa,aACb,QAAS,GACT,eAAgB,GAChB,OAAQ,GACR,UAAW,IACRE,GAEL,KAAK,OAAS,IAAIE,EAAiB,KAAK,OAAO,cAAc,EAC7D,KAAK,UAAY,IAAIC,EAAU,KAAK,OAAO,SAAU,KAAK,OAAO,MAAM,CACzE,CAEA,MAAa,CACP,KAAK,aAAe,OAAO,QAAW,cAC1C,KAAK,YAAc,GAEnB,KAAK,OAAO,WAAW,EAGvB,OAAO,iBAAiB,QAAU,GAAM,CAlC5C,IAAAC,EAAAC,EAAAC,EAmCM,KAAK,QAAQ,CACX,YAAYD,GAAAD,EAAA,EAAE,QAAF,YAAAA,EAAS,OAAT,KAAAC,EAAiB,QAC7B,QAAS,EAAE,SAAW,gBACtB,OAAOC,EAAA,EAAE,QAAF,YAAAA,EAAS,MAChB,IAAK,OAAO,SAAS,KACrB,OAAQ,SACV,CAAC,CACH,CAAC,EAGD,OAAO,iBAAiB,qBAAuB,GAAM,CA7CzD,IAAAF,EAAAC,EA8CM,IAAME,EAAM,EAAE,OACd,KAAK,QAAQ,CACX,YAAYH,EAAAG,GAAA,YAAAA,EAAK,OAAL,KAAAH,EAAa,qBACzB,SAASC,EAAAE,GAAA,YAAAA,EAAK,UAAL,KAAAF,EAAgB,OAAOE,CAAG,EACnC,MAAOA,GAAA,YAAAA,EAAK,MACZ,IAAK,OAAO,SAAS,KACrB,OAAQ,SACV,CAAC,CACH,CAAC,EAGDC,GAAiB,CAACC,EAAMC,EAAOC,IAAW,CACxC,KAAK,QAAQ,CACX,WAAY,WACZ,QAASF,EAAO,KAAOC,EAAM,QAAQ,CAAC,EACtC,OAAQ,UACR,KAAM,CAAE,MAAOD,EAAM,OAAAE,EAAQ,MAAO,OAAO,KAAK,MAAMD,CAAK,CAAC,CAAE,CAChE,CAAC,CACH,CAAC,EACH,CAEA,QAAQE,EAA+E,CACrF,IAAIC,EAAoBC,EAAAb,EAAA,CACtB,WAAY,SACTW,GAFmB,CAGtB,WAAY,OAAO,WAAc,YAAc,UAAU,UAAY,OACrE,YAAa,KAAK,OAAO,YACzB,QAAS,KAAK,OAAO,SAAW,OAChC,WAAY,KAAK,OAAO,WAAa,OACrC,YAAa,KAAK,OAAO,MAAM,CACjC,GAEA,GAAI,KAAK,OAAO,WAAY,CAC1B,IAAMG,EAAS,KAAK,OAAO,WAAWF,CAAK,EAC3C,GAAIE,IAAW,GAAO,OACtBF,EAAQE,CACV,CAEA,KAAK,UAAU,QAAQF,CAAK,CAC9B,CAEA,QAAQG,EAAsB,CAE3B,KAA4C,QAAUA,CACzD,CAEA,cAAcC,EAAiBC,EAAsC,CACnE,KAAK,OAAO,IAAI,CAAE,KAAM,SAAU,QAAAD,EAAS,UAAW,KAAK,IAAI,EAAG,KAAAC,CAAK,CAAC,CAC1E,CACF,ECzFO,IAAMC,EAAN,KAAsB,CAO3B,YAAYC,EAAY,IAAK,CAN7B,KAAQ,OAAwB,CAAC,EAGjC,KAAQ,SAAoC,KAC5C,KAAQ,SAA8B,CAAC,EAKrC,GAFA,KAAK,UAAYA,EAEb,OAAO,QAAW,aAAe,OAAO,WAC1C,KAAK,UAAY,OAAO,WAAW,MAC9B,CACL,IAAMC,EAAI,IAAI,YAAY,CAAC,EAC3B,OAAO,gBAAgBA,CAAC,EACxB,KAAK,UAAY,MAAM,KAAKA,CAAC,EAAE,IAAIC,GAAKA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAClF,CACF,CAEQ,KAAKC,EAAuB,CAC9B,KAAK,OAAO,QAAU,KAAK,WAAW,KAAK,OAAO,MAAM,EAC5D,KAAK,OAAO,KAAKA,CAAE,CACrB,CAEA,OAAc,CACZ,GAAI,OAAO,QAAW,YAAa,OAGnC,KAAK,SAAW,IAAI,iBAAkBC,GAAc,CAlCxD,IAAAC,EAmCM,QAAWC,KAAKF,EACd,KAAK,KAAK,CACR,KAAM,eACN,UAAW,YAAY,IAAI,EAC3B,KAAM,CACJ,KAAME,EAAE,KACR,KAAMD,EAAAC,EAAE,OAAmB,UAArB,KAAAD,EAAgC,UACtC,MAAOC,EAAE,WAAW,OACpB,QAASA,EAAE,aAAa,MAC1B,CACF,CAAC,CAEL,CAAC,EACD,KAAK,SAAS,QAAQ,SAAS,KAAM,CAAE,UAAW,GAAM,QAAS,GAAM,WAAY,EAAK,CAAC,EAGzF,IAAMC,EAAWC,GAAa,CAC5B,IAAMC,EAAID,EAAE,OACZ,KAAK,KAAK,CACR,KAAM,QACN,UAAW,YAAY,IAAI,EAC3B,KAAM,CAAE,IAAKC,EAAE,QAAS,OAAQA,EAAE,aAAa,YAAY,GAAKA,EAAE,IAAM,IAAI,MAAM,EAAG,EAAE,CAAE,CAC3F,CAAC,CACH,EACA,SAAS,iBAAiB,QAASF,EAAS,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,EAC5E,KAAK,SAAS,KAAK,IAAM,SAAS,oBAAoB,QAASA,EAAS,EAAI,CAAC,EAG7E,IAAMG,EAAWF,GAAa,CAC5B,IAAMC,EAAID,EAAE,OACZ,KAAK,KAAK,CACR,KAAM,QACN,UAAW,YAAY,IAAI,EAC3B,KAAM,CAAE,MAAOC,EAAE,MAAQA,EAAE,IAAMA,EAAE,MAAQ,SAAS,MAAM,EAAG,EAAE,CAAE,CACnE,CAAC,CACH,EACA,SAAS,iBAAiB,QAASC,EAAS,CAAE,QAAS,EAAK,CAAC,EAC7D,KAAK,SAAS,KAAK,IAAM,SAAS,oBAAoB,QAASA,CAAO,CAAC,EAGvE,IAAIC,EAAa,EACXC,EAAW,IAAM,CACrB,IAAMC,EAAM,YAAY,IAAI,EACxBA,EAAMF,EAAa,MACvBA,EAAaE,EACb,KAAK,KAAK,CAAE,KAAM,SAAU,UAAWA,EAAK,KAAM,CAAE,EAAG,OAAO,QAAS,EAAG,OAAO,OAAQ,CAAE,CAAC,EAC9F,EACA,SAAS,iBAAiB,SAAUD,EAAU,CAAE,QAAS,EAAK,CAAC,EAC/D,KAAK,SAAS,KAAK,IAAM,SAAS,oBAAoB,SAAUA,CAAQ,CAAC,EAGzE,IAAIE,EAAa,EACXC,EAAW,IAAM,CACrB,IAAMF,EAAM,YAAY,IAAI,EACxBA,EAAMC,EAAa,MACvBA,EAAaD,EACb,KAAK,KAAK,CAAE,KAAM,SAAU,UAAWA,EAAK,KAAM,CAAE,EAAG,OAAO,WAAY,EAAG,OAAO,WAAY,CAAE,CAAC,EACrG,EACA,OAAO,iBAAiB,SAAUE,EAAU,CAAE,QAAS,EAAK,CAAC,EAC7D,KAAK,SAAS,KAAK,IAAM,OAAO,oBAAoB,SAAUA,CAAQ,CAAC,CACzE,CAEA,MAAa,CAjGf,IAAAV,GAkGIA,EAAA,KAAK,WAAL,MAAAA,EAAe,aACf,KAAK,SAAW,KAChB,KAAK,SAAS,QAAQW,GAAMA,EAAG,CAAC,EAChC,KAAK,SAAW,CAAC,CACnB,CAEA,WAA2B,CAAE,MAAO,CAAC,GAAG,KAAK,MAAM,CAAG,CACtD,cAAuB,CAAE,OAAO,KAAK,SAAW,CAClD,EAEA,eAAsBC,GACpBC,EACAC,EACe,CA/GjB,IAAAd,EAgHEa,EAAS,KAAK,EACd,IAAME,EAASF,EAAS,UAAU,EAClC,GAAI,CAACE,EAAO,OAAQ,OACpB,IAAMC,GAAOhB,EAAAc,EAAK,WAAL,KAAAd,EAAiB,2BAC9B,GAAI,CACF,MAAM,MAAMgB,EAAO,qBAAsB,CACvC,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAYF,EAAK,MAClC,EACA,KAAM,KAAK,UAAU,CACnB,WAAYD,EAAS,aAAa,EAClC,WAAYC,EAAK,UACjB,OAAAC,EACA,YAAaA,EAAO,OACpB,SAAU,OAAO,QAAW,YAAc,OAAO,SAAS,KAAO,EACnE,CAAC,EACD,UAAW,EACb,CAAC,CACH,OAAQZ,EAAA,CAAC,CACX,CLhIA,IAAIc,EAAkC,KAU/B,SAASC,GAAKC,EAA+B,CAClDF,EAAU,IAAIG,EAAgBD,CAAM,EACpCF,EAAQ,KAAK,CACf,CAKO,SAASI,GAAaC,EAAcC,EAAmC,CAC5E,GAAI,CAACN,EAAS,OACd,IAAMO,EAAIF,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,EAC5DL,EAAQ,QAAQQ,EAAA,CACd,WAAYD,EAAE,KACd,QAASA,EAAE,QACX,MAAOA,EAAE,MACT,OAAQ,WACLD,EACJ,CACH,CAKO,SAASG,GAAcC,EAAiBC,EAAsC,CACnFX,GAAA,MAAAA,EAAS,cAAcU,EAASC,EAClC,CAKO,SAASC,GAAQC,EAAsB,CAC5Cb,GAAA,MAAAA,EAAS,QAAQa,EACnB","names":["web_vitals_exports","__export","b","L","D","j","U","X","S","w","x","Q","W","Z","e","n","t","i","r","a","o","c","u","f","s","d","l","p","v","m","h","g","y","T","E","C","A","I","P","F","M","k","B","R","H","N","O","q","_","z","G","J","K","V","Y","init_web_vitals","__esmMin","src_exports","__export","BlueWhaleClient","SessionRecorder","addBreadcrumb","captureError","init","setUser","stopAndFlushReplay","__toCommonJS","BreadcrumbBuffer","max","crumb","origPushState","args","_a","method","orig","level","origFetch","input","init","url","start","res","err","e","target","label","SDK_VERSION","Transport","endpoint","apiKey","event","__spreadProps","__spreadValues","e","captureWebVitals","send","onLCP","onCLS","onINP","onFCP","onTTFB","fn","m","e","DEFAULT_ENDPOINT","BlueWhaleClient","config","__spreadValues","BreadcrumbBuffer","Transport","_a","_b","_c","err","captureWebVitals","name","value","rating","partial","event","__spreadProps","result","userId","message","data","SessionRecorder","maxEvents","a","n","ev","mutations","_a","m","onClick","e","t","onInput","lastScroll","onScroll","now","lastResize","onResize","fn","stopAndFlushReplay","recorder","opts","events","base","_client","init","config","BlueWhaleClient","captureError","err","extra","e","__spreadValues","addBreadcrumb","message","data","setUser","userId"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -58,6 +58,30 @@ declare class BlueWhaleClient {
|
|
|
58
58
|
addBreadcrumb(message: string, data?: Record<string, unknown>): void;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
interface ReplayEvent {
|
|
62
|
+
type: 'dom_mutation' | 'click' | 'input' | 'scroll' | 'resize' | 'navigation';
|
|
63
|
+
timestamp: number;
|
|
64
|
+
data: Record<string, unknown>;
|
|
65
|
+
}
|
|
66
|
+
declare class SessionRecorder {
|
|
67
|
+
private events;
|
|
68
|
+
private maxEvents;
|
|
69
|
+
private sessionId;
|
|
70
|
+
private observer;
|
|
71
|
+
private cleanups;
|
|
72
|
+
constructor(maxEvents?: number);
|
|
73
|
+
private push;
|
|
74
|
+
start(): void;
|
|
75
|
+
stop(): void;
|
|
76
|
+
getEvents(): ReplayEvent[];
|
|
77
|
+
getSessionId(): string;
|
|
78
|
+
}
|
|
79
|
+
declare function stopAndFlushReplay(recorder: SessionRecorder, opts: {
|
|
80
|
+
apiKey: string;
|
|
81
|
+
endpoint?: string;
|
|
82
|
+
ventureId?: string;
|
|
83
|
+
}): Promise<void>;
|
|
84
|
+
|
|
61
85
|
/**
|
|
62
86
|
* Initialize BLUEWHALE error capture.
|
|
63
87
|
* Call once — typically in your app's entry point or _app.tsx.
|
|
@@ -80,4 +104,4 @@ declare function addBreadcrumb(message: string, data?: Record<string, unknown>):
|
|
|
80
104
|
*/
|
|
81
105
|
declare function setUser(userId: string): void;
|
|
82
106
|
|
|
83
|
-
export { BlueWhaleClient, type BlueWhaleConfig, type Breadcrumb, type ErrorEvent, addBreadcrumb, captureError, init, setUser };
|
|
107
|
+
export { BlueWhaleClient, type BlueWhaleConfig, type Breadcrumb, type ErrorEvent, type ReplayEvent, SessionRecorder, addBreadcrumb, captureError, init, setUser, stopAndFlushReplay };
|
package/dist/index.d.ts
CHANGED
|
@@ -58,6 +58,30 @@ declare class BlueWhaleClient {
|
|
|
58
58
|
addBreadcrumb(message: string, data?: Record<string, unknown>): void;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
interface ReplayEvent {
|
|
62
|
+
type: 'dom_mutation' | 'click' | 'input' | 'scroll' | 'resize' | 'navigation';
|
|
63
|
+
timestamp: number;
|
|
64
|
+
data: Record<string, unknown>;
|
|
65
|
+
}
|
|
66
|
+
declare class SessionRecorder {
|
|
67
|
+
private events;
|
|
68
|
+
private maxEvents;
|
|
69
|
+
private sessionId;
|
|
70
|
+
private observer;
|
|
71
|
+
private cleanups;
|
|
72
|
+
constructor(maxEvents?: number);
|
|
73
|
+
private push;
|
|
74
|
+
start(): void;
|
|
75
|
+
stop(): void;
|
|
76
|
+
getEvents(): ReplayEvent[];
|
|
77
|
+
getSessionId(): string;
|
|
78
|
+
}
|
|
79
|
+
declare function stopAndFlushReplay(recorder: SessionRecorder, opts: {
|
|
80
|
+
apiKey: string;
|
|
81
|
+
endpoint?: string;
|
|
82
|
+
ventureId?: string;
|
|
83
|
+
}): Promise<void>;
|
|
84
|
+
|
|
61
85
|
/**
|
|
62
86
|
* Initialize BLUEWHALE error capture.
|
|
63
87
|
* Call once — typically in your app's entry point or _app.tsx.
|
|
@@ -80,4 +104,4 @@ declare function addBreadcrumb(message: string, data?: Record<string, unknown>):
|
|
|
80
104
|
*/
|
|
81
105
|
declare function setUser(userId: string): void;
|
|
82
106
|
|
|
83
|
-
export { BlueWhaleClient, type BlueWhaleConfig, type Breadcrumb, type ErrorEvent, addBreadcrumb, captureError, init, setUser };
|
|
107
|
+
export { BlueWhaleClient, type BlueWhaleConfig, type Breadcrumb, type ErrorEvent, type ReplayEvent, SessionRecorder, addBreadcrumb, captureError, init, setUser, stopAndFlushReplay };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import{a as p,b as l}from"./chunk-SJIZN76S.js";var h=class{constructor(e=50){this.buffer=[];this.max=e}add(e){this.buffer.push(e),this.buffer.length>this.max&&this.buffer.shift()}flush(){return[...this.buffer]}instrument(){if(typeof window=="undefined")return;let e=history.pushState.bind(history);history.pushState=(...r)=>{var n;return this.add({type:"navigation",message:`\u2192 ${(n=r[2])!=null?n:""}`,timestamp:Date.now()}),e(...r)},["log","warn","error","info"].forEach(r=>{let n=console[r].bind(console);console[r]=(...o)=>{let u=r==="log"?"info":r;this.add({type:"console",category:r,message:o.map(String).join(" ").slice(0,300),level:u,timestamp:Date.now()}),n(...o)}});let t=window.fetch.bind(window);window.fetch=async(r,n)=>{var a;let o=typeof r=="string"?r:r instanceof URL?r.href:r.url,u=(a=n==null?void 0:n.method)!=null?a:"GET",s=Date.now();try{let c=await t(r,n);return this.add({type:"fetch",category:"http",message:`${u} ${o}`,level:c.ok?"info":"warn",timestamp:s,data:{status:c.status,duration_ms:Date.now()-s}}),c}catch(c){throw this.add({type:"fetch",category:"http",message:`${u} ${o} failed`,level:"error",timestamp:s,data:{error:String(c)}}),c}},document.addEventListener("click",r=>{var u;let n=r.target;if(!n)return;let o=n.getAttribute("aria-label")||((u=n.innerText)==null?void 0:u.slice(0,60))||n.tagName;this.add({type:"click",message:o,timestamp:Date.now()})},{passive:!0,capture:!0})}};var y="1.0.0",m=class{constructor(e,t){this.queue=[];this.flushing=!1;this.endpoint=e,this.apiKey=t}enqueue(e){this.queue.length>=20&&this.queue.shift(),this.queue.push(l(p({},e),{sdk_version:y})),this.flush()}async flush(){if(this.flushing||this.queue.length===0)return;this.flushing=!0;let e=this.queue.shift();try{await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(e),keepalive:!0})}catch(t){}finally{this.flushing=!1,this.queue.length>0&&this.flush()}}};function g(i){typeof window!="undefined"&&import("./web-vitals-FH47FXFS.js").then(({onLCP:e,onCLS:t,onINP:r,onFCP:n,onTTFB:o})=>{[e,t,r,n,o].forEach(u=>{try{u(s=>i(s.name,s.value,s.rating))}catch(s){}})}).catch(()=>{})}var w="https://bluewhaleops.com/api/ingest/error",f=class{constructor(e){this.initialized=!1;this.config=p({endpoint:w,environment:"production",release:"",maxBreadcrumbs:50,silent:!1,ventureId:""},e),this.crumbs=new h(this.config.maxBreadcrumbs),this.transport=new m(this.config.endpoint,this.config.apiKey)}init(){this.initialized||typeof window=="undefined"||(this.initialized=!0,this.crumbs.instrument(),window.addEventListener("error",e=>{var t,r,n;this.capture({error_type:(r=(t=e.error)==null?void 0:t.name)!=null?r:"Error",message:e.message||"Unknown error",stack:(n=e.error)==null?void 0:n.stack,url:window.location.href,source:"browser"})}),window.addEventListener("unhandledrejection",e=>{var r,n;let t=e.reason;this.capture({error_type:(r=t==null?void 0:t.name)!=null?r:"UnhandledRejection",message:(n=t==null?void 0:t.message)!=null?n:String(t),stack:t==null?void 0:t.stack,url:window.location.href,source:"browser"})}),g((e,t,r)=>{this.capture({error_type:"WebVital",message:e+": "+t.toFixed(1),source:"browser",tags:{vital:e,rating:r,value:String(Math.round(t))}})}))}capture(e){let t=l(p({error_type:"Error"},e),{user_agent:typeof navigator!="undefined"?navigator.userAgent:void 0,environment:this.config.environment,release:this.config.release||void 0,venture_id:this.config.ventureId||void 0,breadcrumbs:this.crumbs.flush()});if(this.config.beforeSend){let r=this.config.beforeSend(t);if(r===!1)return;t=r}this.transport.enqueue(t)}setUser(e){this._userId=e}addBreadcrumb(e,t){this.crumbs.add({type:"custom",message:e,timestamp:Date.now(),data:t})}};var v=class{constructor(e=500){this.events=[];this.observer=null;this.cleanups=[];if(this.maxEvents=e,typeof crypto!="undefined"&&crypto.randomUUID)this.sessionId=crypto.randomUUID();else{let t=new Uint32Array(4);crypto.getRandomValues(t),this.sessionId=Array.from(t).map(r=>r.toString(16).padStart(8,"0")).join("")}}push(e){this.events.length>=this.maxEvents&&this.events.shift(),this.events.push(e)}start(){if(typeof window=="undefined")return;this.observer=new MutationObserver(s=>{var a;for(let c of s)this.push({type:"dom_mutation",timestamp:performance.now(),data:{kind:c.type,tag:(a=c.target.tagName)!=null?a:"unknown",added:c.addedNodes.length,removed:c.removedNodes.length}})}),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!0});let e=s=>{let a=s.target;this.push({type:"click",timestamp:performance.now(),data:{tag:a.tagName,label:(a.getAttribute("aria-label")||a.id||"").slice(0,60)}})};document.addEventListener("click",e,{passive:!0,capture:!0}),this.cleanups.push(()=>document.removeEventListener("click",e,!0));let t=s=>{let a=s.target;this.push({type:"input",timestamp:performance.now(),data:{name:(a.name||a.id||a.type||"field").slice(0,60)}})};document.addEventListener("input",t,{passive:!0}),this.cleanups.push(()=>document.removeEventListener("input",t));let r=0,n=()=>{let s=performance.now();s-r<500||(r=s,this.push({type:"scroll",timestamp:s,data:{x:window.scrollX,y:window.scrollY}}))};document.addEventListener("scroll",n,{passive:!0}),this.cleanups.push(()=>document.removeEventListener("scroll",n));let o=0,u=()=>{let s=performance.now();s-o<1e3||(o=s,this.push({type:"resize",timestamp:s,data:{w:window.innerWidth,h:window.innerHeight}}))};window.addEventListener("resize",u,{passive:!0}),this.cleanups.push(()=>window.removeEventListener("resize",u))}stop(){var e;(e=this.observer)==null||e.disconnect(),this.observer=null,this.cleanups.forEach(t=>t()),this.cleanups=[]}getEvents(){return[...this.events]}getSessionId(){return this.sessionId}};async function b(i,e){var n;i.stop();let t=i.getEvents();if(!t.length)return;let r=(n=e.endpoint)!=null?n:"https://bluewhaleops.com";try{await fetch(r+"/api/ingest/replay",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+e.apiKey},body:JSON.stringify({session_id:i.getSessionId(),venture_id:e.ventureId,events:t,event_count:t.length,page_url:typeof window!="undefined"?window.location.href:""}),keepalive:!0})}catch(o){}}var d=null;function W(i){d=new f(i),d.init()}function z(i,e){if(!d)return;let t=i instanceof Error?i:new Error(String(i));d.capture(p({error_type:t.name,message:t.message,stack:t.stack,source:"browser"},e))}function A(i,e){d==null||d.addBreadcrumb(i,e)}function C(i){d==null||d.setUser(i)}export{f as BlueWhaleClient,v as SessionRecorder,A as addBreadcrumb,z as captureError,W as init,C as setUser,b as stopAndFlushReplay};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/breadcrumbs.ts","../src/transport.ts","../src/core.ts","../src/index.ts"],"sourcesContent":["import type { Breadcrumb } from './types';\n\nexport class BreadcrumbBuffer {\n private buffer: Breadcrumb[] = [];\n private max: number;\n\n constructor(max = 50) {\n this.max = max;\n }\n\n add(crumb: Breadcrumb): void {\n this.buffer.push(crumb);\n if (this.buffer.length > this.max) this.buffer.shift();\n }\n\n flush(): Breadcrumb[] {\n return [...this.buffer];\n }\n\n instrument(): void {\n if (typeof window === 'undefined') return;\n\n // Navigation breadcrumbs\n const origPushState = history.pushState.bind(history);\n history.pushState = (...args) => {\n this.add({ type: 'navigation', message: `→ ${args[2] ?? ''}`, timestamp: Date.now() });\n return origPushState(...args);\n };\n\n // Console breadcrumbs\n (['log', 'warn', 'error', 'info'] as const).forEach((method) => {\n const orig = console[method].bind(console);\n console[method] = (...args: unknown[]) => {\n const level = method === 'log' ? 'info' : method as 'warn' | 'error' | 'info';\n this.add({\n type: 'console',\n category: method,\n message: args.map(String).join(' ').slice(0, 300),\n level,\n timestamp: Date.now(),\n });\n orig(...args);\n };\n });\n\n // Fetch breadcrumbs\n const origFetch = window.fetch.bind(window);\n window.fetch = async (input, init) => {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method ?? 'GET';\n const start = Date.now();\n try {\n const res = await origFetch(input, init);\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url}`,\n level: res.ok ? 'info' : 'warn',\n timestamp: start,\n data: { status: res.status, duration_ms: Date.now() - start },\n });\n return res;\n } catch (err) {\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url} failed`,\n level: 'error',\n timestamp: start,\n data: { error: String(err) },\n });\n throw err;\n }\n };\n\n // Click breadcrumbs (top-level only, lightweight)\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n const label = target.getAttribute('aria-label') || target.innerText?.slice(0, 60) || target.tagName;\n this.add({ type: 'click', message: label, timestamp: Date.now() });\n }, { passive: true, capture: true });\n }\n}\n","import type { ErrorEvent } from './types';\n\nconst SDK_VERSION = '1.0.0';\n\nexport class Transport {\n private endpoint: string;\n private apiKey: string;\n private queue: ErrorEvent[] = [];\n private flushing = false;\n\n constructor(endpoint: string, apiKey: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n enqueue(event: ErrorEvent): void {\n // Cap queue at 20 to avoid memory bloat\n if (this.queue.length >= 20) this.queue.shift();\n this.queue.push({ ...event, sdk_version: SDK_VERSION });\n this.flush();\n }\n\n private async flush(): Promise<void> {\n if (this.flushing || this.queue.length === 0) return;\n this.flushing = true;\n const event = this.queue.shift()!;\n try {\n await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(event),\n keepalive: true, // survives page unload\n });\n } catch {\n // Silent fail — don't error-loop\n } finally {\n this.flushing = false;\n if (this.queue.length > 0) this.flush();\n }\n }\n}\n","import type { BlueWhaleConfig, ErrorEvent, ErrorSource } from './types';\nimport { BreadcrumbBuffer } from './breadcrumbs';\nimport { Transport } from './transport';\n\nconst DEFAULT_ENDPOINT = 'https://bluewhaleops.com/api/ingest/error';\n\nexport class BlueWhaleClient {\n private config: Required<Omit<BlueWhaleConfig, 'beforeSend'>> & Pick<BlueWhaleConfig, 'beforeSend'>;\n private crumbs: BreadcrumbBuffer;\n private transport: Transport;\n private initialized = false;\n\n constructor(config: BlueWhaleConfig) {\n this.config = {\n endpoint: DEFAULT_ENDPOINT,\n environment: 'production',\n release: '',\n maxBreadcrumbs: 50,\n silent: false,\n ventureId: '',\n ...config,\n };\n this.crumbs = new BreadcrumbBuffer(this.config.maxBreadcrumbs);\n this.transport = new Transport(this.config.endpoint, this.config.apiKey);\n }\n\n init(): void {\n if (this.initialized || typeof window === 'undefined') return;\n this.initialized = true;\n\n this.crumbs.instrument();\n\n // Global JS errors\n window.addEventListener('error', (e) => {\n this.capture({\n error_type: e.error?.name ?? 'Error',\n message: e.message || 'Unknown error',\n stack: e.error?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n\n // Unhandled promise rejections\n window.addEventListener('unhandledrejection', (e) => {\n const err = e.reason;\n this.capture({\n error_type: err?.name ?? 'UnhandledRejection',\n message: err?.message ?? String(err),\n stack: err?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n }\n\n capture(partial: Partial<ErrorEvent> & { message: string; source: ErrorSource }): void {\n let event: ErrorEvent = {\n error_type: 'Error',\n ...partial,\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n environment: this.config.environment,\n release: this.config.release || undefined,\n venture_id: this.config.ventureId || undefined,\n breadcrumbs: this.crumbs.flush(),\n };\n\n if (this.config.beforeSend) {\n const result = this.config.beforeSend(event);\n if (result === false) return;\n event = result;\n }\n\n this.transport.enqueue(event);\n }\n\n setUser(userId: string): void {\n // Store for next capture — patch via a tag\n (this as unknown as Record<string, unknown>)._userId = userId;\n }\n\n addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n this.crumbs.add({ type: 'custom', message, timestamp: Date.now(), data });\n }\n}\n","import { BlueWhaleClient } from './core';\nimport type { BlueWhaleConfig, ErrorEvent, Breadcrumb } from './types';\n\nexport type { BlueWhaleConfig, ErrorEvent, Breadcrumb };\n\nlet _client: BlueWhaleClient | null = null;\n\n/**\n * Initialize BLUEWHALE error capture.\n * Call once — typically in your app's entry point or _app.tsx.\n *\n * @example\n * import { init } from '@bluewhaleops/browser';\n * init({ apiKey: 'bw_agent_xxx', ventureId: 'your-venture-uuid' });\n */\nexport function init(config: BlueWhaleConfig): void {\n _client = new BlueWhaleClient(config);\n _client.init();\n}\n\n/**\n * Manually capture an error or exception.\n */\nexport function captureError(err: unknown, extra?: Partial<ErrorEvent>): void {\n if (!_client) return;\n const e = err instanceof Error ? err : new Error(String(err));\n _client.capture({\n error_type: e.name,\n message: e.message,\n stack: e.stack,\n source: 'browser',\n ...extra,\n });\n}\n\n/**\n * Add a manual breadcrumb.\n */\nexport function addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n _client?.addBreadcrumb(message, data);\n}\n\n/**\n * Tag the current user for error reports.\n */\nexport function setUser(userId: string): void {\n _client?.setUser(userId);\n}\n\nexport { BlueWhaleClient };\n"],"mappings":"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","names":["BreadcrumbBuffer","max","crumb","origPushState","args","_a","method","orig","level","origFetch","input","init","url","start","res","err","e","target","label","SDK_VERSION","Transport","endpoint","apiKey","event","__spreadProps","__spreadValues","e","DEFAULT_ENDPOINT","BlueWhaleClient","config","__spreadValues","BreadcrumbBuffer","Transport","_a","_b","_c","err","partial","event","__spreadProps","result","userId","message","data","_client","init","config","BlueWhaleClient","captureError","err","extra","e","__spreadValues","addBreadcrumb","message","data","setUser","userId"]}
|
|
1
|
+
{"version":3,"sources":["../src/breadcrumbs.ts","../src/transport.ts","../src/vitals.ts","../src/core.ts","../src/replay.ts","../src/index.ts"],"sourcesContent":["import type { Breadcrumb } from './types';\n\nexport class BreadcrumbBuffer {\n private buffer: Breadcrumb[] = [];\n private max: number;\n\n constructor(max = 50) {\n this.max = max;\n }\n\n add(crumb: Breadcrumb): void {\n this.buffer.push(crumb);\n if (this.buffer.length > this.max) this.buffer.shift();\n }\n\n flush(): Breadcrumb[] {\n return [...this.buffer];\n }\n\n instrument(): void {\n if (typeof window === 'undefined') return;\n\n // Navigation breadcrumbs\n const origPushState = history.pushState.bind(history);\n history.pushState = (...args) => {\n this.add({ type: 'navigation', message: `→ ${args[2] ?? ''}`, timestamp: Date.now() });\n return origPushState(...args);\n };\n\n // Console breadcrumbs\n (['log', 'warn', 'error', 'info'] as const).forEach((method) => {\n const orig = console[method].bind(console);\n console[method] = (...args: unknown[]) => {\n const level = method === 'log' ? 'info' : method as 'warn' | 'error' | 'info';\n this.add({\n type: 'console',\n category: method,\n message: args.map(String).join(' ').slice(0, 300),\n level,\n timestamp: Date.now(),\n });\n orig(...args);\n };\n });\n\n // Fetch breadcrumbs\n const origFetch = window.fetch.bind(window);\n window.fetch = async (input, init) => {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method ?? 'GET';\n const start = Date.now();\n try {\n const res = await origFetch(input, init);\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url}`,\n level: res.ok ? 'info' : 'warn',\n timestamp: start,\n data: { status: res.status, duration_ms: Date.now() - start },\n });\n return res;\n } catch (err) {\n this.add({\n type: 'fetch',\n category: 'http',\n message: `${method} ${url} failed`,\n level: 'error',\n timestamp: start,\n data: { error: String(err) },\n });\n throw err;\n }\n };\n\n // Click breadcrumbs (top-level only, lightweight)\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n const label = target.getAttribute('aria-label') || target.innerText?.slice(0, 60) || target.tagName;\n this.add({ type: 'click', message: label, timestamp: Date.now() });\n }, { passive: true, capture: true });\n }\n}\n","import type { ErrorEvent } from './types';\n\nconst SDK_VERSION = '1.0.0';\n\nexport class Transport {\n private endpoint: string;\n private apiKey: string;\n private queue: ErrorEvent[] = [];\n private flushing = false;\n\n constructor(endpoint: string, apiKey: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n enqueue(event: ErrorEvent): void {\n // Cap queue at 20 to avoid memory bloat\n if (this.queue.length >= 20) this.queue.shift();\n this.queue.push({ ...event, sdk_version: SDK_VERSION });\n this.flush();\n }\n\n private async flush(): Promise<void> {\n if (this.flushing || this.queue.length === 0) return;\n this.flushing = true;\n const event = this.queue.shift()!;\n try {\n await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(event),\n keepalive: true, // survives page unload\n });\n } catch {\n // Silent fail — don't error-loop\n } finally {\n this.flushing = false;\n if (this.queue.length > 0) this.flush();\n }\n }\n}\n","export function captureWebVitals(\n send: (name: string, value: number, rating: string) => void\n): void {\n if (typeof window === 'undefined') return;\n import('web-vitals').then(({ onLCP, onCLS, onINP, onFCP, onTTFB }) => {\n [onLCP, onCLS, onINP, onFCP, onTTFB].forEach(fn => {\n try {\n fn((m: { name: string; value: number; rating: string }) =>\n send(m.name, m.value, m.rating)\n );\n } catch {}\n });\n }).catch(() => {});\n}\n","import type { BlueWhaleConfig, ErrorEvent, ErrorSource } from './types';\nimport { BreadcrumbBuffer } from './breadcrumbs';\nimport { Transport } from './transport';\nimport { captureWebVitals } from './vitals';\n\nconst DEFAULT_ENDPOINT = 'https://bluewhaleops.com/api/ingest/error';\n\nexport class BlueWhaleClient {\n private config: Required<Omit<BlueWhaleConfig, 'beforeSend'>> & Pick<BlueWhaleConfig, 'beforeSend'>;\n private crumbs: BreadcrumbBuffer;\n private transport: Transport;\n private initialized = false;\n\n constructor(config: BlueWhaleConfig) {\n this.config = {\n endpoint: DEFAULT_ENDPOINT,\n environment: 'production',\n release: '',\n maxBreadcrumbs: 50,\n silent: false,\n ventureId: '',\n ...config,\n };\n this.crumbs = new BreadcrumbBuffer(this.config.maxBreadcrumbs);\n this.transport = new Transport(this.config.endpoint, this.config.apiKey);\n }\n\n init(): void {\n if (this.initialized || typeof window === 'undefined') return;\n this.initialized = true;\n\n this.crumbs.instrument();\n\n // Global JS errors\n window.addEventListener('error', (e) => {\n this.capture({\n error_type: e.error?.name ?? 'Error',\n message: e.message || 'Unknown error',\n stack: e.error?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n\n // Unhandled promise rejections\n window.addEventListener('unhandledrejection', (e) => {\n const err = e.reason;\n this.capture({\n error_type: err?.name ?? 'UnhandledRejection',\n message: err?.message ?? String(err),\n stack: err?.stack,\n url: window.location.href,\n source: 'browser',\n });\n });\n\n // Web Vitals — LCP, CLS, INP, FCP, TTFB\n captureWebVitals((name, value, rating) => {\n this.capture({\n error_type: 'WebVital',\n message: name + ': ' + value.toFixed(1),\n source: 'browser',\n tags: { vital: name, rating, value: String(Math.round(value)) },\n });\n });\n }\n\n capture(partial: Partial<ErrorEvent> & { message: string; source: ErrorSource }): void {\n let event: ErrorEvent = {\n error_type: 'Error',\n ...partial,\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n environment: this.config.environment,\n release: this.config.release || undefined,\n venture_id: this.config.ventureId || undefined,\n breadcrumbs: this.crumbs.flush(),\n };\n\n if (this.config.beforeSend) {\n const result = this.config.beforeSend(event);\n if (result === false) return;\n event = result;\n }\n\n this.transport.enqueue(event);\n }\n\n setUser(userId: string): void {\n // Store for next capture — patch via a tag\n (this as unknown as Record<string, unknown>)._userId = userId;\n }\n\n addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n this.crumbs.add({ type: 'custom', message, timestamp: Date.now(), data });\n }\n}\n","export interface ReplayEvent {\n type: 'dom_mutation' | 'click' | 'input' | 'scroll' | 'resize' | 'navigation';\n timestamp: number;\n data: Record<string, unknown>;\n}\n\nexport class SessionRecorder {\n private events: ReplayEvent[] = [];\n private maxEvents: number;\n private sessionId: string;\n private observer: MutationObserver | null = null;\n private cleanups: Array<() => void> = [];\n\n constructor(maxEvents = 500) {\n this.maxEvents = maxEvents;\n // Edge-compatible random ID — no Math.random, use crypto if available\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n this.sessionId = crypto.randomUUID();\n } else {\n const a = new Uint32Array(4);\n crypto.getRandomValues(a);\n this.sessionId = Array.from(a).map(n => n.toString(16).padStart(8, '0')).join('');\n }\n }\n\n private push(ev: ReplayEvent): void {\n if (this.events.length >= this.maxEvents) this.events.shift();\n this.events.push(ev);\n }\n\n start(): void {\n if (typeof window === 'undefined') return;\n\n // DOM mutations — structure only, never content\n this.observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n this.push({\n type: 'dom_mutation',\n timestamp: performance.now(),\n data: {\n kind: m.type,\n tag: (m.target as Element).tagName ?? 'unknown',\n added: m.addedNodes.length,\n removed: m.removedNodes.length,\n },\n });\n }\n });\n this.observer.observe(document.body, { childList: true, subtree: true, attributes: true });\n\n // Click — tag + label only\n const onClick = (e: Event) => {\n const t = e.target as HTMLElement;\n this.push({\n type: 'click',\n timestamp: performance.now(),\n data: { tag: t.tagName, label: (t.getAttribute('aria-label') || t.id || '').slice(0, 60) },\n });\n };\n document.addEventListener('click', onClick, { passive: true, capture: true });\n this.cleanups.push(() => document.removeEventListener('click', onClick, true));\n\n // Input — field name ONLY, never value (privacy)\n const onInput = (e: Event) => {\n const t = e.target as HTMLInputElement;\n this.push({\n type: 'input',\n timestamp: performance.now(),\n data: { name: (t.name || t.id || t.type || 'field').slice(0, 60) },\n });\n };\n document.addEventListener('input', onInput, { passive: true });\n this.cleanups.push(() => document.removeEventListener('input', onInput));\n\n // Scroll — throttled 500ms\n let lastScroll = 0;\n const onScroll = () => {\n const now = performance.now();\n if (now - lastScroll < 500) return;\n lastScroll = now;\n this.push({ type: 'scroll', timestamp: now, data: { x: window.scrollX, y: window.scrollY } });\n };\n document.addEventListener('scroll', onScroll, { passive: true });\n this.cleanups.push(() => document.removeEventListener('scroll', onScroll));\n\n // Resize — throttled 1000ms\n let lastResize = 0;\n const onResize = () => {\n const now = performance.now();\n if (now - lastResize < 1000) return;\n lastResize = now;\n this.push({ type: 'resize', timestamp: now, data: { w: window.innerWidth, h: window.innerHeight } });\n };\n window.addEventListener('resize', onResize, { passive: true });\n this.cleanups.push(() => window.removeEventListener('resize', onResize));\n }\n\n stop(): void {\n this.observer?.disconnect();\n this.observer = null;\n this.cleanups.forEach(fn => fn());\n this.cleanups = [];\n }\n\n getEvents(): ReplayEvent[] { return [...this.events]; }\n getSessionId(): string { return this.sessionId; }\n}\n\nexport async function stopAndFlushReplay(\n recorder: SessionRecorder,\n opts: { apiKey: string; endpoint?: string; ventureId?: string },\n): Promise<void> {\n recorder.stop();\n const events = recorder.getEvents();\n if (!events.length) return;\n const base = opts.endpoint ?? 'https://bluewhaleops.com';\n try {\n await fetch(base + '/api/ingest/replay', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + opts.apiKey,\n },\n body: JSON.stringify({\n session_id: recorder.getSessionId(),\n venture_id: opts.ventureId,\n events,\n event_count: events.length,\n page_url: typeof window !== 'undefined' ? window.location.href : '',\n }),\n keepalive: true,\n });\n } catch {}\n}\n","import { BlueWhaleClient } from './core';\nimport type { BlueWhaleConfig, ErrorEvent, Breadcrumb } from './types';\n\nexport type { BlueWhaleConfig, ErrorEvent, Breadcrumb };\n\nlet _client: BlueWhaleClient | null = null;\n\n/**\n * Initialize BLUEWHALE error capture.\n * Call once — typically in your app's entry point or _app.tsx.\n *\n * @example\n * import { init } from '@bluewhaleops/browser';\n * init({ apiKey: 'bw_agent_xxx', ventureId: 'your-venture-uuid' });\n */\nexport function init(config: BlueWhaleConfig): void {\n _client = new BlueWhaleClient(config);\n _client.init();\n}\n\n/**\n * Manually capture an error or exception.\n */\nexport function captureError(err: unknown, extra?: Partial<ErrorEvent>): void {\n if (!_client) return;\n const e = err instanceof Error ? err : new Error(String(err));\n _client.capture({\n error_type: e.name,\n message: e.message,\n stack: e.stack,\n source: 'browser',\n ...extra,\n });\n}\n\n/**\n * Add a manual breadcrumb.\n */\nexport function addBreadcrumb(message: string, data?: Record<string, unknown>): void {\n _client?.addBreadcrumb(message, data);\n}\n\n/**\n * Tag the current user for error reports.\n */\nexport function setUser(userId: string): void {\n _client?.setUser(userId);\n}\n\nexport { BlueWhaleClient };\n\n// Session replay\nexport { SessionRecorder, stopAndFlushReplay } from './replay';\nexport type { ReplayEvent } from './replay';\n"],"mappings":"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","names":["BreadcrumbBuffer","max","crumb","origPushState","args","_a","method","orig","level","origFetch","input","init","url","start","res","err","e","target","label","SDK_VERSION","Transport","endpoint","apiKey","event","__spreadProps","__spreadValues","e","captureWebVitals","send","onLCP","onCLS","onINP","onFCP","onTTFB","fn","m","e","DEFAULT_ENDPOINT","BlueWhaleClient","config","__spreadValues","BreadcrumbBuffer","Transport","_a","_b","_c","err","captureWebVitals","name","value","rating","partial","event","__spreadProps","result","userId","message","data","SessionRecorder","maxEvents","a","n","ev","mutations","_a","m","onClick","e","t","onInput","lastScroll","onScroll","now","lastResize","onResize","fn","stopAndFlushReplay","recorder","opts","events","base","_client","init","config","BlueWhaleClient","captureError","err","extra","e","__spreadValues","addBreadcrumb","message","data","setUser","userId"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./chunk-SJIZN76S.js";var v,y,U,L,D,V=-1,m=function(t){addEventListener("pageshow",(function(n){n.persisted&&(V=n.timeStamp,t(n))}),!0)},M=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},S=function(){var t=M();return t&&t.activationStart||0},f=function(t,n){var r=M(),i="navigate";return V>=0?i="back-forward-cache":r&&(document.prerendering||S()>0?i="prerender":document.wasDiscarded?i="restore":r.type&&(i=r.type.replace(/_/g,"-"))),{name:t,value:n===void 0?-1:n,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},g=function(t,n,r){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:t,buffered:!0},r||{})),i}}catch(e){}},d=function(t,n,r,i){var e,a;return function(c){n.value>=0&&(c||i)&&((a=n.value-(e||0))||e===void 0)&&(e=n.value,n.delta=a,n.rating=(function(u,o){return u>o[1]?"poor":u>o[0]?"needs-improvement":"good"})(n.value,r),t(n))}},k=function(t){requestAnimationFrame((function(){return requestAnimationFrame((function(){return t()}))}))},P=function(t){var n=function(r){r.type!=="pagehide"&&document.visibilityState!=="hidden"||t(r)};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},B=function(t){var n=!1;return function(r){n||(t(r),n=!0)}},h=-1,R=function(){return document.visibilityState!=="hidden"||document.prerendering?1/0:0},w=function(t){document.visibilityState==="hidden"&&h>-1&&(h=t.type==="visibilitychange"?t.timeStamp:0,nn())},H=function(){addEventListener("visibilitychange",w,!0),addEventListener("prerenderingchange",w,!0)},nn=function(){removeEventListener("visibilitychange",w,!0),removeEventListener("prerenderingchange",w,!0)},x=function(){return h<0&&(h=R(),H(),m((function(){setTimeout((function(){h=R(),H()}),0)}))),{get firstHiddenTime(){return h}}},E=function(t){document.prerendering?addEventListener("prerenderingchange",(function(){return t()}),!0):t()},O=[1800,3e3],tn=function(t,n){n=n||{},E((function(){var r,i=x(),e=f("FCP"),a=g("paint",(function(c){c.forEach((function(u){u.name==="first-contentful-paint"&&(a.disconnect(),u.startTime<i.firstHiddenTime&&(e.value=Math.max(u.startTime-S(),0),e.entries.push(u),r(!0)))}))}));a&&(r=d(t,e,O,n.reportAllChanges),m((function(c){e=f("FCP"),r=d(t,e,O,n.reportAllChanges),k((function(){e.value=performance.now()-c.timeStamp,r(!0)}))})))}))},q=[.1,.25],un=function(t,n){n=n||{},tn(B((function(){var r,i=f("CLS",0),e=0,a=[],c=function(o){o.forEach((function(s){if(!s.hadRecentInput){var p=a[0],b=a[a.length-1];e&&s.startTime-b.startTime<1e3&&s.startTime-p.startTime<5e3?(e+=s.value,a.push(s)):(e=s.value,a=[s])}})),e>i.value&&(i.value=e,i.entries=a,r())},u=g("layout-shift",c);u&&(r=d(t,i,q,n.reportAllChanges),P((function(){c(u.takeRecords()),r(!0)})),m((function(){e=0,i=f("CLS",0),r=d(t,i,q,n.reportAllChanges),k((function(){return r()}))})),setTimeout(r,0))})))},T={passive:!0,capture:!0},en=new Date,j=function(t,n){v||(v=n,y=t,U=new Date,X(removeEventListener),W())},W=function(){if(y>=0&&y<U-en){var t={entryType:"first-input",name:v.type,target:v.target,cancelable:v.cancelable,startTime:v.timeStamp,processingStart:v.timeStamp+y};L.forEach((function(n){n(t)})),L=[]}},rn=function(t){if(t.cancelable){var n=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;t.type=="pointerdown"?(function(r,i){var e=function(){j(r,i),c()},a=function(){c()},c=function(){removeEventListener("pointerup",e,T),removeEventListener("pointercancel",a,T)};addEventListener("pointerup",e,T),addEventListener("pointercancel",a,T)})(n,t):j(n,t)}},X=function(t){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return t(n,rn,T)}))},_=[100,300],sn=function(t,n){n=n||{},E((function(){var r,i=x(),e=f("FID"),a=function(o){o.startTime<i.firstHiddenTime&&(e.value=o.processingStart-o.startTime,e.entries.push(o),r(!0))},c=function(o){o.forEach(a)},u=g("first-input",c);r=d(t,e,_,n.reportAllChanges),u&&P(B((function(){c(u.takeRecords()),u.disconnect()}))),u&&m((function(){var o;e=f("FID"),r=d(t,e,_,n.reportAllChanges),L=[],y=-1,v=null,X(addEventListener),o=a,L.push(o),W()}))}))},Y=0,I=1/0,C=0,an=function(t){t.forEach((function(n){n.interactionId&&(I=Math.min(I,n.interactionId),C=Math.max(C,n.interactionId),Y=C?(C-I)/7+1:0)}))},Z=function(){return D?Y:performance.interactionCount||0},on=function(){"interactionCount"in performance||D||(D=g("event",an,{type:"event",buffered:!0,durationThreshold:0}))},z=[200,500],$=0,G=function(){return Z()-$},l=[],F={},J=function(t){var n=l[l.length-1],r=F[t.interactionId];if(r||l.length<10||t.duration>n.latency){if(r)r.entries.push(t),r.latency=Math.max(r.latency,t.duration);else{var i={id:t.interactionId,latency:t.duration,entries:[t]};F[i.id]=i,l.push(i)}l.sort((function(e,a){return a.latency-e.latency})),l.splice(10).forEach((function(e){delete F[e.id]}))}},fn=function(t,n){n=n||{},E((function(){var r;on();var i,e=f("INP"),a=function(u){u.forEach((function(p){p.interactionId&&J(p),p.entryType==="first-input"&&!l.some((function(b){return b.entries.some((function(N){return p.duration===N.duration&&p.startTime===N.startTime}))}))&&J(p)}));var o,s=(o=Math.min(l.length-1,Math.floor(G()/50)),l[o]);s&&s.latency!==e.value&&(e.value=s.latency,e.entries=s.entries,i())},c=g("event",a,{durationThreshold:(r=n.durationThreshold)!==null&&r!==void 0?r:40});i=d(t,e,z,n.reportAllChanges),c&&("PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&c.observe({type:"first-input",buffered:!0}),P((function(){a(c.takeRecords()),e.value<0&&G()>0&&(e.value=0,e.entries=[]),i(!0)})),m((function(){l=[],$=Z(),e=f("INP"),i=d(t,e,z,n.reportAllChanges)})))}))},K=[2500,4e3],A={},dn=function(t,n){n=n||{},E((function(){var r,i=x(),e=f("LCP"),a=function(o){var s=o[o.length-1];s&&s.startTime<i.firstHiddenTime&&(e.value=Math.max(s.startTime-S(),0),e.entries=[s],r())},c=g("largest-contentful-paint",a);if(c){r=d(t,e,K,n.reportAllChanges);var u=B((function(){A[e.id]||(a(c.takeRecords()),c.disconnect(),A[e.id]=!0,r(!0))}));["keydown","click"].forEach((function(o){addEventListener(o,(function(){return setTimeout(u,0)}),!0)})),P(u),m((function(o){e=f("LCP"),r=d(t,e,K,n.reportAllChanges),k((function(){e.value=performance.now()-o.timeStamp,A[e.id]=!0,r(!0)}))}))}}))},Q=[800,1800],cn=function t(n){document.prerendering?E((function(){return t(n)})):document.readyState!=="complete"?addEventListener("load",(function(){return t(n)}),!0):setTimeout(n,0)},ln=function(t,n){n=n||{};var r=f("TTFB"),i=d(t,r,Q,n.reportAllChanges);cn((function(){var e=M();if(e){var a=e.responseStart;if(a<=0||a>performance.now())return;r.value=Math.max(a-S(),0),r.entries=[e],i(!0),m((function(){r=f("TTFB",0),(i=d(t,r,Q,n.reportAllChanges))(!0)}))}}))};export{q as CLSThresholds,O as FCPThresholds,_ as FIDThresholds,z as INPThresholds,K as LCPThresholds,Q as TTFBThresholds,un as getCLS,tn as getFCP,sn as getFID,fn as getINP,dn as getLCP,ln as getTTFB,un as onCLS,tn as onFCP,sn as onFID,fn as onINP,dn as onLCP,ln as onTTFB};
|
|
2
|
+
//# sourceMappingURL=web-vitals-FH47FXFS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n"],"mappings":"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","names":["e","n","t","i","r","a","o","c","u","s","l","p","v","m","h","g","T","y","E","C","L","w","b","S","A","I","P","k","F","M","D","x","B","R","H","N","O","q","j","_","z","G","J","K","Q","U","V","W","X","Y","Z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bluewhaleops/browser",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "BLUEWHALE browser error capture SDK — drop-in Sentry replacement for web apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
"url": "https://github.com/tavara-holdings/blue-whale.git",
|
|
24
24
|
"directory": "packages/browser-sdk"
|
|
25
25
|
},
|
|
26
|
+
"optionalDependencies": {
|
|
27
|
+
"web-vitals": "^3.5.2"
|
|
28
|
+
},
|
|
26
29
|
"devDependencies": {
|
|
27
30
|
"tsup": "^8.5.1",
|
|
28
31
|
"typescript": "^5.9.3"
|