scout-error 0.3.0 → 0.3.2

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/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import{readFileSync as x,writeFileSync as g,mkdirSync as w,readdirSync as v,unlinkSync as y,existsSync as h,renameSync as F,rmdirSync as J}from"fs";import{join as a}from"path";import{homedir as M}from"os";import{createInterface as H}from"readline";var k=".scout",D=".scout/errors",q=".scout/issues",G=".scout/archive",B=".bugs",W=/^[0-9a-f]{8}\.md$/,N=/^\d+\.md$/,O=".scout.json",$=a(M(),".scout.json");function U(e){if(!h(e))return null;try{return JSON.parse(x(e,"utf8"))}catch(s){console.error(`Error parsing ${e}: ${s.message}`),process.exit(1)}}function P({requireProject:e=!0}={}){let s=U($)||{},n=U(a(process.cwd(),O))||{},o={...s,...n};process.env.SCOUT_USERNAME&&(o.username=process.env.SCOUT_USERNAME),process.env.SCOUT_PASSWORD&&(o.password=process.env.SCOUT_PASSWORD),process.env.SCOUT_ENDPOINT&&(o.endpoint=process.env.SCOUT_ENDPOINT),process.env.SCOUT_PROJECT&&(o.project=process.env.SCOUT_PROJECT);let t=[];return o.endpoint||t.push("endpoint"),o.username||t.push("username"),o.password||t.push("password"),e&&!o.project&&t.push("project"),t.length&&(console.error(`Missing config: ${t.join(", ")}`),console.error(`
3
- Run \`scout init\` to set up, or edit ${$} / ${O}`),process.exit(1)),o}function K(){return H({input:process.stdin,output:process.stdout})}function I(e,s){return new Promise(n=>e.question(s,o=>n(o.trim())))}async function C(e,s,n){let o=n?` [${n}]`:"";return await I(e,`${s}${o}: `)||n||""}async function V(e,s,n=!0){let t=(await I(e,`${s}${n?" [Y/n]":" [y/N]"}: `)).toLowerCase();return t?t==="y"||t==="yes":n}function b(e){return{"X-Username":e.username,"X-Password":e.password}}async function R(e,s){let n=`${e.endpoint.replace(/\/$/,"")}${s}`,o;try{o=await fetch(n,{headers:b(e)})}catch(t){console.error(`Could not connect to ${e.endpoint}. Check the endpoint URL.`),console.error(t.message),process.exit(1)}return o.status===401&&(console.error("Authentication failed. Check your username and password."),process.exit(1)),o.ok||(console.error(`Server error: ${o.status} ${o.statusText}`),process.exit(1)),await o.json()}async function L(e,s,n){let o=`${e.endpoint.replace(/\/$/,"")}/issues/${encodeURIComponent(s)}`,t;try{t=await fetch(o,{method:"PATCH",headers:{"Content-Type":"application/json",...b(e)},body:JSON.stringify(n)})}catch(r){console.error(`Could not connect to ${e.endpoint}. ${r.message}`),process.exit(1)}return t.status===401&&(console.error("Authentication failed."),process.exit(1)),t.status===404&&(console.error(`Issue #${s} not found`),process.exit(1)),t.ok||(console.error(`Server error: ${t.status} ${t.statusText}`),process.exit(1)),await t.json()}async function X(e){return R(e,`/errors?project=${encodeURIComponent(e.project)}`)}async function Y(e){return R(e,`/issues?project=${encodeURIComponent(e.project)}&status=all`)}async function z(e){return R(e,"/projects?showHidden=true")}function Q(e){let s=e.events[0]||{},n=e.combinedFields||{},o=[],t=n.message||s.args||s.type||"Unknown Error";o.push(`# ${t}`),o.push(""),o.push(`- **Hash:** ${e.hash}`),o.push(`- **Project:** ${n.project||""}`),n.app&&n.app!==n.project&&o.push(`- **App:** ${n.app}`),o.push(`- **Count:** ${e.count} total, ${e.last24HoursCount} last 24h, ${e.last30DaysCount} last 30d`),o.push(`- **Users:** ${e.uniqueUserCount} unique`);let r=s.timestamp||s.errorTimestamp;if(r){let c=typeof r=="string"?r:new Date(r).toISOString();o.push(`- **Last seen:** ${c}`)}if(s.environment&&o.push(`- **Environment:** ${s.environment}`),s.type&&o.push(`- **Type:** ${s.type}`),s.url&&o.push(`- **URL:** ${s.url}`),s.context&&Object.keys(s.context).length>0){o.push(""),o.push("## Context");for(let[c,u]of Object.entries(s.context)){let p=typeof u=="object"?JSON.stringify(u):String(u);o.push(`- **${c}:** ${p}`)}}let d=n.errorTrace||s.stack||s.errorTrace;if(d&&(o.push(""),o.push("## Stack Trace"),o.push("```"),o.push(d),o.push("```")),o.push(""),o.push("## Latest Event"),s.sdk==="node"?(s.method&&s.path&&o.push(`- **Endpoint:** ${s.method} ${s.path}`),s.nodeVersion&&o.push(`- **Node.js:** ${s.nodeVersion}`),s.platform&&o.push(`- **Platform:** ${s.platform}/${s.arch||""}`)):(s.browser&&o.push(`- **Browser:** ${s.browser}`),s.os&&o.push(`- **OS:** ${s.os}`)),s.user&&typeof s.user=="object"){let c=s.user.name||s.user.email||s.user.id;c&&o.push(`- **User:** ${c}`)}return s.sdk&&o.push(`- **SDK:** ${s.sdk} ${s.sdkVersion||""}`.trim()),o.push(""),o.join(`
4
- `)}function E(e){if(!e)return null;try{return new Date(e).toISOString()}catch{return null}}function Z(e){let s=[];s.push(`# ${e.title}`),s.push(""),s.push(`- **ID:** #${e.id}`),s.push(`- **Type:** ${e.type}`),s.push(`- **Status:** ${e.status}`),s.push(`- **Author:** ${e.author}`),s.push(`- **Project:** ${e.project}`);let n=E(e.createdAt);n&&s.push(`- **Created:** ${n}`);let o=E(e.updatedAt);if(o&&s.push(`- **Updated:** ${o}`),e.status==="closed"){let t=E(e.closedAt);t&&s.push(`- **Closed:** ${t}`)}return s.push(""),s.push("---"),s.push(""),s.push(e.description||"_No description._"),s.push(""),s.join(`
5
- `)}function ee(){let e=a(process.cwd(),B);if(!h(e))return;let s=a(process.cwd(),D);w(s,{recursive:!0});let n=0;for(let o of v(e)){if(o==="CLAUDE.md"){y(a(e,o));continue}let t=a(e,o),r=a(s,o);h(r)?y(t):(F(t,r),n++)}try{J(e)}catch{}console.log(`Migrated ${n} file(s) from .bugs/ to .scout/errors/`)}function se(e){let s=a(process.cwd(),D);w(s,{recursive:!0});let n=new Set,o=0,t=0,r=0;for(let c of e){let u=c.hash.slice(0,8)+".md";n.add(u);let p=a(s,u),f=Q(c);h(p)?x(p,"utf8")!==f?(g(p,f),t++):r++:(g(p,f),o++)}let d=0;for(let c of v(s))W.test(c)&&!n.has(c)&&(y(a(s,c)),d++);console.log(`Errors: ${e.length} synced (${o} new, ${t} updated, ${r} unchanged, ${d} removed)`)}function oe(e){let s=a(process.cwd(),q),n=a(process.cwd(),G);w(s,{recursive:!0}),w(n,{recursive:!0});let o=new Set,t=new Set,r=0,d=0,c=0;for(let i of e){let m=`${i.id}.md`,l=Z(i),S=i.status==="closed"?n:s,T=i.status==="closed"?s:n;i.status==="closed"?t.add(m):o.add(m);let A=a(T,m);h(A)&&y(A);let j=a(S,m);h(j)?x(j,"utf8")!==l?(g(j,l),d++):c++:(g(j,l),r++)}let u=0;for(let i of v(s))N.test(i)&&!o.has(i)&&(y(a(s,i)),u++);for(let i of v(n))N.test(i)&&!t.has(i)&&(y(a(n,i)),u++);let p=e.filter(i=>i.status==="open").length,f=e.length-p;console.log(`Issues: ${e.length} synced (${p} open, ${f} closed; ${r} new, ${d} updated, ${c} unchanged, ${u} removed)`)}function te(){let e=`# Scout Tracking Directory
2
+ import{readFileSync as P,writeFileSync as $,mkdirSync as S,readdirSync as O,unlinkSync as g,existsSync as h,renameSync as J,rmdirSync as M}from"fs";import{join as c}from"path";import{homedir as G}from"os";import{createInterface as H}from"readline";var j=".scout",D=".scout/errors",q=".scout/issues",B=".scout/archive",W=".bugs",K=/^[0-9a-f]{8}\.md$/,k=/^\d+\.md$/,T=".scout.json",y=c(G(),".scout.json");function U(e){if(!h(e))return null;try{return JSON.parse(P(e,"utf8"))}catch(s){console.error(`Error parsing ${e}: ${s.message}`),process.exit(1)}}function I({requireProject:e=!0}={}){let s=U(y)||{},t=U(c(process.cwd(),T))||{},o={...s,...t};process.env.SCOUT_USERNAME&&(o.username=process.env.SCOUT_USERNAME),process.env.SCOUT_PASSWORD&&(o.password=process.env.SCOUT_PASSWORD),process.env.SCOUT_ENDPOINT&&(o.endpoint=process.env.SCOUT_ENDPOINT),process.env.SCOUT_PROJECT&&(o.project=process.env.SCOUT_PROJECT);let n=[];return o.endpoint||n.push("endpoint"),o.username||n.push("username"),o.password||n.push("password"),e&&!o.project&&n.push("project"),n.length&&(console.error(`Missing config: ${n.join(", ")}`),console.error(`
3
+ Run \`scout init\` to set up, or edit ${y} / ${T}`),process.exit(1)),o}function V(){return H({input:process.stdin,output:process.stdout})}function N(e,s){return new Promise(t=>e.question(s,o=>t(o.trim())))}async function v(e,s,t){let o=t?` [${t}]`:"";return await N(e,`${s}${o}: `)||t||""}async function X(e,s,t=!0){let n=(await N(e,`${s}${t?" [Y/n]":" [y/N]"}: `)).toLowerCase();return n?n==="y"||n==="yes":t}function b(e){return{"X-Username":e.username,"X-Password":e.password}}async function R(e,s){let t=`${e.endpoint.replace(/\/$/,"")}${s}`,o;try{o=await fetch(t,{headers:b(e)})}catch(r){console.error(`Could not connect to ${e.endpoint}. Check the endpoint URL.`),console.error(r.message),process.exit(1)}o.status===401&&(console.error("Authentication failed. Check your username and password."),process.exit(1)),o.ok||(console.error(`Server error: ${o.status} ${o.statusText}`),process.exit(1));let n=o.headers.get("content-type")||"";if(!n.includes("application/json")){let r=new Error(`Expected JSON from ${s}, got ${n||"unknown"} \u2014 is your Scout server up to date?`);throw r.code="NOT_JSON",r}return await o.json()}async function L(e,s,t){let o=`${e.endpoint.replace(/\/$/,"")}/issues/${encodeURIComponent(s)}`,n;try{n=await fetch(o,{method:"PATCH",headers:{"Content-Type":"application/json",...b(e)},body:JSON.stringify(t)})}catch(r){console.error(`Could not connect to ${e.endpoint}. ${r.message}`),process.exit(1)}return n.status===401&&(console.error("Authentication failed."),process.exit(1)),n.status===404&&(console.error(`Issue #${s} not found`),process.exit(1)),n.ok||(console.error(`Server error: ${n.status} ${n.statusText}`),process.exit(1)),await n.json()}async function Y(e){return R(e,`/errors?project=${encodeURIComponent(e.project)}`)}async function z(e){return R(e,`/issues?project=${encodeURIComponent(e.project)}&status=all`)}async function Q(e){return R(e,"/projects?showHidden=true")}function Z(e){let s=e.events[0]||{},t=e.combinedFields||{},o=[],n=t.message||s.args||s.type||"Unknown Error";o.push(`# ${n}`),o.push(""),o.push(`- **Hash:** ${e.hash}`),o.push(`- **Project:** ${t.project||""}`),t.app&&t.app!==t.project&&o.push(`- **App:** ${t.app}`),o.push(`- **Count:** ${e.count} total, ${e.last24HoursCount} last 24h, ${e.last30DaysCount} last 30d`),o.push(`- **Users:** ${e.uniqueUserCount} unique`);let r=s.timestamp||s.errorTimestamp;if(r){let i=typeof r=="string"?r:new Date(r).toISOString();o.push(`- **Last seen:** ${i}`)}if(s.environment&&o.push(`- **Environment:** ${s.environment}`),s.type&&o.push(`- **Type:** ${s.type}`),s.url&&o.push(`- **URL:** ${s.url}`),s.context&&Object.keys(s.context).length>0){o.push(""),o.push("## Context");for(let[i,u]of Object.entries(s.context)){let p=typeof u=="object"?JSON.stringify(u):String(u);o.push(`- **${i}:** ${p}`)}}let d=t.errorTrace||s.stack||s.errorTrace;if(d&&(o.push(""),o.push("## Stack Trace"),o.push("```"),o.push(d),o.push("```")),o.push(""),o.push("## Latest Event"),s.sdk==="node"?(s.method&&s.path&&o.push(`- **Endpoint:** ${s.method} ${s.path}`),s.nodeVersion&&o.push(`- **Node.js:** ${s.nodeVersion}`),s.platform&&o.push(`- **Platform:** ${s.platform}/${s.arch||""}`)):(s.browser&&o.push(`- **Browser:** ${s.browser}`),s.os&&o.push(`- **OS:** ${s.os}`)),s.user&&typeof s.user=="object"){let i=s.user.name||s.user.email||s.user.id;i&&o.push(`- **User:** ${i}`)}return s.sdk&&o.push(`- **SDK:** ${s.sdk} ${s.sdkVersion||""}`.trim()),o.push(""),o.join(`
4
+ `)}function x(e){if(!e)return null;try{return new Date(e).toISOString()}catch{return null}}function ee(e){let s=[];s.push(`# ${e.title}`),s.push(""),s.push(`- **ID:** #${e.id}`),s.push(`- **Type:** ${e.type}`),s.push(`- **Status:** ${e.status}`),s.push(`- **Author:** ${e.author}`),s.push(`- **Project:** ${e.project}`);let t=x(e.createdAt);t&&s.push(`- **Created:** ${t}`);let o=x(e.updatedAt);if(o&&s.push(`- **Updated:** ${o}`),e.status==="closed"){let n=x(e.closedAt);n&&s.push(`- **Closed:** ${n}`)}return s.push(""),s.push("---"),s.push(""),s.push(e.description||"_No description._"),s.push(""),s.join(`
5
+ `)}function se(){let e=c(process.cwd(),W);if(!h(e))return;let s=c(process.cwd(),D);S(s,{recursive:!0});let t=0;for(let o of O(e)){if(o==="CLAUDE.md"){g(c(e,o));continue}let n=c(e,o),r=c(s,o);h(r)?g(n):(J(n,r),t++)}try{M(e)}catch{}console.log(`Migrated ${t} file(s) from .bugs/ to .scout/errors/`)}function oe(e){let s=c(process.cwd(),D);S(s,{recursive:!0});let t=new Set,o=0,n=0,r=0;for(let i of e){let u=i.hash.slice(0,8)+".md";t.add(u);let p=c(s,u),f=Z(i);h(p)?P(p,"utf8")!==f?($(p,f),n++):r++:($(p,f),o++)}let d=0;for(let i of O(s))K.test(i)&&!t.has(i)&&(g(c(s,i)),d++);console.log(`Errors: ${e.length} synced (${o} new, ${n} updated, ${r} unchanged, ${d} removed)`)}function te(e){let s=c(process.cwd(),q),t=c(process.cwd(),B);S(s,{recursive:!0}),S(t,{recursive:!0});let o=new Set,n=new Set,r=0,d=0,i=0;for(let a of e){let m=`${a.id}.md`,l=ee(a),w=a.status==="closed"?t:s,E=a.status==="closed"?s:t;a.status==="closed"?n.add(m):o.add(m);let A=c(E,m);h(A)&&g(A);let C=c(w,m);h(C)?P(C,"utf8")!==l?($(C,l),d++):i++:($(C,l),r++)}let u=0;for(let a of O(s))k.test(a)&&!o.has(a)&&(g(c(s,a)),u++);for(let a of O(t))k.test(a)&&!n.has(a)&&(g(c(t,a)),u++);let p=e.filter(a=>a.status==="open").length,f=e.length-p;console.log(`Issues: ${e.length} synced (${p} open, ${f} closed; ${r} new, ${d} updated, ${i} unchanged, ${u} removed)`)}function F(){let e=`# Scout Tracking Directory
6
6
 
7
7
  Synced from Scout.js by \`scout sync\`.
8
8
 
@@ -26,13 +26,13 @@ Closed issues \u2014 reference only.
26
26
  ## Commands
27
27
  - \`scout sync\` \u2014 refresh errors and issues
28
28
  - \`scout close <id>\` / \`scout reopen <id>\` \u2014 change issue state
29
- `,s=a(process.cwd(),k,"CLAUDE.md");(h(s)?x(s,"utf8"):null)!==e&&g(s,e)}async function ne(){let e=K();try{console.log(`Scout setup
30
- `);let s=U($)||{},n=U(a(process.cwd(),O))||{},{endpoint:o,username:t,password:r}=s;o&&t&&r&&(console.log(`Using saved credentials from ${$}`),console.log(` endpoint: ${o}`),console.log(` username: ${t}`),await V(e,"Use these credentials?",!0)||(o=null,t=null,r=null)),(!o||!t||!r)&&(o=await C(e,"Scout endpoint URL",o||n.endpoint||"https://admin.scoutjs.com"),t=await C(e,"Username",t||n.username||"scout"),r=await C(e,"Password",r||n.password||""),(!o||!t||!r)&&(console.error(`
31
- endpoint, username, and password are required.`),process.exit(1)),g($,JSON.stringify({endpoint:o,username:t,password:r},null,2)),console.log(`Saved credentials to ${$}`));let d={endpoint:o,username:t,password:r};console.log(`
32
- Fetching projects...`);let c=await z(d);c.sort((l,S)=>(l.project||"").localeCompare(S.project||"")),console.log(`
33
- Select a project:`),console.log(" 1) New Project (enter name)"),c.forEach((l,S)=>{let T=l.hidden?" (hidden)":"";console.log(` ${S+2}) ${l.project}${T}`)});let u=n.project&&c.findIndex(l=>l.project===n.project)+2||"",p=await C(e,`
34
- Choice`,u?String(u):""),f=parseInt(p,10),i;f===1?(i=await I(e,"Project name: "),i||(console.error("Project name required."),process.exit(1))):f>=2&&f-2<c.length?i=c[f-2].project:(console.error("Invalid choice."),process.exit(1));let m=a(process.cwd(),O);g(m,JSON.stringify({project:i},null,2)),console.log(`
35
- Saved project to ${m}`),console.log("\nRun `scout sync` to pull errors and issues into .scout/")}finally{e.close()}}async function re(){let e=P();ee();let s=a(process.cwd(),k),n=!h(s);w(s,{recursive:!0}),n&&console.log("Tip: Add .scout/ to your .gitignore"),console.log(`Fetching errors for project "${e.project}"...`);let o=await X(e);se(o),console.log(`Fetching issues for project "${e.project}"...`);let t=await Y(e);oe(t),te()}async function ce(e){e||(console.error("Usage: scout close <id>"),process.exit(1));let s=P({requireProject:!1});await L(s,e,{status:"closed"}),console.log(`Closed issue #${e}`)}async function ie(e){e||(console.error("Usage: scout reopen <id>"),process.exit(1));let s=P({requireProject:!1});await L(s,e,{status:"open"}),console.log(`Reopened issue #${e}`)}function _(){console.log(`scout-error \u2014 Sync errors and issues to local .scout/
29
+ `;S(c(process.cwd(),j),{recursive:!0});let s=c(process.cwd(),j,"AGENTS.md");h(s)||$(s,e);let t=c(process.cwd(),j,"CLAUDE.md");if(h(t))try{g(t)}catch{}}async function ne(){let e=V();try{console.log(`Scout setup
30
+ `);let s=U(y)||{},t=U(c(process.cwd(),T))||{},{endpoint:o,username:n,password:r}=s;o&&n&&r&&(console.log(`Using saved credentials from ${y}`),console.log(` endpoint: ${o}`),console.log(` username: ${n}`),await X(e,"Use these credentials?",!0)||(o=null,n=null,r=null)),(!o||!n||!r)&&(o=await v(e,"Scout endpoint URL",o||t.endpoint||"https://admin.scoutjs.com"),n=await v(e,"Username",n||t.username||"scout"),r=await v(e,"Password",r||t.password||""),(!o||!n||!r)&&(console.error(`
31
+ endpoint, username, and password are required.`),process.exit(1)),$(y,JSON.stringify({endpoint:o,username:n,password:r},null,2)),console.log(`Saved credentials to ${y}`));let d={endpoint:o,username:n,password:r};console.log(`
32
+ Fetching projects...`);let i=await Q(d);i.sort((l,w)=>(l.project||"").localeCompare(w.project||"")),console.log(`
33
+ Select a project:`),console.log(" 1) New Project (enter name)"),i.forEach((l,w)=>{let E=l.hidden?" (hidden)":"";console.log(` ${w+2}) ${l.project}${E}`)});let u=t.project&&i.findIndex(l=>l.project===t.project)+2||"",p=await v(e,`
34
+ Choice`,u?String(u):""),f=parseInt(p,10),a;f===1?(a=await N(e,"Project name: "),a||(console.error("Project name required."),process.exit(1))):f>=2&&f-2<i.length?a=i[f-2].project:(console.error("Invalid choice."),process.exit(1));let m=c(process.cwd(),T);$(m,JSON.stringify({project:a},null,2)),console.log(`
35
+ Saved project to ${m}`),F(),console.log("Created .scout/AGENTS.md"),console.log("\nRun `scout sync` to pull errors and issues into .scout/")}finally{e.close()}}async function re(){let e=I();se();let s=c(process.cwd(),j),t=!h(s);S(s,{recursive:!0}),t&&console.log("Tip: Add .scout/ to your .gitignore"),console.log(`Fetching errors for project "${e.project}"...`);let o=await Y(e);oe(o),console.log(`Fetching issues for project "${e.project}"...`);try{let r=await z(e);te(r)}catch(r){r.code==="NOT_JSON"?console.error(`Issues: skipped \u2014 ${r.message}`):console.error(`Issues: skipped \u2014 ${r.message}`)}let n=c(process.cwd(),j,"AGENTS.md");h(n)||F()}async function ce(e){e||(console.error("Usage: scout close <id>"),process.exit(1));let s=I({requireProject:!1});await L(s,e,{status:"closed"}),console.log(`Closed issue #${e}`)}async function ie(e){e||(console.error("Usage: scout reopen <id>"),process.exit(1));let s=I({requireProject:!1});await L(s,e,{status:"open"}),console.log(`Reopened issue #${e}`)}function _(){console.log(`scout-error \u2014 Sync errors and issues to local .scout/
36
36
 
37
37
  Usage:
38
38
  scout init Configure credentials and select a project
package/dist/cli.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cli.js"],
4
- "sourcesContent": ["import { readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync, existsSync, renameSync, rmdirSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { createInterface } from 'readline'\n\n// --- Paths ---\n\nconst SCOUT_DIR = '.scout'\nconst ERRORS_DIR = '.scout/errors'\nconst ISSUES_DIR = '.scout/issues'\nconst ARCHIVE_DIR = '.scout/archive'\nconst LEGACY_BUGS_DIR = '.bugs'\n\nconst HASH_FILE_PATTERN = /^[0-9a-f]{8}\\.md$/\nconst ISSUE_FILE_PATTERN = /^\\d+\\.md$/\n\nconst LOCAL_CONFIG = '.scout.json'\nconst GLOBAL_CONFIG = join(homedir(), '.scout.json')\n\n// --- Config ---\n\nfunction readJson(path) {\n if (!existsSync(path)) return null\n try {\n return JSON.parse(readFileSync(path, 'utf8'))\n } catch (e) {\n console.error(`Error parsing ${path}: ${e.message}`)\n process.exit(1)\n }\n}\n\nfunction loadConfig({ requireProject = true } = {}) {\n const global = readJson(GLOBAL_CONFIG) || {}\n const local = readJson(join(process.cwd(), LOCAL_CONFIG)) || {}\n const config = { ...global, ...local }\n\n if (process.env.SCOUT_USERNAME) config.username = process.env.SCOUT_USERNAME\n if (process.env.SCOUT_PASSWORD) config.password = process.env.SCOUT_PASSWORD\n if (process.env.SCOUT_ENDPOINT) config.endpoint = process.env.SCOUT_ENDPOINT\n if (process.env.SCOUT_PROJECT) config.project = process.env.SCOUT_PROJECT\n\n const missing = []\n if (!config.endpoint) missing.push('endpoint')\n if (!config.username) missing.push('username')\n if (!config.password) missing.push('password')\n if (requireProject && !config.project) missing.push('project')\n\n if (missing.length) {\n console.error(`Missing config: ${missing.join(', ')}`)\n console.error(`\\nRun \\`scout init\\` to set up, or edit ${GLOBAL_CONFIG} / ${LOCAL_CONFIG}`)\n process.exit(1)\n }\n\n return config\n}\n\n// --- Prompts ---\n\nfunction createPrompt() {\n return createInterface({ input: process.stdin, output: process.stdout })\n}\n\nfunction ask(rl, question) {\n return new Promise(resolve => rl.question(question, answer => resolve(answer.trim())))\n}\n\nasync function askWithDefault(rl, question, defaultValue) {\n const suffix = defaultValue ? ` [${defaultValue}]` : ''\n const answer = await ask(rl, `${question}${suffix}: `)\n return answer || defaultValue || ''\n}\n\nasync function askYesNo(rl, question, defaultYes = true) {\n const suffix = defaultYes ? ' [Y/n]' : ' [y/N]'\n const answer = (await ask(rl, `${question}${suffix}: `)).toLowerCase()\n if (!answer) return defaultYes\n return answer === 'y' || answer === 'yes'\n}\n\n// --- Fetch helpers ---\n\nfunction authHeaders(config) {\n return {\n 'X-Username': config.username,\n 'X-Password': config.password,\n }\n}\n\nasync function fetchJson(config, path) {\n const url = `${config.endpoint.replace(/\\/$/, '')}${path}`\n\n let response\n try {\n response = await fetch(url, { headers: authHeaders(config) })\n } catch (e) {\n console.error(`Could not connect to ${config.endpoint}. Check the endpoint URL.`)\n console.error(e.message)\n process.exit(1)\n }\n\n if (response.status === 401) {\n console.error('Authentication failed. Check your username and password.')\n process.exit(1)\n }\n\n if (!response.ok) {\n console.error(`Server error: ${response.status} ${response.statusText}`)\n process.exit(1)\n }\n\n return await response.json()\n}\n\nasync function patchIssue(config, id, patch) {\n const url = `${config.endpoint.replace(/\\/$/, '')}/issues/${encodeURIComponent(id)}`\n let res\n try {\n res = await fetch(url, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders(config),\n },\n body: JSON.stringify(patch),\n })\n } catch (e) {\n console.error(`Could not connect to ${config.endpoint}. ${e.message}`)\n process.exit(1)\n }\n\n if (res.status === 401) {\n console.error('Authentication failed.')\n process.exit(1)\n }\n if (res.status === 404) {\n console.error(`Issue #${id} not found`)\n process.exit(1)\n }\n if (!res.ok) {\n console.error(`Server error: ${res.status} ${res.statusText}`)\n process.exit(1)\n }\n return await res.json()\n}\n\nasync function fetchErrors(config) {\n return fetchJson(config, `/errors?project=${encodeURIComponent(config.project)}`)\n}\n\nasync function fetchIssues(config) {\n return fetchJson(config, `/issues?project=${encodeURIComponent(config.project)}&status=all`)\n}\n\nasync function fetchProjects(config) {\n return fetchJson(config, '/projects?showHidden=true')\n}\n\n// --- Markdown rendering ---\n\nfunction renderErrorMarkdown(error) {\n const event = error.events[0] || {}\n const cf = error.combinedFields || {}\n const lines = []\n\n const title = cf.message || event.args || event.type || 'Unknown Error'\n lines.push(`# ${title}`)\n lines.push('')\n\n lines.push(`- **Hash:** ${error.hash}`)\n lines.push(`- **Project:** ${cf.project || ''}`)\n if (cf.app && cf.app !== cf.project) lines.push(`- **App:** ${cf.app}`)\n lines.push(`- **Count:** ${error.count} total, ${error.last24HoursCount} last 24h, ${error.last30DaysCount} last 30d`)\n lines.push(`- **Users:** ${error.uniqueUserCount} unique`)\n\n const lastSeen = event.timestamp || event.errorTimestamp\n if (lastSeen) {\n const ts = typeof lastSeen === 'string' ? lastSeen : new Date(lastSeen).toISOString()\n lines.push(`- **Last seen:** ${ts}`)\n }\n\n if (event.environment) lines.push(`- **Environment:** ${event.environment}`)\n if (event.type) lines.push(`- **Type:** ${event.type}`)\n if (event.url) lines.push(`- **URL:** ${event.url}`)\n\n if (event.context && Object.keys(event.context).length > 0) {\n lines.push('')\n lines.push('## Context')\n for (const [key, value] of Object.entries(event.context)) {\n const formatted = typeof value === 'object' ? JSON.stringify(value) : String(value)\n lines.push(`- **${key}:** ${formatted}`)\n }\n }\n\n const trace = cf.errorTrace || event.stack || event.errorTrace\n if (trace) {\n lines.push('')\n lines.push('## Stack Trace')\n lines.push('```')\n lines.push(trace)\n lines.push('```')\n }\n\n lines.push('')\n lines.push('## Latest Event')\n if (event.sdk === 'node') {\n if (event.method && event.path) lines.push(`- **Endpoint:** ${event.method} ${event.path}`)\n if (event.nodeVersion) lines.push(`- **Node.js:** ${event.nodeVersion}`)\n if (event.platform) lines.push(`- **Platform:** ${event.platform}/${event.arch || ''}`)\n } else {\n if (event.browser) lines.push(`- **Browser:** ${event.browser}`)\n if (event.os) lines.push(`- **OS:** ${event.os}`)\n }\n if (event.user && typeof event.user === 'object') {\n const userName = event.user.name || event.user.email || event.user.id\n if (userName) lines.push(`- **User:** ${userName}`)\n }\n if (event.sdk) lines.push(`- **SDK:** ${event.sdk} ${event.sdkVersion || ''}`.trim())\n\n lines.push('')\n return lines.join('\\n')\n}\n\nfunction isoOrNull(value) {\n if (!value) return null\n try {\n return new Date(value).toISOString()\n } catch {\n return null\n }\n}\n\nfunction renderIssueMarkdown(issue) {\n const lines = []\n lines.push(`# ${issue.title}`)\n lines.push('')\n lines.push(`- **ID:** #${issue.id}`)\n lines.push(`- **Type:** ${issue.type}`)\n lines.push(`- **Status:** ${issue.status}`)\n lines.push(`- **Author:** ${issue.author}`)\n lines.push(`- **Project:** ${issue.project}`)\n\n const created = isoOrNull(issue.createdAt)\n if (created) lines.push(`- **Created:** ${created}`)\n\n const updated = isoOrNull(issue.updatedAt)\n if (updated) lines.push(`- **Updated:** ${updated}`)\n\n if (issue.status === 'closed') {\n const closed = isoOrNull(issue.closedAt)\n if (closed) lines.push(`- **Closed:** ${closed}`)\n }\n\n lines.push('')\n lines.push('---')\n lines.push('')\n lines.push(issue.description || '_No description._')\n lines.push('')\n return lines.join('\\n')\n}\n\n// --- Migration ---\n\nfunction migrateLegacyBugs() {\n const legacy = join(process.cwd(), LEGACY_BUGS_DIR)\n if (!existsSync(legacy)) return\n\n const target = join(process.cwd(), ERRORS_DIR)\n mkdirSync(target, { recursive: true })\n\n let moved = 0\n for (const f of readdirSync(legacy)) {\n if (f === 'CLAUDE.md') {\n // Old CLAUDE.md \u2014 we'll write a new one at .scout/CLAUDE.md\n unlinkSync(join(legacy, f))\n continue\n }\n const src = join(legacy, f)\n const dst = join(target, f)\n if (!existsSync(dst)) {\n renameSync(src, dst)\n moved++\n } else {\n unlinkSync(src)\n }\n }\n\n try { rmdirSync(legacy) } catch { /* not empty, leave it */ }\n console.log(`Migrated ${moved} file(s) from .bugs/ to .scout/errors/`)\n}\n\n// --- Sync ---\n\nfunction syncErrorsDir(errors) {\n const target = join(process.cwd(), ERRORS_DIR)\n mkdirSync(target, { recursive: true })\n\n const expected = new Set()\n let created = 0, updated = 0, unchanged = 0\n\n for (const error of errors) {\n const filename = error.hash.slice(0, 8) + '.md'\n expected.add(filename)\n const filePath = join(target, filename)\n const content = renderErrorMarkdown(error)\n\n if (existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf8')\n if (existing !== content) { writeFileSync(filePath, content); updated++ }\n else unchanged++\n } else {\n writeFileSync(filePath, content)\n created++\n }\n }\n\n let removed = 0\n for (const file of readdirSync(target)) {\n if (HASH_FILE_PATTERN.test(file) && !expected.has(file)) {\n unlinkSync(join(target, file))\n removed++\n }\n }\n\n console.log(`Errors: ${errors.length} synced (${created} new, ${updated} updated, ${unchanged} unchanged, ${removed} removed)`)\n}\n\nfunction syncIssuesDir(issues) {\n const issuesPath = join(process.cwd(), ISSUES_DIR)\n const archivePath = join(process.cwd(), ARCHIVE_DIR)\n mkdirSync(issuesPath, { recursive: true })\n mkdirSync(archivePath, { recursive: true })\n\n const expectedOpen = new Set()\n const expectedClosed = new Set()\n let created = 0, updated = 0, unchanged = 0\n\n for (const issue of issues) {\n const filename = `${issue.id}.md`\n const content = renderIssueMarkdown(issue)\n const targetDir = issue.status === 'closed' ? archivePath : issuesPath\n const otherDir = issue.status === 'closed' ? issuesPath : archivePath\n\n if (issue.status === 'closed') expectedClosed.add(filename)\n else expectedOpen.add(filename)\n\n // Remove from the other dir if transitioning\n const otherPath = join(otherDir, filename)\n if (existsSync(otherPath)) unlinkSync(otherPath)\n\n const filePath = join(targetDir, filename)\n if (existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf8')\n if (existing !== content) { writeFileSync(filePath, content); updated++ }\n else unchanged++\n } else {\n writeFileSync(filePath, content)\n created++\n }\n }\n\n let removed = 0\n for (const file of readdirSync(issuesPath)) {\n if (ISSUE_FILE_PATTERN.test(file) && !expectedOpen.has(file)) {\n unlinkSync(join(issuesPath, file))\n removed++\n }\n }\n for (const file of readdirSync(archivePath)) {\n if (ISSUE_FILE_PATTERN.test(file) && !expectedClosed.has(file)) {\n unlinkSync(join(archivePath, file))\n removed++\n }\n }\n\n const openCount = issues.filter(i => i.status === 'open').length\n const closedCount = issues.length - openCount\n console.log(`Issues: ${issues.length} synced (${openCount} open, ${closedCount} closed; ${created} new, ${updated} updated, ${unchanged} unchanged, ${removed} removed)`)\n}\n\nfunction writeClaudeMd() {\n const content = `# Scout Tracking Directory\n\nSynced from Scout.js by \\`scout sync\\`.\n\n## errors/\nAuto-captured production errors. Filename: \\`{8-char-hash}.md\\`.\nFocus on high recent counts. Files are overwritten on sync.\n\n## issues/\nOpen human-filed tickets (bug, feature, task). Filename: \\`{id}.md\\`.\nAfter landing a fix: \\`scout close <id>\\`.\n\n## archive/\nClosed issues \u2014 reference only.\n\n## Rules\n1. **Do NOT edit** files in errors/, issues/, or archive/ \u2014 they get overwritten on sync\n2. Keep investigation notes in separate files (e.g., \\`issues/42.notes.md\\`) \u2014 those are yours\n3. Managed files match \\`{8-char-hash}.md\\` or \\`{digit}.md\\` in their respective dirs\n4. Everything else in this directory is yours\n\n## Commands\n- \\`scout sync\\` \u2014 refresh errors and issues\n- \\`scout close <id>\\` / \\`scout reopen <id>\\` \u2014 change issue state\n`\n\n const filePath = join(process.cwd(), SCOUT_DIR, 'CLAUDE.md')\n const existing = existsSync(filePath) ? readFileSync(filePath, 'utf8') : null\n if (existing !== content) writeFileSync(filePath, content)\n}\n\n// --- Commands ---\n\nasync function cmdInit() {\n const rl = createPrompt()\n\n try {\n console.log('Scout setup\\n')\n\n const global = readJson(GLOBAL_CONFIG) || {}\n const local = readJson(join(process.cwd(), LOCAL_CONFIG)) || {}\n\n let { endpoint, username, password } = global\n\n if (endpoint && username && password) {\n console.log(`Using saved credentials from ${GLOBAL_CONFIG}`)\n console.log(` endpoint: ${endpoint}`)\n console.log(` username: ${username}`)\n const reuse = await askYesNo(rl, 'Use these credentials?', true)\n if (!reuse) {\n endpoint = null; username = null; password = null\n }\n }\n\n if (!endpoint || !username || !password) {\n endpoint = await askWithDefault(rl, 'Scout endpoint URL', endpoint || local.endpoint || 'https://admin.scoutjs.com')\n username = await askWithDefault(rl, 'Username', username || local.username || 'scout')\n password = await askWithDefault(rl, 'Password', password || local.password || '')\n\n if (!endpoint || !username || !password) {\n console.error('\\nendpoint, username, and password are required.')\n process.exit(1)\n }\n\n writeFileSync(GLOBAL_CONFIG, JSON.stringify({ endpoint, username, password }, null, 2))\n console.log(`Saved credentials to ${GLOBAL_CONFIG}`)\n }\n\n const config = { endpoint, username, password }\n\n console.log('\\nFetching projects...')\n const projects = await fetchProjects(config)\n projects.sort((a, b) => (a.project || '').localeCompare(b.project || ''))\n\n console.log('\\nSelect a project:')\n console.log(' 1) New Project (enter name)')\n projects.forEach((p, i) => {\n const tag = p.hidden ? ' (hidden)' : ''\n console.log(` ${i + 2}) ${p.project}${tag}`)\n })\n\n const defaultIdx = local.project\n ? (projects.findIndex(p => p.project === local.project) + 2) || ''\n : ''\n const choice = await askWithDefault(rl, '\\nChoice', defaultIdx ? String(defaultIdx) : '')\n const idx = parseInt(choice, 10)\n\n let selectedProject\n if (idx === 1) {\n selectedProject = await ask(rl, 'Project name: ')\n if (!selectedProject) {\n console.error('Project name required.')\n process.exit(1)\n }\n } else if (idx >= 2 && idx - 2 < projects.length) {\n selectedProject = projects[idx - 2].project\n } else {\n console.error('Invalid choice.')\n process.exit(1)\n }\n\n const localPath = join(process.cwd(), LOCAL_CONFIG)\n writeFileSync(localPath, JSON.stringify({ project: selectedProject }, null, 2))\n console.log(`\\nSaved project to ${localPath}`)\n console.log(`\\nRun \\`scout sync\\` to pull errors and issues into .scout/`)\n } finally {\n rl.close()\n }\n}\n\nasync function cmdSync() {\n const config = loadConfig()\n\n migrateLegacyBugs()\n const scoutPath = join(process.cwd(), SCOUT_DIR)\n const firstRun = !existsSync(scoutPath)\n mkdirSync(scoutPath, { recursive: true })\n if (firstRun) {\n console.log('Tip: Add .scout/ to your .gitignore')\n }\n\n console.log(`Fetching errors for project \"${config.project}\"...`)\n const errors = await fetchErrors(config)\n syncErrorsDir(errors)\n\n console.log(`Fetching issues for project \"${config.project}\"...`)\n const issues = await fetchIssues(config)\n syncIssuesDir(issues)\n\n writeClaudeMd()\n}\n\nasync function cmdClose(id) {\n if (!id) {\n console.error('Usage: scout close <id>')\n process.exit(1)\n }\n const config = loadConfig({ requireProject: false })\n await patchIssue(config, id, { status: 'closed' })\n console.log(`Closed issue #${id}`)\n}\n\nasync function cmdReopen(id) {\n if (!id) {\n console.error('Usage: scout reopen <id>')\n process.exit(1)\n }\n const config = loadConfig({ requireProject: false })\n await patchIssue(config, id, { status: 'open' })\n console.log(`Reopened issue #${id}`)\n}\n\n// --- Main ---\n\nfunction printUsage() {\n console.log(`scout-error \u2014 Sync errors and issues to local .scout/\n\nUsage:\n scout init Configure credentials and select a project\n scout sync Fetch errors and issues into .scout/\n scout close <id> Mark an issue as closed\n scout reopen <id> Reopen a closed issue\n scout help Show this help\n\nConfig files:\n ~/.scout.json Global credentials (endpoint, username, password)\n ./.scout.json Per-project (project name)\n\nEnvironment variables override both:\n SCOUT_ENDPOINT, SCOUT_USERNAME, SCOUT_PASSWORD, SCOUT_PROJECT\n`)\n}\n\nasync function main() {\n const command = process.argv[2]\n\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n printUsage()\n process.exit(0)\n }\n\n if (command === 'init') {\n await cmdInit()\n } else if (command === 'sync') {\n await cmdSync()\n } else if (command === 'close') {\n await cmdClose(process.argv[3])\n } else if (command === 'reopen') {\n await cmdReopen(process.argv[3])\n } else {\n console.error(`Unknown command: ${command}\\n`)\n printUsage()\n process.exit(1)\n }\n}\n\nmain().catch(e => {\n console.error(e.message)\n process.exit(1)\n})\n"],
5
- "mappings": "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",
6
- "names": ["readFileSync", "writeFileSync", "mkdirSync", "readdirSync", "unlinkSync", "existsSync", "renameSync", "rmdirSync", "join", "homedir", "createInterface", "SCOUT_DIR", "ERRORS_DIR", "ISSUES_DIR", "ARCHIVE_DIR", "LEGACY_BUGS_DIR", "HASH_FILE_PATTERN", "ISSUE_FILE_PATTERN", "LOCAL_CONFIG", "GLOBAL_CONFIG", "readJson", "path", "e", "loadConfig", "requireProject", "global", "local", "config", "missing", "createPrompt", "ask", "rl", "question", "resolve", "answer", "askWithDefault", "defaultValue", "suffix", "askYesNo", "defaultYes", "authHeaders", "fetchJson", "url", "response", "patchIssue", "id", "patch", "res", "fetchErrors", "fetchIssues", "fetchProjects", "renderErrorMarkdown", "error", "event", "cf", "lines", "title", "lastSeen", "ts", "key", "value", "formatted", "trace", "userName", "isoOrNull", "renderIssueMarkdown", "issue", "created", "updated", "closed", "migrateLegacyBugs", "legacy", "target", "moved", "f", "src", "dst", "syncErrorsDir", "errors", "expected", "unchanged", "filename", "filePath", "content", "removed", "file", "syncIssuesDir", "issues", "issuesPath", "archivePath", "expectedOpen", "expectedClosed", "targetDir", "otherDir", "otherPath", "openCount", "closedCount", "writeClaudeMd", "cmdInit", "endpoint", "username", "password", "projects", "a", "b", "p", "i", "tag", "defaultIdx", "choice", "idx", "selectedProject", "localPath", "cmdSync", "scoutPath", "firstRun", "cmdClose", "cmdReopen", "printUsage", "main", "command"]
4
+ "sourcesContent": ["import { readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync, existsSync, renameSync, rmdirSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { createInterface } from 'readline'\n\n// --- Paths ---\n\nconst SCOUT_DIR = '.scout'\nconst ERRORS_DIR = '.scout/errors'\nconst ISSUES_DIR = '.scout/issues'\nconst ARCHIVE_DIR = '.scout/archive'\nconst LEGACY_BUGS_DIR = '.bugs'\n\nconst HASH_FILE_PATTERN = /^[0-9a-f]{8}\\.md$/\nconst ISSUE_FILE_PATTERN = /^\\d+\\.md$/\n\nconst LOCAL_CONFIG = '.scout.json'\nconst GLOBAL_CONFIG = join(homedir(), '.scout.json')\n\n// --- Config ---\n\nfunction readJson(path) {\n if (!existsSync(path)) return null\n try {\n return JSON.parse(readFileSync(path, 'utf8'))\n } catch (e) {\n console.error(`Error parsing ${path}: ${e.message}`)\n process.exit(1)\n }\n}\n\nfunction loadConfig({ requireProject = true } = {}) {\n const global = readJson(GLOBAL_CONFIG) || {}\n const local = readJson(join(process.cwd(), LOCAL_CONFIG)) || {}\n const config = { ...global, ...local }\n\n if (process.env.SCOUT_USERNAME) config.username = process.env.SCOUT_USERNAME\n if (process.env.SCOUT_PASSWORD) config.password = process.env.SCOUT_PASSWORD\n if (process.env.SCOUT_ENDPOINT) config.endpoint = process.env.SCOUT_ENDPOINT\n if (process.env.SCOUT_PROJECT) config.project = process.env.SCOUT_PROJECT\n\n const missing = []\n if (!config.endpoint) missing.push('endpoint')\n if (!config.username) missing.push('username')\n if (!config.password) missing.push('password')\n if (requireProject && !config.project) missing.push('project')\n\n if (missing.length) {\n console.error(`Missing config: ${missing.join(', ')}`)\n console.error(`\\nRun \\`scout init\\` to set up, or edit ${GLOBAL_CONFIG} / ${LOCAL_CONFIG}`)\n process.exit(1)\n }\n\n return config\n}\n\n// --- Prompts ---\n\nfunction createPrompt() {\n return createInterface({ input: process.stdin, output: process.stdout })\n}\n\nfunction ask(rl, question) {\n return new Promise(resolve => rl.question(question, answer => resolve(answer.trim())))\n}\n\nasync function askWithDefault(rl, question, defaultValue) {\n const suffix = defaultValue ? ` [${defaultValue}]` : ''\n const answer = await ask(rl, `${question}${suffix}: `)\n return answer || defaultValue || ''\n}\n\nasync function askYesNo(rl, question, defaultYes = true) {\n const suffix = defaultYes ? ' [Y/n]' : ' [y/N]'\n const answer = (await ask(rl, `${question}${suffix}: `)).toLowerCase()\n if (!answer) return defaultYes\n return answer === 'y' || answer === 'yes'\n}\n\n// --- Fetch helpers ---\n\nfunction authHeaders(config) {\n return {\n 'X-Username': config.username,\n 'X-Password': config.password,\n }\n}\n\nasync function fetchJson(config, path) {\n const url = `${config.endpoint.replace(/\\/$/, '')}${path}`\n\n let response\n try {\n response = await fetch(url, { headers: authHeaders(config) })\n } catch (e) {\n console.error(`Could not connect to ${config.endpoint}. Check the endpoint URL.`)\n console.error(e.message)\n process.exit(1)\n }\n\n if (response.status === 401) {\n console.error('Authentication failed. Check your username and password.')\n process.exit(1)\n }\n\n if (!response.ok) {\n console.error(`Server error: ${response.status} ${response.statusText}`)\n process.exit(1)\n }\n\n // Detect HTML responses (e.g. SPA catch-all when endpoint doesn't exist server-side)\n const contentType = response.headers.get('content-type') || ''\n if (!contentType.includes('application/json')) {\n const err = new Error(`Expected JSON from ${path}, got ${contentType || 'unknown'} \u2014 is your Scout server up to date?`)\n err.code = 'NOT_JSON'\n throw err\n }\n\n return await response.json()\n}\n\nasync function patchIssue(config, id, patch) {\n const url = `${config.endpoint.replace(/\\/$/, '')}/issues/${encodeURIComponent(id)}`\n let res\n try {\n res = await fetch(url, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders(config),\n },\n body: JSON.stringify(patch),\n })\n } catch (e) {\n console.error(`Could not connect to ${config.endpoint}. ${e.message}`)\n process.exit(1)\n }\n\n if (res.status === 401) {\n console.error('Authentication failed.')\n process.exit(1)\n }\n if (res.status === 404) {\n console.error(`Issue #${id} not found`)\n process.exit(1)\n }\n if (!res.ok) {\n console.error(`Server error: ${res.status} ${res.statusText}`)\n process.exit(1)\n }\n return await res.json()\n}\n\nasync function fetchErrors(config) {\n return fetchJson(config, `/errors?project=${encodeURIComponent(config.project)}`)\n}\n\nasync function fetchIssues(config) {\n return fetchJson(config, `/issues?project=${encodeURIComponent(config.project)}&status=all`)\n}\n\nasync function fetchProjects(config) {\n return fetchJson(config, '/projects?showHidden=true')\n}\n\n// --- Markdown rendering ---\n\nfunction renderErrorMarkdown(error) {\n const event = error.events[0] || {}\n const cf = error.combinedFields || {}\n const lines = []\n\n const title = cf.message || event.args || event.type || 'Unknown Error'\n lines.push(`# ${title}`)\n lines.push('')\n\n lines.push(`- **Hash:** ${error.hash}`)\n lines.push(`- **Project:** ${cf.project || ''}`)\n if (cf.app && cf.app !== cf.project) lines.push(`- **App:** ${cf.app}`)\n lines.push(`- **Count:** ${error.count} total, ${error.last24HoursCount} last 24h, ${error.last30DaysCount} last 30d`)\n lines.push(`- **Users:** ${error.uniqueUserCount} unique`)\n\n const lastSeen = event.timestamp || event.errorTimestamp\n if (lastSeen) {\n const ts = typeof lastSeen === 'string' ? lastSeen : new Date(lastSeen).toISOString()\n lines.push(`- **Last seen:** ${ts}`)\n }\n\n if (event.environment) lines.push(`- **Environment:** ${event.environment}`)\n if (event.type) lines.push(`- **Type:** ${event.type}`)\n if (event.url) lines.push(`- **URL:** ${event.url}`)\n\n if (event.context && Object.keys(event.context).length > 0) {\n lines.push('')\n lines.push('## Context')\n for (const [key, value] of Object.entries(event.context)) {\n const formatted = typeof value === 'object' ? JSON.stringify(value) : String(value)\n lines.push(`- **${key}:** ${formatted}`)\n }\n }\n\n const trace = cf.errorTrace || event.stack || event.errorTrace\n if (trace) {\n lines.push('')\n lines.push('## Stack Trace')\n lines.push('```')\n lines.push(trace)\n lines.push('```')\n }\n\n lines.push('')\n lines.push('## Latest Event')\n if (event.sdk === 'node') {\n if (event.method && event.path) lines.push(`- **Endpoint:** ${event.method} ${event.path}`)\n if (event.nodeVersion) lines.push(`- **Node.js:** ${event.nodeVersion}`)\n if (event.platform) lines.push(`- **Platform:** ${event.platform}/${event.arch || ''}`)\n } else {\n if (event.browser) lines.push(`- **Browser:** ${event.browser}`)\n if (event.os) lines.push(`- **OS:** ${event.os}`)\n }\n if (event.user && typeof event.user === 'object') {\n const userName = event.user.name || event.user.email || event.user.id\n if (userName) lines.push(`- **User:** ${userName}`)\n }\n if (event.sdk) lines.push(`- **SDK:** ${event.sdk} ${event.sdkVersion || ''}`.trim())\n\n lines.push('')\n return lines.join('\\n')\n}\n\nfunction isoOrNull(value) {\n if (!value) return null\n try {\n return new Date(value).toISOString()\n } catch {\n return null\n }\n}\n\nfunction renderIssueMarkdown(issue) {\n const lines = []\n lines.push(`# ${issue.title}`)\n lines.push('')\n lines.push(`- **ID:** #${issue.id}`)\n lines.push(`- **Type:** ${issue.type}`)\n lines.push(`- **Status:** ${issue.status}`)\n lines.push(`- **Author:** ${issue.author}`)\n lines.push(`- **Project:** ${issue.project}`)\n\n const created = isoOrNull(issue.createdAt)\n if (created) lines.push(`- **Created:** ${created}`)\n\n const updated = isoOrNull(issue.updatedAt)\n if (updated) lines.push(`- **Updated:** ${updated}`)\n\n if (issue.status === 'closed') {\n const closed = isoOrNull(issue.closedAt)\n if (closed) lines.push(`- **Closed:** ${closed}`)\n }\n\n lines.push('')\n lines.push('---')\n lines.push('')\n lines.push(issue.description || '_No description._')\n lines.push('')\n return lines.join('\\n')\n}\n\n// --- Migration ---\n\nfunction migrateLegacyBugs() {\n const legacy = join(process.cwd(), LEGACY_BUGS_DIR)\n if (!existsSync(legacy)) return\n\n const target = join(process.cwd(), ERRORS_DIR)\n mkdirSync(target, { recursive: true })\n\n let moved = 0\n for (const f of readdirSync(legacy)) {\n if (f === 'CLAUDE.md') {\n // Old CLAUDE.md \u2014 we'll write a new one at .scout/CLAUDE.md\n unlinkSync(join(legacy, f))\n continue\n }\n const src = join(legacy, f)\n const dst = join(target, f)\n if (!existsSync(dst)) {\n renameSync(src, dst)\n moved++\n } else {\n unlinkSync(src)\n }\n }\n\n try { rmdirSync(legacy) } catch { /* not empty, leave it */ }\n console.log(`Migrated ${moved} file(s) from .bugs/ to .scout/errors/`)\n}\n\n// --- Sync ---\n\nfunction syncErrorsDir(errors) {\n const target = join(process.cwd(), ERRORS_DIR)\n mkdirSync(target, { recursive: true })\n\n const expected = new Set()\n let created = 0, updated = 0, unchanged = 0\n\n for (const error of errors) {\n const filename = error.hash.slice(0, 8) + '.md'\n expected.add(filename)\n const filePath = join(target, filename)\n const content = renderErrorMarkdown(error)\n\n if (existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf8')\n if (existing !== content) { writeFileSync(filePath, content); updated++ }\n else unchanged++\n } else {\n writeFileSync(filePath, content)\n created++\n }\n }\n\n let removed = 0\n for (const file of readdirSync(target)) {\n if (HASH_FILE_PATTERN.test(file) && !expected.has(file)) {\n unlinkSync(join(target, file))\n removed++\n }\n }\n\n console.log(`Errors: ${errors.length} synced (${created} new, ${updated} updated, ${unchanged} unchanged, ${removed} removed)`)\n}\n\nfunction syncIssuesDir(issues) {\n const issuesPath = join(process.cwd(), ISSUES_DIR)\n const archivePath = join(process.cwd(), ARCHIVE_DIR)\n mkdirSync(issuesPath, { recursive: true })\n mkdirSync(archivePath, { recursive: true })\n\n const expectedOpen = new Set()\n const expectedClosed = new Set()\n let created = 0, updated = 0, unchanged = 0\n\n for (const issue of issues) {\n const filename = `${issue.id}.md`\n const content = renderIssueMarkdown(issue)\n const targetDir = issue.status === 'closed' ? archivePath : issuesPath\n const otherDir = issue.status === 'closed' ? issuesPath : archivePath\n\n if (issue.status === 'closed') expectedClosed.add(filename)\n else expectedOpen.add(filename)\n\n // Remove from the other dir if transitioning\n const otherPath = join(otherDir, filename)\n if (existsSync(otherPath)) unlinkSync(otherPath)\n\n const filePath = join(targetDir, filename)\n if (existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf8')\n if (existing !== content) { writeFileSync(filePath, content); updated++ }\n else unchanged++\n } else {\n writeFileSync(filePath, content)\n created++\n }\n }\n\n let removed = 0\n for (const file of readdirSync(issuesPath)) {\n if (ISSUE_FILE_PATTERN.test(file) && !expectedOpen.has(file)) {\n unlinkSync(join(issuesPath, file))\n removed++\n }\n }\n for (const file of readdirSync(archivePath)) {\n if (ISSUE_FILE_PATTERN.test(file) && !expectedClosed.has(file)) {\n unlinkSync(join(archivePath, file))\n removed++\n }\n }\n\n const openCount = issues.filter(i => i.status === 'open').length\n const closedCount = issues.length - openCount\n console.log(`Issues: ${issues.length} synced (${openCount} open, ${closedCount} closed; ${created} new, ${updated} updated, ${unchanged} unchanged, ${removed} removed)`)\n}\n\nfunction writeAgentsMd() {\n const content = `# Scout Tracking Directory\n\nSynced from Scout.js by \\`scout sync\\`.\n\n## errors/\nAuto-captured production errors. Filename: \\`{8-char-hash}.md\\`.\nFocus on high recent counts. Files are overwritten on sync.\n\n## issues/\nOpen human-filed tickets (bug, feature, task). Filename: \\`{id}.md\\`.\nAfter landing a fix: \\`scout close <id>\\`.\n\n## archive/\nClosed issues \u2014 reference only.\n\n## Rules\n1. **Do NOT edit** files in errors/, issues/, or archive/ \u2014 they get overwritten on sync\n2. Keep investigation notes in separate files (e.g., \\`issues/42.notes.md\\`) \u2014 those are yours\n3. Managed files match \\`{8-char-hash}.md\\` or \\`{digit}.md\\` in their respective dirs\n4. Everything else in this directory is yours\n\n## Commands\n- \\`scout sync\\` \u2014 refresh errors and issues\n- \\`scout close <id>\\` / \\`scout reopen <id>\\` \u2014 change issue state\n`\n\n mkdirSync(join(process.cwd(), SCOUT_DIR), { recursive: true })\n const filePath = join(process.cwd(), SCOUT_DIR, 'AGENTS.md')\n // Only create if missing \u2014 never overwrite user edits\n if (!existsSync(filePath)) {\n writeFileSync(filePath, content)\n }\n\n // Clean up old CLAUDE.md if present (from pre-0.3.1 versions)\n const oldPath = join(process.cwd(), SCOUT_DIR, 'CLAUDE.md')\n if (existsSync(oldPath)) {\n try { unlinkSync(oldPath) } catch {}\n }\n}\n\n// --- Commands ---\n\nasync function cmdInit() {\n const rl = createPrompt()\n\n try {\n console.log('Scout setup\\n')\n\n const global = readJson(GLOBAL_CONFIG) || {}\n const local = readJson(join(process.cwd(), LOCAL_CONFIG)) || {}\n\n let { endpoint, username, password } = global\n\n if (endpoint && username && password) {\n console.log(`Using saved credentials from ${GLOBAL_CONFIG}`)\n console.log(` endpoint: ${endpoint}`)\n console.log(` username: ${username}`)\n const reuse = await askYesNo(rl, 'Use these credentials?', true)\n if (!reuse) {\n endpoint = null; username = null; password = null\n }\n }\n\n if (!endpoint || !username || !password) {\n endpoint = await askWithDefault(rl, 'Scout endpoint URL', endpoint || local.endpoint || 'https://admin.scoutjs.com')\n username = await askWithDefault(rl, 'Username', username || local.username || 'scout')\n password = await askWithDefault(rl, 'Password', password || local.password || '')\n\n if (!endpoint || !username || !password) {\n console.error('\\nendpoint, username, and password are required.')\n process.exit(1)\n }\n\n writeFileSync(GLOBAL_CONFIG, JSON.stringify({ endpoint, username, password }, null, 2))\n console.log(`Saved credentials to ${GLOBAL_CONFIG}`)\n }\n\n const config = { endpoint, username, password }\n\n console.log('\\nFetching projects...')\n const projects = await fetchProjects(config)\n projects.sort((a, b) => (a.project || '').localeCompare(b.project || ''))\n\n console.log('\\nSelect a project:')\n console.log(' 1) New Project (enter name)')\n projects.forEach((p, i) => {\n const tag = p.hidden ? ' (hidden)' : ''\n console.log(` ${i + 2}) ${p.project}${tag}`)\n })\n\n const defaultIdx = local.project\n ? (projects.findIndex(p => p.project === local.project) + 2) || ''\n : ''\n const choice = await askWithDefault(rl, '\\nChoice', defaultIdx ? String(defaultIdx) : '')\n const idx = parseInt(choice, 10)\n\n let selectedProject\n if (idx === 1) {\n selectedProject = await ask(rl, 'Project name: ')\n if (!selectedProject) {\n console.error('Project name required.')\n process.exit(1)\n }\n } else if (idx >= 2 && idx - 2 < projects.length) {\n selectedProject = projects[idx - 2].project\n } else {\n console.error('Invalid choice.')\n process.exit(1)\n }\n\n const localPath = join(process.cwd(), LOCAL_CONFIG)\n writeFileSync(localPath, JSON.stringify({ project: selectedProject }, null, 2))\n console.log(`\\nSaved project to ${localPath}`)\n\n // Scaffold .scout/ with AGENTS.md so agents have context even before first sync\n writeAgentsMd()\n console.log(`Created .scout/AGENTS.md`)\n\n console.log(`\\nRun \\`scout sync\\` to pull errors and issues into .scout/`)\n } finally {\n rl.close()\n }\n}\n\nasync function cmdSync() {\n const config = loadConfig()\n\n migrateLegacyBugs()\n const scoutPath = join(process.cwd(), SCOUT_DIR)\n const firstRun = !existsSync(scoutPath)\n mkdirSync(scoutPath, { recursive: true })\n if (firstRun) {\n console.log('Tip: Add .scout/ to your .gitignore')\n }\n\n console.log(`Fetching errors for project \"${config.project}\"...`)\n const errors = await fetchErrors(config)\n syncErrorsDir(errors)\n\n console.log(`Fetching issues for project \"${config.project}\"...`)\n try {\n const issues = await fetchIssues(config)\n syncIssuesDir(issues)\n } catch (e) {\n if (e.code === 'NOT_JSON') {\n console.error(`Issues: skipped \u2014 ${e.message}`)\n } else {\n console.error(`Issues: skipped \u2014 ${e.message}`)\n }\n }\n\n // AGENTS.md is only created on init (so user edits persist across syncs)\n // But back-fill it if it's missing entirely\n const agentsPath = join(process.cwd(), SCOUT_DIR, 'AGENTS.md')\n if (!existsSync(agentsPath)) writeAgentsMd()\n}\n\nasync function cmdClose(id) {\n if (!id) {\n console.error('Usage: scout close <id>')\n process.exit(1)\n }\n const config = loadConfig({ requireProject: false })\n await patchIssue(config, id, { status: 'closed' })\n console.log(`Closed issue #${id}`)\n}\n\nasync function cmdReopen(id) {\n if (!id) {\n console.error('Usage: scout reopen <id>')\n process.exit(1)\n }\n const config = loadConfig({ requireProject: false })\n await patchIssue(config, id, { status: 'open' })\n console.log(`Reopened issue #${id}`)\n}\n\n// --- Main ---\n\nfunction printUsage() {\n console.log(`scout-error \u2014 Sync errors and issues to local .scout/\n\nUsage:\n scout init Configure credentials and select a project\n scout sync Fetch errors and issues into .scout/\n scout close <id> Mark an issue as closed\n scout reopen <id> Reopen a closed issue\n scout help Show this help\n\nConfig files:\n ~/.scout.json Global credentials (endpoint, username, password)\n ./.scout.json Per-project (project name)\n\nEnvironment variables override both:\n SCOUT_ENDPOINT, SCOUT_USERNAME, SCOUT_PASSWORD, SCOUT_PROJECT\n`)\n}\n\nasync function main() {\n const command = process.argv[2]\n\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n printUsage()\n process.exit(0)\n }\n\n if (command === 'init') {\n await cmdInit()\n } else if (command === 'sync') {\n await cmdSync()\n } else if (command === 'close') {\n await cmdClose(process.argv[3])\n } else if (command === 'reopen') {\n await cmdReopen(process.argv[3])\n } else {\n console.error(`Unknown command: ${command}\\n`)\n printUsage()\n process.exit(1)\n }\n}\n\nmain().catch(e => {\n console.error(e.message)\n process.exit(1)\n})\n"],
5
+ "mappings": "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",
6
+ "names": ["readFileSync", "writeFileSync", "mkdirSync", "readdirSync", "unlinkSync", "existsSync", "renameSync", "rmdirSync", "join", "homedir", "createInterface", "SCOUT_DIR", "ERRORS_DIR", "ISSUES_DIR", "ARCHIVE_DIR", "LEGACY_BUGS_DIR", "HASH_FILE_PATTERN", "ISSUE_FILE_PATTERN", "LOCAL_CONFIG", "GLOBAL_CONFIG", "readJson", "path", "e", "loadConfig", "requireProject", "global", "local", "config", "missing", "createPrompt", "ask", "rl", "question", "resolve", "answer", "askWithDefault", "defaultValue", "suffix", "askYesNo", "defaultYes", "authHeaders", "fetchJson", "url", "response", "contentType", "err", "patchIssue", "id", "patch", "res", "fetchErrors", "fetchIssues", "fetchProjects", "renderErrorMarkdown", "error", "event", "cf", "lines", "title", "lastSeen", "ts", "key", "value", "formatted", "trace", "userName", "isoOrNull", "renderIssueMarkdown", "issue", "created", "updated", "closed", "migrateLegacyBugs", "legacy", "target", "moved", "f", "src", "dst", "syncErrorsDir", "errors", "expected", "unchanged", "filename", "filePath", "content", "removed", "file", "syncIssuesDir", "issues", "issuesPath", "archivePath", "expectedOpen", "expectedClosed", "targetDir", "otherDir", "otherPath", "openCount", "i", "closedCount", "writeAgentsMd", "oldPath", "cmdInit", "endpoint", "username", "password", "projects", "a", "b", "p", "tag", "defaultIdx", "choice", "idx", "selectedProject", "localPath", "cmdSync", "scoutPath", "firstRun", "agentsPath", "cmdClose", "cmdReopen", "printUsage", "main", "command"]
7
7
  }
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- var h=Object.defineProperty,V=Object.defineProperties,q=Object.getOwnPropertyDescriptor,z=Object.getOwnPropertyDescriptors,J=Object.getOwnPropertyNames,T=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var x=(e,r,t)=>r in e?h(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,l=(e,r)=>{for(var t in r||(r={}))U.call(r,t)&&x(e,t,r[t]);if(T)for(var t of T(r))G.call(r,t)&&x(e,t,r[t]);return e},P=(e,r)=>V(e,z(r));var K=(e,r)=>{for(var t in r)h(e,t,{get:r[t],enumerable:!0})},Z=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of J(r))!U.call(e,a)&&a!==t&&h(e,a,{get:()=>r[a],enumerable:!(s=q(r,a))||s.enumerable});return e};var Q=e=>Z(h({},"__esModule",{value:!0}),e);var S=(e,r,t)=>new Promise((s,a)=>{var n=c=>{try{u(t.next(c))}catch(f){a(f)}},o=c=>{try{u(t.throw(c))}catch(f){a(f)}},u=c=>c.done?s(c.value):Promise.resolve(c.value).then(n,o);u((t=t.apply(e,r)).next())});var ce={};K(ce,{addBreadcrumb:()=>ae,captureError:()=>H,init:()=>X,setContext:()=>B,setTag:()=>W,setUser:()=>F});module.exports=Q(ce);var Y={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=l({},Y),$,p={environment:typeof window!="undefined"&&(($=window.location)==null?void 0:$.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},M={clicks:0,scrolls:0},R=null,D=!1,k=null,w={},_=[],ee=30;var v=console.warn;var A=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function ne(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),r=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return R=R||C("pageload"),{pageloadId:R,userId:e,sessionId:r}}function re(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.browser)!=null&&s.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function te(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.os)!=null&&s.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function oe(){var r,t,s,a,n,o,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:re(),browserVersion:((t=(r=window._uaParserResult)==null?void 0:r.browser)==null?void 0:t.version)||null,os:te(),osVersion:((a=(s=window._uaParserResult)==null?void 0:s.os)==null?void 0:a.version)||null,deviceType:((o=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:o.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!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(r=>typeof r=="string"?e.includes(r):r instanceof RegExp?r.test(e):!1)}function N(e,r){let t=new AbortController,s=setTimeout(()=>t.abort(),5e3),a={"Content-Type":"application/json"};return i.token&&(a["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:a,body:JSON.stringify(r),signal:t.signal}).then(n=>(clearTimeout(s),n)).catch(()=>{clearTimeout(s)})}function E(e){let r=(e[0]||"")+"",t=[...e];return r.replace(/%[sdj]/g,s=>{let a=t.shift();return s==="%s"?String(a):s==="%d"?Number(a):s==="%j"?JSON.stringify(a):s})}function O(e,r){let t=document.createElement("script");t.src=e,t.async=!0,r&&(t.onload=r),document.head.appendChild(t)}function se(e,r,t){return S(this,null,function*(){var s;try{let a=yield fetch(e);if(!a.ok)return null;let n=yield a.text(),o=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(o)c=JSON.parse(atob(o[1]));else if(u){let j=new URL(u[1],e).href,I=yield fetch(j);if(!I.ok)return null;c=yield I.json()}else return null;if(!((s=window.sourceMap)!=null&&s.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:r,column:t});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(a){return null}})}function g(e){_.push(l({timestamp:Date.now()},e)),_.length>ee&&_.shift()}function m(e){return S(this,null,function*(){let r=i.browserDetails?oe():{},t=Object.assign(e,r,p,ne());if(k&&(t.user=k),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=_.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&A("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let s=e.errorTrace.split(`
1
+ var h=Object.defineProperty,V=Object.defineProperties,q=Object.getOwnPropertyDescriptor,z=Object.getOwnPropertyDescriptors,J=Object.getOwnPropertyNames,T=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var x=(e,r,t)=>r in e?h(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,l=(e,r)=>{for(var t in r||(r={}))U.call(r,t)&&x(e,t,r[t]);if(T)for(var t of T(r))G.call(r,t)&&x(e,t,r[t]);return e},P=(e,r)=>V(e,z(r));var K=(e,r)=>{for(var t in r)h(e,t,{get:r[t],enumerable:!0})},Z=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of J(r))!U.call(e,a)&&a!==t&&h(e,a,{get:()=>r[a],enumerable:!(s=q(r,a))||s.enumerable});return e};var Q=e=>Z(h({},"__esModule",{value:!0}),e);var S=(e,r,t)=>new Promise((s,a)=>{var n=c=>{try{u(t.next(c))}catch(f){a(f)}},o=c=>{try{u(t.throw(c))}catch(f){a(f)}},u=c=>c.done?s(c.value):Promise.resolve(c.value).then(n,o);u((t=t.apply(e,r)).next())});var ce={};K(ce,{addBreadcrumb:()=>ae,captureError:()=>H,init:()=>X,setContext:()=>B,setTag:()=>W,setUser:()=>F});module.exports=Q(ce);var Y={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=l({},Y),$,p={environment:typeof window!="undefined"&&(($=window.location)==null?void 0:$.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},M={clicks:0,scrolls:0},R=null,D=!1,k=null,w={},_=[],ee=30;var v=console.warn;var A=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function ne(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),r=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return R=R||C("pageload"),{pageloadId:R,userId:e,sessionId:r}}function re(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.browser)!=null&&s.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function te(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.os)!=null&&s.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function oe(){var r,t,s,a,n,o,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:re(),browserVersion:((t=(r=window._uaParserResult)==null?void 0:r.browser)==null?void 0:t.version)||null,os:te(),osVersion:((a=(s=window._uaParserResult)==null?void 0:s.os)==null?void 0:a.version)||null,deviceType:((o=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:o.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!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(r=>typeof r=="string"?e.includes(r):r instanceof RegExp?r.test(e):!1)}function N(e,r){let t=new AbortController,s=setTimeout(()=>t.abort(),5e3),a={"Content-Type":"application/json"};return i.token&&(a["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:a,body:JSON.stringify(r),signal:t.signal}).then(n=>(clearTimeout(s),n)).catch(()=>{clearTimeout(s)})}function E(e){let r=(e[0]||"")+"",t=[...e];return r.replace(/%[sdj]/g,s=>{let a=t.shift();return s==="%s"?String(a):s==="%d"?Number(a):s==="%j"?JSON.stringify(a):s})}function O(e,r){let t=document.createElement("script");t.src=e,t.async=!0,r&&(t.onload=r),document.head.appendChild(t)}function se(e,r,t){return S(this,null,function*(){var s;try{let a=yield fetch(e);if(!a.ok)return null;let n=yield a.text(),o=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(o)c=JSON.parse(atob(o[1]));else if(u){let j=new URL(u[1],e).href,I=yield fetch(j);if(!I.ok)return null;c=yield I.json()}else return null;if(!((s=window.sourceMap)!=null&&s.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:r,column:t});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(a){return null}})}function g(e){_.push(l({timestamp:Date.now()},e)),_.length>ee&&_.shift()}function m(e){return S(this,null,function*(){let r=i.browserDetails?oe():{},t=Object.assign(e,r,p,ne());if(k&&(t.user=k),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=_.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&A("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let s=e.errorTrace.split(`
2
2
  `),a=[s[0]];for(let n=1;n<s.length;n++)!s[n].includes("/scout")&&!s[n].includes("scout.js")&&!s[n].includes("scout-error")&&a.push(s[n]);a.length>1&&(e.errorTrace=a.join(`
3
3
  `))}catch(s){}if((e.errorTrace||e.stack)&&!e.source)try{let s=e.errorTrace||e.stack,a=s?s.split(`
4
4
  `):[];for(let n=1;n<a.length;n++){let o=a[n].trim().match(/(http.*?):(\d+):(\d+)/);if(o){e.source=o[1],e.lineno=parseInt(o[2],10),e.colno=parseInt(o[3],10);break}}}catch(s){}if(i.debug&&A("[Scout] Sending:",t),i.endpoint&&N(i.endpoint,t),i.handleSourceMaps&&e.source&&e.lineno)try{let s=yield se(e.source,e.lineno,e.colno||0);if(s){let a=P(l({},t),{originalSource:s.originalSource,originalLine:s.originalLine,originalColumn:s.originalColumn,originalName:s.originalName,highlightLineNumber:s.originalLine});s.snippet&&(a.snippet=s.snippet),i.endpoint&&N(i.endpoint,a)}}catch(s){}})}function H(e){i.enabled&&m(e)}function F(e){k=e}function B(e){w=l(l({},w),e)}function W(e,r){w[e]=r}function ae(e){g(e)}function ie(){if(i.trackUserInteractions){document.addEventListener("click",o=>{M.clicks++;let u=o.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);g({category:"click",message:c+(f?": "+f:"")})});let n=0;window.addEventListener("scroll",()=>{let o=Date.now();o-n>100&&(M.scrolls++,n=o)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),g({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{g({category:"navigation",message:window.location.href})});let r=window.fetch;window.fetch=function(n,o){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(o==null?void 0:o.method)||"GET",f=Date.now();return r.apply(this,arguments).then(d=>(g({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw g({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let t=XMLHttpRequest.prototype.open,s=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,o){return this._scoutMethod=n,this._scoutUrl=o,t.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,o=Date.now();return n.addEventListener("loadend",()=>{g({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-o}})}),s.apply(this,arguments)},i.addErrorEventListener&&window.addEventListener("error",n=>S(this,null,function*(){if(i.enabled){try{let o=n.error?n.error.stack:"No stack trace available";if(y(n.message))return;i.sendErrors&&m({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:o})}catch(o){v("[Scout] Error handler failure:",o)}i.selfHealingErrors&&n.preventDefault()}})),i.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(i.enabled){try{let o=n.reason,u=(o==null?void 0:o.stack)||"No stack trace available";if(y((o==null?void 0:o.message)||""))return;i.sendErrors&&m({type:"Unhandled Promise Rejection",message:(o==null?void 0:o.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(o){v("[Scout] Rejection handler failure:",o)}i.selfHealingErrors&&n.preventDefault()}}),i.overrideConsoleError&&(console.error=function(...n){if(i.enabled)try{let o=new Error().stack;if(y(E(n)))return;i.sendErrors&&m({type:"console.error",errorTrace:o,args:E(n)})}catch(o){v("[Scout] console.error override failure:",o)}}),i.overrideConsoleWarn&&(console.warn=function(...n){if(i.enabled)try{let o=new Error().stack;if(y(E(n)))return;i.sendErrors&&m({type:"console.warn",errorTrace:o,args:E(n)})}catch(o){v("[Scout] console.warn override failure:",o)}});let a=i.endpoint?new URL(i.endpoint).origin:"";i.loadUAParser&&i.browserDetails&&a&&O(`${a}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),i.handleSourceMaps&&a&&O(`${a}/vendor/source-map.min.js`)}function X(e={},r={}){if(e.user&&(k=e.user,delete e.user),D){p=l(l({},p),e),i=l(l({},i),r);return}p=l(l({},p),e),i=l(l({},i),r),D=!0,typeof window!="undefined"&&ie()}typeof window!="undefined"&&(window.Scout={init:X,setScope:e=>{p=l(l({},p),e)},setConfig:e=>{i=l(l({},i),e)},setUser:F,setContext:B,setTag:W,addBreadcrumb:g,error:H});
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
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,s,t)=>s in e?$(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t,l=(e,s)=>{for(var t in s||(s={}))B.call(s,t)&&T(e,t,s[t]);if(I)for(var t of I(s))W.call(s,t)&&T(e,t,s[t]);return e},x=(e,s)=>H(e,F(s));var h=(e,s,t)=>new Promise((o,i)=>{var n=c=>{try{u(t.next(c))}catch(f){i(f)}},r=c=>{try{u(t.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(n,r);u((t=t.apply(e,s)).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},a=l({},X),N,p={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},_={clicks:0,scrolls:0},k=null,U=!1,M=null,w={},E=[],j=30;var S=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")),s=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return k=k||R("pageload"),{pageloadId:k,userId:e,sessionId:s}}function q(){var t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 s,t,o,i,n,r,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:((t=(s=window._uaParserResult)==null?void 0:s.browser)==null?void 0:t.version)||null,os:z(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((r=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:r.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:_.clicks,userScrolls:_.scrolls}}function v(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(s=>typeof s=="string"?e.includes(s):s instanceof RegExp?s.test(e):!1)}function D(e,s){let t=new AbortController,o=setTimeout(()=>t.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(s),signal:t.signal}).then(n=>(clearTimeout(o),n)).catch(()=>{clearTimeout(o)})}function y(e){let s=(e[0]||"")+"",t=[...e];return s.replace(/%[sdj]/g,o=>{let i=t.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function A(e,s){let t=document.createElement("script");t.src=e,t.async=!0,s&&(t.onload=s),document.head.appendChild(t)}function G(e,s,t){return h(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let n=yield i.text(),r=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(r)c=JSON.parse(atob(r[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:s,column:t});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 g(e){E.push(l({timestamp:Date.now()},e)),E.length>j&&E.shift()}function m(e){return h(this,null,function*(){let s=a.browserDetails?J():{},t=Object.assign(e,s,p,V());if(M&&(t.user=M),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=E.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&P("[Scout] Suppressed by sampling");return}if(a.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let o=e.errorTrace.split(`
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,s,t)=>s in e?$(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t,l=(e,s)=>{for(var t in s||(s={}))B.call(s,t)&&T(e,t,s[t]);if(I)for(var t of I(s))W.call(s,t)&&T(e,t,s[t]);return e},x=(e,s)=>H(e,F(s));var h=(e,s,t)=>new Promise((o,i)=>{var n=c=>{try{u(t.next(c))}catch(f){i(f)}},r=c=>{try{u(t.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(n,r);u((t=t.apply(e,s)).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},a=l({},X),N,p={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},_={clicks:0,scrolls:0},k=null,U=!1,M=null,w={},E=[],j=30;var S=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")),s=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return k=k||R("pageload"),{pageloadId:k,userId:e,sessionId:s}}function q(){var t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 s,t,o,i,n,r,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:((t=(s=window._uaParserResult)==null?void 0:s.browser)==null?void 0:t.version)||null,os:z(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((r=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:r.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:_.clicks,userScrolls:_.scrolls}}function v(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(s=>typeof s=="string"?e.includes(s):s instanceof RegExp?s.test(e):!1)}function D(e,s){let t=new AbortController,o=setTimeout(()=>t.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(s),signal:t.signal}).then(n=>(clearTimeout(o),n)).catch(()=>{clearTimeout(o)})}function y(e){let s=(e[0]||"")+"",t=[...e];return s.replace(/%[sdj]/g,o=>{let i=t.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function A(e,s){let t=document.createElement("script");t.src=e,t.async=!0,s&&(t.onload=s),document.head.appendChild(t)}function G(e,s,t){return h(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let n=yield i.text(),r=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(r)c=JSON.parse(atob(r[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:s,column:t});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 g(e){E.push(l({timestamp:Date.now()},e)),E.length>j&&E.shift()}function m(e){return h(this,null,function*(){let s=a.browserDetails?J():{},t=Object.assign(e,s,p,V());if(M&&(t.user=M),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=E.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&P("[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 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
4
  `):[];for(let n=1;n<i.length;n++){let r=i[n].trim().match(/(http.*?):(\d+):(\d+)/);if(r){e.source=r[1],e.lineno=parseInt(r[2],10),e.colno=parseInt(r[3],10);break}}}catch(o){}if(a.debug&&P("[Scout] Sending:",t),a.endpoint&&D(a.endpoint,t),a.handleSourceMaps&&e.source&&e.lineno)try{let o=yield G(e.source,e.lineno,e.colno||0);if(o){let i=x(l({},t),{originalSource:o.originalSource,originalLine:o.originalLine,originalColumn:o.originalColumn,originalName:o.originalName,highlightLineNumber:o.originalLine});o.snippet&&(i.snippet=o.snippet),a.endpoint&&D(a.endpoint,i)}}catch(o){}})}function K(e){a.enabled&&m(e)}function Z(e){M=e}function Q(e){w=l(l({},w),e)}function Y(e,s){w[e]=s}function te(e){g(e)}function ee(){if(a.trackUserInteractions){document.addEventListener("click",r=>{_.clicks++;let u=r.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);g({category:"click",message:c+(f?": "+f:"")})});let n=0;window.addEventListener("scroll",()=>{let r=Date.now();r-n>100&&(_.scrolls++,n=r)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),g({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{g({category:"navigation",message:window.location.href})});let s=window.fetch;window.fetch=function(n,r){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(r==null?void 0:r.method)||"GET",f=Date.now();return s.apply(this,arguments).then(d=>(g({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw g({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let t=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,r){return this._scoutMethod=n,this._scoutUrl=r,t.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,r=Date.now();return n.addEventListener("loadend",()=>{g({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-r}})}),o.apply(this,arguments)},a.addErrorEventListener&&window.addEventListener("error",n=>h(this,null,function*(){if(a.enabled){try{let r=n.error?n.error.stack:"No stack trace available";if(v(n.message))return;a.sendErrors&&m({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:r})}catch(r){S("[Scout] Error handler failure:",r)}a.selfHealingErrors&&n.preventDefault()}})),a.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(a.enabled){try{let r=n.reason,u=(r==null?void 0:r.stack)||"No stack trace available";if(v((r==null?void 0:r.message)||""))return;a.sendErrors&&m({type:"Unhandled Promise Rejection",message:(r==null?void 0:r.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(r){S("[Scout] Rejection handler failure:",r)}a.selfHealingErrors&&n.preventDefault()}}),a.overrideConsoleError&&(console.error=function(...n){if(a.enabled)try{let r=new Error().stack;if(v(y(n)))return;a.sendErrors&&m({type:"console.error",errorTrace:r,args:y(n)})}catch(r){S("[Scout] console.error override failure:",r)}}),a.overrideConsoleWarn&&(console.warn=function(...n){if(a.enabled)try{let r=new Error().stack;if(v(y(n)))return;a.sendErrors&&m({type:"console.warn",errorTrace:r,args:y(n)})}catch(r){S("[Scout] console.warn override failure:",r)}});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 ne(e={},s={}){if(e.user&&(M=e.user,delete e.user),U){p=l(l({},p),e),a=l(l({},a),s);return}p=l(l({},p),e),a=l(l({},a),s),U=!0,typeof window!="undefined"&&ee()}typeof window!="undefined"&&(window.Scout={init:ne,setScope:e=>{p=l(l({},p),e)},setConfig:e=>{a=l(l({},a),e)},setUser:Z,setContext:Q,setTag:Y,addBreadcrumb:g,error:K});export{te as addBreadcrumb,K as captureError,ne as init,Q as setContext,Y as setTag,Z as setUser};
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.3.0",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.3.2",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.3.0",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.3.2",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,4 +1,4 @@
1
- var j=Object.create;var m=Object.defineProperty,V=Object.defineProperties,q=Object.getOwnPropertyDescriptor,z=Object.getOwnPropertyDescriptors,J=Object.getOwnPropertyNames,U=Object.getOwnPropertySymbols,G=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var D=(e,r,t)=>r in e?m(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,l=(e,r)=>{for(var t in r||(r={}))P.call(r,t)&&D(e,t,r[t]);if(U)for(var t of U(r))K.call(r,t)&&D(e,t,r[t]);return e},A=(e,r)=>V(e,z(r));var Z=(e,r)=>{for(var t in r)m(e,t,{get:r[t],enumerable:!0})},N=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of J(r))!P.call(e,a)&&a!==t&&m(e,a,{get:()=>r[a],enumerable:!(s=q(r,a))||s.enumerable});return e};var Q=(e,r,t)=>(t=e!=null?j(G(e)):{},N(r||!e||!e.__esModule?m(t,"default",{value:e,enumerable:!0}):t,e)),Y=e=>N(m({},"__esModule",{value:!0}),e);var S=(e,r,t)=>new Promise((s,a)=>{var n=c=>{try{u(t.next(c))}catch(f){a(f)}},o=c=>{try{u(t.throw(c))}catch(f){a(f)}},u=c=>c.done?s(c.value):Promise.resolve(c.value).then(n,o);u((t=t.apply(e,r)).next())});var fe={};Z(fe,{ScoutErrorBoundary:()=>L});module.exports=Y(fe);var X=Q(require("react"),1);var ee={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=l({},ee),W,g={environment:typeof window!="undefined"&&((W=window.location)==null?void 0:W.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},_={clicks:0,scrolls:0},C=null,O=!1,M=null,w={},k=[],re=30;var v=console.warn;var $=console.log;function R(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function ne(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",R("user")),localStorage.getItem("__scoutUserId")),r=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return C=C||R("pageload"),{pageloadId:C,userId:e,sessionId:r}}function te(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.browser)!=null&&s.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function oe(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.os)!=null&&s.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function se(){var r,t,s,a,n,o,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:te(),browserVersion:((t=(r=window._uaParserResult)==null?void 0:r.browser)==null?void 0:t.version)||null,os:oe(),osVersion:((a=(s=window._uaParserResult)==null?void 0:s.os)==null?void 0:a.version)||null,deviceType:((o=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:o.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:_.clicks,userScrolls:_.scrolls}}function y(e){return!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(r=>typeof r=="string"?e.includes(r):r instanceof RegExp?r.test(e):!1)}function F(e,r){let t=new AbortController,s=setTimeout(()=>t.abort(),5e3),a={"Content-Type":"application/json"};return i.token&&(a["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:a,body:JSON.stringify(r),signal:t.signal}).then(n=>(clearTimeout(s),n)).catch(()=>{clearTimeout(s)})}function E(e){let r=(e[0]||"")+"",t=[...e];return r.replace(/%[sdj]/g,s=>{let a=t.shift();return s==="%s"?String(a):s==="%d"?Number(a):s==="%j"?JSON.stringify(a):s})}function H(e,r){let t=document.createElement("script");t.src=e,t.async=!0,r&&(t.onload=r),document.head.appendChild(t)}function ae(e,r,t){return S(this,null,function*(){var s;try{let a=yield fetch(e);if(!a.ok)return null;let n=yield a.text(),o=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(o)c=JSON.parse(atob(o[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(!((s=window.sourceMap)!=null&&s.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:r,column:t});if(!d.source)return null;let T=c.sources.indexOf(d.source),x=null;return c.sourcesContent&&c.sourcesContent[T]&&(x=c.sourcesContent[T]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:x}}catch(a){return null}})}function p(e){k.push(l({timestamp:Date.now()},e)),k.length>re&&k.shift()}function h(e){return S(this,null,function*(){let r=i.browserDetails?se():{},t=Object.assign(e,r,g,ne());if(M&&(t.user=M),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=k.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&$("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let s=e.errorTrace.split(`
1
+ var j=Object.create;var m=Object.defineProperty,V=Object.defineProperties,q=Object.getOwnPropertyDescriptor,z=Object.getOwnPropertyDescriptors,J=Object.getOwnPropertyNames,U=Object.getOwnPropertySymbols,G=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var D=(e,r,t)=>r in e?m(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,l=(e,r)=>{for(var t in r||(r={}))P.call(r,t)&&D(e,t,r[t]);if(U)for(var t of U(r))K.call(r,t)&&D(e,t,r[t]);return e},A=(e,r)=>V(e,z(r));var Z=(e,r)=>{for(var t in r)m(e,t,{get:r[t],enumerable:!0})},N=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of J(r))!P.call(e,a)&&a!==t&&m(e,a,{get:()=>r[a],enumerable:!(s=q(r,a))||s.enumerable});return e};var Q=(e,r,t)=>(t=e!=null?j(G(e)):{},N(r||!e||!e.__esModule?m(t,"default",{value:e,enumerable:!0}):t,e)),Y=e=>N(m({},"__esModule",{value:!0}),e);var S=(e,r,t)=>new Promise((s,a)=>{var n=c=>{try{u(t.next(c))}catch(f){a(f)}},o=c=>{try{u(t.throw(c))}catch(f){a(f)}},u=c=>c.done?s(c.value):Promise.resolve(c.value).then(n,o);u((t=t.apply(e,r)).next())});var fe={};Z(fe,{ScoutErrorBoundary:()=>L});module.exports=Y(fe);var X=Q(require("react"),1);var ee={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=l({},ee),W,g={environment:typeof window!="undefined"&&((W=window.location)==null?void 0:W.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},_={clicks:0,scrolls:0},C=null,O=!1,M=null,w={},k=[],re=30;var v=console.warn;var $=console.log;function R(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function ne(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",R("user")),localStorage.getItem("__scoutUserId")),r=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return C=C||R("pageload"),{pageloadId:C,userId:e,sessionId:r}}function te(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.browser)!=null&&s.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function oe(){var t,s,a;if((s=(t=window._uaParserResult)==null?void 0:t.os)!=null&&s.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function se(){var r,t,s,a,n,o,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:te(),browserVersion:((t=(r=window._uaParserResult)==null?void 0:r.browser)==null?void 0:t.version)||null,os:oe(),osVersion:((a=(s=window._uaParserResult)==null?void 0:s.os)==null?void 0:a.version)||null,deviceType:((o=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:o.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:_.clicks,userScrolls:_.scrolls}}function y(e){return!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(r=>typeof r=="string"?e.includes(r):r instanceof RegExp?r.test(e):!1)}function F(e,r){let t=new AbortController,s=setTimeout(()=>t.abort(),5e3),a={"Content-Type":"application/json"};return i.token&&(a["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:a,body:JSON.stringify(r),signal:t.signal}).then(n=>(clearTimeout(s),n)).catch(()=>{clearTimeout(s)})}function E(e){let r=(e[0]||"")+"",t=[...e];return r.replace(/%[sdj]/g,s=>{let a=t.shift();return s==="%s"?String(a):s==="%d"?Number(a):s==="%j"?JSON.stringify(a):s})}function H(e,r){let t=document.createElement("script");t.src=e,t.async=!0,r&&(t.onload=r),document.head.appendChild(t)}function ae(e,r,t){return S(this,null,function*(){var s;try{let a=yield fetch(e);if(!a.ok)return null;let n=yield a.text(),o=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(o)c=JSON.parse(atob(o[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(!((s=window.sourceMap)!=null&&s.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:r,column:t});if(!d.source)return null;let T=c.sources.indexOf(d.source),x=null;return c.sourcesContent&&c.sourcesContent[T]&&(x=c.sourcesContent[T]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:x}}catch(a){return null}})}function p(e){k.push(l({timestamp:Date.now()},e)),k.length>re&&k.shift()}function h(e){return S(this,null,function*(){let r=i.browserDetails?se():{},t=Object.assign(e,r,g,ne());if(M&&(t.user=M),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=k.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&$("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let s=e.errorTrace.split(`
2
2
  `),a=[s[0]];for(let n=1;n<s.length;n++)!s[n].includes("/scout")&&!s[n].includes("scout.js")&&!s[n].includes("scout-error")&&a.push(s[n]);a.length>1&&(e.errorTrace=a.join(`
3
3
  `))}catch(s){}if((e.errorTrace||e.stack)&&!e.source)try{let s=e.errorTrace||e.stack,a=s?s.split(`
4
4
  `):[];for(let n=1;n<a.length;n++){let o=a[n].trim().match(/(http.*?):(\d+):(\d+)/);if(o){e.source=o[1],e.lineno=parseInt(o[2],10),e.colno=parseInt(o[3],10);break}}}catch(s){}if(i.debug&&$("[Scout] Sending:",t),i.endpoint&&F(i.endpoint,t),i.handleSourceMaps&&e.source&&e.lineno)try{let s=yield ae(e.source,e.lineno,e.colno||0);if(s){let a=A(l({},t),{originalSource:s.originalSource,originalLine:s.originalLine,originalColumn:s.originalColumn,originalName:s.originalName,highlightLineNumber:s.originalLine});s.snippet&&(a.snippet=s.snippet),i.endpoint&&F(i.endpoint,a)}}catch(s){}})}function b(e){i.enabled&&h(e)}function ie(e){M=e}function ce(e){w=l(l({},w),e)}function le(e,r){w[e]=r}function ue(){if(i.trackUserInteractions){document.addEventListener("click",o=>{_.clicks++;let u=o.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 o=Date.now();o-n>100&&(_.scrolls++,n=o)})}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 r=window.fetch;window.fetch=function(n,o){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(o==null?void 0:o.method)||"GET",f=Date.now();return r.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 t=XMLHttpRequest.prototype.open,s=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,o){return this._scoutMethod=n,this._scoutUrl=o,t.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,o=Date.now();return n.addEventListener("loadend",()=>{p({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-o}})}),s.apply(this,arguments)},i.addErrorEventListener&&window.addEventListener("error",n=>S(this,null,function*(){if(i.enabled){try{let o=n.error?n.error.stack:"No stack trace available";if(y(n.message))return;i.sendErrors&&h({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:o})}catch(o){v("[Scout] Error handler failure:",o)}i.selfHealingErrors&&n.preventDefault()}})),i.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(i.enabled){try{let o=n.reason,u=(o==null?void 0:o.stack)||"No stack trace available";if(y((o==null?void 0:o.message)||""))return;i.sendErrors&&h({type:"Unhandled Promise Rejection",message:(o==null?void 0:o.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(o){v("[Scout] Rejection handler failure:",o)}i.selfHealingErrors&&n.preventDefault()}}),i.overrideConsoleError&&(console.error=function(...n){if(i.enabled)try{let o=new Error().stack;if(y(E(n)))return;i.sendErrors&&h({type:"console.error",errorTrace:o,args:E(n)})}catch(o){v("[Scout] console.error override failure:",o)}}),i.overrideConsoleWarn&&(console.warn=function(...n){if(i.enabled)try{let o=new Error().stack;if(y(E(n)))return;i.sendErrors&&h({type:"console.warn",errorTrace:o,args:E(n)})}catch(o){v("[Scout] console.warn override failure:",o)}});let a=i.endpoint?new URL(i.endpoint).origin:"";i.loadUAParser&&i.browserDetails&&a&&H(`${a}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),i.handleSourceMaps&&a&&H(`${a}/vendor/source-map.min.js`)}function de(e={},r={}){if(e.user&&(M=e.user,delete e.user),O){g=l(l({},g),e),i=l(l({},i),r);return}g=l(l({},g),e),i=l(l({},i),r),O=!0,typeof window!="undefined"&&ue()}typeof window!="undefined"&&(window.Scout={init:de,setScope:e=>{g=l(l({},g),e)},setConfig:e=>{i=l(l({},i),e)},setUser:ie,setContext:ce,setTag:le,addBreadcrumb:p,error:b});var L=class extends X.default.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,t){b({message:r.message,stack:r.stack,errorTrace:r.stack,component:(t==null?void 0:t.componentStack)||"",type:"react-error-boundary"})}render(){return this.state.hasError?this.props.fallback||null:this.props.children}};
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- var H=Object.defineProperty,W=Object.defineProperties;var X=Object.getOwnPropertyDescriptors;var x=Object.getOwnPropertySymbols;var B=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var I=(e,n,t)=>n in e?H(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,l=(e,n)=>{for(var t in n||(n={}))B.call(n,t)&&I(e,t,n[t]);if(x)for(var t of x(n))j.call(n,t)&&I(e,t,n[t]);return e},U=(e,n)=>W(e,X(n));var w=(e,n,t)=>new Promise((s,i)=>{var r=c=>{try{u(t.next(c))}catch(f){i(f)}},o=c=>{try{u(t.throw(c))}catch(f){i(f)}},u=c=>c.done?s(c.value):Promise.resolve(c.value).then(r,o);u((t=t.apply(e,n)).next())});import te from"react";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},a=l({},V),O,g={environment:typeof window!="undefined"&&((O=window.location)==null?void 0:O.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},k={clicks:0,scrolls:0},M=null,D=!1,_=null,h={},E=[],q=30;var S=console.warn;var P=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function z(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),n=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return M=M||C("pageload"),{pageloadId:M,userId:e,sessionId:n}}function J(){var t,s,i;if((s=(t=window._uaParserResult)==null?void 0:t.browser)!=null&&s.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 G(){var t,s,i;if((s=(t=window._uaParserResult)==null?void 0:t.os)!=null&&s.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 K(){var n,t,s,i,r,o,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:J(),browserVersion:((t=(n=window._uaParserResult)==null?void 0:n.browser)==null?void 0:t.version)||null,os:G(),osVersion:((i=(s=window._uaParserResult)==null?void 0:s.os)==null?void 0:i.version)||null,deviceType:((o=(r=window._uaParserResult)==null?void 0:r.device)==null?void 0:o.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 v(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(n=>typeof n=="string"?e.includes(n):n instanceof RegExp?n.test(e):!1)}function A(e,n){let t=new AbortController,s=setTimeout(()=>t.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(n),signal:t.signal}).then(r=>(clearTimeout(s),r)).catch(()=>{clearTimeout(s)})}function y(e){let n=(e[0]||"")+"",t=[...e];return n.replace(/%[sdj]/g,s=>{let i=t.shift();return s==="%s"?String(i):s==="%d"?Number(i):s==="%j"?JSON.stringify(i):s})}function N(e,n){let t=document.createElement("script");t.src=e,t.async=!0,n&&(t.onload=n),document.head.appendChild(t)}function Z(e,n,t){return w(this,null,function*(){var s;try{let i=yield fetch(e);if(!i.ok)return null;let r=yield i.text(),o=r.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=r.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(o)c=JSON.parse(atob(o[1]));else if(u){let F=new URL(u[1],e).href,T=yield fetch(F);if(!T.ok)return null;c=yield T.json()}else return null;if(!((s=window.sourceMap)!=null&&s.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:n,column:t});if(!d.source)return null;let b=c.sources.indexOf(d.source),L=null;return c.sourcesContent&&c.sourcesContent[b]&&(L=c.sourcesContent[b]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:L}}catch(i){return null}})}function p(e){E.push(l({timestamp:Date.now()},e)),E.length>q&&E.shift()}function m(e){return w(this,null,function*(){let n=a.browserDetails?K():{},t=Object.assign(e,n,g,z());if(_&&(t.user=_),Object.keys(h).length&&(t.context=l({},h)),t.breadcrumbs=E.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&P("[Scout] Suppressed by sampling");return}if(a.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let s=e.errorTrace.split(`
1
+ var H=Object.defineProperty,W=Object.defineProperties;var X=Object.getOwnPropertyDescriptors;var x=Object.getOwnPropertySymbols;var B=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var I=(e,n,t)=>n in e?H(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,l=(e,n)=>{for(var t in n||(n={}))B.call(n,t)&&I(e,t,n[t]);if(x)for(var t of x(n))j.call(n,t)&&I(e,t,n[t]);return e},U=(e,n)=>W(e,X(n));var w=(e,n,t)=>new Promise((s,i)=>{var r=c=>{try{u(t.next(c))}catch(f){i(f)}},o=c=>{try{u(t.throw(c))}catch(f){i(f)}},u=c=>c.done?s(c.value):Promise.resolve(c.value).then(r,o);u((t=t.apply(e,n)).next())});import te from"react";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},a=l({},V),O,g={environment:typeof window!="undefined"&&((O=window.location)==null?void 0:O.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},k={clicks:0,scrolls:0},M=null,D=!1,_=null,h={},E=[],q=30;var S=console.warn;var P=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function z(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),n=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return M=M||C("pageload"),{pageloadId:M,userId:e,sessionId:n}}function J(){var t,s,i;if((s=(t=window._uaParserResult)==null?void 0:t.browser)!=null&&s.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 G(){var t,s,i;if((s=(t=window._uaParserResult)==null?void 0:t.os)!=null&&s.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 K(){var n,t,s,i,r,o,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:J(),browserVersion:((t=(n=window._uaParserResult)==null?void 0:n.browser)==null?void 0:t.version)||null,os:G(),osVersion:((i=(s=window._uaParserResult)==null?void 0:s.os)==null?void 0:i.version)||null,deviceType:((o=(r=window._uaParserResult)==null?void 0:r.device)==null?void 0:o.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 v(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(n=>typeof n=="string"?e.includes(n):n instanceof RegExp?n.test(e):!1)}function A(e,n){let t=new AbortController,s=setTimeout(()=>t.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(n),signal:t.signal}).then(r=>(clearTimeout(s),r)).catch(()=>{clearTimeout(s)})}function y(e){let n=(e[0]||"")+"",t=[...e];return n.replace(/%[sdj]/g,s=>{let i=t.shift();return s==="%s"?String(i):s==="%d"?Number(i):s==="%j"?JSON.stringify(i):s})}function N(e,n){let t=document.createElement("script");t.src=e,t.async=!0,n&&(t.onload=n),document.head.appendChild(t)}function Z(e,n,t){return w(this,null,function*(){var s;try{let i=yield fetch(e);if(!i.ok)return null;let r=yield i.text(),o=r.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=r.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(o)c=JSON.parse(atob(o[1]));else if(u){let F=new URL(u[1],e).href,T=yield fetch(F);if(!T.ok)return null;c=yield T.json()}else return null;if(!((s=window.sourceMap)!=null&&s.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:n,column:t});if(!d.source)return null;let b=c.sources.indexOf(d.source),L=null;return c.sourcesContent&&c.sourcesContent[b]&&(L=c.sourcesContent[b]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:L}}catch(i){return null}})}function p(e){E.push(l({timestamp:Date.now()},e)),E.length>q&&E.shift()}function m(e){return w(this,null,function*(){let n=a.browserDetails?K():{},t=Object.assign(e,n,g,z());if(_&&(t.user=_),Object.keys(h).length&&(t.context=l({},h)),t.breadcrumbs=E.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&P("[Scout] Suppressed by sampling");return}if(a.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let s=e.errorTrace.split(`
2
2
  `),i=[s[0]];for(let r=1;r<s.length;r++)!s[r].includes("/scout")&&!s[r].includes("scout.js")&&!s[r].includes("scout-error")&&i.push(s[r]);i.length>1&&(e.errorTrace=i.join(`
3
3
  `))}catch(s){}if((e.errorTrace||e.stack)&&!e.source)try{let s=e.errorTrace||e.stack,i=s?s.split(`
4
4
  `):[];for(let r=1;r<i.length;r++){let o=i[r].trim().match(/(http.*?):(\d+):(\d+)/);if(o){e.source=o[1],e.lineno=parseInt(o[2],10),e.colno=parseInt(o[3],10);break}}}catch(s){}if(a.debug&&P("[Scout] Sending:",t),a.endpoint&&A(a.endpoint,t),a.handleSourceMaps&&e.source&&e.lineno)try{let s=yield Z(e.source,e.lineno,e.colno||0);if(s){let i=U(l({},t),{originalSource:s.originalSource,originalLine:s.originalLine,originalColumn:s.originalColumn,originalName:s.originalName,highlightLineNumber:s.originalLine});s.snippet&&(i.snippet=s.snippet),a.endpoint&&A(a.endpoint,i)}}catch(s){}})}function R(e){a.enabled&&m(e)}function Q(e){_=e}function Y(e){h=l(l({},h),e)}function ee(e,n){h[e]=n}function re(){if(a.trackUserInteractions){document.addEventListener("click",o=>{k.clicks++;let u=o.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 o=Date.now();o-r>100&&(k.scrolls++,r=o)})}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 n=window.fetch;window.fetch=function(r,o){let u=typeof r=="string"?r:(r==null?void 0:r.url)||"",c=(o==null?void 0:o.method)||"GET",f=Date.now();return n.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 t=XMLHttpRequest.prototype.open,s=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(r,o){return this._scoutMethod=r,this._scoutUrl=o,t.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let r=this,o=Date.now();return r.addEventListener("loadend",()=>{p({category:"xhr",message:`${r._scoutMethod||"GET"} ${r._scoutUrl||""}`,data:{status:r.status,duration:Date.now()-o}})}),s.apply(this,arguments)},a.addErrorEventListener&&window.addEventListener("error",r=>w(this,null,function*(){if(a.enabled){try{let o=r.error?r.error.stack:"No stack trace available";if(v(r.message))return;a.sendErrors&&m({type:"window.onerror",message:r.message,source:r.filename,lineno:r.lineno,colno:r.colno,errorTrace:o})}catch(o){S("[Scout] Error handler failure:",o)}a.selfHealingErrors&&r.preventDefault()}})),a.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",r=>{if(a.enabled){try{let o=r.reason,u=(o==null?void 0:o.stack)||"No stack trace available";if(v((o==null?void 0:o.message)||""))return;a.sendErrors&&m({type:"Unhandled Promise Rejection",message:(o==null?void 0:o.message)||"Unhandled Promise Rejection",reason:r.reason,errorTrace:u})}catch(o){S("[Scout] Rejection handler failure:",o)}a.selfHealingErrors&&r.preventDefault()}}),a.overrideConsoleError&&(console.error=function(...r){if(a.enabled)try{let o=new Error().stack;if(v(y(r)))return;a.sendErrors&&m({type:"console.error",errorTrace:o,args:y(r)})}catch(o){S("[Scout] console.error override failure:",o)}}),a.overrideConsoleWarn&&(console.warn=function(...r){if(a.enabled)try{let o=new Error().stack;if(v(y(r)))return;a.sendErrors&&m({type:"console.warn",errorTrace:o,args:y(r)})}catch(o){S("[Scout] console.warn override failure:",o)}});let i=a.endpoint?new URL(a.endpoint).origin:"";a.loadUAParser&&a.browserDetails&&i&&N(`${i}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),a.handleSourceMaps&&i&&N(`${i}/vendor/source-map.min.js`)}function ne(e={},n={}){if(e.user&&(_=e.user,delete e.user),D){g=l(l({},g),e),a=l(l({},a),n);return}g=l(l({},g),e),a=l(l({},a),n),D=!0,typeof window!="undefined"&&re()}typeof window!="undefined"&&(window.Scout={init:ne,setScope:e=>{g=l(l({},g),e)},setConfig:e=>{a=l(l({},a),e)},setUser:Q,setContext:Y,setTag:ee,addBreadcrumb:p,error:R});var $=class extends te.Component{constructor(n){super(n),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,t){R({message:n.message,stack:n.stack,errorTrace:n.stack,component:(t==null?void 0:t.componentStack)||"",type:"react-error-boundary"})}render(){return this.state.hasError?this.props.fallback||null:this.props.children}};export{$ as ScoutErrorBoundary};
@@ -1,4 +1,4 @@
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,s,t)=>s in e?$(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t,l=(e,s)=>{for(var t in s||(s={}))B.call(s,t)&&T(e,t,s[t]);if(I)for(var t of I(s))W.call(s,t)&&T(e,t,s[t]);return e},x=(e,s)=>H(e,F(s));var h=(e,s,t)=>new Promise((o,i)=>{var n=c=>{try{u(t.next(c))}catch(f){i(f)}},r=c=>{try{u(t.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(n,r);u((t=t.apply(e,s)).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},a=l({},X),N,p={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},_={clicks:0,scrolls:0},k=null,U=!1,M=null,w={},E=[],j=30;var S=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")),s=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return k=k||R("pageload"),{pageloadId:k,userId:e,sessionId:s}}function q(){var t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 s,t,o,i,n,r,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:((t=(s=window._uaParserResult)==null?void 0:s.browser)==null?void 0:t.version)||null,os:z(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((r=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:r.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:_.clicks,userScrolls:_.scrolls}}function v(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(s=>typeof s=="string"?e.includes(s):s instanceof RegExp?s.test(e):!1)}function D(e,s){let t=new AbortController,o=setTimeout(()=>t.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(s),signal:t.signal}).then(n=>(clearTimeout(o),n)).catch(()=>{clearTimeout(o)})}function y(e){let s=(e[0]||"")+"",t=[...e];return s.replace(/%[sdj]/g,o=>{let i=t.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function A(e,s){let t=document.createElement("script");t.src=e,t.async=!0,s&&(t.onload=s),document.head.appendChild(t)}function G(e,s,t){return h(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let n=yield i.text(),r=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(r)c=JSON.parse(atob(r[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:s,column:t});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 g(e){E.push(l({timestamp:Date.now()},e)),E.length>j&&E.shift()}function m(e){return h(this,null,function*(){let s=a.browserDetails?J():{},t=Object.assign(e,s,p,V());if(M&&(t.user=M),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=E.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&P("[Scout] Suppressed by sampling");return}if(a.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let o=e.errorTrace.split(`
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,s,t)=>s in e?$(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t,l=(e,s)=>{for(var t in s||(s={}))B.call(s,t)&&T(e,t,s[t]);if(I)for(var t of I(s))W.call(s,t)&&T(e,t,s[t]);return e},x=(e,s)=>H(e,F(s));var h=(e,s,t)=>new Promise((o,i)=>{var n=c=>{try{u(t.next(c))}catch(f){i(f)}},r=c=>{try{u(t.throw(c))}catch(f){i(f)}},u=c=>c.done?o(c.value):Promise.resolve(c.value).then(n,r);u((t=t.apply(e,s)).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},a=l({},X),N,p={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},_={clicks:0,scrolls:0},k=null,U=!1,M=null,w={},E=[],j=30;var S=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")),s=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",R("session")),sessionStorage.getItem("__scoutSessionId"));return k=k||R("pageload"),{pageloadId:k,userId:e,sessionId:s}}function q(){var t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 t,o,i;if((o=(t=window._uaParserResult)==null?void 0:t.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 s,t,o,i,n,r,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:((t=(s=window._uaParserResult)==null?void 0:s.browser)==null?void 0:t.version)||null,os:z(),osVersion:((i=(o=window._uaParserResult)==null?void 0:o.os)==null?void 0:i.version)||null,deviceType:((r=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:r.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:_.clicks,userScrolls:_.scrolls}}function v(e){return!a.ignoreErrors||!Array.isArray(a.ignoreErrors)?!1:a.ignoreErrors.some(s=>typeof s=="string"?e.includes(s):s instanceof RegExp?s.test(e):!1)}function D(e,s){let t=new AbortController,o=setTimeout(()=>t.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(s),signal:t.signal}).then(n=>(clearTimeout(o),n)).catch(()=>{clearTimeout(o)})}function y(e){let s=(e[0]||"")+"",t=[...e];return s.replace(/%[sdj]/g,o=>{let i=t.shift();return o==="%s"?String(i):o==="%d"?Number(i):o==="%j"?JSON.stringify(i):o})}function A(e,s){let t=document.createElement("script");t.src=e,t.async=!0,s&&(t.onload=s),document.head.appendChild(t)}function G(e,s,t){return h(this,null,function*(){var o;try{let i=yield fetch(e);if(!i.ok)return null;let n=yield i.text(),r=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(r)c=JSON.parse(atob(r[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:s,column:t});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 g(e){E.push(l({timestamp:Date.now()},e)),E.length>j&&E.shift()}function m(e){return h(this,null,function*(){let s=a.browserDetails?J():{},t=Object.assign(e,s,p,V());if(M&&(t.user=M),Object.keys(w).length&&(t.context=l({},w)),t.breadcrumbs=E.slice(),a.sampleRate&&Math.random()<1-parseFloat(a.sampleRate)){a.debug&&P("[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 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
4
  `):[];for(let n=1;n<i.length;n++){let r=i[n].trim().match(/(http.*?):(\d+):(\d+)/);if(r){e.source=r[1],e.lineno=parseInt(r[2],10),e.colno=parseInt(r[3],10);break}}}catch(o){}if(a.debug&&P("[Scout] Sending:",t),a.endpoint&&D(a.endpoint,t),a.handleSourceMaps&&e.source&&e.lineno)try{let o=yield G(e.source,e.lineno,e.colno||0);if(o){let i=x(l({},t),{originalSource:o.originalSource,originalLine:o.originalLine,originalColumn:o.originalColumn,originalName:o.originalName,highlightLineNumber:o.originalLine});o.snippet&&(i.snippet=o.snippet),a.endpoint&&D(a.endpoint,i)}}catch(o){}})}function K(e){a.enabled&&m(e)}function Z(e){M=e}function Q(e){w=l(l({},w),e)}function Y(e,s){w[e]=s}function te(e){g(e)}function ee(){if(a.trackUserInteractions){document.addEventListener("click",r=>{_.clicks++;let u=r.target,c=u.tagName?u.tagName.toLowerCase():"",f=(u.textContent||"").trim().slice(0,50);g({category:"click",message:c+(f?": "+f:"")})});let n=0;window.addEventListener("scroll",()=>{let r=Date.now();r-n>100&&(_.scrolls++,n=r)})}let e=history.pushState;history.pushState=function(){e.apply(this,arguments),g({category:"navigation",message:window.location.href})},window.addEventListener("popstate",()=>{g({category:"navigation",message:window.location.href})});let s=window.fetch;window.fetch=function(n,r){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(r==null?void 0:r.method)||"GET",f=Date.now();return s.apply(this,arguments).then(d=>(g({category:"fetch",message:`${c} ${u}`,data:{status:d.status,duration:Date.now()-f}}),d)).catch(d=>{throw g({category:"fetch",message:`${c} ${u}`,data:{error:d.message,duration:Date.now()-f}}),d})};let t=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,r){return this._scoutMethod=n,this._scoutUrl=r,t.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,r=Date.now();return n.addEventListener("loadend",()=>{g({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-r}})}),o.apply(this,arguments)},a.addErrorEventListener&&window.addEventListener("error",n=>h(this,null,function*(){if(a.enabled){try{let r=n.error?n.error.stack:"No stack trace available";if(v(n.message))return;a.sendErrors&&m({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:r})}catch(r){S("[Scout] Error handler failure:",r)}a.selfHealingErrors&&n.preventDefault()}})),a.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(a.enabled){try{let r=n.reason,u=(r==null?void 0:r.stack)||"No stack trace available";if(v((r==null?void 0:r.message)||""))return;a.sendErrors&&m({type:"Unhandled Promise Rejection",message:(r==null?void 0:r.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(r){S("[Scout] Rejection handler failure:",r)}a.selfHealingErrors&&n.preventDefault()}}),a.overrideConsoleError&&(console.error=function(...n){if(a.enabled)try{let r=new Error().stack;if(v(y(n)))return;a.sendErrors&&m({type:"console.error",errorTrace:r,args:y(n)})}catch(r){S("[Scout] console.error override failure:",r)}}),a.overrideConsoleWarn&&(console.warn=function(...n){if(a.enabled)try{let r=new Error().stack;if(v(y(n)))return;a.sendErrors&&m({type:"console.warn",errorTrace:r,args:y(n)})}catch(r){S("[Scout] console.warn override failure:",r)}});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 ne(e={},s={}){if(e.user&&(M=e.user,delete e.user),U){p=l(l({},p),e),a=l(l({},a),s);return}p=l(l({},p),e),a=l(l({},a),s),U=!0,typeof window!="undefined"&&ee()}typeof window!="undefined"&&(window.Scout={init:ne,setScope:e=>{p=l(l({},p),e)},setConfig:e=>{a=l(l({},a),e)},setUser:Z,setContext:Q,setTag:Y,addBreadcrumb:g,error:K});})();
package/dist/vue.cjs CHANGED
@@ -1,4 +1,4 @@
1
- var h=Object.defineProperty,B=Object.defineProperties,W=Object.getOwnPropertyDescriptor,X=Object.getOwnPropertyDescriptors,V=Object.getOwnPropertyNames,x=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var U=(e,o,r)=>o in e?h(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,l=(e,o)=>{for(var r in o||(o={}))P.call(o,r)&&U(e,r,o[r]);if(x)for(var r of x(o))j.call(o,r)&&U(e,r,o[r]);return e},D=(e,o)=>B(e,X(o));var q=(e,o)=>{for(var r in o)h(e,r,{get:o[r],enumerable:!0})},z=(e,o,r,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of V(o))!P.call(e,s)&&s!==r&&h(e,s,{get:()=>o[s],enumerable:!(t=W(o,s))||t.enumerable});return e};var J=e=>z(h({},"__esModule",{value:!0}),e);var S=(e,o,r)=>new Promise((t,s)=>{var n=c=>{try{u(r.next(c))}catch(f){s(f)}},a=c=>{try{u(r.throw(c))}catch(f){s(f)}},u=c=>c.done?t(c.value):Promise.resolve(c.value).then(n,a);u((r=r.apply(e,o)).next())});var ce={};q(ce,{ScoutVue:()=>ie});module.exports=J(ce);var G={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=l({},G),H,g={environment:typeof window!="undefined"&&((H=window.location)==null?void 0:H.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},v={clicks:0,scrolls:0},C=null,A=!1,M=null,m={},k=[],K=30;var y=console.warn;var $=console.log;function L(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function Z(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",L("user")),localStorage.getItem("__scoutUserId")),o=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",L("session")),sessionStorage.getItem("__scoutSessionId"));return C=C||L("pageload"),{pageloadId:C,userId:e,sessionId:o}}function Q(){var r,t,s;if((t=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&t.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((s=[{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:s.n)||"Unknown"}function Y(){var r,t,s;if((t=(r=window._uaParserResult)==null?void 0:r.os)!=null&&t.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((s=[{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:s.n)||"Unknown"}function ee(){var o,r,t,s,n,a,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=(o=window._uaParserResult)==null?void 0:o.browser)==null?void 0:r.version)||null,os:Y(),osVersion:((s=(t=window._uaParserResult)==null?void 0:t.os)==null?void 0:s.version)||null,deviceType:((a=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:a.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:v.clicks,userScrolls:v.scrolls}}function E(e){return!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(o=>typeof o=="string"?e.includes(o):o instanceof RegExp?o.test(e):!1)}function N(e,o){let r=new AbortController,t=setTimeout(()=>r.abort(),5e3),s={"Content-Type":"application/json"};return i.token&&(s["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:s,body:JSON.stringify(o),signal:r.signal}).then(n=>(clearTimeout(t),n)).catch(()=>{clearTimeout(t)})}function _(e){let o=(e[0]||"")+"",r=[...e];return o.replace(/%[sdj]/g,t=>{let s=r.shift();return t==="%s"?String(s):t==="%d"?Number(s):t==="%j"?JSON.stringify(s):t})}function O(e,o){let r=document.createElement("script");r.src=e,r.async=!0,o&&(r.onload=o),document.head.appendChild(r)}function ne(e,o,r){return S(this,null,function*(){var t;try{let s=yield fetch(e);if(!s.ok)return null;let n=yield s.text(),a=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(a)c=JSON.parse(atob(a[1]));else if(u){let F=new URL(u[1],e).href,T=yield fetch(F);if(!T.ok)return null;c=yield T.json()}else return null;if(!((t=window.sourceMap)!=null&&t.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:o,column:r});if(!d.source)return null;let b=c.sources.indexOf(d.source),I=null;return c.sourcesContent&&c.sourcesContent[b]&&(I=c.sourcesContent[b]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:I}}catch(s){return null}})}function p(e){k.push(l({timestamp:Date.now()},e)),k.length>K&&k.shift()}function w(e){return S(this,null,function*(){let o=i.browserDetails?ee():{},r=Object.assign(e,o,g,Z());if(M&&(r.user=M),Object.keys(m).length&&(r.context=l({},m)),r.breadcrumbs=k.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&$("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let t=e.errorTrace.split(`
1
+ var h=Object.defineProperty,B=Object.defineProperties,W=Object.getOwnPropertyDescriptor,X=Object.getOwnPropertyDescriptors,V=Object.getOwnPropertyNames,x=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var U=(e,o,r)=>o in e?h(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,l=(e,o)=>{for(var r in o||(o={}))P.call(o,r)&&U(e,r,o[r]);if(x)for(var r of x(o))j.call(o,r)&&U(e,r,o[r]);return e},D=(e,o)=>B(e,X(o));var q=(e,o)=>{for(var r in o)h(e,r,{get:o[r],enumerable:!0})},z=(e,o,r,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of V(o))!P.call(e,s)&&s!==r&&h(e,s,{get:()=>o[s],enumerable:!(t=W(o,s))||t.enumerable});return e};var J=e=>z(h({},"__esModule",{value:!0}),e);var S=(e,o,r)=>new Promise((t,s)=>{var n=c=>{try{u(r.next(c))}catch(f){s(f)}},a=c=>{try{u(r.throw(c))}catch(f){s(f)}},u=c=>c.done?t(c.value):Promise.resolve(c.value).then(n,a);u((r=r.apply(e,o)).next())});var ce={};q(ce,{ScoutVue:()=>ie});module.exports=J(ce);var G={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=l({},G),H,g={environment:typeof window!="undefined"&&((H=window.location)==null?void 0:H.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},v={clicks:0,scrolls:0},C=null,A=!1,M=null,m={},k=[],K=30;var y=console.warn;var $=console.log;function L(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function Z(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",L("user")),localStorage.getItem("__scoutUserId")),o=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",L("session")),sessionStorage.getItem("__scoutSessionId"));return C=C||L("pageload"),{pageloadId:C,userId:e,sessionId:o}}function Q(){var r,t,s;if((t=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&t.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((s=[{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:s.n)||"Unknown"}function Y(){var r,t,s;if((t=(r=window._uaParserResult)==null?void 0:r.os)!=null&&t.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((s=[{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:s.n)||"Unknown"}function ee(){var o,r,t,s,n,a,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=(o=window._uaParserResult)==null?void 0:o.browser)==null?void 0:r.version)||null,os:Y(),osVersion:((s=(t=window._uaParserResult)==null?void 0:t.os)==null?void 0:s.version)||null,deviceType:((a=(n=window._uaParserResult)==null?void 0:n.device)==null?void 0:a.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:v.clicks,userScrolls:v.scrolls}}function E(e){return!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(o=>typeof o=="string"?e.includes(o):o instanceof RegExp?o.test(e):!1)}function N(e,o){let r=new AbortController,t=setTimeout(()=>r.abort(),5e3),s={"Content-Type":"application/json"};return i.token&&(s["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:s,body:JSON.stringify(o),signal:r.signal}).then(n=>(clearTimeout(t),n)).catch(()=>{clearTimeout(t)})}function _(e){let o=(e[0]||"")+"",r=[...e];return o.replace(/%[sdj]/g,t=>{let s=r.shift();return t==="%s"?String(s):t==="%d"?Number(s):t==="%j"?JSON.stringify(s):t})}function O(e,o){let r=document.createElement("script");r.src=e,r.async=!0,o&&(r.onload=o),document.head.appendChild(r)}function ne(e,o,r){return S(this,null,function*(){var t;try{let s=yield fetch(e);if(!s.ok)return null;let n=yield s.text(),a=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(a)c=JSON.parse(atob(a[1]));else if(u){let F=new URL(u[1],e).href,T=yield fetch(F);if(!T.ok)return null;c=yield T.json()}else return null;if(!((t=window.sourceMap)!=null&&t.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:o,column:r});if(!d.source)return null;let b=c.sources.indexOf(d.source),I=null;return c.sourcesContent&&c.sourcesContent[b]&&(I=c.sourcesContent[b]),{originalSource:d.source,originalLine:d.line,originalColumn:d.column,originalName:d.name,snippet:I}}catch(s){return null}})}function p(e){k.push(l({timestamp:Date.now()},e)),k.length>K&&k.shift()}function w(e){return S(this,null,function*(){let o=i.browserDetails?ee():{},r=Object.assign(e,o,g,Z());if(M&&(r.user=M),Object.keys(m).length&&(r.context=l({},m)),r.breadcrumbs=k.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&$("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let t=e.errorTrace.split(`
2
2
  `),s=[t[0]];for(let n=1;n<t.length;n++)!t[n].includes("/scout")&&!t[n].includes("scout.js")&&!t[n].includes("scout-error")&&s.push(t[n]);s.length>1&&(e.errorTrace=s.join(`
3
3
  `))}catch(t){}if((e.errorTrace||e.stack)&&!e.source)try{let t=e.errorTrace||e.stack,s=t?t.split(`
4
4
  `):[];for(let n=1;n<s.length;n++){let a=s[n].trim().match(/(http.*?):(\d+):(\d+)/);if(a){e.source=a[1],e.lineno=parseInt(a[2],10),e.colno=parseInt(a[3],10);break}}}catch(t){}if(i.debug&&$("[Scout] Sending:",r),i.endpoint&&N(i.endpoint,r),i.handleSourceMaps&&e.source&&e.lineno)try{let t=yield ne(e.source,e.lineno,e.colno||0);if(t){let s=D(l({},r),{originalSource:t.originalSource,originalLine:t.originalLine,originalColumn:t.originalColumn,originalName:t.originalName,highlightLineNumber:t.originalLine});t.snippet&&(s.snippet=t.snippet),i.endpoint&&N(i.endpoint,s)}}catch(t){}})}function R(e){i.enabled&&w(e)}function re(e){M=e}function oe(e){m=l(l({},m),e)}function te(e,o){m[e]=o}function se(){if(i.trackUserInteractions){document.addEventListener("click",a=>{v.clicks++;let u=a.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 a=Date.now();a-n>100&&(v.scrolls++,n=a)})}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 o=window.fetch;window.fetch=function(n,a){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(a==null?void 0:a.method)||"GET",f=Date.now();return o.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,t=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,a){return this._scoutMethod=n,this._scoutUrl=a,r.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,a=Date.now();return n.addEventListener("loadend",()=>{p({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-a}})}),t.apply(this,arguments)},i.addErrorEventListener&&window.addEventListener("error",n=>S(this,null,function*(){if(i.enabled){try{let a=n.error?n.error.stack:"No stack trace available";if(E(n.message))return;i.sendErrors&&w({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:a})}catch(a){y("[Scout] Error handler failure:",a)}i.selfHealingErrors&&n.preventDefault()}})),i.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(i.enabled){try{let a=n.reason,u=(a==null?void 0:a.stack)||"No stack trace available";if(E((a==null?void 0:a.message)||""))return;i.sendErrors&&w({type:"Unhandled Promise Rejection",message:(a==null?void 0:a.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(a){y("[Scout] Rejection handler failure:",a)}i.selfHealingErrors&&n.preventDefault()}}),i.overrideConsoleError&&(console.error=function(...n){if(i.enabled)try{let a=new Error().stack;if(E(_(n)))return;i.sendErrors&&w({type:"console.error",errorTrace:a,args:_(n)})}catch(a){y("[Scout] console.error override failure:",a)}}),i.overrideConsoleWarn&&(console.warn=function(...n){if(i.enabled)try{let a=new Error().stack;if(E(_(n)))return;i.sendErrors&&w({type:"console.warn",errorTrace:a,args:_(n)})}catch(a){y("[Scout] console.warn override failure:",a)}});let s=i.endpoint?new URL(i.endpoint).origin:"";i.loadUAParser&&i.browserDetails&&s&&O(`${s}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),i.handleSourceMaps&&s&&O(`${s}/vendor/source-map.min.js`)}function ae(e={},o={}){if(e.user&&(M=e.user,delete e.user),A){g=l(l({},g),e),i=l(l({},i),o);return}g=l(l({},g),e),i=l(l({},i),o),A=!0,typeof window!="undefined"&&se()}typeof window!="undefined"&&(window.Scout={init:ae,setScope:e=>{g=l(l({},g),e)},setConfig:e=>{i=l(l({},i),e)},setUser:re,setContext:oe,setTag:te,addBreadcrumb:p,error:R});var ie={install(e){e.config.errorHandler=(o,r,t)=>{var s,n;R({message:o.message,stack:o.stack,errorTrace:o.stack,component:((s=r==null?void 0:r.$options)==null?void 0:s.name)||((n=r==null?void 0:r.$options)==null?void 0:n.__name)||"Anonymous",type:"vue-error-handler",info:t})},e.config.warnHandler=(o,r,t)=>{var s,n;R({message:o,component:((s=r==null?void 0:r.$options)==null?void 0:s.name)||((n=r==null?void 0:r.$options)==null?void 0:n.__name)||"Anonymous",type:"vue-warn-handler",errorTrace:t})}}};
package/dist/vue.js CHANGED
@@ -1,4 +1,4 @@
1
- var H=Object.defineProperty,F=Object.defineProperties;var B=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var W=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable;var x=(e,o,r)=>o in e?H(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,l=(e,o)=>{for(var r in o||(o={}))W.call(o,r)&&x(e,r,o[r]);if(T)for(var r of T(o))X.call(o,r)&&x(e,r,o[r]);return e},U=(e,o)=>F(e,B(o));var h=(e,o,r)=>new Promise((t,a)=>{var n=c=>{try{u(r.next(c))}catch(f){a(f)}},s=c=>{try{u(r.throw(c))}catch(f){a(f)}},u=c=>c.done?t(c.value):Promise.resolve(c.value).then(n,s);u((r=r.apply(e,o)).next())});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=l({},V),N,g={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.0",project:null,release:null,version:null,app:null},k={clicks:0,scrolls:0},R=null,P=!1,v=null,m={},_=[],j=30;var S=console.warn;var D=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function q(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),o=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return R=R||C("pageload"),{pageloadId:R,userId:e,sessionId:o}}function z(){var r,t,a;if((t=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&t.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function J(){var r,t,a;if((t=(r=window._uaParserResult)==null?void 0:r.os)!=null&&t.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function G(){var o,r,t,a,n,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:((r=(o=window._uaParserResult)==null?void 0:o.browser)==null?void 0:r.version)||null,os:J(),osVersion:((a=(t=window._uaParserResult)==null?void 0:t.os)==null?void 0:a.version)||null,deviceType:((s=(n=window._uaParserResult)==null?void 0:n.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 y(e){return!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(o=>typeof o=="string"?e.includes(o):o instanceof RegExp?o.test(e):!1)}function A(e,o){let r=new AbortController,t=setTimeout(()=>r.abort(),5e3),a={"Content-Type":"application/json"};return i.token&&(a["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:a,body:JSON.stringify(o),signal:r.signal}).then(n=>(clearTimeout(t),n)).catch(()=>{clearTimeout(t)})}function E(e){let o=(e[0]||"")+"",r=[...e];return o.replace(/%[sdj]/g,t=>{let a=r.shift();return t==="%s"?String(a):t==="%d"?Number(a):t==="%j"?JSON.stringify(a):t})}function $(e,o){let r=document.createElement("script");r.src=e,r.async=!0,o&&(r.onload=o),document.head.appendChild(r)}function K(e,o,r){return h(this,null,function*(){var t;try{let a=yield fetch(e);if(!a.ok)return null;let n=yield a.text(),s=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(s)c=JSON.parse(atob(s[1]));else if(u){let O=new URL(u[1],e).href,I=yield fetch(O);if(!I.ok)return null;c=yield I.json()}else return null;if(!((t=window.sourceMap)!=null&&t.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:o,column:r});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(a){return null}})}function p(e){_.push(l({timestamp:Date.now()},e)),_.length>j&&_.shift()}function w(e){return h(this,null,function*(){let o=i.browserDetails?G():{},r=Object.assign(e,o,g,q());if(v&&(r.user=v),Object.keys(m).length&&(r.context=l({},m)),r.breadcrumbs=_.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&D("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let t=e.errorTrace.split(`
1
+ var H=Object.defineProperty,F=Object.defineProperties;var B=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var W=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable;var x=(e,o,r)=>o in e?H(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,l=(e,o)=>{for(var r in o||(o={}))W.call(o,r)&&x(e,r,o[r]);if(T)for(var r of T(o))X.call(o,r)&&x(e,r,o[r]);return e},U=(e,o)=>F(e,B(o));var h=(e,o,r)=>new Promise((t,a)=>{var n=c=>{try{u(r.next(c))}catch(f){a(f)}},s=c=>{try{u(r.throw(c))}catch(f){a(f)}},u=c=>c.done?t(c.value):Promise.resolve(c.value).then(n,s);u((r=r.apply(e,o)).next())});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=l({},V),N,g={environment:typeof window!="undefined"&&((N=window.location)==null?void 0:N.hostname)==="localhost"?"development":"production",sdk:"javascript",sdkVersion:"0.3.2",project:null,release:null,version:null,app:null},k={clicks:0,scrolls:0},R=null,P=!1,v=null,m={},_=[],j=30;var S=console.warn;var D=console.log;function C(e){return`${e}_${Math.random().toString(36).substr(2,9)}`}function q(){let e=localStorage.getItem("__scoutUserId")||(localStorage.setItem("__scoutUserId",C("user")),localStorage.getItem("__scoutUserId")),o=sessionStorage.getItem("__scoutSessionId")||(sessionStorage.setItem("__scoutSessionId",C("session")),sessionStorage.getItem("__scoutSessionId"));return R=R||C("pageload"),{pageloadId:R,userId:e,sessionId:o}}function z(){var r,t,a;if((t=(r=window._uaParserResult)==null?void 0:r.browser)!=null&&t.name)return window._uaParserResult.browser.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function J(){var r,t,a;if((t=(r=window._uaParserResult)==null?void 0:r.os)!=null&&t.name)return window._uaParserResult.os.name;let e=navigator.userAgent;return((a=[{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:a.n)||"Unknown"}function G(){var o,r,t,a,n,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:((r=(o=window._uaParserResult)==null?void 0:o.browser)==null?void 0:r.version)||null,os:J(),osVersion:((a=(t=window._uaParserResult)==null?void 0:t.os)==null?void 0:a.version)||null,deviceType:((s=(n=window._uaParserResult)==null?void 0:n.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 y(e){return!i.ignoreErrors||!Array.isArray(i.ignoreErrors)?!1:i.ignoreErrors.some(o=>typeof o=="string"?e.includes(o):o instanceof RegExp?o.test(e):!1)}function A(e,o){let r=new AbortController,t=setTimeout(()=>r.abort(),5e3),a={"Content-Type":"application/json"};return i.token&&(a["X-Ingest-Token"]=i.token),fetch(e,{method:"POST",headers:a,body:JSON.stringify(o),signal:r.signal}).then(n=>(clearTimeout(t),n)).catch(()=>{clearTimeout(t)})}function E(e){let o=(e[0]||"")+"",r=[...e];return o.replace(/%[sdj]/g,t=>{let a=r.shift();return t==="%s"?String(a):t==="%d"?Number(a):t==="%j"?JSON.stringify(a):t})}function $(e,o){let r=document.createElement("script");r.src=e,r.async=!0,o&&(r.onload=o),document.head.appendChild(r)}function K(e,o,r){return h(this,null,function*(){var t;try{let a=yield fetch(e);if(!a.ok)return null;let n=yield a.text(),s=n.match(/\/\/# sourceMappingURL=data:application\/json;base64,([^\s]+)/),u=n.match(/\/\/# sourceMappingURL=(?!data:)([^\s]+)/),c;if(s)c=JSON.parse(atob(s[1]));else if(u){let O=new URL(u[1],e).href,I=yield fetch(O);if(!I.ok)return null;c=yield I.json()}else return null;if(!((t=window.sourceMap)!=null&&t.SourceMapConsumer))return null;let d=new window.sourceMap.SourceMapConsumer(c).originalPositionFor({line:o,column:r});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(a){return null}})}function p(e){_.push(l({timestamp:Date.now()},e)),_.length>j&&_.shift()}function w(e){return h(this,null,function*(){let o=i.browserDetails?G():{},r=Object.assign(e,o,g,q());if(v&&(r.user=v),Object.keys(m).length&&(r.context=l({},m)),r.breadcrumbs=_.slice(),i.sampleRate&&Math.random()<1-parseFloat(i.sampleRate)){i.debug&&D("[Scout] Suppressed by sampling");return}if(i.attachStacktrace||(e.errorTrace=null),e.errorTrace)try{let t=e.errorTrace.split(`
2
2
  `),a=[t[0]];for(let n=1;n<t.length;n++)!t[n].includes("/scout")&&!t[n].includes("scout.js")&&!t[n].includes("scout-error")&&a.push(t[n]);a.length>1&&(e.errorTrace=a.join(`
3
3
  `))}catch(t){}if((e.errorTrace||e.stack)&&!e.source)try{let t=e.errorTrace||e.stack,a=t?t.split(`
4
4
  `):[];for(let n=1;n<a.length;n++){let s=a[n].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(t){}if(i.debug&&D("[Scout] Sending:",r),i.endpoint&&A(i.endpoint,r),i.handleSourceMaps&&e.source&&e.lineno)try{let t=yield K(e.source,e.lineno,e.colno||0);if(t){let a=U(l({},r),{originalSource:t.originalSource,originalLine:t.originalLine,originalColumn:t.originalColumn,originalName:t.originalName,highlightLineNumber:t.originalLine});t.snippet&&(a.snippet=t.snippet),i.endpoint&&A(i.endpoint,a)}}catch(t){}})}function M(e){i.enabled&&w(e)}function Z(e){v=e}function Q(e){m=l(l({},m),e)}function Y(e,o){m[e]=o}function ee(){if(i.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 n=0;window.addEventListener("scroll",()=>{let s=Date.now();s-n>100&&(k.scrolls++,n=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 o=window.fetch;window.fetch=function(n,s){let u=typeof n=="string"?n:(n==null?void 0:n.url)||"",c=(s==null?void 0:s.method)||"GET",f=Date.now();return o.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,t=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(n,s){return this._scoutMethod=n,this._scoutUrl=s,r.apply(this,arguments)},XMLHttpRequest.prototype.send=function(){let n=this,s=Date.now();return n.addEventListener("loadend",()=>{p({category:"xhr",message:`${n._scoutMethod||"GET"} ${n._scoutUrl||""}`,data:{status:n.status,duration:Date.now()-s}})}),t.apply(this,arguments)},i.addErrorEventListener&&window.addEventListener("error",n=>h(this,null,function*(){if(i.enabled){try{let s=n.error?n.error.stack:"No stack trace available";if(y(n.message))return;i.sendErrors&&w({type:"window.onerror",message:n.message,source:n.filename,lineno:n.lineno,colno:n.colno,errorTrace:s})}catch(s){S("[Scout] Error handler failure:",s)}i.selfHealingErrors&&n.preventDefault()}})),i.addUnhandledRejectionEventListener&&window.addEventListener("unhandledrejection",n=>{if(i.enabled){try{let s=n.reason,u=(s==null?void 0:s.stack)||"No stack trace available";if(y((s==null?void 0:s.message)||""))return;i.sendErrors&&w({type:"Unhandled Promise Rejection",message:(s==null?void 0:s.message)||"Unhandled Promise Rejection",reason:n.reason,errorTrace:u})}catch(s){S("[Scout] Rejection handler failure:",s)}i.selfHealingErrors&&n.preventDefault()}}),i.overrideConsoleError&&(console.error=function(...n){if(i.enabled)try{let s=new Error().stack;if(y(E(n)))return;i.sendErrors&&w({type:"console.error",errorTrace:s,args:E(n)})}catch(s){S("[Scout] console.error override failure:",s)}}),i.overrideConsoleWarn&&(console.warn=function(...n){if(i.enabled)try{let s=new Error().stack;if(y(E(n)))return;i.sendErrors&&w({type:"console.warn",errorTrace:s,args:E(n)})}catch(s){S("[Scout] console.warn override failure:",s)}});let a=i.endpoint?new URL(i.endpoint).origin:"";i.loadUAParser&&i.browserDetails&&a&&$(`${a}/vendor/ua-parser.min.js`,()=>{typeof UAParser!="undefined"&&(window._uaParserResult=new UAParser().getResult())}),i.handleSourceMaps&&a&&$(`${a}/vendor/source-map.min.js`)}function ne(e={},o={}){if(e.user&&(v=e.user,delete e.user),P){g=l(l({},g),e),i=l(l({},i),o);return}g=l(l({},g),e),i=l(l({},i),o),P=!0,typeof window!="undefined"&&ee()}typeof window!="undefined"&&(window.Scout={init:ne,setScope:e=>{g=l(l({},g),e)},setConfig:e=>{i=l(l({},i),e)},setUser:Z,setContext:Q,setTag:Y,addBreadcrumb:p,error:M});var ae={install(e){e.config.errorHandler=(o,r,t)=>{var a,n;M({message:o.message,stack:o.stack,errorTrace:o.stack,component:((a=r==null?void 0:r.$options)==null?void 0:a.name)||((n=r==null?void 0:r.$options)==null?void 0:n.__name)||"Anonymous",type:"vue-error-handler",info:t})},e.config.warnHandler=(o,r,t)=>{var a,n;M({message:o,component:((a=r==null?void 0:r.$options)==null?void 0:a.name)||((n=r==null?void 0:r.$options)==null?void 0:n.__name)||"Anonymous",type:"vue-warn-handler",errorTrace:t})}}};export{ae as ScoutVue};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scout-error",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Lightweight error tracking for JavaScript applications",
5
5
  "author": "James Futhey",
6
6
  "license": "MIT",