@karan171996/metricflow 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -2
- package/.next/build-manifest.json +3 -3
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +11 -11
- package/.next/routes-manifest.json +23 -3
- package/.next/server/app/_global-error/page.js +3 -3
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +2 -3
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +3 -3
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +10 -10
- package/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
- package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/analyze/route.js +3 -2
- package/.next/server/app/api/analyze/route.js.nft.json +1 -1
- package/.next/server/app/api/connect/route.js +2 -2
- package/.next/server/app/api/connect/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/route.js +2 -2
- package/.next/server/app/api/metrics/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/settings/route.js +6 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/setup/ai/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/setup/ai/route/build-manifest.json +12 -0
- package/.next/server/app/api/setup/ai/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/setup/ai/route.js +7 -0
- package/.next/server/app/api/setup/ai/route.js.nft.json +1 -0
- package/.next/server/app/api/setup/ai/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/setup/route.js +2 -2
- package/.next/server/app/api/setup/route.js.nft.json +1 -1
- package/.next/server/app/connect/page.js +3 -3
- package/.next/server/app/connect/page.js.nft.json +1 -1
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connect.html +2 -2
- package/.next/server/app/connect.rsc +12 -12
- package/.next/server/app/connect.segments/_full.segment.rsc +12 -12
- package/.next/server/app/connect.segments/_index.segment.rsc +8 -8
- package/.next/server/app/connect.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connect.segments/connect/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route/build-manifest.json +12 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/{favicon.ico → icon.svg}/route.js.nft.json +1 -1
- package/.next/server/app/icon.svg.body +4 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +12 -12
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +12 -12
- package/.next/server/app/index.segments/_index.segment.rsc +8 -8
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js +3 -3
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/[slug]/page.js +5 -4
- package/.next/server/app/performance/[slug]/page.js.nft.json +1 -1
- package/.next/server/app/performance/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/page.js +3 -3
- package/.next/server/app/performance/page.js.nft.json +1 -1
- package/.next/server/app/performance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance.html +2 -2
- package/.next/server/app/performance.rsc +13 -13
- package/.next/server/app/performance.segments/_full.segment.rsc +13 -13
- package/.next/server/app/performance.segments/_index.segment.rsc +8 -8
- package/.next/server/app/performance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/performance.segments/performance/__PAGE__.segment.rsc +27 -26
- package/.next/server/app/settings/page.js +4 -4
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +24 -24
- package/.next/server/app/settings.segments/_full.segment.rsc +24 -24
- package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -20
- package/.next/server/app/setup/page.js +3 -3
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +2 -2
- package/.next/server/app/setup.rsc +31 -30
- package/.next/server/app/setup.segments/_full.segment.rsc +31 -30
- package/.next/server/app/setup.segments/_index.segment.rsc +8 -8
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +25 -24
- package/.next/server/app/tools/[tool]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/tools/[tool]/page/build-manifest.json +19 -0
- package/.next/server/app/tools/[tool]/page/next-font-manifest.json +6 -0
- package/.next/server/app/tools/[tool]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/tools/[tool]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/tools/[tool]/page.js +17 -0
- package/.next/server/app/tools/[tool]/page.js.nft.json +1 -0
- package/.next/server/app/tools/[tool]/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +5 -2
- package/.next/server/chunks/[root-of-the-server]__027a1hx._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0chxb6o._.js → [root-of-the-server]__0eo1oa6._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1l249st._.js → [root-of-the-server]__0vkb6_m._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1d1y03f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1lxxc0h._.js +3 -0
- package/.next/server/chunks/{node_modules_0jatszq._.js → _0g9k22b._.js} +4 -4
- package/.next/server/chunks/_0zwkfj-._.js +8 -0
- package/.next/server/chunks/_10b5gsp._.js +22 -0
- package/.next/server/chunks/_1f-783b._.js +158 -0
- package/.next/server/chunks/_1pe45_3._.js +7 -7
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_setup_ai_route_actions_0-ay8t8.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__06gb9_u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d9igav._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fufdy-._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__15_sjnx._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__18-cm6x._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1fxaeqo._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1io3bae._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1pm7uf6._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1q99mso._.js +3 -0
- package/.next/server/chunks/ssr/{_1r2qog2._.js → _0-bp5v7._.js} +3 -3
- package/.next/server/chunks/ssr/{_042xeoh._.js → _06r8zrg._.js} +2 -2
- package/.next/server/chunks/ssr/_1-6djlo._.js +3 -0
- package/.next/server/chunks/ssr/{_1n9m819._.js → _1a5owey._.js} +2 -2
- package/.next/server/chunks/ssr/_1b_fov9._.js +3 -0
- package/.next/server/chunks/ssr/_1d1ipgp._.js +1 -1
- package/.next/server/chunks/ssr/_1d74ud1._.js +3 -0
- package/.next/server/chunks/ssr/{_0dbmzjx._.js → _1ovns3l._.js} +3 -151
- package/.next/server/chunks/ssr/_1y-b2zm._.js +151 -0
- package/.next/server/chunks/ssr/_1zb40ot._.js +3 -0
- package/.next/server/chunks/ssr/_20txlee._.js +1 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_tools_[tool]_page_actions_0-u-_p-.js +3 -0
- package/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js +1 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_0drixxt._.js +151 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/0ubjg1ka_080j.js +1 -0
- package/.next/static/chunks/{14pp7x-su_dnv.js → 19jmme1xtmib0.js} +2 -2
- package/.next/static/chunks/1jtdb3kujnm2_.css +1 -0
- package/.next/static/chunks/{0wyq7u3z0lfca.js → 1kpyel_do_nn_.js} +1 -1
- package/.next/static/chunks/1otvbjuxr6thq.js +1 -0
- package/.next/static/chunks/1wurvq5krow1k.js +1 -0
- package/.next/static/chunks/2bd8yoc_iosfu.js +1 -0
- package/.next/static/chunks/{3lqd2emjcxbd-.js → 2uf-bm2nz17t-.js} +1 -1
- package/.next/static/chunks/32d1qdgpjfhb0.js +4 -0
- package/.next/static/chunks/{2xy80eg_ueu_u.js → 41tx3tz7-8892.js} +1 -1
- package/.next/static/media/icon.23mz8iwcatff2.svg +4 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/LICENSE +21 -0
- package/bin/cli.mjs +7 -2
- package/package.json +4 -2
- package/.next/build/chunks/[root-of-the-server]__05i36w1._.js.map +0 -11
- package/.next/build/chunks/[root-of-the-server]__1kki86f._.js.map +0 -8
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1gfkiq9._.js.map +0 -5
- package/.next/build/chunks/[turbopack]_runtime.js.map +0 -11
- package/.next/build/chunks/node_modules_20v-8wl._.js.map +0 -47
- package/.next/build/chunks/pool_entry-[turbopack-node]_transforms_postcss_ts_0tp-k2v._.js.map +0 -5
- package/.next/server/app/_global-error/page.js.map +0 -5
- package/.next/server/app/_not-found/page.js.map +0 -5
- package/.next/server/app/api/analyze/route.js.map +0 -5
- package/.next/server/app/api/connect/route.js.map +0 -5
- package/.next/server/app/api/health/route.js.map +0 -5
- package/.next/server/app/api/metrics/route.js.map +0 -5
- package/.next/server/app/api/setup/route.js.map +0 -5
- package/.next/server/app/api/timings/route.js.map +0 -5
- package/.next/server/app/connect/page.js.map +0 -5
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
- package/.next/server/app/favicon.ico/route.js +0 -7
- package/.next/server/app/favicon.ico/route.js.map +0 -5
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +0 -1
- package/.next/server/app/page.js.map +0 -5
- package/.next/server/app/performance/[slug]/page.js.map +0 -5
- package/.next/server/app/performance/page.js.map +0 -5
- package/.next/server/app/settings/page.js.map +0 -5
- package/.next/server/app/setup/page.js.map +0 -5
- package/.next/server/chunks/[externals]__1o8qm3w._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0chxb6o._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__14tfjrn._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1fj5wte._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1i_tsds._.js +0 -22
- package/.next/server/chunks/[root-of-the-server]__1i_tsds._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1l249st._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1uv-wzy._.js.map +0 -1
- package/.next/server/chunks/[turbopack]_runtime.js.map +0 -10
- package/.next/server/chunks/_1494cut._.js.map +0 -1
- package/.next/server/chunks/_1gvvd7n._.js +0 -158
- package/.next/server/chunks/_1gvvd7n._.js.map +0 -1
- package/.next/server/chunks/_1pe45_3._.js.map +0 -1
- package/.next/server/chunks/_1qtlv__._.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_connect_route_actions_1r5w03m.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_health_route_actions_1ryftkb.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_metrics_route_actions_0qn5q3s.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_setup_route_actions_0txsuev.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_timings_route_actions_1tsq7j6.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js.map +0 -1
- package/.next/server/chunks/node_modules_0jatszq._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__036j_vr._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__036j_vr._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ev464o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ev464o._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0f5axvr._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0f5axvr._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0tmkhxy._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0tmkhxy._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ydfg18._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ydfg18._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__18hr860._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__18w2nrx._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__18w2nrx._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1c8dejo._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1mwg_vi._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1mwg_vi._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1p_6ezv._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1vxra_4._.js.map +0 -1
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +0 -10
- package/.next/server/chunks/ssr/_042xeoh._.js.map +0 -1
- package/.next/server/chunks/ssr/_0c7qo1d._.js +0 -3
- package/.next/server/chunks/ssr/_0c7qo1d._.js.map +0 -1
- package/.next/server/chunks/ssr/_0dbmzjx._.js.map +0 -1
- package/.next/server/chunks/ssr/_178o6nh._.js +0 -3
- package/.next/server/chunks/ssr/_178o6nh._.js.map +0 -1
- package/.next/server/chunks/ssr/_1bbiu24._.js +0 -3
- package/.next/server/chunks/ssr/_1bbiu24._.js.map +0 -1
- package/.next/server/chunks/ssr/_1d1ipgp._.js.map +0 -1
- package/.next/server/chunks/ssr/_1n9m819._.js.map +0 -1
- package/.next/server/chunks/ssr/_1p5i72g._.js +0 -151
- package/.next/server/chunks/ssr/_1p5i72g._.js.map +0 -1
- package/.next/server/chunks/ssr/_1r2qog2._.js.map +0 -1
- package/.next/server/chunks/ssr/_1rkc3oc._.js.map +0 -1
- package/.next/server/chunks/ssr/_20txlee._.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_1g-s_3i.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_performance_[slug]_page_actions_1pzv3w1.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_performance_page_actions_0vi13cc.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_setup_page_actions_0u1sm0s.js.map +0 -1
- package/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js.map +0 -1
- package/.next/server/chunks/ssr/app_loading_tsx_0a1flg9._.js.map +0 -1
- package/.next/server/chunks/ssr/app_performance_[slug]_loading_tsx_0d5z78a._.js.map +0 -1
- package/.next/server/chunks/ssr/app_performance_loading_tsx_1bq2nq9._.js.map +0 -1
- package/.next/server/chunks/ssr/app_settings_loading_tsx_0nv_78v._.js.map +0 -1
- package/.next/server/chunks/ssr/components_0j32dj5._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_1wax83z._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_cn_dist_index_166wuka.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_1v8aef8._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_server-async-storage_0t1dato.js.map +0 -1
- package/.next/static/chunks/13ihwqjtq_hlo.js +0 -1
- package/.next/static/chunks/1clwpy-vw07cb.js +0 -1
- package/.next/static/chunks/2-llbg7gt2gi5.js +0 -4
- package/.next/static/chunks/28w-hz8hg8t4v.css +0 -1
- package/.next/static/chunks/3rfi1wruz0m51.js +0 -1
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- /package/.next/server/app/{favicon.ico → api/settings}/route/build-manifest.json +0 -0
- /package/.next/static/{edA9zyNvRjRViNxMJ7dlC → kitK02ca_n40lM28SxiCO}/_buildManifest.js +0 -0
- /package/.next/static/{edA9zyNvRjRViNxMJ7dlC → kitK02ca_n40lM28SxiCO}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{edA9zyNvRjRViNxMJ7dlC → kitK02ca_n40lM28SxiCO}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/newrelic.ts","../../../lib/discoverPages.ts","../../../lib/sentry.ts","../../../app/api/metrics/route.ts","../../../lib/metricsHistory.ts","../../../node_modules/next/src/build/templates/app-route.ts"],"sourcesContent":["import axios from 'axios';\nimport { buildPages, normalizePath, type DiscoveredPage } from '@/lib/discoverPages';\n\n// US accounts only (EU needs api.eu.newrelic.com).\nconst NEWRELIC_API_URL = 'https://api.newrelic.com/graphql';\n\nexport interface NewRelicPageMetrics {\n loadTime: number;\n lcp: number;\n ttfb: number;\n cls: number;\n inp?: number;\n fid: number;\n errorRate: number;\n throughput: number;\n apdexScore: number;\n}\n\ninterface NewRelicGraphQLResponse {\n data?: { actor?: { account?: Record<string, { results: Record<string, unknown>[] } | undefined> } };\n errors?: unknown[];\n}\n\n/** NRQL percentile() comes back as { \"75\": value }; plain aggregates as a number. */\nfunction num(v: unknown): number {\n if (v && typeof v === 'object') return Number(Object.values(v)[0] ?? 0) || 0;\n return Number(v ?? 0) || 0;\n}\n\nconst WINDOW = 'SINCE 24 hours ago';\n\n/**\n * Real-user metrics per page path from New Relic's native browser events\n * (PageView, PageViewTiming, JavaScriptError), 75th percentiles, last 24h.\n * Keyed by normalized path. Unit note: PageView durations are seconds, the\n * dashboard shows ms. A path missing from the result has no events yet.\n * Throws on API failure so callers can show an error, not empty data.\n */\nexport async function getNewRelicMetrics(\n apiKey: string,\n accountId: string\n): Promise<Record<string, NewRelicPageMetrics>> {\n if (!apiKey || !accountId) return {};\n\n const q = (nrql: string) => `nrql(query: \"${nrql}\") { results }`;\n const query = `{ actor { account(id: ${Number(accountId)}) {\n views: ${q(`SELECT percentile(duration, 75) AS loadTime, percentile(backendDuration, 75) AS ttfb, count(*) AS views, apdex(duration, t: 2) AS apdex FROM PageView FACET pageUrl ${WINDOW} LIMIT 200`)}\n timing: ${q(`SELECT percentile(largestContentfulPaint, 75) AS lcp, percentile(cumulativeLayoutShift, 75) AS cls, percentile(interactionToNextPaint, 75) AS inp, percentile(firstInputDelay, 75) AS fid FROM PageViewTiming FACET pageUrl ${WINDOW} LIMIT 200`)}\n errors: ${q(`SELECT count(*) AS errors FROM JavaScriptError FACET pageUrl ${WINDOW} LIMIT 200`)}\n } } }`;\n\n let data: NewRelicGraphQLResponse;\n try {\n data = (await axios.post(NEWRELIC_API_URL, { query }, { headers: { 'API-Key': apiKey, 'Content-Type': 'application/json' }, timeout: 15000 })).data;\n } catch {\n throw new Error('Could not reach New Relic to load metrics.');\n }\n const account = data.data?.actor?.account;\n if (!account?.views) throw new Error('New Relic rejected the metrics query. Check your key and account ID.');\n\n const key = (r: Record<string, unknown>) => normalizePath(String(r.pageUrl ?? r.facet ?? ''));\n\n // Merge query-string variants: sum counts, view-weighted average of percentiles\n // (ponytail: averaging p75s is an approximation; exact merge needs NRQL on a normalized attribute).\n type Acc = { views: number; loadTime: number; ttfb: number; apdex: number; lcp: number; cls: number; inp: number; fid: number; errors: number };\n const acc: Record<string, Acc> = {};\n const get = (p: string) => (acc[p] ??= { views: 0, loadTime: 0, ttfb: 0, apdex: 0, lcp: 0, cls: 0, inp: 0, fid: 0, errors: 0 });\n\n for (const r of account.views.results) {\n const p = key(r);\n if (p === null) continue;\n const a = get(p), v = num(r.views);\n a.views += v;\n a.loadTime += num(r.loadTime) * 1000 * v;\n a.ttfb += num(r.ttfb) * 1000 * v;\n a.apdex += num(r.apdex) * v;\n }\n for (const r of account.timing?.results ?? []) {\n const p = key(r);\n if (p === null || !acc[p]) continue;\n const a = acc[p], v = a.views || 1;\n a.lcp += num(r.lcp) * v;\n a.cls += num(r.cls) * v;\n a.inp += num(r.inp) * v;\n a.fid += num(r.fid) * v;\n }\n for (const r of account.errors?.results ?? []) {\n const p = key(r);\n if (p !== null && acc[p]) acc[p].errors += num(r.errors);\n }\n\n const byPage: Record<string, NewRelicPageMetrics> = {};\n for (const [p, a] of Object.entries(acc)) {\n const w = a.views || 1;\n byPage[p] = {\n loadTime: a.loadTime / w,\n lcp: a.lcp / w,\n ttfb: a.ttfb / w,\n cls: a.cls / w,\n inp: a.inp / w,\n fid: a.fid / w,\n errorRate: a.views ? (a.errors / a.views) * 100 : 0,\n throughput: a.views,\n apdexScore: a.apdex / w\n };\n }\n return byPage;\n}\n\n/**\n * Top pages by page views in the last 24h, from New Relic's native PageView\n * event. Query-string variants of one path are merged. Throws on API failure\n * so the caller can show an error instead of an empty list.\n */\n// ponytail: 60s in-process memo so the metrics route and the detail page's 404 check share one call.\nlet discoverCache: { key: string; at: number; pages: DiscoveredPage[] } | null = null;\nconst DISCOVER_TTL_MS = 60_000;\n\nexport async function discoverPages(apiKey: string, accountId: string): Promise<DiscoveredPage[]> {\n if (!apiKey || !accountId) return [];\n const key = `${apiKey}:${accountId}`;\n if (discoverCache && discoverCache.key === key && Date.now() - discoverCache.at < DISCOVER_TTL_MS) {\n return discoverCache.pages;\n }\n const pages = await queryDiscoveredPages(apiKey, accountId);\n discoverCache = { key, at: Date.now(), pages };\n return pages;\n}\n\nasync function queryDiscoveredPages(apiKey: string, accountId: string): Promise<DiscoveredPage[]> {\n\n const query = `\n query {\n actor {\n account(id: ${Number(accountId)}) {\n nrql(query: \"SELECT count(*) AS views FROM PageView FACET pageUrl SINCE 24 hours ago LIMIT 200\") {\n results\n }\n }\n }\n }\n `;\n let data: NewRelicGraphQLResponse;\n try {\n data = (await axios.post(NEWRELIC_API_URL, { query }, { headers: { 'API-Key': apiKey, 'Content-Type': 'application/json' }, timeout: 10000 })).data;\n } catch {\n throw new Error('Could not reach New Relic to discover pages.');\n }\n const results = (data.data?.actor?.account as unknown as { nrql?: { results: Record<string, unknown>[] } } | undefined)?.nrql?.results;\n if (!results) throw new Error('New Relic rejected the page discovery query. Check your key and account ID.');\n\n return buildPages(\n results.map(r => ({ url: String(r.pageUrl ?? r.facet ?? ''), views: Number(r.views ?? r.count ?? 0) }))\n );\n}\n","import { createHash } from 'node:crypto';\n\nexport interface DiscoveredPage {\n /** Normalized path, no host, query or hash. Used to match New Relic `page` and Sentry `url`. */\n url: string;\n slug: string;\n name: string;\n /** Page views in the discovery window (all query-string variants merged). */\n views: number;\n}\n\nexport const MAX_PAGES = 20;\n\n/** \"https://site.com/Blog/?utm=1#x\" -> \"/blog\"; \"/\" stays \"/\". Returns null if unusable. */\nexport function normalizePath(raw: string): string | null {\n if (typeof raw !== 'string' || !raw.trim()) return null;\n let path: string;\n try {\n path = new URL(raw, 'http://placeholder').pathname;\n } catch {\n return null;\n }\n try {\n path = decodeURIComponent(path);\n } catch {\n // keep the encoded form if it is not valid UTF-8\n }\n path = path.toLowerCase().replace(/\\/{2,}/g, '/');\n if (path.length > 1) path = path.replace(/\\/+$/, '');\n return path.startsWith('/') ? path : null;\n}\n\n/**\n * Slug rule: \"/\" -> \"home\"; otherwise the path lowercased with every run of\n * characters outside a-z0-9 turned into \"-\", trimmed, max 60 chars\n * (\"/blog/My Post\" -> \"blog-my-post\"). Paths that reduce to the same slug all\n * get a 6-char hash of their path appended, so slugs are unique and stable.\n */\nexport function baseSlug(path: string): string {\n if (path === '/') return 'home';\n return path.replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 60).replace(/-+$/, '') || 'page';\n}\n\n/** \"/\" -> \"Homepage\"; \"/blog/my-post\" -> \"Blog / My Post\". */\nexport function pageName(path: string): string {\n if (path === '/') return 'Homepage';\n return path\n .split('/')\n .filter(Boolean)\n .map(seg => seg.replace(/[-_]+/g, ' ').trim().replace(/\\b\\w/g, c => c.toUpperCase()) || seg)\n .join(' / ');\n}\n\nexport function buildPages(rows: { url: string; views: number }[]): DiscoveredPage[] {\n const byPath = new Map<string, number>();\n for (const { url, views } of rows) {\n const path = normalizePath(url);\n if (path === null) continue;\n byPath.set(path, (byPath.get(path) ?? 0) + (Number.isFinite(views) ? views : 0));\n }\n\n const sorted = [...byPath].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, MAX_PAGES);\n\n const counts = new Map<string, number>();\n for (const [path] of sorted) counts.set(baseSlug(path), (counts.get(baseSlug(path)) ?? 0) + 1);\n\n return sorted.map(([path, views]) => {\n const base = baseSlug(path);\n const slug = counts.get(base)! > 1 ? `${base}-${createHash('sha1').update(path).digest('hex').slice(0, 6)}` : base;\n return { url: path, slug, name: pageName(path), views };\n });\n}\n","import axios from 'axios';\nimport { normalizePath } from '@/lib/discoverPages';\n\nconst SENTRY_API_URL = 'https://sentry.io/api/0';\n\nexport interface SentryPageErrors {\n errorCount: number;\n errorRate: number;\n warningCount: number;\n latestErrors: { title: string; count: number; lastSeen: string }[];\n}\n\nexport const EMPTY_SENTRY_DATA: SentryPageErrors = {\n errorCount: 0,\n errorRate: 0,\n warningCount: 0,\n latestErrors: []\n};\n\nconst sentryHeaders = (token: string) => ({ Authorization: `Bearer ${token}` });\n\n// ponytail: in-process memo of slug -> numeric id (the events API wants the numeric id).\nconst projectIdCache = new Map<string, string>();\n\nasync function numericProjectId(token: string, org: string, project: string): Promise<string> {\n const k = `${org}/${project}`;\n const hit = projectIdCache.get(k);\n if (hit) return hit;\n const res = await axios.get(`${SENTRY_API_URL}/projects/${encodeURIComponent(org)}/${encodeURIComponent(project)}/`, {\n headers: sentryHeaders(token),\n timeout: 8000\n });\n const id = String(res.data?.id ?? '');\n if (!id) throw new Error('no project id');\n projectIdCache.set(k, id);\n return id;\n}\n\n/**\n * ONE org-level events call (last 24h, errors only) grouped by url + title,\n * summed per normalized page path. Replaces one call per page (rate limits).\n * Pages with no matching events are simply absent from the result.\n * Warnings are not counted here (only event.type:error is queried).\n */\nexport async function getSentryErrorsByPath(\n apiKey: string,\n orgSlug: string,\n project: string\n): Promise<Record<string, SentryPageErrors>> {\n if (!apiKey || !orgSlug || !project) return {};\n\n try {\n const id = await numericProjectId(apiKey, orgSlug, project);\n const res = await axios.get(`${SENTRY_API_URL}/organizations/${encodeURIComponent(orgSlug)}/events/`, {\n headers: sentryHeaders(apiKey),\n timeout: 10000,\n params: {\n project: id,\n field: ['url', 'title', 'count()', 'last_seen()'],\n query: 'event.type:error',\n statsPeriod: '24h',\n sort: '-last_seen',\n per_page: 100\n },\n paramsSerializer: { indexes: null }\n });\n return groupByPath(res.data?.data ?? []);\n } catch (error) {\n console.error('Sentry API error:', axios.isAxiosError(error) ? error.response?.status : 'request failed');\n return {};\n }\n}\n\ninterface SentryEventRow {\n url?: string;\n title?: string;\n 'count()'?: number;\n 'last_seen()'?: string;\n}\n\nfunction groupByPath(rows: SentryEventRow[]): Record<string, SentryPageErrors> {\n const out: Record<string, SentryPageErrors> = {};\n for (const row of rows) {\n const path = normalizePath(row.url ?? '');\n if (path === null) continue;\n const entry = (out[path] ??= { errorCount: 0, errorRate: 0, warningCount: 0, latestErrors: [] });\n const count = Number(row['count()'] ?? 0);\n entry.errorCount += count;\n if (entry.latestErrors.length < 5) {\n entry.latestErrors.push({ title: row.title ?? 'Unknown error', count, lastSeen: row['last_seen()'] ?? '' });\n }\n }\n return out;\n}\n","import { getNewRelicMetrics, discoverPages, type NewRelicPageMetrics } from '@/lib/newrelic';\nimport { getSentryErrorsByPath, EMPTY_SENTRY_DATA } from '@/lib/sentry';\nimport { env, isConfigured } from '@/lib/env';\nimport { recordSnapshot, getHistory } from '@/lib/metricsHistory';\nimport { recordTiming } from '@/lib/apiTimingStore';\nimport type { PageStatus } from '@/types';\n\nexport async function GET() {\n if (!isConfigured()) {\n return Response.json({ configured: false, pages: [], history: [], timestamp: new Date().toISOString() });\n }\n\n try {\n const routeStart = performance.now();\n\n const trackedPages = await discoverPages(\n env('NEWRELIC_API_KEY'),\n env('NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID')\n );\n if (trackedPages.length === 0) {\n return Response.json({ configured: true, pages: [], history: getHistory(), timestamp: new Date().toISOString() });\n }\n\n // New Relic (1 call, 3 queries) and Sentry (1 events call) are independent, so run them concurrently.\n const newRelicStart = performance.now();\n const newRelicPromise = getNewRelicMetrics(\n env('NEWRELIC_API_KEY'),\n env('NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID')\n ).then(result => {\n recordTiming('New Relic: metrics', performance.now() - newRelicStart);\n return result;\n });\n\n const sentryStart = performance.now();\n const sentryPromise = getSentryErrorsByPath(\n env('SENTRY_API_KEY'),\n env('SENTRY_ORG_SLUG'),\n env('SENTRY_PROJECT_ID')\n ).then(result => {\n recordTiming('Sentry: events', performance.now() - sentryStart);\n return result;\n });\n\n const [newRelicByPage, sentryByPath] = await Promise.all([newRelicPromise, sentryPromise]);\n console.log(`[timing] combined New Relic + Sentry batch: ${Math.round(performance.now() - routeStart)}ms`);\n\n const pages = trackedPages.map(({ name, slug, url, views }) => {\n const newRelic = newRelicByPage[url] ?? EMPTY_NEWRELIC_METRICS;\n const sentry = sentryByPath[url] ?? EMPTY_SENTRY_DATA;\n\n return {\n name,\n slug,\n url,\n visitors: formatVisitors(views),\n status: deriveStatus(newRelic),\n newRelic,\n sentry,\n recordedAt: new Date().toISOString()\n };\n });\n\n recordSnapshot(pages);\n\n return Response.json({ configured: true, pages, history: getHistory(), timestamp: new Date().toISOString() });\n } catch (error) {\n console.error('Metrics API error:', error);\n return Response.json(\n { error: error instanceof Error ? error.message : 'Unknown error' },\n { status: 500 }\n );\n }\n}\n\nconst EMPTY_NEWRELIC_METRICS: NewRelicPageMetrics = {\n loadTime: 0,\n lcp: 0,\n ttfb: 0,\n cls: 0,\n inp: 0,\n fid: 0,\n errorRate: 0,\n throughput: 0,\n apdexScore: 0\n};\n\nfunction deriveStatus(newRelic: NewRelicPageMetrics): PageStatus {\n if (newRelic.errorRate > 5) return 'Critical';\n if (newRelic.errorRate > 1 || newRelic.apdexScore < 0.9) return 'Warning';\n return 'Healthy';\n}\n\nfunction formatVisitors(throughput: number): string {\n if (throughput >= 1000) return `${(throughput / 1000).toFixed(1)}k`;\n return String(throughput);\n}","import type { NewRelicPageMetrics } from '@/lib/newrelic';\nimport type { SentryPageErrors } from '@/lib/sentry';\nimport type { PageStatus } from '@/types';\n\nexport interface MetricsPage {\n name: string;\n slug: string;\n url: string;\n visitors: string;\n status: PageStatus;\n newRelic: NewRelicPageMetrics;\n sentry: SentryPageErrors;\n recordedAt: string;\n}\n\nexport interface MetricsSnapshot {\n timestamp: string;\n pages: MetricsPage[];\n}\n\n// ponytail: in-memory, single-process rolling buffer — resets on dev server\n// restart and isn't shared across serverless instances. Fine for local dev\n// trend charts; upgrade to a real store (DB/Redis) for production history.\nconst MAX_HISTORY = 20;\nconst history: MetricsSnapshot[] = [];\n\nexport function recordSnapshot(pages: MetricsPage[]) {\n history.push({ timestamp: new Date().toISOString(), pages });\n if (history.length > MAX_HISTORY) history.shift();\n}\n\nexport function getHistory(): MetricsSnapshot[] {\n return history;\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteHandlerContext,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport {\n addRequestMeta,\n getRequestMeta,\n setRequestMeta,\n type RequestMeta,\n} from '../../server/request-meta'\nimport {\n getTracer,\n type Span,\n SpanKind,\n SpanStatusCode,\n} from '../../server/lib/trace/tracer'\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { NodeNextRequest, NodeNextResponse } from '../../server/base-http/node'\nimport {\n NextRequestAdapter,\n signalFromNodeResponse,\n} from '../../server/web/spec-extension/adapters/next-request'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport { getRevalidateReason } from '../../server/instrumentation/utils'\nimport { sendResponse } from '../../server/send-response'\nimport {\n fromNodeOutgoingHttpHeaders,\n toNodeOutgoingHttpHeaders,\n} from '../../server/web/utils'\nimport { getCacheControlHeader } from '../../server/lib/cache-control'\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from '../../lib/constants'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\nimport { isRouteCacheOwner } from '../../server/lib/route-cache-key'\nimport {\n CachedRouteKind,\n type ResponseCacheEntry,\n type ResponseGenerator,\n} from '../../server/response-cache'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n // The lazy require factory ensures that:\n // - In dev: devRequestTimingInternalsEnd is set before userland executes,\n // correctly attributing module load time to application-code rather than\n // framework internals.\n // - In all modes: async modules (route files with top-level await) are\n // handled correctly — require() returns a Promise for such modules, which\n // ensureUserland() awaits before the first request is handled.\n userland: () => require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n // In Turbopack dev mode, also provide a synchronous per-request getter so\n // server HMR updates are picked up without re-executing the entry chunk.\n // Using require() (synchronous) avoids adding async overhead that would be\n // incorrectly attributed to application-code time in devRequestTiming.\n ...(process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER\n ? {\n getUserland: () =>\n require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n }\n : {}),\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n\nexport async function handler(\n req: IncomingMessage,\n res: ServerResponse,\n ctx: {\n waitUntil?: (prom: Promise<void>) => void\n requestMeta?: RequestMeta\n }\n) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta)\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint())\n }\n let srcPage = 'VAR_DEFINITION_PAGE'\n\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/'\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/'\n }\n const multiZoneDraftMode = process.env\n .__NEXT_MULTI_ZONE_DRAFT_MODE as any as boolean\n\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode,\n })\n\n if (!prepareResult) {\n res.statusCode = 400\n res.end('Bad Request')\n ctx.waitUntil?.(Promise.resolve())\n return null\n }\n\n const {\n buildId,\n deploymentId,\n params,\n nextConfig,\n parsedUrl,\n isDraftMode,\n prerenderManifest,\n routerServerContext,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n resolvedPathname,\n clientReferenceManifest,\n serverActionsManifest,\n } = prepareResult\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n // Only this route's prerenders can establish ISR or admit generated params.\n const isPrerendered =\n Boolean(prerenderManifest.routes[resolvedPathname]) &&\n (routeModule.isDev ||\n isRouteCacheOwner(\n resolvedPathname,\n routeModule.cacheOwner,\n prerenderManifest.routes[resolvedPathname]\n ))\n\n let isIsr = Boolean(\n prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered\n )\n\n const render404 = async () => {\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false)\n } else {\n res.end('This page could not be found')\n }\n return null\n }\n\n if (isIsr && !isDraftMode) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]\n\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404()\n }\n throw new NoFallbackError()\n }\n }\n }\n\n let cacheKey: string | null = null\n\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey\n }\n\n const supportsDynamicResponse: boolean =\n // If we're in development, we always support dynamic HTML\n routeModule.isDev === true ||\n // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr\n\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse\n\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n })\n }\n\n const method = req.method || 'GET'\n const tracer = getTracer()\n const activeSpan = tracer.getActiveScopeSpan()\n const isWrappedByNextServer = Boolean(\n routerServerContext?.isWrappedByNextServer\n )\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'))\n\n const incrementalCache =\n getRequestMeta(req, 'incrementalCache') ||\n (await routeModule.getIncrementalCache(\n req,\n nextConfig,\n prerenderManifest,\n isMinimalMode\n ))\n\n incrementalCache?.resetRequestCache()\n ;(globalThis as any).__incrementalCache = incrementalCache\n\n const context: AppRouteRouteHandlerContext = {\n params,\n previewProps: prerenderManifest.preview,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n isDraftMode,\n supportsDynamicResponse,\n incrementalCache,\n hmrRefreshHash: getRequestMeta(req, 'hmrRefreshHash'),\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n waitUntil: ctx.waitUntil,\n onClose: (cb) => {\n res.on('close', cb)\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (\n error,\n _request,\n errorContext,\n silenceLog\n ) =>\n routeModule.onRequestError(\n req,\n error,\n errorContext,\n silenceLog,\n routerServerContext\n ),\n },\n sharedContext: {\n buildId,\n deploymentId,\n },\n }\n const nodeNextReq = new NodeNextRequest(req)\n const nodeNextRes = new NodeNextResponse(res)\n\n const nextReq = NextRequestAdapter.fromNodeNextRequest(\n nodeNextReq,\n signalFromNodeResponse(res)\n )\n\n const responseGenerator: ResponseGenerator = async ({\n previousCacheEntry,\n }) => {\n try {\n if (\n !isMinimalMode &&\n isOnDemandRevalidate &&\n revalidateOnlyGenerated &&\n !previousCacheEntry\n ) {\n res.statusCode = 404\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED')\n res.end('This page could not be found')\n return null\n }\n\n const response = await routeModule.handle(nextReq, context)\n\n ;(req as any).fetchMetrics = (context.renderOpts as any).fetchMetrics\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil\n\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil)\n pendingWaitUntil = undefined\n }\n }\n const cacheTags = context.renderOpts.collectedTags\n\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob()\n\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers)\n\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags\n }\n\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type\n }\n\n const revalidate =\n typeof context.renderOpts.collectedRevalidate === 'undefined' ||\n context.renderOpts.collectedRevalidate >= INFINITE_CACHE\n ? false\n : context.renderOpts.collectedRevalidate\n\n const expire =\n typeof context.renderOpts.collectedExpire === 'undefined' ||\n context.renderOpts.collectedExpire >= INFINITE_CACHE\n ? // Fall back to the global `expireTime` config when the\n // route has a numeric `revalidate` but didn't declare an\n // explicit `expire` (e.g. via `cacheLife`). This mirrors the\n // build-time fallback in `build/index.ts` so cache entries\n // and the response Cache-Control header agree on the route's\n // effective expire. Routes that opt out of revalidation\n // (`revalidate: false`) or that are dynamic (`revalidate: 0`)\n // keep `expire: undefined`.\n revalidate !== false && revalidate > 0\n ? nextConfig.expireTime\n : undefined\n : context.renderOpts.collectedExpire\n\n // Create the cache entry for the response.\n const cacheEntry: ResponseCacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers,\n },\n cacheControl: { revalidate, expire },\n }\n\n return cacheEntry\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, pendingWaitUntil)\n return null\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry?.isStale) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n throw err\n }\n }\n\n const handleResponse = async (\n currentSpan: Span | undefined,\n parentSpan: Span | undefined\n ) => {\n try {\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return\n }\n\n if (cacheEntry?.value?.kind !== CachedRouteKind.APP_ROUTE) {\n throw new Error(\n `Invariant: app-route received invalid cache entry ${cacheEntry?.value?.kind}`\n )\n }\n\n if (!isMinimalMode) {\n res.setHeader(\n 'x-nextjs-cache',\n isOnDemandRevalidate\n ? 'REVALIDATED'\n : cacheEntry.isMiss\n ? 'MISS'\n : cacheEntry.isStale\n ? 'STALE'\n : 'HIT'\n )\n }\n\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader(\n 'Cache-Control',\n 'private, no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers)\n\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER)\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (\n cacheEntry.cacheControl &&\n !res.getHeader('Cache-Control') &&\n !headers.get('Cache-Control')\n ) {\n headers.set(\n 'Cache-Control',\n getCacheControlHeader(cacheEntry.cacheControl)\n )\n }\n\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200,\n })\n )\n return\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n\n // rethrow so that we can handle serving error page\n\n // If this is during static generation, throw the error again.\n if (isIsr) throw err\n\n // Otherwise, send a 500 response.\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n new Response(null, { status: 500 })\n )\n return\n } finally {\n ;(() => {\n if (!currentSpan) {\n return\n }\n\n let statusCode = res.statusCode\n\n currentSpan.setAttributes({\n 'http.status_code': statusCode,\n 'next.rsc': false,\n })\n\n if (statusCode && statusCode >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n currentSpan.setAttribute('error.type', statusCode.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = rootSpanAttributes.get('next.route') || normalizedSrcPage\n const name = `${method} ${route}`\n\n currentSpan.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n currentSpan.updateName(name)\n\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== currentSpan) {\n parentSpan.setAttribute('http.route', route)\n parentSpan.updateName(name)\n }\n })()\n }\n }\n\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan, undefined)\n } else {\n let parentSpan = tracer.getActiveScopeSpan()\n await tracer.withPropagatedContext(\n req.headers,\n () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url,\n },\n },\n (span) => handleResponse(span, parentSpan)\n ),\n undefined,\n !isWrappedByNextServer\n )\n }\n}\n"],"names":["MAX_PAGES","normalizePath","raw","trim","path","URL","pathname","decodeURIComponent","toLowerCase","replace","length","startsWith","baseSlug","slice","pageName","split","filter","Boolean","map","seg","c","toUpperCase","join","buildPages","rows","byPath","Map","url","views","set","get","Number","isFinite","sorted","sort","a","b","localeCompare","counts","base","slug","update","digest","name","AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","addRequestMeta","getRequestMeta","setRequestMeta","getTracer","SpanKind","SpanStatusCode","setManifestsSingleton","normalizeAppPath","NodeNextRequest","NodeNextResponse","NextRequestAdapter","signalFromNodeResponse","BaseServerSpan","getRevalidateReason","sendResponse","fromNodeOutgoingHttpHeaders","toNodeOutgoingHttpHeaders","getCacheControlHeader","INFINITE_CACHE","NEXT_CACHE_TAGS_HEADER","NoFallbackError","isRouteCacheOwner","CachedRouteKind","routeModule","definition","kind","APP_ROUTE","page","filename","bundlePath","distDir","process","env","__NEXT_RELATIVE_DIST_DIR","relativeProjectDir","__NEXT_RELATIVE_PROJECT_DIR","resolvedPagePath","nextConfigOutput","userland","require","TURBOPACK","__NEXT_DEV_SERVER","getUserland","workAsyncStorage","workUnitAsyncStorage","serverHooks","handler","req","res","ctx","requestMeta","isDev","hrtime","bigint","srcPage","multiZoneDraftMode","__NEXT_MULTI_ZONE_DRAFT_MODE","prepareResult","prepare","statusCode","end","waitUntil","Promise","resolve","buildId","deploymentId","params","nextConfig","parsedUrl","isDraftMode","prerenderManifest","routerServerContext","isOnDemandRevalidate","revalidateOnlyGenerated","resolvedPathname","clientReferenceManifest","serverActionsManifest","normalizedSrcPage","isPrerendered","routes","cacheOwner","isIsr","dynamicRoutes","render404","prerenderInfo","fallback","adapterPath","cacheKey","supportsDynamicResponse","isStaticGeneration","method","tracer","activeSpan","getActiveScopeSpan","isWrappedByNextServer","isMinimalMode","incrementalCache","getIncrementalCache","resetRequestCache","globalThis","__incrementalCache","context","previewProps","preview","renderOpts","experimental","authInterrupts","useCacheTimeout","cacheComponents","validationLevel","instantInsights","hmrRefreshHash","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","onClose","cb","on","onAfterTaskError","undefined","onInstrumentationRequestError","error","_request","errorContext","silenceLog","onRequestError","sharedContext","nodeNextReq","nodeNextRes","nextReq","fromNodeNextRequest","responseGenerator","previousCacheEntry","setHeader","response","handle","fetchMetrics","pendingWaitUntil","cacheTags","collectedTags","blob","headers","type","revalidate","collectedRevalidate","expire","collectedExpire","expireTime","cacheEntry","value","status","body","Buffer","from","arrayBuffer","cacheControl","err","isStale","routerKind","routePath","routeType","revalidateReason","handleResponse","currentSpan","parentSpan","routeKind","isFallback","isRoutePPREnabled","Error","isMiss","delete","getHeader","Response","setAttributes","setStatus","code","ERROR","setAttribute","toString","rootSpanAttributes","getRootSpanAttributes","handleRequest","console","warn","route","updateName","withPropagatedContext","trace","spanName","SERVER","attributes","span"],"mappings":"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","ignoreList":[5]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../app/api/connect/route.ts","../../../lib/connectStatus.ts","../../../node_modules/next/src/build/templates/app-route.ts"],"sourcesContent":["import { INSERT_KEY, env, isConfigured } from '@/lib/env';\nimport { isLocalRequest, REFUSAL_MESSAGE } from '@/lib/localRequest';\nimport { newRelicStatus, sendTestEvent, sentryStatus } from '@/lib/connectStatus';\n\nconst refuse = () => Response.json({ error: REFUSAL_MESSAGE() }, { status: 403 });\n\n/** Per-source \"events received\" status. Never returns key values. */\nexport async function GET(request: Request) {\n if (!isLocalRequest(request)) return refuse();\n if (!isConfigured()) return Response.json({ configured: false });\n\n const nrKey = env('NEWRELIC_API_KEY');\n const acct = env('NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID');\n const [browser, custom, sentry] = await Promise.all([\n newRelicStatus(nrKey, acct, 'PageView'),\n newRelicStatus(nrKey, acct, 'MetricFlowEvent'),\n sentryStatus(env('SENTRY_API_KEY'), env('SENTRY_ORG_SLUG'), env('SENTRY_PROJECT_ID'))\n ]);\n return Response.json({ configured: true, insertKeySet: Boolean(env(INSERT_KEY)), browser, custom, sentry });\n}\n\n/** Sends one test event so the user can watch it arrive. */\nexport async function POST(request: Request) {\n if (!isLocalRequest(request)) return refuse();\n if (!env(INSERT_KEY)) {\n return Response.json({ sent: false, error: 'Add your Insert key first.' }, { status: 400 });\n }\n const error = await sendTestEvent(env(INSERT_KEY), env('NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID'));\n return error ? Response.json({ sent: false, error }, { status: 502 }) : Response.json({ sent: true });\n}\n","import axios from 'axios';\n\nconst NR_GRAPHQL = 'https://api.newrelic.com/graphql';\n\nexport interface SourceStatus {\n /** Events seen in the last 5 minutes, or null if the source could not be read. */\n recent: number | null;\n /** ISO time of the most recent event, or null if none. */\n lastEventAt: string | null;\n error?: string;\n}\n\nasync function nrql(apiKey: string, accountId: string, query: string): Promise<Record<string, unknown>> {\n const gql = `{ actor { account(id: ${Number(accountId)}) { nrql(query: \"${query}\") { results } } } }`;\n const res = await axios.post(NR_GRAPHQL, { query: gql }, { headers: { 'API-Key': apiKey }, timeout: 8000 });\n const row = res.data?.data?.actor?.account?.nrql?.results?.[0];\n if (!row) throw new Error('no result');\n return row;\n}\n\n/** Events sent with emitMetric()/the test button, or the browser agent's PageView events. */\nexport async function newRelicStatus(apiKey: string, accountId: string, eventType: 'MetricFlowEvent' | 'PageView'): Promise<SourceStatus> {\n try {\n const row = await nrql(apiKey, accountId, `SELECT count(*) AS n, latest(timestamp) AS t FROM ${eventType} SINCE 5 minutes ago`);\n const n = Number(row.n ?? 0);\n return { recent: n, lastEventAt: n > 0 && row.t ? new Date(Number(row.t)).toISOString() : null };\n } catch {\n return { recent: null, lastEventAt: null, error: 'Could not read from New Relic.' };\n }\n}\n\nexport async function sentryStatus(token: string, org: string, project: string): Promise<SourceStatus> {\n try {\n const res = await axios.get(\n `https://sentry.io/api/0/projects/${encodeURIComponent(org)}/${encodeURIComponent(project)}/issues/`,\n { headers: { Authorization: `Bearer ${token}` }, params: { sort: 'date', limit: 1, statsPeriod: '24h' }, timeout: 8000 }\n );\n const last: string | undefined = res.data?.[0]?.lastSeen;\n const recent = last && Date.now() - new Date(last).getTime() < 5 * 60_000 ? 1 : 0;\n return { recent, lastEventAt: last ?? null };\n } catch {\n return { recent: null, lastEventAt: null, error: 'Could not read from Sentry.' };\n }\n}\n\n/** Sends one test event through New Relic's Event API. Returns an error message, or null on success. */\nexport async function sendTestEvent(insertKey: string, accountId: string): Promise<string | null> {\n try {\n const res = await axios.post(\n `https://insights-collector.newrelic.com/v1/accounts/${Number(accountId)}/events`,\n [{ eventType: 'MetricFlowEvent', name: 'test', value: 1, source: 'connect-page' }],\n { headers: { 'Api-Key': insertKey }, timeout: 8000 }\n );\n return res.data?.success === true ? null : 'New Relic did not accept the event.';\n } catch (e) {\n const status = axios.isAxiosError(e) ? e.response?.status : undefined;\n if (status === 401 || status === 403) return 'New Relic rejected the Insert key. It must be an \"Ingest - License\" key for this account.';\n if (status === 404) return 'New Relic did not recognise the account ID.';\n return 'Could not reach New Relic to send the test event.';\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteHandlerContext,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport {\n addRequestMeta,\n getRequestMeta,\n setRequestMeta,\n type RequestMeta,\n} from '../../server/request-meta'\nimport {\n getTracer,\n type Span,\n SpanKind,\n SpanStatusCode,\n} from '../../server/lib/trace/tracer'\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { NodeNextRequest, NodeNextResponse } from '../../server/base-http/node'\nimport {\n NextRequestAdapter,\n signalFromNodeResponse,\n} from '../../server/web/spec-extension/adapters/next-request'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport { getRevalidateReason } from '../../server/instrumentation/utils'\nimport { sendResponse } from '../../server/send-response'\nimport {\n fromNodeOutgoingHttpHeaders,\n toNodeOutgoingHttpHeaders,\n} from '../../server/web/utils'\nimport { getCacheControlHeader } from '../../server/lib/cache-control'\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from '../../lib/constants'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\nimport { isRouteCacheOwner } from '../../server/lib/route-cache-key'\nimport {\n CachedRouteKind,\n type ResponseCacheEntry,\n type ResponseGenerator,\n} from '../../server/response-cache'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n // The lazy require factory ensures that:\n // - In dev: devRequestTimingInternalsEnd is set before userland executes,\n // correctly attributing module load time to application-code rather than\n // framework internals.\n // - In all modes: async modules (route files with top-level await) are\n // handled correctly — require() returns a Promise for such modules, which\n // ensureUserland() awaits before the first request is handled.\n userland: () => require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n // In Turbopack dev mode, also provide a synchronous per-request getter so\n // server HMR updates are picked up without re-executing the entry chunk.\n // Using require() (synchronous) avoids adding async overhead that would be\n // incorrectly attributed to application-code time in devRequestTiming.\n ...(process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER\n ? {\n getUserland: () =>\n require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n }\n : {}),\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n\nexport async function handler(\n req: IncomingMessage,\n res: ServerResponse,\n ctx: {\n waitUntil?: (prom: Promise<void>) => void\n requestMeta?: RequestMeta\n }\n) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta)\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint())\n }\n let srcPage = 'VAR_DEFINITION_PAGE'\n\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/'\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/'\n }\n const multiZoneDraftMode = process.env\n .__NEXT_MULTI_ZONE_DRAFT_MODE as any as boolean\n\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode,\n })\n\n if (!prepareResult) {\n res.statusCode = 400\n res.end('Bad Request')\n ctx.waitUntil?.(Promise.resolve())\n return null\n }\n\n const {\n buildId,\n deploymentId,\n params,\n nextConfig,\n parsedUrl,\n isDraftMode,\n prerenderManifest,\n routerServerContext,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n resolvedPathname,\n clientReferenceManifest,\n serverActionsManifest,\n } = prepareResult\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n // Only this route's prerenders can establish ISR or admit generated params.\n const isPrerendered =\n Boolean(prerenderManifest.routes[resolvedPathname]) &&\n (routeModule.isDev ||\n isRouteCacheOwner(\n resolvedPathname,\n routeModule.cacheOwner,\n prerenderManifest.routes[resolvedPathname]\n ))\n\n let isIsr = Boolean(\n prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered\n )\n\n const render404 = async () => {\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false)\n } else {\n res.end('This page could not be found')\n }\n return null\n }\n\n if (isIsr && !isDraftMode) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]\n\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404()\n }\n throw new NoFallbackError()\n }\n }\n }\n\n let cacheKey: string | null = null\n\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey\n }\n\n const supportsDynamicResponse: boolean =\n // If we're in development, we always support dynamic HTML\n routeModule.isDev === true ||\n // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr\n\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse\n\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n })\n }\n\n const method = req.method || 'GET'\n const tracer = getTracer()\n const activeSpan = tracer.getActiveScopeSpan()\n const isWrappedByNextServer = Boolean(\n routerServerContext?.isWrappedByNextServer\n )\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'))\n\n const incrementalCache =\n getRequestMeta(req, 'incrementalCache') ||\n (await routeModule.getIncrementalCache(\n req,\n nextConfig,\n prerenderManifest,\n isMinimalMode\n ))\n\n incrementalCache?.resetRequestCache()\n ;(globalThis as any).__incrementalCache = incrementalCache\n\n const context: AppRouteRouteHandlerContext = {\n params,\n previewProps: prerenderManifest.preview,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n isDraftMode,\n supportsDynamicResponse,\n incrementalCache,\n hmrRefreshHash: getRequestMeta(req, 'hmrRefreshHash'),\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n waitUntil: ctx.waitUntil,\n onClose: (cb) => {\n res.on('close', cb)\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (\n error,\n _request,\n errorContext,\n silenceLog\n ) =>\n routeModule.onRequestError(\n req,\n error,\n errorContext,\n silenceLog,\n routerServerContext\n ),\n },\n sharedContext: {\n buildId,\n deploymentId,\n },\n }\n const nodeNextReq = new NodeNextRequest(req)\n const nodeNextRes = new NodeNextResponse(res)\n\n const nextReq = NextRequestAdapter.fromNodeNextRequest(\n nodeNextReq,\n signalFromNodeResponse(res)\n )\n\n const responseGenerator: ResponseGenerator = async ({\n previousCacheEntry,\n }) => {\n try {\n if (\n !isMinimalMode &&\n isOnDemandRevalidate &&\n revalidateOnlyGenerated &&\n !previousCacheEntry\n ) {\n res.statusCode = 404\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED')\n res.end('This page could not be found')\n return null\n }\n\n const response = await routeModule.handle(nextReq, context)\n\n ;(req as any).fetchMetrics = (context.renderOpts as any).fetchMetrics\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil\n\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil)\n pendingWaitUntil = undefined\n }\n }\n const cacheTags = context.renderOpts.collectedTags\n\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob()\n\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers)\n\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags\n }\n\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type\n }\n\n const revalidate =\n typeof context.renderOpts.collectedRevalidate === 'undefined' ||\n context.renderOpts.collectedRevalidate >= INFINITE_CACHE\n ? false\n : context.renderOpts.collectedRevalidate\n\n const expire =\n typeof context.renderOpts.collectedExpire === 'undefined' ||\n context.renderOpts.collectedExpire >= INFINITE_CACHE\n ? // Fall back to the global `expireTime` config when the\n // route has a numeric `revalidate` but didn't declare an\n // explicit `expire` (e.g. via `cacheLife`). This mirrors the\n // build-time fallback in `build/index.ts` so cache entries\n // and the response Cache-Control header agree on the route's\n // effective expire. Routes that opt out of revalidation\n // (`revalidate: false`) or that are dynamic (`revalidate: 0`)\n // keep `expire: undefined`.\n revalidate !== false && revalidate > 0\n ? nextConfig.expireTime\n : undefined\n : context.renderOpts.collectedExpire\n\n // Create the cache entry for the response.\n const cacheEntry: ResponseCacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers,\n },\n cacheControl: { revalidate, expire },\n }\n\n return cacheEntry\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, pendingWaitUntil)\n return null\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry?.isStale) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n throw err\n }\n }\n\n const handleResponse = async (\n currentSpan: Span | undefined,\n parentSpan: Span | undefined\n ) => {\n try {\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return\n }\n\n if (cacheEntry?.value?.kind !== CachedRouteKind.APP_ROUTE) {\n throw new Error(\n `Invariant: app-route received invalid cache entry ${cacheEntry?.value?.kind}`\n )\n }\n\n if (!isMinimalMode) {\n res.setHeader(\n 'x-nextjs-cache',\n isOnDemandRevalidate\n ? 'REVALIDATED'\n : cacheEntry.isMiss\n ? 'MISS'\n : cacheEntry.isStale\n ? 'STALE'\n : 'HIT'\n )\n }\n\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader(\n 'Cache-Control',\n 'private, no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers)\n\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER)\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (\n cacheEntry.cacheControl &&\n !res.getHeader('Cache-Control') &&\n !headers.get('Cache-Control')\n ) {\n headers.set(\n 'Cache-Control',\n getCacheControlHeader(cacheEntry.cacheControl)\n )\n }\n\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200,\n })\n )\n return\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n\n // rethrow so that we can handle serving error page\n\n // If this is during static generation, throw the error again.\n if (isIsr) throw err\n\n // Otherwise, send a 500 response.\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n new Response(null, { status: 500 })\n )\n return\n } finally {\n ;(() => {\n if (!currentSpan) {\n return\n }\n\n let statusCode = res.statusCode\n\n currentSpan.setAttributes({\n 'http.status_code': statusCode,\n 'next.rsc': false,\n })\n\n if (statusCode && statusCode >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n currentSpan.setAttribute('error.type', statusCode.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = rootSpanAttributes.get('next.route') || normalizedSrcPage\n const name = `${method} ${route}`\n\n currentSpan.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n currentSpan.updateName(name)\n\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== currentSpan) {\n parentSpan.setAttribute('http.route', route)\n parentSpan.updateName(name)\n }\n })()\n }\n }\n\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan, undefined)\n } else {\n let parentSpan = tracer.getActiveScopeSpan()\n await tracer.withPropagatedContext(\n req.headers,\n () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url,\n },\n },\n (span) => handleResponse(span, parentSpan)\n ),\n undefined,\n !isWrappedByNextServer\n )\n }\n}\n"],"names":["NR_GRAPHQL","nrql","apiKey","accountId","query","gql","Number","res","post","headers","timeout","row","data","actor","account","results","Error","newRelicStatus","eventType","n","recent","lastEventAt","t","Date","toISOString","error","sentryStatus","token","org","project","get","encodeURIComponent","Authorization","params","sort","limit","statsPeriod","last","lastSeen","now","getTime","sendTestEvent","insertKey","name","value","source","success","e","status","isAxiosError","response","undefined","AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","addRequestMeta","getRequestMeta","setRequestMeta","getTracer","SpanKind","SpanStatusCode","setManifestsSingleton","normalizeAppPath","NodeNextRequest","NodeNextResponse","NextRequestAdapter","signalFromNodeResponse","BaseServerSpan","getRevalidateReason","sendResponse","fromNodeOutgoingHttpHeaders","toNodeOutgoingHttpHeaders","getCacheControlHeader","INFINITE_CACHE","NEXT_CACHE_TAGS_HEADER","NoFallbackError","isRouteCacheOwner","CachedRouteKind","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","distDir","process","env","__NEXT_RELATIVE_DIST_DIR","relativeProjectDir","__NEXT_RELATIVE_PROJECT_DIR","resolvedPagePath","nextConfigOutput","userland","require","TURBOPACK","__NEXT_DEV_SERVER","getUserland","workAsyncStorage","workUnitAsyncStorage","serverHooks","handler","req","ctx","requestMeta","isDev","hrtime","bigint","srcPage","replace","multiZoneDraftMode","__NEXT_MULTI_ZONE_DRAFT_MODE","prepareResult","prepare","statusCode","end","waitUntil","Promise","resolve","buildId","deploymentId","nextConfig","parsedUrl","isDraftMode","prerenderManifest","routerServerContext","isOnDemandRevalidate","revalidateOnlyGenerated","resolvedPathname","clientReferenceManifest","serverActionsManifest","normalizedSrcPage","isPrerendered","Boolean","routes","cacheOwner","isIsr","dynamicRoutes","render404","prerenderInfo","fallback","adapterPath","cacheKey","supportsDynamicResponse","isStaticGeneration","method","tracer","activeSpan","getActiveScopeSpan","isWrappedByNextServer","isMinimalMode","incrementalCache","getIncrementalCache","resetRequestCache","globalThis","__incrementalCache","context","previewProps","preview","renderOpts","experimental","authInterrupts","useCacheTimeout","cacheComponents","validationLevel","instantInsights","hmrRefreshHash","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","onClose","cb","on","onAfterTaskError","onInstrumentationRequestError","_request","errorContext","silenceLog","onRequestError","sharedContext","nodeNextReq","nodeNextRes","nextReq","fromNodeNextRequest","responseGenerator","previousCacheEntry","setHeader","handle","fetchMetrics","pendingWaitUntil","cacheTags","collectedTags","blob","type","revalidate","collectedRevalidate","expire","collectedExpire","expireTime","cacheEntry","body","Buffer","from","arrayBuffer","cacheControl","err","isStale","routerKind","routePath","routeType","revalidateReason","handleResponse","currentSpan","parentSpan","routeKind","isFallback","isRoutePPREnabled","isMiss","delete","getHeader","set","Response","setAttributes","setStatus","code","ERROR","setAttribute","toString","rootSpanAttributes","getRootSpanAttributes","handleRequest","console","warn","route","updateName","withPropagatedContext","trace","spanName","SERVER","attributes","url","span"],"mappings":"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","ignoreList":[2]}
|
package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/.next/server/chunks/_next-internal_server_app_api_connect_route_actions_1r5w03m.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/.next/server/chunks/_next-internal_server_app_api_health_route_actions_1ryftkb.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/.next/server/chunks/_next-internal_server_app_api_metrics_route_actions_0qn5q3s.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/.next/server/chunks/_next-internal_server_app_api_setup_route_actions_0txsuev.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/.next/server/chunks/_next-internal_server_app_api_timings_route_actions_1tsq7j6.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|