scout-error 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- var S=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames,T=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var x=(e,t,n)=>t in e?S(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l=(e,t)=>{for(var n in t||(t={}))U.call(t,n)&&x(e,n,t[n]);if(T)for(var n of T(t))j.call(t,n)&&x(e,n,t[n]);return e};var V=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},q=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of X(t))!U.call(e,i)&&i!==n&&S(e,i,{get:()=>t[i],enumerable:!(o=W(t,i))||o.enumerable});return e};var z=e=>q(S({},"__esModule",{value:!0}),e);var v=(e,t,n)=>new Promise((o,i)=>{var r=c=>{try{u(n.next(c))}catch(f){i(f)}},s=c=>{try{u(n.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(r,s);u((n=n.apply(e,t)).next())});var se={};V(se,{addBreadcrumb:()=>re,captureError:()=>O,init:()=>oe,setContext:()=>H,setTag:()=>F,setUser:()=>$});module.exports=z(se);var J={trackUserInteractions:!0,selfHealingErrors:!1,attachStacktrace:!0,handleSourceMaps:!0,browserDetails:!0,warnOnCapture:!1,loadUAParser:!0,ignoreErrors:null,sendErrors:!0,sampleRate:1,enabled:!0,debug:!1,endpoint:"",token:null,overrideOnError:!1,overrideOnUnhandledRejection:!1,addErrorEventListener:!0,addUnhandledRejectionEventListener:!0,overrideConsoleLog:!1,overrideConsoleWarn:!1,overrideConsoleInfo:!1,overrideConsoleError:!0},a=l({},J),N,g={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.2.5",project:null,release:null,version:null,app:null},k={clicks:0,scrolls:0},R=null,P=!1,w=null,h={},M=[],G=30;var y=console.warn;var D=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function K(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),t=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return R=R||C("pageload"),{pageloadId:R,userId:e,sessionId:t}}function Z(){var n,o,i;if((o=(n=window._uaParserResult)==null?void 0:n.browser)!=null&&o.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((i=[{p:/Chrome.*Mobile/,n:"Chrome Mobile"},{p:/Chrome/,n:"Chrome"},{p:/Firefox.*Mobile/,n:"Firefox Mobile"},{p:/Firefox/,n:"Firefox"},{p:/Safari.*Mobile/,n:"Safari Mobile"},{p:/Safari/,n:"Safari"},{p:/MSIE|Trident/,n:"Internet Explorer"},{p:/Edge/,n:"Edge"}].find(r=>e.match(r.p)))==null?void 0:i.n)||"Unknown"}function Q(){var n,o,i;if((o=(n=window._uaParserResult)==null?void 0:n.os)!=null&&o.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((i=[{p:/Win/,n:"Windows"},{p:/Mac/,n:"Mac OS"},{p:/X11|Linux/,n:"Linux"},{p:/Android/,n:"Android"},{p:/iPhone|iPad/,n:"iOS"}].find(r=>e.match(r.p)))==null?void 0:i.n)||"Unknown"}function Y(){var t,n,o,i,r,s,u,c,f,d;let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return{connectionType:e?e.effectiveType:"unknown",userAgent:navigator.userAgent,width:window.innerWidth,height:window.innerHeight,screenWidth:screen.width,screenHeight:screen.height,errorTimestamp:Date.now(),timeLocale:Intl.DateTimeFormat().resolvedOptions().timeZone,browserLocale:navigator.language||navigator.userLanguage,sessionTime:Math.round(performance.now()/1e3),deviceMemory:navigator.deviceMemory||"unknown",timezoneOffset:new Date().getTimezoneOffset(),cookiesEnabled:navigator.cookieEnabled,url:window.location.href,host:window.location.host,referrer:document.referrer,browser:Z(),browserVersion:((n=(t=window._uaParserResult)==null?void 0:t.browser)==null?void 0:n.version)||null,os:Q(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((s=(r=window._uaParserResult)==null?void 0:r.device)==null?void 0:s.type)||null,deviceModel:((c=(u=window._uaParserResult)==null?void 0:u.device)==null?void 0:c.model)||null,deviceVendor:((d=(f=window._uaParserResult)==null?void 0:f.device)==null?void 0:d.vendor)||null,loadTime:Math.max(0,performance.timing.loadEventEnd-performance.timing.navigationStart),userClicks:k.clicks,userScrolls:k.scrolls}}function E(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(t=>typeof t=="string"?e.includes(t):t instanceof RegExp?t.test(e):!1)}function ee(e,t){let n=new AbortController,o=setTimeout(()=>n.abort(),5e3),i={"Content-Type":"application/json"};return a.token&&(i["X-Ingest-Token"]=a.token),fetch(e,{method:"POST",headers:i,body:JSON.stringify(t),signal:n.signal}).then(r=>(clearTimeout(o),r)).catch(()=>{clearTimeout(o)})}function _(e){let t=(e[0]||"")+"",n=[...e];return t.replace(/%[sdj]/g,o=>{let i=n.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function A(e,t){let n=document.createElement("script");n.src=e,n.async=!0,t&&(n.onload=t),document.head.appendChild(n)}function ne(e,t,n){return v(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let r=yield i.text(),s=r.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=r.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(s)c=JSON.parse(atob(s[1]));else if(u){let B=new URL(u[1],e).href,I=yield fetch(B);if(!I.ok)return null;c=yield I.json()}else return null;if(!((o=window.sourceMap)!=null&&o.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:t,column:n});if(!d.source)return null;let L=c.sources.indexOf(d.source),b=null;return c.sourcesContent&&c.sourcesContent[L]&&(b=c.sourcesContent[L]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:b}}catch(i){return null}})}function p(e){M.push(l({timestamp:Date.now()},e)),M.length>G&&M.shift()}function m(e){return v(this,null,function*(){let t=a.browserDetails?Y():{},n=Object.assign(e,t,g,K());if(w&&(n.user=w),Object.keys(h).length&&(n.context=l({},h)),n.breadcrumbs=M.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&D("[Scout] Suppressed by sampling");return}if(a.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let o=e.errorTrace.split(`
1
+ var S=Object.defineProperty,j=Object.defineProperties,V=Object.getOwnPropertyDescriptor,q=Object.getOwnPropertyDescriptors,z=Object.getOwnPropertyNames,T=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable;var x=(e,t,n)=>t in e?S(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l=(e,t)=>{for(var n in t||(t={}))U.call(t,n)&&x(e,n,t[n]);if(T)for(var n of T(t))J.call(t,n)&&x(e,n,t[n]);return e},P=(e,t)=>j(e,q(t));var G=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},K=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of z(t))!U.call(e,i)&&i!==n&&S(e,i,{get:()=>t[i],enumerable:!(o=V(t,i))||o.enumerable});return e};var Z=e=>K(S({},"__esModule",{value:!0}),e);var v=(e,t,n)=>new Promise((o,i)=>{var r=c=>{try{u(n.next(c))}catch(f){i(f)}},s=c=>{try{u(n.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(r,s);u((n=n.apply(e,t)).next())});var ce={};G(ce,{addBreadcrumb:()=>se,captureError:()=>H,init:()=>ie,setContext:()=>B,setTag:()=>W,setUser:()=>F});module.exports=Z(ce);var Q={trackUserInteractions:!0,selfHealingErrors:!1,attachStacktrace:!0,handleSourceMaps:!0,browserDetails:!0,warnOnCapture:!1,loadUAParser:!0,ignoreErrors:null,sendErrors:!0,sampleRate:1,enabled:!0,debug:!1,endpoint:"",token:null,overrideOnError:!1,overrideOnUnhandledRejection:!1,addErrorEventListener:!0,addUnhandledRejectionEventListener:!0,overrideConsoleLog:!1,overrideConsoleWarn:!1,overrideConsoleInfo:!1,overrideConsoleError:!0},a=l({},Q),$,g={environment:typeof window!="undefined"&&(($=window.location)==null?void 0:$.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.2.6",project:null,release:null,version:null,app:null},k={clicks:0,scrolls:0},R=null,D=!1,w=null,h={},M=[],Y=30;var y=console.warn;var A=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function ee(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),t=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return R=R||C("pageload"),{pageloadId:R,userId:e,sessionId:t}}function ne(){var n,o,i;if((o=(n=window._uaParserResult)==null?void 0:n.browser)!=null&&o.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((i=[{p:/Chrome.*Mobile/,n:"Chrome Mobile"},{p:/Chrome/,n:"Chrome"},{p:/Firefox.*Mobile/,n:"Firefox Mobile"},{p:/Firefox/,n:"Firefox"},{p:/Safari.*Mobile/,n:"Safari Mobile"},{p:/Safari/,n:"Safari"},{p:/MSIE|Trident/,n:"Internet Explorer"},{p:/Edge/,n:"Edge"}].find(r=>e.match(r.p)))==null?void 0:i.n)||"Unknown"}function re(){var n,o,i;if((o=(n=window._uaParserResult)==null?void 0:n.os)!=null&&o.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((i=[{p:/Win/,n:"Windows"},{p:/Mac/,n:"Mac OS"},{p:/X11|Linux/,n:"Linux"},{p:/Android/,n:"Android"},{p:/iPhone|iPad/,n:"iOS"}].find(r=>e.match(r.p)))==null?void 0:i.n)||"Unknown"}function te(){var t,n,o,i,r,s,u,c,f,d;let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return{connectionType:e?e.effectiveType:"unknown",userAgent:navigator.userAgent,width:window.innerWidth,height:window.innerHeight,screenWidth:screen.width,screenHeight:screen.height,errorTimestamp:Date.now(),timeLocale:Intl.DateTimeFormat().resolvedOptions().timeZone,browserLocale:navigator.language||navigator.userLanguage,sessionTime:Math.round(performance.now()/1e3),deviceMemory:navigator.deviceMemory||"unknown",timezoneOffset:new Date().getTimezoneOffset(),cookiesEnabled:navigator.cookieEnabled,url:window.location.href,host:window.location.host,referrer:document.referrer,browser:ne(),browserVersion:((n=(t=window._uaParserResult)==null?void 0:t.browser)==null?void 0:n.version)||null,os:re(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((s=(r=window._uaParserResult)==null?void 0:r.device)==null?void 0:s.type)||null,deviceModel:((c=(u=window._uaParserResult)==null?void 0:u.device)==null?void 0:c.model)||null,deviceVendor:((d=(f=window._uaParserResult)==null?void 0:f.device)==null?void 0:d.vendor)||null,loadTime:Math.max(0,performance.timing.loadEventEnd-performance.timing.navigationStart),userClicks:k.clicks,userScrolls:k.scrolls}}function E(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(t=>typeof t=="string"?e.includes(t):t instanceof RegExp?t.test(e):!1)}function N(e,t){let n=new AbortController,o=setTimeout(()=>n.abort(),5e3),i={"Content-Type":"application/json"};return a.token&&(i["X-Ingest-Token"]=a.token),fetch(e,{method:"POST",headers:i,body:JSON.stringify(t),signal:n.signal}).then(r=>(clearTimeout(o),r)).catch(()=>{clearTimeout(o)})}function _(e){let t=(e[0]||"")+"",n=[...e];return t.replace(/%[sdj]/g,o=>{let i=n.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function O(e,t){let n=document.createElement("script");n.src=e,n.async=!0,t&&(n.onload=t),document.head.appendChild(n)}function oe(e,t,n){return v(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let r=yield i.text(),s=r.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=r.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(s)c=JSON.parse(atob(s[1]));else if(u){let X=new URL(u[1],e).href,I=yield fetch(X);if(!I.ok)return null;c=yield I.json()}else return null;if(!((o=window.sourceMap)!=null&&o.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:t,column:n});if(!d.source)return null;let L=c.sources.indexOf(d.source),b=null;return c.sourcesContent&&c.sourcesContent[L]&&(b=c.sourcesContent[L]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:b}}catch(i){return null}})}function p(e){M.push(l({timestamp:Date.now()},e)),M.length>Y&&M.shift()}function m(e){return v(this,null,function*(){let t=a.browserDetails?te():{},n=Object.assign(e,t,g,ee());if(w&&(n.user=w),Object.keys(h).length&&(n.context=l({},h)),n.breadcrumbs=M.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&A("[Scout] Suppressed by sampling");return}if(a.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let o=e.errorTrace.split(`
2
2
  `),i=[o[0]];for(let r=1;r<o.length;r++)!o[r].includes("/scout")&&!o[r].includes("scout.js")&&!o[r].includes("scout-error")&&i.push(o[r]);i.length>1&&(e.errorTrace=i.join(`
3
3
  `))}catch(o){}if((e.errorTrace||e.stack)&&!e.source)try{let o=e.errorTrace||e.stack,i=o?o.split(`
4
- `):[];for(let r=1;r<i.length;r++){let s=i[r].trim().match(/(http.*?):(\d+):(\d+)/);if(s){e.source=s[1],e.lineno=parseInt(s[2],10),e.colno=parseInt(s[3],10);break}}}catch(o){}if(a.handleSourceMaps&&e.source&&e.lineno)try{let o=yield ne(e.source,e.lineno,e.colno||0);o&&(n.originalSource=o.originalSource,n.originalLine=o.originalLine,n.originalColumn=o.originalColumn,n.originalName=o.originalName,n.highlightLineNumber=o.originalLine,o.snippet&&(n.snippet=o.snippet))}catch(o){}a.debug&&D("[Scout] Sending:",n),a.endpoint&&ee(a.endpoint,n)})}function O(e){a.enabled&&m(e)}function $(e){w=e}function H(e){h=l(l({},h),e)}function F(e,t){h[e]=t}function re(e){p(e)}function te(){if(a.trackUserInteractions){document.addEventListener("click",s=>{k.clicks++;let u=s.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);p({category:"click",message:c+(f?": "+f:"")})});let r=0;window.addEventListener("scroll",()=>{let s=Date.now();s-r>100&&(k.scrolls++,r=s)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),p({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{p({category:"navigation",message:window.location.href})});let t=window.fetch;window.fetch=function(r,s){let u=typeof r=="string"?r:(r==null?void 0:r.url)||"",c=(s==null?void 0:s.method)||"GET",f=Date.now();return t.apply(this,arguments).then(d=>(p({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw p({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let n=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(r,s){return this._scoutMethod=r,this._scoutUrl=s,n.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let r=this,s=Date.now();return r.addEventListener("loadend",()=>{p({category:"xhr",message:`${r._scoutMethod||"GET"} ${r._scoutUrl||""}`,data:{status:r.status,duration:Date.now()-s}})}),o.apply(this,arguments)},a.addErrorEventListener&&window.addEventListener("error",r=>v(this,null,function*(){if(a.enabled){try{let s=r.error?r.error.stack:"No stack trace available";if(E(r.message))return;a.sendErrors&&m({type:"window.onerror",message:r.message,source:r.filename,lineno:r.lineno,colno:r.colno,errorTrace:s})}catch(s){y("[Scout] Error handler failure:",s)}a.selfHealingErrors&&r.preventDefault()}})),a.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",r=>{if(a.enabled){try{let s=r.reason,u=(s==null?void 0:s.stack)||"No stack trace available";if(E((s==null?void 0:s.message)||""))return;a.sendErrors&&m({type:"Unhandled Promise Rejection",message:(s==null?void 0:s.message)||"Unhandled Promise Rejection",reason:r.reason,errorTrace:u})}catch(s){y("[Scout] Rejection handler failure:",s)}a.selfHealingErrors&&r.preventDefault()}}),a.overrideConsoleError&&(console.error=function(...r){if(a.enabled)try{let s=new Error().stack;if(E(_(r)))return;a.sendErrors&&m({type:"console.error",errorTrace:s,args:_(r)})}catch(s){y("[Scout] console.error override failure:",s)}}),a.overrideConsoleWarn&&(console.warn=function(...r){if(a.enabled)try{let s=new Error().stack;if(E(_(r)))return;a.sendErrors&&m({type:"console.warn",errorTrace:s,args:_(r)})}catch(s){y("[Scout] console.warn override failure:",s)}});let i=a.endpoint?new URL(a.endpoint).origin:"";a.loadUAParser&&a.browserDetails&&i&&A(`${i}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),a.handleSourceMaps&&i&&A(`${i}/vendor/source-map.min.js`)}function oe(e={},t={}){if(e.user&&(w=e.user,delete e.user),P){g=l(l({},g),e),a=l(l({},a),t);return}g=l(l({},g),e),a=l(l({},a),t),P=!0,typeof window!="undefined"&&(te(),window.Scout={init:(n,o)=>{n!=null&&n.user&&(w=n.user,delete n.user),g=l(l({},g),n),o&&(a=l(l({},a),o))},setScope:n=>{g=l(l({},g),n)},setConfig:n=>{a=l(l({},a),n)},setUser:$,setContext:H,setTag:F,addBreadcrumb:p,error:O})}
4
+ `):[];for(let r=1;r<i.length;r++){let s=i[r].trim().match(/(http.*?):(\d+):(\d+)/);if(s){e.source=s[1],e.lineno=parseInt(s[2],10),e.colno=parseInt(s[3],10);break}}}catch(o){}if(a.debug&&A("[Scout] Sending:",n),a.endpoint&&N(a.endpoint,n),a.handleSourceMaps&&e.source&&e.lineno)try{let o=yield oe(e.source,e.lineno,e.colno||0);if(o){let i=P(l({},n),{originalSource:o.originalSource,originalLine:o.originalLine,originalColumn:o.originalColumn,originalName:o.originalName,highlightLineNumber:o.originalLine});o.snippet&&(i.snippet=o.snippet),a.endpoint&&N(a.endpoint,i)}}catch(o){}})}function H(e){a.enabled&&m(e)}function F(e){w=e}function B(e){h=l(l({},h),e)}function W(e,t){h[e]=t}function se(e){p(e)}function ae(){if(a.trackUserInteractions){document.addEventListener("click",s=>{k.clicks++;let u=s.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);p({category:"click",message:c+(f?": "+f:"")})});let r=0;window.addEventListener("scroll",()=>{let s=Date.now();s-r>100&&(k.scrolls++,r=s)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),p({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{p({category:"navigation",message:window.location.href})});let t=window.fetch;window.fetch=function(r,s){let u=typeof r=="string"?r:(r==null?void 0:r.url)||"",c=(s==null?void 0:s.method)||"GET",f=Date.now();return t.apply(this,arguments).then(d=>(p({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw p({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let n=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(r,s){return this._scoutMethod=r,this._scoutUrl=s,n.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let r=this,s=Date.now();return r.addEventListener("loadend",()=>{p({category:"xhr",message:`${r._scoutMethod||"GET"} ${r._scoutUrl||""}`,data:{status:r.status,duration:Date.now()-s}})}),o.apply(this,arguments)},a.addErrorEventListener&&window.addEventListener("error",r=>v(this,null,function*(){if(a.enabled){try{let s=r.error?r.error.stack:"No stack trace available";if(E(r.message))return;a.sendErrors&&m({type:"window.onerror",message:r.message,source:r.filename,lineno:r.lineno,colno:r.colno,errorTrace:s})}catch(s){y("[Scout] Error handler failure:",s)}a.selfHealingErrors&&r.preventDefault()}})),a.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",r=>{if(a.enabled){try{let s=r.reason,u=(s==null?void 0:s.stack)||"No stack trace available";if(E((s==null?void 0:s.message)||""))return;a.sendErrors&&m({type:"Unhandled Promise Rejection",message:(s==null?void 0:s.message)||"Unhandled Promise Rejection",reason:r.reason,errorTrace:u})}catch(s){y("[Scout] Rejection handler failure:",s)}a.selfHealingErrors&&r.preventDefault()}}),a.overrideConsoleError&&(console.error=function(...r){if(a.enabled)try{let s=new Error().stack;if(E(_(r)))return;a.sendErrors&&m({type:"console.error",errorTrace:s,args:_(r)})}catch(s){y("[Scout] console.error override failure:",s)}}),a.overrideConsoleWarn&&(console.warn=function(...r){if(a.enabled)try{let s=new Error().stack;if(E(_(r)))return;a.sendErrors&&m({type:"console.warn",errorTrace:s,args:_(r)})}catch(s){y("[Scout] console.warn override failure:",s)}});let i=a.endpoint?new URL(a.endpoint).origin:"";a.loadUAParser&&a.browserDetails&&i&&O(`${i}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),a.handleSourceMaps&&i&&O(`${i}/vendor/source-map.min.js`)}function ie(e={},t={}){if(e.user&&(w=e.user,delete e.user),D){g=l(l({},g),e),a=l(l({},a),t);return}g=l(l({},g),e),a=l(l({},a),t),D=!0,typeof window!="undefined"&&(ae(),window.Scout={init:(n,o)=>{n!=null&&n.user&&(w=n.user,delete n.user),g=l(l({},g),n),o&&(a=l(l({},a),o))},setScope:n=>{g=l(l({},g),n)},setConfig:n=>{a=l(l({},a),n)},setUser:F,setContext:B,setTag:W,addBreadcrumb:p,error:H})}
5
5
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.js"],
4
- "sourcesContent": ["/**\n * Scout.js Browser SDK\n *\n * Captures errors, unhandled rejections, and console output.\n * Collects browser telemetry, session tracking, and source maps.\n *\n * Usage:\n * import { init, captureError } from 'scout-error'\n * init({ app: 'My App', project: 'my-project' }, { endpoint: 'https://...' })\n */\n\n// UA Parser and Source Map are loaded at runtime from the same host as the endpoint\n// to avoid CDN/CSP issues. For npm/bundler users (Vue/React/Node), import them directly.\n\nconst defaultConfig = {\n trackUserInteractions: true,\n selfHealingErrors: false,\n attachStacktrace: true,\n handleSourceMaps: true,\n browserDetails: true,\n warnOnCapture: false,\n loadUAParser: true,\n ignoreErrors: null,\n sendErrors: true,\n sampleRate: 1.0,\n enabled: true,\n debug: false,\n endpoint: '',\n token: null,\n\n overrideOnError: false,\n overrideOnUnhandledRejection: false,\n addErrorEventListener: true,\n addUnhandledRejectionEventListener: true,\n\n overrideConsoleLog: false,\n overrideConsoleWarn: false,\n overrideConsoleInfo: false,\n overrideConsoleError: true,\n}\n\nlet config = { ...defaultConfig }\n\nlet scope = {\n environment: typeof window !== 'undefined' && window.location?.hostname === 'localhost' ? 'development' : 'production',\n sdk: 'javascript',\n sdkVersion: __SDK_VERSION__,\n project: null,\n release: null,\n version: null,\n app: null,\n}\n\nconst userInteractions = { clicks: 0, scrolls: 0 }\nlet pageloadId = null\nlet initialized = false\nlet userContext = null\nlet customContext = {}\nconst breadcrumbs = []\nconst MAX_BREADCRUMBS = 30\n\n// Save originals before any overrides\nconst _consoleError = console.error\nconst _consoleWarn = console.warn\nconst _consoleInfo = console.info\nconst _consoleLog = console.log\n\n// --- Utilities ---\n\nfunction generateId(prefix) {\n return `${prefix}_${Math.random().toString(36).substr(2, 9)}`\n}\n\nfunction getIds() {\n const userId = localStorage.getItem('__scoutUserId') || (localStorage.setItem('__scoutUserId', generateId('user')), localStorage.getItem('__scoutUserId'))\n const sessionId = sessionStorage.getItem('__scoutSessionId') || (sessionStorage.setItem('__scoutSessionId', generateId('session')), sessionStorage.getItem('__scoutSessionId'))\n pageloadId = pageloadId || generateId('pageload')\n return { pageloadId, userId, sessionId }\n}\n\nfunction getBrowser() {\n if (window._uaParserResult?.browser?.name) return window._uaParserResult.browser.name\n const ua = navigator.userAgent\n const map = [\n { p: /Chrome.*Mobile/, n: 'Chrome Mobile' },\n { p: /Chrome/, n: 'Chrome' },\n { p: /Firefox.*Mobile/, n: 'Firefox Mobile' },\n { p: /Firefox/, n: 'Firefox' },\n { p: /Safari.*Mobile/, n: 'Safari Mobile' },\n { p: /Safari/, n: 'Safari' },\n { p: /MSIE|Trident/, n: 'Internet Explorer' },\n { p: /Edge/, n: 'Edge' },\n ]\n return map.find(b => ua.match(b.p))?.n || 'Unknown'\n}\n\nfunction getOS() {\n if (window._uaParserResult?.os?.name) return window._uaParserResult.os.name\n const ua = navigator.userAgent\n const map = [\n { p: /Win/, n: 'Windows' },\n { p: /Mac/, n: 'Mac OS' },\n { p: /X11|Linux/, n: 'Linux' },\n { p: /Android/, n: 'Android' },\n { p: /iPhone|iPad/, n: 'iOS' },\n ]\n return map.find(o => ua.match(o.p))?.n || 'Unknown'\n}\n\nfunction captureBrowserDetails() {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection\n return {\n connectionType: conn ? conn.effectiveType : 'unknown',\n userAgent: navigator.userAgent,\n width: window.innerWidth,\n height: window.innerHeight,\n screenWidth: screen.width,\n screenHeight: screen.height,\n errorTimestamp: Date.now(),\n timeLocale: Intl.DateTimeFormat().resolvedOptions().timeZone,\n browserLocale: navigator.language || navigator.userLanguage,\n sessionTime: Math.round(performance.now() / 1000),\n deviceMemory: navigator.deviceMemory || 'unknown',\n timezoneOffset: new Date().getTimezoneOffset(),\n cookiesEnabled: navigator.cookieEnabled,\n url: window.location.href,\n host: window.location.host,\n referrer: document.referrer,\n browser: getBrowser(),\n browserVersion: window._uaParserResult?.browser?.version || null,\n os: getOS(),\n osVersion: window._uaParserResult?.os?.version || null,\n deviceType: window._uaParserResult?.device?.type || null,\n deviceModel: window._uaParserResult?.device?.model || null,\n deviceVendor: window._uaParserResult?.device?.vendor || null,\n loadTime: Math.max(0, performance.timing.loadEventEnd - performance.timing.navigationStart),\n userClicks: userInteractions.clicks,\n userScrolls: userInteractions.scrolls,\n }\n}\n\nfunction shouldIgnoreError(msg) {\n if (!config.ignoreErrors || !Array.isArray(config.ignoreErrors)) return false\n return config.ignoreErrors.some(pattern => {\n if (typeof pattern === 'string') return msg.includes(pattern)\n if (pattern instanceof RegExp) return pattern.test(msg)\n return false\n })\n}\n\nfunction postData(url, data) {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 5000)\n\n const headers = { 'Content-Type': 'application/json' }\n if (config.token) headers['X-Ingest-Token'] = config.token\n\n return fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(data),\n signal: controller.signal,\n })\n .then(r => { clearTimeout(timeout); return r })\n .catch(() => { clearTimeout(timeout) })\n}\n\nfunction argsToString(args) {\n const fmt = (args[0] || '') + ''\n const rest = [...args]\n return fmt.replace(/%[sdj]/g, (m) => {\n const v = rest.shift()\n if (m === '%s') return String(v)\n if (m === '%d') return Number(v)\n if (m === '%j') return JSON.stringify(v)\n return m\n })\n}\n\nfunction _loadScript(src, onload) {\n const s = document.createElement('script')\n s.src = src\n s.async = true\n if (onload) s.onload = onload\n document.head.appendChild(s)\n}\n\n// --- Source Maps ---\n\nasync function resolveSourceMap(sourceUrl, lineno, colno) {\n try {\n // Fetch the JS file to find sourceMappingURL\n const jsResponse = await fetch(sourceUrl)\n if (!jsResponse.ok) return null\n const jsCode = await jsResponse.text()\n\n const inlineMatch = jsCode.match(/\\/\\/# sourceMappingURL=data:application\\/json;base64,([^\\s]+)/)\n const externalMatch = jsCode.match(/\\/\\/# sourceMappingURL=(?!data:)([^\\s]+)/)\n\n let sourceMapData\n if (inlineMatch) {\n sourceMapData = JSON.parse(atob(inlineMatch[1]))\n } else if (externalMatch) {\n const mapURL = new URL(externalMatch[1], sourceUrl).href\n const mapResponse = await fetch(mapURL)\n if (!mapResponse.ok) return null\n sourceMapData = await mapResponse.json()\n } else {\n return null\n }\n\n if (!window.sourceMap?.SourceMapConsumer) return null\n const consumer = new window.sourceMap.SourceMapConsumer(sourceMapData)\n const pos = consumer.originalPositionFor({ line: lineno, column: colno })\n\n if (!pos.source) return null\n\n // Extract the original source snippet\n const sourceIndex = sourceMapData.sources.indexOf(pos.source)\n let snippet = null\n if (sourceMapData.sourcesContent && sourceMapData.sourcesContent[sourceIndex]) {\n snippet = sourceMapData.sourcesContent[sourceIndex]\n }\n\n return {\n originalSource: pos.source,\n originalLine: pos.line,\n originalColumn: pos.column,\n originalName: pos.name,\n snippet,\n }\n } catch (e) {\n return null\n }\n}\n\n// --- Breadcrumbs ---\n\nfunction _addBreadcrumb(crumb) {\n breadcrumbs.push({ timestamp: Date.now(), ...crumb })\n if (breadcrumbs.length > MAX_BREADCRUMBS) breadcrumbs.shift()\n}\n\n// --- Core ---\n\nasync function pushErrorEvent(obj) {\n const details = config.browserDetails ? captureBrowserDetails() : {}\n const event = Object.assign(obj, details, scope, getIds())\n\n if (userContext) event.user = userContext\n if (Object.keys(customContext).length) event.context = { ...customContext }\n event.breadcrumbs = breadcrumbs.slice()\n\n if (config.sampleRate && Math.random() < (1 - parseFloat(config.sampleRate))) {\n if (config.debug) _consoleLog('[Scout] Suppressed by sampling')\n return\n }\n\n if (!config.attachStacktrace) obj.errorTrace = null\n\n // Strip scout's own frames from stack traces (for console.error/warn captures)\n if (obj.errorTrace) {\n try {\n const lines = obj.errorTrace.split('\\n')\n const filtered = [lines[0]]\n for (let i = 1; i < lines.length; i++) {\n if (!lines[i].includes('/scout') && !lines[i].includes('scout.js') && !lines[i].includes('scout-error')) {\n filtered.push(lines[i])\n }\n }\n if (filtered.length > 1) obj.errorTrace = filtered.join('\\n')\n } catch (e) { /* ignore */ }\n }\n\n if ((obj.errorTrace || obj.stack) && !obj.source) {\n try {\n const stack = obj.errorTrace || obj.stack\n const lines = stack ? stack.split('\\n') : []\n // Find the first frame with a source location (skip the error message line)\n for (let i = 1; i < lines.length; i++) {\n const match = lines[i].trim().match(/(http.*?):(\\d+):(\\d+)/)\n if (match) {\n obj.source = match[1]\n obj.lineno = parseInt(match[2], 10)\n obj.colno = parseInt(match[3], 10)\n break\n }\n }\n } catch (e) { /* ignore */ }\n }\n\n // Resolve source maps if enabled and we have a source location\n if (config.handleSourceMaps && obj.source && obj.lineno) {\n try {\n const resolved = await resolveSourceMap(obj.source, obj.lineno, obj.colno || 0)\n if (resolved) {\n event.originalSource = resolved.originalSource\n event.originalLine = resolved.originalLine\n event.originalColumn = resolved.originalColumn\n event.originalName = resolved.originalName\n event.highlightLineNumber = resolved.originalLine\n if (resolved.snippet) event.snippet = resolved.snippet\n }\n } catch (e) { /* fail silently */ }\n }\n\n if (config.debug) _consoleLog('[Scout] Sending:', event)\n if (config.endpoint) postData(config.endpoint, event)\n}\n\n/**\n * Manually capture an error object.\n */\nexport function captureError(event) {\n if (!config.enabled) return\n pushErrorEvent(event)\n}\n\n/**\n * Set identified user info. Call after login.\n * @param {{ id?: string, email?: string, name?: string }} user\n */\nexport function setUser(user) {\n userContext = user\n}\n\n/**\n * Merge custom key-value context attached to all future errors.\n * @param {Object} ctx\n */\nexport function setContext(ctx) {\n customContext = { ...customContext, ...ctx }\n}\n\n/**\n * Set a single context tag.\n */\nexport function setTag(key, value) {\n customContext[key] = value\n}\n\n/**\n * Manually add a breadcrumb.\n * @param {{ category?: string, message?: string, data?: Object }} crumb\n */\nexport function addBreadcrumb(crumb) {\n _addBreadcrumb(crumb)\n}\n\n// --- Setup ---\n\nfunction setupListeners() {\n // Click tracking + breadcrumbs\n if (config.trackUserInteractions) {\n document.addEventListener('click', (e) => {\n userInteractions.clicks++\n const el = e.target\n const tag = el.tagName ? el.tagName.toLowerCase() : ''\n const text = (el.textContent || '').trim().slice(0, 50)\n _addBreadcrumb({ category: 'click', message: tag + (text ? ': ' + text : '') })\n })\n let lastScroll = 0\n window.addEventListener('scroll', () => {\n const now = Date.now()\n if (now - lastScroll > 100) { userInteractions.scrolls++; lastScroll = now }\n })\n }\n\n // Navigation breadcrumbs\n const origPushState = history.pushState\n history.pushState = function() {\n origPushState.apply(this, arguments)\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n }\n window.addEventListener('popstate', () => {\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n })\n\n // Fetch breadcrumbs\n const origFetch = window.fetch\n window.fetch = function(input, init) {\n const url = typeof input === 'string' ? input : (input?.url || '')\n const method = init?.method || 'GET'\n const start = Date.now()\n return origFetch.apply(this, arguments).then(response => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { status: response.status, duration: Date.now() - start } })\n return response\n }).catch(err => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { error: err.message, duration: Date.now() - start } })\n throw err\n })\n }\n\n // XHR breadcrumbs\n const origOpen = XMLHttpRequest.prototype.open\n const origSend = XMLHttpRequest.prototype.send\n XMLHttpRequest.prototype.open = function(method, url) {\n this._scoutMethod = method\n this._scoutUrl = url\n return origOpen.apply(this, arguments)\n }\n XMLHttpRequest.prototype.send = function() {\n const self = this\n const start = Date.now()\n self.addEventListener('loadend', () => {\n _addBreadcrumb({ category: 'xhr', message: `${self._scoutMethod || 'GET'} ${self._scoutUrl || ''}`, data: { status: self.status, duration: Date.now() - start } })\n })\n return origSend.apply(this, arguments)\n }\n\n // Error event listener\n if (config.addErrorEventListener) {\n window.addEventListener('error', async (event) => {\n if (!config.enabled) return\n try {\n const errorTrace = event.error ? event.error.stack : 'No stack trace available'\n if (shouldIgnoreError(event.message)) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'window.onerror',\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Error handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Unhandled rejection listener\n if (config.addUnhandledRejectionEventListener) {\n window.addEventListener('unhandledrejection', (event) => {\n if (!config.enabled) return\n try {\n const error = event.reason\n const errorTrace = error?.stack || 'No stack trace available'\n if (shouldIgnoreError(error?.message || '')) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'Unhandled Promise Rejection',\n message: error?.message || 'Unhandled Promise Rejection',\n reason: event.reason,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Rejection handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Console overrides\n if (config.overrideConsoleError) {\n console.error = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.error', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.error override failure:', e) }\n }\n }\n\n if (config.overrideConsoleWarn) {\n console.warn = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.warn', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.warn override failure:', e) }\n }\n }\n\n // Load UA Parser and Source Map from endpoint host (self-hosted, no CDN)\n const baseUrl = config.endpoint ? new URL(config.endpoint).origin : ''\n if (config.loadUAParser && config.browserDetails && baseUrl) {\n _loadScript(`${baseUrl}/vendor/ua-parser.min.js`, () => {\n if (typeof UAParser !== 'undefined') {\n window._uaParserResult = new UAParser().getResult()\n }\n })\n }\n if (config.handleSourceMaps && baseUrl) {\n _loadScript(`${baseUrl}/vendor/source-map.min.js`)\n }\n}\n\n/**\n * Initialize Scout error tracking.\n *\n * @param {Object} scopeOptions - { app, project, version, environment, user }\n * @param {Object} configOptions - { endpoint, token, sampleRate, debug, ... }\n */\nexport function init(scopeOptions = {}, configOptions = {}) {\n // Extract user from scope if provided\n if (scopeOptions.user) {\n userContext = scopeOptions.user\n delete scopeOptions.user\n }\n\n if (initialized) {\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n return\n }\n\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n initialized = true\n\n if (typeof window !== 'undefined') {\n setupListeners()\n\n window.Scout = {\n init: (s, c) => { if (s?.user) { userContext = s.user; delete s.user }; scope = { ...scope, ...s }; if (c) config = { ...config, ...c } },\n setScope: (s) => { scope = { ...scope, ...s } },\n setConfig: (c) => { config = { ...config, ...c } },\n setUser,\n setContext,\n setTag,\n addBreadcrumb: _addBreadcrumb,\n error: captureError,\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["index_exports", "__export", "addBreadcrumb", "captureError", "init", "setContext", "setTag", "setUser", "__toCommonJS", "defaultConfig", "config", "__spreadValues", "_a", "scope", "userInteractions", "pageloadId", "initialized", "userContext", "customContext", "breadcrumbs", "MAX_BREADCRUMBS", "_consoleWarn", "_consoleLog", "generateId", "prefix", "getIds", "userId", "sessionId", "pageloadId", "getBrowser", "_a", "_b", "_c", "ua", "b", "getOS", "o", "captureBrowserDetails", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "conn", "userInteractions", "shouldIgnoreError", "msg", "config", "pattern", "postData", "url", "data", "controller", "timeout", "headers", "argsToString", "args", "fmt", "rest", "m", "v", "_loadScript", "src", "onload", "s", "resolveSourceMap", "sourceUrl", "lineno", "colno", "__async", "jsResponse", "jsCode", "inlineMatch", "externalMatch", "sourceMapData", "mapURL", "mapResponse", "pos", "sourceIndex", "snippet", "e", "_addBreadcrumb", "crumb", "breadcrumbs", "__spreadValues", "MAX_BREADCRUMBS", "pushErrorEvent", "obj", "details", "event", "scope", "userContext", "customContext", "lines", "filtered", "i", "stack", "match", "resolved", "captureError", "setUser", "user", "setContext", "ctx", "setTag", "key", "value", "addBreadcrumb", "setupListeners", "el", "tag", "text", "lastScroll", "now", "origPushState", "origFetch", "input", "init", "method", "start", "response", "err", "origOpen", "origSend", "self", "errorTrace", "_consoleWarn", "error", "baseUrl", "scopeOptions", "configOptions", "initialized", "c"]
4
+ "sourcesContent": ["/**\n * Scout.js Browser SDK\n *\n * Captures errors, unhandled rejections, and console output.\n * Collects browser telemetry, session tracking, and source maps.\n *\n * Usage:\n * import { init, captureError } from 'scout-error'\n * init({ app: 'My App', project: 'my-project' }, { endpoint: 'https://...' })\n */\n\n// UA Parser and Source Map are loaded at runtime from the same host as the endpoint\n// to avoid CDN/CSP issues. For npm/bundler users (Vue/React/Node), import them directly.\n\nconst defaultConfig = {\n trackUserInteractions: true,\n selfHealingErrors: false,\n attachStacktrace: true,\n handleSourceMaps: true,\n browserDetails: true,\n warnOnCapture: false,\n loadUAParser: true,\n ignoreErrors: null,\n sendErrors: true,\n sampleRate: 1.0,\n enabled: true,\n debug: false,\n endpoint: '',\n token: null,\n\n overrideOnError: false,\n overrideOnUnhandledRejection: false,\n addErrorEventListener: true,\n addUnhandledRejectionEventListener: true,\n\n overrideConsoleLog: false,\n overrideConsoleWarn: false,\n overrideConsoleInfo: false,\n overrideConsoleError: true,\n}\n\nlet config = { ...defaultConfig }\n\nlet scope = {\n environment: typeof window !== 'undefined' && window.location?.hostname === 'localhost' ? 'development' : 'production',\n sdk: 'javascript',\n sdkVersion: __SDK_VERSION__,\n project: null,\n release: null,\n version: null,\n app: null,\n}\n\nconst userInteractions = { clicks: 0, scrolls: 0 }\nlet pageloadId = null\nlet initialized = false\nlet userContext = null\nlet customContext = {}\nconst breadcrumbs = []\nconst MAX_BREADCRUMBS = 30\n\n// Save originals before any overrides\nconst _consoleError = console.error\nconst _consoleWarn = console.warn\nconst _consoleInfo = console.info\nconst _consoleLog = console.log\n\n// --- Utilities ---\n\nfunction generateId(prefix) {\n return `${prefix}_${Math.random().toString(36).substr(2, 9)}`\n}\n\nfunction getIds() {\n const userId = localStorage.getItem('__scoutUserId') || (localStorage.setItem('__scoutUserId', generateId('user')), localStorage.getItem('__scoutUserId'))\n const sessionId = sessionStorage.getItem('__scoutSessionId') || (sessionStorage.setItem('__scoutSessionId', generateId('session')), sessionStorage.getItem('__scoutSessionId'))\n pageloadId = pageloadId || generateId('pageload')\n return { pageloadId, userId, sessionId }\n}\n\nfunction getBrowser() {\n if (window._uaParserResult?.browser?.name) return window._uaParserResult.browser.name\n const ua = navigator.userAgent\n const map = [\n { p: /Chrome.*Mobile/, n: 'Chrome Mobile' },\n { p: /Chrome/, n: 'Chrome' },\n { p: /Firefox.*Mobile/, n: 'Firefox Mobile' },\n { p: /Firefox/, n: 'Firefox' },\n { p: /Safari.*Mobile/, n: 'Safari Mobile' },\n { p: /Safari/, n: 'Safari' },\n { p: /MSIE|Trident/, n: 'Internet Explorer' },\n { p: /Edge/, n: 'Edge' },\n ]\n return map.find(b => ua.match(b.p))?.n || 'Unknown'\n}\n\nfunction getOS() {\n if (window._uaParserResult?.os?.name) return window._uaParserResult.os.name\n const ua = navigator.userAgent\n const map = [\n { p: /Win/, n: 'Windows' },\n { p: /Mac/, n: 'Mac OS' },\n { p: /X11|Linux/, n: 'Linux' },\n { p: /Android/, n: 'Android' },\n { p: /iPhone|iPad/, n: 'iOS' },\n ]\n return map.find(o => ua.match(o.p))?.n || 'Unknown'\n}\n\nfunction captureBrowserDetails() {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection\n return {\n connectionType: conn ? conn.effectiveType : 'unknown',\n userAgent: navigator.userAgent,\n width: window.innerWidth,\n height: window.innerHeight,\n screenWidth: screen.width,\n screenHeight: screen.height,\n errorTimestamp: Date.now(),\n timeLocale: Intl.DateTimeFormat().resolvedOptions().timeZone,\n browserLocale: navigator.language || navigator.userLanguage,\n sessionTime: Math.round(performance.now() / 1000),\n deviceMemory: navigator.deviceMemory || 'unknown',\n timezoneOffset: new Date().getTimezoneOffset(),\n cookiesEnabled: navigator.cookieEnabled,\n url: window.location.href,\n host: window.location.host,\n referrer: document.referrer,\n browser: getBrowser(),\n browserVersion: window._uaParserResult?.browser?.version || null,\n os: getOS(),\n osVersion: window._uaParserResult?.os?.version || null,\n deviceType: window._uaParserResult?.device?.type || null,\n deviceModel: window._uaParserResult?.device?.model || null,\n deviceVendor: window._uaParserResult?.device?.vendor || null,\n loadTime: Math.max(0, performance.timing.loadEventEnd - performance.timing.navigationStart),\n userClicks: userInteractions.clicks,\n userScrolls: userInteractions.scrolls,\n }\n}\n\nfunction shouldIgnoreError(msg) {\n if (!config.ignoreErrors || !Array.isArray(config.ignoreErrors)) return false\n return config.ignoreErrors.some(pattern => {\n if (typeof pattern === 'string') return msg.includes(pattern)\n if (pattern instanceof RegExp) return pattern.test(msg)\n return false\n })\n}\n\nfunction postData(url, data) {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 5000)\n\n const headers = { 'Content-Type': 'application/json' }\n if (config.token) headers['X-Ingest-Token'] = config.token\n\n return fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(data),\n signal: controller.signal,\n })\n .then(r => { clearTimeout(timeout); return r })\n .catch(() => { clearTimeout(timeout) })\n}\n\nfunction argsToString(args) {\n const fmt = (args[0] || '') + ''\n const rest = [...args]\n return fmt.replace(/%[sdj]/g, (m) => {\n const v = rest.shift()\n if (m === '%s') return String(v)\n if (m === '%d') return Number(v)\n if (m === '%j') return JSON.stringify(v)\n return m\n })\n}\n\nfunction _loadScript(src, onload) {\n const s = document.createElement('script')\n s.src = src\n s.async = true\n if (onload) s.onload = onload\n document.head.appendChild(s)\n}\n\n// --- Source Maps ---\n\nasync function resolveSourceMap(sourceUrl, lineno, colno) {\n try {\n // Fetch the JS file to find sourceMappingURL\n const jsResponse = await fetch(sourceUrl)\n if (!jsResponse.ok) return null\n const jsCode = await jsResponse.text()\n\n const inlineMatch = jsCode.match(/\\/\\/# sourceMappingURL=data:application\\/json;base64,([^\\s]+)/)\n const externalMatch = jsCode.match(/\\/\\/# sourceMappingURL=(?!data:)([^\\s]+)/)\n\n let sourceMapData\n if (inlineMatch) {\n sourceMapData = JSON.parse(atob(inlineMatch[1]))\n } else if (externalMatch) {\n const mapURL = new URL(externalMatch[1], sourceUrl).href\n const mapResponse = await fetch(mapURL)\n if (!mapResponse.ok) return null\n sourceMapData = await mapResponse.json()\n } else {\n return null\n }\n\n if (!window.sourceMap?.SourceMapConsumer) return null\n const consumer = new window.sourceMap.SourceMapConsumer(sourceMapData)\n const pos = consumer.originalPositionFor({ line: lineno, column: colno })\n\n if (!pos.source) return null\n\n // Extract the original source snippet\n const sourceIndex = sourceMapData.sources.indexOf(pos.source)\n let snippet = null\n if (sourceMapData.sourcesContent && sourceMapData.sourcesContent[sourceIndex]) {\n snippet = sourceMapData.sourcesContent[sourceIndex]\n }\n\n return {\n originalSource: pos.source,\n originalLine: pos.line,\n originalColumn: pos.column,\n originalName: pos.name,\n snippet,\n }\n } catch (e) {\n return null\n }\n}\n\n// --- Breadcrumbs ---\n\nfunction _addBreadcrumb(crumb) {\n breadcrumbs.push({ timestamp: Date.now(), ...crumb })\n if (breadcrumbs.length > MAX_BREADCRUMBS) breadcrumbs.shift()\n}\n\n// --- Core ---\n\nasync function pushErrorEvent(obj) {\n const details = config.browserDetails ? captureBrowserDetails() : {}\n const event = Object.assign(obj, details, scope, getIds())\n\n if (userContext) event.user = userContext\n if (Object.keys(customContext).length) event.context = { ...customContext }\n event.breadcrumbs = breadcrumbs.slice()\n\n if (config.sampleRate && Math.random() < (1 - parseFloat(config.sampleRate))) {\n if (config.debug) _consoleLog('[Scout] Suppressed by sampling')\n return\n }\n\n if (!config.attachStacktrace) obj.errorTrace = null\n\n // Strip scout's own frames from stack traces (for console.error/warn captures)\n if (obj.errorTrace) {\n try {\n const lines = obj.errorTrace.split('\\n')\n const filtered = [lines[0]]\n for (let i = 1; i < lines.length; i++) {\n if (!lines[i].includes('/scout') && !lines[i].includes('scout.js') && !lines[i].includes('scout-error')) {\n filtered.push(lines[i])\n }\n }\n if (filtered.length > 1) obj.errorTrace = filtered.join('\\n')\n } catch (e) { /* ignore */ }\n }\n\n if ((obj.errorTrace || obj.stack) && !obj.source) {\n try {\n const stack = obj.errorTrace || obj.stack\n const lines = stack ? stack.split('\\n') : []\n // Find the first frame with a source location (skip the error message line)\n for (let i = 1; i < lines.length; i++) {\n const match = lines[i].trim().match(/(http.*?):(\\d+):(\\d+)/)\n if (match) {\n obj.source = match[1]\n obj.lineno = parseInt(match[2], 10)\n obj.colno = parseInt(match[3], 10)\n break\n }\n }\n } catch (e) { /* ignore */ }\n }\n\n // Send the event immediately \u2014 don't let source map resolution block it\n if (config.debug) _consoleLog('[Scout] Sending:', event)\n if (config.endpoint) postData(config.endpoint, event)\n\n // Resolve source maps after sending (best-effort, non-blocking)\n if (config.handleSourceMaps && obj.source && obj.lineno) {\n try {\n const resolved = await resolveSourceMap(obj.source, obj.lineno, obj.colno || 0)\n if (resolved) {\n const enriched = {\n ...event,\n originalSource: resolved.originalSource,\n originalLine: resolved.originalLine,\n originalColumn: resolved.originalColumn,\n originalName: resolved.originalName,\n highlightLineNumber: resolved.originalLine,\n }\n if (resolved.snippet) enriched.snippet = resolved.snippet\n if (config.endpoint) postData(config.endpoint, enriched)\n }\n } catch (e) { /* fail silently */ }\n }\n}\n\n/**\n * Manually capture an error object.\n */\nexport function captureError(event) {\n if (!config.enabled) return\n pushErrorEvent(event)\n}\n\n/**\n * Set identified user info. Call after login.\n * @param {{ id?: string, email?: string, name?: string }} user\n */\nexport function setUser(user) {\n userContext = user\n}\n\n/**\n * Merge custom key-value context attached to all future errors.\n * @param {Object} ctx\n */\nexport function setContext(ctx) {\n customContext = { ...customContext, ...ctx }\n}\n\n/**\n * Set a single context tag.\n */\nexport function setTag(key, value) {\n customContext[key] = value\n}\n\n/**\n * Manually add a breadcrumb.\n * @param {{ category?: string, message?: string, data?: Object }} crumb\n */\nexport function addBreadcrumb(crumb) {\n _addBreadcrumb(crumb)\n}\n\n// --- Setup ---\n\nfunction setupListeners() {\n // Click tracking + breadcrumbs\n if (config.trackUserInteractions) {\n document.addEventListener('click', (e) => {\n userInteractions.clicks++\n const el = e.target\n const tag = el.tagName ? el.tagName.toLowerCase() : ''\n const text = (el.textContent || '').trim().slice(0, 50)\n _addBreadcrumb({ category: 'click', message: tag + (text ? ': ' + text : '') })\n })\n let lastScroll = 0\n window.addEventListener('scroll', () => {\n const now = Date.now()\n if (now - lastScroll > 100) { userInteractions.scrolls++; lastScroll = now }\n })\n }\n\n // Navigation breadcrumbs\n const origPushState = history.pushState\n history.pushState = function() {\n origPushState.apply(this, arguments)\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n }\n window.addEventListener('popstate', () => {\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n })\n\n // Fetch breadcrumbs\n const origFetch = window.fetch\n window.fetch = function(input, init) {\n const url = typeof input === 'string' ? input : (input?.url || '')\n const method = init?.method || 'GET'\n const start = Date.now()\n return origFetch.apply(this, arguments).then(response => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { status: response.status, duration: Date.now() - start } })\n return response\n }).catch(err => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { error: err.message, duration: Date.now() - start } })\n throw err\n })\n }\n\n // XHR breadcrumbs\n const origOpen = XMLHttpRequest.prototype.open\n const origSend = XMLHttpRequest.prototype.send\n XMLHttpRequest.prototype.open = function(method, url) {\n this._scoutMethod = method\n this._scoutUrl = url\n return origOpen.apply(this, arguments)\n }\n XMLHttpRequest.prototype.send = function() {\n const self = this\n const start = Date.now()\n self.addEventListener('loadend', () => {\n _addBreadcrumb({ category: 'xhr', message: `${self._scoutMethod || 'GET'} ${self._scoutUrl || ''}`, data: { status: self.status, duration: Date.now() - start } })\n })\n return origSend.apply(this, arguments)\n }\n\n // Error event listener\n if (config.addErrorEventListener) {\n window.addEventListener('error', async (event) => {\n if (!config.enabled) return\n try {\n const errorTrace = event.error ? event.error.stack : 'No stack trace available'\n if (shouldIgnoreError(event.message)) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'window.onerror',\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Error handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Unhandled rejection listener\n if (config.addUnhandledRejectionEventListener) {\n window.addEventListener('unhandledrejection', (event) => {\n if (!config.enabled) return\n try {\n const error = event.reason\n const errorTrace = error?.stack || 'No stack trace available'\n if (shouldIgnoreError(error?.message || '')) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'Unhandled Promise Rejection',\n message: error?.message || 'Unhandled Promise Rejection',\n reason: event.reason,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Rejection handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Console overrides\n if (config.overrideConsoleError) {\n console.error = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.error', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.error override failure:', e) }\n }\n }\n\n if (config.overrideConsoleWarn) {\n console.warn = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.warn', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.warn override failure:', e) }\n }\n }\n\n // Load UA Parser and Source Map from endpoint host (self-hosted, no CDN)\n const baseUrl = config.endpoint ? new URL(config.endpoint).origin : ''\n if (config.loadUAParser && config.browserDetails && baseUrl) {\n _loadScript(`${baseUrl}/vendor/ua-parser.min.js`, () => {\n if (typeof UAParser !== 'undefined') {\n window._uaParserResult = new UAParser().getResult()\n }\n })\n }\n if (config.handleSourceMaps && baseUrl) {\n _loadScript(`${baseUrl}/vendor/source-map.min.js`)\n }\n}\n\n/**\n * Initialize Scout error tracking.\n *\n * @param {Object} scopeOptions - { app, project, version, environment, user }\n * @param {Object} configOptions - { endpoint, token, sampleRate, debug, ... }\n */\nexport function init(scopeOptions = {}, configOptions = {}) {\n // Extract user from scope if provided\n if (scopeOptions.user) {\n userContext = scopeOptions.user\n delete scopeOptions.user\n }\n\n if (initialized) {\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n return\n }\n\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n initialized = true\n\n if (typeof window !== 'undefined') {\n setupListeners()\n\n window.Scout = {\n init: (s, c) => { if (s?.user) { userContext = s.user; delete s.user }; scope = { ...scope, ...s }; if (c) config = { ...config, ...c } },\n setScope: (s) => { scope = { ...scope, ...s } },\n setConfig: (c) => { config = { ...config, ...c } },\n setUser,\n setContext,\n setTag,\n addBreadcrumb: _addBreadcrumb,\n error: captureError,\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["index_exports", "__export", "addBreadcrumb", "captureError", "init", "setContext", "setTag", "setUser", "__toCommonJS", "defaultConfig", "config", "__spreadValues", "_a", "scope", "userInteractions", "pageloadId", "initialized", "userContext", "customContext", "breadcrumbs", "MAX_BREADCRUMBS", "_consoleWarn", "_consoleLog", "generateId", "prefix", "getIds", "userId", "sessionId", "pageloadId", "getBrowser", "_a", "_b", "_c", "ua", "b", "getOS", "o", "captureBrowserDetails", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "conn", "userInteractions", "shouldIgnoreError", "msg", "config", "pattern", "postData", "url", "data", "controller", "timeout", "headers", "argsToString", "args", "fmt", "rest", "m", "v", "_loadScript", "src", "onload", "s", "resolveSourceMap", "sourceUrl", "lineno", "colno", "__async", "jsResponse", "jsCode", "inlineMatch", "externalMatch", "sourceMapData", "mapURL", "mapResponse", "pos", "sourceIndex", "snippet", "e", "_addBreadcrumb", "crumb", "breadcrumbs", "__spreadValues", "MAX_BREADCRUMBS", "pushErrorEvent", "obj", "details", "event", "scope", "userContext", "customContext", "lines", "filtered", "i", "stack", "match", "resolved", "enriched", "__spreadProps", "captureError", "setUser", "user", "setContext", "ctx", "setTag", "key", "value", "addBreadcrumb", "setupListeners", "el", "tag", "text", "lastScroll", "now", "origPushState", "origFetch", "input", "init", "method", "start", "response", "err", "origOpen", "origSend", "self", "errorTrace", "_consoleWarn", "error", "baseUrl", "scopeOptions", "configOptions", "initialized", "c"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- var N=Object.defineProperty;var I=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;var T=(e,a,n)=>a in e?N(e,a,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[a]=n,l=(e,a)=>{for(var n in a||(a={}))O.call(a,n)&&T(e,n,a[n]);if(I)for(var n of I(a))$.call(a,n)&&T(e,n,a[n]);return e};var S=(e,a,n)=>new Promise((o,i)=>{var r=c=>{try{u(n.next(c))}catch(f){i(f)}},t=c=>{try{u(n.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(r,t);u((n=n.apply(e,a)).next())});var H={trackUserInteractions:!0,selfHealingErrors:!1,attachStacktrace:!0,handleSourceMaps:!0,browserDetails:!0,warnOnCapture:!1,loadUAParser:!0,ignoreErrors:null,sendErrors:!0,sampleRate:1,enabled:!0,debug:!1,endpoint:"",token:null,overrideOnError:!1,overrideOnUnhandledRejection:!1,addErrorEventListener:!0,addUnhandledRejectionEventListener:!0,overrideConsoleLog:!1,overrideConsoleWarn:!1,overrideConsoleInfo:!1,overrideConsoleError:!0},s=l({},H),D,g={environment:typeof window!="undefined"&&((D=window.location)==null?void 0:D.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.2.5",project:null,release:null,version:null,app:null},M={clicks:0,scrolls:0},k=null,x=!1,w=null,h={},_=[],F=30;var v=console.warn;var U=console.log;function R(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function B(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",R("user")),localStorage.getItem("__scoutUserId")),a=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return k=k||R("pageload"),{pageloadId:k,userId:e,sessionId:a}}function W(){var n,o,i;if((o=(n=window._uaParserResult)==null?void 0:n.browser)!=null&&o.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((i=[{p:/Chrome.*Mobile/,n:"Chrome Mobile"},{p:/Chrome/,n:"Chrome"},{p:/Firefox.*Mobile/,n:"Firefox Mobile"},{p:/Firefox/,n:"Firefox"},{p:/Safari.*Mobile/,n:"Safari Mobile"},{p:/Safari/,n:"Safari"},{p:/MSIE|Trident/,n:"Internet Explorer"},{p:/Edge/,n:"Edge"}].find(r=>e.match(r.p)))==null?void 0:i.n)||"Unknown"}function X(){var n,o,i;if((o=(n=window._uaParserResult)==null?void 0:n.os)!=null&&o.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((i=[{p:/Win/,n:"Windows"},{p:/Mac/,n:"Mac OS"},{p:/X11|Linux/,n:"Linux"},{p:/Android/,n:"Android"},{p:/iPhone|iPad/,n:"iOS"}].find(r=>e.match(r.p)))==null?void 0:i.n)||"Unknown"}function j(){var a,n,o,i,r,t,u,c,f,d;let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return{connectionType:e?e.effectiveType:"unknown",userAgent:navigator.userAgent,width:window.innerWidth,height:window.innerHeight,screenWidth:screen.width,screenHeight:screen.height,errorTimestamp:Date.now(),timeLocale:Intl.DateTimeFormat().resolvedOptions().timeZone,browserLocale:navigator.language||navigator.userLanguage,sessionTime:Math.round(performance.now()/1e3),deviceMemory:navigator.deviceMemory||"unknown",timezoneOffset:new Date().getTimezoneOffset(),cookiesEnabled:navigator.cookieEnabled,url:window.location.href,host:window.location.host,referrer:document.referrer,browser:W(),browserVersion:((n=(a=window._uaParserResult)==null?void 0:a.browser)==null?void 0:n.version)||null,os:X(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((t=(r=window._uaParserResult)==null?void 0:r.device)==null?void 0:t.type)||null,deviceModel:((c=(u=window._uaParserResult)==null?void 0:u.device)==null?void 0:c.model)||null,deviceVendor:((d=(f=window._uaParserResult)==null?void 0:f.device)==null?void 0:d.vendor)||null,loadTime:Math.max(0,performance.timing.loadEventEnd-performance.timing.navigationStart),userClicks:M.clicks,userScrolls:M.scrolls}}function y(e){return!s.ignoreErrors||!Array.isArray(s.ignoreErrors)?!1:s.ignoreErrors.some(a=>typeof a=="string"?e.includes(a):a instanceof RegExp?a.test(e):!1)}function V(e,a){let n=new AbortController,o=setTimeout(()=>n.abort(),5e3),i={"Content-Type":"application/json"};return s.token&&(i["X-Ingest-Token"]=s.token),fetch(e,{method:"POST",headers:i,body:JSON.stringify(a),signal:n.signal}).then(r=>(clearTimeout(o),r)).catch(()=>{clearTimeout(o)})}function E(e){let a=(e[0]||"")+"",n=[...e];return a.replace(/%[sdj]/g,o=>{let i=n.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function P(e,a){let n=document.createElement("script");n.src=e,n.async=!0,a&&(n.onload=a),document.head.appendChild(n)}function q(e,a,n){return S(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let r=yield i.text(),t=r.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=r.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(t)c=JSON.parse(atob(t[1]));else if(u){let A=new URL(u[1],e).href,b=yield fetch(A);if(!b.ok)return null;c=yield b.json()}else return null;if(!((o=window.sourceMap)!=null&&o.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:a,column:n});if(!d.source)return null;let C=c.sources.indexOf(d.source),L=null;return c.sourcesContent&&c.sourcesContent[C]&&(L=c.sourcesContent[C]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:L}}catch(i){return null}})}function p(e){_.push(l({timestamp:Date.now()},e)),_.length>F&&_.shift()}function m(e){return S(this,null,function*(){let a=s.browserDetails?j():{},n=Object.assign(e,a,g,B());if(w&&(n.user=w),Object.keys(h).length&&(n.context=l({},h)),n.breadcrumbs=_.slice(),s.sampleRate&&Math.random()<1-parseFloat(s.sampleRate)){s.debug&&U("[Scout] Suppressed by sampling");return}if(s.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let o=e.errorTrace.split(`
2
- `),i=[o[0]];for(let r=1;r<o.length;r++)!o[r].includes("/scout")&&!o[r].includes("scout.js")&&!o[r].includes("scout-error")&&i.push(o[r]);i.length>1&&(e.errorTrace=i.join(`
1
+ var $=Object.defineProperty,H=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var I=Object.getOwnPropertySymbols;var B=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var T=(e,a,r)=>a in e?$(e,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[a]=r,l=(e,a)=>{for(var r in a||(a={}))B.call(a,r)&&T(e,r,a[r]);if(I)for(var r of I(a))W.call(a,r)&&T(e,r,a[r]);return e},x=(e,a)=>H(e,F(a));var S=(e,a,r)=>new Promise((o,i)=>{var n=c=>{try{u(r.next(c))}catch(f){i(f)}},t=c=>{try{u(r.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(n,t);u((r=r.apply(e,a)).next())});var X={trackUserInteractions:!0,selfHealingErrors:!1,attachStacktrace:!0,handleSourceMaps:!0,browserDetails:!0,warnOnCapture:!1,loadUAParser:!0,ignoreErrors:null,sendErrors:!0,sampleRate:1,enabled:!0,debug:!1,endpoint:"",token:null,overrideOnError:!1,overrideOnUnhandledRejection:!1,addErrorEventListener:!0,addUnhandledRejectionEventListener:!0,overrideConsoleLog:!1,overrideConsoleWarn:!1,overrideConsoleInfo:!1,overrideConsoleError:!0},s=l({},X),N,g={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.2.6",project:null,release:null,version:null,app:null},M={clicks:0,scrolls:0},k=null,U=!1,w=null,h={},_=[],j=30;var v=console.warn;var P=console.log;function R(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function V(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",R("user")),localStorage.getItem("__scoutUserId")),a=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return k=k||R("pageload"),{pageloadId:k,userId:e,sessionId:a}}function q(){var r,o,i;if((o=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&o.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((i=[{p:/Chrome.*Mobile/,n:"Chrome Mobile"},{p:/Chrome/,n:"Chrome"},{p:/Firefox.*Mobile/,n:"Firefox Mobile"},{p:/Firefox/,n:"Firefox"},{p:/Safari.*Mobile/,n:"Safari Mobile"},{p:/Safari/,n:"Safari"},{p:/MSIE|Trident/,n:"Internet Explorer"},{p:/Edge/,n:"Edge"}].find(n=>e.match(n.p)))==null?void 0:i.n)||"Unknown"}function z(){var r,o,i;if((o=(r=window._uaParserResult)==null?void 0:r.os)!=null&&o.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((i=[{p:/Win/,n:"Windows"},{p:/Mac/,n:"Mac OS"},{p:/X11|Linux/,n:"Linux"},{p:/Android/,n:"Android"},{p:/iPhone|iPad/,n:"iOS"}].find(n=>e.match(n.p)))==null?void 0:i.n)||"Unknown"}function J(){var a,r,o,i,n,t,u,c,f,d;let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return{connectionType:e?e.effectiveType:"unknown",userAgent:navigator.userAgent,width:window.innerWidth,height:window.innerHeight,screenWidth:screen.width,screenHeight:screen.height,errorTimestamp:Date.now(),timeLocale:Intl.DateTimeFormat().resolvedOptions().timeZone,browserLocale:navigator.language||navigator.userLanguage,sessionTime:Math.round(performance.now()/1e3),deviceMemory:navigator.deviceMemory||"unknown",timezoneOffset:new Date().getTimezoneOffset(),cookiesEnabled:navigator.cookieEnabled,url:window.location.href,host:window.location.host,referrer:document.referrer,browser:q(),browserVersion:((r=(a=window._uaParserResult)==null?void 0:a.browser)==null?void 0:r.version)||null,os:z(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((t=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:t.type)||null,deviceModel:((c=(u=window._uaParserResult)==null?void 0:u.device)==null?void 0:c.model)||null,deviceVendor:((d=(f=window._uaParserResult)==null?void 0:f.device)==null?void 0:d.vendor)||null,loadTime:Math.max(0,performance.timing.loadEventEnd-performance.timing.navigationStart),userClicks:M.clicks,userScrolls:M.scrolls}}function y(e){return!s.ignoreErrors||!Array.isArray(s.ignoreErrors)?!1:s.ignoreErrors.some(a=>typeof a=="string"?e.includes(a):a instanceof RegExp?a.test(e):!1)}function D(e,a){let r=new AbortController,o=setTimeout(()=>r.abort(),5e3),i={"Content-Type":"application/json"};return s.token&&(i["X-Ingest-Token"]=s.token),fetch(e,{method:"POST",headers:i,body:JSON.stringify(a),signal:r.signal}).then(n=>(clearTimeout(o),n)).catch(()=>{clearTimeout(o)})}function E(e){let a=(e[0]||"")+"",r=[...e];return a.replace(/%[sdj]/g,o=>{let i=r.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function A(e,a){let r=document.createElement("script");r.src=e,r.async=!0,a&&(r.onload=a),document.head.appendChild(r)}function G(e,a,r){return S(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let n=yield i.text(),t=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(t)c=JSON.parse(atob(t[1]));else if(u){let O=new URL(u[1],e).href,b=yield fetch(O);if(!b.ok)return null;c=yield b.json()}else return null;if(!((o=window.sourceMap)!=null&&o.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:a,column:r});if(!d.source)return null;let C=c.sources.indexOf(d.source),L=null;return c.sourcesContent&&c.sourcesContent[C]&&(L=c.sourcesContent[C]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:L}}catch(i){return null}})}function p(e){_.push(l({timestamp:Date.now()},e)),_.length>j&&_.shift()}function m(e){return S(this,null,function*(){let a=s.browserDetails?J():{},r=Object.assign(e,a,g,V());if(w&&(r.user=w),Object.keys(h).length&&(r.context=l({},h)),r.breadcrumbs=_.slice(),s.sampleRate&&Math.random()<1-parseFloat(s.sampleRate)){s.debug&&P("[Scout] Suppressed by sampling");return}if(s.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let o=e.errorTrace.split(`
2
+ `),i=[o[0]];for(let n=1;n<o.length;n++)!o[n].includes("/scout")&&!o[n].includes("scout.js")&&!o[n].includes("scout-error")&&i.push(o[n]);i.length>1&&(e.errorTrace=i.join(`
3
3
  `))}catch(o){}if((e.errorTrace||e.stack)&&!e.source)try{let o=e.errorTrace||e.stack,i=o?o.split(`
4
- `):[];for(let r=1;r<i.length;r++){let t=i[r].trim().match(/(http.*?):(\d+):(\d+)/);if(t){e.source=t[1],e.lineno=parseInt(t[2],10),e.colno=parseInt(t[3],10);break}}}catch(o){}if(s.handleSourceMaps&&e.source&&e.lineno)try{let o=yield q(e.source,e.lineno,e.colno||0);o&&(n.originalSource=o.originalSource,n.originalLine=o.originalLine,n.originalColumn=o.originalColumn,n.originalName=o.originalName,n.highlightLineNumber=o.originalLine,o.snippet&&(n.snippet=o.snippet))}catch(o){}s.debug&&U("[Scout] Sending:",n),s.endpoint&&V(s.endpoint,n)})}function z(e){s.enabled&&m(e)}function J(e){w=e}function G(e){h=l(l({},h),e)}function K(e,a){h[e]=a}function Y(e){p(e)}function Z(){if(s.trackUserInteractions){document.addEventListener("click",t=>{M.clicks++;let u=t.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);p({category:"click",message:c+(f?": "+f:"")})});let r=0;window.addEventListener("scroll",()=>{let t=Date.now();t-r>100&&(M.scrolls++,r=t)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),p({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{p({category:"navigation",message:window.location.href})});let a=window.fetch;window.fetch=function(r,t){let u=typeof r=="string"?r:(r==null?void 0:r.url)||"",c=(t==null?void 0:t.method)||"GET",f=Date.now();return a.apply(this,arguments).then(d=>(p({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw p({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let n=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(r,t){return this._scoutMethod=r,this._scoutUrl=t,n.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let r=this,t=Date.now();return r.addEventListener("loadend",()=>{p({category:"xhr",message:`${r._scoutMethod||"GET"} ${r._scoutUrl||""}`,data:{status:r.status,duration:Date.now()-t}})}),o.apply(this,arguments)},s.addErrorEventListener&&window.addEventListener("error",r=>S(this,null,function*(){if(s.enabled){try{let t=r.error?r.error.stack:"No stack trace available";if(y(r.message))return;s.sendErrors&&m({type:"window.onerror",message:r.message,source:r.filename,lineno:r.lineno,colno:r.colno,errorTrace:t})}catch(t){v("[Scout] Error handler failure:",t)}s.selfHealingErrors&&r.preventDefault()}})),s.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",r=>{if(s.enabled){try{let t=r.reason,u=(t==null?void 0:t.stack)||"No stack trace available";if(y((t==null?void 0:t.message)||""))return;s.sendErrors&&m({type:"Unhandled Promise Rejection",message:(t==null?void 0:t.message)||"Unhandled Promise Rejection",reason:r.reason,errorTrace:u})}catch(t){v("[Scout] Rejection handler failure:",t)}s.selfHealingErrors&&r.preventDefault()}}),s.overrideConsoleError&&(console.error=function(...r){if(s.enabled)try{let t=new Error().stack;if(y(E(r)))return;s.sendErrors&&m({type:"console.error",errorTrace:t,args:E(r)})}catch(t){v("[Scout] console.error override failure:",t)}}),s.overrideConsoleWarn&&(console.warn=function(...r){if(s.enabled)try{let t=new Error().stack;if(y(E(r)))return;s.sendErrors&&m({type:"console.warn",errorTrace:t,args:E(r)})}catch(t){v("[Scout] console.warn override failure:",t)}});let i=s.endpoint?new URL(s.endpoint).origin:"";s.loadUAParser&&s.browserDetails&&i&&P(`${i}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),s.handleSourceMaps&&i&&P(`${i}/vendor/source-map.min.js`)}function ee(e={},a={}){if(e.user&&(w=e.user,delete e.user),x){g=l(l({},g),e),s=l(l({},s),a);return}g=l(l({},g),e),s=l(l({},s),a),x=!0,typeof window!="undefined"&&(Z(),window.Scout={init:(n,o)=>{n!=null&&n.user&&(w=n.user,delete n.user),g=l(l({},g),n),o&&(s=l(l({},s),o))},setScope:n=>{g=l(l({},g),n)},setConfig:n=>{s=l(l({},s),n)},setUser:J,setContext:G,setTag:K,addBreadcrumb:p,error:z})}export{Y as addBreadcrumb,z as captureError,ee as init,G as setContext,K as setTag,J as setUser};
4
+ `):[];for(let n=1;n<i.length;n++){let t=i[n].trim().match(/(http.*?):(\d+):(\d+)/);if(t){e.source=t[1],e.lineno=parseInt(t[2],10),e.colno=parseInt(t[3],10);break}}}catch(o){}if(s.debug&&P("[Scout] Sending:",r),s.endpoint&&D(s.endpoint,r),s.handleSourceMaps&&e.source&&e.lineno)try{let o=yield G(e.source,e.lineno,e.colno||0);if(o){let i=x(l({},r),{originalSource:o.originalSource,originalLine:o.originalLine,originalColumn:o.originalColumn,originalName:o.originalName,highlightLineNumber:o.originalLine});o.snippet&&(i.snippet=o.snippet),s.endpoint&&D(s.endpoint,i)}}catch(o){}})}function K(e){s.enabled&&m(e)}function Z(e){w=e}function Q(e){h=l(l({},h),e)}function Y(e,a){h[e]=a}function re(e){p(e)}function ee(){if(s.trackUserInteractions){document.addEventListener("click",t=>{M.clicks++;let u=t.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);p({category:"click",message:c+(f?": "+f:"")})});let n=0;window.addEventListener("scroll",()=>{let t=Date.now();t-n>100&&(M.scrolls++,n=t)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),p({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{p({category:"navigation",message:window.location.href})});let a=window.fetch;window.fetch=function(n,t){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(t==null?void 0:t.method)||"GET",f=Date.now();return a.apply(this,arguments).then(d=>(p({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw p({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let r=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,t){return this._scoutMethod=n,this._scoutUrl=t,r.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,t=Date.now();return n.addEventListener("loadend",()=>{p({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-t}})}),o.apply(this,arguments)},s.addErrorEventListener&&window.addEventListener("error",n=>S(this,null,function*(){if(s.enabled){try{let t=n.error?n.error.stack:"No stack trace available";if(y(n.message))return;s.sendErrors&&m({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:t})}catch(t){v("[Scout] Error handler failure:",t)}s.selfHealingErrors&&n.preventDefault()}})),s.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(s.enabled){try{let t=n.reason,u=(t==null?void 0:t.stack)||"No stack trace available";if(y((t==null?void 0:t.message)||""))return;s.sendErrors&&m({type:"Unhandled Promise Rejection",message:(t==null?void 0:t.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(t){v("[Scout] Rejection handler failure:",t)}s.selfHealingErrors&&n.preventDefault()}}),s.overrideConsoleError&&(console.error=function(...n){if(s.enabled)try{let t=new Error().stack;if(y(E(n)))return;s.sendErrors&&m({type:"console.error",errorTrace:t,args:E(n)})}catch(t){v("[Scout] console.error override failure:",t)}}),s.overrideConsoleWarn&&(console.warn=function(...n){if(s.enabled)try{let t=new Error().stack;if(y(E(n)))return;s.sendErrors&&m({type:"console.warn",errorTrace:t,args:E(n)})}catch(t){v("[Scout] console.warn override failure:",t)}});let i=s.endpoint?new URL(s.endpoint).origin:"";s.loadUAParser&&s.browserDetails&&i&&A(`${i}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),s.handleSourceMaps&&i&&A(`${i}/vendor/source-map.min.js`)}function te(e={},a={}){if(e.user&&(w=e.user,delete e.user),U){g=l(l({},g),e),s=l(l({},s),a);return}g=l(l({},g),e),s=l(l({},s),a),U=!0,typeof window!="undefined"&&(ee(),window.Scout={init:(r,o)=>{r!=null&&r.user&&(w=r.user,delete r.user),g=l(l({},g),r),o&&(s=l(l({},s),o))},setScope:r=>{g=l(l({},g),r)},setConfig:r=>{s=l(l({},s),r)},setUser:Z,setContext:Q,setTag:Y,addBreadcrumb:p,error:K})}export{re as addBreadcrumb,K as captureError,te as init,Q as setContext,Y as setTag,Z as setUser};
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.js"],
4
- "sourcesContent": ["/**\n * Scout.js Browser SDK\n *\n * Captures errors, unhandled rejections, and console output.\n * Collects browser telemetry, session tracking, and source maps.\n *\n * Usage:\n * import { init, captureError } from 'scout-error'\n * init({ app: 'My App', project: 'my-project' }, { endpoint: 'https://...' })\n */\n\n// UA Parser and Source Map are loaded at runtime from the same host as the endpoint\n// to avoid CDN/CSP issues. For npm/bundler users (Vue/React/Node), import them directly.\n\nconst defaultConfig = {\n trackUserInteractions: true,\n selfHealingErrors: false,\n attachStacktrace: true,\n handleSourceMaps: true,\n browserDetails: true,\n warnOnCapture: false,\n loadUAParser: true,\n ignoreErrors: null,\n sendErrors: true,\n sampleRate: 1.0,\n enabled: true,\n debug: false,\n endpoint: '',\n token: null,\n\n overrideOnError: false,\n overrideOnUnhandledRejection: false,\n addErrorEventListener: true,\n addUnhandledRejectionEventListener: true,\n\n overrideConsoleLog: false,\n overrideConsoleWarn: false,\n overrideConsoleInfo: false,\n overrideConsoleError: true,\n}\n\nlet config = { ...defaultConfig }\n\nlet scope = {\n environment: typeof window !== 'undefined' && window.location?.hostname === 'localhost' ? 'development' : 'production',\n sdk: 'javascript',\n sdkVersion: __SDK_VERSION__,\n project: null,\n release: null,\n version: null,\n app: null,\n}\n\nconst userInteractions = { clicks: 0, scrolls: 0 }\nlet pageloadId = null\nlet initialized = false\nlet userContext = null\nlet customContext = {}\nconst breadcrumbs = []\nconst MAX_BREADCRUMBS = 30\n\n// Save originals before any overrides\nconst _consoleError = console.error\nconst _consoleWarn = console.warn\nconst _consoleInfo = console.info\nconst _consoleLog = console.log\n\n// --- Utilities ---\n\nfunction generateId(prefix) {\n return `${prefix}_${Math.random().toString(36).substr(2, 9)}`\n}\n\nfunction getIds() {\n const userId = localStorage.getItem('__scoutUserId') || (localStorage.setItem('__scoutUserId', generateId('user')), localStorage.getItem('__scoutUserId'))\n const sessionId = sessionStorage.getItem('__scoutSessionId') || (sessionStorage.setItem('__scoutSessionId', generateId('session')), sessionStorage.getItem('__scoutSessionId'))\n pageloadId = pageloadId || generateId('pageload')\n return { pageloadId, userId, sessionId }\n}\n\nfunction getBrowser() {\n if (window._uaParserResult?.browser?.name) return window._uaParserResult.browser.name\n const ua = navigator.userAgent\n const map = [\n { p: /Chrome.*Mobile/, n: 'Chrome Mobile' },\n { p: /Chrome/, n: 'Chrome' },\n { p: /Firefox.*Mobile/, n: 'Firefox Mobile' },\n { p: /Firefox/, n: 'Firefox' },\n { p: /Safari.*Mobile/, n: 'Safari Mobile' },\n { p: /Safari/, n: 'Safari' },\n { p: /MSIE|Trident/, n: 'Internet Explorer' },\n { p: /Edge/, n: 'Edge' },\n ]\n return map.find(b => ua.match(b.p))?.n || 'Unknown'\n}\n\nfunction getOS() {\n if (window._uaParserResult?.os?.name) return window._uaParserResult.os.name\n const ua = navigator.userAgent\n const map = [\n { p: /Win/, n: 'Windows' },\n { p: /Mac/, n: 'Mac OS' },\n { p: /X11|Linux/, n: 'Linux' },\n { p: /Android/, n: 'Android' },\n { p: /iPhone|iPad/, n: 'iOS' },\n ]\n return map.find(o => ua.match(o.p))?.n || 'Unknown'\n}\n\nfunction captureBrowserDetails() {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection\n return {\n connectionType: conn ? conn.effectiveType : 'unknown',\n userAgent: navigator.userAgent,\n width: window.innerWidth,\n height: window.innerHeight,\n screenWidth: screen.width,\n screenHeight: screen.height,\n errorTimestamp: Date.now(),\n timeLocale: Intl.DateTimeFormat().resolvedOptions().timeZone,\n browserLocale: navigator.language || navigator.userLanguage,\n sessionTime: Math.round(performance.now() / 1000),\n deviceMemory: navigator.deviceMemory || 'unknown',\n timezoneOffset: new Date().getTimezoneOffset(),\n cookiesEnabled: navigator.cookieEnabled,\n url: window.location.href,\n host: window.location.host,\n referrer: document.referrer,\n browser: getBrowser(),\n browserVersion: window._uaParserResult?.browser?.version || null,\n os: getOS(),\n osVersion: window._uaParserResult?.os?.version || null,\n deviceType: window._uaParserResult?.device?.type || null,\n deviceModel: window._uaParserResult?.device?.model || null,\n deviceVendor: window._uaParserResult?.device?.vendor || null,\n loadTime: Math.max(0, performance.timing.loadEventEnd - performance.timing.navigationStart),\n userClicks: userInteractions.clicks,\n userScrolls: userInteractions.scrolls,\n }\n}\n\nfunction shouldIgnoreError(msg) {\n if (!config.ignoreErrors || !Array.isArray(config.ignoreErrors)) return false\n return config.ignoreErrors.some(pattern => {\n if (typeof pattern === 'string') return msg.includes(pattern)\n if (pattern instanceof RegExp) return pattern.test(msg)\n return false\n })\n}\n\nfunction postData(url, data) {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 5000)\n\n const headers = { 'Content-Type': 'application/json' }\n if (config.token) headers['X-Ingest-Token'] = config.token\n\n return fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(data),\n signal: controller.signal,\n })\n .then(r => { clearTimeout(timeout); return r })\n .catch(() => { clearTimeout(timeout) })\n}\n\nfunction argsToString(args) {\n const fmt = (args[0] || '') + ''\n const rest = [...args]\n return fmt.replace(/%[sdj]/g, (m) => {\n const v = rest.shift()\n if (m === '%s') return String(v)\n if (m === '%d') return Number(v)\n if (m === '%j') return JSON.stringify(v)\n return m\n })\n}\n\nfunction _loadScript(src, onload) {\n const s = document.createElement('script')\n s.src = src\n s.async = true\n if (onload) s.onload = onload\n document.head.appendChild(s)\n}\n\n// --- Source Maps ---\n\nasync function resolveSourceMap(sourceUrl, lineno, colno) {\n try {\n // Fetch the JS file to find sourceMappingURL\n const jsResponse = await fetch(sourceUrl)\n if (!jsResponse.ok) return null\n const jsCode = await jsResponse.text()\n\n const inlineMatch = jsCode.match(/\\/\\/# sourceMappingURL=data:application\\/json;base64,([^\\s]+)/)\n const externalMatch = jsCode.match(/\\/\\/# sourceMappingURL=(?!data:)([^\\s]+)/)\n\n let sourceMapData\n if (inlineMatch) {\n sourceMapData = JSON.parse(atob(inlineMatch[1]))\n } else if (externalMatch) {\n const mapURL = new URL(externalMatch[1], sourceUrl).href\n const mapResponse = await fetch(mapURL)\n if (!mapResponse.ok) return null\n sourceMapData = await mapResponse.json()\n } else {\n return null\n }\n\n if (!window.sourceMap?.SourceMapConsumer) return null\n const consumer = new window.sourceMap.SourceMapConsumer(sourceMapData)\n const pos = consumer.originalPositionFor({ line: lineno, column: colno })\n\n if (!pos.source) return null\n\n // Extract the original source snippet\n const sourceIndex = sourceMapData.sources.indexOf(pos.source)\n let snippet = null\n if (sourceMapData.sourcesContent && sourceMapData.sourcesContent[sourceIndex]) {\n snippet = sourceMapData.sourcesContent[sourceIndex]\n }\n\n return {\n originalSource: pos.source,\n originalLine: pos.line,\n originalColumn: pos.column,\n originalName: pos.name,\n snippet,\n }\n } catch (e) {\n return null\n }\n}\n\n// --- Breadcrumbs ---\n\nfunction _addBreadcrumb(crumb) {\n breadcrumbs.push({ timestamp: Date.now(), ...crumb })\n if (breadcrumbs.length > MAX_BREADCRUMBS) breadcrumbs.shift()\n}\n\n// --- Core ---\n\nasync function pushErrorEvent(obj) {\n const details = config.browserDetails ? captureBrowserDetails() : {}\n const event = Object.assign(obj, details, scope, getIds())\n\n if (userContext) event.user = userContext\n if (Object.keys(customContext).length) event.context = { ...customContext }\n event.breadcrumbs = breadcrumbs.slice()\n\n if (config.sampleRate && Math.random() < (1 - parseFloat(config.sampleRate))) {\n if (config.debug) _consoleLog('[Scout] Suppressed by sampling')\n return\n }\n\n if (!config.attachStacktrace) obj.errorTrace = null\n\n // Strip scout's own frames from stack traces (for console.error/warn captures)\n if (obj.errorTrace) {\n try {\n const lines = obj.errorTrace.split('\\n')\n const filtered = [lines[0]]\n for (let i = 1; i < lines.length; i++) {\n if (!lines[i].includes('/scout') && !lines[i].includes('scout.js') && !lines[i].includes('scout-error')) {\n filtered.push(lines[i])\n }\n }\n if (filtered.length > 1) obj.errorTrace = filtered.join('\\n')\n } catch (e) { /* ignore */ }\n }\n\n if ((obj.errorTrace || obj.stack) && !obj.source) {\n try {\n const stack = obj.errorTrace || obj.stack\n const lines = stack ? stack.split('\\n') : []\n // Find the first frame with a source location (skip the error message line)\n for (let i = 1; i < lines.length; i++) {\n const match = lines[i].trim().match(/(http.*?):(\\d+):(\\d+)/)\n if (match) {\n obj.source = match[1]\n obj.lineno = parseInt(match[2], 10)\n obj.colno = parseInt(match[3], 10)\n break\n }\n }\n } catch (e) { /* ignore */ }\n }\n\n // Resolve source maps if enabled and we have a source location\n if (config.handleSourceMaps && obj.source && obj.lineno) {\n try {\n const resolved = await resolveSourceMap(obj.source, obj.lineno, obj.colno || 0)\n if (resolved) {\n event.originalSource = resolved.originalSource\n event.originalLine = resolved.originalLine\n event.originalColumn = resolved.originalColumn\n event.originalName = resolved.originalName\n event.highlightLineNumber = resolved.originalLine\n if (resolved.snippet) event.snippet = resolved.snippet\n }\n } catch (e) { /* fail silently */ }\n }\n\n if (config.debug) _consoleLog('[Scout] Sending:', event)\n if (config.endpoint) postData(config.endpoint, event)\n}\n\n/**\n * Manually capture an error object.\n */\nexport function captureError(event) {\n if (!config.enabled) return\n pushErrorEvent(event)\n}\n\n/**\n * Set identified user info. Call after login.\n * @param {{ id?: string, email?: string, name?: string }} user\n */\nexport function setUser(user) {\n userContext = user\n}\n\n/**\n * Merge custom key-value context attached to all future errors.\n * @param {Object} ctx\n */\nexport function setContext(ctx) {\n customContext = { ...customContext, ...ctx }\n}\n\n/**\n * Set a single context tag.\n */\nexport function setTag(key, value) {\n customContext[key] = value\n}\n\n/**\n * Manually add a breadcrumb.\n * @param {{ category?: string, message?: string, data?: Object }} crumb\n */\nexport function addBreadcrumb(crumb) {\n _addBreadcrumb(crumb)\n}\n\n// --- Setup ---\n\nfunction setupListeners() {\n // Click tracking + breadcrumbs\n if (config.trackUserInteractions) {\n document.addEventListener('click', (e) => {\n userInteractions.clicks++\n const el = e.target\n const tag = el.tagName ? el.tagName.toLowerCase() : ''\n const text = (el.textContent || '').trim().slice(0, 50)\n _addBreadcrumb({ category: 'click', message: tag + (text ? ': ' + text : '') })\n })\n let lastScroll = 0\n window.addEventListener('scroll', () => {\n const now = Date.now()\n if (now - lastScroll > 100) { userInteractions.scrolls++; lastScroll = now }\n })\n }\n\n // Navigation breadcrumbs\n const origPushState = history.pushState\n history.pushState = function() {\n origPushState.apply(this, arguments)\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n }\n window.addEventListener('popstate', () => {\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n })\n\n // Fetch breadcrumbs\n const origFetch = window.fetch\n window.fetch = function(input, init) {\n const url = typeof input === 'string' ? input : (input?.url || '')\n const method = init?.method || 'GET'\n const start = Date.now()\n return origFetch.apply(this, arguments).then(response => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { status: response.status, duration: Date.now() - start } })\n return response\n }).catch(err => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { error: err.message, duration: Date.now() - start } })\n throw err\n })\n }\n\n // XHR breadcrumbs\n const origOpen = XMLHttpRequest.prototype.open\n const origSend = XMLHttpRequest.prototype.send\n XMLHttpRequest.prototype.open = function(method, url) {\n this._scoutMethod = method\n this._scoutUrl = url\n return origOpen.apply(this, arguments)\n }\n XMLHttpRequest.prototype.send = function() {\n const self = this\n const start = Date.now()\n self.addEventListener('loadend', () => {\n _addBreadcrumb({ category: 'xhr', message: `${self._scoutMethod || 'GET'} ${self._scoutUrl || ''}`, data: { status: self.status, duration: Date.now() - start } })\n })\n return origSend.apply(this, arguments)\n }\n\n // Error event listener\n if (config.addErrorEventListener) {\n window.addEventListener('error', async (event) => {\n if (!config.enabled) return\n try {\n const errorTrace = event.error ? event.error.stack : 'No stack trace available'\n if (shouldIgnoreError(event.message)) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'window.onerror',\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Error handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Unhandled rejection listener\n if (config.addUnhandledRejectionEventListener) {\n window.addEventListener('unhandledrejection', (event) => {\n if (!config.enabled) return\n try {\n const error = event.reason\n const errorTrace = error?.stack || 'No stack trace available'\n if (shouldIgnoreError(error?.message || '')) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'Unhandled Promise Rejection',\n message: error?.message || 'Unhandled Promise Rejection',\n reason: event.reason,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Rejection handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Console overrides\n if (config.overrideConsoleError) {\n console.error = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.error', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.error override failure:', e) }\n }\n }\n\n if (config.overrideConsoleWarn) {\n console.warn = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.warn', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.warn override failure:', e) }\n }\n }\n\n // Load UA Parser and Source Map from endpoint host (self-hosted, no CDN)\n const baseUrl = config.endpoint ? new URL(config.endpoint).origin : ''\n if (config.loadUAParser && config.browserDetails && baseUrl) {\n _loadScript(`${baseUrl}/vendor/ua-parser.min.js`, () => {\n if (typeof UAParser !== 'undefined') {\n window._uaParserResult = new UAParser().getResult()\n }\n })\n }\n if (config.handleSourceMaps && baseUrl) {\n _loadScript(`${baseUrl}/vendor/source-map.min.js`)\n }\n}\n\n/**\n * Initialize Scout error tracking.\n *\n * @param {Object} scopeOptions - { app, project, version, environment, user }\n * @param {Object} configOptions - { endpoint, token, sampleRate, debug, ... }\n */\nexport function init(scopeOptions = {}, configOptions = {}) {\n // Extract user from scope if provided\n if (scopeOptions.user) {\n userContext = scopeOptions.user\n delete scopeOptions.user\n }\n\n if (initialized) {\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n return\n }\n\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n initialized = true\n\n if (typeof window !== 'undefined') {\n setupListeners()\n\n window.Scout = {\n init: (s, c) => { if (s?.user) { userContext = s.user; delete s.user }; scope = { ...scope, ...s }; if (c) config = { ...config, ...c } },\n setScope: (s) => { scope = { ...scope, ...s } },\n setConfig: (c) => { config = { ...config, ...c } },\n setUser,\n setContext,\n setTag,\n addBreadcrumb: _addBreadcrumb,\n error: captureError,\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["defaultConfig", "config", "__spreadValues", "_a", "scope", "userInteractions", "pageloadId", "initialized", "userContext", "customContext", "breadcrumbs", "MAX_BREADCRUMBS", "_consoleWarn", "_consoleLog", "generateId", "prefix", "getIds", "userId", "sessionId", "pageloadId", "getBrowser", "_a", "_b", "_c", "ua", "b", "getOS", "o", "captureBrowserDetails", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "conn", "userInteractions", "shouldIgnoreError", "msg", "config", "pattern", "postData", "url", "data", "controller", "timeout", "headers", "argsToString", "args", "fmt", "rest", "m", "v", "_loadScript", "src", "onload", "s", "resolveSourceMap", "sourceUrl", "lineno", "colno", "__async", "jsResponse", "jsCode", "inlineMatch", "externalMatch", "sourceMapData", "mapURL", "mapResponse", "pos", "sourceIndex", "snippet", "e", "_addBreadcrumb", "crumb", "breadcrumbs", "__spreadValues", "MAX_BREADCRUMBS", "pushErrorEvent", "obj", "details", "event", "scope", "userContext", "customContext", "lines", "filtered", "i", "stack", "match", "resolved", "captureError", "setUser", "user", "setContext", "ctx", "setTag", "key", "value", "addBreadcrumb", "setupListeners", "el", "tag", "text", "lastScroll", "now", "origPushState", "origFetch", "input", "init", "method", "start", "response", "err", "origOpen", "origSend", "self", "errorTrace", "_consoleWarn", "error", "baseUrl", "scopeOptions", "configOptions", "initialized", "c"]
4
+ "sourcesContent": ["/**\n * Scout.js Browser SDK\n *\n * Captures errors, unhandled rejections, and console output.\n * Collects browser telemetry, session tracking, and source maps.\n *\n * Usage:\n * import { init, captureError } from 'scout-error'\n * init({ app: 'My App', project: 'my-project' }, { endpoint: 'https://...' })\n */\n\n// UA Parser and Source Map are loaded at runtime from the same host as the endpoint\n// to avoid CDN/CSP issues. For npm/bundler users (Vue/React/Node), import them directly.\n\nconst defaultConfig = {\n trackUserInteractions: true,\n selfHealingErrors: false,\n attachStacktrace: true,\n handleSourceMaps: true,\n browserDetails: true,\n warnOnCapture: false,\n loadUAParser: true,\n ignoreErrors: null,\n sendErrors: true,\n sampleRate: 1.0,\n enabled: true,\n debug: false,\n endpoint: '',\n token: null,\n\n overrideOnError: false,\n overrideOnUnhandledRejection: false,\n addErrorEventListener: true,\n addUnhandledRejectionEventListener: true,\n\n overrideConsoleLog: false,\n overrideConsoleWarn: false,\n overrideConsoleInfo: false,\n overrideConsoleError: true,\n}\n\nlet config = { ...defaultConfig }\n\nlet scope = {\n environment: typeof window !== 'undefined' && window.location?.hostname === 'localhost' ? 'development' : 'production',\n sdk: 'javascript',\n sdkVersion: __SDK_VERSION__,\n project: null,\n release: null,\n version: null,\n app: null,\n}\n\nconst userInteractions = { clicks: 0, scrolls: 0 }\nlet pageloadId = null\nlet initialized = false\nlet userContext = null\nlet customContext = {}\nconst breadcrumbs = []\nconst MAX_BREADCRUMBS = 30\n\n// Save originals before any overrides\nconst _consoleError = console.error\nconst _consoleWarn = console.warn\nconst _consoleInfo = console.info\nconst _consoleLog = console.log\n\n// --- Utilities ---\n\nfunction generateId(prefix) {\n return `${prefix}_${Math.random().toString(36).substr(2, 9)}`\n}\n\nfunction getIds() {\n const userId = localStorage.getItem('__scoutUserId') || (localStorage.setItem('__scoutUserId', generateId('user')), localStorage.getItem('__scoutUserId'))\n const sessionId = sessionStorage.getItem('__scoutSessionId') || (sessionStorage.setItem('__scoutSessionId', generateId('session')), sessionStorage.getItem('__scoutSessionId'))\n pageloadId = pageloadId || generateId('pageload')\n return { pageloadId, userId, sessionId }\n}\n\nfunction getBrowser() {\n if (window._uaParserResult?.browser?.name) return window._uaParserResult.browser.name\n const ua = navigator.userAgent\n const map = [\n { p: /Chrome.*Mobile/, n: 'Chrome Mobile' },\n { p: /Chrome/, n: 'Chrome' },\n { p: /Firefox.*Mobile/, n: 'Firefox Mobile' },\n { p: /Firefox/, n: 'Firefox' },\n { p: /Safari.*Mobile/, n: 'Safari Mobile' },\n { p: /Safari/, n: 'Safari' },\n { p: /MSIE|Trident/, n: 'Internet Explorer' },\n { p: /Edge/, n: 'Edge' },\n ]\n return map.find(b => ua.match(b.p))?.n || 'Unknown'\n}\n\nfunction getOS() {\n if (window._uaParserResult?.os?.name) return window._uaParserResult.os.name\n const ua = navigator.userAgent\n const map = [\n { p: /Win/, n: 'Windows' },\n { p: /Mac/, n: 'Mac OS' },\n { p: /X11|Linux/, n: 'Linux' },\n { p: /Android/, n: 'Android' },\n { p: /iPhone|iPad/, n: 'iOS' },\n ]\n return map.find(o => ua.match(o.p))?.n || 'Unknown'\n}\n\nfunction captureBrowserDetails() {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection\n return {\n connectionType: conn ? conn.effectiveType : 'unknown',\n userAgent: navigator.userAgent,\n width: window.innerWidth,\n height: window.innerHeight,\n screenWidth: screen.width,\n screenHeight: screen.height,\n errorTimestamp: Date.now(),\n timeLocale: Intl.DateTimeFormat().resolvedOptions().timeZone,\n browserLocale: navigator.language || navigator.userLanguage,\n sessionTime: Math.round(performance.now() / 1000),\n deviceMemory: navigator.deviceMemory || 'unknown',\n timezoneOffset: new Date().getTimezoneOffset(),\n cookiesEnabled: navigator.cookieEnabled,\n url: window.location.href,\n host: window.location.host,\n referrer: document.referrer,\n browser: getBrowser(),\n browserVersion: window._uaParserResult?.browser?.version || null,\n os: getOS(),\n osVersion: window._uaParserResult?.os?.version || null,\n deviceType: window._uaParserResult?.device?.type || null,\n deviceModel: window._uaParserResult?.device?.model || null,\n deviceVendor: window._uaParserResult?.device?.vendor || null,\n loadTime: Math.max(0, performance.timing.loadEventEnd - performance.timing.navigationStart),\n userClicks: userInteractions.clicks,\n userScrolls: userInteractions.scrolls,\n }\n}\n\nfunction shouldIgnoreError(msg) {\n if (!config.ignoreErrors || !Array.isArray(config.ignoreErrors)) return false\n return config.ignoreErrors.some(pattern => {\n if (typeof pattern === 'string') return msg.includes(pattern)\n if (pattern instanceof RegExp) return pattern.test(msg)\n return false\n })\n}\n\nfunction postData(url, data) {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 5000)\n\n const headers = { 'Content-Type': 'application/json' }\n if (config.token) headers['X-Ingest-Token'] = config.token\n\n return fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(data),\n signal: controller.signal,\n })\n .then(r => { clearTimeout(timeout); return r })\n .catch(() => { clearTimeout(timeout) })\n}\n\nfunction argsToString(args) {\n const fmt = (args[0] || '') + ''\n const rest = [...args]\n return fmt.replace(/%[sdj]/g, (m) => {\n const v = rest.shift()\n if (m === '%s') return String(v)\n if (m === '%d') return Number(v)\n if (m === '%j') return JSON.stringify(v)\n return m\n })\n}\n\nfunction _loadScript(src, onload) {\n const s = document.createElement('script')\n s.src = src\n s.async = true\n if (onload) s.onload = onload\n document.head.appendChild(s)\n}\n\n// --- Source Maps ---\n\nasync function resolveSourceMap(sourceUrl, lineno, colno) {\n try {\n // Fetch the JS file to find sourceMappingURL\n const jsResponse = await fetch(sourceUrl)\n if (!jsResponse.ok) return null\n const jsCode = await jsResponse.text()\n\n const inlineMatch = jsCode.match(/\\/\\/# sourceMappingURL=data:application\\/json;base64,([^\\s]+)/)\n const externalMatch = jsCode.match(/\\/\\/# sourceMappingURL=(?!data:)([^\\s]+)/)\n\n let sourceMapData\n if (inlineMatch) {\n sourceMapData = JSON.parse(atob(inlineMatch[1]))\n } else if (externalMatch) {\n const mapURL = new URL(externalMatch[1], sourceUrl).href\n const mapResponse = await fetch(mapURL)\n if (!mapResponse.ok) return null\n sourceMapData = await mapResponse.json()\n } else {\n return null\n }\n\n if (!window.sourceMap?.SourceMapConsumer) return null\n const consumer = new window.sourceMap.SourceMapConsumer(sourceMapData)\n const pos = consumer.originalPositionFor({ line: lineno, column: colno })\n\n if (!pos.source) return null\n\n // Extract the original source snippet\n const sourceIndex = sourceMapData.sources.indexOf(pos.source)\n let snippet = null\n if (sourceMapData.sourcesContent && sourceMapData.sourcesContent[sourceIndex]) {\n snippet = sourceMapData.sourcesContent[sourceIndex]\n }\n\n return {\n originalSource: pos.source,\n originalLine: pos.line,\n originalColumn: pos.column,\n originalName: pos.name,\n snippet,\n }\n } catch (e) {\n return null\n }\n}\n\n// --- Breadcrumbs ---\n\nfunction _addBreadcrumb(crumb) {\n breadcrumbs.push({ timestamp: Date.now(), ...crumb })\n if (breadcrumbs.length > MAX_BREADCRUMBS) breadcrumbs.shift()\n}\n\n// --- Core ---\n\nasync function pushErrorEvent(obj) {\n const details = config.browserDetails ? captureBrowserDetails() : {}\n const event = Object.assign(obj, details, scope, getIds())\n\n if (userContext) event.user = userContext\n if (Object.keys(customContext).length) event.context = { ...customContext }\n event.breadcrumbs = breadcrumbs.slice()\n\n if (config.sampleRate && Math.random() < (1 - parseFloat(config.sampleRate))) {\n if (config.debug) _consoleLog('[Scout] Suppressed by sampling')\n return\n }\n\n if (!config.attachStacktrace) obj.errorTrace = null\n\n // Strip scout's own frames from stack traces (for console.error/warn captures)\n if (obj.errorTrace) {\n try {\n const lines = obj.errorTrace.split('\\n')\n const filtered = [lines[0]]\n for (let i = 1; i < lines.length; i++) {\n if (!lines[i].includes('/scout') && !lines[i].includes('scout.js') && !lines[i].includes('scout-error')) {\n filtered.push(lines[i])\n }\n }\n if (filtered.length > 1) obj.errorTrace = filtered.join('\\n')\n } catch (e) { /* ignore */ }\n }\n\n if ((obj.errorTrace || obj.stack) && !obj.source) {\n try {\n const stack = obj.errorTrace || obj.stack\n const lines = stack ? stack.split('\\n') : []\n // Find the first frame with a source location (skip the error message line)\n for (let i = 1; i < lines.length; i++) {\n const match = lines[i].trim().match(/(http.*?):(\\d+):(\\d+)/)\n if (match) {\n obj.source = match[1]\n obj.lineno = parseInt(match[2], 10)\n obj.colno = parseInt(match[3], 10)\n break\n }\n }\n } catch (e) { /* ignore */ }\n }\n\n // Send the event immediately \u2014 don't let source map resolution block it\n if (config.debug) _consoleLog('[Scout] Sending:', event)\n if (config.endpoint) postData(config.endpoint, event)\n\n // Resolve source maps after sending (best-effort, non-blocking)\n if (config.handleSourceMaps && obj.source && obj.lineno) {\n try {\n const resolved = await resolveSourceMap(obj.source, obj.lineno, obj.colno || 0)\n if (resolved) {\n const enriched = {\n ...event,\n originalSource: resolved.originalSource,\n originalLine: resolved.originalLine,\n originalColumn: resolved.originalColumn,\n originalName: resolved.originalName,\n highlightLineNumber: resolved.originalLine,\n }\n if (resolved.snippet) enriched.snippet = resolved.snippet\n if (config.endpoint) postData(config.endpoint, enriched)\n }\n } catch (e) { /* fail silently */ }\n }\n}\n\n/**\n * Manually capture an error object.\n */\nexport function captureError(event) {\n if (!config.enabled) return\n pushErrorEvent(event)\n}\n\n/**\n * Set identified user info. Call after login.\n * @param {{ id?: string, email?: string, name?: string }} user\n */\nexport function setUser(user) {\n userContext = user\n}\n\n/**\n * Merge custom key-value context attached to all future errors.\n * @param {Object} ctx\n */\nexport function setContext(ctx) {\n customContext = { ...customContext, ...ctx }\n}\n\n/**\n * Set a single context tag.\n */\nexport function setTag(key, value) {\n customContext[key] = value\n}\n\n/**\n * Manually add a breadcrumb.\n * @param {{ category?: string, message?: string, data?: Object }} crumb\n */\nexport function addBreadcrumb(crumb) {\n _addBreadcrumb(crumb)\n}\n\n// --- Setup ---\n\nfunction setupListeners() {\n // Click tracking + breadcrumbs\n if (config.trackUserInteractions) {\n document.addEventListener('click', (e) => {\n userInteractions.clicks++\n const el = e.target\n const tag = el.tagName ? el.tagName.toLowerCase() : ''\n const text = (el.textContent || '').trim().slice(0, 50)\n _addBreadcrumb({ category: 'click', message: tag + (text ? ': ' + text : '') })\n })\n let lastScroll = 0\n window.addEventListener('scroll', () => {\n const now = Date.now()\n if (now - lastScroll > 100) { userInteractions.scrolls++; lastScroll = now }\n })\n }\n\n // Navigation breadcrumbs\n const origPushState = history.pushState\n history.pushState = function() {\n origPushState.apply(this, arguments)\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n }\n window.addEventListener('popstate', () => {\n _addBreadcrumb({ category: 'navigation', message: window.location.href })\n })\n\n // Fetch breadcrumbs\n const origFetch = window.fetch\n window.fetch = function(input, init) {\n const url = typeof input === 'string' ? input : (input?.url || '')\n const method = init?.method || 'GET'\n const start = Date.now()\n return origFetch.apply(this, arguments).then(response => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { status: response.status, duration: Date.now() - start } })\n return response\n }).catch(err => {\n _addBreadcrumb({ category: 'fetch', message: `${method} ${url}`, data: { error: err.message, duration: Date.now() - start } })\n throw err\n })\n }\n\n // XHR breadcrumbs\n const origOpen = XMLHttpRequest.prototype.open\n const origSend = XMLHttpRequest.prototype.send\n XMLHttpRequest.prototype.open = function(method, url) {\n this._scoutMethod = method\n this._scoutUrl = url\n return origOpen.apply(this, arguments)\n }\n XMLHttpRequest.prototype.send = function() {\n const self = this\n const start = Date.now()\n self.addEventListener('loadend', () => {\n _addBreadcrumb({ category: 'xhr', message: `${self._scoutMethod || 'GET'} ${self._scoutUrl || ''}`, data: { status: self.status, duration: Date.now() - start } })\n })\n return origSend.apply(this, arguments)\n }\n\n // Error event listener\n if (config.addErrorEventListener) {\n window.addEventListener('error', async (event) => {\n if (!config.enabled) return\n try {\n const errorTrace = event.error ? event.error.stack : 'No stack trace available'\n if (shouldIgnoreError(event.message)) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'window.onerror',\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Error handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Unhandled rejection listener\n if (config.addUnhandledRejectionEventListener) {\n window.addEventListener('unhandledrejection', (event) => {\n if (!config.enabled) return\n try {\n const error = event.reason\n const errorTrace = error?.stack || 'No stack trace available'\n if (shouldIgnoreError(error?.message || '')) return\n if (config.sendErrors) {\n pushErrorEvent({\n type: 'Unhandled Promise Rejection',\n message: error?.message || 'Unhandled Promise Rejection',\n reason: event.reason,\n errorTrace,\n })\n }\n } catch (e) {\n _consoleWarn('[Scout] Rejection handler failure:', e)\n }\n if (config.selfHealingErrors) event.preventDefault()\n })\n }\n\n // Console overrides\n if (config.overrideConsoleError) {\n console.error = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.error', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.error override failure:', e) }\n }\n }\n\n if (config.overrideConsoleWarn) {\n console.warn = function (...args) {\n if (!config.enabled) return\n try {\n const errorTrace = new Error().stack\n if (shouldIgnoreError(argsToString(args))) return\n if (config.sendErrors) pushErrorEvent({ type: 'console.warn', errorTrace, args: argsToString(args) })\n } catch (e) { _consoleWarn('[Scout] console.warn override failure:', e) }\n }\n }\n\n // Load UA Parser and Source Map from endpoint host (self-hosted, no CDN)\n const baseUrl = config.endpoint ? new URL(config.endpoint).origin : ''\n if (config.loadUAParser && config.browserDetails && baseUrl) {\n _loadScript(`${baseUrl}/vendor/ua-parser.min.js`, () => {\n if (typeof UAParser !== 'undefined') {\n window._uaParserResult = new UAParser().getResult()\n }\n })\n }\n if (config.handleSourceMaps && baseUrl) {\n _loadScript(`${baseUrl}/vendor/source-map.min.js`)\n }\n}\n\n/**\n * Initialize Scout error tracking.\n *\n * @param {Object} scopeOptions - { app, project, version, environment, user }\n * @param {Object} configOptions - { endpoint, token, sampleRate, debug, ... }\n */\nexport function init(scopeOptions = {}, configOptions = {}) {\n // Extract user from scope if provided\n if (scopeOptions.user) {\n userContext = scopeOptions.user\n delete scopeOptions.user\n }\n\n if (initialized) {\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n return\n }\n\n scope = { ...scope, ...scopeOptions }\n config = { ...config, ...configOptions }\n initialized = true\n\n if (typeof window !== 'undefined') {\n setupListeners()\n\n window.Scout = {\n init: (s, c) => { if (s?.user) { userContext = s.user; delete s.user }; scope = { ...scope, ...s }; if (c) config = { ...config, ...c } },\n setScope: (s) => { scope = { ...scope, ...s } },\n setConfig: (c) => { config = { ...config, ...c } },\n setUser,\n setContext,\n setTag,\n addBreadcrumb: _addBreadcrumb,\n error: captureError,\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultConfig", "config", "__spreadValues", "_a", "scope", "userInteractions", "pageloadId", "initialized", "userContext", "customContext", "breadcrumbs", "MAX_BREADCRUMBS", "_consoleWarn", "_consoleLog", "generateId", "prefix", "getIds", "userId", "sessionId", "pageloadId", "getBrowser", "_a", "_b", "_c", "ua", "b", "getOS", "o", "captureBrowserDetails", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "conn", "userInteractions", "shouldIgnoreError", "msg", "config", "pattern", "postData", "url", "data", "controller", "timeout", "headers", "r", "argsToString", "args", "fmt", "rest", "m", "v", "_loadScript", "src", "onload", "s", "resolveSourceMap", "sourceUrl", "lineno", "colno", "__async", "jsResponse", "jsCode", "inlineMatch", "externalMatch", "sourceMapData", "mapURL", "mapResponse", "pos", "sourceIndex", "snippet", "e", "_addBreadcrumb", "crumb", "breadcrumbs", "__spreadValues", "MAX_BREADCRUMBS", "pushErrorEvent", "obj", "details", "event", "scope", "userContext", "customContext", "lines", "filtered", "i", "stack", "match", "resolved", "enriched", "__spreadProps", "captureError", "setUser", "user", "setContext", "ctx", "setTag", "key", "value", "addBreadcrumb", "setupListeners", "el", "tag", "text", "lastScroll", "now", "origPushState", "origFetch", "input", "init", "method", "start", "response", "err", "origOpen", "origSend", "self", "errorTrace", "_consoleWarn", "error", "baseUrl", "scopeOptions", "configOptions", "initialized", "c"]
7
7
  }
package/dist/node.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var f=(e,t)=>{for(var s in t)p(e,s,{get:t[s],enumerable:!0})},k=(e,t,s,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of m(t))!g.call(e,r)&&r!==s&&p(e,r,{get:()=>t[r],enumerable:!(u=l(t,r))||u.enumerable});return e};var h=e=>k(p({},"__esModule",{value:!0}),e);var j={};f(j,{addBreadcrumb:()=>b,captureError:()=>O,errorHandlingMiddleware:()=>D,initTracker:()=>x,setContext:()=>T,setTag:()=>y,setUser:()=>E});module.exports=h(j);var n={debug:!1,endpoint:"",token:null,sendErrors:!0,captureUserDetails:!1,captureRequestDetails:!0,captureStackTrace:!0},a={environment:process.env.NODE_ENV||"production",project:null,release:null,version:null,sdk:"node",sdkVersion:"0.2.5",nodeVersion:process.version,platform:process.platform,arch:process.arch},d=null,o={},c=[],S=30;function i(e){if(n.debug&&console.error("[Scout]:",e),d&&(e.user=d),Object.keys(o).length&&(e.context={...o}),e.breadcrumbs=c.slice(),n.endpoint&&n.sendErrors){let t={"Content-Type":"application/json"};n.token&&(t["X-Ingest-Token"]=n.token),fetch(n.endpoint,{method:"POST",headers:t,body:JSON.stringify(e)}).catch(s=>{console.error("[Scout] Failed to send error:",s.message)})}}function x(e={},t={}){a={...a,...e},n={...n,...t},process.on("uncaughtException",s=>{i({type:"uncaughtException",message:s.message,stack:s.stack,errorTrace:s.stack,timestamp:new Date().toISOString(),...a})}),process.on("unhandledRejection",s=>{i({type:"unhandledRejection",message:s?.message||"Unhandled Promise Rejection",stack:s?.stack||"No stack trace",errorTrace:s?.stack||"No stack trace",timestamp:new Date().toISOString(),...a})})}function D(e,t,s,u){let r={type:"expressError",message:e.message,stack:n.captureStackTrace?e.stack:void 0,errorTrace:n.captureStackTrace?e.stack:void 0,path:t.originalUrl,method:t.method,params:t.params,query:t.query,headers:n.captureRequestDetails?t.headers:void 0,timestamp:new Date().toISOString(),...a};n.captureUserDetails&&t.user&&(r.user={id:t.user.id||t.user._id,email:t.user.email,name:t.user.name||t.user.username}),i(r),s.status(500).json({error:"Internal Server Error"})}function E(e){d=e}function T(e){o={...o,...e}}function y(e,t){o[e]=t}function b(e){c.push({timestamp:Date.now(),...e}),c.length>S&&c.shift()}function O(e,t={}){let s={type:"manual",message:e?.message||String(e),stack:e?.stack,errorTrace:e?.stack,timestamp:new Date().toISOString(),...a};Object.keys(t).length&&(s.context={...o,...t}),i(s)}0&&(module.exports={addBreadcrumb,captureError,errorHandlingMiddleware,initTracker,setContext,setTag,setUser});
1
+ var p=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var f=(e,t)=>{for(var s in t)p(e,s,{get:t[s],enumerable:!0})},k=(e,t,s,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of m(t))!g.call(e,r)&&r!==s&&p(e,r,{get:()=>t[r],enumerable:!(u=l(t,r))||u.enumerable});return e};var h=e=>k(p({},"__esModule",{value:!0}),e);var j={};f(j,{addBreadcrumb:()=>b,captureError:()=>O,errorHandlingMiddleware:()=>D,initTracker:()=>x,setContext:()=>T,setTag:()=>y,setUser:()=>E});module.exports=h(j);var n={debug:!1,endpoint:"",token:null,sendErrors:!0,captureUserDetails:!1,captureRequestDetails:!0,captureStackTrace:!0},a={environment:process.env.NODE_ENV||"production",project:null,release:null,version:null,sdk:"node",sdkVersion:"0.2.6",nodeVersion:process.version,platform:process.platform,arch:process.arch},d=null,o={},c=[],S=30;function i(e){if(n.debug&&console.error("[Scout]:",e),d&&(e.user=d),Object.keys(o).length&&(e.context={...o}),e.breadcrumbs=c.slice(),n.endpoint&&n.sendErrors){let t={"Content-Type":"application/json"};n.token&&(t["X-Ingest-Token"]=n.token),fetch(n.endpoint,{method:"POST",headers:t,body:JSON.stringify(e)}).catch(s=>{console.error("[Scout] Failed to send error:",s.message)})}}function x(e={},t={}){a={...a,...e},n={...n,...t},process.on("uncaughtException",s=>{i({type:"uncaughtException",message:s.message,stack:s.stack,errorTrace:s.stack,timestamp:new Date().toISOString(),...a})}),process.on("unhandledRejection",s=>{i({type:"unhandledRejection",message:s?.message||"Unhandled Promise Rejection",stack:s?.stack||"No stack trace",errorTrace:s?.stack||"No stack trace",timestamp:new Date().toISOString(),...a})})}function D(e,t,s,u){let r={type:"expressError",message:e.message,stack:n.captureStackTrace?e.stack:void 0,errorTrace:n.captureStackTrace?e.stack:void 0,path:t.originalUrl,method:t.method,params:t.params,query:t.query,headers:n.captureRequestDetails?t.headers:void 0,timestamp:new Date().toISOString(),...a};n.captureUserDetails&&t.user&&(r.user={id:t.user.id||t.user._id,email:t.user.email,name:t.user.name||t.user.username}),i(r),s.status(500).json({error:"Internal Server Error"})}function E(e){d=e}function T(e){o={...o,...e}}function y(e,t){o[e]=t}function b(e){c.push({timestamp:Date.now(),...e}),c.length>S&&c.shift()}function O(e,t={}){let s={type:"manual",message:e?.message||String(e),stack:e?.stack,errorTrace:e?.stack,timestamp:new Date().toISOString(),...a};Object.keys(t).length&&(s.context={...o,...t}),i(s)}0&&(module.exports={addBreadcrumb,captureError,errorHandlingMiddleware,initTracker,setContext,setTag,setUser});
2
2
  //# sourceMappingURL=node.cjs.map
package/dist/node.js CHANGED
@@ -1,2 +1,2 @@
1
- var n={debug:!1,endpoint:"",token:null,sendErrors:!0,captureUserDetails:!1,captureRequestDetails:!0,captureStackTrace:!0},r={environment:process.env.NODE_ENV||"production",project:null,release:null,version:null,sdk:"node",sdkVersion:"0.2.5",nodeVersion:process.version,platform:process.platform,arch:process.arch},i=null,a={},o=[],p=30;function c(e){if(n.debug&&console.error("[Scout]:",e),i&&(e.user=i),Object.keys(a).length&&(e.context={...a}),e.breadcrumbs=o.slice(),n.endpoint&&n.sendErrors){let t={"Content-Type":"application/json"};n.token&&(t["X-Ingest-Token"]=n.token),fetch(n.endpoint,{method:"POST",headers:t,body:JSON.stringify(e)}).catch(s=>{console.error("[Scout] Failed to send error:",s.message)})}}function l(e={},t={}){r={...r,...e},n={...n,...t},process.on("uncaughtException",s=>{c({type:"uncaughtException",message:s.message,stack:s.stack,errorTrace:s.stack,timestamp:new Date().toISOString(),...r})}),process.on("unhandledRejection",s=>{c({type:"unhandledRejection",message:s?.message||"Unhandled Promise Rejection",stack:s?.stack||"No stack trace",errorTrace:s?.stack||"No stack trace",timestamp:new Date().toISOString(),...r})})}function m(e,t,s,d){let u={type:"expressError",message:e.message,stack:n.captureStackTrace?e.stack:void 0,errorTrace:n.captureStackTrace?e.stack:void 0,path:t.originalUrl,method:t.method,params:t.params,query:t.query,headers:n.captureRequestDetails?t.headers:void 0,timestamp:new Date().toISOString(),...r};n.captureUserDetails&&t.user&&(u.user={id:t.user.id||t.user._id,email:t.user.email,name:t.user.name||t.user.username}),c(u),s.status(500).json({error:"Internal Server Error"})}function g(e){i=e}function f(e){a={...a,...e}}function k(e,t){a[e]=t}function h(e){o.push({timestamp:Date.now(),...e}),o.length>p&&o.shift()}function S(e,t={}){let s={type:"manual",message:e?.message||String(e),stack:e?.stack,errorTrace:e?.stack,timestamp:new Date().toISOString(),...r};Object.keys(t).length&&(s.context={...a,...t}),c(s)}export{h as addBreadcrumb,S as captureError,m as errorHandlingMiddleware,l as initTracker,f as setContext,k as setTag,g as setUser};
1
+ var n={debug:!1,endpoint:"",token:null,sendErrors:!0,captureUserDetails:!1,captureRequestDetails:!0,captureStackTrace:!0},r={environment:process.env.NODE_ENV||"production",project:null,release:null,version:null,sdk:"node",sdkVersion:"0.2.6",nodeVersion:process.version,platform:process.platform,arch:process.arch},i=null,a={},o=[],p=30;function c(e){if(n.debug&&console.error("[Scout]:",e),i&&(e.user=i),Object.keys(a).length&&(e.context={...a}),e.breadcrumbs=o.slice(),n.endpoint&&n.sendErrors){let t={"Content-Type":"application/json"};n.token&&(t["X-Ingest-Token"]=n.token),fetch(n.endpoint,{method:"POST",headers:t,body:JSON.stringify(e)}).catch(s=>{console.error("[Scout] Failed to send error:",s.message)})}}function l(e={},t={}){r={...r,...e},n={...n,...t},process.on("uncaughtException",s=>{c({type:"uncaughtException",message:s.message,stack:s.stack,errorTrace:s.stack,timestamp:new Date().toISOString(),...r})}),process.on("unhandledRejection",s=>{c({type:"unhandledRejection",message:s?.message||"Unhandled Promise Rejection",stack:s?.stack||"No stack trace",errorTrace:s?.stack||"No stack trace",timestamp:new Date().toISOString(),...r})})}function m(e,t,s,d){let u={type:"expressError",message:e.message,stack:n.captureStackTrace?e.stack:void 0,errorTrace:n.captureStackTrace?e.stack:void 0,path:t.originalUrl,method:t.method,params:t.params,query:t.query,headers:n.captureRequestDetails?t.headers:void 0,timestamp:new Date().toISOString(),...r};n.captureUserDetails&&t.user&&(u.user={id:t.user.id||t.user._id,email:t.user.email,name:t.user.name||t.user.username}),c(u),s.status(500).json({error:"Internal Server Error"})}function g(e){i=e}function f(e){a={...a,...e}}function k(e,t){a[e]=t}function h(e){o.push({timestamp:Date.now(),...e}),o.length>p&&o.shift()}function S(e,t={}){let s={type:"manual",message:e?.message||String(e),stack:e?.stack,errorTrace:e?.stack,timestamp:new Date().toISOString(),...r};Object.keys(t).length&&(s.context={...a,...t}),c(s)}export{h as addBreadcrumb,S as captureError,m as errorHandlingMiddleware,l as initTracker,f as setContext,k as setTag,g as setUser};
2
2
  //# sourceMappingURL=node.js.map
package/dist/react.cjs CHANGED
@@ -1,5 +1,5 @@
1
- var D=Object.create;var f=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,N=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var k=(e,n,r)=>n in e?f(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,p=(e,n)=>{for(var r in n||(n={}))_.call(n,r)&&k(e,r,n[r]);if(y)for(var r of y(n))O.call(n,r)&&k(e,r,n[r]);return e};var $=(e,n)=>{for(var r in n)f(e,r,{get:n[r],enumerable:!0})},M=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of A(n))!_.call(e,o)&&o!==r&&f(e,o,{get:()=>n[o],enumerable:!(t=P(n,o))||t.enumerable});return e};var F=(e,n,r)=>(r=e!=null?D(N(e)):{},M(n||!e||!e.__esModule?f(r,"default",{value:e,enumerable:!0}):r,e)),H=e=>M(f({},"__esModule",{value:!0}),e);var g=(e,n,r)=>new Promise((t,o)=>{var s=a=>{try{l(r.next(a))}catch(d){o(d)}},i=a=>{try{l(r.throw(a))}catch(d){o(d)}},l=a=>a.done?t(a.value):Promise.resolve(a.value).then(s,i);l((r=r.apply(e,n)).next())});var Z={};$(Z,{ScoutErrorBoundary:()=>w});module.exports=H(Z);var I=F(require("react"),1);var W={trackUserInteractions:!0,selfHealingErrors:!1,attachStacktrace:!0,handleSourceMaps:!0,browserDetails:!0,warnOnCapture:!1,loadUAParser:!0,ignoreErrors:null,sendErrors:!0,sampleRate:1,enabled:!0,debug:!1,endpoint:"",token:null,overrideOnError:!1,overrideOnUnhandledRejection:!1,addErrorEventListener:!0,addUnhandledRejectionEventListener:!0,overrideConsoleLog:!1,overrideConsoleWarn:!1,overrideConsoleInfo:!1,overrideConsoleError:!0},c=p({},W),T,X={environment:typeof window!="undefined"&&((T=window.location)==null?void 0:T.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.2.5",project:null,release:null,version:null,app:null},C={clicks:0,scrolls:0},m=null;var R=null,b={},B=[];var L=console.log;function h(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function j(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",h("user")),localStorage.getItem("__scoutUserId")),n=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",h("session")),sessionStorage.getItem("__scoutSessionId"));return m=m||h("pageload"),{pageloadId:m,userId:e,sessionId:n}}function V(){var r,t,o;if((t=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&t.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((o=[{p:/Chrome.*Mobile/,n:"Chrome Mobile"},{p:/Chrome/,n:"Chrome"},{p:/Firefox.*Mobile/,n:"Firefox Mobile"},{p:/Firefox/,n:"Firefox"},{p:/Safari.*Mobile/,n:"Safari Mobile"},{p:/Safari/,n:"Safari"},{p:/MSIE|Trident/,n:"Internet Explorer"},{p:/Edge/,n:"Edge"}].find(s=>e.match(s.p)))==null?void 0:o.n)||"Unknown"}function q(){var r,t,o;if((t=(r=window._uaParserResult)==null?void 0:r.os)!=null&&t.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((o=[{p:/Win/,n:"Windows"},{p:/Mac/,n:"Mac OS"},{p:/X11|Linux/,n:"Linux"},{p:/Android/,n:"Android"},{p:/iPhone|iPad/,n:"iOS"}].find(s=>e.match(s.p)))==null?void 0:o.n)||"Unknown"}function z(){var n,r,t,o,s,i,l,a,d,u;let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return{connectionType:e?e.effectiveType:"unknown",userAgent:navigator.userAgent,width:window.innerWidth,height:window.innerHeight,screenWidth:screen.width,screenHeight:screen.height,errorTimestamp:Date.now(),timeLocale:Intl.DateTimeFormat().resolvedOptions().timeZone,browserLocale:navigator.language||navigator.userLanguage,sessionTime:Math.round(performance.now()/1e3),deviceMemory:navigator.deviceMemory||"unknown",timezoneOffset:new Date().getTimezoneOffset(),cookiesEnabled:navigator.cookieEnabled,url:window.location.href,host:window.location.host,referrer:document.referrer,browser:V(),browserVersion:((r=(n=window._uaParserResult)==null?void 0:n.browser)==null?void 0:r.version)||null,os:q(),osVersion:((o=(t=window._uaParserResult)==null?void 0:t.os)==null?void 0:o.version)||null,deviceType:((i=(s=window._uaParserResult)==null?void 0:s.device)==null?void 0:i.type)||null,deviceModel:((a=(l=window._uaParserResult)==null?void 0:l.device)==null?void 0:a.model)||null,deviceVendor:((u=(d=window._uaParserResult)==null?void 0:d.device)==null?void 0:u.vendor)||null,loadTime:Math.max(0,performance.timing.loadEventEnd-performance.timing.navigationStart),userClicks:C.clicks,userScrolls:C.scrolls}}function J(e,n){let r=new AbortController,t=setTimeout(()=>r.abort(),5e3),o={"Content-Type":"application/json"};return c.token&&(o["X-Ingest-Token"]=c.token),fetch(e,{method:"POST",headers:o,body:JSON.stringify(n),signal:r.signal}).then(s=>(clearTimeout(t),s)).catch(()=>{clearTimeout(t)})}function G(e,n,r){return g(this,null,function*(){var t;try{let o=yield fetch(e);if(!o.ok)return null;let s=yield o.text(),i=s.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),l=s.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),a;if(i)a=JSON.parse(atob(i[1]));else if(l){let U=new URL(l[1],e).href,E=yield fetch(U);if(!E.ok)return null;a=yield E.json()}else return null;if(!((t=window.sourceMap)!=null&&t.SourceMapConsumer))return null;let u=new window.sourceMap.SourceMapConsumer(a).originalPositionFor({line:n,column:r});if(!u.source)return null;let S=a.sources.indexOf(u.source),v=null;return a.sourcesContent&&a.sourcesContent[S]&&(v=a.sourcesContent[S]),{originalSource:u.source,originalLine:u.line,originalColumn:u.column,originalName:u.name,snippet:v}}catch(o){return null}})}function K(e){return g(this,null,function*(){let n=c.browserDetails?z():{},r=Object.assign(e,n,X,j());if(R&&(r.user=R),Object.keys(b).length&&(r.context=p({},b)),r.breadcrumbs=B.slice(),c.sampleRate&&Math.random()<1-parseFloat(c.sampleRate)){c.debug&&L("[Scout] Suppressed by sampling");return}if(c.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let t=e.errorTrace.split(`
1
+ var A=Object.create;var f=Object.defineProperty,N=Object.defineProperties,O=Object.getOwnPropertyDescriptor,$=Object.getOwnPropertyDescriptors,F=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,H=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var k=(e,n,r)=>n in e?f(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,p=(e,n)=>{for(var r in n||(n={}))_.call(n,r)&&k(e,r,n[r]);if(y)for(var r of y(n))W.call(n,r)&&k(e,r,n[r]);return e},M=(e,n)=>N(e,$(n));var X=(e,n)=>{for(var r in n)f(e,r,{get:n[r],enumerable:!0})},C=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of F(n))!_.call(e,o)&&o!==r&&f(e,o,{get:()=>n[o],enumerable:!(t=O(n,o))||t.enumerable});return e};var B=(e,n,r)=>(r=e!=null?A(H(e)):{},C(n||!e||!e.__esModule?f(r,"default",{value:e,enumerable:!0}):r,e)),j=e=>C(f({},"__esModule",{value:!0}),e);var g=(e,n,r)=>new Promise((t,o)=>{var s=a=>{try{l(r.next(a))}catch(d){o(d)}},c=a=>{try{l(r.throw(a))}catch(d){o(d)}},l=a=>a.done?t(a.value):Promise.resolve(a.value).then(s,c);l((r=r.apply(e,n)).next())});var ee={};X(ee,{ScoutErrorBoundary:()=>w});module.exports=j(ee);var D=B(require("react"),1);var V={trackUserInteractions:!0,selfHealingErrors:!1,attachStacktrace:!0,handleSourceMaps:!0,browserDetails:!0,warnOnCapture:!1,loadUAParser:!0,ignoreErrors:null,sendErrors:!0,sampleRate:1,enabled:!0,debug:!1,endpoint:"",token:null,overrideOnError:!1,overrideOnUnhandledRejection:!1,addErrorEventListener:!0,addUnhandledRejectionEventListener:!0,overrideConsoleLog:!1,overrideConsoleWarn:!1,overrideConsoleInfo:!1,overrideConsoleError:!0},i=p({},V),I,q={environment:typeof window!="undefined"&&((I=window.location)==null?void 0:I.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.2.6",project:null,release:null,version:null,app:null},R={clicks:0,scrolls:0},m=null;var b=null,L={},z=[];var T=console.log;function h(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function J(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",h("user")),localStorage.getItem("__scoutUserId")),n=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",h("session")),sessionStorage.getItem("__scoutSessionId"));return m=m||h("pageload"),{pageloadId:m,userId:e,sessionId:n}}function G(){var r,t,o;if((t=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&t.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((o=[{p:/Chrome.*Mobile/,n:"Chrome Mobile"},{p:/Chrome/,n:"Chrome"},{p:/Firefox.*Mobile/,n:"Firefox Mobile"},{p:/Firefox/,n:"Firefox"},{p:/Safari.*Mobile/,n:"Safari Mobile"},{p:/Safari/,n:"Safari"},{p:/MSIE|Trident/,n:"Internet Explorer"},{p:/Edge/,n:"Edge"}].find(s=>e.match(s.p)))==null?void 0:o.n)||"Unknown"}function K(){var r,t,o;if((t=(r=window._uaParserResult)==null?void 0:r.os)!=null&&t.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((o=[{p:/Win/,n:"Windows"},{p:/Mac/,n:"Mac OS"},{p:/X11|Linux/,n:"Linux"},{p:/Android/,n:"Android"},{p:/iPhone|iPad/,n:"iOS"}].find(s=>e.match(s.p)))==null?void 0:o.n)||"Unknown"}function Z(){var n,r,t,o,s,c,l,a,d,u;let e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return{connectionType:e?e.effectiveType:"unknown",userAgent:navigator.userAgent,width:window.innerWidth,height:window.innerHeight,screenWidth:screen.width,screenHeight:screen.height,errorTimestamp:Date.now(),timeLocale:Intl.DateTimeFormat().resolvedOptions().timeZone,browserLocale:navigator.language||navigator.userLanguage,sessionTime:Math.round(performance.now()/1e3),deviceMemory:navigator.deviceMemory||"unknown",timezoneOffset:new Date().getTimezoneOffset(),cookiesEnabled:navigator.cookieEnabled,url:window.location.href,host:window.location.host,referrer:document.referrer,browser:G(),browserVersion:((r=(n=window._uaParserResult)==null?void 0:n.browser)==null?void 0:r.version)||null,os:K(),osVersion:((o=(t=window._uaParserResult)==null?void 0:t.os)==null?void 0:o.version)||null,deviceType:((c=(s=window._uaParserResult)==null?void 0:s.device)==null?void 0:c.type)||null,deviceModel:((a=(l=window._uaParserResult)==null?void 0:l.device)==null?void 0:a.model)||null,deviceVendor:((u=(d=window._uaParserResult)==null?void 0:d.device)==null?void 0:u.vendor)||null,loadTime:Math.max(0,performance.timing.loadEventEnd-performance.timing.navigationStart),userClicks:R.clicks,userScrolls:R.scrolls}}function x(e,n){let r=new AbortController,t=setTimeout(()=>r.abort(),5e3),o={"Content-Type":"application/json"};return i.token&&(o["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:o,body:JSON.stringify(n),signal:r.signal}).then(s=>(clearTimeout(t),s)).catch(()=>{clearTimeout(t)})}function Q(e,n,r){return g(this,null,function*(){var t;try{let o=yield fetch(e);if(!o.ok)return null;let s=yield o.text(),c=s.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),l=s.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),a;if(c)a=JSON.parse(atob(c[1]));else if(l){let P=new URL(l[1],e).href,E=yield fetch(P);if(!E.ok)return null;a=yield E.json()}else return null;if(!((t=window.sourceMap)!=null&&t.SourceMapConsumer))return null;let u=new window.sourceMap.SourceMapConsumer(a).originalPositionFor({line:n,column:r});if(!u.source)return null;let S=a.sources.indexOf(u.source),v=null;return a.sourcesContent&&a.sourcesContent[S]&&(v=a.sourcesContent[S]),{originalSource:u.source,originalLine:u.line,originalColumn:u.column,originalName:u.name,snippet:v}}catch(o){return null}})}function Y(e){return g(this,null,function*(){let n=i.browserDetails?Z():{},r=Object.assign(e,n,q,J());if(b&&(r.user=b),Object.keys(L).length&&(r.context=p({},L)),r.breadcrumbs=z.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&T("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let t=e.errorTrace.split(`
2
2
  `),o=[t[0]];for(let s=1;s<t.length;s++)!t[s].includes("/scout")&&!t[s].includes("scout.js")&&!t[s].includes("scout-error")&&o.push(t[s]);o.length>1&&(e.errorTrace=o.join(`
3
3
  `))}catch(t){}if((e.errorTrace||e.stack)&&!e.source)try{let t=e.errorTrace||e.stack,o=t?t.split(`
4
- `):[];for(let s=1;s<o.length;s++){let i=o[s].trim().match(/(http.*?):(\d+):(\d+)/);if(i){e.source=i[1],e.lineno=parseInt(i[2],10),e.colno=parseInt(i[3],10);break}}}catch(t){}if(c.handleSourceMaps&&e.source&&e.lineno)try{let t=yield G(e.source,e.lineno,e.colno||0);t&&(r.originalSource=t.originalSource,r.originalLine=t.originalLine,r.originalColumn=t.originalColumn,r.originalName=t.originalName,r.highlightLineNumber=t.originalLine,t.snippet&&(r.snippet=t.snippet))}catch(t){}c.debug&&L("[Scout] Sending:",r),c.endpoint&&J(c.endpoint,r)})}function x(e){c.enabled&&K(e)}var w=class extends I.default.Component{constructor(n){super(n),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){x({message:n.message,stack:n.stack,errorTrace:n.stack,component:(r==null?void 0:r.componentStack)||"",type:"react-error-boundary"})}render(){return this.state.hasError?this.props.fallback||null:this.props.children}};
4
+ `):[];for(let s=1;s<o.length;s++){let c=o[s].trim().match(/(http.*?):(\d+):(\d+)/);if(c){e.source=c[1],e.lineno=parseInt(c[2],10),e.colno=parseInt(c[3],10);break}}}catch(t){}if(i.debug&&T("[Scout] Sending:",r),i.endpoint&&x(i.endpoint,r),i.handleSourceMaps&&e.source&&e.lineno)try{let t=yield Q(e.source,e.lineno,e.colno||0);if(t){let o=M(p({},r),{originalSource:t.originalSource,originalLine:t.originalLine,originalColumn:t.originalColumn,originalName:t.originalName,highlightLineNumber:t.originalLine});t.snippet&&(o.snippet=t.snippet),i.endpoint&&x(i.endpoint,o)}}catch(t){}})}function U(e){i.enabled&&Y(e)}var w=class extends D.default.Component{constructor(n){super(n),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){U({message:n.message,stack:n.stack,errorTrace:n.stack,component:(r==null?void 0:r.componentStack)||"",type:"react-error-boundary"})}render(){return this.state.hasError?this.props.fallback||null:this.props.children}};
5
5
  //# sourceMappingURL=react.cjs.map