@karan171996/metricflow 0.5.3 → 0.8.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.
Files changed (149) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/fallback-build-manifest.json +3 -3
  4. package/.next/next-server.js.nft.json +1 -1
  5. package/.next/prerender-manifest.json +6 -6
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +9 -9
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +9 -9
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/server/app/api/analyze/route.js +2 -2
  20. package/.next/server/app/api/analyze/route.js.nft.json +1 -1
  21. package/.next/server/app/api/connect/route.js +1 -1
  22. package/.next/server/app/api/connect/route.js.nft.json +1 -1
  23. package/.next/server/app/api/health/route.js.nft.json +1 -1
  24. package/.next/server/app/api/metrics/route.js +2 -2
  25. package/.next/server/app/api/metrics/route.js.nft.json +1 -1
  26. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  27. package/.next/server/app/api/setup/ai/route.js.nft.json +1 -1
  28. package/.next/server/app/api/setup/route.js +3 -2
  29. package/.next/server/app/api/setup/route.js.nft.json +1 -1
  30. package/.next/server/app/connect/page.js.nft.json +1 -1
  31. package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/connect.html +19 -66
  33. package/.next/server/app/connect.rsc +11 -11
  34. package/.next/server/app/connect.segments/_full.segment.rsc +11 -11
  35. package/.next/server/app/connect.segments/_index.segment.rsc +8 -8
  36. package/.next/server/app/connect.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/connect.segments/connect/__PAGE__.segment.rsc +6 -6
  38. package/.next/server/app/index.html +2 -2
  39. package/.next/server/app/index.rsc +11 -11
  40. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  41. package/.next/server/app/index.segments/_full.segment.rsc +11 -11
  42. package/.next/server/app/index.segments/_index.segment.rsc +8 -8
  43. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/page.js.nft.json +1 -1
  45. package/.next/server/app/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/performance/[slug]/page.js +2 -2
  47. package/.next/server/app/performance/[slug]/page.js.nft.json +1 -1
  48. package/.next/server/app/performance/[slug]/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/performance/page.js.nft.json +1 -1
  50. package/.next/server/app/performance/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/performance.html +2 -2
  52. package/.next/server/app/performance.rsc +12 -12
  53. package/.next/server/app/performance.segments/_full.segment.rsc +12 -12
  54. package/.next/server/app/performance.segments/_index.segment.rsc +8 -8
  55. package/.next/server/app/performance.segments/_tree.segment.rsc +2 -2
  56. package/.next/server/app/performance.segments/performance/__PAGE__.segment.rsc +7 -7
  57. package/.next/server/app/settings/page.js.nft.json +1 -1
  58. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/settings.html +2 -2
  60. package/.next/server/app/settings.rsc +22 -22
  61. package/.next/server/app/settings.segments/_full.segment.rsc +22 -22
  62. package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
  63. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  64. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +17 -17
  65. package/.next/server/app/setup/page.js.nft.json +1 -1
  66. package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/setup.html +2 -2
  68. package/.next/server/app/setup.rsc +12 -12
  69. package/.next/server/app/setup.segments/_full.segment.rsc +12 -12
  70. package/.next/server/app/setup.segments/_index.segment.rsc +8 -8
  71. package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  72. package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +7 -7
  73. package/.next/server/app/tools/[tool]/page.js.nft.json +1 -1
  74. package/.next/server/app/tools/[tool]/page_client-reference-manifest.js +1 -1
  75. package/.next/server/chunks/[root-of-the-server]__0fkj1-q._.js +1 -1
  76. package/.next/server/chunks/[root-of-the-server]__0o2ceqr._.js +18 -0
  77. package/.next/server/chunks/[root-of-the-server]__0pil1g6._.js +3 -0
  78. package/.next/server/chunks/[root-of-the-server]__0xmaf60._.js +18 -0
  79. package/.next/server/chunks/[root-of-the-server]__18s35pf._.js +1 -1
  80. package/.next/server/chunks/[root-of-the-server]__1f_fo0j._.js +1 -1
  81. package/.next/server/chunks/[root-of-the-server]__1naf7j4._.js +3 -0
  82. package/.next/server/chunks/[root-of-the-server]__1o9k4jf._.js +1 -1
  83. package/.next/server/chunks/[root-of-the-server]__1rx5s6r._.js +3 -0
  84. package/.next/server/chunks/_08xo8nu._.js +4 -4
  85. package/.next/server/chunks/_0w8wvdn._.js +1 -1
  86. package/.next/server/chunks/_0wct7-r._.js +1 -16
  87. package/.next/server/chunks/_1l9d64o._.js +2 -2
  88. package/.next/server/chunks/ssr/0x0c_next_dist_1icgwks._.js +1 -1
  89. package/.next/server/chunks/ssr/[root-of-the-server]__02c3m72._.js +1 -1
  90. package/.next/server/chunks/ssr/[root-of-the-server]__0g1dtzd._.js +1 -1
  91. package/.next/server/chunks/ssr/[root-of-the-server]__0l4t71c._.js +1 -1
  92. package/.next/server/chunks/ssr/[root-of-the-server]__1jr0qvs._.js +1 -1
  93. package/.next/server/chunks/ssr/{[root-of-the-server]__0ryyli3._.js → [root-of-the-server]__1xhr2zy._.js} +1 -1
  94. package/.next/server/chunks/ssr/_045bvlq._.js +1 -1
  95. package/.next/server/chunks/ssr/_0_02db6._.js +1 -1
  96. package/.next/server/chunks/ssr/_0bxxvzb._.js +1 -1
  97. package/.next/server/chunks/ssr/_0cq6qjs._.js +9 -63
  98. package/.next/server/chunks/ssr/_0htqt7_._.js +10 -5
  99. package/.next/server/chunks/ssr/_0ompurr._.js +2 -2
  100. package/.next/server/chunks/ssr/_0un641_._.js +1 -1
  101. package/.next/server/chunks/ssr/_12pw-ix._.js +151 -0
  102. package/.next/server/chunks/ssr/_13m9nev._.js +1 -1
  103. package/.next/server/chunks/ssr/_19s4g71._.js +1 -1
  104. package/.next/server/chunks/ssr/_1n6rdd2._.js +1 -1
  105. package/.next/server/chunks/ssr/components_1_8btz1._.js +1 -1
  106. package/.next/server/middleware-build-manifest.js +3 -3
  107. package/.next/server/middleware.js.nft.json +1 -1
  108. package/.next/server/pages/404.html +2 -2
  109. package/.next/server/pages/500.html +1 -1
  110. package/.next/static/chunks/036zzfotyi252.js +1 -0
  111. package/.next/static/chunks/18thq9ido-jej.js +5 -0
  112. package/.next/static/chunks/{19qbz8dh8aqt6.js → 190rvtbj8tqbw.js} +1 -1
  113. package/.next/static/chunks/1kqzgl2gb6ily.js +1 -0
  114. package/.next/static/chunks/2h1anqi3hzijd.js +1 -0
  115. package/.next/static/chunks/{0_xh0vh4uh0vk.js → 2pf7wdwyhi6ks.js} +1 -1
  116. package/.next/static/chunks/{278--y-yo6m9v.js → 31od3fbrskb5_.js} +1 -1
  117. package/.next/static/chunks/332sb1iij72mz.css +1 -0
  118. package/.next/static/chunks/3khzw5hn41lt7.js +11 -0
  119. package/.next/static/chunks/3o4y8rhawejsr.js +1 -0
  120. package/.next/trace +1 -1
  121. package/.next/trace-build +1 -1
  122. package/README.md +48 -7
  123. package/bin/cli.mjs +2 -1
  124. package/dist/browser/index.d.mts +27 -0
  125. package/dist/browser/index.mjs +110 -0
  126. package/dist/browser/newrelic-agent.d.mts +4 -0
  127. package/dist/browser/newrelic-agent.mjs +32 -0
  128. package/dist/browser/newrelic.d.mts +2 -0
  129. package/dist/browser/newrelic.mjs +35 -0
  130. package/dist/browser/sentry-sdk.d.mts +2 -0
  131. package/dist/browser/sentry-sdk.mjs +22 -0
  132. package/dist/browser/sentry.d.mts +2 -0
  133. package/dist/browser/sentry.mjs +45 -0
  134. package/package.json +15 -3
  135. package/.next/server/chunks/[root-of-the-server]__12h8r83._.js +0 -3
  136. package/.next/server/chunks/[root-of-the-server]__19yigji._.js +0 -3
  137. package/.next/server/chunks/[root-of-the-server]__1sf143y._.js +0 -3
  138. package/.next/server/chunks/[root-of-the-server]__1zlr3w0._.js +0 -3
  139. package/.next/server/chunks/ssr/_14aoqb2._.js +0 -151
  140. package/.next/static/chunks/2-az50vi0iboz.js +0 -5
  141. package/.next/static/chunks/2bt9wtnw1g0g_.css +0 -1
  142. package/.next/static/chunks/2mi013mf2pu08.js +0 -1
  143. package/.next/static/chunks/2wmat901j6po0.js +0 -1
  144. package/.next/static/chunks/332-owz6utwp5.js +0 -1
  145. package/.next/static/chunks/39h0f3s2ddxz_.js +0 -65
  146. package/.next/static/chunks/3ab7oxjuh1asy.js +0 -1
  147. /package/.next/static/{fn1O5hprdyzrIbY1gapbZ → 4kpNMSdt6_Tq6ls8b4gmd}/_buildManifest.js +0 -0
  148. /package/.next/static/{fn1O5hprdyzrIbY1gapbZ → 4kpNMSdt6_Tq6ls8b4gmd}/_clientMiddlewareManifest.js +0 -0
  149. /package/.next/static/{fn1O5hprdyzrIbY1gapbZ → 4kpNMSdt6_Tq6ls8b4gmd}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},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"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},60780,e=>{"use strict";var t=e.i(2157),r=e.i(50227),n=e.i(24514),a=e.i(12892);let s={loadSeconds:1.5,errorPercent:2,uptimeSLA:99.9},o=()=>process.env.METRICFLOW_SETTINGS_FILE||(0,r.join)((0,a.projectDir)(),".metricflow-settings.json"),i={loadSeconds:[.1,30],errorPercent:[.1,100],uptimeSLA:[90,100]};function l(){try{return{...s,...JSON.parse((0,t.readFileSync)(o(),"utf8"))}}catch{return s}}async function c(){return Response.json(l())}async function d(e){let r;if(!(0,n.isLocalRequest)(e))return Response.json({error:(0,n.REFUSAL_MESSAGE)()},{status:403});try{r=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let a=l();for(let[e,[t,n]]of Object.entries(i)){if(void 0===r[e])continue;let s=r[e];if("number"!=typeof s||!Number.isFinite(s)||s<t||s>n)return Response.json({error:`${e} must be a number between ${t} and ${n}.`},{status:400});a[e]=s}try{let e=`${o()}.tmp`;(0,t.writeFileSync)(e,JSON.stringify(a,null,2)),(0,t.renameSync)(e,o())}catch{return Response.json({error:"Settings could not be written. Check folder permissions."},{status:500})}return Response.json(a)}e.s(["GET",0,c,"PUT",0,d],60780)},30229,e=>{"use strict";var t=e.i(12425),r=e.i(83353),n=e.i(47902),a=e.i(37892),s=e.i(54261),o=e.i(39548),i=e.i(68187),l=e.i(63984),c=e.i(88743),d=e.i(24698),u=e.i(13487),p=e.i(48776),h=e.i(29398),f=e.i(31610),R=e.i(45919),E=e.i(93695),m=e.i(12741);e.i(95315);var v=e.i(98732);let g=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/settings/route",pathname:"/api/settings",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/settings/route.ts",nextConfigOutput:"",userland:()=>e.r(60780),...{}}),{workAsyncStorage:y,workUnitAsyncStorage:x,serverHooks:w}=g;async function S(e,t,n){n.requestMeta&&(0,a.setRequestMeta)(e,n.requestMeta),g.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/settings/route";y=y.replace(/\/index$/,"")||"/";let x=await g.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!x)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:w,deploymentId:S,params:b,nextConfig:C,parsedUrl:_,isDraftMode:A,prerenderManifest:N,routerServerContext:I,isOnDemandRevalidate:T,revalidateOnlyGenerated:O,resolvedPathname:k,clientReferenceManifest:P,serverActionsManifest:j}=x,L=(0,i.normalizeAppPath)(y),M=!!N.routes[k]&&(g.isDev||(0,m.isRouteCacheOwner)(k,g.cacheOwner,N.routes[k])),q=!!(N.dynamicRoutes[L]||M),D=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,_,!1):t.end("This page could not be found"),null);if(q&&!A){let e=N.dynamicRoutes[L];if(e&&!1===e.fallback&&!M){if(C.adapterPath)return await D();throw new E.NoFallbackError}}let F=null;!q||g.isDev||A||(F="/index"===(F=k)?"/":F);let $=!0===g.isDev||!q,U=q&&!$;j&&P&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:P,serverActionsManifest:j});let K=e.method||"GET",H=(0,s.getTracer)(),W=H.getActiveScopeSpan(),Y=!!(null==I?void 0:I.isWrappedByNextServer),G=!!(0,a.getRequestMeta)(e,"minimalMode"),B=(0,a.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,C,N,G);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let V={params:b,previewProps:N.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts,useCacheTimeout:C.experimental.useCacheTimeout},cacheComponents:!!C.cacheComponents,validationLevel:C.experimental.instantInsights.validationLevel,isDraftMode:A,supportsDynamicResponse:$,incrementalCache:B,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:C.cacheLife,staticPageGenerationTimeout:C.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>g.onRequestError(e,t,n,a,I)},sharedContext:{buildId:w,deploymentId:S}},z=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),J=c.NextRequestAdapter.fromNodeNextRequest(z,(0,c.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:r})=>{try{if(!G&&T&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await g.handle(J,V);e.fetchMetrics=V.renderOpts.fetchMetrics;let s=V.renderOpts.pendingWaitUntil;s&&n.waitUntil&&(n.waitUntil(s),s=void 0);let o=V.renderOpts.collectedTags;if(!q)return await (0,p.sendResponse)(z,X,a,s),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,n=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?C.expireTime:void 0:V.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:T})},!1,I),t}},Q=async(a,o)=>{try{var i,l;let a=await g.handleResponse({req:e,nextConfig:C,cacheKey:F,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:O,responseGenerator:Z,waitUntil:n.waitUntil,isMinimalMode:G});if(!q)return;if((null==a||null==(i=a.value)?void 0:i.kind)!==v.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});G||t.setHeader("x-nextjs-cache",T?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);G&&q||s.delete(R.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(a.cacheControl)),await (0,p.sendResponse)(z,X,new Response(a.value.body,{headers:s,status:a.value.status||200}));return}catch(t){if(t instanceof E.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:L,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:T})},!1,I),q)throw t;await (0,p.sendResponse)(z,X,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:s.SpanStatusCode.ERROR}),a.setAttribute("error.type",e.toString()));let r=H.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 n=r.get("next.route")||L,i=`${K} ${n}`;a.setAttributes({"next.route":n,"http.route":n,"next.span_name":i}),a.updateName(i),o&&o!==a&&(o.setAttribute("http.route",n),o.updateName(i))})()}};if(Y&&W)await Q(W,void 0);else{let t=H.getActiveScopeSpan();await H.withPropagatedContext(e.headers,()=>H.trace(d.BaseServerSpan.handleRequest,{spanName:`${K} ${y}`,kind:s.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Q(e,t)),void 0,!Y)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:x})},"routeModule",0,g,"serverHooks",0,w,"workAsyncStorage",0,y,"workUnitAsyncStorage",0,x])},12892,67119,e=>{"use strict";var t=e.i(2157),r=e.i(50227),n=e.i(39151),a=e.i(19374);function s(e,t=[],r=[]){let o,i="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,l=(0,n.forwardRef)(({className:e,...t},r)=>(0,n.createElement)(a.default,{ref:r,icon:i,className:e,...t}));return i.name&&(l.displayName=(o=(e=>{let t="",r=!1;for(let n of e){if("-"===n||"_"===n||n<=" "){r=t.length>0;continue}0===t.length?t+=n.toLowerCase():t+=r?n.toUpperCase():n,r=!1}return t})(i.name)).charAt(0).toUpperCase()+o.slice(1)),l}let o={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"}]]};o.node;let i=s(o),l={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"}]]};l.node;let c=s(l);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),n=e<0?"-":"";return r<3600?`${n}${Math.floor(r/60)}m ${r%60}s`:`${n}${Math.floor(r/3600)}h ${Math.floor(r%3600/60)}m`}let u=["pages","traffic","loadTime","apdex","vitals","ajax","errorRate","errors"],p=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,h={"new-relic":{label:"New Relic",icon:i,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(p(e.map(e=>e.newRelic.loadTime)))},{label:"Avg LCP",value:d(p(e.map(e=>e.newRelic.lcp)))},{label:"Avg TTFB",value:d(p(e.map(e=>e.newRelic.ttfb)))},{label:"Avg Apdex",value:p(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])),R=Object.keys(h);e.s(["KEY_LABELS",0,f,"TOOLS",0,h,"TOOL_IDS",0,R,"mergeMetrics",0,function(e,t,r){let n={};for(let[a,s]of Object.entries(t)){let t=r.includes(s)?void 0:e[s]?.[a];void 0!==t&&(n[a]=t)}return n},"sourcesFor",0,function(e){let t={};for(let r of u){let n=R.find(t=>e.includes(t)&&h[t].capabilities.includes(r));n&&(t[r]=n)}return t}],67119);let E=R.flatMap(e=>h[e].keys.required),m="NEWRELIC_REGION",v={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"}},g={gemini:{label:"Google Gemini",key:"GEMINI_API_KEY"},claude:{label:"Anthropic Claude",key:"CLAUDE_API_KEY"},openai:{label:"OpenAI",key:"OPENAI_API_KEY"}},y="AI_PROVIDER";function x(e){return process.env[e]??""}let w=e=>h[e].keys.required.every(e=>x(e));function S(){return process.env.METRICFLOW_PROJECT_DIR||process.cwd()}let b=/[\s\0#"'`\\$]/;e.s(["AI_PROVIDERS",0,g,"AI_PROVIDER_KEY",0,y,"INSERT_KEY",0,"NEWRELIC_INSERT_KEY","REGION_KEY",0,m,"SETUP_KEYS",0,E,"UNSAFE",0,b,"activeAi",0,function(){let e=process.env[y];for(let t of(e&&e in g?[e]:[]).concat(Object.keys(g))){let e=process.env[g[t].key];if(e)return{provider:t,key:e}}return null},"connectedTools",0,()=>R.filter(w),"env",0,x,"isToolConnected",0,w,"nrHosts",0,(e="eu"===process.env[m]?"eu":"us")=>v[e],"projectDir",0,S,"writeEnvLocal",0,function(e,n=process.env.METRICFLOW_ENV_FILE||(0,r.join)(S(),".env.local")){let a=new Set([...Object.values(h).flatMap(e=>[...e.keys.required,...e.keys.optional,...e.keys.derived??[]]),...Object.values(g).map(e=>e.key),y]);for(let[t,r]of Object.entries(e)){if(!a.has(t))throw Error("Refused to write a key name no tool declares.");if(b.test(r))throw Error("Refused to write a value with unsafe characters.")}let s=(0,t.existsSync)(n)?(0,t.readFileSync)(n,"utf8").split("\n"):[],o=new Map(Object.entries(e)),i=s.map(e=>{let t=e.match(/^\s*([A-Z0-9_]+)\s*=/)?.[1];if(t&&o.has(t)){let e=o.get(t);return o.delete(t),`${t}=${e}`}return e});for(;i.length&&""===i[i.length-1];)i.pop();for(let[e,t]of o)i.push(`${e}=${t}`);let l=`${n}.tmp`;for(let[r,a]of((0,t.writeFileSync)(l,i.join("\n")+"\n",{mode:384}),(0,t.renameSync)(l,n),Object.entries(e)))process.env[r]=a}],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 n=e.headers.get("x-forwarded-for");if(n&&!n.split(",").every(e=>r.has(e.trim().replace(/^\[|\]$/g,"")))||"cross-site"===e.headers.get("sec-fetch-site"))return!1;let a=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(a))return!1;let s=e.headers.get("origin");try{return!s||t.has(new URL(s).hostname)}catch{return!1}}])},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}];
1
+ module.exports=[54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},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"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},60780,e=>{"use strict";var t=e.i(2157),r=e.i(50227),n=e.i(24514),a=e.i(12892);let s={loadSeconds:1.5,errorPercent:2,uptimeSLA:99.9},o=()=>process.env.METRICFLOW_SETTINGS_FILE||(0,r.join)((0,a.projectDir)(),".metricflow-settings.json"),i={loadSeconds:[.1,30],errorPercent:[.1,100],uptimeSLA:[90,100]};function l(){try{return{...s,...JSON.parse((0,t.readFileSync)(o(),"utf8"))}}catch{return s}}async function c(){return Response.json(l())}async function d(e){let r;if(!(0,n.isLocalRequest)(e))return Response.json({error:(0,n.REFUSAL_MESSAGE)()},{status:403});try{r=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let a=(0,n.requireJson)(e);if(a)return a;let s=l();for(let[e,[t,n]]of Object.entries(i)){if(void 0===r[e])continue;let a=r[e];if("number"!=typeof a||!Number.isFinite(a)||a<t||a>n)return Response.json({error:`${e} must be a number between ${t} and ${n}.`},{status:400});s[e]=a}try{let e=`${o()}.tmp`;(0,t.writeFileSync)(e,JSON.stringify(s,null,2)),(0,t.renameSync)(e,o())}catch{return Response.json({error:"Settings could not be written. Check folder permissions."},{status:500})}return Response.json(s)}e.s(["GET",0,c,"PUT",0,d],60780)},30229,e=>{"use strict";var t=e.i(12425),r=e.i(83353),n=e.i(47902),a=e.i(37892),s=e.i(54261),o=e.i(39548),i=e.i(68187),l=e.i(63984),c=e.i(88743),d=e.i(24698),u=e.i(13487),p=e.i(48776),h=e.i(29398),f=e.i(31610),R=e.i(45919),v=e.i(93695),m=e.i(12741);e.i(95315);var E=e.i(98732);let y=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/settings/route",pathname:"/api/settings",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/settings/route.ts",nextConfigOutput:"",userland:()=>e.r(60780),...{}}),{workAsyncStorage:g,workUnitAsyncStorage:w,serverHooks:x}=y;async function b(e,t,n){n.requestMeta&&(0,a.setRequestMeta)(e,n.requestMeta),y.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/settings/route";g=g.replace(/\/index$/,"")||"/";let w=await y.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:x,deploymentId:b,params:S,nextConfig:C,parsedUrl:T,isDraftMode:_,prerenderManifest:A,routerServerContext:N,isOnDemandRevalidate:I,revalidateOnlyGenerated:O,resolvedPathname:k,clientReferenceManifest:P,serverActionsManifest:j}=w,L=(0,i.normalizeAppPath)(g),q=!!A.routes[k]&&(y.isDev||(0,m.isRouteCacheOwner)(k,y.cacheOwner,A.routes[k])),M=!!(A.dynamicRoutes[L]||q),D=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,T,!1):t.end("This page could not be found"),null);if(M&&!_){let e=A.dynamicRoutes[L];if(e&&!1===e.fallback&&!q){if(C.adapterPath)return await D();throw new v.NoFallbackError}}let F=null;!M||y.isDev||_||(F="/index"===(F=k)?"/":F);let $=!0===y.isDev||!M,U=M&&!$;j&&P&&(0,o.setManifestsSingleton)({page:g,clientReferenceManifest:P,serverActionsManifest:j});let K=e.method||"GET",H=(0,s.getTracer)(),W=H.getActiveScopeSpan(),Y=!!(null==N?void 0:N.isWrappedByNextServer),G=!!(0,a.getRequestMeta)(e,"minimalMode"),B=(0,a.getRequestMeta)(e,"incrementalCache")||await y.getIncrementalCache(e,C,A,G);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let V={params:S,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts,useCacheTimeout:C.experimental.useCacheTimeout},cacheComponents:!!C.cacheComponents,validationLevel:C.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:$,incrementalCache:B,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:C.cacheLife,staticPageGenerationTimeout:C.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>y.onRequestError(e,t,n,a,N)},sharedContext:{buildId:x,deploymentId:b}},z=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),J=c.NextRequestAdapter.fromNodeNextRequest(z,(0,c.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:r})=>{try{if(!G&&I&&O&&!r)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,V);e.fetchMetrics=V.renderOpts.fetchMetrics;let s=V.renderOpts.pendingWaitUntil;s&&n.waitUntil&&(n.waitUntil(s),s=void 0);let o=V.renderOpts.collectedTags;if(!M)return await (0,p.sendResponse)(z,X,a,s),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,n=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?C.expireTime:void 0:V.renderOpts.collectedExpire;return{value:{kind:E.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:I})},!1,N),t}},Q=async(a,o)=>{try{var i,l;let a=await y.handleResponse({req:e,nextConfig:C,cacheKey:F,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:I,revalidateOnlyGenerated:O,responseGenerator:Z,waitUntil:n.waitUntil,isMinimalMode:G});if(!M)return;if((null==a||null==(i=a.value)?void 0:i.kind)!==E.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});G||t.setHeader("x-nextjs-cache",I?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);G&&M||s.delete(R.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(a.cacheControl)),await (0,p.sendResponse)(z,X,new Response(a.value.body,{headers:s,status:a.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:L,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:I})},!1,N),M)throw t;await (0,p.sendResponse)(z,X,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:s.SpanStatusCode.ERROR}),a.setAttribute("error.type",e.toString()));let r=H.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 n=r.get("next.route")||L,i=`${K} ${n}`;a.setAttributes({"next.route":n,"http.route":n,"next.span_name":i}),a.updateName(i),o&&o!==a&&(o.setAttribute("http.route",n),o.updateName(i))})()}};if(Y&&W)await Q(W,void 0);else{let t=H.getActiveScopeSpan();await H.withPropagatedContext(e.headers,()=>H.trace(d.BaseServerSpan.handleRequest,{spanName:`${K} ${g}`,kind:s.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Q(e,t)),void 0,!Y)}}e.s(["handler",0,b,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:g,workUnitAsyncStorage:w})},"routeModule",0,y,"serverHooks",0,x,"workAsyncStorage",0,g,"workUnitAsyncStorage",0,w])},12892,67119,e=>{"use strict";var t=e.i(2157),r=e.i(50227),n=e.i(39151),a=e.i(19374);function s(e,t=[],r=[]){let o,i="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,l=(0,n.forwardRef)(({className:e,...t},r)=>(0,n.createElement)(a.default,{ref:r,icon:i,className:e,...t}));return i.name&&(l.displayName=(o=(e=>{let t="",r=!1;for(let n of e){if("-"===n||"_"===n||n<=" "){r=t.length>0;continue}0===t.length?t+=n.toLowerCase():t+=r?n.toUpperCase():n,r=!1}return t})(i.name)).charAt(0).toUpperCase()+o.slice(1)),l}let o={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"}]]};o.node;let i=s(o),l={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"}]]};l.node;let c=s(l);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),n=e<0?"-":"";return r<3600?`${n}${Math.floor(r/60)}m ${r%60}s`:`${n}${Math.floor(r/3600)}h ${Math.floor(r%3600/60)}m`}let u=["pages","traffic","loadTime","apdex","vitals","ajax","errorRate","errors"],p=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,h=e=>void 0===e?"—":d(e),f=e=>e.byTool?.sentry?.errors??(e.sentry&&{count:e.sentry.errorCount,latest:e.sentry.latestErrors}),R=e=>f(e)?.count??0,v={"new-relic":{label:"New Relic",icon:i,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(p(e.map(e=>e.newRelic.loadTime)))},{label:"Avg LCP",value:d(p(e.map(e=>e.newRelic.lcp)))},{label:"Avg TTFB",value:d(p(e.map(e=>e.newRelic.ttfb)))},{label:"Avg Apdex",value:p(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 per page over the last 24 hours, with page loads and web vitals when your site sends traces.",connectReason:"Add your Sentry keys to see the errors on each page.",keys:{required:["SENTRY_API_KEY","SENTRY_DSN"],optional:[]},capabilities:["pages","traffic","vitals","errors"],stats:e=>{let t=e.reduce((e,t)=>R(t)>(e?R(e):0)?t:e,null);return[{label:"Total Errors",value:String(e.map(R).reduce((e,t)=>e+t,0))},{label:"Pages With Errors",value:`${e.filter(e=>R(e)>0).length} of ${e.length}`},{label:"Noisiest Page",value:t?.name??"None"}]},columns:[{needs:"errors",header:"Errors",cell:e=>String(R(e))},{needs:"errors",header:"Latest Error",cell:e=>f(e)?.latest[0]?.title??"—"},{needs:"errors",header:"Last Seen",cell:e=>{let t=Date.parse(f(e)?.latest[0]?.lastSeen??"");return Number.isNaN(t)?"—":new Date(t).toLocaleString()}},{needs:"traffic",header:"Page loads (sampled)",cell:e=>e.byTool?.sentry?.traffic?.count.toLocaleString()??"—"},{needs:"vitals",header:"LCP",cell:e=>h(e.byTool?.sentry?.vitals?.lcp)},{needs:"vitals",header:"TTFB",cell:e=>h(e.byTool?.sentry?.vitals?.ttfb)},{needs:"vitals",header:"CLS",cell:e=>e.byTool?.sentry?.vitals?.cls?.toFixed(2)??"—"},{needs:"vitals",header:"INP",cell:e=>h(e.byTool?.sentry?.vitals?.inp)}]}},m=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])),E=Object.keys(v);e.s(["KEY_LABELS",0,m,"TOOLS",0,v,"TOOL_IDS",0,E,"mergeMetrics",0,function(e,t,r){let n={};for(let[a,s]of Object.entries(t)){let t=r.includes(s)?void 0:e[s]?.[a];void 0!==t&&(n[a]=t)}return n},"sourcesFor",0,function(e){let t={};for(let r of u){let n=E.find(t=>e.includes(t)&&v[t].capabilities.includes(r));n&&(t[r]=n)}return t}],67119);let y=E.flatMap(e=>v[e].keys.required),g="NEWRELIC_REGION",w={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"}},x={gemini:{label:"Google Gemini",key:"GEMINI_API_KEY"},claude:{label:"Anthropic Claude",key:"CLAUDE_API_KEY"},openai:{label:"OpenAI",key:"OPENAI_API_KEY"}},b="AI_PROVIDER";function S(e){return process.env[e]??""}let C=e=>v[e].keys.required.every(e=>S(e));function T(){return process.env.METRICFLOW_PROJECT_DIR||process.cwd()}let _=/[\s\0#"'`\\$]/;class A extends Error{}e.s(["AI_PROVIDERS",0,x,"AI_PROVIDER_KEY",0,b,"EnvWriteRefused",0,A,"INSERT_KEY",0,"NEWRELIC_INSERT_KEY","REGION_KEY",0,g,"SETUP_KEYS",0,y,"UNSAFE",0,_,"activeAi",0,function(){let e=process.env[b];for(let t of(e&&e in x?[e]:[]).concat(Object.keys(x))){let e=process.env[x[t].key];if(e)return{provider:t,key:e}}return null},"connectedTools",0,()=>E.filter(C),"env",0,S,"isToolConnected",0,C,"nrHosts",0,(e="eu"===process.env[g]?"eu":"us")=>w[e],"projectDir",0,T,"writeEnvLocal",0,function(e,n=process.env.METRICFLOW_ENV_FILE||(0,r.join)(T(),".env.local")){let a=new Set([...Object.values(v).flatMap(e=>[...e.keys.required,...e.keys.optional,...e.keys.derived??[]]),...Object.values(x).map(e=>e.key),b]);for(let[t,r]of Object.entries(e)){if(!a.has(t))throw new A("Refused to write a key name no tool declares.");if(_.test(r))throw new A("Refused to write a value with unsafe characters.")}let s=(0,t.existsSync)(n)?(0,t.readFileSync)(n,"utf8").split("\n"):[],o=new Map(Object.entries(e)),i=s.map(e=>{let t=e.match(/^\s*([A-Z0-9_]+)\s*=/)?.[1];if(t&&o.has(t)){let e=o.get(t);return o.delete(t),`${t}=${e}`}return e});for(;i.length&&""===i[i.length-1];)i.pop();for(let[e,t]of o)i.push(`${e}=${t}`);let l=`${n}.tmp`;for(let[r,a]of((0,t.writeFileSync)(l,i.join("\n")+"\n",{mode:384}),(0,t.renameSync)(l,n),Object.entries(e)))process.env[r]=a}],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 n=e.headers.get("x-forwarded-for");if(n&&!n.split(",").every(e=>r.has(e.trim().replace(/^\[|\]$/g,"")))||"cross-site"===e.headers.get("sec-fetch-site"))return!1;let a=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(a))return!1;let s=e.headers.get("origin");try{return!s||t.has(new URL(s).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
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__18s35pf._.js.map
@@ -1,3 +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"))},83464,e=>{"use strict";var t=e.i(60756),r=e.i(12892),a=e.i(24514);let s=/[\s\0#"'`\\$]/,n=()=>Response.json({error:(0,a.REFUSAL_MESSAGE)()},{status:403}),o={gemini:e=>t.default.get("https://generativelanguage.googleapis.com/v1beta/models",{params:{key:e},timeout:8e3}),claude:e=>t.default.get("https://api.anthropic.com/v1/models",{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"},timeout:8e3}),openai:e=>t.default.get("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${e}`},timeout:8e3})};async function i(e){return(0,a.isLocalRequest)(e)?Response.json({provider:(0,r.activeAi)()?.provider??null,keys:Object.fromEntries(Object.entries(r.AI_PROVIDERS).map(([e,t])=>[e,!!process.env[t.key]]))}):n()}async function l(e){let i;if(!(0,a.isLocalRequest)(e))return n();try{i=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let l=i.provider;if(!("string"==typeof l&&l in r.AI_PROVIDERS))return Response.json({saved:!1,error:"Choose a provider."},{status:400});let u="string"==typeof i.key?i.key.trim():"";if(!u)return Response.json({saved:!1,error:"Required."},{status:400});if(s.test(u))return Response.json({saved:!1,error:"Contains spaces or special characters. Paste the key without them."},{status:400});try{await o[l](u)}catch(s){let e=t.default.isAxiosError(s)?s.response?.status:void 0,a=400===e||401===e||403===e?`${r.AI_PROVIDERS[l].label} rejected this key.`:`Could not reach ${r.AI_PROVIDERS[l].label} to check the key.`;return Response.json({saved:!1,error:a},{status:422})}try{(0,r.writeEnvLocal)({[r.AI_PROVIDER_KEY]:l,[r.AI_PROVIDERS[l].key]:u})}catch{return Response.json({saved:!1,error:"Key is valid but .env.local could not be written. Check folder permissions."},{status:500})}return Response.json({saved:!0,provider:l})}e.s(["GET",0,i,"POST",0,l])},9001,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),h=e.i(29398),R=e.i(31610),f=e.i(45919),v=e.i(93695),m=e.i(12741);e.i(95315);var E=e.i(98732);let x=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/setup/ai/route",pathname:"/api/setup/ai",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/setup/ai/route.ts",nextConfigOutput:"",userland:()=>e.r(83464),...{}}),{workAsyncStorage:y,workUnitAsyncStorage:g,serverHooks:w}=x;async function b(e,t,a){a.requestMeta&&(0,s.setRequestMeta)(e,a.requestMeta),x.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/setup/ai/route";y=y.replace(/\/index$/,"")||"/";let g=await x.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:w,deploymentId:b,params:C,nextConfig:_,parsedUrl:A,isDraftMode:S,prerenderManifest:I,routerServerContext:N,isOnDemandRevalidate:k,revalidateOnlyGenerated:T,resolvedPathname:O,clientReferenceManifest:q,serverActionsManifest:P}=g,j=(0,i.normalizeAppPath)(y),L=!!I.routes[O]&&(x.isDev||(0,m.isRouteCacheOwner)(O,x.cacheOwner,I.routes[O])),M=!!(I.dynamicRoutes[j]||L),D=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,A,!1):t.end("This page could not be found"),null);if(M&&!S){let e=I.dynamicRoutes[j];if(e&&!1===e.fallback&&!L){if(_.adapterPath)return await D();throw new v.NoFallbackError}}let $=null;!M||x.isDev||S||($="/index"===($=O)?"/":$);let U=!0===x.isDev||!M,F=M&&!U;P&&q&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:q,serverActionsManifest:P});let K=e.method||"GET",H=(0,n.getTracer)(),Y=H.getActiveScopeSpan(),W=!!(null==N?void 0:N.isWrappedByNextServer),V=!!(0,s.getRequestMeta)(e,"minimalMode"),G=(0,s.getRequestMeta)(e,"incrementalCache")||await x.getIncrementalCache(e,_,I,V);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let z={params:C,previewProps:I.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts,useCacheTimeout:_.experimental.useCacheTimeout},cacheComponents:!!_.cacheComponents,validationLevel:_.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:U,incrementalCache:G,hmrRefreshHash:(0,s.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:_.cacheLife,staticPageGenerationTimeout:_.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,s)=>x.onRequestError(e,t,a,s,N)},sharedContext:{buildId:w,deploymentId:b}},B=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),Z=u.NextRequestAdapter.fromNodeNextRequest(B,(0,u.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!V&&k&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await x.handle(Z,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let n=z.renderOpts.pendingWaitUntil;n&&a.waitUntil&&(a.waitUntil(n),n=void 0);let o=z.renderOpts.collectedTags;if(!M)return await (0,p.sendResponse)(B,X,s,n),null;{let e=await s.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(s.headers);o&&(t[f.NEXT_CACHE_TAGS_HEADER]=o),!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?_.expireTime:void 0:z.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 x.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:k})},!1,N),t}},Q=async(s,o)=>{try{var i,l;let s=await x.handleResponse({req:e,nextConfig:_,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:T,responseGenerator:J,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"),S&&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(f.NEXT_CACHE_TAGS_HEADER),!s.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,R.getCacheControlHeader)(s.cacheControl)),await (0,p.sendResponse)(B,X,new Response(s.value.body,{headers:n,status:s.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await x.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:k})},!1,N),M)throw t;await (0,p.sendResponse)(B,X,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=H.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")||j,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(W&&Y)await Q(Y,void 0);else{let t=H.getActiveScopeSpan();await H.withPropagatedContext(e.headers,()=>H.trace(c.BaseServerSpan.handleRequest,{spanName:`${K} ${y}`,kind:n.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Q(e,t)),void 0,!W)}}e.s(["handler",0,b,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:g})},"routeModule",0,x,"serverHooks",0,w,"workAsyncStorage",0,y,"workUnitAsyncStorage",0,g])},12892,67119,e=>{"use strict";var t=e.i(2157),r=e.i(50227),a=e.i(39151),s=e.i(19374);function n(e,t=[],r=[]){let o,i="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,l=(0,a.forwardRef)(({className:e,...t},r)=>(0,a.createElement)(s.default,{ref:r,icon:i,className:e,...t}));return i.name&&(l.displayName=(o=(e=>{let t="",r=!1;for(let a of e){if("-"===a||"_"===a||a<=" "){r=t.length>0;continue}0===t.length?t+=a.toLowerCase():t+=r?a.toUpperCase():a,r=!1}return t})(i.name)).charAt(0).toUpperCase()+o.slice(1)),l}let o={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"}]]};o.node;let i=n(o),l={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"}]]};l.node;let u=n(l);function c(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),a=e<0?"-":"";return r<3600?`${a}${Math.floor(r/60)}m ${r%60}s`:`${a}${Math.floor(r/3600)}h ${Math.floor(r%3600/60)}m`}let d=["pages","traffic","loadTime","apdex","vitals","ajax","errorRate","errors"],p=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,h={"new-relic":{label:"New Relic",icon:i,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:c(p(e.map(e=>e.newRelic.loadTime)))},{label:"Avg LCP",value:c(p(e.map(e=>e.newRelic.lcp)))},{label:"Avg TTFB",value:c(p(e.map(e=>e.newRelic.ttfb)))},{label:"Avg Apdex",value:p(e.map(e=>e.newRelic.apdexScore)).toFixed(2)}],columns:[{needs:"loadTime",header:"Load",cell:e=>c(e.newRelic.loadTime)},{needs:"vitals",header:"LCP",cell:e=>c(e.newRelic.lcp)},{needs:"vitals",header:"TTFB",cell:e=>c(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?"—":c(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:u,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()}}]}},R=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])),f=Object.keys(h);e.s(["KEY_LABELS",0,R,"TOOLS",0,h,"TOOL_IDS",0,f,"mergeMetrics",0,function(e,t,r){let a={};for(let[s,n]of Object.entries(t)){let t=r.includes(n)?void 0:e[n]?.[s];void 0!==t&&(a[s]=t)}return a},"sourcesFor",0,function(e){let t={};for(let r of d){let a=f.find(t=>e.includes(t)&&h[t].capabilities.includes(r));a&&(t[r]=a)}return t}],67119);let v=f.flatMap(e=>h[e].keys.required),m="NEWRELIC_REGION",E={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"}},x={gemini:{label:"Google Gemini",key:"GEMINI_API_KEY"},claude:{label:"Anthropic Claude",key:"CLAUDE_API_KEY"},openai:{label:"OpenAI",key:"OPENAI_API_KEY"}},y="AI_PROVIDER";function g(e){return process.env[e]??""}let w=e=>h[e].keys.required.every(e=>g(e));function b(){return process.env.METRICFLOW_PROJECT_DIR||process.cwd()}let C=/[\s\0#"'`\\$]/;e.s(["AI_PROVIDERS",0,x,"AI_PROVIDER_KEY",0,y,"INSERT_KEY",0,"NEWRELIC_INSERT_KEY","REGION_KEY",0,m,"SETUP_KEYS",0,v,"UNSAFE",0,C,"activeAi",0,function(){let e=process.env[y];for(let t of(e&&e in x?[e]:[]).concat(Object.keys(x))){let e=process.env[x[t].key];if(e)return{provider:t,key:e}}return null},"connectedTools",0,()=>f.filter(w),"env",0,g,"isToolConnected",0,w,"nrHosts",0,(e="eu"===process.env[m]?"eu":"us")=>E[e],"projectDir",0,b,"writeEnvLocal",0,function(e,a=process.env.METRICFLOW_ENV_FILE||(0,r.join)(b(),".env.local")){let s=new Set([...Object.values(h).flatMap(e=>[...e.keys.required,...e.keys.optional,...e.keys.derived??[]]),...Object.values(x).map(e=>e.key),y]);for(let[t,r]of Object.entries(e)){if(!s.has(t))throw Error("Refused to write a key name no tool declares.");if(C.test(r))throw Error("Refused to write a value with unsafe characters.")}let n=(0,t.existsSync)(a)?(0,t.readFileSync)(a,"utf8").split("\n"):[],o=new Map(Object.entries(e)),i=n.map(e=>{let t=e.match(/^\s*([A-Z0-9_]+)\s*=/)?.[1];if(t&&o.has(t)){let e=o.get(t);return o.delete(t),`${t}=${e}`}return e});for(;i.length&&""===i[i.length-1];)i.pop();for(let[e,t]of o)i.push(`${e}=${t}`);let l=`${a}.tmp`;for(let[r,s]of((0,t.writeFileSync)(l,i.join("\n")+"\n",{mode:384}),(0,t.renameSync)(l,a),Object.entries(e)))process.env[r]=s}],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 a=e.headers.get("x-forwarded-for");if(a&&!a.split(",").every(e=>r.has(e.trim().replace(/^\[|\]$/g,"")))||"cross-site"===e.headers.get("sec-fetch-site"))return!1;let s=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(s))return!1;let n=e.headers.get("origin");try{return!n||t.has(new URL(n).hostname)}catch{return!1}}])},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}];
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"))},83464,e=>{"use strict";var t=e.i(60756),r=e.i(12892),s=e.i(24514);let a=()=>Response.json({error:(0,s.REFUSAL_MESSAGE)()},{status:403}),n={gemini:e=>t.default.get("https://generativelanguage.googleapis.com/v1beta/models",{params:{key:e},timeout:8e3}),claude:e=>t.default.get("https://api.anthropic.com/v1/models",{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"},timeout:8e3}),openai:e=>t.default.get("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${e}`},timeout:8e3})};async function o(e){return(0,s.isLocalRequest)(e)?Response.json({provider:(0,r.activeAi)()?.provider??null,keys:Object.fromEntries(Object.entries(r.AI_PROVIDERS).map(([e,t])=>[e,!!process.env[t.key]]))}):a()}async function i(e){let o;if(!(0,s.isLocalRequest)(e))return a();try{o=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let i=(0,s.requireJson)(e);if(i)return i;let l=o.provider;if(!("string"==typeof l&&l in r.AI_PROVIDERS))return Response.json({saved:!1,error:"Choose a provider."},{status:400});let d="string"==typeof o.key?o.key.trim():"";if(!d)return Response.json({saved:!1,error:"Required."},{status:400});if(r.UNSAFE.test(d))return Response.json({saved:!1,error:"Contains spaces or special characters. Paste the key without them."},{status:400});try{await n[l](d)}catch(a){let e=t.default.isAxiosError(a)?a.response?.status:void 0,s=400===e||401===e||403===e?`${r.AI_PROVIDERS[l].label} rejected this key.`:`Could not reach ${r.AI_PROVIDERS[l].label} to check the key.`;return Response.json({saved:!1,error:s},{status:422})}try{(0,r.writeEnvLocal)({[r.AI_PROVIDER_KEY]:l,[r.AI_PROVIDERS[l].key]:d})}catch(e){if(e instanceof r.EnvWriteRefused)return Response.json({saved:!1,error:"Nothing was saved: the key or its name was refused as unsafe."},{status:400});return Response.json({saved:!1,error:"Key is valid but .env.local could not be written. Check folder permissions."},{status:500})}return Response.json({saved:!0,provider:l})}e.s(["GET",0,o,"POST",0,i])},9001,e=>{"use strict";var t=e.i(12425),r=e.i(83353),s=e.i(47902),a=e.i(37892),n=e.i(54261),o=e.i(39548),i=e.i(68187),l=e.i(63984),d=e.i(88743),u=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 y=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/setup/ai/route",pathname:"/api/setup/ai",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/setup/ai/route.ts",nextConfigOutput:"",userland:()=>e.r(83464),...{}}),{workAsyncStorage:x,workUnitAsyncStorage:g,serverHooks:w}=y;async function b(e,t,s){s.requestMeta&&(0,a.setRequestMeta)(e,s.requestMeta),y.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/setup/ai/route";x=x.replace(/\/index$/,"")||"/";let g=await y.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,deploymentId:b,params:C,nextConfig:S,parsedUrl:A,isDraftMode:_,prerenderManifest:I,routerServerContext:T,isOnDemandRevalidate:N,revalidateOnlyGenerated:k,resolvedPathname:O,clientReferenceManifest:q,serverActionsManifest:P}=g,j=(0,i.normalizeAppPath)(x),L=!!I.routes[O]&&(y.isDev||(0,m.isRouteCacheOwner)(O,y.cacheOwner,I.routes[O])),M=!!(I.dynamicRoutes[j]||L),D=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,A,!1):t.end("This page could not be found"),null);if(M&&!_){let e=I.dynamicRoutes[j];if(e&&!1===e.fallback&&!L){if(S.adapterPath)return await D();throw new R.NoFallbackError}}let $=null;!M||y.isDev||_||($="/index"===($=O)?"/":$);let F=!0===y.isDev||!M,U=M&&!F;P&&q&&(0,o.setManifestsSingleton)({page:x,clientReferenceManifest:q,serverActionsManifest:P});let K=e.method||"GET",H=(0,n.getTracer)(),W=H.getActiveScopeSpan(),Y=!!(null==T?void 0:T.isWrappedByNextServer),V=!!(0,a.getRequestMeta)(e,"minimalMode"),G=(0,a.getRequestMeta)(e,"incrementalCache")||await y.getIncrementalCache(e,S,I,V);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let B={params:C,previewProps:I.preview,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts,useCacheTimeout:S.experimental.useCacheTimeout},cacheComponents:!!S.cacheComponents,validationLevel:S.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:F,incrementalCache:G,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:S.cacheLife,staticPageGenerationTimeout:S.staticPageGenerationTimeout,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,a)=>y.onRequestError(e,t,s,a,T)},sharedContext:{buildId:w,deploymentId:b}},z=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),J=d.NextRequestAdapter.fromNodeNextRequest(z,(0,d.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:r})=>{try{if(!V&&N&&k&&!r)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,B);e.fetchMetrics=B.renderOpts.fetchMetrics;let n=B.renderOpts.pendingWaitUntil;n&&s.waitUntil&&(s.waitUntil(n),n=void 0);let o=B.renderOpts.collectedTags;if(!M)return await (0,p.sendResponse)(z,X,a,n),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);o&&(t[v.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=v.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,s=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=v.INFINITE_CACHE?!1!==r&&r>0?S.expireTime:void 0:B.renderOpts.collectedExpire;return{value:{kind:E.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:x,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:N})},!1,T),t}},Q=async(a,o)=>{try{var i,l;let a=await y.handleResponse({req:e,nextConfig:S,cacheKey:$,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:k,responseGenerator:Z,waitUntil:s.waitUntil,isMinimalMode:V});if(!M)return;if((null==a||null==(i=a.value)?void 0:i.kind)!==E.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});V||t.setHeader("x-nextjs-cache",N?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);V&&M||n.delete(v.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,f.getCacheControlHeader)(a.cacheControl)),await (0,p.sendResponse)(z,X,new Response(a.value.body,{headers:n,status:a.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:N})},!1,T),M)throw t;await (0,p.sendResponse)(z,X,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:n.SpanStatusCode.ERROR}),a.setAttribute("error.type",e.toString()));let r=H.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 s=r.get("next.route")||j,i=`${K} ${s}`;a.setAttributes({"next.route":s,"http.route":s,"next.span_name":i}),a.updateName(i),o&&o!==a&&(o.setAttribute("http.route",s),o.updateName(i))})()}};if(Y&&W)await Q(W,void 0);else{let t=H.getActiveScopeSpan();await H.withPropagatedContext(e.headers,()=>H.trace(u.BaseServerSpan.handleRequest,{spanName:`${K} ${x}`,kind:n.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Q(e,t)),void 0,!Y)}}e.s(["handler",0,b,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:g})},"routeModule",0,y,"serverHooks",0,w,"workAsyncStorage",0,x,"workUnitAsyncStorage",0,g])},12892,67119,e=>{"use strict";var t=e.i(2157),r=e.i(50227),s=e.i(39151),a=e.i(19374);function n(e,t=[],r=[]){let o,i="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,l=(0,s.forwardRef)(({className:e,...t},r)=>(0,s.createElement)(a.default,{ref:r,icon:i,className:e,...t}));return i.name&&(l.displayName=(o=(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})(i.name)).charAt(0).toUpperCase()+o.slice(1)),l}let o={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"}]]};o.node;let i=n(o),l={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"}]]};l.node;let d=n(l);function u(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 c=["pages","traffic","loadTime","apdex","vitals","ajax","errorRate","errors"],p=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,h=e=>void 0===e?"—":u(e),f=e=>e.byTool?.sentry?.errors??(e.sentry&&{count:e.sentry.errorCount,latest:e.sentry.latestErrors}),v=e=>f(e)?.count??0,R={"new-relic":{label:"New Relic",icon:i,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:u(p(e.map(e=>e.newRelic.loadTime)))},{label:"Avg LCP",value:u(p(e.map(e=>e.newRelic.lcp)))},{label:"Avg TTFB",value:u(p(e.map(e=>e.newRelic.ttfb)))},{label:"Avg Apdex",value:p(e.map(e=>e.newRelic.apdexScore)).toFixed(2)}],columns:[{needs:"loadTime",header:"Load",cell:e=>u(e.newRelic.loadTime)},{needs:"vitals",header:"LCP",cell:e=>u(e.newRelic.lcp)},{needs:"vitals",header:"TTFB",cell:e=>u(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?"—":u(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:d,description:"Errors per page over the last 24 hours, with page loads and web vitals when your site sends traces.",connectReason:"Add your Sentry keys to see the errors on each page.",keys:{required:["SENTRY_API_KEY","SENTRY_DSN"],optional:[]},capabilities:["pages","traffic","vitals","errors"],stats:e=>{let t=e.reduce((e,t)=>v(t)>(e?v(e):0)?t:e,null);return[{label:"Total Errors",value:String(e.map(v).reduce((e,t)=>e+t,0))},{label:"Pages With Errors",value:`${e.filter(e=>v(e)>0).length} of ${e.length}`},{label:"Noisiest Page",value:t?.name??"None"}]},columns:[{needs:"errors",header:"Errors",cell:e=>String(v(e))},{needs:"errors",header:"Latest Error",cell:e=>f(e)?.latest[0]?.title??"—"},{needs:"errors",header:"Last Seen",cell:e=>{let t=Date.parse(f(e)?.latest[0]?.lastSeen??"");return Number.isNaN(t)?"—":new Date(t).toLocaleString()}},{needs:"traffic",header:"Page loads (sampled)",cell:e=>e.byTool?.sentry?.traffic?.count.toLocaleString()??"—"},{needs:"vitals",header:"LCP",cell:e=>h(e.byTool?.sentry?.vitals?.lcp)},{needs:"vitals",header:"TTFB",cell:e=>h(e.byTool?.sentry?.vitals?.ttfb)},{needs:"vitals",header:"CLS",cell:e=>e.byTool?.sentry?.vitals?.cls?.toFixed(2)??"—"},{needs:"vitals",header:"INP",cell:e=>h(e.byTool?.sentry?.vitals?.inp)}]}},m=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])),E=Object.keys(R);e.s(["KEY_LABELS",0,m,"TOOLS",0,R,"TOOL_IDS",0,E,"mergeMetrics",0,function(e,t,r){let s={};for(let[a,n]of Object.entries(t)){let t=r.includes(n)?void 0:e[n]?.[a];void 0!==t&&(s[a]=t)}return s},"sourcesFor",0,function(e){let t={};for(let r of c){let s=E.find(t=>e.includes(t)&&R[t].capabilities.includes(r));s&&(t[r]=s)}return t}],67119);let y=E.flatMap(e=>R[e].keys.required),x="NEWRELIC_REGION",g={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"}},w={gemini:{label:"Google Gemini",key:"GEMINI_API_KEY"},claude:{label:"Anthropic Claude",key:"CLAUDE_API_KEY"},openai:{label:"OpenAI",key:"OPENAI_API_KEY"}},b="AI_PROVIDER";function C(e){return process.env[e]??""}let S=e=>R[e].keys.required.every(e=>C(e));function A(){return process.env.METRICFLOW_PROJECT_DIR||process.cwd()}let _=/[\s\0#"'`\\$]/;class I extends Error{}e.s(["AI_PROVIDERS",0,w,"AI_PROVIDER_KEY",0,b,"EnvWriteRefused",0,I,"INSERT_KEY",0,"NEWRELIC_INSERT_KEY","REGION_KEY",0,x,"SETUP_KEYS",0,y,"UNSAFE",0,_,"activeAi",0,function(){let e=process.env[b];for(let t of(e&&e in w?[e]:[]).concat(Object.keys(w))){let e=process.env[w[t].key];if(e)return{provider:t,key:e}}return null},"connectedTools",0,()=>E.filter(S),"env",0,C,"isToolConnected",0,S,"nrHosts",0,(e="eu"===process.env[x]?"eu":"us")=>g[e],"projectDir",0,A,"writeEnvLocal",0,function(e,s=process.env.METRICFLOW_ENV_FILE||(0,r.join)(A(),".env.local")){let a=new Set([...Object.values(R).flatMap(e=>[...e.keys.required,...e.keys.optional,...e.keys.derived??[]]),...Object.values(w).map(e=>e.key),b]);for(let[t,r]of Object.entries(e)){if(!a.has(t))throw new I("Refused to write a key name no tool declares.");if(_.test(r))throw new I("Refused to write a value with unsafe characters.")}let n=(0,t.existsSync)(s)?(0,t.readFileSync)(s,"utf8").split("\n"):[],o=new Map(Object.entries(e)),i=n.map(e=>{let t=e.match(/^\s*([A-Z0-9_]+)\s*=/)?.[1];if(t&&o.has(t)){let e=o.get(t);return o.delete(t),`${t}=${e}`}return e});for(;i.length&&""===i[i.length-1];)i.pop();for(let[e,t]of o)i.push(`${e}=${t}`);let l=`${s}.tmp`;for(let[r,a]of((0,t.writeFileSync)(l,i.join("\n")+"\n",{mode:384}),(0,t.renameSync)(l,s),Object.entries(e)))process.env[r]=a}],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 a=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(a))return!1;let n=e.headers.get("origin");try{return!n||t.has(new URL(n).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
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__1f_fo0j._.js.map
@@ -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"))},12892,67119,e=>{"use strict";var t=e.i(2157),r=e.i(50227),s=e.i(39151),a=e.i(19374);function n(e,t=[],r=[]){let o,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)(a.default,{ref:r,icon:l,className:e,...t}));return l.name&&(i.displayName=(o=(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()+o.slice(1)),i}let o={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"}]]};o.node;let l=n(o),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=n(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=e=>void 0===e?"—":d(e),f=e=>e.byTool?.sentry?.errors??(e.sentry&&{count:e.sentry.errorCount,latest:e.sentry.latestErrors}),x=e=>f(e)?.count??0,y={"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 per page over the last 24 hours, with page loads and web vitals when your site sends traces.",connectReason:"Add your Sentry keys to see the errors on each page.",keys:{required:["SENTRY_API_KEY","SENTRY_DSN"],optional:[]},capabilities:["pages","traffic","vitals","errors"],stats:e=>{let t=e.reduce((e,t)=>x(t)>(e?x(e):0)?t:e,null);return[{label:"Total Errors",value:String(e.map(x).reduce((e,t)=>e+t,0))},{label:"Pages With Errors",value:`${e.filter(e=>x(e)>0).length} of ${e.length}`},{label:"Noisiest Page",value:t?.name??"None"}]},columns:[{needs:"errors",header:"Errors",cell:e=>String(x(e))},{needs:"errors",header:"Latest Error",cell:e=>f(e)?.latest[0]?.title??"—"},{needs:"errors",header:"Last Seen",cell:e=>{let t=Date.parse(f(e)?.latest[0]?.lastSeen??"");return Number.isNaN(t)?"—":new Date(t).toLocaleString()}},{needs:"traffic",header:"Page loads (sampled)",cell:e=>e.byTool?.sentry?.traffic?.count.toLocaleString()??"—"},{needs:"vitals",header:"LCP",cell:e=>h(e.byTool?.sentry?.vitals?.lcp)},{needs:"vitals",header:"TTFB",cell:e=>h(e.byTool?.sentry?.vitals?.ttfb)},{needs:"vitals",header:"CLS",cell:e=>e.byTool?.sentry?.vitals?.cls?.toFixed(2)??"—"},{needs:"vitals",header:"INP",cell:e=>h(e.byTool?.sentry?.vitals?.inp)}]}},v=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])),m=Object.keys(y);e.s(["KEY_LABELS",0,v,"TOOLS",0,y,"TOOL_IDS",0,m,"mergeMetrics",0,function(e,t,r){let s={};for(let[a,n]of Object.entries(t)){let t=r.includes(n)?void 0:e[n]?.[a];void 0!==t&&(s[a]=t)}return s},"sourcesFor",0,function(e){let t={};for(let r of p){let s=m.find(t=>e.includes(t)&&y[t].capabilities.includes(r));s&&(t[r]=s)}return t}],67119);let E=m.flatMap(e=>y[e].keys.required),R="NEWRELIC_REGION",g={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"}},b={gemini:{label:"Google Gemini",key:"GEMINI_API_KEY"},claude:{label:"Anthropic Claude",key:"CLAUDE_API_KEY"},openai:{label:"OpenAI",key:"OPENAI_API_KEY"}},w="AI_PROVIDER";function _(e){return process.env[e]??""}let I=e=>y[e].keys.required.every(e=>_(e));function S(){return process.env.METRICFLOW_PROJECT_DIR||process.cwd()}let N=/[\s\0#"'`\\$]/;class k extends Error{}e.s(["AI_PROVIDERS",0,b,"AI_PROVIDER_KEY",0,w,"EnvWriteRefused",0,k,"INSERT_KEY",0,"NEWRELIC_INSERT_KEY","REGION_KEY",0,R,"SETUP_KEYS",0,E,"UNSAFE",0,N,"activeAi",0,function(){let e=process.env[w];for(let t of(e&&e in b?[e]:[]).concat(Object.keys(b))){let e=process.env[b[t].key];if(e)return{provider:t,key:e}}return null},"connectedTools",0,()=>m.filter(I),"env",0,_,"isToolConnected",0,I,"nrHosts",0,(e="eu"===process.env[R]?"eu":"us")=>g[e],"projectDir",0,S,"writeEnvLocal",0,function(e,s=process.env.METRICFLOW_ENV_FILE||(0,r.join)(S(),".env.local")){let a=new Set([...Object.values(y).flatMap(e=>[...e.keys.required,...e.keys.optional,...e.keys.derived??[]]),...Object.values(b).map(e=>e.key),w]);for(let[t,r]of Object.entries(e)){if(!a.has(t))throw new k("Refused to write a key name no tool declares.");if(N.test(r))throw new k("Refused to write a value with unsafe characters.")}let n=(0,t.existsSync)(s)?(0,t.readFileSync)(s,"utf8").split("\n"):[],o=new Map(Object.entries(e)),l=n.map(e=>{let t=e.match(/^\s*([A-Z0-9_]+)\s*=/)?.[1];if(t&&o.has(t)){let e=o.get(t);return o.delete(t),`${t}=${e}`}return e});for(;l.length&&""===l[l.length-1];)l.pop();for(let[e,t]of o)l.push(`${e}=${t}`);let i=`${s}.tmp`;for(let[r,a]of((0,t.writeFileSync)(i,l.join("\n")+"\n",{mode:384}),(0,t.renameSync)(i,s),Object.entries(e)))process.env[r]=a}],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 a=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(a))return!1;let n=e.headers.get("origin");try{return!n||t.has(new URL(n).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__1naf7j4._.js.map