scout-error 0.2.9 → 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 +40 -26
- package/dist/cli.js.map +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/node.cjs +1 -1
- package/dist/node.js +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.js +1 -1
- package/dist/scout.iife.js +1 -1
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,38 +1,52 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{readFileSync as
|
|
3
|
-
Run \`scout init\` to set up, or edit ${
|
|
4
|
-
`)}function
|
|
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
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
Synced from Scout.js by \`scout sync\`.
|
|
8
|
+
|
|
9
|
+
## errors/
|
|
10
|
+
Auto-captured production errors. Filename: \`{8-char-hash}.md\`.
|
|
11
|
+
Focus on high recent counts. Files are overwritten on sync.
|
|
12
|
+
|
|
13
|
+
## issues/
|
|
14
|
+
Open human-filed tickets (bug, feature, task). Filename: \`{id}.md\`.
|
|
15
|
+
After landing a fix: \`scout close <id>\`.
|
|
16
|
+
|
|
17
|
+
## archive/
|
|
18
|
+
Closed issues \u2014 reference only.
|
|
7
19
|
|
|
8
20
|
## Rules
|
|
9
|
-
1. **Do NOT edit**
|
|
10
|
-
2. Keep investigation notes in separate files (e.g., \`
|
|
11
|
-
3.
|
|
12
|
-
4.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
`);let
|
|
19
|
-
endpoint, username, and password are required.`),process.exit(1))
|
|
20
|
-
Fetching projects...`);let
|
|
21
|
-
Select a project:`),console.log(" 1) New Project (enter name)"),
|
|
22
|
-
Choice`,u?String(u):""),f=parseInt(
|
|
23
|
-
Saved project to ${
|
|
21
|
+
1. **Do NOT edit** files in errors/, issues/, or archive/ \u2014 they get overwritten on sync
|
|
22
|
+
2. Keep investigation notes in separate files (e.g., \`issues/42.notes.md\`) \u2014 those are yours
|
|
23
|
+
3. Managed files match \`{8-char-hash}.md\` or \`{digit}.md\` in their respective dirs
|
|
24
|
+
4. Everything else in this directory is yours
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
- \`scout sync\` \u2014 refresh errors and issues
|
|
28
|
+
- \`scout close <id>\` / \`scout reopen <id>\` \u2014 change issue state
|
|
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/
|
|
24
36
|
|
|
25
37
|
Usage:
|
|
26
|
-
scout init
|
|
27
|
-
scout sync
|
|
28
|
-
scout
|
|
38
|
+
scout init Configure credentials and select a project
|
|
39
|
+
scout sync Fetch errors and issues into .scout/
|
|
40
|
+
scout close <id> Mark an issue as closed
|
|
41
|
+
scout reopen <id> Reopen a closed issue
|
|
42
|
+
scout help Show this help
|
|
29
43
|
|
|
30
44
|
Config files:
|
|
31
|
-
~/.scout.json
|
|
32
|
-
./.scout.json
|
|
45
|
+
~/.scout.json Global credentials (endpoint, username, password)
|
|
46
|
+
./.scout.json Per-project (project name)
|
|
33
47
|
|
|
34
48
|
Environment variables override both:
|
|
35
49
|
SCOUT_ENDPOINT, SCOUT_USERNAME, SCOUT_PASSWORD, SCOUT_PROJECT
|
|
36
|
-
`)}async function
|
|
37
|
-
`),
|
|
50
|
+
`)}async function ae(){let e=process.argv[2];(!e||e==="help"||e==="--help"||e==="-h")&&(_(),process.exit(0)),e==="init"?await ne():e==="sync"?await re():e==="close"?await ce(process.argv[3]):e==="reopen"?await ie(process.argv[3]):(console.error(`Unknown command: ${e}
|
|
51
|
+
`),_(),process.exit(1))}ae().catch(e=>{console.error(e.message),process.exit(1)});
|
|
38
52
|
//# sourceMappingURL=cli.js.map
|
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 } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { createInterface } from 'readline'\n\nconst BUGS_DIR = '.bugs'\nconst HASH_FILE_PATTERN = /^[0-9a-f]{8}\\.md$/\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 // Env vars always win\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 ---\n\nasync function fetchJson(config, path) {\n const url = `${config.endpoint.replace(/\\/$/, '')}${path}`\n\n let response\n try {\n response = await fetch(url, {\n headers: {\n 'X-Username': config.username,\n 'X-Password': config.password,\n },\n })\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 fetchErrors(config) {\n return fetchJson(config, `/errors?project=${encodeURIComponent(config.project)}`)\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 // Context\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 // Stack trace\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 // Latest event metadata\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\n// --- Sync ---\n\nfunction syncBugsDir(errors) {\n const bugsPath = join(process.cwd(), BUGS_DIR)\n const firstRun = !existsSync(bugsPath)\n\n mkdirSync(bugsPath, { recursive: true })\n\n if (firstRun) {\n console.log('Tip: Add .bugs/ to your .gitignore')\n }\n\n const expectedFiles = new Set()\n let created = 0\n let updated = 0\n let unchanged = 0\n\n for (const error of errors) {\n const filename = error.hash.slice(0, 8) + '.md'\n expectedFiles.add(filename)\n\n const filePath = join(bugsPath, filename)\n const content = renderErrorMarkdown(error)\n\n if (existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf8')\n if (existing !== content) {\n writeFileSync(filePath, content)\n updated++\n } else {\n unchanged++\n }\n } else {\n writeFileSync(filePath, content)\n created++\n }\n }\n\n let removed = 0\n const existingFiles = readdirSync(bugsPath)\n for (const file of existingFiles) {\n if (HASH_FILE_PATTERN.test(file) && !expectedFiles.has(file)) {\n unlinkSync(join(bugsPath, file))\n removed++\n }\n }\n\n console.log(`Synced ${errors.length} errors to ${BUGS_DIR}/ (${created} new, ${updated} updated, ${unchanged} unchanged, ${removed} removed)`)\n}\n\nfunction ensureClaudeMd() {\n const filePath = join(process.cwd(), BUGS_DIR, 'CLAUDE.md')\n if (existsSync(filePath)) return\n\n const content = `# Bug Tracking Directory\n\nError reports synced from Scout.js. Each \\`.md\\` file = one active error group.\n\n## Rules\n1. **Do NOT edit** the error \\`.md\\` files \u2014 they get overwritten on \\`scout sync\\`\n2. Keep investigation notes in separate files (e.g., \\`ee16856a.notes.md\\`)\n3. Focus on high-count and recent errors (last 24h count)\n4. Trace the stack to source code in this repo to investigate\n5. Files named \\`{8-char-hash}.md\\` are managed by sync \u2014 everything else is yours\n\n## Syncing\nRun \\`scout sync\\` to refresh. Resolved errors are automatically removed.\n`\n\n writeFileSync(filePath, content)\n console.log('Created .bugs/CLAUDE.md')\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 // --- Credentials (stored globally) ---\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 // --- Project selection ---\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 // --- Write local .scout.json ---\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 into .bugs/`)\n } finally {\n rl.close()\n }\n}\n\nasync function cmdSync() {\n const config = loadConfig()\n console.log(`Fetching errors for project \"${config.project}\"...`)\n const errors = await fetchErrors(config)\n syncBugsDir(errors)\n ensureClaudeMd()\n}\n\n// --- Main ---\n\nfunction printUsage() {\n console.log(`scout-error \u2014 Sync errors to local .bugs/ directory\n\nUsage:\n scout init Configure credentials and select a project\n scout sync Fetch errors and sync to .bugs/\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 {\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", "join", "homedir", "createInterface", "
|
|
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.2
|
|
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.2
|
|
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.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.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.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.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.2
|
|
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.2
|
|
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};
|
package/dist/scout.iife.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.2
|
|
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.2
|
|
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.2
|
|
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};
|