failproofai 1.0.10 → 1.0.11-beta.1

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 (297) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +6 -6
  3. package/.next/standalone/.next/prerender-manifest.json +4 -4
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js +4 -4
  8. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.meta +8 -0
  12. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  14. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
  17. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page.js +4 -4
  19. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.meta +8 -0
  23. package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
  24. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/api/audit/invite/route.js +4 -4
  28. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/audit/run/route.js +4 -4
  30. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/audit/status/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/auth/login-request/route.js +2 -2
  34. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +4 -4
  36. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/auth/logout/route.js +3 -3
  38. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/auth/status/route.js +3 -3
  40. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +1 -1
  42. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/audit/page/build-manifest.json +3 -3
  44. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  45. package/.next/standalone/.next/server/app/audit/page.js +4 -4
  46. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/index.html +1 -1
  49. package/.next/standalone/.next/server/app/index.meta +8 -0
  50. package/.next/standalone/.next/server/app/index.rsc +14 -14
  51. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +13 -13
  52. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
  53. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/page/build-manifest.json +3 -3
  55. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  56. package/.next/standalone/.next/server/app/page.js +4 -4
  57. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +3 -3
  60. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  61. package/.next/standalone/.next/server/app/policies/page.js +8 -8
  62. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +3 -3
  65. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  66. package/.next/standalone/.next/server/app/project/[name]/page.js +5 -5
  67. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +3 -3
  70. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  71. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  72. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +5 -5
  73. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +3 -3
  76. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  77. package/.next/standalone/.next/server/app/projects/page.js +5 -5
  78. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/settings/page/build-manifest.json +3 -3
  81. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  82. package/.next/standalone/.next/server/app/settings/page.js +9 -9
  83. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/chunks/{[externals]__0qxhecv._.js → [externals]__0d7i9ea._.js} +2 -2
  86. package/.next/standalone/.next/server/chunks/{[externals]__0sg9-3p._.js → [externals]__0hjaw70._.js} +1 -1
  87. package/.next/standalone/.next/server/chunks/[externals]__1_9ze9b._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/[externals]__1oenfmn._.js +3 -0
  89. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08dchfu._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ga9hs7._.js +3 -0
  91. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l3yhx4._.js +2 -2
  92. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0moxohc._.js +22 -0
  93. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  94. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0z2ll-a._.js +3 -0
  95. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adacul._.js +11 -11
  96. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1autwno._.js +3 -0
  97. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1v25n-6._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +2 -2
  102. package/.next/standalone/.next/server/chunks/_1fz8m31._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/_1jrv3hg._.js +3 -0
  104. package/.next/standalone/.next/server/chunks/_1nx8fim._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/_1ogwigf._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/{_1q5i8mb._.js → _1q27azx._.js} +2 -2
  107. package/.next/standalone/.next/server/chunks/lib_telemetry_ts_0dctyyw._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_0el6rg8._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_0ol5pa3._.js} +2 -2
  109. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_04op_ou._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_1rqmk27._.js} +2 -2
  110. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_0dr20uz._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_1w7tiq4._.js} +2 -2
  111. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  112. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0oqrl71._.js → [root-of-the-server]__042u-jn._.js} +2 -2
  113. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +2 -2
  114. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1-bm5zf._.js → [root-of-the-server]__0502lat._.js} +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_gn5iz._.js +4 -0
  116. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f765xr._.js +4 -0
  117. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__01bmjsj._.js → [root-of-the-server]__0h38gzz._.js} +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hoaz1g._.js +4 -0
  119. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1ouobn4._.js → [root-of-the-server]__0mxmwtx._.js} +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__19evfi8._.js → [root-of-the-server]__0uescqv._.js} +1 -1
  121. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1484zv2._.js +3 -0
  123. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1mf3zp6._.js → [root-of-the-server]__19dutr7._.js} +4 -4
  124. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1u6sn69._.js → [root-of-the-server]__1ab4ifb._.js} +1 -1
  125. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1fbrk56._.js +4 -0
  126. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +2 -2
  127. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1um4yxn._.js +4 -0
  128. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1wb4yt2._.js +4 -0
  129. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1y3n3cn._.js +4 -0
  130. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/ssr/{_0yq5_3a._.js → _1ffxwxz._.js} +1 -1
  133. package/.next/standalone/.next/server/chunks/ssr/_1gb0ifp._.js +2 -2
  134. package/.next/standalone/.next/server/chunks/ssr/{_042cgl1._.js → _1o95rf0._.js} +2 -2
  135. package/.next/standalone/.next/server/chunks/ssr/{_1zopuov._.js → _1thr5rf._.js} +2 -2
  136. package/.next/standalone/.next/server/chunks/ssr/{_16pa9ht._.js → _1v1o2ya._.js} +2 -2
  137. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +12 -14
  138. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/node_modules_1hl81y4._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js +6 -0
  145. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589g._.js +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
  147. package/.next/standalone/.next/server/middleware-build-manifest.js +6 -6
  148. package/.next/standalone/.next/server/middleware.js +1 -1
  149. package/.next/standalone/.next/server/pages/404.html +1 -1
  150. package/.next/standalone/.next/server/pages/500.html +1 -1
  151. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  153. package/.next/standalone/.next/static/chunks/08tmc_7n-rba1.js +1 -0
  154. package/.next/standalone/.next/static/chunks/{3mjfvng11xnoo.js → 09tlrmucn6oq3.js} +1 -1
  155. package/.next/standalone/.next/static/chunks/{078dofaxvjgpd.js → 0i69k917myh7b.js} +1 -1
  156. package/.next/standalone/.next/static/chunks/{03h3b-uomi7_d.js → 0u_nhsujkactp.js} +1 -1
  157. package/.next/standalone/.next/static/chunks/{2j92xul6y24_v.js → 0zp51hzx62i-u.js} +1 -1
  158. package/.next/standalone/.next/static/chunks/{3u1s8dsqiean5.js → 1fz7q0gtnmeod.js} +1 -1
  159. package/.next/standalone/.next/static/chunks/{3ob2161ap37ul.js → 1j75le8wln-26.js} +1 -1
  160. package/.next/standalone/.next/static/chunks/{2kj826h1w9r47.js → 1z4km7tw0_50h.js} +1 -1
  161. package/.next/standalone/.next/static/chunks/{1fqukzzowjflt.js → 239ay_80-xr8z.js} +1 -1
  162. package/.next/standalone/.next/static/chunks/{3nkc2jlgyygda.js → 2c9pc5xco6rnu.js} +1 -1
  163. package/.next/standalone/.next/static/chunks/{3i8rg2fv9nd6e.js → 3n46e45atic-m.js} +1 -1
  164. package/.next/standalone/.next/static/chunks/{0542cuk_va8g1.js → 3sg07wnn969xq.js} +1 -1
  165. package/.next/standalone/.next/static/chunks/{turbopack-11dn2pegmg9_9.js → turbopack-1opxka4dtjbc5.js} +1 -1
  166. package/.next/standalone/app/actions/install-hooks-web.ts +10 -2
  167. package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
  168. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  169. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  170. package/.next/standalone/node_modules/next/dist/compiled/hash.js/sha256/256.js +1 -0
  171. package/.next/standalone/node_modules/next/dist/compiled/hash.js/sha256/package.json +1 -0
  172. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +17 -17
  173. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +18 -18
  174. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +3 -3
  175. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +13 -13
  176. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  177. package/.next/standalone/node_modules/next/dist/server/base-server.js +1 -2
  178. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  179. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  180. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  181. package/.next/standalone/node_modules/next/dist/server/image-optimizer.js +265 -53
  182. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  183. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +177 -19
  184. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/index.js +36 -17
  185. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js +14 -6
  186. package/.next/standalone/node_modules/next/dist/server/lib/match-next-data-pathname.js +3 -1
  187. package/.next/standalone/node_modules/next/dist/server/lib/node-fs-methods.js +14 -0
  188. package/.next/standalone/node_modules/next/dist/server/lib/route-cache-key.js +77 -0
  189. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +9 -11
  190. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  191. package/.next/standalone/node_modules/next/dist/server/mcp/get-mcp-middleware.js +4 -2
  192. package/.next/standalone/node_modules/next/dist/server/next-server.js +7 -3
  193. package/.next/standalone/node_modules/next/dist/server/response-cache/index.js +32 -16
  194. package/.next/standalone/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +2 -2
  195. package/.next/standalone/node_modules/next/dist/server/route-modules/pages/pages-handler.js +6 -1
  196. package/.next/standalone/node_modules/next/dist/server/route-modules/route-module.js +9 -2
  197. package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +30 -29
  198. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/app-paths.js +18 -1
  199. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  200. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  201. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  202. package/.next/standalone/node_modules/next/package.json +10 -10
  203. package/.next/standalone/package.json +14 -11
  204. package/.next/standalone/sdk/python/README.md +41 -0
  205. package/.next/standalone/sdk/python/docs/README.md +1 -0
  206. package/.next/standalone/sdk/python/docs/otel/README.md +36 -0
  207. package/.next/standalone/sdk/python/docs/otel/examples/agent_trace.py +30 -0
  208. package/.next/standalone/sdk/python/docs/otel/examples/quickstart.py +22 -0
  209. package/.next/standalone/sdk/python/failproofai_sdk/__init__.py +8 -0
  210. package/.next/standalone/sdk/python/failproofai_sdk/integrations/__init__.py +3 -0
  211. package/.next/standalone/sdk/python/failproofai_sdk/integrations/otel.py +189 -0
  212. package/.next/standalone/sdk/python/pyproject.toml +2 -1
  213. package/.next/standalone/sdk/python/tests/test_docs.py +16 -3
  214. package/.next/standalone/sdk/python/tests/test_integrations.py +1 -1
  215. package/.next/standalone/sdk/python/tests/test_otel.py +147 -0
  216. package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +4 -1
  217. package/.next/standalone/sdk/python/uv.lock +258 -147
  218. package/.next/standalone/sdk/typescript/README.md +43 -0
  219. package/.next/standalone/sdk/typescript/integration/ai.test.ts +9 -2
  220. package/.next/standalone/sdk/typescript/package-lock.json +57 -5
  221. package/.next/standalone/sdk/typescript/package.json +2 -0
  222. package/.next/standalone/sdk/typescript/src/edge/index.ts +9 -0
  223. package/.next/standalone/sdk/typescript/src/index.ts +2 -0
  224. package/.next/standalone/sdk/typescript/src/integrations/index.ts +4 -1
  225. package/.next/standalone/sdk/typescript/src/integrations/otel.ts +204 -0
  226. package/.next/standalone/sdk/typescript/test/integrations.test.ts +1 -1
  227. package/.next/standalone/sdk/typescript/test/otel.test.ts +125 -0
  228. package/.next/standalone/server.js +1 -1
  229. package/bin/failproofai.mjs +653 -1077
  230. package/dist/cli.mjs +8174 -3930
  231. package/dist/worker.mjs +170 -62
  232. package/hermes-plugin/plugin.yaml +1 -1
  233. package/package.json +14 -11
  234. package/scripts/launch-facts.ts +157 -0
  235. package/scripts/launch-ready.ts +228 -0
  236. package/scripts/launch-screen.ts +202 -0
  237. package/scripts/launch.ts +106 -49
  238. package/scripts/skew-log-filter.ts +42 -0
  239. package/src/audit/cli-login.ts +39 -59
  240. package/src/audit/cli.ts +308 -228
  241. package/src/audit/index.ts +45 -2
  242. package/src/audit/schedule-cli.ts +83 -120
  243. package/src/audit/types.ts +31 -0
  244. package/src/hooks/agent-selection.ts +155 -0
  245. package/src/hooks/backfill-cli.ts +151 -137
  246. package/src/hooks/backfill-request.ts +149 -0
  247. package/src/hooks/cloud-connection.ts +1 -1
  248. package/src/hooks/cloud-enrollment-cli.ts +78 -28
  249. package/src/hooks/cloud-introspect.ts +3 -0
  250. package/src/hooks/collector-config.ts +10 -1
  251. package/src/hooks/config-status.ts +606 -0
  252. package/src/hooks/configure-wizard.ts +915 -989
  253. package/src/hooks/daemon-service.ts +16 -6
  254. package/src/hooks/did-you-mean.ts +185 -0
  255. package/src/hooks/flush-cli.ts +33 -7
  256. package/src/hooks/fp-config.ts +96 -0
  257. package/src/hooks/fp-home.ts +11 -0
  258. package/src/hooks/fp-reset.ts +102 -95
  259. package/src/hooks/handler.ts +4 -0
  260. package/src/hooks/harness-cli.ts +87 -138
  261. package/src/hooks/install-prompt.ts +38 -477
  262. package/src/hooks/integrations.ts +1 -1
  263. package/src/hooks/jev-cli.ts +183 -196
  264. package/src/hooks/manager.ts +554 -358
  265. package/src/hooks/onboarding-attempt.ts +11 -9
  266. package/src/hooks/otel-cli.ts +344 -0
  267. package/src/hooks/otel-output.ts +24 -0
  268. package/src/hooks/otel-writers.ts +225 -0
  269. package/src/hooks/pack-cli.ts +219 -204
  270. package/src/hooks/report-body.ts +50 -0
  271. package/src/hooks/safe-config-write.ts +4 -2
  272. package/src/hooks/session-pause-cli.ts +93 -73
  273. package/src/hooks/tui.ts +849 -389
  274. package/src/hooks/uninstall-cli.ts +136 -149
  275. package/src/hooks/untraced-note.ts +52 -0
  276. package/.next/standalone/.next/server/chunks/[externals]__19_pzeq._.js +0 -3
  277. package/.next/standalone/.next/server/chunks/[externals]__20kzpkf._.js +0 -3
  278. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01eqny5._.js +0 -3
  279. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ja_05._.js +0 -3
  280. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0igxt32._.js +0 -3
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zyc_nm._.js +0 -3
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ttrwnd._.js +0 -22
  283. package/.next/standalone/.next/server/chunks/_0bs-v8p._.js +0 -3
  284. package/.next/standalone/.next/server/chunks/_185gyk9._.js +0 -3
  285. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +0 -4
  286. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +0 -4
  287. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +0 -4
  288. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +0 -3
  289. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +0 -4
  290. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15578wp._.js +0 -4
  291. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m_svbe._.js +0 -4
  292. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +0 -4
  293. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1n3w9lb._.js +0 -6
  294. package/.next/standalone/.next/static/chunks/1lyg_puttohbc.js +0 -1
  295. /package/.next/standalone/.next/static/{ECs8__hcNabYV58WfDh-3 → UZKCiP4Q2TeU8zOB-h9Xj}/_buildManifest.js +0 -0
  296. /package/.next/standalone/.next/static/{ECs8__hcNabYV58WfDh-3 → UZKCiP4Q2TeU8zOB-h9Xj}/_clientMiddlewareManifest.js +0 -0
  297. /package/.next/standalone/.next/static/{ECs8__hcNabYV58WfDh-3 → UZKCiP4Q2TeU8zOB-h9Xj}/_ssgManifest.js +0 -0
@@ -72,7 +72,7 @@ async function fetchPkgInfo(pkg) {
72
72
  });
73
73
  }
74
74
  const data = await res.json();
75
- const versionData = data.versions["16.3.6"];
75
+ const versionData = data.versions["16.3.8"];
76
76
  return {
77
77
  os: versionData.os,
78
78
  cpu: versionData.cpu,
@@ -100,7 +100,7 @@ async function patchIncorrectLockfile(dir) {
100
100
  const expectedSwcPkgs = Object.keys(_packagejson.optionalDependencies || {}).filter((pkg)=>pkg.startsWith('@next/swc-'));
101
101
  const patchDependency = (pkg, pkgData)=>{
102
102
  lockfileParsed.dependencies[pkg] = {
103
- version: "16.3.6",
103
+ version: "16.3.8",
104
104
  resolved: pkgData.tarball,
105
105
  integrity: pkgData.integrity,
106
106
  optional: true
@@ -108,7 +108,7 @@ async function patchIncorrectLockfile(dir) {
108
108
  };
109
109
  const patchPackage = (pkg, pkgData)=>{
110
110
  lockfileParsed.packages[pkg] = {
111
- version: "16.3.6",
111
+ version: "16.3.8",
112
112
  resolved: pkgData.tarball,
113
113
  integrity: pkgData.integrity,
114
114
  cpu: pkgData.cpu,
@@ -1569,8 +1569,7 @@ class Server {
1569
1569
  const isAppPath = Array.isArray(appPaths);
1570
1570
  let page = pathname;
1571
1571
  if (isAppPath) {
1572
- // the last item in the array is the root page, if there are parallel routes
1573
- page = appPaths[appPaths.length - 1];
1572
+ page = (0, _apppaths.selectAppPageEntry)(pathname, appPaths);
1574
1573
  }
1575
1574
  const result = await this.findPageComponents({
1576
1575
  locale: (0, _requestmeta.getRequestMeta)(ctx.req, 'locale'),
@@ -1305,7 +1305,7 @@ async function applyModifyConfig(config, phase, silent, dir) {
1305
1305
  }
1306
1306
  config = await adapterMod.modifyConfig(config, {
1307
1307
  phase,
1308
- nextVersion: "16.3.6",
1308
+ nextVersion: "16.3.8",
1309
1309
  projectDir: dir
1310
1310
  });
1311
1311
  }
@@ -302,7 +302,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
302
302
  }
303
303
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
304
304
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
305
- version: "16.3.6"
305
+ version: "16.3.8"
306
306
  });
307
307
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
308
308
  // of the current `next dev` invocation.
@@ -362,7 +362,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
362
362
  writeRoutesHashesManifest: false,
363
363
  currentNodeJsVersion,
364
364
  isPersistentCachingEnabled: (0, _utils2.isFileSystemCacheEnabledForDev)(opts.nextConfig),
365
- nextVersion: "16.3.6",
365
+ nextVersion: "16.3.8",
366
366
  serverHmr: serverFastRefresh
367
367
  }, {
368
368
  turbopackMemoryEviction: opts.nextConfig.experimental.turbopackMemoryEvictionMode,
@@ -234,7 +234,7 @@ class HotReloaderWebpack {
234
234
  this.previewProps = previewProps;
235
235
  this.rewrites = rewrites;
236
236
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
237
- version: "16.3.6"
237
+ version: "16.3.8"
238
238
  });
239
239
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
240
240
  // of the current `next dev` invocation.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  0 && (module.exports = {
6
6
  ImageError: null,
7
7
  ImageOptimizerCache: null,
8
+ createPinnedLookup: null,
8
9
  detectContentType: null,
9
10
  extractEtag: null,
10
11
  fetchExternalImage: null,
@@ -32,6 +33,9 @@ _export(exports, {
32
33
  ImageOptimizerCache: function() {
33
34
  return ImageOptimizerCache;
34
35
  },
36
+ createPinnedLookup: function() {
37
+ return createPinnedLookup;
38
+ },
35
39
  detectContentType: function() {
36
40
  return detectContentType;
37
41
  },
@@ -74,6 +78,8 @@ _export(exports, {
74
78
  });
75
79
  const _crypto = require("crypto");
76
80
  const _fs = require("fs");
81
+ const _http = require("http");
82
+ const _https = require("https");
77
83
  const _accept = require("next/dist/compiled/@hapi/accept");
78
84
  const _contentdisposition = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/content-disposition"));
79
85
  const _imagesize = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/image-size"));
@@ -96,6 +102,8 @@ const _invarianterror = require("../shared/lib/invariant-error");
96
102
  const _promises = require("dns/promises");
97
103
  const _net = require("net");
98
104
  const _dns = require("dns");
105
+ const _stream = require("stream");
106
+ const _zlib = require("zlib");
99
107
  function _interop_require_default(obj) {
100
108
  return obj && obj.__esModule ? obj : {
101
109
  default: obj
@@ -796,6 +804,7 @@ class ImageOptimizerCache {
796
804
  revalidate: effectiveRevalidate
797
805
  };
798
806
  await this.cacheHandler.set(cacheKey, valueWithRevalidate, {
807
+ kind: _responsecache.IncrementalCacheKind.IMAGE,
799
808
  cacheControl: {
800
809
  revalidate: effectiveRevalidate,
801
810
  expire: cacheControl == null ? void 0 : cacheControl.expire
@@ -932,25 +941,210 @@ function isRedirect(statusCode) {
932
941
  308
933
942
  ].includes(statusCode);
934
943
  }
944
+ function upstreamTimedOut(href) {
945
+ _log.error('upstream image response timed out for', href);
946
+ return Object.defineProperty(new ImageError(504, '"url" parameter is valid but upstream response timed out'), "__NEXT_ERROR_CODE", {
947
+ value: "E394",
948
+ enumerable: false,
949
+ configurable: true
950
+ });
951
+ }
952
+ const agentOptions = {
953
+ keepAlive: true,
954
+ timeout: 7000
955
+ };
956
+ const getHttpAgentName = _http.Agent.prototype.getName;
957
+ const getHttpsAgentName = _https.Agent.prototype.getName;
958
+ class ImageHttpAgent extends _http.Agent {
959
+ getName(options = {}) {
960
+ return `${getHttpAgentName.call(this, options)}:${options.imageLookupKey ?? ''}`;
961
+ }
962
+ }
963
+ class ImageHttpsAgent extends _https.Agent {
964
+ getName(options = {}) {
965
+ return `${getHttpsAgentName.call(this, options)}:${options.imageLookupKey ?? ''}`;
966
+ }
967
+ }
968
+ let protectedHttpAgent;
969
+ let protectedHttpsAgent;
970
+ let permissiveHttpAgent;
971
+ let permissiveHttpsAgent;
972
+ function getImageAgent(dangerouslyAllowLocalIP, isHttps) {
973
+ if (isHttps) {
974
+ if (dangerouslyAllowLocalIP) {
975
+ return permissiveHttpsAgent ??= new ImageHttpsAgent(agentOptions);
976
+ }
977
+ return protectedHttpsAgent ??= new ImageHttpsAgent(agentOptions);
978
+ }
979
+ if (dangerouslyAllowLocalIP) {
980
+ return permissiveHttpAgent ??= new ImageHttpAgent(agentOptions);
981
+ }
982
+ return protectedHttpAgent ??= new ImageHttpAgent(agentOptions);
983
+ }
984
+ const BASE_REQ_HEADERS = {
985
+ accept: '*/*',
986
+ 'accept-language': '*',
987
+ 'sec-fetch-mode': 'cors',
988
+ 'user-agent': 'node'
989
+ };
990
+ const HTTP_FETCH_HEADERS = {
991
+ ...BASE_REQ_HEADERS,
992
+ 'accept-encoding': 'gzip, deflate'
993
+ };
994
+ const HTTPS_FETCH_HEADERS = {
995
+ ...BASE_REQ_HEADERS,
996
+ 'accept-encoding': 'br, gzip, deflate'
997
+ };
998
+ /**
999
+ * Resolves `hostname` with the DNS options the socket itself would have used,
1000
+ * so the addresses checked below are the exact set the connection can reach.
1001
+ * Mirrors `lookupAndConnect()` in Node's `lib/net.js`.
1002
+ */ function lookupAsSocketWould(hostname) {
1003
+ return (0, _promises.lookup)(hostname, {
1004
+ all: true,
1005
+ // Node applies ADDRCONFIG whenever no address family is requested,
1006
+ // on every platform except Windows.
1007
+ hints: process.platform === 'win32' ? 0 : _dns.ADDRCONFIG
1008
+ });
1009
+ }
1010
+ function createPinnedLookup(hostname, addresses) {
1011
+ return (lookupHostname, options, callback)=>{
1012
+ if (lookupHostname !== hostname) {
1013
+ callback(new _invarianterror.InvariantError(`Image lookup hostname "${lookupHostname}" does not match request hostname "${hostname}"`), []);
1014
+ return;
1015
+ }
1016
+ const family = typeof options.family === 'number' ? options.family : 0;
1017
+ const matched = family ? addresses.filter((address)=>address.family === family) : addresses;
1018
+ if (matched.length === 0) {
1019
+ // Reporting this as an error rather than an empty list is not optional:
1020
+ // Node destructures the first address, so the resulting TypeError is
1021
+ // thrown inside the socket and escapes the request entirely.
1022
+ const err = new Error(`No IPv${family} address available for ${hostname}`);
1023
+ err.code = 'ENODATA';
1024
+ callback(err, []);
1025
+ return;
1026
+ }
1027
+ if (options.all) {
1028
+ callback(null, matched);
1029
+ } else {
1030
+ callback(null, matched[0].address, matched[0].family);
1031
+ }
1032
+ };
1033
+ }
1034
+ function requestUpstreamImage(url, pinnedLookup, imageLookupKey, dangerouslyAllowLocalIP, signal) {
1035
+ return new Promise((resolve, reject)=>{
1036
+ const isHttps = url.protocol === 'https:';
1037
+ const request = isHttps ? _https.request : _http.request;
1038
+ const options = {
1039
+ agent: getImageAgent(dangerouslyAllowLocalIP, isHttps),
1040
+ headers: isHttps ? HTTPS_FETCH_HEADERS : HTTP_FETCH_HEADERS,
1041
+ imageLookupKey,
1042
+ lookup: pinnedLookup,
1043
+ signal
1044
+ };
1045
+ const req = request(url, options, resolve);
1046
+ req.on('error', reject);
1047
+ req.end();
1048
+ });
1049
+ }
1050
+ class DeflateDecoder extends _stream.Transform {
1051
+ constructor(){
1052
+ super();
1053
+ this.decoder = undefined;
1054
+ }
1055
+ _transform(chunk, encoding, callback) {
1056
+ if (!this.decoder) {
1057
+ if (chunk.length === 0) {
1058
+ callback();
1059
+ return;
1060
+ }
1061
+ const options = {
1062
+ flush: _zlib.constants.Z_SYNC_FLUSH,
1063
+ finishFlush: _zlib.constants.Z_SYNC_FLUSH
1064
+ };
1065
+ this.decoder = (chunk[0] & 0x0f) === 0x08 ? (0, _zlib.createInflate)(options) : (0, _zlib.createInflateRaw)(options);
1066
+ this.decoder.on('data', (data)=>this.push(data));
1067
+ this.decoder.on('end', ()=>this.push(null));
1068
+ this.decoder.on('error', (err)=>this.destroy(err));
1069
+ }
1070
+ this.decoder.write(chunk, encoding, callback);
1071
+ }
1072
+ _final(callback) {
1073
+ var _this_decoder;
1074
+ (_this_decoder = this.decoder) == null ? void 0 : _this_decoder.end();
1075
+ this.decoder = undefined;
1076
+ callback();
1077
+ }
1078
+ }
1079
+ // Matches the chain limit of native fetch (undici), so an upstream cannot
1080
+ // force unbounded decoder allocations with the header alone.
1081
+ const MAX_CONTENT_ENCODINGS = 5;
1082
+ function decodeResponseBody(res, href) {
1083
+ const contentEncoding = res.headers['content-encoding'];
1084
+ if (!contentEncoding) {
1085
+ return res;
1086
+ }
1087
+ const codings = contentEncoding.toLowerCase().split(',');
1088
+ if (codings.length > MAX_CONTENT_ENCODINGS) {
1089
+ _log.error('upstream image response had too many content encodings for', href);
1090
+ throw Object.defineProperty(new ImageError(400, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
1091
+ value: "E394",
1092
+ enumerable: false,
1093
+ configurable: true
1094
+ });
1095
+ }
1096
+ const decoders = [];
1097
+ for(let i = codings.length - 1; i >= 0; i--){
1098
+ switch(codings[i].trim()){
1099
+ case 'x-gzip':
1100
+ case 'gzip':
1101
+ decoders.push((0, _zlib.createGunzip)({
1102
+ flush: _zlib.constants.Z_SYNC_FLUSH,
1103
+ finishFlush: _zlib.constants.Z_SYNC_FLUSH
1104
+ }));
1105
+ break;
1106
+ case 'deflate':
1107
+ decoders.push(new DeflateDecoder());
1108
+ break;
1109
+ case 'br':
1110
+ decoders.push((0, _zlib.createBrotliDecompress)({
1111
+ flush: _zlib.constants.BROTLI_OPERATION_FLUSH,
1112
+ finishFlush: _zlib.constants.BROTLI_OPERATION_FLUSH
1113
+ }));
1114
+ break;
1115
+ default:
1116
+ return res;
1117
+ }
1118
+ }
1119
+ (0, _stream.pipeline)([
1120
+ res,
1121
+ ...decoders
1122
+ ], ()=>{});
1123
+ return decoders[decoders.length - 1];
1124
+ }
935
1125
  async function fetchExternalImage(href, dangerouslyAllowLocalIP, maximumResponseBody, count = 3) {
1126
+ const url = new URL(href);
1127
+ // `URL.hostname` keeps the brackets around an IPv6 literal, the socket does not
1128
+ const hostname = url.hostname.replace(/^\[|\]$/g, '');
1129
+ let pinnedLookup;
1130
+ let imageLookupKey;
936
1131
  if (!dangerouslyAllowLocalIP) {
937
- const { hostname } = new URL(href);
938
- let ips = [
939
- hostname
940
- ];
941
- if (!(0, _net.isIP)(hostname)) {
942
- const records = await (0, _promises.lookup)(hostname, {
943
- family: 0,
944
- all: true,
945
- hints: _dns.ALL
946
- }).catch((_)=>[
947
- {
948
- address: hostname
949
- }
950
- ]);
951
- ips = records.map((record)=>record.address);
1132
+ const literalFamily = (0, _net.isIP)(hostname);
1133
+ let addresses;
1134
+ if (literalFamily > 0) {
1135
+ // A literal address is connected to as-is, without any DNS resolution
1136
+ addresses = [
1137
+ {
1138
+ address: hostname,
1139
+ family: literalFamily
1140
+ }
1141
+ ];
1142
+ } else {
1143
+ addresses = await lookupAsSocketWould(hostname);
1144
+ pinnedLookup = createPinnedLookup(hostname, addresses);
952
1145
  }
953
- const privateIps = ips.filter((ip)=>(0, _isprivateip.isPrivateIp)(ip));
1146
+ imageLookupKey = addresses.map((address)=>`${address.family}:${address.address}`).join(',');
1147
+ const privateIps = addresses.map((record)=>record.address).filter((ip)=>(0, _isprivateip.isPrivateIp)(ip));
954
1148
  if (privateIps.length > 0) {
955
1149
  _log.error('upstream image', href, 'hostname resolved to private IP', JSON.stringify(privateIps), 'If this is expected and you understand SSRF risk, use images.dangerouslyAllowLocalIP = true to continue.');
956
1150
  throw Object.defineProperty(new ImageError(400, '"url" parameter is not allowed'), "__NEXT_ERROR_CODE", {
@@ -960,24 +1154,31 @@ async function fetchExternalImage(href, dangerouslyAllowLocalIP, maximumResponse
960
1154
  });
961
1155
  }
962
1156
  }
963
- const res = await fetch(href, {
964
- signal: AbortSignal.timeout(7000),
965
- redirect: 'manual'
966
- }).catch((err)=>err);
967
- if (res instanceof Error) {
968
- const err = res;
969
- if (err.name === 'TimeoutError') {
970
- _log.error('upstream image response timed out for', href);
971
- throw Object.defineProperty(new ImageError(504, '"url" parameter is valid but upstream response timed out'), "__NEXT_ERROR_CODE", {
972
- value: "E394",
973
- enumerable: false,
974
- configurable: true
975
- });
1157
+ // The signal is owned here rather than by `requestUpstreamImage()` because it
1158
+ // has to stay readable while the body streams. Node reports an abort during
1159
+ // the body as a plain `ECONNRESET` on the response, so the signal is the only
1160
+ // way to tell a timeout apart from the upstream resetting the connection.
1161
+ const signal = AbortSignal.timeout(agentOptions.timeout);
1162
+ let res;
1163
+ try {
1164
+ res = await requestUpstreamImage(url, pinnedLookup, imageLookupKey, dangerouslyAllowLocalIP, signal);
1165
+ } catch (err) {
1166
+ if (signal.aborted) {
1167
+ throw upstreamTimedOut(href);
976
1168
  }
977
1169
  throw err;
978
1170
  }
979
- const locationHeader = res.headers.get('Location');
980
- if (isRedirect(res.status) && locationHeader && URL.canParse(locationHeader, href)) {
1171
+ const statusCode = res.statusCode;
1172
+ if (statusCode === undefined) {
1173
+ res.destroy();
1174
+ throw new _invarianterror.InvariantError('Expected statusCode on upstream image response');
1175
+ }
1176
+ const locationHeader = res.headers.location;
1177
+ if (isRedirect(statusCode) && locationHeader && URL.canParse(locationHeader, href)) {
1178
+ // Discard the body rather than draining it. A redirect body is never used,
1179
+ // and draining one would download unlimited bytes from the upstream because
1180
+ // `maximumResponseBody` is only enforced on the final response.
1181
+ res.destroy();
981
1182
  if (count === 0) {
982
1183
  _log.error('upstream image response had too many redirects', href);
983
1184
  throw Object.defineProperty(new ImageError(508, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
@@ -989,15 +1190,41 @@ async function fetchExternalImage(href, dangerouslyAllowLocalIP, maximumResponse
989
1190
  const redirect = new URL(locationHeader, href).href;
990
1191
  return fetchExternalImage(redirect, dangerouslyAllowLocalIP, maximumResponseBody, count - 1);
991
1192
  }
992
- if (!res.ok) {
993
- _log.error('upstream image response failed for', href, res.status);
994
- throw Object.defineProperty(new ImageError(res.status, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
1193
+ if (statusCode < 200 || statusCode > 299) {
1194
+ res.destroy();
1195
+ _log.error('upstream image response failed for', href, statusCode);
1196
+ throw Object.defineProperty(new ImageError(statusCode, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
995
1197
  value: "E394",
996
1198
  enumerable: false,
997
1199
  configurable: true
998
1200
  });
999
1201
  }
1000
- if (!res.body) {
1202
+ const chunks = [];
1203
+ let totalSize = 0;
1204
+ try {
1205
+ const body = decodeResponseBody(res, href);
1206
+ // Throwing out of this loop destroys the response, so an oversized or
1207
+ // timed out download stops instead of running to completion.
1208
+ for await (const chunk of body){
1209
+ totalSize += chunk.byteLength;
1210
+ if (totalSize > maximumResponseBody) {
1211
+ _log.error('upstream image response exceeded maximum size for', href, totalSize);
1212
+ throw Object.defineProperty(new ImageError(413, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
1213
+ value: "E394",
1214
+ enumerable: false,
1215
+ configurable: true
1216
+ });
1217
+ }
1218
+ chunks.push(chunk);
1219
+ }
1220
+ } catch (err) {
1221
+ res.destroy();
1222
+ if (signal.aborted) {
1223
+ throw upstreamTimedOut(href);
1224
+ }
1225
+ throw err;
1226
+ }
1227
+ if (totalSize === 0) {
1001
1228
  _log.error('upstream image response is empty for', href);
1002
1229
  throw Object.defineProperty(new ImageError(400, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
1003
1230
  value: "E394",
@@ -1005,25 +1232,10 @@ async function fetchExternalImage(href, dangerouslyAllowLocalIP, maximumResponse
1005
1232
  configurable: true
1006
1233
  });
1007
1234
  }
1008
- const chunks = [];
1009
- let totalSize = 0;
1010
- for await (const c of res.body){
1011
- const chunk = Buffer.from(c);
1012
- totalSize += chunk.byteLength;
1013
- if (totalSize > maximumResponseBody) {
1014
- _log.error('upstream image response exceeded maximum size for', href, totalSize);
1015
- throw Object.defineProperty(new ImageError(413, '"url" parameter is valid but upstream response is invalid'), "__NEXT_ERROR_CODE", {
1016
- value: "E394",
1017
- enumerable: false,
1018
- configurable: true
1019
- });
1020
- }
1021
- chunks.push(chunk);
1022
- }
1023
1235
  const buffer = Buffer.concat(chunks);
1024
- const contentType = res.headers.get('Content-Type');
1025
- const cacheControl = res.headers.get('Cache-Control');
1026
- const etag = extractEtag(res.headers.get('ETag'), buffer);
1236
+ const contentType = res.headers['content-type'];
1237
+ const cacheControl = res.headers['cache-control'];
1238
+ const etag = extractEtag(res.headers.etag, buffer);
1027
1239
  return {
1028
1240
  buffer,
1029
1241
  contentType,
@@ -79,7 +79,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
79
79
  }
80
80
  function logStartInfo({ networkUrl, appUrl, envInfo, logBundler }) {
81
81
  const versionSuffix = logBundler ? ` (${(0, _bundler.bundlerName)((0, _bundler.getBundlerFromEnv)())})` : '';
82
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.3.6"}`))}${versionSuffix}`);
82
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.3.8"}`))}${versionSuffix}`);
83
83
  if (appUrl) {
84
84
  _log.bootstrap(`- Local: ${appUrl}`);
85
85
  }