@karan171996/metricflow 0.1.5 → 0.1.6

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 (229) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build/chunks/[root-of-the-server]__1kki86f._.js +2 -2
  3. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1gfkiq9._.js +1 -1
  4. package/.next/build/chunks/{node_modules_20v-8wl._.js → node_modules__pnpm_0q5gz_g._.js} +181 -230
  5. package/.next/build-manifest.json +7 -7
  6. package/.next/fallback-build-manifest.json +3 -3
  7. package/.next/next-minimal-server.js.nft.json +1 -1
  8. package/.next/next-server.js.nft.json +1 -1
  9. package/.next/prerender-manifest.json +10 -10
  10. package/.next/server/app/_global-error/page/build-manifest.json +4 -4
  11. package/.next/server/app/_global-error/page.js +7 -7
  12. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  13. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_global-error.html +1 -1
  15. package/.next/server/app/_global-error.rsc +7 -7
  16. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  17. package/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page/build-manifest.json +4 -4
  20. package/.next/server/app/_not-found/page.js +10 -10
  21. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/_not-found.html +2 -2
  24. package/.next/server/app/_not-found.rsc +17 -17
  25. package/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +7 -7
  28. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/api/analyze/route.js +5 -5
  30. package/.next/server/app/api/analyze/route.js.nft.json +1 -1
  31. package/.next/server/app/api/connect/route.js +5 -5
  32. package/.next/server/app/api/connect/route.js.nft.json +1 -1
  33. package/.next/server/app/api/health/route.js +4 -4
  34. package/.next/server/app/api/health/route.js.nft.json +1 -1
  35. package/.next/server/app/api/metrics/route.js +5 -5
  36. package/.next/server/app/api/metrics/route.js.nft.json +1 -1
  37. package/.next/server/app/api/settings/route.js +4 -4
  38. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  39. package/.next/server/app/api/setup/ai/route.js +5 -5
  40. package/.next/server/app/api/setup/ai/route.js.nft.json +1 -1
  41. package/.next/server/app/api/setup/route.js +5 -5
  42. package/.next/server/app/api/setup/route.js.nft.json +1 -1
  43. package/.next/server/app/api/timings/route.js +4 -4
  44. package/.next/server/app/api/timings/route.js.nft.json +1 -1
  45. package/.next/server/app/connect/page/build-manifest.json +4 -4
  46. package/.next/server/app/connect/page.js +11 -11
  47. package/.next/server/app/connect/page.js.nft.json +1 -1
  48. package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/connect.html +2 -2
  50. package/.next/server/app/connect.rsc +19 -19
  51. package/.next/server/app/connect.segments/_full.segment.rsc +19 -19
  52. package/.next/server/app/connect.segments/_index.segment.rsc +11 -11
  53. package/.next/server/app/connect.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/connect.segments/connect/__PAGE__.segment.rsc +12 -12
  55. package/.next/server/app/icon.svg/route.js +4 -4
  56. package/.next/server/app/icon.svg/route.js.nft.json +1 -1
  57. package/.next/server/app/index.html +2 -2
  58. package/.next/server/app/index.rsc +20 -20
  59. package/.next/server/app/index.segments/__PAGE__.segment.rsc +7 -7
  60. package/.next/server/app/index.segments/_full.segment.rsc +20 -20
  61. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  62. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  63. package/.next/server/app/page/build-manifest.json +4 -4
  64. package/.next/server/app/page.js +11 -11
  65. package/.next/server/app/page.js.nft.json +1 -1
  66. package/.next/server/app/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/performance/[slug]/page/build-manifest.json +4 -4
  68. package/.next/server/app/performance/[slug]/page.js +13 -13
  69. package/.next/server/app/performance/[slug]/page.js.nft.json +1 -1
  70. package/.next/server/app/performance/[slug]/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/performance/page/build-manifest.json +4 -4
  72. package/.next/server/app/performance/page.js +11 -11
  73. package/.next/server/app/performance/page.js.nft.json +1 -1
  74. package/.next/server/app/performance/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/performance.html +2 -2
  76. package/.next/server/app/performance.rsc +20 -20
  77. package/.next/server/app/performance.segments/_full.segment.rsc +20 -20
  78. package/.next/server/app/performance.segments/_index.segment.rsc +11 -11
  79. package/.next/server/app/performance.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/performance.segments/performance/__PAGE__.segment.rsc +14 -14
  81. package/.next/server/app/settings/page/build-manifest.json +4 -4
  82. package/.next/server/app/settings/page.js +12 -12
  83. package/.next/server/app/settings/page.js.nft.json +1 -1
  84. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/settings.html +2 -2
  86. package/.next/server/app/settings.rsc +31 -31
  87. package/.next/server/app/settings.segments/_full.segment.rsc +31 -31
  88. package/.next/server/app/settings.segments/_index.segment.rsc +11 -11
  89. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +26 -26
  91. package/.next/server/app/setup/page/build-manifest.json +4 -4
  92. package/.next/server/app/setup/page.js +11 -11
  93. package/.next/server/app/setup/page.js.nft.json +1 -1
  94. package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/setup.html +2 -2
  96. package/.next/server/app/setup.rsc +20 -20
  97. package/.next/server/app/setup.segments/_full.segment.rsc +20 -20
  98. package/.next/server/app/setup.segments/_index.segment.rsc +11 -11
  99. package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  100. package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +13 -13
  101. package/.next/server/app/tools/[tool]/page/build-manifest.json +4 -4
  102. package/.next/server/app/tools/[tool]/page.js +12 -12
  103. package/.next/server/app/tools/[tool]/page.js.nft.json +1 -1
  104. package/.next/server/app/tools/[tool]/page_client-reference-manifest.js +1 -1
  105. package/.next/server/chunks/[root-of-the-server]__05mqvyo._.js +3 -0
  106. package/.next/server/chunks/[root-of-the-server]__0fkj1-q._.js +3 -0
  107. package/.next/server/chunks/[root-of-the-server]__0i0nt_u._.js +3 -0
  108. package/.next/server/chunks/[root-of-the-server]__1su9v2-._.js +3 -0
  109. package/.next/server/chunks/[root-of-the-server]__1wcikrf._.js +5 -0
  110. package/.next/server/chunks/_08xo8nu._.js +22 -0
  111. package/.next/server/chunks/_0w8wvdn._.js +3 -0
  112. package/.next/server/chunks/_0wct7-r._.js +17 -0
  113. package/.next/server/chunks/_1f80q3b._.js +158 -0
  114. package/.next/server/chunks/_1l9d64o._.js +3 -0
  115. package/.next/server/chunks/_1lktrox._.js +8 -0
  116. package/.next/server/chunks/_1ze9o4l._.js +8 -0
  117. package/.next/server/chunks/ssr/{node_modules_cn_dist_index_166wuka.js → 0f2__cn_dist_index_1jh2egc.js} +2 -2
  118. package/.next/server/chunks/ssr/0x0c_next_dist_03da18h._.js +6 -0
  119. package/.next/server/chunks/ssr/{node_modules_next_dist_1v8aef8._.js → 0x0c_next_dist_0lkq344._.js} +2 -2
  120. package/.next/server/chunks/ssr/{node_modules_next_dist_0drixxt._.js → 0x0c_next_dist_1icgwks._.js} +6 -6
  121. package/.next/server/chunks/ssr/0x0c_next_dist_client_components_1z4ahr3._.js +3 -0
  122. package/.next/server/chunks/ssr/0x0c_next_dist_client_components_builtin_forbidden_0pm41ij.js +3 -0
  123. package/.next/server/chunks/ssr/0x0c_next_dist_client_components_builtin_global-error_1-wtk5-.js +3 -0
  124. package/.next/server/chunks/ssr/0x0c_next_dist_client_components_builtin_unauthorized_0v3_y-3.js +3 -0
  125. package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_server-async-storage_0t1dato.js → 0x0c_next_dist_client_components_server-async-storage_1-oepaa.js} +2 -2
  126. package/.next/server/chunks/ssr/[root-of-the-server]__02c3m72._.js +3 -0
  127. package/.next/server/chunks/ssr/[root-of-the-server]__031i31p._.js +3 -0
  128. package/.next/server/chunks/ssr/{[root-of-the-server]__1c8dejo._.js → [root-of-the-server]__07myivi._.js} +2 -2
  129. package/.next/server/chunks/ssr/[root-of-the-server]__0g1dtzd._.js +3 -0
  130. package/.next/server/chunks/ssr/[root-of-the-server]__0kocjhm._.js +3 -0
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0l4t71c._.js +3 -0
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0tikq3c._.js +14 -0
  133. package/.next/server/chunks/ssr/{[root-of-the-server]__1vxra_4._.js → [root-of-the-server]__1-0b897._.js} +2 -2
  134. package/.next/server/chunks/ssr/[root-of-the-server]__146cm0r._.js +3 -0
  135. package/.next/server/chunks/ssr/[root-of-the-server]__1cl7b4r._.js +3 -0
  136. package/.next/server/chunks/ssr/[root-of-the-server]__1mydt_n._.js +33 -0
  137. package/.next/server/chunks/ssr/[root-of-the-server]__1thxzex._.js +3 -0
  138. package/.next/server/chunks/ssr/{[root-of-the-server]__18hr860._.js → [root-of-the-server]__1wd0g6g._.js} +3 -3
  139. package/.next/server/chunks/ssr/_02_o-ya._.js +6 -0
  140. package/.next/server/chunks/ssr/_09540a5._.js +151 -0
  141. package/.next/server/chunks/ssr/{_1b_fov9._.js → _0defuav._.js} +2 -2
  142. package/.next/server/chunks/ssr/{_1-6djlo._.js → _0e_s0v0._.js} +2 -2
  143. package/.next/server/chunks/ssr/_0htqt7_._.js +18 -0
  144. package/.next/server/chunks/ssr/_0me-cg5._.js +3 -0
  145. package/.next/server/chunks/ssr/{_20txlee._.js → _13m9nev._.js} +2 -2
  146. package/.next/server/chunks/ssr/_1idvrlk._.js +7 -0
  147. package/.next/server/chunks/ssr/_1qy3_r5._.js +3 -0
  148. package/.next/server/chunks/ssr/_1rd2o5p._.js +3 -0
  149. package/.next/server/chunks/ssr/{_1zb40ot._.js → _1t7ag6f._.js} +2 -2
  150. package/.next/server/chunks/ssr/{_1rkc3oc._.js → _1tpe22e._.js} +3 -3
  151. package/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js +1 -1
  152. package/.next/server/chunks/ssr/app_loading_tsx_0a1flg9._.js +1 -1
  153. package/.next/server/chunks/ssr/app_performance_[slug]_loading_tsx_0d5z78a._.js +1 -1
  154. package/.next/server/chunks/ssr/app_performance_loading_tsx_1bq2nq9._.js +1 -1
  155. package/.next/server/chunks/ssr/app_settings_loading_tsx_0nv_78v._.js +1 -1
  156. package/.next/server/chunks/ssr/components_0j32dj5._.js +1 -1
  157. package/.next/server/chunks/ssr/{node_modules_1wax83z._.js → node_modules__pnpm_0hf3oiy._.js} +3 -3
  158. package/.next/server/middleware-build-manifest.js +7 -7
  159. package/.next/server/pages/404.html +2 -2
  160. package/.next/server/pages/500.html +1 -1
  161. package/.next/server/server-reference-manifest.js +1 -1
  162. package/.next/server/server-reference-manifest.json +1 -1
  163. package/.next/static/chunks/{19jmme1xtmib0.js → 06qwhmc60u5rw.js} +2 -2
  164. package/.next/static/chunks/1-4lacz2t2rmw.js +4 -0
  165. package/.next/static/chunks/11ea1elg0081p.js +1 -0
  166. package/.next/static/chunks/12nwz8qd2ocwk.css +1 -0
  167. package/.next/static/chunks/{1otvbjuxr6thq.js → 1ou_bh9mvu5x1.js} +1 -1
  168. package/.next/static/chunks/1t-tmstauvn0u.js +1 -0
  169. package/.next/static/chunks/23d4pgenwzdj5.js +1 -0
  170. package/.next/static/chunks/2dpz7gbtyu5go.js +1 -0
  171. package/.next/static/chunks/2rz3rt3tdd_p4.js +1 -0
  172. package/.next/static/chunks/{41tx3tz7-8892.js → 3dfy6smxuju__.js} +1 -1
  173. package/.next/static/chunks/{2uf-bm2nz17t-.js → 3dwrl3svcft9m.js} +1 -1
  174. package/.next/static/chunks/3fmhqgzb47j23.js +1 -0
  175. package/.next/static/chunks/{212boumyeyva9.js → 3y_9ajtx5_9ky.js} +2 -2
  176. package/.next/static/chunks/42z_0gfabqpr_.js +31 -0
  177. package/.next/static/chunks/44rowux-iee-x.js +22 -0
  178. package/.next/static/chunks/{turbopack-2-rd7l6sk4a9l.js → turbopack-00gi3z1duuih6.js} +1 -1
  179. package/.next/trace +1 -1
  180. package/.next/trace-build +1 -1
  181. package/README.md +153 -65
  182. package/package.json +16 -17
  183. package/.next/server/chunks/[root-of-the-server]__027a1hx._.js +0 -3
  184. package/.next/server/chunks/[root-of-the-server]__14tfjrn._.js +0 -3
  185. package/.next/server/chunks/[root-of-the-server]__1fj5wte._.js +0 -3
  186. package/.next/server/chunks/[root-of-the-server]__1lxxc0h._.js +0 -3
  187. package/.next/server/chunks/[root-of-the-server]__1uv-wzy._.js +0 -5
  188. package/.next/server/chunks/_0g9k22b._.js +0 -8
  189. package/.next/server/chunks/_0zwkfj-._.js +0 -8
  190. package/.next/server/chunks/_10b5gsp._.js +0 -22
  191. package/.next/server/chunks/_1494cut._.js +0 -3
  192. package/.next/server/chunks/_1f-783b._.js +0 -158
  193. package/.next/server/chunks/_1pe45_3._.js +0 -17
  194. package/.next/server/chunks/_1qtlv__._.js +0 -3
  195. package/.next/server/chunks/ssr/[root-of-the-server]__06gb9_u._.js +0 -3
  196. package/.next/server/chunks/ssr/[root-of-the-server]__0d9igav._.js +0 -3
  197. package/.next/server/chunks/ssr/[root-of-the-server]__0fufdy-._.js +0 -3
  198. package/.next/server/chunks/ssr/[root-of-the-server]__15_sjnx._.js +0 -3
  199. package/.next/server/chunks/ssr/[root-of-the-server]__18-cm6x._.js +0 -3
  200. package/.next/server/chunks/ssr/[root-of-the-server]__1fxaeqo._.js +0 -3
  201. package/.next/server/chunks/ssr/[root-of-the-server]__1io3bae._.js +0 -33
  202. package/.next/server/chunks/ssr/[root-of-the-server]__1p_6ezv._.js +0 -14
  203. package/.next/server/chunks/ssr/[root-of-the-server]__1pm7uf6._.js +0 -3
  204. package/.next/server/chunks/ssr/[root-of-the-server]__1q99mso._.js +0 -3
  205. package/.next/server/chunks/ssr/_0-bp5v7._.js +0 -7
  206. package/.next/server/chunks/ssr/_06r8zrg._.js +0 -3
  207. package/.next/server/chunks/ssr/_1a5owey._.js +0 -3
  208. package/.next/server/chunks/ssr/_1d1ipgp._.js +0 -6
  209. package/.next/server/chunks/ssr/_1d74ud1._.js +0 -3
  210. package/.next/server/chunks/ssr/_1ovns3l._.js +0 -18
  211. package/.next/server/chunks/ssr/_1y-b2zm._.js +0 -151
  212. package/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js +0 -6
  213. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +0 -3
  214. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +0 -3
  215. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js +0 -3
  216. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +0 -3
  217. package/.next/static/chunks/0ubjg1ka_080j.js +0 -1
  218. package/.next/static/chunks/1jtdb3kujnm2_.css +0 -1
  219. package/.next/static/chunks/1kpyel_do_nn_.js +0 -1
  220. package/.next/static/chunks/1rj7ns8rte9vc.js +0 -1
  221. package/.next/static/chunks/1u5zan5bs9a7v.js +0 -31
  222. package/.next/static/chunks/1wurvq5krow1k.js +0 -1
  223. package/.next/static/chunks/2bd8yoc_iosfu.js +0 -1
  224. package/.next/static/chunks/3-kx-5mj07qy0.js +0 -22
  225. package/.next/static/chunks/32d1qdgpjfhb0.js +0 -4
  226. package/.next/static/chunks/3fntmmi971322.js +0 -1
  227. /package/.next/static/{kitK02ca_n40lM28SxiCO → PgrMGvOetgfaX9yDcTEN_}/_buildManifest.js +0 -0
  228. /package/.next/static/{kitK02ca_n40lM28SxiCO → PgrMGvOetgfaX9yDcTEN_}/_clientMiddlewareManifest.js +0 -0
  229. /package/.next/static/{kitK02ca_n40lM28SxiCO → PgrMGvOetgfaX9yDcTEN_}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":237,"timestamp":33675951115,"id":4,"parentId":1,"tags":{},"startTime":1790975369414,"traceId":"63f7aed0e09036c7"},{"name":"load-custom-routes","duration":449,"timestamp":33675951478,"id":5,"parentId":1,"tags":{},"startTime":1790975369415,"traceId":"63f7aed0e09036c7"},{"name":"create-dist-dir","duration":220,"timestamp":33675951952,"id":6,"parentId":1,"tags":{},"startTime":1790975369415,"traceId":"63f7aed0e09036c7"},{"name":"clean","duration":59666,"timestamp":33675952835,"id":7,"parentId":1,"tags":{},"startTime":1790975369416,"traceId":"63f7aed0e09036c7"},{"name":"discover-routes","duration":5528,"timestamp":33676021356,"id":8,"parentId":1,"tags":{},"startTime":1790975369485,"traceId":"63f7aed0e09036c7"},{"name":"create-root-mapping","duration":59,"timestamp":33676026919,"id":9,"parentId":1,"tags":{},"startTime":1790975369490,"traceId":"63f7aed0e09036c7"},{"name":"generate-route-types","duration":19132,"timestamp":33676028361,"id":10,"parentId":1,"tags":{},"startTime":1790975369492,"traceId":"63f7aed0e09036c7"},{"name":"public-dir-conflict-check","duration":91,"timestamp":33676047551,"id":11,"parentId":1,"tags":{},"startTime":1790975369511,"traceId":"63f7aed0e09036c7"},{"name":"generate-routes-manifest","duration":2683,"timestamp":33676047752,"id":12,"parentId":1,"tags":{},"startTime":1790975369511,"traceId":"63f7aed0e09036c7"},{"name":"run-turbopack","duration":3265794,"timestamp":33676059363,"id":14,"parentId":1,"tags":{},"startTime":1790975369523,"traceId":"63f7aed0e09036c7"},{"name":"turbopack-build-events","duration":75,"timestamp":33676388068,"id":15,"parentId":1,"tags":{},"startTime":1790975369851,"traceId":"63f7aed0e09036c7"},{"name":"turbopack-persistence","duration":343000,"timestamp":33678754341,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":4.909997,"persist_duration_ms":337.525688,"task_count":4096,"bytes_written":28697349,"bytes_deleted":0},"startTime":1790975372562,"traceId":"63f7aed0e09036c7"},{"name":"run-typescript","duration":2639906,"timestamp":33679333715,"id":16,"parentId":1,"tags":{},"startTime":1790975372797,"traceId":"63f7aed0e09036c7"},{"name":"generate-required-server-files","duration":908,"timestamp":33681975331,"id":18,"parentId":1,"tags":{},"startTime":1790975375439,"traceId":"63f7aed0e09036c7"},{"name":"check-static-error-page","duration":9998,"timestamp":33682003682,"id":20,"parentId":19,"tags":{},"startTime":1790975375467,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":888859,"timestamp":33682015157,"id":40,"parentId":22,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":897522,"timestamp":33682006564,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1790975375470,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1222632,"timestamp":33682020006,"id":50,"parentId":31,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1235007,"timestamp":33682007676,"id":31,"parentId":19,"tags":{"page":"/connect"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1232788,"timestamp":33682015437,"id":45,"parentId":27,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1241014,"timestamp":33682007258,"id":27,"parentId":19,"tags":{"page":"/api/settings"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1238900,"timestamp":33682015326,"id":43,"parentId":25,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1247213,"timestamp":33682007059,"id":25,"parentId":19,"tags":{"page":"/api/health"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1237298,"timestamp":33682020028,"id":51,"parentId":33,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1249503,"timestamp":33682007866,"id":33,"parentId":19,"tags":{"page":"/"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1251007,"timestamp":33682014875,"id":39,"parentId":21,"tags":{},"startTime":1790975375478,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1260842,"timestamp":33682005089,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1790975375469,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1252249,"timestamp":33682020056,"id":54,"parentId":37,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1258850,"timestamp":33682013499,"id":37,"parentId":19,"tags":{"page":"/setup"},"startTime":1790975375477,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1277077,"timestamp":33682015507,"id":46,"parentId":28,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1285270,"timestamp":33682007353,"id":28,"parentId":19,"tags":{"page":"/api/setup/ai"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1286415,"timestamp":33682020061,"id":55,"parentId":38,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1292946,"timestamp":33682013583,"id":38,"parentId":19,"tags":{"page":"/tools/[tool]"},"startTime":1790975375477,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1300254,"timestamp":33682015578,"id":47,"parentId":29,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1308430,"timestamp":33682007456,"id":29,"parentId":19,"tags":{"page":"/api/setup"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1303537,"timestamp":33682015633,"id":48,"parentId":30,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1311630,"timestamp":33682007570,"id":30,"parentId":19,"tags":{"page":"/api/timings"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1307623,"timestamp":33682015693,"id":49,"parentId":32,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1315581,"timestamp":33682007765,"id":32,"parentId":19,"tags":{"page":"/icon.svg"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1312389,"timestamp":33682020041,"id":52,"parentId":35,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1319212,"timestamp":33682013250,"id":35,"parentId":19,"tags":{"page":"/performance"},"startTime":1790975375477,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1318613,"timestamp":33682015373,"id":44,"parentId":26,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1326855,"timestamp":33682007154,"id":26,"parentId":19,"tags":{"page":"/api/metrics"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1321008,"timestamp":33682015221,"id":41,"parentId":23,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1329415,"timestamp":33682006834,"id":23,"parentId":19,"tags":{"page":"/api/analyze"},"startTime":1790975375470,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1318666,"timestamp":33682020049,"id":53,"parentId":36,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1325332,"timestamp":33682013402,"id":36,"parentId":19,"tags":{"page":"/settings"},"startTime":1790975375477,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1327736,"timestamp":33682015273,"id":42,"parentId":24,"tags":{},"startTime":1790975375479,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1336082,"timestamp":33682006956,"id":24,"parentId":19,"tags":{"page":"/api/connect"},"startTime":1790975375470,"traceId":"63f7aed0e09036c7"},{"name":"is-page-static","duration":1329258,"timestamp":33682020067,"id":56,"parentId":34,"tags":{},"startTime":1790975375484,"traceId":"63f7aed0e09036c7"},{"name":"check-page","duration":1341370,"timestamp":33682007984,"id":34,"parentId":19,"tags":{"page":"/performance/[slug]"},"startTime":1790975375471,"traceId":"63f7aed0e09036c7"},{"name":"static-check","duration":1346600,"timestamp":33682002780,"id":19,"parentId":1,"tags":{},"startTime":1790975375466,"traceId":"63f7aed0e09036c7"},{"name":"write-routes-manifest","duration":436,"timestamp":33683350389,"id":58,"parentId":1,"tags":{},"startTime":1790975376814,"traceId":"63f7aed0e09036c7"},{"name":"load-dotenv","duration":36,"timestamp":33683360545,"id":61,"parentId":60,"tags":{},"startTime":1790975376824,"traceId":"63f7aed0e09036c7"},{"name":"run-export-path-map","duration":489,"timestamp":33683362028,"id":62,"parentId":60,"tags":{},"startTime":1790975376826,"traceId":"63f7aed0e09036c7"},{"name":"next-export","duration":527528,"timestamp":33683359534,"id":60,"parentId":1,"tags":{},"startTime":1790975376823,"traceId":"63f7aed0e09036c7"},{"name":"move-exported-app-not-found-","duration":910,"timestamp":33683889183,"id":63,"parentId":59,"tags":{},"startTime":1790975377353,"traceId":"63f7aed0e09036c7"},{"name":"move-exported-app-global-error-","duration":594,"timestamp":33683890184,"id":64,"parentId":59,"tags":{},"startTime":1790975377354,"traceId":"63f7aed0e09036c7"},{"name":"static-generation","duration":538427,"timestamp":33683352655,"id":59,"parentId":1,"tags":{},"startTime":1790975376816,"traceId":"63f7aed0e09036c7"},{"name":"write-routes-manifest","duration":356,"timestamp":33683891262,"id":65,"parentId":1,"tags":{},"startTime":1790975377355,"traceId":"63f7aed0e09036c7"},{"name":"print-tree-view","duration":2713,"timestamp":33683940857,"id":66,"parentId":1,"tags":{},"startTime":1790975377404,"traceId":"63f7aed0e09036c7"},{"name":"write-route-bundle-stats","duration":8247,"timestamp":33683943592,"id":67,"parentId":1,"tags":{},"startTime":1790975377407,"traceId":"63f7aed0e09036c7"},{"name":"telemetry-flush","duration":442073,"timestamp":33683951855,"id":68,"parentId":1,"tags":{},"startTime":1790975377415,"traceId":"63f7aed0e09036c7"},{"name":"next-build","duration":8485723,"timestamp":33675908251,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1790975369372,"traceId":"63f7aed0e09036c7"}]
1
+ [{"name":"generate-buildid","duration":238,"timestamp":61148938119,"id":4,"parentId":1,"tags":{},"startTime":1791002842700,"traceId":"1b3a7aabc9e57426"},{"name":"load-custom-routes","duration":425,"timestamp":61148938480,"id":5,"parentId":1,"tags":{},"startTime":1791002842700,"traceId":"1b3a7aabc9e57426"},{"name":"create-dist-dir","duration":256,"timestamp":61148938931,"id":6,"parentId":1,"tags":{},"startTime":1791002842700,"traceId":"1b3a7aabc9e57426"},{"name":"clean","duration":60677,"timestamp":61148939952,"id":7,"parentId":1,"tags":{},"startTime":1791002842701,"traceId":"1b3a7aabc9e57426"},{"name":"discover-routes","duration":6846,"timestamp":61149009861,"id":8,"parentId":1,"tags":{},"startTime":1791002842771,"traceId":"1b3a7aabc9e57426"},{"name":"create-root-mapping","duration":67,"timestamp":61149016744,"id":9,"parentId":1,"tags":{},"startTime":1791002842778,"traceId":"1b3a7aabc9e57426"},{"name":"generate-route-types","duration":18369,"timestamp":61149018304,"id":10,"parentId":1,"tags":{},"startTime":1791002842780,"traceId":"1b3a7aabc9e57426"},{"name":"public-dir-conflict-check","duration":82,"timestamp":61149036727,"id":11,"parentId":1,"tags":{},"startTime":1791002842798,"traceId":"1b3a7aabc9e57426"},{"name":"generate-routes-manifest","duration":2857,"timestamp":61149036902,"id":12,"parentId":1,"tags":{},"startTime":1791002842798,"traceId":"1b3a7aabc9e57426"},{"name":"run-turbopack","duration":1201501,"timestamp":61149049184,"id":14,"parentId":1,"tags":{},"startTime":1791002842811,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-build-events","duration":88,"timestamp":61149354998,"id":15,"parentId":1,"tags":{},"startTime":1791002843117,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-persistence","duration":112000,"timestamp":61149709627,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":1.594754,"persist_duration_ms":110.05646700000001,"task_count":526,"bytes_written":546505,"bytes_deleted":0},"startTime":1791002843583,"traceId":"1b3a7aabc9e57426"},{"name":"run-typescript","duration":2697101,"timestamp":61150254399,"id":18,"parentId":1,"tags":{},"startTime":1791002844016,"traceId":"1b3a7aabc9e57426"},{"name":"generate-required-server-files","duration":837,"timestamp":61152952192,"id":20,"parentId":1,"tags":{},"startTime":1791002846714,"traceId":"1b3a7aabc9e57426"},{"name":"check-static-error-page","duration":9846,"timestamp":61152973436,"id":22,"parentId":21,"tags":{},"startTime":1791002846735,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":986469,"timestamp":61152984756,"id":42,"parentId":24,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":995349,"timestamp":61152975938,"id":24,"parentId":21,"tags":{"page":"/_global-error"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1178534,"timestamp":61152984931,"id":45,"parentId":27,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1186997,"timestamp":61152976507,"id":27,"parentId":21,"tags":{"page":"/api/health"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1269848,"timestamp":61152984482,"id":41,"parentId":23,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1280048,"timestamp":61152974323,"id":23,"parentId":21,"tags":{"page":"/_not-found"},"startTime":1791002846736,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1288044,"timestamp":61152985236,"id":50,"parentId":32,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1296239,"timestamp":61152977084,"id":32,"parentId":21,"tags":{"page":"/api/timings"},"startTime":1791002846739,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1285641,"timestamp":61152988845,"id":54,"parentId":37,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1291681,"timestamp":61152982841,"id":37,"parentId":21,"tags":{"page":"/performance"},"startTime":1791002846744,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1289545,"timestamp":61152988861,"id":56,"parentId":39,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1295359,"timestamp":61152983090,"id":39,"parentId":21,"tags":{"page":"/setup"},"startTime":1791002846745,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1302931,"timestamp":61152988865,"id":57,"parentId":40,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1308656,"timestamp":61152983181,"id":40,"parentId":21,"tags":{"page":"/tools/[tool]"},"startTime":1791002846745,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1308627,"timestamp":61152985037,"id":47,"parentId":29,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1316952,"timestamp":61152976747,"id":29,"parentId":21,"tags":{"page":"/api/settings"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1312365,"timestamp":61152988811,"id":52,"parentId":33,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1323261,"timestamp":61152977977,"id":33,"parentId":21,"tags":{"page":"/connect"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1325763,"timestamp":61152985299,"id":51,"parentId":34,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1332969,"timestamp":61152978145,"id":34,"parentId":21,"tags":{"page":"/icon.svg"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1327886,"timestamp":61152984980,"id":46,"parentId":28,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1336261,"timestamp":61152976631,"id":28,"parentId":21,"tags":{"page":"/api/metrics"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1327464,"timestamp":61152988830,"id":53,"parentId":35,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1338032,"timestamp":61152978283,"id":35,"parentId":21,"tags":{"page":"/"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1332424,"timestamp":61152985107,"id":48,"parentId":30,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1340701,"timestamp":61152976852,"id":30,"parentId":21,"tags":{"page":"/api/setup/ai"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1346199,"timestamp":61152985180,"id":49,"parentId":31,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1354450,"timestamp":61152976963,"id":31,"parentId":21,"tags":{"page":"/api/setup"},"startTime":1791002846739,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1342385,"timestamp":61152989819,"id":58,"parentId":36,"tags":{},"startTime":1791002846751,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1353720,"timestamp":61152978511,"id":36,"parentId":21,"tags":{"page":"/performance/[slug]"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1349225,"timestamp":61152984877,"id":44,"parentId":26,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1357728,"timestamp":61152976391,"id":26,"parentId":21,"tags":{"page":"/api/connect"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1354454,"timestamp":61152988853,"id":55,"parentId":38,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1360360,"timestamp":61152982981,"id":38,"parentId":21,"tags":{"page":"/settings"},"startTime":1791002846745,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1366556,"timestamp":61152984822,"id":43,"parentId":25,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1375149,"timestamp":61152976255,"id":25,"parentId":21,"tags":{"page":"/api/analyze"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"static-check","duration":1378550,"timestamp":61152972874,"id":21,"parentId":1,"tags":{},"startTime":1791002846734,"traceId":"1b3a7aabc9e57426"},{"name":"write-routes-manifest","duration":402,"timestamp":61154352092,"id":60,"parentId":1,"tags":{},"startTime":1791002848114,"traceId":"1b3a7aabc9e57426"},{"name":"load-dotenv","duration":28,"timestamp":61154361450,"id":63,"parentId":62,"tags":{},"startTime":1791002848123,"traceId":"1b3a7aabc9e57426"},{"name":"run-export-path-map","duration":428,"timestamp":61154362837,"id":64,"parentId":62,"tags":{},"startTime":1791002848124,"traceId":"1b3a7aabc9e57426"},{"name":"next-export","duration":515908,"timestamp":61154360528,"id":62,"parentId":1,"tags":{},"startTime":1791002848122,"traceId":"1b3a7aabc9e57426"},{"name":"move-exported-app-not-found-","duration":1078,"timestamp":61154878644,"id":65,"parentId":61,"tags":{},"startTime":1791002848640,"traceId":"1b3a7aabc9e57426"},{"name":"move-exported-app-global-error-","duration":647,"timestamp":61154879800,"id":66,"parentId":61,"tags":{},"startTime":1791002848641,"traceId":"1b3a7aabc9e57426"},{"name":"static-generation","duration":526600,"timestamp":61154354211,"id":61,"parentId":1,"tags":{},"startTime":1791002848116,"traceId":"1b3a7aabc9e57426"},{"name":"write-routes-manifest","duration":377,"timestamp":61154880976,"id":67,"parentId":1,"tags":{},"startTime":1791002848643,"traceId":"1b3a7aabc9e57426"},{"name":"print-tree-view","duration":2794,"timestamp":61154956976,"id":68,"parentId":1,"tags":{},"startTime":1791002848719,"traceId":"1b3a7aabc9e57426"},{"name":"write-route-bundle-stats","duration":7045,"timestamp":61154959790,"id":69,"parentId":1,"tags":{},"startTime":1791002848721,"traceId":"1b3a7aabc9e57426"},{"name":"telemetry-flush","duration":471046,"timestamp":61154966851,"id":70,"parentId":1,"tags":{},"startTime":1791002848728,"traceId":"1b3a7aabc9e57426"},{"name":"next-build","duration":6542824,"timestamp":61148895098,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1791002842657,"traceId":"1b3a7aabc9e57426"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":3265794,"timestamp":33676059363,"id":14,"parentId":1,"tags":{},"startTime":1790975369523,"traceId":"63f7aed0e09036c7"},{"name":"turbopack-build-events","duration":75,"timestamp":33676388068,"id":15,"parentId":1,"tags":{},"startTime":1790975369851,"traceId":"63f7aed0e09036c7"},{"name":"turbopack-persistence","duration":343000,"timestamp":33678754341,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":4.909997,"persist_duration_ms":337.525688,"task_count":4096,"bytes_written":28697349,"bytes_deleted":0},"startTime":1790975372562,"traceId":"63f7aed0e09036c7"},{"name":"run-typescript","duration":2639906,"timestamp":33679333715,"id":16,"parentId":1,"tags":{},"startTime":1790975372797,"traceId":"63f7aed0e09036c7"},{"name":"static-check","duration":1346600,"timestamp":33682002780,"id":19,"parentId":1,"tags":{},"startTime":1790975375466,"traceId":"63f7aed0e09036c7"},{"name":"static-generation","duration":538427,"timestamp":33683352655,"id":59,"parentId":1,"tags":{},"startTime":1790975376816,"traceId":"63f7aed0e09036c7"},{"name":"telemetry-flush","duration":442073,"timestamp":33683951855,"id":68,"parentId":1,"tags":{},"startTime":1790975377415,"traceId":"63f7aed0e09036c7"},{"name":"next-build","duration":8485723,"timestamp":33675908251,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1790975369372,"traceId":"63f7aed0e09036c7"}]
1
+ [{"name":"run-turbopack","duration":1201501,"timestamp":61149049184,"id":14,"parentId":1,"tags":{},"startTime":1791002842811,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-build-events","duration":88,"timestamp":61149354998,"id":15,"parentId":1,"tags":{},"startTime":1791002843117,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-persistence","duration":112000,"timestamp":61149709627,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":1.594754,"persist_duration_ms":110.05646700000001,"task_count":526,"bytes_written":546505,"bytes_deleted":0},"startTime":1791002843583,"traceId":"1b3a7aabc9e57426"},{"name":"run-typescript","duration":2697101,"timestamp":61150254399,"id":18,"parentId":1,"tags":{},"startTime":1791002844016,"traceId":"1b3a7aabc9e57426"},{"name":"static-check","duration":1378550,"timestamp":61152972874,"id":21,"parentId":1,"tags":{},"startTime":1791002846734,"traceId":"1b3a7aabc9e57426"},{"name":"static-generation","duration":526600,"timestamp":61154354211,"id":61,"parentId":1,"tags":{},"startTime":1791002848116,"traceId":"1b3a7aabc9e57426"},{"name":"telemetry-flush","duration":471046,"timestamp":61154966851,"id":70,"parentId":1,"tags":{},"startTime":1791002848728,"traceId":"1b3a7aabc9e57426"},{"name":"next-build","duration":6542824,"timestamp":61148895098,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1791002842657,"traceId":"1b3a7aabc9e57426"}]
package/README.md CHANGED
@@ -1,79 +1,134 @@
1
1
  # MetricFlow — Performance Dashboard
2
2
 
3
- MetricFlow is a local web dashboard that pulls page-performance data from New Relic and errors from Sentry, and uses AI (Gemini) to turn them into insights and alerts. Start it with one command: `npx @karan171996/metricflow`.
3
+ MetricFlow is a local dashboard for your website. It reads real-user performance metrics from **New Relic** and JavaScript errors from **Sentry**, joins them per page, and can ask an AI model (Gemini, Claude or OpenAI) what to fix first.
4
4
 
5
- > Status: early (`v0.1.0`). The npm package is `@karan171996/metricflow` (run it with `npx @karan171996/metricflow`; after a global install the command is `performance-dashboard`). Not yet published to npm, so `npx` works only after publishing.
5
+ It runs on your own machine with your own keys. There is no MetricFlow server and no account to create.
6
6
 
7
- ## Features
7
+ ```bash
8
+ npx @karan171996/metricflow
9
+ ```
8
10
 
9
- - **Dashboard** (`/`): KPI cards, line/bar/donut charts, Core Web Vitals cards, visibility breakdown, "what moved" and AI suggestions.
10
- - **Performance hub** (`/performance`): per-page table and metrics, with a drill-down at `/performance/[slug]` (KPIs, charts, hourly breakdown, related errors).
11
- - **Settings** (`/settings`): API keys, thresholds, notification preferences, export, team members.
12
- - **Data sources**: New Relic (load time, LCP, TTFB, FID, error rate, throughput, Apdex) and Sentry (error count, warnings, latest errors).
13
- - **API routes** (Next.js route handlers): `GET /api/metrics`, `POST /api/analyze`, `GET /api/health`, `/api/timings`.
14
- - **CLI**: `performance-dashboard` starts the production server and opens your browser. Supports `--json` and `--no-color`.
11
+ > **Status: early, work in progress (v0.1.5).** Things will change. Bug reports and feedback are welcome in [Issues](https://github.com/karan171996/MetricFlow/issues).
12
+
13
+ ![Dashboard](https://raw.githubusercontent.com/karan171996/MetricFlow/main/docs/images/dashboard.png)
15
14
 
16
- ## Screenshots
15
+ _Screenshots use sample data, not real New Relic or Sentry numbers._
17
16
 
18
- ### Dashboard
17
+ ## What you need
19
18
 
20
- ![Dashboard](https://raw.githubusercontent.com/karan171996/MetricFlow/main/docs/images/dashboard.png)
19
+ | | Required? | Why |
20
+ | --- | --- | --- |
21
+ | Node.js `>=20.12` | Yes | Runs the dashboard |
22
+ | A New Relic account, with the **Browser agent** on your site | Yes | Page views, load time, Core Web Vitals, Apdex |
23
+ | A Sentry project | Yes | Error counts and latest errors per page |
24
+ | A Gemini, Claude or OpenAI API key | No | AI suggestions on the dashboard |
21
25
 
22
- ### Performance hub
26
+ New Relic and Sentry both have free plans, which are enough to try MetricFlow.
23
27
 
24
- ![Performance hub](https://raw.githubusercontent.com/karan171996/MetricFlow/main/docs/images/performance.png)
28
+ ## Get started in 4 steps
25
29
 
26
- _Screenshots use sample data, not real New Relic or Sentry numbers._
30
+ ### 1. Start the dashboard
27
31
 
28
- ### CLI
32
+ From any folder (usually your website's project folder):
33
+
34
+ ```bash
35
+ npx @karan171996/metricflow
36
+ ```
29
37
 
30
38
  ```
31
- $ performance-dashboard
32
39
  ✔ Dashboard is running
33
40
  URL http://localhost:3000
34
41
  Stop Ctrl+C
35
42
  ```
36
43
 
37
- ## Requirements
38
-
39
- - Node.js `>=20.12`
40
- - Optional but needed for real data: New Relic, Sentry and Gemini keys
44
+ Your browser opens the dashboard. The first time, it shows **Connect your data**, because no keys are set yet.
41
45
 
42
- ## Quick start
46
+ To install it in a project instead of using `npx` each time:
43
47
 
44
48
  ```bash
45
- git clone https://github.com/karan171996/MetricFlow.git
46
- cd MetricFlow
47
- npm install
48
- cp .env.local.example .env.local # then fill in your keys
49
- npm run dev # development, http://localhost:3000
49
+ npm install --save-dev @karan171996/metricflow
50
+ npx performance-dashboard
50
51
  ```
51
52
 
52
- Production-style run through the CLI (needs a build first):
53
+ The dashboard header shows the `name` from that project's `package.json`.
53
54
 
54
- ```bash
55
- npm run build
56
- node bin/cli.mjs # or `performance-dashboard` once installed/linked
57
- ```
55
+ ### 2. Add your keys
56
+
57
+ You need five values. Where to find each one:
58
58
 
59
- ### Installing into an existing app
59
+ | Value | Where to find it |
60
+ | --- | --- |
61
+ | New Relic **User API key** | New Relic → API keys → create key, type **User**. Starts with `NRAK-`. |
62
+ | New Relic **account ID** | A plain number, shown next to your keys in New Relic. |
63
+ | Sentry **auth token** | Sentry → Settings → Auth Tokens. Scopes: `project:read`, `event:read`. |
64
+ | Sentry **organization slug** | The name in your Sentry URL: `sentry.io/organizations/<slug>/`. |
65
+ | Sentry **project slug** | Sentry → Project settings. |
60
66
 
61
- Tested by installing the packed tarball into an older Create React App project (react-scripts 2.1.3). Notes from that test:
67
+ Save them in one of two ways:
62
68
 
63
- - **Install size:** MetricFlow pulls in a large dependency tree (Next.js, Recharts, Cypress and others), so expect a heavy `npm install`.
64
- - **Lockfiles:** if the host project uses yarn, installing with npm adds a `package-lock.json` next to `yarn.lock`. Use one package manager and commit only its lockfile.
65
- - **Old toolchains:** the New Relic browser agent may not work in projects on webpack 4 (Create React App 2). This is untested; check before relying on it.
69
+ - **On the Setup page.** Click **Set up keys** on the dashboard (or open `/setup`), paste the values and save. MetricFlow checks each key with New Relic and Sentry before saving it.
70
+ - **In a `.env.local` file** in the folder where you run the command:
66
71
 
67
- ### Environment variables
72
+ ```bash
73
+ NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID=1234567
74
+ NEWRELIC_API_KEY=NRAK-...
75
+ SENTRY_API_KEY=sntrys_...
76
+ SENTRY_ORG_SLUG=your-org
77
+ SENTRY_PROJECT_ID=your-project
78
+ ```
68
79
 
69
- Set these in `.env.local` (see `.env.local.example`). The CLI loads `.env.local` and `.env` from the folder you run it in.
80
+ Restart the dashboard after editing the file.
70
81
 
71
- | Variable | Purpose |
82
+ > **Using `npx`?** Keys saved on the Setup page are stored inside the downloaded package folder, so they can disappear when npm clears its cache or you update MetricFlow. For keys that stay put, use `.env.local` in your project folder. Add `.env.local` to your `.gitignore` so the keys are never committed.
83
+
84
+ **Optional AI suggestions:** on the Setup page, add a Gemini, Claude or OpenAI key, or set one in `.env.local` (`GEMINI_API_KEY`, `CLAUDE_API_KEY` or `OPENAI_API_KEY`). If you set more than one, `AI_PROVIDER=gemini|claude|openai` picks which one is used.
85
+
86
+ ### 3. Send data from your site
87
+
88
+ MetricFlow only reads data. Your website has to send it to New Relic and Sentry first. After saving your keys, click **Next: connect your app** (or open `/connect`). That page gives you copy-paste snippets:
89
+
90
+ 1. **New Relic Browser agent**: records page views, load timing and Core Web Vitals.
91
+ 2. **`emitMetric()` helper** (optional): sends your own numbers through the Browser agent.
92
+ 3. **Sentry**: sends JavaScript errors. Use your project's DSN.
93
+
94
+ Add them to your site, deploy or run it, and open a few pages.
95
+
96
+ ### 4. Check that metrics arrive
97
+
98
+ On `/connect`, the **Events received** panel shows a row for each source:
99
+
100
+ - **Browser agent (page views)**
101
+ - **Custom events (emitMetric / test event)**
102
+ - **Sentry errors**
103
+
104
+ Reload a few pages of your site and watch the rows turn green. New Relic can take a minute or two to show new data.
105
+
106
+ To test without touching your site, add a New Relic **Ingest - License** key on `/connect` and click **Send test event**. This key is only used for the test button and is different from the User key.
107
+
108
+ Then open the dashboard (`/`). Your top 20 pages (by page views, last 24 hours) appear automatically. The dashboard refreshes every 30 seconds.
109
+
110
+ ## What you'll see
111
+
112
+ | Page | What it shows |
113
+ | --- | --- |
114
+ | **Dashboard** (`/`) | Average response time, error rate, throughput and Apdex; TTFB, LCP and CLS cards with trends; pages passing Core Web Vitals; what moved since the last check; AI suggestions |
115
+ | **Performance** (`/performance`) | Every tracked page with its health. Click a row for that page's detail view |
116
+ | **New Relic** (`/tools/new-relic`) | New Relic numbers only, per page |
117
+ | **Sentry** (`/tools/sentry`) | Error count, latest error and when it was last seen, per page |
118
+ | **Settings** (`/settings`) | Warning and critical thresholds used to mark pages Healthy, Warning or Critical |
119
+
120
+ ![Performance hub](https://raw.githubusercontent.com/karan171996/MetricFlow/main/docs/images/performance.png)
121
+
122
+ ## Troubleshooting
123
+
124
+ | You see | What to do |
72
125
  | --- | --- |
73
- | `NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID`, `NEWRELIC_API_KEY` | Read metrics from New Relic |
74
- | `SENTRY_API_KEY`, `SENTRY_ORG_SLUG`, `SENTRY_PROJECT_ID` | Read errors from Sentry |
75
- | `GEMINI_API_KEY` | AI analysis (`/api/analyze`) |
76
- | `SENTRY_DSN`, `NEWRELIC_INSERT_KEY` | Only for `npm run send-test-data`, which writes a dummy event to each platform |
126
+ | **Connect your data** after adding keys | If you used `.env.local`, restart the dashboard. Check that all five values are set. |
127
+ | A page says **No data yet** | That page has no page views in New Relic in the last 24 hours. Check the Browser agent is on that page, then reload it. |
128
+ | **Could not load metrics** | New Relic rejected the request. Check the User API key and account ID on `/setup`, then click **Retry**. |
129
+ | Error counts are always 0 | Check the Sentry token scopes (`project:read`, `event:read`) and that the project slug is right. |
130
+ | `http://localhost:3000` shows a different app | Another app is using port 3000 over IPv6. Open `http://127.0.0.1:3000` instead, or pick another port: `npx @karan171996/metricflow 4000`. |
131
+ | Port already in use | Start on another port: `npx @karan171996/metricflow 4000`. |
77
132
 
78
133
  ## CLI usage
79
134
 
@@ -90,6 +145,8 @@ performance-dashboard [port] [options]
90
145
  | `--host <addr>` | Address to listen on. Default `127.0.0.1` (this machine only). `--host 0.0.0.0` exposes the dashboard, and the New Relic/Sentry data behind it, to your network and prints a warning |
91
146
  | `[port]` | Port to listen on; default `3000`. The `PORT` environment variable also works |
92
147
 
148
+ The CLI loads `.env.local` and `.env` from the folder you run it in. Set `METRICFLOW_PROJECT_NAME` to change the name shown in the dashboard header.
149
+
93
150
  Examples:
94
151
 
95
152
  ```bash
@@ -110,38 +167,69 @@ Errors print what failed and how to fix it. Exit code `2` is bad usage, `1` is a
110
167
  $ performance-dashboard abc
111
168
  ✖ Invalid port "abc".
112
169
  → Use a number from 1 to 65535, e.g. performance-dashboard 4000
113
-
114
- $ performance-dashboard # before `npm run build`
115
- ✖ No build found.
116
- → Run `npm run build` first (published packages include it).
117
170
  ```
118
171
 
119
172
  Human text goes to stdout; errors, warnings and spinners go to stderr. Full spec: [CLI_OUTPUT.md](https://github.com/karan171996/MetricFlow/blob/main/CLI_OUTPUT.md).
120
173
 
121
- ## Project structure
174
+ ## All environment variables
122
175
 
176
+ | Variable | Purpose |
177
+ | --- | --- |
178
+ | `NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID`, `NEWRELIC_API_KEY` | Read metrics from New Relic (required) |
179
+ | `SENTRY_API_KEY`, `SENTRY_ORG_SLUG`, `SENTRY_PROJECT_ID` | Read errors from Sentry (required) |
180
+ | `GEMINI_API_KEY`, `CLAUDE_API_KEY`, `OPENAI_API_KEY` | AI suggestions (optional, any one) |
181
+ | `AI_PROVIDER` | `gemini`, `claude` or `openai`; picks the AI key when several are set |
182
+ | `NEWRELIC_INSERT_KEY` | Only for **Send test event** on `/connect` and `pnpm send-test-data` |
183
+ | `SENTRY_DSN` | Only for `pnpm send-test-data` |
184
+ | `METRICFLOW_PROJECT_NAME` | Overrides the project name in the header |
185
+
186
+ ## Develop from source
187
+
188
+ ```bash
189
+ git clone https://github.com/karan171996/MetricFlow.git
190
+ cd MetricFlow
191
+ pnpm install
192
+ cp .env.local.example .env.local # then fill in your keys
193
+ pnpm dev # http://127.0.0.1:3000
123
194
  ```
124
- app/ Next.js App Router: pages (/, /performance, /settings) and api/ route handlers
125
- components/ UI: DashboardCharts, Analytics, PerformanceHub, Settings, sidebar, ui (shadcn)
126
- lib/ hooks/ types/ Data transforms, metric history, shared types
127
- bin/ CLI (cli.mjs) and output formatter (output.mjs)
128
- scripts/ send-test-data.mjs
129
- test/ CLI, hook and package tests (node:test)
130
- cypress/ End-to-end smoke test
131
- docs/images/ README screenshots (not shipped in the npm package)
195
+
196
+ This repo uses [pnpm](https://pnpm.io) (`corepack enable` picks the pinned version). Install scripts are allowed only for the packages listed in `pnpm-workspace.yaml` (Cypress and `unrs-resolver`).
197
+
198
+ Run the production build through the CLI:
199
+
200
+ ```bash
201
+ pnpm build
202
+ node bin/cli.mjs
132
203
  ```
133
204
 
134
- ## Tests
205
+ ### Tests
135
206
 
136
207
  ```bash
137
- npm run test:cli # CLI, hook and package tests (node --test)
138
- npm run cy:run # Cypress smoke test (needs the app running)
139
- npm run lint
208
+ pnpm test # all tests, fake keys, no network
209
+ pnpm test:cli # node:test suite only
210
+ pnpm test:real # against your real accounts (.env.local)
211
+ pnpm cy:run # Cypress tests (app must be running)
212
+ pnpm lint
213
+ pnpm send-test-data # one dummy event to Sentry and New Relic
214
+ ```
215
+
216
+ `pnpm test` uses fake keys from `.env.test.example` and never reads `.env.local`. `pnpm test:real` reads `.env.local` and never prints the keys. `send-test-data` needs `SENTRY_DSN` and `NEWRELIC_INSERT_KEY`.
217
+
218
+ ### Project structure
219
+
220
+ ```
221
+ app/ Next.js App Router: pages and api/ route handlers
222
+ components/ UI, one folder per feature; ui/ is generated shadcn code
223
+ lib/ Data fetching (New Relic, Sentry), transforms, hooks
224
+ bin/ CLI (cli.mjs) and output formatter (output.mjs)
225
+ scripts/ send-test-data.mjs, test-env.mjs
226
+ test/ node:test suites
227
+ cypress/ End-to-end smoke test
228
+ docs/images/ README screenshots (not shipped in the npm package)
140
229
  ```
141
230
 
142
231
  ## Contributing
143
232
 
144
- 1. Branch from `main`.
145
- 2. Run `npm run lint` and `npm run test:cli` before opening a pull request.
146
- 3. Keep CLI output going through `bin/output.mjs` (`out.ok/info/warn/error/kv/spinner`), never `console.log`.
147
- 4. This project uses a recent Next.js with breaking changes; read `node_modules/next/dist/docs/` before changing framework code.
233
+ Nobody pushes straight to `main`: fork, branch, and open a pull request. Commit messages and PR titles use the `type(scope): description` format, for example `fix(api): handle an empty New Relic response` or `feat(ui): add a Sentry page`. Types are `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore` and `revert`.
234
+
235
+ Full steps, the commit format and the PR checklist are in [CONTRIBUTING.md](CONTRIBUTING.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@karan171996/metricflow",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,20 +10,6 @@
10
10
  "bugs": {
11
11
  "url": "https://github.com/karan171996/MetricFlow/issues"
12
12
  },
13
- "scripts": {
14
- "dev": "next dev -H 127.0.0.1",
15
- "build": "next build",
16
- "start": "next start -H 127.0.0.1",
17
- "lint": "eslint",
18
- "send-test-data": "node scripts/send-test-data.mjs",
19
- "cy:open": "cypress open",
20
- "cy:run": "cypress run",
21
- "prepublishOnly": "next build",
22
- "test:cli": "node --experimental-test-module-mocks --import ./test/register.mjs --test test/*.test.mjs",
23
- "test:basic": "node scripts/test-env.mjs basic",
24
- "test:real": "node scripts/test-env.mjs real",
25
- "test": "npm run test:basic"
26
- },
27
13
  "dependencies": {
28
14
  "axios": "^1.20.0",
29
15
  "next": "16.3.8",
@@ -42,7 +28,7 @@
42
28
  "cypress": "^16.1.1",
43
29
  "dotenv": "^18.0.1",
44
30
  "eslint": "^9",
45
- "eslint-config-next": "16.3.8",
31
+ "eslint-config-next": "^16.3.8",
46
32
  "lucide-react": "^1.47.0",
47
33
  "recharts": "^3.10.1",
48
34
  "shadcn": "^4.21.0",
@@ -68,5 +54,18 @@
68
54
  },
69
55
  "publishConfig": {
70
56
  "access": "public"
57
+ },
58
+ "scripts": {
59
+ "dev": "next dev -H 127.0.0.1",
60
+ "build": "next build",
61
+ "start": "next start -H 127.0.0.1",
62
+ "lint": "eslint",
63
+ "send-test-data": "node scripts/send-test-data.mjs",
64
+ "cy:open": "cypress open",
65
+ "cy:run": "cypress run",
66
+ "test:cli": "node --experimental-test-module-mocks --import ./test/register.mjs --test test/*.test.mjs",
67
+ "test:basic": "node scripts/test-env.mjs basic",
68
+ "test:real": "node scripts/test-env.mjs real",
69
+ "test": "pnpm run test:basic"
71
70
  }
72
- }
71
+ }
@@ -1,3 +0,0 @@
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(65617),r=e.i(12892),s=e.i(24514);let a=/[\s\0#"'`\\$]/,n=()=>Response.json({error:(0,s.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,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]]))}):n()}async function u(e){let i;if(!(0,s.isLocalRequest)(e))return n();try{i=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let u=i.provider;if(!("string"==typeof u&&u in r.AI_PROVIDERS))return Response.json({saved:!1,error:"Choose a provider."},{status:400});let l="string"==typeof i.key?i.key.trim():"";if(!l)return Response.json({saved:!1,error:"Required."},{status:400});if(a.test(l))return Response.json({saved:!1,error:"Contains spaces or special characters. Paste the key without them."},{status:400});try{await o[u](l)}catch(a){let e=t.default.isAxiosError(a)?a.response?.status:void 0,s=400===e||401===e||403===e?`${r.AI_PROVIDERS[u].label} rejected this key.`:`Could not reach ${r.AI_PROVIDERS[u].label} to check the key.`;return Response.json({saved:!1,error:s},{status:422})}try{(0,r.writeEnvLocal)({[r.AI_PROVIDER_KEY]:u,[r.AI_PROVIDERS[u].key]:l})}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:u})}e.s(["GET",0,i,"POST",0,u])},71526,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),a=e.i(59756),n=e.i(61916),o=e.i(74677),i=e.i(69741),u=e.i(16795),l=e.i(87718),p=e.i(95169),d=e.i(47587),c=e.i(66012),h=e.i(70101),x=e.i(26937),R=e.i(10372),v=e.i(93695),f=e.i(9580);e.i(52474);var m=e.i(220);let g=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:E,workUnitAsyncStorage:w,serverHooks:y}=g;async function q(e,t,s){s.requestMeta&&(0,a.setRequestMeta)(e,s.requestMeta),g.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/setup/ai/route";E=E.replace(/\/index$/,"")||"/";let w=await g.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:y,deploymentId:q,params:C,nextConfig:A,parsedUrl:b,isDraftMode:S,prerenderManifest:O,routerServerContext:P,isOnDemandRevalidate:T,revalidateOnlyGenerated:_,resolvedPathname:I,clientReferenceManifest:k,serverActionsManifest:j}=w,N=(0,i.normalizeAppPath)(E),D=!!O.routes[I]&&(g.isDev||(0,f.isRouteCacheOwner)(I,g.cacheOwner,O.routes[I])),M=!!(O.dynamicRoutes[N]||D),H=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,b,!1):t.end("This page could not be found"),null);if(M&&!S){let e=O.dynamicRoutes[N];if(e&&!1===e.fallback&&!D){if(A.adapterPath)return await H();throw new v.NoFallbackError}}let U=null;!M||g.isDev||S||(U="/index"===(U=I)?"/":U);let L=!0===g.isDev||!M,$=M&&!L;j&&k&&(0,o.setManifestsSingleton)({page:E,clientReferenceManifest:k,serverActionsManifest:j});let F=e.method||"GET",K=(0,n.getTracer)(),V=K.getActiveScopeSpan(),G=!!(null==P?void 0:P.isWrappedByNextServer),B=!!(0,a.getRequestMeta)(e,"minimalMode"),X=(0,a.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,A,O,B);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let z={params:C,previewProps:O.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:L,incrementalCache:X,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,a)=>g.onRequestError(e,t,s,a,P)},sharedContext:{buildId:y,deploymentId:q}},W=new u.NodeNextRequest(e),Y=new u.NodeNextResponse(t),Z=l.NextRequestAdapter.fromNodeNextRequest(W,(0,l.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!B&&T&&_&&!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(Z,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let n=z.renderOpts.pendingWaitUntil;n&&s.waitUntil&&(s.waitUntil(n),n=void 0);let o=z.renderOpts.collectedTags;if(!M)return await (0,c.sendResponse)(W,Y,a,n),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!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,s=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:m.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 g.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:T})},!1,P),t}},Q=async(a,o)=>{try{var i,u;let a=await g.handleResponse({req:e,nextConfig:A,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:O,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:_,responseGenerator:J,waitUntil:s.waitUntil,isMinimalMode:B});if(!M)return;if((null==a||null==(i=a.value)?void 0:i.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==a||null==(u=a.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",T?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);B&&M||n.delete(R.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,x.getCacheControlHeader)(a.cacheControl)),await (0,c.sendResponse)(W,Y,new Response(a.value.body,{headers:n,status:a.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:T})},!1,P),M)throw t;await (0,c.sendResponse)(W,Y,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=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.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")||N,i=`${F} ${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(G&&V)await Q(V,void 0);else{let t=K.getActiveScopeSpan();await K.withPropagatedContext(e.headers,()=>K.trace(p.BaseServerSpan.handleRequest,{spanName:`${F} ${E}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Q(e,t)),void 0,!G)}}e.s(["handler",0,q,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:w})},"routeModule",0,g,"serverHooks",0,y,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,w])},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,""))))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}}])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__027a1hx._.js.map
@@ -1,3 +0,0 @@
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"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},34199,e=>{"use strict";var t=e.i(90770);async function r(){return Response.json({items:(0,t.getTimings)()})}e.s(["GET",0,r])},73053,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),i=e.i(61916),s=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),h=e.i(70101),x=e.i(26937),R=e.i(10372),v=e.i(93695),m=e.i(9580);e.i(52474);var g=e.i(220);let f=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/timings/route",pathname:"/api/timings",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/timings/route.ts",nextConfigOutput:"",userland:()=>e.r(34199),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:E,serverHooks:C}=f;async function y(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),f.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/timings/route";w=w.replace(/\/index$/,"")||"/";let E=await f.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:y,params:T,nextConfig:A,parsedUrl:b,isDraftMode:q,prerenderManifest:P,routerServerContext:S,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,resolvedPathname:_,clientReferenceManifest:k,serverActionsManifest:H}=E,j=(0,o.normalizeAppPath)(w),M=!!P.routes[_]&&(f.isDev||(0,m.isRouteCacheOwner)(_,f.cacheOwner,P.routes[_])),I=!!(P.dynamicRoutes[j]||M),U=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,b,!1):t.end("This page could not be found"),null);if(I&&!q){let e=P.dynamicRoutes[j];if(e&&!1===e.fallback&&!M){if(A.adapterPath)return await U();throw new v.NoFallbackError}}let D=null;!I||f.isDev||q||(D="/index"===(D=_)?"/":D);let F=!0===f.isDev||!I,K=I&&!F;H&&k&&(0,s.setManifestsSingleton)({page:w,clientReferenceManifest:k,serverActionsManifest:H});let L=e.method||"GET",$=(0,i.getTracer)(),B=$.getActiveScopeSpan(),G=!!(null==S?void 0:S.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),X=(0,n.getRequestMeta)(e,"incrementalCache")||await f.getIncrementalCache(e,A,P,V);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let W={params:T,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:q,supportsDynamicResponse:F,incrementalCache:X,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>f.onRequestError(e,t,a,n,S)},sharedContext:{buildId:C,deploymentId:y}},z=new l.NodeNextRequest(e),Z=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(z,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!V&&N&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await f.handle(J,W);e.fetchMetrics=W.renderOpts.fetchMetrics;let i=W.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let s=W.renderOpts.collectedTags;if(!I)return await (0,c.sendResponse)(z,Z,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);s&&(t[R.NEXT_CACHE_TAGS_HEADER]=s),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await f.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,S),t}},Y=async(n,s)=>{try{var o,l;let n=await f.handleResponse({req:e,nextConfig:A,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,responseGenerator:Q,waitUntil:a.waitUntil,isMinimalMode:V});if(!I)return;if((null==n||null==(o=n.value)?void 0:o.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),q&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&I||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,x.getCacheControlHeader)(n.cacheControl)),await (0,c.sendResponse)(z,Z,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await f.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,S),I)throw t;await (0,c.sendResponse)(z,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||j,o=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),n.updateName(o),s&&s!==n&&(s.setAttribute("http.route",a),s.updateName(o))})()}};if(G&&B)await Y(B,void 0);else{let t=$.getActiveScopeSpan();await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Y(e,t)),void 0,!G)}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:E})},"routeModule",0,f,"serverHooks",0,C,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,E])},90770,e=>{"use strict";let t=new Map;e.s(["getTimings",0,function(){return Array.from(t.entries()).map(([e,t])=>({name:e,value:t})).sort((e,t)=>t.value-e.value)},"recordTiming",0,function(e,r){t.set(e,Math.round(r))}])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__14tfjrn._.js.map
@@ -1,3 +0,0 @@
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"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},57007,e=>{"use strict";async function t(){return Response.json({status:"ok",timestamp:new Date().toISOString(),version:"1.0.0"})}e.s(["GET",0,t])},61370,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),s=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),h=e.i(70101),x=e.i(26937),R=e.i(10372),v=e.i(93695),m=e.i(9580);e.i(52474);var g=e.i(220);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/health/route",pathname:"/api/health",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/health/route.ts",nextConfigOutput:"",userland:()=>e.r(57007),...{}}),{workAsyncStorage:f,workUnitAsyncStorage:E,serverHooks:C}=w;async function y(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),w.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let f="/api/health/route";f=f.replace(/\/index$/,"")||"/";let E=await w.prepare(e,t,{srcPage:f,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:y,params:A,nextConfig:T,parsedUrl:b,isDraftMode:S,prerenderManifest:q,routerServerContext:P,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,resolvedPathname:_,clientReferenceManifest:k,serverActionsManifest:H}=E,j=(0,o.normalizeAppPath)(f),I=!!q.routes[_]&&(w.isDev||(0,m.isRouteCacheOwner)(_,w.cacheOwner,q.routes[_])),M=!!(q.dynamicRoutes[j]||I),D=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,b,!1):t.end("This page could not be found"),null);if(M&&!S){let e=q.dynamicRoutes[j];if(e&&!1===e.fallback&&!I){if(T.adapterPath)return await D();throw new v.NoFallbackError}}let U=null;!M||w.isDev||S||(U="/index"===(U=_)?"/":U);let F=!0===w.isDev||!M,K=M&&!F;H&&k&&(0,i.setManifestsSingleton)({page:f,clientReferenceManifest:k,serverActionsManifest:H});let L=e.method||"GET",$=(0,s.getTracer)(),B=$.getActiveScopeSpan(),G=!!(null==P?void 0:P.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),X=(0,n.getRequestMeta)(e,"incrementalCache")||await w.getIncrementalCache(e,T,q,V);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let W={params:A,previewProps:q.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:F,incrementalCache:X,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>w.onRequestError(e,t,a,n,P)},sharedContext:{buildId:C,deploymentId:y}},z=new l.NodeNextRequest(e),Z=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(z,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!V&&N&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await w.handle(J,W);e.fetchMetrics=W.renderOpts.fetchMetrics;let s=W.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let i=W.renderOpts.collectedTags;if(!M)return await (0,c.sendResponse)(z,Z,n,s),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);i&&(t[R.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?T.expireTime:void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:f,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,P),t}},Y=async(n,i)=>{try{var o,l;let n=await w.handleResponse({req:e,nextConfig:T,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:q,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,responseGenerator:Q,waitUntil:a.waitUntil,isMinimalMode:V});if(!M)return;if((null==n||null==(o=n.value)?void 0:o.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&M||s.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,x.getCacheControlHeader)(n.cacheControl)),await (0,c.sendResponse)(z,Z,new Response(n.value.body,{headers:s,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,P),M)throw t;await (0,c.sendResponse)(z,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:s.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||j,o=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),n.updateName(o),i&&i!==n&&(i.setAttribute("http.route",a),i.updateName(o))})()}};if(G&&B)await Y(B,void 0);else{let t=$.getActiveScopeSpan();await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${f}`,kind:s.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Y(e,t)),void 0,!G)}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:f,workUnitAsyncStorage:E})},"routeModule",0,w,"serverHooks",0,C,"workAsyncStorage",0,f,"workUnitAsyncStorage",0,E])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__1fj5wte._.js.map
@@ -1,3 +0,0 @@
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);let a={loadSeconds:1.5,errorPercent:2,uptimeSLA:99.9},s=()=>process.env.METRICFLOW_SETTINGS_FILE||(0,r.join)(process.cwd(),".metricflow-settings.json"),o={loadSeconds:[.1,30],errorPercent:[.1,100],uptimeSLA:[90,100]};function i(){try{return{...a,...JSON.parse((0,t.readFileSync)(s(),"utf8"))}}catch{return a}}async function l(){return Response.json(i())}async function u(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=i();for(let[e,[t,n]]of Object.entries(o)){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=`${s()}.tmp`;(0,t.writeFileSync)(e,JSON.stringify(a,null,2)),(0,t.renameSync)(e,s())}catch{return Response.json({error:"Settings could not be written. Check folder permissions."},{status:500})}return Response.json(a)}e.s(["GET",0,l,"PUT",0,u],60780)},83579,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250),a=e.i(59756),s=e.i(61916),o=e.i(74677),i=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),R=e.i(26937),x=e.i(10372),v=e.i(93695),f=e.i(9580);e.i(52474);var m=e.i(220);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:E,workUnitAsyncStorage:w,serverHooks:S}=g;async function y(e,t,n){n.requestMeta&&(0,a.setRequestMeta)(e,n.requestMeta),g.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/settings/route";E=E.replace(/\/index$/,"")||"/";let w=await g.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:S,deploymentId:y,params:C,nextConfig:b,parsedUrl:A,isDraftMode:T,prerenderManifest:q,routerServerContext:O,isOnDemandRevalidate:P,revalidateOnlyGenerated:N,resolvedPathname:_,clientReferenceManifest:j,serverActionsManifest:I}=w,k=(0,i.normalizeAppPath)(E),M=!!q.routes[_]&&(g.isDev||(0,f.isRouteCacheOwner)(_,g.cacheOwner,q.routes[_])),H=!!(q.dynamicRoutes[k]||M),U=async()=>((null==O?void 0:O.render404)?await O.render404(e,t,A,!1):t.end("This page could not be found"),null);if(H&&!T){let e=q.dynamicRoutes[k];if(e&&!1===e.fallback&&!M){if(b.adapterPath)return await U();throw new v.NoFallbackError}}let L=null;!H||g.isDev||T||(L="/index"===(L=_)?"/":L);let F=!0===g.isDev||!H,D=H&&!F;I&&j&&(0,o.setManifestsSingleton)({page:E,clientReferenceManifest:j,serverActionsManifest:I});let $=e.method||"GET",G=(0,s.getTracer)(),K=G.getActiveScopeSpan(),B=!!(null==O?void 0:O.isWrappedByNextServer),W=!!(0,a.getRequestMeta)(e,"minimalMode"),X=(0,a.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,b,q,W);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let V={params:C,previewProps:q.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts,useCacheTimeout:b.experimental.useCacheTimeout},cacheComponents:!!b.cacheComponents,validationLevel:b.experimental.instantInsights.validationLevel,isDraftMode:T,supportsDynamicResponse:F,incrementalCache:X,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:b.cacheLife,staticPageGenerationTimeout:b.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>g.onRequestError(e,t,n,a,O)},sharedContext:{buildId:S,deploymentId:y}},J=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),Z=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!W&&P&&N&&!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(Z,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(!H)return await (0,p.sendResponse)(J,z,a,s),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);o&&(t[x.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>=x.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,n=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=x.INFINITE_CACHE?!1!==r&&r>0?b.expireTime:void 0:V.renderOpts.collectedExpire;return{value:{kind:m.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:E,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:P})},!1,O),t}},Y=async(a,o)=>{try{var i,l;let a=await g.handleResponse({req:e,nextConfig:b,cacheKey:L,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:q,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:N,responseGenerator:Q,waitUntil:n.waitUntil,isMinimalMode:W});if(!H)return;if((null==a||null==(i=a.value)?void 0:i.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==a||null==(l=a.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});W||t.setHeader("x-nextjs-cache",P?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),T&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);W&&H||s.delete(x.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,R.getCacheControlHeader)(a.cacheControl)),await (0,p.sendResponse)(J,z,new Response(a.value.body,{headers:s,status:a.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:P})},!1,O),H)throw t;await (0,p.sendResponse)(J,z,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=G.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")||k,i=`${$} ${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(B&&K)await Y(K,void 0);else{let t=G.getActiveScopeSpan();await G.withPropagatedContext(e.headers,()=>G.trace(d.BaseServerSpan.handleRequest,{spanName:`${$} ${E}`,kind:s.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},e=>Y(e,t)),void 0,!B)}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:w})},"routeModule",0,g,"serverHooks",0,S,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,w])},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,""))))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}}])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__1lxxc0h._.js.map