@karan171996/metricflow 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +9 -9
- package/.next/server/app/_not-found.segments/_full.segment.rsc +9 -9
- package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/analyze/route.js +2 -2
- package/.next/server/app/api/analyze/route.js.nft.json +1 -1
- package/.next/server/app/api/connect/route.js +1 -1
- package/.next/server/app/api/connect/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/route.js +2 -2
- package/.next/server/app/api/metrics/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/ai/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/route.js +3 -2
- package/.next/server/app/api/setup/route.js.nft.json +1 -1
- package/.next/server/app/connect/page.js.nft.json +1 -1
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connect.html +19 -66
- package/.next/server/app/connect.rsc +11 -11
- package/.next/server/app/connect.segments/_full.segment.rsc +11 -11
- package/.next/server/app/connect.segments/_index.segment.rsc +8 -8
- package/.next/server/app/connect.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connect.segments/connect/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +11 -11
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +11 -11
- package/.next/server/app/index.segments/_index.segment.rsc +8 -8
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/[slug]/page.js +2 -2
- package/.next/server/app/performance/[slug]/page.js.nft.json +1 -1
- package/.next/server/app/performance/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/page.js.nft.json +1 -1
- package/.next/server/app/performance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance.html +2 -2
- package/.next/server/app/performance.rsc +12 -12
- package/.next/server/app/performance.segments/_full.segment.rsc +12 -12
- package/.next/server/app/performance.segments/_index.segment.rsc +8 -8
- package/.next/server/app/performance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/performance.segments/performance/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +20 -20
- package/.next/server/app/settings.segments/_full.segment.rsc +20 -20
- package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +16 -16
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +2 -2
- package/.next/server/app/setup.rsc +12 -12
- package/.next/server/app/setup.segments/_full.segment.rsc +12 -12
- package/.next/server/app/setup.segments/_index.segment.rsc +8 -8
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/tools/[tool]/page.js.nft.json +1 -1
- package/.next/server/app/tools/[tool]/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0fkj1-q._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0o2ceqr._.js +18 -0
- package/.next/server/chunks/[root-of-the-server]__0pil1g6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0xmaf60._.js +18 -0
- package/.next/server/chunks/[root-of-the-server]__18s35pf._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1f_fo0j._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1sf143y._.js → [root-of-the-server]__1naf7j4._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1o9k4jf._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1rx5s6r._.js +3 -0
- package/.next/server/chunks/_08xo8nu._.js +1 -1
- package/.next/server/chunks/_0w8wvdn._.js +1 -1
- package/.next/server/chunks/_0wct7-r._.js +1 -16
- package/.next/server/chunks/_1l9d64o._.js +2 -2
- package/.next/server/chunks/ssr/0x0c_next_dist_1icgwks._.js +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__0ryyli3._.js → [root-of-the-server]__1xhr2zy._.js} +1 -1
- package/.next/server/chunks/ssr/_0bxxvzb._.js +1 -1
- package/.next/server/chunks/ssr/_0cq6qjs._.js +9 -63
- package/.next/server/chunks/ssr/_0htqt7_._.js +10 -5
- package/.next/server/chunks/ssr/_13m9nev._.js +1 -1
- package/.next/server/chunks/ssr/_14aoqb2._.js +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/middleware.js.nft.json +1 -1
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{332-owz6utwp5.js → 05xbzyep2vlp0.js} +1 -1
- package/.next/static/chunks/0icg-e95qmpn-.css +1 -0
- package/.next/static/chunks/1wbaplet994dj.js +11 -0
- package/.next/static/chunks/2jgqio91axkic.js +1 -0
- package/.next/static/chunks/{0_xh0vh4uh0vk.js → 3dncuj6lhk80h.js} +1 -1
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/README.md +48 -7
- package/bin/cli.mjs +2 -1
- package/dist/browser/index.d.mts +27 -0
- package/dist/browser/index.mjs +110 -0
- package/dist/browser/newrelic-agent.d.mts +4 -0
- package/dist/browser/newrelic-agent.mjs +32 -0
- package/dist/browser/newrelic.d.mts +2 -0
- package/dist/browser/newrelic.mjs +35 -0
- package/dist/browser/sentry-sdk.d.mts +2 -0
- package/dist/browser/sentry-sdk.mjs +22 -0
- package/dist/browser/sentry.d.mts +2 -0
- package/dist/browser/sentry.mjs +45 -0
- package/package.json +14 -3
- package/.next/server/chunks/[root-of-the-server]__12h8r83._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__19yigji._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1zlr3w0._.js +0 -3
- package/.next/static/chunks/2bt9wtnw1g0g_.css +0 -1
- package/.next/static/chunks/39h0f3s2ddxz_.js +0 -65
- package/.next/static/chunks/3ab7oxjuh1asy.js +0 -1
- /package/.next/static/{fn1O5hprdyzrIbY1gapbZ → cTCo8pLtIDkS2Pw1mc2pP}/_buildManifest.js +0 -0
- /package/.next/static/{fn1O5hprdyzrIbY1gapbZ → cTCo8pLtIDkS2Pw1mc2pP}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{fn1O5hprdyzrIbY1gapbZ → cTCo8pLtIDkS2Pw1mc2pP}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[49719,(e,t,r)=>{t.exports=e.x("assert",()=>require("assert"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},27699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},21517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},25328,(e,t,r)=>{t.exports=e.x("http2",()=>require("http2"))},24836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},4446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},59043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},2157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},88947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},55004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},70722,(e,t,r)=>{t.exports=e.x("tty",()=>require("tty"))},92509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},24361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},6461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},90770,e=>{"use strict";let t=new Map;e.s(["getTimings",0,function(){return Array.from(t.entries()).map(([e,t])=>({name:e,value:t})).sort((e,t)=>t.value-e.value)},"recordTiming",0,function(e,r){t.set(e,Math.round(r))}])},12892,67119,e=>{"use strict";var t=e.i(2157),r=e.i(50227),s=e.i(39151),n=e.i(19374);function o(e,t=[],r=[]){let a,l="string"==typeof e?function(e,t,r=[]){if(null==t)throw Error("[lucide]: iconNode is required when icon name is used");return{name:e?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),size:24,node:t,...r.length>0?{aliases:r}:{}}}(e,t,r):e,i=(0,s.forwardRef)(({className:e,...t},r)=>(0,s.createElement)(n.default,{ref:r,icon:l,className:e,...t}));return l.name&&(i.displayName=(a=(e=>{let t="",r=!1;for(let s of e){if("-"===s||"_"===s||s<=" "){r=t.length>0;continue}0===t.length?t+=s.toLowerCase():t+=r?s.toUpperCase():s,r=!1}return t})(l.name)).charAt(0).toUpperCase()+a.slice(1)),i}let a={name:"activity",size:24,node:[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]};a.node;let l=o(a),i={name:"bug",size:24,node:[["path",{d:"M12 20v-9",key:"1qisl0"}],["path",{d:"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z",key:"uouzyp"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M21 21a4 4 0 0 0-3.81-4",key:"1b0z45"}],["path",{d:"M21 5a4 4 0 0 1-3.55 3.97",key:"5cxbf6"}],["path",{d:"M22 13h-4",key:"1jl80f"}],["path",{d:"M3 21a4 4 0 0 1 3.81-4",key:"1fjd4g"}],["path",{d:"M3 5a4 4 0 0 0 3.55 3.97",key:"1d7oge"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M9 7.13V6a3 3 0 1 1 6 0v1.13",key:"1vgav8"}]]};i.node;let c=o(i);function d(e){if(!Number.isFinite(e))return"—";let t=Math.abs(Math.round(e));if(t<1e3)return`${Math.round(e)}ms`;if(t<59950)return`${+(e/1e3).toFixed(1)}s`;let r=Math.round(t/1e3),s=e<0?"-":"";return r<3600?`${s}${Math.floor(r/60)}m ${r%60}s`:`${s}${Math.floor(r/3600)}h ${Math.floor(r%3600/60)}m`}let p=["pages","traffic","loadTime","apdex","vitals","ajax","errorRate","errors"],u=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,h={"new-relic":{label:"New Relic",icon:l,description:"Real-user performance per page: load time, Core Web Vitals, throughput and Apdex.",connectReason:"Add your New Relic keys to see load time and Core Web Vitals for each page.",setupNote:"The key that sends events (Ingest - License) is separate and is added later on the Connect page.",keys:{required:["NEWRELIC_API_KEY","NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID"],optional:["NEWRELIC_INSERT_KEY"],derived:["NEWRELIC_REGION"]},capabilities:["pages","traffic","loadTime","apdex","vitals","ajax","errorRate"],stats:e=>[{label:"Avg Load Time",value:d(u(e.map(e=>e.newRelic.loadTime)))},{label:"Avg LCP",value:d(u(e.map(e=>e.newRelic.lcp)))},{label:"Avg TTFB",value:d(u(e.map(e=>e.newRelic.ttfb)))},{label:"Avg Apdex",value:u(e.map(e=>e.newRelic.apdexScore)).toFixed(2)}],columns:[{needs:"loadTime",header:"Load",cell:e=>d(e.newRelic.loadTime)},{needs:"vitals",header:"LCP",cell:e=>d(e.newRelic.lcp)},{needs:"vitals",header:"TTFB",cell:e=>d(e.newRelic.ttfb)},{needs:"vitals",header:"CLS",cell:e=>e.newRelic.cls.toFixed(2)},{needs:"vitals",header:"INP",cell:e=>{let t=e.newRelic.inp;return void 0===t?"—":d(t)}},{needs:"errorRate",header:"Error Rate",cell:e=>`${e.newRelic.errorRate.toFixed(2)}%`},{needs:"traffic",header:"Throughput",cell:e=>e.newRelic.throughput.toLocaleString()},{needs:"apdex",header:"Apdex",cell:e=>e.newRelic.apdexScore.toFixed(2)}]},sentry:{label:"Sentry",icon:c,description:"Errors captured per page over the last 24 hours.",connectReason:"Add your Sentry keys to see the errors on each page.",keys:{required:["SENTRY_API_KEY","SENTRY_DSN"],optional:[]},capabilities:["errors"],stats:e=>{let t=e.reduce((e,t)=>(t.sentry?.errorCount??0)>(e?.sentry?.errorCount??0)?t:e,null);return[{label:"Total Errors",value:String(e.map(e=>e.sentry?.errorCount??0).reduce((e,t)=>e+t,0))},{label:"Pages With Errors",value:`${e.filter(e=>(e.sentry?.errorCount??0)>0).length} of ${e.length}`},{label:"Noisiest Page",value:t?.name??"None"}]},columns:[{needs:"errors",header:"Errors",cell:e=>String(e.sentry?.errorCount??0)},{needs:"errors",header:"Latest Error",cell:e=>e.sentry?.latestErrors[0]?.title??"—"},{needs:"errors",header:"Last Seen",cell:e=>{let t=Date.parse(e.sentry?.latestErrors[0]?.lastSeen??"");return Number.isNaN(t)?"—":new Date(t).toLocaleString()}}]}},f=Object.fromEntries(Object.entries({NEWRELIC_API_KEY:{label:"New Relic User API key",secret:!0,help:'READS your data (starts NRAK-). Create it under API keys > key type "User".'},NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID:{label:"New Relic account ID",secret:!1,help:"A plain number, shown next to your keys in New Relic."},SENTRY_API_KEY:{label:"Sentry auth token",secret:!0,help:"Lets the dashboard read issues (scopes: project:read, event:read)."},SENTRY_DSN:{label:"Sentry DSN",secret:!1,help:"Project settings, then Client Keys (DSN). The project and host are read from it."}}).map(([e,t])=>[e,t.label])),x=Object.keys(h);e.s(["KEY_LABELS",0,f,"TOOLS",0,h,"TOOL_IDS",0,x,"mergeMetrics",0,function(e,t,r){let s={};for(let[n,o]of Object.entries(t)){let t=r.includes(o)?void 0:e[o]?.[n];void 0!==t&&(s[n]=t)}return s},"sourcesFor",0,function(e){let t={};for(let r of p){let s=x.find(t=>e.includes(t)&&h[t].capabilities.includes(r));s&&(t[r]=s)}return t}],67119);let m=x.flatMap(e=>h[e].keys.required),E="NEWRELIC_REGION",y={us:{graphql:"https://api.newrelic.com/graphql",ingest:"https://insights-collector.newrelic.com"},eu:{graphql:"https://api.eu.newrelic.com/graphql",ingest:"https://insights-collector.eu01.nr-data.net"}},v={gemini:{label:"Google Gemini",key:"GEMINI_API_KEY"},claude:{label:"Anthropic Claude",key:"CLAUDE_API_KEY"},openai:{label:"OpenAI",key:"OPENAI_API_KEY"}},R="AI_PROVIDER";function g(e){return process.env[e]??""}let b=e=>h[e].keys.required.every(e=>g(e));function _(){return process.env.METRICFLOW_PROJECT_DIR||process.cwd()}let w=/[\s\0#"'`\\$]/;class I extends Error{}e.s(["AI_PROVIDERS",0,v,"AI_PROVIDER_KEY",0,R,"EnvWriteRefused",0,I,"INSERT_KEY",0,"NEWRELIC_INSERT_KEY","REGION_KEY",0,E,"SETUP_KEYS",0,m,"UNSAFE",0,w,"activeAi",0,function(){let e=process.env[R];for(let t of(e&&e in v?[e]:[]).concat(Object.keys(v))){let e=process.env[v[t].key];if(e)return{provider:t,key:e}}return null},"connectedTools",0,()=>x.filter(b),"env",0,g,"isToolConnected",0,b,"nrHosts",0,(e="eu"===process.env[E]?"eu":"us")=>y[e],"projectDir",0,_,"writeEnvLocal",0,function(e,s=process.env.METRICFLOW_ENV_FILE||(0,r.join)(_(),".env.local")){let n=new Set([...Object.values(h).flatMap(e=>[...e.keys.required,...e.keys.optional,...e.keys.derived??[]]),...Object.values(v).map(e=>e.key),R]);for(let[t,r]of Object.entries(e)){if(!n.has(t))throw new I("Refused to write a key name no tool declares.");if(w.test(r))throw new I("Refused to write a value with unsafe characters.")}let o=(0,t.existsSync)(s)?(0,t.readFileSync)(s,"utf8").split("\n"):[],a=new Map(Object.entries(e)),l=o.map(e=>{let t=e.match(/^\s*([A-Z0-9_]+)\s*=/)?.[1];if(t&&a.has(t)){let e=a.get(t);return a.delete(t),`${t}=${e}`}return e});for(;l.length&&""===l[l.length-1];)l.pop();for(let[e,t]of a)l.push(`${e}=${t}`);let i=`${s}.tmp`;for(let[r,n]of((0,t.writeFileSync)(i,l.join("\n")+"\n",{mode:384}),(0,t.renameSync)(i,s),Object.entries(e)))process.env[r]=n}],12892)},24514,e=>{"use strict";let t=new Set(["localhost","127.0.0.1","[::1]"]),r=new Set(["127.0.0.1","::1","::ffff:127.0.0.1"]);e.s(["REFUSAL_MESSAGE",0,()=>"1"===process.env.METRICFLOW_EXPOSED?"Setup and Connect are disabled because the dashboard is exposed on the network (--host). Restart without --host to use them.":"Setup is only available from localhost.","isLocalRequest",0,function(e){if("1"===process.env.METRICFLOW_EXPOSED)return!1;let s=e.headers.get("x-forwarded-for");if(s&&!s.split(",").every(e=>r.has(e.trim().replace(/^\[|\]$/g,"")))||"cross-site"===e.headers.get("sec-fetch-site"))return!1;let n=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(n))return!1;let o=e.headers.get("origin");try{return!o||t.has(new URL(o).hostname)}catch{return!1}},"requireJson",0,function(e){return/^application\/json\s*(;|$)/i.test(e.headers.get("content-type")??"")?null:Response.json({error:"Send the request as application/json."},{status:415})}])},27252,e=>{"use strict";e.s(["default",()=>t]);let t=(0,e.i(18286).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/node_modules/.pnpm/lucide-react@1.47.0_react@19.2.8/node_modules/lucide-react/dist/esm/Icon.mjs from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/node_modules/.pnpm/lucide-react@1.47.0_react@19.2.8/node_modules/lucide-react/dist/esm/Icon.mjs","default")},19374,e=>{"use strict";var t=e.i(27252);e.n(t)},18286,(e,t,r)=>{"use strict";t.exports=e.r(99403).vendored["react-rsc"].ReactServerDOMTurbopackServer}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__1rx5s6r._.js.map
|
|
@@ -17,6 +17,6 @@ Respond with ONLY raw JSON (no markdown fences) with keys: analysis, alerts, rec
|
|
|
17
17
|
Each alert must have: severity ("high"|"medium"|"low"), page, message, metric.
|
|
18
18
|
"metric" must be a SHORT single label naming which metric triggered the alert
|
|
19
19
|
(e.g. "loadTime", "lcp", "ttfb", "errorRate", ${o?'"errorCount", ':""}"apdexScore") —
|
|
20
|
-
never a sentence or multiple values.`),a.key)))}catch(e){return console.error(`${a.provider} API error:`,t.default.isAxiosError(e)?e.response?.status:"failed"),s(n())}}function n(){return{analysis:"Home page is loading slower than expected with 5 errors. Dashboard has better performance but shows network issues.",alerts:[{severity:"high",page:"/",message:"Home page load time is 1200ms (threshold: 1000ms)",metric:"loadTime"},{severity:"medium",page:"/dashboard",message:"Dashboard has 2 network errors",metric:"errorCount"}],recommendations:["Optimize images on home page - they account for 40% of load time","Implement lazy loading for below-the-fold content","Cache API responses to reduce network calls","Review error handling in dashboard network requests"]}}var o=e.i(90770),s=e.i(12892);async function i(e)
|
|
20
|
+
never a sentence or multiple values.`),a.key)))}catch(e){return console.error(`${a.provider} API error:`,t.default.isAxiosError(e)?e.response?.status:"failed"),s(n())}}function n(){return{analysis:"Home page is loading slower than expected with 5 errors. Dashboard has better performance but shows network issues.",alerts:[{severity:"high",page:"/",message:"Home page load time is 1200ms (threshold: 1000ms)",metric:"loadTime"},{severity:"medium",page:"/dashboard",message:"Dashboard has 2 network errors",metric:"errorCount"}],recommendations:["Optimize images on home page - they account for 40% of load time","Implement lazy loading for below-the-fold content","Cache API responses to reduce network calls","Review error handling in dashboard network requests"]}}var o=e.i(90770),s=e.i(12892),i=e.i(24514);async function l(e){let t=(0,i.requireJson)(e);if(t)return t;try{let t=await e.json(),r=(0,s.activeAi)(),n=performance.now(),i=await a(t.metrics,r);return(0,o.recordTiming)(`${r?s.AI_PROVIDERS[r.provider].label:"AI"}: analyze`,performance.now()-n),Response.json(i)}catch{return console.error("[analyze] failed"),Response.json({error:"Could not analyze the metrics."},{status:500})}}e.s(["POST",0,l],23892)},68847,e=>{"use strict";var t=e.i(12425),r=e.i(83353),a=e.i(47902),n=e.i(37892),o=e.i(54261),s=e.i(39548),i=e.i(68187),l=e.i(63984),u=e.i(88743),c=e.i(24698),d=e.i(13487),p=e.i(48776),h=e.i(29398),m=e.i(31610),g=e.i(45919),v=e.i(93695),R=e.i(12741);e.i(95315);var f=e.i(98732);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/analyze/route",pathname:"/api/analyze",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/analyze/route.ts",nextConfigOutput:"",userland:()=>e.r(23892),...{}}),{workAsyncStorage:y,workUnitAsyncStorage:C,serverHooks:E}=w;async function x(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),w.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/analyze/route";y=y.replace(/\/index$/,"")||"/";let C=await w.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!C)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:E,deploymentId:x,params:A,nextConfig:b,parsedUrl:T,isDraftMode:S,prerenderManifest:P,routerServerContext:O,isOnDemandRevalidate:N,revalidateOnlyGenerated:k,resolvedPathname:_,clientReferenceManifest:I,serverActionsManifest:H}=C,q=(0,i.normalizeAppPath)(y),$=!!P.routes[_]&&(w.isDev||(0,R.isRouteCacheOwner)(_,w.cacheOwner,P.routes[_])),D=!!(P.dynamicRoutes[q]||$),M=async()=>((null==O?void 0:O.render404)?await O.render404(e,t,T,!1):t.end("This page could not be found"),null);if(D&&!S){let e=P.dynamicRoutes[q];if(e&&!1===e.fallback&&!$){if(b.adapterPath)return await M();throw new v.NoFallbackError}}let U=null;!D||w.isDev||S||(U="/index"===(U=_)?"/":U);let z=!0===w.isDev||!D,j=D&&!z;H&&I&&(0,s.setManifestsSingleton)({page:y,clientReferenceManifest:I,serverActionsManifest:H});let L=e.method||"GET",F=(0,o.getTracer)(),K=F.getActiveScopeSpan(),B=!!(null==O?void 0:O.isWrappedByNextServer),G=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await w.getIncrementalCache(e,b,P,G);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:A,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts,useCacheTimeout:b.experimental.useCacheTimeout},cacheComponents:!!b.cacheComponents,validationLevel:b.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:z,incrementalCache:W,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:b.cacheLife,staticPageGenerationTimeout:b.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>w.onRequestError(e,t,a,n,O)},sharedContext:{buildId:E,deploymentId:x}},J=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),Y=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:r})=>{try{if(!G&&N&&k&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await w.handle(Y,V);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let s=V.renderOpts.collectedTags;if(!D)return await (0,p.sendResponse)(J,X,n,o),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);s&&(t[g.NEXT_CACHE_TAGS_HEADER]=s),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,a=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==r&&r>0?b.expireTime:void 0:V.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:N})},!1,O),t}},Q=async(n,s)=>{try{var i,l;let n=await w.handleResponse({req:e,nextConfig:b,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:k,responseGenerator:Z,waitUntil:a.waitUntil,isMinimalMode:G});if(!D)return;if((null==n||null==(i=n.value)?void 0:i.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);G&&D||o.delete(g.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(J,X,new Response(n.value.body,{headers:o,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:q,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:N})},!1,O),D)throw t;await (0,p.sendResponse)(J,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:o.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||q,i=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":i}),n.updateName(i),s&&s!==n&&(s.setAttribute("http.route",a),s.updateName(i))})()}};if(B&&K)await Q(K,void 0);else{let t=F.getActiveScopeSpan();await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${L} ${y}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Q(e,t)),void 0,!B)}}e.s(["handler",0,x,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:C})},"routeModule",0,w,"serverHooks",0,E,"workAsyncStorage",0,y,"workUnitAsyncStorage",0,C])}];
|
|
21
21
|
|
|
22
22
|
//# sourceMappingURL=_08xo8nu._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[35907,e=>{"use strict";var t=e.i(12892),r=e.i(67119),a=e.i(24514),s=e.i(60756),n=e.i(83808);function o(e,t){let r=s.default.isAxiosError(e)?e.response?.status:void 0;return 401===r||403===r?`${t} was rejected (check the key and its permissions).`:404===r?`${t} was not found.`:`Could not reach ${t} to check it.`}async function i(e,r){if(!/^\d+$/.test(r))return{NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID:{ok:!1,error:"Account ID must be a number."}};try{let a,n=a=>s.default.post((0,t.nrHosts)(a).graphql,{query:`{ actor { user { id } account(id: ${r}) { id } } }`},{headers:{"API-Key":e},timeout:8e3}),o="us";try{if(a=await n("us"),!a.data?.data?.actor?.user?.id)throw Error("rejected")}catch(e){try{if(a=await n("eu"),!a.data?.data?.actor?.user?.id)throw e;o="eu"}catch{throw e}}let i="eu"===o?{region:o}:{},l=a.data?.data?.actor;if(!l?.user?.id)return{NEWRELIC_API_KEY:{ok:!1,error:"New Relic User key was rejected."}};if(!l.account?.id)return{NEWRELIC_API_KEY:{ok:!0,...i},NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID:{ok:!1,error:"This key cannot see that account ID."}};return{NEWRELIC_API_KEY:{ok:!0,...i},NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID:{ok:!0}}}catch(e){return{NEWRELIC_API_KEY:{ok:!1,error:o(e,"New Relic")}}}}async function l(e,t){let r=(0,n.parseSentryDsn)(t);if(!r.ok)return{SENTRY_DSN:{ok:!1,error:r.error}};try{if(!await (0,n.orgSlugForDsn)(e,r))return{SENTRY_API_KEY:{ok:!0},SENTRY_DSN:{ok:!1,error:"This DSN does not match a project the token can read."}};return{SENTRY_API_KEY:{ok:!0},SENTRY_DSN:{ok:!0}}}catch(e){return{SENTRY_API_KEY:{ok:!1,error:o(e,"Sentry token")}}}}async function u(e){let[t,r]=await Promise.all([e.NEWRELIC_API_KEY&&e.NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID?i(e.NEWRELIC_API_KEY,e.NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID):{},e.SENTRY_API_KEY&&e.SENTRY_DSN?l(e.SENTRY_API_KEY,e.SENTRY_DSN):{}]);return{...t,...r}}let c="Contains spaces or special characters (# \" ' ` $ \\). Paste the value without them.",d=()=>Response.json({error:(0,a.REFUSAL_MESSAGE)()},{status:403});async function p(e){return(0,a.isLocalRequest)(e)?Response.json({configured:(0,t.connectedTools)().length>0,tools:(0,t.connectedTools)(),keys:Object.fromEntries([...t.SETUP_KEYS,t.INSERT_KEY].map(e=>[e,!!(0,t.env)(e)]))}):d()}async function E(e){let s;if(!(0,a.isLocalRequest)(e))return d();try{s=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let n="string"==typeof s[t.INSERT_KEY]?s[t.INSERT_KEY].trim():"";if(n&&t.SETUP_KEYS.every(e=>!s[e])){if(!(0,t.isToolConnected)("new-relic"))return Response.json({saved:!1,error:"Finish setup first."},{status:400});let e=t.UNSAFE.test(n)?c:/^NRAK-/i.test(n)?'That is a User API key (starts NRAK-), which reads data. The Insert key sends data: New Relic > API keys > create key, type "Ingest - License".':null;if(e)return Response.json({saved:!1,results:{[t.INSERT_KEY]:{ok:!1,error:e}}},{status:400});try{(0,t.writeEnvLocal)({[t.INSERT_KEY]:n})}catch{return Response.json({saved:!1,error:".env.local could not be written. Check folder permissions."},{status:500})}return Response.json({saved:!0,results:{[t.INSERT_KEY]:{ok:!0}}})}let o={},i={},l=0;for(let e of r.TOOL_IDS){let a=r.TOOLS[e].keys.required,n=a.filter(e=>"string"==typeof s[e]&&s[e].trim());if(n.length){for(let e of(l++,n)){let r=s[e].trim();t.UNSAFE.test(r)?i[e]={ok:!1,error:c}:o[e]=r}for(let s of a.filter(e=>!n.includes(e)&&!(0,t.env)(e)))i[s]={ok:!1,error:`Add the ${r.KEY_LABELS[s]}, or clear the ${r.KEY_LABELS[n[0]]} to skip ${r.TOOLS[e].label}.`};for(let e of a.filter(e=>!n.includes(e)&&(0,t.env)(e)))o[e]=(0,t.env)(e)}}if(!l)return Response.json({saved:!1,error:"Fill in both fields for at least one tool."},{status:400});if(Object.keys(i).length)return Response.json({saved:!1,results:i},{status:400});let p=await u(o);if(Object.values(p).some(e=>!e.ok))return Response.json({saved:!1,results:p},{status:422});try{let e=p.NEWRELIC_API_KEY;(0,t.writeEnvLocal)({...o,...e?{[t.REGION_KEY]:e.ok&&"eu"===e.region?"eu":"us"}:{}})}catch{return Response.json({saved:!1,error:"Keys are valid but .env.local could not be written. Check folder permissions."},{status:500})}return Response.json({saved:!0,results:p})}e.s(["GET",0,p,"POST",0,E],35907)},97962,e=>{"use strict";var t=e.i(12425),r=e.i(83353),a=e.i(47902),s=e.i(37892),n=e.i(54261),o=e.i(39548),i=e.i(68187),l=e.i(63984),u=e.i(88743),c=e.i(24698),d=e.i(13487),p=e.i(48776),E=e.i(29398),h=e.i(31610),R=e.i(45919),f=e.i(93695),_=e.i(12741);e.i(95315);var v=e.i(98732);let N=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/setup/route",pathname:"/api/setup",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/setup/route.ts",nextConfigOutput:"",userland:()=>e.r(35907),...{}}),{workAsyncStorage:C,workUnitAsyncStorage:T,serverHooks:I}=N;async function S(e,t,a){a.requestMeta&&(0,s.setRequestMeta)(e,a.requestMeta),N.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let C="/api/setup/route";C=C.replace(/\/index$/,"")||"/";let T=await N.prepare(e,t,{srcPage:C,multiZoneDraftMode:!1});if(!T)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:I,deploymentId:S,params:w,nextConfig:A,parsedUrl:y,isDraftMode:m,prerenderManifest:g,routerServerContext:P,isOnDemandRevalidate:k,revalidateOnlyGenerated:O,resolvedPathname:L,clientReferenceManifest:b,serverActionsManifest:x}=T,K=(0,i.normalizeAppPath)(C),Y=!!g.routes[L]&&(N.isDev||(0,_.isRouteCacheOwner)(L,N.cacheOwner,g.routes[L])),U=!!(g.dynamicRoutes[K]||Y),D=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,y,!1):t.end("This page could not be found"),null);if(U&&!m){let e=g.dynamicRoutes[K];if(e&&!1===e.fallback&&!Y){if(A.adapterPath)return await D();throw new f.NoFallbackError}}let j=null;!U||N.isDev||m||(j="/index"===(j=L)?"/":j);let q=!0===N.isDev||!U,H=U&&!q;x&&b&&(0,o.setManifestsSingleton)({page:C,clientReferenceManifest:b,serverActionsManifest:x});let M=e.method||"GET",$=(0,n.getTracer)(),F=$.getActiveScopeSpan(),W=!!(null==P?void 0:P.isWrappedByNextServer),B=!!(0,s.getRequestMeta)(e,"minimalMode"),G=(0,s.getRequestMeta)(e,"incrementalCache")||await N.getIncrementalCache(e,A,g,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let X={params:w,previewProps:g.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:m,supportsDynamicResponse:q,incrementalCache:G,hmrRefreshHash:(0,s.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,s)=>N.onRequestError(e,t,a,s,P)},sharedContext:{buildId:I,deploymentId:S}},V=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),Z=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!B&&k&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await N.handle(Z,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let n=X.renderOpts.pendingWaitUntil;n&&a.waitUntil&&(a.waitUntil(n),n=void 0);let o=X.renderOpts.collectedTags;if(!U)return await (0,p.sendResponse)(V,z,s,n),null;{let e=await s.blob(),t=(0,E.toNodeOutgoingHttpHeaders)(s.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:C,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:k})},!1,P),t}},Q=async(s,o)=>{try{var i,l;let s=await N.handleResponse({req:e,nextConfig:A,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:g,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:O,responseGenerator:J,waitUntil:a.waitUntil,isMinimalMode:B});if(!U)return;if((null==s||null==(i=s.value)?void 0:i.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==s||null==(l=s.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",k?"REVALIDATED":s.isMiss?"MISS":s.isStale?"STALE":"HIT"),m&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,E.fromNodeOutgoingHttpHeaders)(s.value.headers);B&&U||n.delete(R.NEXT_CACHE_TAGS_HEADER),!s.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,h.getCacheControlHeader)(s.cacheControl)),await (0,p.sendResponse)(V,z,new Response(s.value.body,{headers:n,status:s.value.status||200}));return}catch(t){if(t instanceof f.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:K,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:k})},!1,P),U)throw t;await (0,p.sendResponse)(V,z,new Response(null,{status:500}));return}finally{(()=>{if(!s)return;let e=t.statusCode;s.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(s.setStatus({code:n.SpanStatusCode.ERROR}),s.setAttribute("error.type",e.toString()));let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||K,i=`${M} ${a}`;s.setAttributes({"next.route":a,"http.route":a,"next.span_name":i}),s.updateName(i),o&&o!==s&&(o.setAttribute("http.route",a),o.updateName(i))})()}};if(W&&F)await Q(F,void 0);else{let t=$.getActiveScopeSpan();await $.withPropagatedContext(e.headers,()=>$.trace(c.BaseServerSpan.handleRequest,{spanName:`${M} ${C}`,kind:n.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},e=>Q(e,t)),void 0,!W)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:T})},"routeModule",0,N,"serverHooks",0,I,"workAsyncStorage",0,C,"workUnitAsyncStorage",0,T])}];
|
|
1
|
+
module.exports=[35907,e=>{"use strict";var t=e.i(71288),r=e.i(12892),a=e.i(67119),s=e.i(24514);let n="Contains spaces or special characters (# \" ' ` $ \\). Paste the value without them.",o=a.TOOL_IDS.flatMap(e=>a.TOOLS[e].keys.optional),i=()=>Response.json({error:(0,s.REFUSAL_MESSAGE)()},{status:403}),l=e=>t.SERVER_TOOLS[e],u=(e,t)=>e instanceof r.EnvWriteRefused?Response.json({saved:!1,error:"Nothing was saved: a saved value or a key name was refused as unsafe. Check the saved values, or enter them again here."},{status:400}):Response.json({saved:!1,error:t},{status:500});async function d(e){return(0,s.isLocalRequest)(e)?Response.json({configured:(0,r.connectedTools)().length>0,tools:(0,r.connectedTools)(),keys:Object.fromEntries([...r.SETUP_KEYS,...o].map(e=>[e,!!(0,r.env)(e)]))}):i()}async function c(e){let t;if(!(0,s.isLocalRequest)(e))return i();try{t=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let o=(0,s.requireJson)(e);if(o)return o;let d=a.TOOL_IDS.flatMap(e=>a.TOOLS[e].keys.optional.flatMap(r=>"string"==typeof t[r]&&t[r].trim()?[{id:e,k:r,v:t[r].trim()}]:[]));if(d.length&&r.SETUP_KEYS.every(e=>!t[e])){let e={},t={};for(let a of new Set(d.map(e=>e.id))){if(!(0,r.isToolConnected)(a))return Response.json({saved:!1,error:"Finish setup first."},{status:400});let s=Object.fromEntries(d.filter(e=>e.id===a).map(e=>[e.k,e.v])),o=Object.entries(s).filter(([,e])=>r.UNSAFE.test(e));for(let[t]of o)e[t]={ok:!1,error:n};o.length||(Object.assign(e,(await l(a)?.update(s))?.results??Object.fromEntries(Object.keys(s).map(e=>[e,{ok:!0}]))),Object.assign(t,s))}if(Object.values(e).some(e=>!e.ok))return Response.json({saved:!1,results:e},{status:400});try{(0,r.writeEnvLocal)(t)}catch(e){return u(e,".env.local could not be written. Check folder permissions.")}return Response.json({saved:!0,results:e})}let c={},p={},h={};for(let e of a.TOOL_IDS){let s=a.TOOLS[e].keys.required,o=s.filter(e=>"string"==typeof t[e]&&t[e].trim());if(!o.length)continue;let i=p[e]={};for(let e of o){let a=t[e].trim();r.UNSAFE.test(a)?h[e]={ok:!1,error:n}:c[e]=i[e]=a}for(let t of s.filter(e=>!o.includes(e)&&!(0,r.env)(e)))h[t]={ok:!1,error:`Add the ${a.KEY_LABELS[t]}, or clear the ${a.KEY_LABELS[o[0]]} to skip ${a.TOOLS[e].label}.`};for(let e of s.filter(e=>!o.includes(e)&&(0,r.env)(e)))c[e]=i[e]=(0,r.env)(e)}let f=Object.keys(p);if(!f.length)return Response.json({saved:!1,error:"Fill in both fields for at least one tool."},{status:400});if(Object.keys(h).length)return Response.json({saved:!1,results:h},{status:400});let v=await Promise.all(f.map(async e=>({id:e,update:await l(e)?.update(p[e])}))),R=Object.assign({},...v.map(e=>e.update?.results??{}));if(Object.values(R).some(e=>!e.ok))return Response.json({saved:!1,results:R},{status:422});let m=Object.fromEntries(v.flatMap(({id:e,update:t})=>Object.entries(t?.derived??{}).filter(([t])=>a.TOOLS[e].keys.derived?.includes(t))));try{(0,r.writeEnvLocal)({...c,...m})}catch(e){return u(e,"Keys are valid but .env.local could not be written. Check folder permissions.")}return Response.json({saved:!0,results:R})}e.s(["GET",0,d,"POST",0,c])},97962,e=>{"use strict";var t=e.i(12425),r=e.i(83353),a=e.i(47902),s=e.i(37892),n=e.i(54261),o=e.i(39548),i=e.i(68187),l=e.i(63984),u=e.i(88743),d=e.i(24698),c=e.i(13487),p=e.i(48776),h=e.i(29398),f=e.i(31610),v=e.i(45919),R=e.i(93695),m=e.i(12741);e.i(95315);var E=e.i(98732);let g=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/setup/route",pathname:"/api/setup",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/setup/route.ts",nextConfigOutput:"",userland:()=>e.r(35907),...{}}),{workAsyncStorage:O,workUnitAsyncStorage:w,serverHooks:S}=g;async function y(e,t,a){a.requestMeta&&(0,s.setRequestMeta)(e,a.requestMeta),g.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let O="/api/setup/route";O=O.replace(/\/index$/,"")||"/";let w=await g.prepare(e,t,{srcPage:O,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:S,deploymentId:y,params:C,nextConfig:T,parsedUrl:b,isDraftMode:A,prerenderManifest:j,routerServerContext:x,isOnDemandRevalidate:k,revalidateOnlyGenerated:P,resolvedPathname:_,clientReferenceManifest:N,serverActionsManifest:L}=w,q=(0,i.normalizeAppPath)(O),I=!!j.routes[_]&&(g.isDev||(0,m.isRouteCacheOwner)(_,g.cacheOwner,j.routes[_])),M=!!(j.dynamicRoutes[q]||I),U=async()=>((null==x?void 0:x.render404)?await x.render404(e,t,b,!1):t.end("This page could not be found"),null);if(M&&!A){let e=j.dynamicRoutes[q];if(e&&!1===e.fallback&&!I){if(T.adapterPath)return await U();throw new R.NoFallbackError}}let H=null;!M||g.isDev||A||(H="/index"===(H=_)?"/":H);let D=!0===g.isDev||!M,F=M&&!D;L&&N&&(0,o.setManifestsSingleton)({page:O,clientReferenceManifest:N,serverActionsManifest:L});let K=e.method||"GET",$=(0,n.getTracer)(),B=$.getActiveScopeSpan(),G=!!(null==x?void 0:x.isWrappedByNextServer),V=!!(0,s.getRequestMeta)(e,"minimalMode"),Y=(0,s.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,T,j,V);null==Y||Y.resetRequestCache(),globalThis.__incrementalCache=Y;let W={params:C,previewProps:j.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:A,supportsDynamicResponse:D,incrementalCache:Y,hmrRefreshHash:(0,s.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,s)=>g.onRequestError(e,t,a,s,x)},sharedContext:{buildId:S,deploymentId:y}},X=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(X,(0,u.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:r})=>{try{if(!V&&k&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await g.handle(J,W);e.fetchMetrics=W.renderOpts.fetchMetrics;let n=W.renderOpts.pendingWaitUntil;n&&a.waitUntil&&(a.waitUntil(n),n=void 0);let o=W.renderOpts.collectedTags;if(!M)return await (0,p.sendResponse)(X,z,s,n),null;{let e=await s.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(s.headers);o&&(t[v.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=v.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=v.INFINITE_CACHE?!1!==r&&r>0?T.expireTime:void 0:W.renderOpts.collectedExpire;return{value:{kind:E.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:k})},!1,x),t}},Q=async(s,o)=>{try{var i,l;let s=await g.handleResponse({req:e,nextConfig:T,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:P,responseGenerator:Z,waitUntil:a.waitUntil,isMinimalMode:V});if(!M)return;if((null==s||null==(i=s.value)?void 0:i.kind)!==E.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==s||null==(l=s.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",k?"REVALIDATED":s.isMiss?"MISS":s.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(s.value.headers);V&&M||n.delete(v.NEXT_CACHE_TAGS_HEADER),!s.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,f.getCacheControlHeader)(s.cacheControl)),await (0,p.sendResponse)(X,z,new Response(s.value.body,{headers:n,status:s.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:q,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:k})},!1,x),M)throw t;await (0,p.sendResponse)(X,z,new Response(null,{status:500}));return}finally{(()=>{if(!s)return;let e=t.statusCode;s.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(s.setStatus({code:n.SpanStatusCode.ERROR}),s.setAttribute("error.type",e.toString()));let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||q,i=`${K} ${a}`;s.setAttributes({"next.route":a,"http.route":a,"next.span_name":i}),s.updateName(i),o&&o!==s&&(o.setAttribute("http.route",a),o.updateName(i))})()}};if(G&&B)await Q(B,void 0);else{let t=$.getActiveScopeSpan();await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${K} ${O}`,kind:n.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Q(e,t)),void 0,!G)}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:w})},"routeModule",0,g,"serverHooks",0,S,"workAsyncStorage",0,O,"workUnitAsyncStorage",0,w])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_0w8wvdn._.js.map
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
module.exports=[51980,e=>{"use strict";var t=e.i(50227),r=e.i(
|
|
2
|
-
views: ${e(`SELECT percentile(duration, 75) AS loadTime, percentile(backendDuration, 75) AS ttfb, count(*) AS views, apdex(duration, t: 2) AS apdex FROM PageView ${a} FACET pageUrl ${t} LIMIT 200`)}
|
|
3
|
-
timing: ${e(`SELECT percentile(largestContentfulPaint, 75) AS lcp, percentile(cumulativeLayoutShift, 75) AS cls, percentile(interactionToNextPaint, 75) AS inp, percentile(firstInputDelay, 75) AS fid FROM PageViewTiming ${a} FACET pageUrl ${t} LIMIT 200`)}
|
|
4
|
-
errors: ${e(`SELECT count(*) AS errors FROM JavaScriptError ${a} FACET pageUrl ${t} LIMIT 200`)}
|
|
5
|
-
ajax: ${e(`SELECT average(duration) AS ajaxLatency, count(*) AS ajaxCalls, filter(count(*), WHERE httpResponseCode >= 400 OR httpResponseCode = 0) AS ajaxFailed FROM AjaxRequest ${a} FACET pageUrl ${t} LIMIT 200`)}
|
|
6
|
-
} } }`;try{let e=await (0,i.nrGraphql)(this.apiKey,r,15e3),t=e.data?.actor?.account;if(!t?.views)throw Error("New Relic rejected the metrics query. Check your key and account ID.");return this.flattenNrAccount(t)}catch{throw Error("Could not reach New Relic to load metrics.")}}flattenNrAccount(e){let t=e.views?.results??[],r=e.timing?.results??[],a=e.errors?.results??[],n=e.ajax?.results??[],o=new Map;for(let e of t){let t=String(e.pageUrl??e.facet??"");o.set(t,{...o.get(t),...e})}for(let e of r){let t=String(e.pageUrl??e.facet??"");o.set(t,{...o.get(t),...e})}for(let e of a){let t=String(e.pageUrl??e.facet??"");o.set(t,{...o.get(t),...e})}for(let e of n){let t=String(e.pageUrl??e.facet??"");o.set(t,{...o.get(t),...e})}return Array.from(o.values())}mergeVariants(e){if(0===e.length)return null;let t=0,r=0,a=0,n=0,o=0,i=0,s=0,c=0,u=0,p=0,d=0,h=0;for(let g of e){let e=l(g.views);t+=e,r+=1e3*l(g.loadTime)*e,a+=1e3*l(g.ttfb)*e,n+=l(g.apdex)*e,o+=1e3*l(g.lcp)*e,i+=l(g.cls)*e,s+=l(g.inp)*e,c+=l(g.fid)*e,u+=l(g.errors);let f=l(g.ajaxCalls);p+=f,d+=1e3*l(g.ajaxLatency)*f,h+=l(g.ajaxFailed)}let g=t||1;return{loadTime:r/g,lcp:o/g,ttfb:a/g,cls:i/g,inp:s/g,fid:c/g,errorRate:t?u/t*100:0,throughput:t,apdexScore:n/g,...p>0&&{ajaxLatency:d/p,ajaxFailRate:h/p*100}}}onError(e){console.error("New Relic fetch failed:",e)}}let u=null;async function p(e,t){if(!e||!t)return[];let r=`${e}:${t}`;if(u&&u.key===r&&Date.now()-u.at<6e4)return u.pages;let a=await d(e,t);return u={key:r,at:Date.now(),pages:a},a}async function d(e,t){let s,l=`
|
|
7
|
-
query {
|
|
8
|
-
actor {
|
|
9
|
-
account(id: ${Number(t)}) {
|
|
10
|
-
nrql(query: "SELECT count(*) AS views FROM PageView ${a} FACET pageUrl SINCE 24 hours ago LIMIT 200") {
|
|
11
|
-
results
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
`;try{s=await (0,i.nrGraphql)(e,l,1e4)}catch{throw Error("Could not reach New Relic to discover pages.")}let c=s.data?.actor?.account?.nrql?.results;if(!c)throw Error("New Relic rejected the page discovery query. Check your key and account ID.");return function(e){let t=new Map;for(let{url:r,views:a}of e){let e=n(r);null!==e&&t.set(e,(t.get(e)??0)+(Number.isFinite(a)?a:0))}let a=[...t].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).slice(0,20),i=new Map;for(let[e]of a)i.set(o(e),(i.get(o(e))??0)+1);return a.map(([e,t])=>{let a=o(e),n=i.get(a)>1?`${a}-${(0,r.createHash)("sha1").update(e).digest("hex").slice(0,6)}`:a;return{url:e,slug:n,name:"/"===e?"Homepage":e.split("/").filter(Boolean).map(e=>e.replace(/[-_]+/g," ").trim().replace(/\b\w/g,e=>e.toUpperCase())||e).join(" / "),views:t}})}(c.map(e=>({url:String(e.pageUrl??e.facet??""),views:Number(e.views??e.count??0)})))}var h=e.i(60756),g=e.i(83808);class f extends s{apiKey;dsn;constructor(e,t){super(),this.apiKey=e,this.dsn=t}async fetchRows(){let e=this.apiKey&&this.dsn?(0,g.parseSentryDsn)(this.dsn):null;if(!this.apiKey||!e?.ok)return[];try{let t=await (0,g.orgSlugForDsn)(this.apiKey,e);if(!t)return[];let r=await h.default.get(`${e.apiBase}/organizations/${encodeURIComponent(t)}/events/`,{headers:{Authorization:`Bearer ${this.apiKey}`},timeout:1e4,params:{project:e.projectId,field:["url","title","count()","last_seen()"],query:"event.type:error",statsPeriod:"24h",sort:"-last_seen",per_page:100},paramsSerializer:{indexes:null}});return r.data?.data??[]}catch(e){throw console.error("Sentry API error:",h.default.isAxiosError(e)?e.response?.status:"request failed"),Error("Sentry request failed")}}mergeVariants(e){if(0===e.length)return null;let t=0,r=[];for(let a of e){let e=Number(a["count()"]??0);t+=e,r.length<5&&r.push({title:a.title??"Unknown error",count:e,lastSeen:a["last_seen()"]??""})}return{errorCount:t,errorRate:0,warningCount:0,latestErrors:r}}onError(e){throw e}}var R=e.i(12892);let m=[];var w=e.i(67119),E=e.i(90770);async function v(){let e=(0,R.connectedTools)(),t=(0,w.sourcesFor)(e);if(!e.length)return Response.json({configured:!1,tools:e,sources:t,project:S(),pages:[],history:[],timestamp:new Date().toISOString()});if(!e.includes("new-relic"))return Response.json({configured:!0,tools:e,sources:t,project:S(),pages:[],history:[],timestamp:new Date().toISOString()});try{var r;let a=performance.now(),n=await p((0,R.env)("NEWRELIC_API_KEY"),(0,R.env)("NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID"));if(0===n.length)return Response.json({configured:!0,tools:e,sources:t,project:S(),pages:[],history:m,timestamp:new Date().toISOString()});let o=performance.now(),i=new c((0,R.env)("NEWRELIC_API_KEY"),(0,R.env)("NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID")).byPath().then(e=>((0,E.recordTiming)("New Relic: metrics",performance.now()-o),e)),s=performance.now(),l=e.includes("sentry")?new f((0,R.env)("SENTRY_API_KEY"),(0,R.env)("SENTRY_DSN")).byPath().then(e=>((0,E.recordTiming)("Sentry: events",performance.now()-s),e)):Promise.resolve(null),[u,d]=await Promise.all([i,l.catch(()=>void 0)]),h=void 0===d?["sentry"]:[],g=d??{};console.log(`[timing] combined New Relic + Sentry batch: ${Math.round(performance.now()-a)}ms`);let v=(r=n.map(({name:t,slug:r,url:a,views:n})=>{var o,i;let s=u[a]??y,l=e.includes("sentry")&&!h.length?g[a]??C:void 0;return{name:t,slug:r,url:a,visitors:(o=n)>=1e3?`${(o/1e3).toFixed(1)}k`:String(o),status:(i=s).errorRate>5?"Critical":i.errorRate>1||i.apdexScore<.9?"Warning":"Healthy",newRelic:s,sentry:l,recordedAt:new Date().toISOString()}}),r.map(e=>{let r,a;if(e.metrics&&e.byTool)return e;let n={...e.newRelic&&{"new-relic":{traffic:{count:(r=e.newRelic).throughput},loadTime:r.loadTime,apdex:r.apdexScore,vitals:{lcp:r.lcp,cls:r.cls,inp:r.inp,ttfb:r.ttfb,fid:r.fid},...void 0!==r.ajaxLatency&&{ajax:{latency:r.ajaxLatency,failRate:r.ajaxFailRate??0}},errorRate:r.errorRate}},...e.sentry&&{sentry:{errors:{count:(a=e.sentry).errorCount,latest:a.latestErrors}}}};return{...e,metrics:(0,w.mergeMetrics)(n,t,h),byTool:n}}));return m.push({timestamp:new Date().toISOString(),sources:t,pages:v}),m.length>20&&m.shift(),Response.json({configured:!0,tools:e,failed:h,sources:t,project:S(),pages:v,history:m,timestamp:new Date().toISOString()})}catch(e){return console.error("Metrics API error:",e),Response.json({error:e instanceof Error?e.message:"Unknown error"},{status:500})}}let y={loadTime:0,lcp:0,ttfb:0,cls:0,inp:0,fid:0,errorRate:0,throughput:0,apdexScore:0},C={errorCount:0,errorRate:0,warningCount:0,latestErrors:[]};function S(){return(0,R.env)("METRICFLOW_PROJECT_NAME")||(0,t.basename)(process.cwd())}e.s(["GET",0,v],51980)},6408,e=>{"use strict";var t=e.i(12425),r=e.i(83353),a=e.i(47902),n=e.i(37892),o=e.i(54261),i=e.i(39548),s=e.i(68187),l=e.i(63984),c=e.i(88743),u=e.i(24698),p=e.i(13487),d=e.i(48776),h=e.i(29398),g=e.i(31610),f=e.i(45919),R=e.i(93695),m=e.i(12741);e.i(95315);var w=e.i(98732);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/metrics/route",pathname:"/api/metrics",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/metrics/route.ts",nextConfigOutput:"",userland:()=>e.r(51980),...{}}),{workAsyncStorage:v,workUnitAsyncStorage:y,serverHooks:C}=E;async function S(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/metrics/route";v=v.replace(/\/index$/,"")||"/";let y=await E.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:S,params:A,nextConfig:T,parsedUrl:x,isDraftMode:I,prerenderManifest:N,routerServerContext:b,isOnDemandRevalidate:P,revalidateOnlyGenerated:O,resolvedPathname:_,clientReferenceManifest:j,serverActionsManifest:U}=y,$=(0,s.normalizeAppPath)(v),L=!!N.routes[_]&&(E.isDev||(0,m.isRouteCacheOwner)(_,E.cacheOwner,N.routes[_])),M=!!(N.dynamicRoutes[$]||L),q=async()=>((null==b?void 0:b.render404)?await b.render404(e,t,x,!1):t.end("This page could not be found"),null);if(M&&!I){let e=N.dynamicRoutes[$];if(e&&!1===e.fallback&&!L){if(T.adapterPath)return await q();throw new R.NoFallbackError}}let D=null;!M||E.isDev||I||(D="/index"===(D=_)?"/":D);let F=!0===E.isDev||!M,H=M&&!F;U&&j&&(0,i.setManifestsSingleton)({page:v,clientReferenceManifest:j,serverActionsManifest:U});let k=e.method||"GET",K=(0,o.getTracer)(),B=K.getActiveScopeSpan(),W=!!(null==b?void 0:b.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,T,N,V);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let z={params:A,previewProps:N.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:I,supportsDynamicResponse:F,incrementalCache:G,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>E.onRequestError(e,t,a,n,b)},sharedContext:{buildId:C,deploymentId:S}},X=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),J=c.NextRequestAdapter.fromNodeNextRequest(X,(0,c.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:r})=>{try{if(!V&&P&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await E.handle(J,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let o=z.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let i=z.renderOpts.collectedTags;if(!M)return await (0,d.sendResponse)(X,Y,n,o),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);i&&(t[f.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,a=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=f.INFINITE_CACHE?!1!==r&&r>0?T.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,b),t}},Q=async(n,i)=>{try{var s,l;let n=await E.handleResponse({req:e,nextConfig:T,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:O,responseGenerator:Z,waitUntil:a.waitUntil,isMinimalMode:V});if(!M)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",P?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),I&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&M||o.delete(f.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,g.getCacheControlHeader)(n.cacheControl)),await (0,d.sendResponse)(X,Y,new Response(n.value.body,{headers:o,status:n.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:$,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,b),M)throw t;await (0,d.sendResponse)(X,Y,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:o.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||$,s=`${k} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),i&&i!==n&&(i.setAttribute("http.route",a),i.updateName(s))})()}};if(W&&B)await Q(B,void 0);else{let t=K.getActiveScopeSpan();await K.withPropagatedContext(e.headers,()=>K.trace(u.BaseServerSpan.handleRequest,{spanName:`${k} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":k,"http.target":e.url}},e=>Q(e,t)),void 0,!W)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:v,workUnitAsyncStorage:y})},"routeModule",0,E,"serverHooks",0,C,"workAsyncStorage",0,v,"workUnitAsyncStorage",0,y])}];
|
|
1
|
+
module.exports=[51980,e=>{"use strict";var t=e.i(50227),r=e.i(71288),a=e.i(39445),n=e.i(12892);let i=[];var o=e.i(67119);async function s(){let e=(0,n.connectedTools)(),t=(0,o.sourcesFor)(e);if(!e.length)return Response.json({configured:!1,tools:e,sources:t,project:l(),pages:[],history:[],timestamp:new Date().toISOString()});let s=t.pages;if(!s)return Response.json({configured:!0,tools:e,sources:t,project:l(),pages:[],history:[],timestamp:new Date().toISOString()});let u=performance.now(),c=await Promise.allSettled(e.map(e=>r.SERVER_TOOLS[e].poll())),d=e.filter((e,t)=>"rejected"===c[t].status);if(console.log(`[timing] combined tool batch: ${Math.round(performance.now()-u)}ms`),d.includes(s))return Response.json({error:`Could not load ${o.TOOLS[s].label} data.`},{status:500});let p=Object.fromEntries(e.flatMap((e,t)=>{let r=c[t];return"fulfilled"===r.status?[[e,r.value]]:[]})),h=(0,a.buildPages)(p[s].pages??[]);if(0===h.length)return Response.json({configured:!0,tools:e,sources:t,project:l(),pages:[],history:i,timestamp:new Date().toISOString()});let R=h.map(({name:a,slug:n,url:i,views:s})=>{var l;let u={},c={};for(let t of e){if(d.includes(t))continue;let e=r.SERVER_TOOLS[t],a=p[t].legacy[i]?{metrics:p[t].byPath[i],legacy:p[t].legacy[i]}:e.emptyPage();u[t]=a.metrics,c[e.legacyField]=a.legacy}let h=(0,o.mergeMetrics)(u,t,d);return{name:a,slug:n,url:i,visitors:(l=s)>=1e3?`${(l/1e3).toFixed(1)}k`:String(l),status:function(e){if(void 0!==e.errorRate&&void 0!==e.apdex)return e.errorRate>5?"Critical":e.errorRate>1||e.apdex<.9?"Warning":"Healthy"}(h),...c,recordedAt:new Date().toISOString(),metrics:h,byTool:u}});return Object.values(p).some(e=>e.fresh)&&(i.push({timestamp:new Date().toISOString(),sources:t,pages:R}),i.length>20&&i.shift()),Response.json({configured:!0,tools:e,failed:d,sources:t,project:l(),pages:R,history:i,timestamp:new Date().toISOString()})}function l(){return(0,n.env)("METRICFLOW_PROJECT_NAME")||(0,t.basename)(process.cwd())}e.s(["GET",0,s],51980)},6408,e=>{"use strict";var t=e.i(12425),r=e.i(83353),a=e.i(47902),n=e.i(37892),i=e.i(54261),o=e.i(39548),s=e.i(68187),l=e.i(63984),u=e.i(88743),c=e.i(24698),d=e.i(13487),p=e.i(48776),h=e.i(29398),R=e.i(31610),g=e.i(45919),m=e.i(93695),f=e.i(12741);e.i(95315);var v=e.i(98732);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/metrics/route",pathname:"/api/metrics",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/metrics/route.ts",nextConfigOutput:"",userland:()=>e.r(51980),...{}}),{workAsyncStorage:E,workUnitAsyncStorage:C,serverHooks:S}=w;async function y(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),w.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/metrics/route";E=E.replace(/\/index$/,"")||"/";let C=await w.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!C)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:S,deploymentId:y,params:O,nextConfig:x,parsedUrl:T,isDraftMode:A,prerenderManifest:b,routerServerContext:P,isOnDemandRevalidate:_,revalidateOnlyGenerated:N,resolvedPathname:I,clientReferenceManifest:M,serverActionsManifest:D}=C,H=(0,s.normalizeAppPath)(E),j=!!b.routes[I]&&(w.isDev||(0,f.isRouteCacheOwner)(I,w.cacheOwner,b.routes[I])),q=!!(b.dynamicRoutes[H]||j),U=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,T,!1):t.end("This page could not be found"),null);if(q&&!A){let e=b.dynamicRoutes[H];if(e&&!1===e.fallback&&!j){if(x.adapterPath)return await U();throw new m.NoFallbackError}}let k=null;!q||w.isDev||A||(k="/index"===(k=I)?"/":k);let F=!0===w.isDev||!q,L=q&&!F;D&&M&&(0,o.setManifestsSingleton)({page:E,clientReferenceManifest:M,serverActionsManifest:D});let $=e.method||"GET",K=(0,i.getTracer)(),B=K.getActiveScopeSpan(),G=!!(null==P?void 0:P.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await w.getIncrementalCache(e,x,b,V);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let X={params:O,previewProps:b.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,isDraftMode:A,supportsDynamicResponse:F,incrementalCache:W,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>w.onRequestError(e,t,a,n,P)},sharedContext:{buildId:S,deploymentId:y}},z=new l.NodeNextRequest(e),J=new l.NodeNextResponse(t),Z=u.NextRequestAdapter.fromNodeNextRequest(z,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!V&&_&&N&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await w.handle(Z,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let i=X.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let o=X.renderOpts.collectedTags;if(!q)return await (0,p.sendResponse)(z,J,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[g.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==r&&r>0?x.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:_})},!1,P),t}},Y=async(n,o)=>{try{var s,l;let n=await w.handleResponse({req:e,nextConfig:x,cacheKey:k,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:_,revalidateOnlyGenerated:N,responseGenerator:Q,waitUntil:a.waitUntil,isMinimalMode:V});if(!q)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",_?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&q||i.delete(g.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,R.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(z,J,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof m.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:_})},!1,P),q)throw t;await (0,p.sendResponse)(z,J,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||H,s=`${$} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",a),o.updateName(s))})()}};if(G&&B)await Y(B,void 0);else{let t=K.getActiveScopeSpan();await K.withPropagatedContext(e.headers,()=>K.trace(c.BaseServerSpan.handleRequest,{spanName:`${$} ${E}`,kind:i.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},e=>Y(e,t)),void 0,!G)}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:C})},"routeModule",0,w,"serverHooks",0,S,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,C])}];
|
|
17
2
|
|
|
18
3
|
//# sourceMappingURL=_0wct7-r._.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
module.exports=[89378,e=>{"use strict";var t=e.i(12892),n=e.i(24514),r=e.i(
|
|
1
|
+
module.exports=[89378,e=>{"use strict";var t=e.i(12892),n=e.i(24514),r=e.i(83808),a=e.i(60756),o=e.i(84594);async function i(e,t,n){let r=`{ actor { account(id: ${Number(t)}) { nrql(query: "${n}") { results } } } }`,a=await (0,o.nrGraphql)(e,r,8e3),i=a?.data?.actor?.account?.nrql?.results?.[0];if(!i)throw Error("no result");return i}async function s(e,t,n){try{let r=await i(e,t,`SELECT count(*) AS n, latest(timestamp) AS t FROM ${n} SINCE 5 minutes ago`),a=Number(r.n??0);return{recent:a,lastEventAt:a>0&&r.t?new Date(Number(r.t)).toISOString():null}}catch{return{recent:null,lastEventAt:null,error:"Could not read from New Relic."}}}async function l(e,t){let n=(0,r.parseSentryDsn)(t);if(!n.ok)return{recent:null,lastEventAt:null,error:"Could not read from Sentry."};try{let t=await (0,r.orgSlugForDsn)(e,n);if(!t)return{recent:null,lastEventAt:null,error:"Could not read from Sentry."};let o=await a.default.get(`${n.apiBase}/organizations/${encodeURIComponent(t)}/issues/`,{headers:{Authorization:`Bearer ${e}`},params:{project:n.projectId,sort:"date",limit:1,statsPeriod:"24h"},timeout:8e3}),i=o.data?.[0]?.lastSeen;return{recent:i&&Date.now()-new Date(i).getTime()<3e5?1:0,lastEventAt:i??null}}catch{return{recent:null,lastEventAt:null,error:"Could not read from Sentry."}}}async function u(e,t){try{let n=await (0,o.withRegion)(n=>a.default.post(`${n.ingest}/v1/accounts/${Number(t)}/events`,[{eventType:"MetricFlowEvent",name:"test",value:1,source:"connect-page"}],{headers:{"Api-Key":e},timeout:8e3}));return n.data?.success===!0?null:"New Relic did not accept the event."}catch(t){let e=a.default.isAxiosError(t)?t.response?.status:void 0;if(401===e||403===e)return'New Relic rejected the Insert key. It must be an "Ingest - License" key for this account.';if(404===e)return"New Relic did not recognise the account ID.";return"Could not reach New Relic to send the test event."}}async function c(e,t){let n=Number(t),r=`{ actor {
|
|
2
2
|
entitySearch(query: "domain='BROWSER' AND accountId=${n}") { count results { entities { name ... on BrowserApplicationEntityOutline { applicationId } } } }
|
|
3
3
|
apiAccess { keySearch(query: { types: INGEST, scope: { accountIds: [${n}] } }) { keys { ... on ApiAccessIngestKey { ingestType key } } } }
|
|
4
|
-
} }`;try{let t=await (0,
|
|
4
|
+
} }`;try{let t=await (0,o.nrGraphql)(e,r,1e4),n=t?.data?.actor?.entitySearch,a=n?.results?.entities?.[0],i=t?.data?.actor?.apiAccess?.keySearch?.keys?.find(e=>"BROWSER"===e.ingestType)?.key,s=i&&/^NRJS-[a-z0-9]+$/i.test(i)?i:null;return{appCount:n?.count??0,appName:a?.name??null,applicationId:a?.applicationId?String(a.applicationId):null,browserKey:s}}catch{return{appCount:0,appName:null,applicationId:null,browserKey:null,error:"Could not read your Browser app from New Relic."}}}let d=()=>Response.json({error:(0,n.REFUSAL_MESSAGE)()},{status:403});async function p(e){if(!(0,n.isLocalRequest)(e))return d();let a=(0,t.connectedTools)();if(!a.length)return Response.json({configured:!1});let o=(0,t.isToolConnected)("new-relic"),i=(0,t.isToolConnected)("sentry"),u=(0,t.env)("NEWRELIC_API_KEY"),p=(0,t.env)("NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID"),[h,R,v,E,f]=await Promise.all([o?s(u,p,"PageView"):void 0,o?s(u,p,"AjaxRequest"):void 0,o?s(u,p,"MetricFlowEvent"):void 0,i?l((0,t.env)("SENTRY_API_KEY"),(0,t.env)("SENTRY_DSN")):void 0,o?c(u,p):void 0]);return Response.json({configured:!0,tools:a,accountId:o?p:void 0,region:o&&"eu"===(0,t.env)(t.REGION_KEY)?"eu":void 0,insertKeySet:!!(0,t.env)(t.INSERT_KEY),dsn:i?(0,r.publicDsn)((0,t.env)("SENTRY_DSN"))??void 0:void 0,browser:h,ajax:R,custom:v,sentry:E,setup:f})}async function h(e){if(!(0,n.isLocalRequest)(e))return d();let r=(0,n.requireJson)(e);if(r)return r;if(!(0,t.env)(t.INSERT_KEY))return Response.json({sent:!1,error:"Add your Insert key first."},{status:400});let a=await u((0,t.env)(t.INSERT_KEY),(0,t.env)("NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID"));return a?Response.json({sent:!1,error:a},{status:502}):Response.json({sent:!0})}e.s(["GET",0,p,"POST",0,h],89378)},66653,e=>{"use strict";var t=e.i(12425),n=e.i(83353),r=e.i(47902),a=e.i(37892),o=e.i(54261),i=e.i(39548),s=e.i(68187),l=e.i(63984),u=e.i(88743),c=e.i(24698),d=e.i(13487),p=e.i(48776),h=e.i(29398),R=e.i(31610),v=e.i(45919),E=e.i(93695),f=e.i(12741);e.i(95315);var m=e.i(98732);let y=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/connect/route",pathname:"/api/connect",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/connect/route.ts",nextConfigOutput:"",userland:()=>e.r(89378),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:g,serverHooks:C}=y;async function S(e,t,r){r.requestMeta&&(0,a.setRequestMeta)(e,r.requestMeta),y.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/connect/route";w=w.replace(/\/index$/,"")||"/";let g=await y.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:C,deploymentId:S,params:A,nextConfig:N,parsedUrl:T,isDraftMode:I,prerenderManifest:_,routerServerContext:x,isOnDemandRevalidate:P,revalidateOnlyGenerated:b,resolvedPathname:O,clientReferenceManifest:q,serverActionsManifest:D}=g,k=(0,s.normalizeAppPath)(w),U=!!_.routes[O]&&(y.isDev||(0,f.isRouteCacheOwner)(O,y.cacheOwner,_.routes[O])),M=!!(_.dynamicRoutes[k]||U),H=async()=>((null==x?void 0:x.render404)?await x.render404(e,t,T,!1):t.end("This page could not be found"),null);if(M&&!I){let e=_.dynamicRoutes[k];if(e&&!1===e.fallback&&!U){if(N.adapterPath)return await H();throw new E.NoFallbackError}}let K=null;!M||y.isDev||I||(K="/index"===(K=O)?"/":K);let $=!0===y.isDev||!M,j=M&&!$;D&&q&&(0,i.setManifestsSingleton)({page:w,clientReferenceManifest:q,serverActionsManifest:D});let L=e.method||"GET",B=(0,o.getTracer)(),F=B.getActiveScopeSpan(),G=!!(null==x?void 0:x.isWrappedByNextServer),Y=!!(0,a.getRequestMeta)(e,"minimalMode"),W=(0,a.getRequestMeta)(e,"incrementalCache")||await y.getIncrementalCache(e,N,_,Y);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let X={params:A,previewProps:_.preview,renderOpts:{experimental:{authInterrupts:!!N.experimental.authInterrupts,useCacheTimeout:N.experimental.useCacheTimeout},cacheComponents:!!N.cacheComponents,validationLevel:N.experimental.instantInsights.validationLevel,isDraftMode:I,supportsDynamicResponse:$,incrementalCache:W,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:N.cacheLife,staticPageGenerationTimeout:N.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,a)=>y.onRequestError(e,t,r,a,x)},sharedContext:{buildId:C,deploymentId:S}},z=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(z,(0,u.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:n})=>{try{if(!Y&&P&&b&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await y.handle(J,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let o=X.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let i=X.renderOpts.collectedTags;if(!M)return await (0,p.sendResponse)(z,V,a,o),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);i&&(t[v.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=v.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,r=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=v.INFINITE_CACHE?!1!==n&&n>0?N.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==n?void 0:n.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:P})},!1,x),t}},Q=async(a,i)=>{try{var s,l;let a=await y.handleResponse({req:e,nextConfig:N,cacheKey:K,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:_,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:b,responseGenerator:Z,waitUntil:r.waitUntil,isMinimalMode:Y});if(!M)return;if((null==a||null==(s=a.value)?void 0:s.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==a||null==(l=a.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Y||t.setHeader("x-nextjs-cache",P?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),I&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);Y&&M||o.delete(v.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,R.getCacheControlHeader)(a.cacheControl)),await (0,p.sendResponse)(z,V,new Response(a.value.body,{headers:o,status:a.value.status||200}));return}catch(t){if(t instanceof E.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:P})},!1,x),M)throw t;await (0,p.sendResponse)(z,V,new Response(null,{status:500}));return}finally{(()=>{if(!a)return;let e=t.statusCode;a.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(a.setStatus({code:o.SpanStatusCode.ERROR}),a.setAttribute("error.type",e.toString()));let n=B.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route")||k,s=`${L} ${r}`;a.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),a.updateName(s),i&&i!==a&&(i.setAttribute("http.route",r),i.updateName(s))})()}};if(G&&F)await Q(F,void 0);else{let t=B.getActiveScopeSpan();await B.withPropagatedContext(e.headers,()=>B.trace(c.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Q(e,t)),void 0,!G)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:g})},"routeModule",0,y,"serverHooks",0,C,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,g])}];
|
|
5
5
|
|
|
6
6
|
//# sourceMappingURL=_1l9d64o._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[52040,1730,7779,a=>{"use strict";a.i(19973),a.s([],52040)
|
|
1
|
+
module.exports=[52040,1730,7779,a=>{"use strict";a.i(19973),a.s([],52040);var b=a.i(7969);let c={name:"activity",size:24,node:[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]};c.node;let d=(0,b.default)(c),e={name:"bug",size:24,node:[["path",{d:"M12 20v-9",key:"1qisl0"}],["path",{d:"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z",key:"uouzyp"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M21 21a4 4 0 0 0-3.81-4",key:"1b0z45"}],["path",{d:"M21 5a4 4 0 0 1-3.55 3.97",key:"5cxbf6"}],["path",{d:"M22 13h-4",key:"1jl80f"}],["path",{d:"M3 21a4 4 0 0 1 3.81-4",key:"1fjd4g"}],["path",{d:"M3 5a4 4 0 0 0 3.55 3.97",key:"1d7oge"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M9 7.13V6a3 3 0 1 1 6 0v1.13",key:"1vgav8"}]]};e.node;let f=(0,b.default)(e);function g(a){if(!Number.isFinite(a))return"—";let b=Math.abs(Math.round(a));if(b<1e3)return`${Math.round(a)}ms`;if(b<59950)return`${+(a/1e3).toFixed(1)}s`;let c=Math.round(b/1e3),d=a<0?"-":"";return c<3600?`${d}${Math.floor(c/60)}m ${c%60}s`:`${d}${Math.floor(c/3600)}h ${Math.floor(c%3600/60)}m`}let h=["pages","traffic","loadTime","apdex","vitals","ajax","errorRate","errors"],i=a=>a.length?a.reduce((a,b)=>a+b,0)/a.length:0,j={"new-relic":{label:"New Relic",icon:d,description:"Real-user performance per page: load time, Core Web Vitals, throughput and Apdex.",connectReason:"Add your New Relic keys to see load time and Core Web Vitals for each page.",setupNote:"The key that sends events (Ingest - License) is separate and is added later on the Connect page.",keys:{required:["NEWRELIC_API_KEY","NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID"],optional:["NEWRELIC_INSERT_KEY"],derived:["NEWRELIC_REGION"]},capabilities:["pages","traffic","loadTime","apdex","vitals","ajax","errorRate"],stats:a=>[{label:"Avg Load Time",value:g(i(a.map(a=>a.newRelic.loadTime)))},{label:"Avg LCP",value:g(i(a.map(a=>a.newRelic.lcp)))},{label:"Avg TTFB",value:g(i(a.map(a=>a.newRelic.ttfb)))},{label:"Avg Apdex",value:i(a.map(a=>a.newRelic.apdexScore)).toFixed(2)}],columns:[{needs:"loadTime",header:"Load",cell:a=>g(a.newRelic.loadTime)},{needs:"vitals",header:"LCP",cell:a=>g(a.newRelic.lcp)},{needs:"vitals",header:"TTFB",cell:a=>g(a.newRelic.ttfb)},{needs:"vitals",header:"CLS",cell:a=>a.newRelic.cls.toFixed(2)},{needs:"vitals",header:"INP",cell:a=>{let b=a.newRelic.inp;return void 0===b?"—":g(b)}},{needs:"errorRate",header:"Error Rate",cell:a=>`${a.newRelic.errorRate.toFixed(2)}%`},{needs:"traffic",header:"Throughput",cell:a=>a.newRelic.throughput.toLocaleString()},{needs:"apdex",header:"Apdex",cell:a=>a.newRelic.apdexScore.toFixed(2)}]},sentry:{label:"Sentry",icon:f,description:"Errors captured per page over the last 24 hours.",connectReason:"Add your Sentry keys to see the errors on each page.",keys:{required:["SENTRY_API_KEY","SENTRY_DSN"],optional:[]},capabilities:["errors"],stats:a=>{let b=a.reduce((a,b)=>(b.sentry?.errorCount??0)>(a?.sentry?.errorCount??0)?b:a,null);return[{label:"Total Errors",value:String(a.map(a=>a.sentry?.errorCount??0).reduce((a,b)=>a+b,0))},{label:"Pages With Errors",value:`${a.filter(a=>(a.sentry?.errorCount??0)>0).length} of ${a.length}`},{label:"Noisiest Page",value:b?.name??"None"}]},columns:[{needs:"errors",header:"Errors",cell:a=>String(a.sentry?.errorCount??0)},{needs:"errors",header:"Latest Error",cell:a=>a.sentry?.latestErrors[0]?.title??"—"},{needs:"errors",header:"Last Seen",cell:a=>{let b=Date.parse(a.sentry?.latestErrors[0]?.lastSeen??"");return Number.isNaN(b)?"—":new Date(b).toLocaleString()}}]}};Object.fromEntries(Object.entries({NEWRELIC_API_KEY:{label:"New Relic User API key",secret:!0,help:'READS your data (starts NRAK-). Create it under API keys > key type "User".'},NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID:{label:"New Relic account ID",secret:!1,help:"A plain number, shown next to your keys in New Relic."},SENTRY_API_KEY:{label:"Sentry auth token",secret:!0,help:"Lets the dashboard read issues (scopes: project:read, event:read)."},SENTRY_DSN:{label:"Sentry DSN",secret:!1,help:"Project settings, then Client Keys (DSN). The project and host are read from it."}}).map(([a,b])=>[a,b.label]));let k=Object.keys(j);a.s(["TOOLS",0,j,"TOOL_IDS",0,k,"isToolId",0,a=>Object.hasOwn(j,a),"sourcesFor",0,function(a){let b={};for(let c of h){let d=k.find(b=>a.includes(b)&&j[b].capabilities.includes(c));d&&(b[c]=d)}return b}],1730),a.i(2157),a.i(50227),k.flatMap(a=>j[a].keys.required);let l="NEWRELIC_REGION",m={us:{graphql:"https://api.newrelic.com/graphql",ingest:"https://insights-collector.newrelic.com"},eu:{graphql:"https://api.eu.newrelic.com/graphql",ingest:"https://insights-collector.eu01.nr-data.net"}};function n(a){return process.env[a]??""}let o=a=>j[a].keys.required.every(a=>n(a));a.s(["REGION_KEY",0,l,"connectedTools",0,()=>k.filter(o),"env",0,n,"isToolConnected",0,o,"nrHosts",0,(a="eu"===process.env[l]?"eu":"us")=>m[a]],7779)},79898,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DynamicServerError:function(){return g},isDynamicServerError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="DYNAMIC_SERVER_USAGE";class g extends Error{constructor(a){super(`Dynamic server usage: ${a}`),this.description=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&"string"==typeof a.digest&&a.digest===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},85827,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={StaticGenBailoutError:function(){return g},isStaticGenBailoutError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="NEXT_STATIC_GEN_BAILOUT";class g extends Error{constructor(...a){super(...a),this.code=f}}function h(a){return"object"==typeof a&&null!==a&&"code"in a&&a.code===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},65297,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={METADATA_BOUNDARY_NAME:function(){return f},OUTLET_BOUNDARY_NAME:function(){return h},ROOT_LAYOUT_BOUNDARY_NAME:function(){return i},VIEWPORT_BOUNDARY_NAME:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="__next_metadata_boundary__",g="__next_viewport_boundary__",h="__next_outlet_boundary__",i="__next_root_layout_boundary__"},82299,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={atLeastOneTask:function(){return h},scheduleImmediate:function(){return g},scheduleOnNextTick:function(){return f},waitAtLeastOneReactRenderTask:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a=>{Promise.resolve().then(()=>{process.nextTick(a)})},g=a=>{setImmediate(a)};function h(){return new Promise(a=>g(a))}function i(){return new Promise(a=>setImmediate(a))}},55688,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={createDynamicBodyError:function(){return g},createDynamicBodyErrorInNavigation:function(){return j},createDynamicMetadataError:function(){return n},createDynamicOrRuntimeBodyError:function(){return k},createDynamicOrRuntimeMetadataError:function(){return s},createDynamicOrRuntimeViewportError:function(){return r},createDynamicViewportError:function(){return q},createLinkBodyErrorInNavigation:function(){return i},createLinkMetadataError:function(){return l},createLinkViewportError:function(){return o},createRuntimeBodyError:function(){return f},createRuntimeBodyErrorInNavigation:function(){return h},createRuntimeMetadataError:function(){return m},createRuntimeViewportError:function(){return p},logBuildDebugHint:function(){return t}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Object.defineProperty(Error(`Route "${a}": Next.js encountered runtime data during prerendering.
|
|
2
2
|
|
|
3
3
|
\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`<Suspense>\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.
|
|
4
4
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[49719,(a,b,c)=>{b.exports=a.x("assert",()=>require("assert"))},27699,(a,b,c)=>{b.exports=a.x("events",()=>require("events"))},22734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},21517,(a,b,c)=>{b.exports=a.x("http",()=>require("http"))},25328,(a,b,c)=>{b.exports=a.x("http2",()=>require("http2"))},24836,(a,b,c)=>{b.exports=a.x("https",()=>require("https"))},4446,(a,b,c)=>{b.exports=a.x("net",()=>require("net"))},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},46786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},88947,(a,b,c)=>{b.exports=a.x("stream",()=>require("stream"))},55004,(a,b,c)=>{b.exports=a.x("tls",()=>require("tls"))},70722,(a,b,c)=>{b.exports=a.x("tty",()=>require("tty"))},92509,(a,b,c)=>{b.exports=a.x("url",()=>require("url"))},6461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},71385,a=>{a.v("/_next/static/media/icon.23mz8iwcatff2.svg"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},48760,a=>{"use strict";let b={src:a.i(71385).default,width:32,height:32};a.s(["default",0,b])},33951,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(18060).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/node_modules/.pnpm/lucide-react@1.47.0_react@19.2.8/node_modules/lucide-react/dist/esm/Icon.mjs from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/node_modules/.pnpm/lucide-react@1.47.0_react@19.2.8/node_modules/lucide-react/dist/esm/Icon.mjs","default")},50254,a=>{"use strict";var b=a.i(33951);a.n(b)},7969,a=>{"use strict";var b=a.i(56149),c=a.i(50254);a.s(["default",0,function(a,d=[],e=[]){let f,g="string"==typeof a?function(a,b,c=[]){if(null==b)throw Error("[lucide]: iconNode is required when icon name is used");return{name:a?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),size:24,node:b,...c.length>0?{aliases:c}:{}}}(a,d,e):a,h=(0,b.forwardRef)(({className:a,...d},e)=>(0,b.createElement)(c.default,{ref:e,icon:g,className:a,...d}));return g.name&&(h.displayName=(f=(a=>{let b="",c=!1;for(let d of a){if("-"===d||"_"===d||d<=" "){c=b.length>0;continue}0===b.length?b+=d.toLowerCase():b+=c?d.toUpperCase():d,c=!1}return b})(g.name)).charAt(0).toUpperCase()+f.slice(1)),h}],7969)},28281,a=>{"use strict";var b=a.i(46797),c=a.i(282),d=a.i(89196);a.i(60796);let e=(0,b.instrumentModuleGetter)(()=>a.r(48760)),f=(0,b.instrumentModuleGetter)(()=>a.r(70864)),g=(0,b.instrumentModuleGetter)(()=>a.r(45538)),h=(0,b.instrumentModuleGetter)(()=>a.r(54254)),i=(0,b.instrumentModuleGetter)(()=>a.r(73833)),j=(0,b.instrumentModuleGetter)(()=>a.r(35191)),k=(0,b.instrumentModuleGetter)(()=>a.r(68119)),l=(0,b.instrumentModuleGetter)(()=>a.r(78932)),m=(0,b.instrumentModuleGetter)(()=>a.r(27991)),n=["",{children:["performance",{children:["[slug]",{children:["__PAGE__",{},{metadata:{},page:[(0,b.instrumentModuleGetter)(()=>a.r(77450)),"[project]/app/performance/[slug]/page.tsx"]},[]]},{metadata:{},loading:[m,"[project]/app/performance/[slug]/loading.tsx"]},[]]},{metadata:{},loading:[l,"[project]/app/performance/loading.tsx"]},[]]},{metadata:{icon:[async()=>{let a=(0,d.interopDefault)(await e());return[{url:`/icon.svg?${a.src.split("/").splice(-1)[0]}`,sizes:"any",type:"image/svg+xml"}]}]},layout:[f,"[project]/app/layout.tsx"],loading:[g,"[project]/app/loading.tsx"],"not-found":[h,"[project]/node_modules/.pnpm/next@16.3.8_@babel+core@7.29.7_supports-color@8.1.1__@opentelemetry+api@1.9.1_@types+no_c2c791d25241ae4161c9f48ecf186c77/node_modules/next/dist/client/components/builtin/not-found.js"],forbidden:[i,"[project]/node_modules/.pnpm/next@16.3.8_@babel+core@7.29.7_supports-color@8.1.1__@opentelemetry+api@1.9.1_@types+no_c2c791d25241ae4161c9f48ecf186c77/node_modules/next/dist/client/components/builtin/forbidden.js"],unauthorized:[j,"[project]/node_modules/.pnpm/next@16.3.8_@babel+core@7.29.7_supports-color@8.1.1__@opentelemetry+api@1.9.1_@types+no_c2c791d25241ae4161c9f48ecf186c77/node_modules/next/dist/client/components/builtin/unauthorized.js"],"global-error":[k,"[project]/node_modules/.pnpm/next@16.3.8_@babel+core@7.29.7_supports-color@8.1.1__@opentelemetry+api@1.9.1_@types+no_c2c791d25241ae4161c9f48ecf186c77/node_modules/next/dist/client/components/builtin/global-error.js"]},[]],o=a.r.bind(a),p=a.l.bind(a),q=(0,c.createAppPageEntrypoint)({tree:n,page:"/performance/[slug]/page",pathname:"/performance/[slug]",require:o,loadChunk:p,interopDefault:d.interopDefault}),r=q.__next_app__,s=q.routeModule,t=q.handler;a.s(["__next_app__",0,r,"handler",0,t,"routeModule",0,s],66578),a.i(66578);var u=a.i(25948);a.s(["ClientPageRoot",()=>u.ClientPageRoot,"ClientSegmentRoot",()=>u.ClientSegmentRoot,"Fragment",()=>u.Fragment,"HTTPAccessFallbackBoundary",()=>u.HTTPAccessFallbackBoundary,"InstantValidation",()=>u.InstantValidation,"LayoutRouter",()=>u.LayoutRouter,"LoadingBoundaryProvider",()=>u.LoadingBoundaryProvider,"Postpone",()=>u.Postpone,"RenderFromTemplateContext",()=>u.RenderFromTemplateContext,"RootLayoutBoundary",()=>u.RootLayoutBoundary,"SegmentViewNode",()=>u.SegmentViewNode,"SegmentViewStateNode",()=>u.SegmentViewStateNode,"__next_app__",0,r,"captureOwnerStack",()=>u.captureOwnerStack,"collectPrefetchHints",()=>u.collectPrefetchHints,"collectSegmentData",()=>u.collectSegmentData,"createElement",()=>u.createElement,"createMetadataComponents",()=>u.createMetadataComponents,"createPrerenderParamsForClientSegment",()=>u.createPrerenderParamsForClientSegment,"createPrerenderSearchParamsForClientPage",()=>u.createPrerenderSearchParamsForClientPage,"createServerParamsForServerSegment",()=>u.createServerParamsForServerSegment,"createServerSearchParamsForServerPage",()=>u.createServerSearchParamsForServerPage,"createTemporaryReferenceSet",()=>u.createTemporaryReferenceSet,"decodeAction",()=>u.decodeAction,"decodeFormState",()=>u.decodeFormState,"decodeReply",()=>u.decodeReply,"handler",0,t,"isEmptyHTMLPrelude",()=>u.isEmptyHTMLPrelude,"patchFetch",()=>u.patchFetch,"preconnect",()=>u.preconnect,"preloadFont",()=>u.preloadFont,"preloadStyle",()=>u.preloadStyle,"prerender",()=>u.prerender,"prerenderToNodeStream",()=>u.prerenderToNodeStream,"renderToPipeableStream",()=>u.renderToPipeableStream,"renderToReadableStream",()=>u.renderToReadableStream,"routeModule",0,s,"serverHooks",()=>u.serverHooks,"taintObjectReference",()=>u.taintObjectReference],28281)}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__1xhr2zy._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[47872,a=>{"use strict";var b=a.i(47350),c=a.i(75086),d=a.i(3130),e=a.i(40695),f=a.i(5522);let g=[{id:"gemini",label:"Google Gemini",help:"Create a key at aistudio.google.com/apikey."},{id:"claude",label:"Anthropic Claude",help:"Create a key at console.anthropic.com > API keys."},{id:"openai",label:"OpenAI",help:"Create a key at platform.openai.com/api-keys."}];a.s(["AiKeyForm",0,function(){let[a,h]=(0,c.useState)(g[0].id),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(null),[m,n]=(0,c.useState)({}),[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1);async function s(b){b.preventDefault(),r(!0),p(null);try{let b=await fetch("/api/setup/ai",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a,key:i})}),c=await b.json();c.saved?(j(""),l(a),n({...m,[a]:!0}),p({ok:!0,text:"Saved. AI suggestions now use this provider. No restart needed."})):p({ok:!1,text:c.error??"Nothing was saved."})}catch{p({ok:!1,text:"Could not reach the dashboard server."})}finally{r(!1)}}(0,c.useEffect)(()=>{fetch("/api/setup/ai").then(a=>a.json()).then(a=>{a.keys&&(n(a.keys),l(a.provider),a.provider&&h(a.provider))}).catch(()=>{})},[]);let t=g.find(b=>b.id===a);return(0,b.jsxs)(d.Card,{className:"border-[#2d3748] bg-[#1a202c] shadow-md max-w-2xl mt-6",children:[(0,b.jsxs)(d.CardHeader,{children:[(0,b.jsx)(d.CardTitle,{className:"text-[18px] font-bold text-white tracking-tight",children:"AI suggestions (optional)"}),(0,b.jsx)(d.CardDescription,{className:"text-sm text-gray-400",children:"Add a Gemini, Claude or OpenAI key to get AI insights and recommendations for your pages. Only page names, load times and error counts are sent to the provider you pick. Without a key, the dashboard shows sample suggestions."})]}),(0,b.jsx)(d.CardContent,{children:(0,b.jsxs)("form",{onSubmit:s,className:"flex flex-col gap-5",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("label",{htmlFor:"ai-provider",className:"text-sm font-medium text-gray-300",children:"Provider"}),(0,b.jsx)("select",{id:"ai-provider",value:a,onChange:a=>h(a.target.value),className:"h-9 rounded-md border border-[#2d3748] bg-[#0f1419] px-3 text-sm text-gray-200",children:g.map(a=>(0,b.jsxs)("option",{value:a.id,children:[a.label,k===a.id?" (in use)":m[a.id]?" (key saved)":""]},a.id))})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("label",{htmlFor:"ai-key",className:"text-sm font-medium text-gray-300",children:[t.label," API key ",m[a]&&(0,b.jsx)("span",{className:"ml-2 text-xs text-[#3ee0a1]",children:"✓ Set"})]}),(0,b.jsx)(f.Input,{id:"ai-key",type:"password",autoComplete:"off",spellCheck:!1,placeholder:m[a]?"•••••••• (type to replace)":"",value:i,onChange:a=>j(a.target.value),"aria-describedby":"ai-key-help",className:"bg-[#0f1419] border-[#2d3748] text-gray-200 font-mono text-xs"}),(0,b.jsx)("p",{id:"ai-key-help",className:"text-xs text-gray-400",children:t.help})]}),(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)(e.Button,{type:"submit",disabled:q||!i.trim(),children:q?"Checking…":"Check and save"}),(0,b.jsx)("span",{"aria-live":"polite",className:`text-sm ${o?.ok?"text-[#3ee0a1]":"text-[#f87171]"}`,children:o?.text})]})]})})]})}])},46334,a=>{"use strict";var b=a.i(47350),c=a.i(75086),d=a.i(56561),e=a.i(3130),f=a.i(40695),g=a.i(5522),h=a.i(54161),i=a.i(93673);let j=i.TOOL_IDS.flatMap(a=>i.TOOLS[a].keys.required.map(b=>({name:b,tool:a,...i.KEY_FIELDS[b]})));a.s(["SetupForm",0,function(){let[a,k]=(0,c.useState)({}),[l,m]=(0,c.useState)({}),[n,o]=(0,c.useState)({}),[p,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(null),x=(0,c.useRef)(null);async function y(b){b.preventDefault(),s(!0),q(null);try{let b=await fetch("/api/setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json(),d=c.results??{};o(d);let e=j.find(a=>d[a.name]&&!d[a.name].ok);if(e&&setTimeout(()=>x.current?.querySelector(`#${e.name}`)?.focus(),0),c.saved){u(!0),k({});let b=new Set(j.filter(b=>a[b.name]?.trim()).map(a=>a.tool));m(a=>({...a,...Object.fromEntries(j.filter(a=>b.has(a.tool)).map(a=>[a.name,!0]))}));let c=i.TOOL_IDS.filter(a=>b.has(a)||v?.includes(a));w(c),q({ok:!0,text:`Saved. ${c.map(a=>i.TOOLS[a].label).join(" and ")} ${c.length>1?"are":"is"} connected. No restart needed.`})}else q({ok:!1,text:c.error??"Nothing was saved. Fix the fields marked below."})}catch{q({ok:!1,text:"Could not reach the dashboard server."})}finally{s(!1)}}return(0,c.useEffect)(()=>{fetch("/api/setup").then(a=>a.json()).then(a=>{a.keys&&m(a.keys),Array.isArray(a.tools)?w(a.tools):a.error&&q({ok:!1,text:a.error})}).catch(()=>{})},[]),(0,b.jsxs)(e.Card,{className:"border-[#2d3748] bg-[#1a202c] shadow-md max-w-2xl",children:[(0,b.jsxs)(e.CardHeader,{children:[(0,b.jsx)(e.CardTitle,{className:"text-[18px] font-bold text-white tracking-tight",children:"Connect your tools"}),(0,b.jsx)(e.CardDescription,{className:"text-sm text-gray-400",children:"Add keys for the tools you use. You only need one. Keys are checked once, saved to .env.local in this folder, and never shown again."})]}),(0,b.jsx)(e.CardContent,{children:(0,b.jsxs)("form",{ref:x,onSubmit:y,className:"flex flex-col gap-5",children:[i.TOOL_IDS.map(c=>(0,b.jsxs)("fieldset",{id:c,className:"flex flex-col gap-5 rounded-lg border border-[#2d3748] p-4",children:[(0,b.jsxs)("legend",{className:"flex items-center gap-2 px-2 text-sm font-semibold text-white",children:[i.TOOLS[c].label,v?.includes(c)?(0,b.jsx)(h.Badge,{variant:"outline",className:"border-[#3ee0a1] text-[#3ee0a1] bg-[#3ee0a1]/10",children:"✓ Connected"}):(0,b.jsx)(h.Badge,{variant:"outline",className:"border-[#4a5568] text-gray-400",children:"Optional"})]}),j.filter(a=>a.tool===c).map(c=>{let d=n[c.name];return(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("label",{htmlFor:c.name,className:"text-sm font-medium text-gray-300",children:[c.label," ",l[c.name]&&(0,b.jsx)("span",{className:"ml-2 text-xs text-[#3ee0a1]",children:"✓ Set"})]}),(0,b.jsx)(g.Input,{id:c.name,name:c.name,type:c.secret?"password":"text",autoComplete:"off",spellCheck:!1,placeholder:l[c.name]?"•••••••• (leave blank to keep, type to replace)":"",value:a[c.name]??"",onChange:b=>k({...a,[c.name]:b.target.value}),"aria-invalid":!!d&&!d.ok||void 0,"aria-describedby":`${c.name}-help ${c.name}-result`,className:"bg-[#0f1419] border-[#2d3748] text-gray-200 font-mono text-xs"}),(0,b.jsx)("p",{id:`${c.name}-help`,className:"text-xs text-gray-400",children:c.help}),(0,b.jsxs)("div",{id:`${c.name}-result`,"aria-live":"polite",children:[d&&!d.ok&&(0,b.jsxs)("p",{className:"text-xs text-[#f87171]",children:["✗ ",d.error]}),d?.ok&&(0,b.jsx)("p",{className:"text-xs text-[#3ee0a1]",children:"✓ Checked"})]})]},c.name)}),i.TOOLS[c].setupNote&&(0,b.jsx)("p",{className:"text-xs text-gray-400",children:i.TOOLS[c].setupNote})]},c)),(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)(f.Button,{type:"submit",disabled:r||!j.some(b=>a[b.name]?.trim()),children:r?"Checking…":"Check and save"}),(0,b.jsx)("span",{"aria-live":"polite",className:`text-sm ${p?.ok?"text-[#3ee0a1]":"text-[#f87171]"}`,children:p?.text}),!j.some(b=>a[b.name]?.trim())&&!p&&!t&&(0,b.jsx)("span",{className:"text-sm text-gray-400",children:v?.length?"Type a new key to change what is saved.":"Fill in both fields for at least one tool."}),t&&(0,b.jsx)(d.default,{href:"/connect",className:(0,f.buttonVariants)({variant:"outline"}),children:"Next: connect your app"})]})]})})]})}])},54161,a=>{"use strict";var b=a.i(18915),c=a.i(68228),d=a.i(42261),e=a.i(85198);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){return(0,c.useRender)({defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}})}])},3130,a=>{"use strict";var b=a.i(47350),c=a.i(85198);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-(--card-spacing)",a),...d})},"CardDescription",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-description",className:(0,c.cn)("text-sm text-muted-foreground",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...d})}])},39848,a=>{"use strict";var b=a.i(75086);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim(),d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},e=(0,b.createContext)({}),f=(0,b.forwardRef)(({color:a,size:f,width:g,height:h,strokeWidth:i,absoluteStrokeWidth:j,nonScalingStroke:k,className:l="",children:m,iconNode:n=[],icon:o={node:n,aliases:[],size:24},...p},q)=>{let{size:r=24,strokeWidth:s=2,absoluteStrokeWidth:t=!1,nonScalingStroke:u=!1,color:v="currentColor",className:w=""}=(0,b.useContext)(e)??{},x=!!m||(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0;return!1})(p),[y,z,A=[]]=function(a,b={}){return function(a,b={}){let e=b.attributeNames??{},f=a=>e[a]??a,g=a.size??a.width??d.width,h=a.size??a.height??d.height,i=a.aliases?.filter(a=>"string"==typeof a&&""!==a.trim()).map(a=>`lucide-${a}`)??[],j=[...a.name?[`lucide-${a.name}`]:[],...i],k=b.className?.split(" ").filter(Boolean)??[],l=!1===b.includeDefaultClasses?c(...k):c("lucide",...j,...k),m=b.absoluteStrokeWidth?Number(b.strokeWidth??d["stroke-width"])*Number(a.size??a.width??d.width)/Number(b.size??b.width??d.width):b.strokeWidth??d["stroke-width"];return["svg",{...Object.entries(d).reduce((a,[b,c])=>(a[f(b)]=c,a),{}),..."color"in b&&b.color&&{[f("stroke")]:b.color},..."size"in b&&null!=b.size&&{[f("width")]:b.size,[f("height")]:b.size},..."width"in b&&null!=b.width&&{[f("width")]:b.width},..."height"in b&&null!=b.height&&{[f("height")]:b.height},[f("stroke-width")]:m,...l&&{[f("class")]:l},[f("viewBox")]:`0 0 ${g} ${h}`,...!1===b.hasA11yProp?{[f("aria-hidden")]:"true"}:{},..."attributes"in b&&b.attributes},a.node.map(a=>{let[c,d,e]=a,g=b.nonScalingStroke?{[f("vector-effect")]:"non-scaling-stroke",...d}:d;return e?[c,g,e]:[c,g]})]}(a,{...b,attributeNames:{...b.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}(o,{color:a??v,width:g??f??r,height:h??f??r,strokeWidth:i??s,absoluteStrokeWidth:j??t,nonScalingStroke:k??u,className:c(w,l),hasA11yProp:x,attributes:p});return(0,b.createElement)(y,{ref:q,...z},[...A.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(m)?m:[m]])});a.s(["default",0,f],39848)},23904,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20635),g=a.r(56704),h=a.r(32319);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
|
|
1
|
+
module.exports=[47872,a=>{"use strict";var b=a.i(47350),c=a.i(75086),d=a.i(3130),e=a.i(40695),f=a.i(5522);let g=[{id:"gemini",label:"Google Gemini",help:"Create a key at aistudio.google.com/apikey."},{id:"claude",label:"Anthropic Claude",help:"Create a key at console.anthropic.com > API keys."},{id:"openai",label:"OpenAI",help:"Create a key at platform.openai.com/api-keys."}];a.s(["AiKeyForm",0,function(){let[a,h]=(0,c.useState)(g[0].id),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(null),[m,n]=(0,c.useState)({}),[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1);async function s(b){b.preventDefault(),r(!0),p(null);try{let b=await fetch("/api/setup/ai",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a,key:i})}),c=await b.json();c.saved?(j(""),l(a),n({...m,[a]:!0}),p({ok:!0,text:"Saved. AI suggestions now use this provider. No restart needed."})):p({ok:!1,text:c.error??"Nothing was saved."})}catch{p({ok:!1,text:"Could not reach the dashboard server."})}finally{r(!1)}}(0,c.useEffect)(()=>{fetch("/api/setup/ai").then(a=>a.json()).then(a=>{a.keys&&(n(a.keys),l(a.provider),a.provider&&h(a.provider))}).catch(()=>{})},[]);let t=g.find(b=>b.id===a);return(0,b.jsxs)(d.Card,{className:"border-[#2d3748] bg-[#1a202c] shadow-md max-w-2xl mt-6",children:[(0,b.jsxs)(d.CardHeader,{children:[(0,b.jsx)(d.CardTitle,{className:"text-[18px] font-bold text-white tracking-tight",children:"AI suggestions (optional)"}),(0,b.jsx)(d.CardDescription,{className:"text-sm text-gray-400",children:"Add a Gemini, Claude or OpenAI key to get AI insights and recommendations for your pages. Only page names, load times and error counts are sent to the provider you pick. Without a key, the dashboard shows sample suggestions."})]}),(0,b.jsx)(d.CardContent,{children:(0,b.jsxs)("form",{onSubmit:s,className:"flex flex-col gap-5",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("label",{htmlFor:"ai-provider",className:"text-sm font-medium text-gray-300",children:"Provider"}),(0,b.jsx)("select",{id:"ai-provider",value:a,onChange:a=>h(a.target.value),className:"h-9 rounded-md border border-[#2d3748] bg-[#0f1419] px-3 text-sm text-gray-200",children:g.map(a=>(0,b.jsxs)("option",{value:a.id,children:[a.label,k===a.id?" (in use)":m[a.id]?" (key saved)":""]},a.id))})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("label",{htmlFor:"ai-key",className:"text-sm font-medium text-gray-300",children:[t.label," API key ",m[a]&&(0,b.jsx)("span",{className:"ml-2 text-xs text-[#3ee0a1]",children:"✓ Set"})]}),(0,b.jsx)(f.Input,{id:"ai-key",type:"password",autoComplete:"off",spellCheck:!1,placeholder:m[a]?"•••••••• (type to replace)":"",value:i,onChange:a=>j(a.target.value),"aria-describedby":"ai-key-help",className:"bg-[#0f1419] border-[#2d3748] text-gray-200 font-mono text-xs"}),(0,b.jsx)("p",{id:"ai-key-help",className:"text-xs text-gray-400",children:t.help})]}),(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)(e.Button,{type:"submit",disabled:q||!i.trim(),children:q?"Checking…":"Check and save"}),(0,b.jsx)("span",{"aria-live":"polite",className:`text-sm ${o?.ok?"text-[#3ee0a1]":"text-[#f87171]"}`,children:o?.text})]})]})})]})}])},46334,a=>{"use strict";var b=a.i(47350),c=a.i(75086),d=a.i(56561),e=a.i(3130),f=a.i(40695),g=a.i(5522),h=a.i(54161),i=a.i(93673);let j=i.TOOL_IDS.flatMap(a=>i.TOOLS[a].keys.required.map(b=>({name:b,tool:a,...i.KEY_FIELDS[b]})));a.s(["SetupForm",0,function(){let[a,k]=(0,c.useState)({}),[l,m]=(0,c.useState)({}),[n,o]=(0,c.useState)({}),[p,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(null),x=(0,c.useRef)(null);async function y(b){b.preventDefault(),s(!0),q(null);try{let b=await fetch("/api/setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json(),d=c.results??{};o(d);let e=j.find(a=>d[a.name]&&!d[a.name].ok);if(e&&setTimeout(()=>x.current?.querySelector(`#${e.name}`)?.focus(),0),c.saved){u(!0),k({});let b=new Set(j.filter(b=>a[b.name]?.trim()).map(a=>a.tool));m(a=>({...a,...Object.fromEntries(j.filter(a=>b.has(a.tool)).map(a=>[a.name,!0]))}));let c=i.TOOL_IDS.filter(a=>b.has(a)||v?.includes(a));w(c),q({ok:!0,text:`Saved. ${c.map(a=>i.TOOLS[a].label).join(" and ")} ${c.length>1?"are":"is"} connected. No restart needed.`})}else q({ok:!1,text:c.error??"Nothing was saved. Fix the fields marked below."})}catch{q({ok:!1,text:"Could not reach the dashboard server."})}finally{s(!1)}}return(0,c.useEffect)(()=>{fetch("/api/setup").then(a=>a.json()).then(a=>{a.keys&&m(a.keys),Array.isArray(a.tools)?w(a.tools):a.error&&q({ok:!1,text:a.error})}).catch(()=>{})},[]),(0,b.jsxs)(e.Card,{className:"border-[#2d3748] bg-[#1a202c] shadow-md max-w-2xl",children:[(0,b.jsxs)(e.CardHeader,{children:[(0,b.jsx)(e.CardTitle,{className:"text-[18px] font-bold text-white tracking-tight",children:"Connect your tools"}),(0,b.jsx)(e.CardDescription,{className:"text-sm text-gray-400",children:"Add keys for the tools you use. You only need one. Keys are checked once, saved to .env.local in this folder, and never shown again."})]}),(0,b.jsx)(e.CardContent,{children:(0,b.jsxs)("form",{ref:x,onSubmit:y,className:"flex flex-col gap-5",children:[i.TOOL_IDS.map(c=>(0,b.jsxs)("fieldset",{id:c,className:"flex flex-col gap-5 rounded-lg border border-[#2d3748] p-4",children:[(0,b.jsxs)("legend",{className:"flex items-center gap-2 px-2 text-sm font-semibold text-white",children:[i.TOOLS[c].label,v?.includes(c)?(0,b.jsx)(h.Badge,{variant:"outline",className:"border-[#3ee0a1] text-[#3ee0a1] bg-[#3ee0a1]/10",children:"✓ Connected"}):(0,b.jsx)(h.Badge,{variant:"outline",className:"border-[#4a5568] text-gray-400",children:"Optional"})]}),j.filter(a=>a.tool===c).map(c=>{let d=n[c.name];return(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("label",{htmlFor:c.name,className:"text-sm font-medium text-gray-300",children:[c.label," ",l[c.name]&&(0,b.jsx)("span",{className:"ml-2 text-xs text-[#3ee0a1]",children:"✓ Set"})]}),(0,b.jsx)(g.Input,{id:c.name,name:c.name,type:c.secret?"password":"text",autoComplete:"off",spellCheck:!1,placeholder:l[c.name]?"•••••••• (leave blank to keep, type to replace)":"",value:a[c.name]??"",onChange:b=>k({...a,[c.name]:b.target.value}),"aria-invalid":!!d&&!d.ok||void 0,"aria-describedby":`${c.name}-help ${c.name}-result`,className:"bg-[#0f1419] border-[#2d3748] text-gray-200 font-mono text-xs"}),(0,b.jsx)("p",{id:`${c.name}-help`,className:"text-xs text-gray-400",children:c.help}),(0,b.jsxs)("div",{id:`${c.name}-result`,"aria-live":"polite",children:[d&&!d.ok&&(0,b.jsxs)("p",{className:"text-xs text-[#f87171]",children:["✗ ",d.error]}),d?.ok&&(0,b.jsx)("p",{className:"text-xs text-[#3ee0a1]",children:"✓ Checked"}),d?.notice&&(0,b.jsx)("p",{className:"text-xs text-[#fbbf24]",children:d.notice})]})]},c.name)}),i.TOOLS[c].setupNote&&(0,b.jsx)("p",{className:"text-xs text-gray-400",children:i.TOOLS[c].setupNote})]},c)),(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)(f.Button,{type:"submit",disabled:r||!j.some(b=>a[b.name]?.trim()),children:r?"Checking…":"Check and save"}),(0,b.jsx)("span",{"aria-live":"polite",className:`text-sm ${p?.ok?"text-[#3ee0a1]":"text-[#f87171]"}`,children:p?.text}),!j.some(b=>a[b.name]?.trim())&&!p&&!t&&(0,b.jsx)("span",{className:"text-sm text-gray-400",children:v?.length?"Type a new key to change what is saved.":"Fill in both fields for at least one tool."}),t&&(0,b.jsx)(d.default,{href:"/connect",className:(0,f.buttonVariants)({variant:"outline"}),children:"Next: connect your app"})]})]})})]})}])},54161,a=>{"use strict";var b=a.i(18915),c=a.i(68228),d=a.i(42261),e=a.i(85198);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){return(0,c.useRender)({defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}})}])},3130,a=>{"use strict";var b=a.i(47350),c=a.i(85198);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-(--card-spacing)",a),...d})},"CardDescription",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-description",className:(0,c.cn)("text-sm text-muted-foreground",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...d})}])},39848,a=>{"use strict";var b=a.i(75086);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim(),d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},e=(0,b.createContext)({}),f=(0,b.forwardRef)(({color:a,size:f,width:g,height:h,strokeWidth:i,absoluteStrokeWidth:j,nonScalingStroke:k,className:l="",children:m,iconNode:n=[],icon:o={node:n,aliases:[],size:24},...p},q)=>{let{size:r=24,strokeWidth:s=2,absoluteStrokeWidth:t=!1,nonScalingStroke:u=!1,color:v="currentColor",className:w=""}=(0,b.useContext)(e)??{},x=!!m||(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0;return!1})(p),[y,z,A=[]]=function(a,b={}){return function(a,b={}){let e=b.attributeNames??{},f=a=>e[a]??a,g=a.size??a.width??d.width,h=a.size??a.height??d.height,i=a.aliases?.filter(a=>"string"==typeof a&&""!==a.trim()).map(a=>`lucide-${a}`)??[],j=[...a.name?[`lucide-${a.name}`]:[],...i],k=b.className?.split(" ").filter(Boolean)??[],l=!1===b.includeDefaultClasses?c(...k):c("lucide",...j,...k),m=b.absoluteStrokeWidth?Number(b.strokeWidth??d["stroke-width"])*Number(a.size??a.width??d.width)/Number(b.size??b.width??d.width):b.strokeWidth??d["stroke-width"];return["svg",{...Object.entries(d).reduce((a,[b,c])=>(a[f(b)]=c,a),{}),..."color"in b&&b.color&&{[f("stroke")]:b.color},..."size"in b&&null!=b.size&&{[f("width")]:b.size,[f("height")]:b.size},..."width"in b&&null!=b.width&&{[f("width")]:b.width},..."height"in b&&null!=b.height&&{[f("height")]:b.height},[f("stroke-width")]:m,...l&&{[f("class")]:l},[f("viewBox")]:`0 0 ${g} ${h}`,...!1===b.hasA11yProp?{[f("aria-hidden")]:"true"}:{},..."attributes"in b&&b.attributes},a.node.map(a=>{let[c,d,e]=a,g=b.nonScalingStroke?{[f("vector-effect")]:"non-scaling-stroke",...d}:d;return e?[c,g,e]:[c,g]})]}(a,{...b,attributeNames:{...b.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}(o,{color:a??v,width:g??f??r,height:h??f??r,strokeWidth:i??s,absoluteStrokeWidth:j??t,nonScalingStroke:k??u,className:c(w,l),hasA11yProp:x,attributes:p});return(0,b.createElement)(y,{ref:q,...z},[...A.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(m)?m:[m]])});a.s(["default",0,f],39848)},23904,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20635),g=a.r(56704),h=a.r(32319);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_0bxxvzb._.js.map
|