jishushell 0.6.18 → 0.7.3

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 (343) hide show
  1. package/apps/anythingllm-container.yaml +1 -0
  2. package/apps/browserless-chromium-container.yaml +1 -0
  3. package/apps/filebrowser-container.yaml +1 -0
  4. package/apps/hermes-container.yaml +1 -7
  5. package/apps/immich-container-lite.yaml +337 -0
  6. package/apps/immich-container.yaml +371 -0
  7. package/apps/jishu-kb-container.yaml +26 -21
  8. package/apps/ollama-binary.yaml +1 -0
  9. package/apps/ollama-cpu-container.yaml +1 -0
  10. package/apps/ollama-with-hollama-binary.yaml +2 -0
  11. package/apps/openclaw-binary.yaml +4 -8
  12. package/apps/openclaw-container.yaml +1 -7
  13. package/apps/openclaw-with-ollama-container.yaml +1 -0
  14. package/apps/openclaw-with-searxng-container.yaml +20 -0
  15. package/apps/searxng-container.yaml +20 -0
  16. package/apps/weknora-container.yaml +5 -0
  17. package/dependencies/jishushell-panel-0.7.3.tgz +0 -0
  18. package/dist/cli/core.js +1 -1
  19. package/dist/cli/core.js.map +1 -1
  20. package/dist/cli/doctor.js +96 -0
  21. package/dist/cli/doctor.js.map +1 -1
  22. package/dist/config.d.ts +9 -1
  23. package/dist/config.js +72 -2
  24. package/dist/config.js.map +1 -1
  25. package/dist/install.js +60 -19
  26. package/dist/install.js.map +1 -1
  27. package/dist/routes/admin.d.ts +2 -0
  28. package/dist/routes/admin.js +72 -0
  29. package/dist/routes/admin.js.map +1 -0
  30. package/dist/routes/docker.d.ts +2 -0
  31. package/dist/routes/docker.js +58 -0
  32. package/dist/routes/docker.js.map +1 -0
  33. package/dist/routes/file-mounts.js +5 -8
  34. package/dist/routes/file-mounts.js.map +1 -1
  35. package/dist/routes/instances.d.ts +0 -14
  36. package/dist/routes/instances.js +44 -1184
  37. package/dist/routes/instances.js.map +1 -1
  38. package/dist/server.d.ts +6 -0
  39. package/dist/server.js +53 -20
  40. package/dist/server.js.map +1 -1
  41. package/dist/services/app-common/catalog-service.js +15 -5
  42. package/dist/services/app-common/catalog-service.js.map +1 -1
  43. package/dist/services/app-common/delete-service.js +5 -0
  44. package/dist/services/app-common/delete-service.js.map +1 -1
  45. package/dist/services/app-common/instance-store.js +3 -0
  46. package/dist/services/app-common/instance-store.js.map +1 -1
  47. package/dist/services/app-common/lifecycle-service.js +12 -4
  48. package/dist/services/app-common/lifecycle-service.js.map +1 -1
  49. package/dist/services/app-common/ownership.d.ts +3 -0
  50. package/dist/services/app-common/ownership.js +11 -0
  51. package/dist/services/app-common/ownership.js.map +1 -0
  52. package/dist/services/app-common/runtime-facts.js +2 -0
  53. package/dist/services/app-common/runtime-facts.js.map +1 -1
  54. package/dist/services/app-common/spec-materializer.d.ts +0 -1
  55. package/dist/services/app-common/spec-materializer.js +21 -87
  56. package/dist/services/app-common/spec-materializer.js.map +1 -1
  57. package/dist/services/app-common/status-refresh.js +25 -13
  58. package/dist/services/app-common/status-refresh.js.map +1 -1
  59. package/dist/services/app-modules/browserless/routes.js +5 -3
  60. package/dist/services/app-modules/browserless/routes.js.map +1 -1
  61. package/dist/services/capabilities/contract.d.ts +1 -2
  62. package/dist/services/capabilities/contract.js +0 -10
  63. package/dist/services/capabilities/contract.js.map +1 -1
  64. package/dist/services/capabilities/endpoint-validator.js +0 -1
  65. package/dist/services/capabilities/endpoint-validator.js.map +1 -1
  66. package/dist/services/capabilities/health.js +1 -1
  67. package/dist/services/capabilities/health.js.map +1 -1
  68. package/dist/services/capability-proxy/http.d.ts +7 -0
  69. package/dist/services/capability-proxy/http.js +555 -0
  70. package/dist/services/capability-proxy/http.js.map +1 -0
  71. package/dist/services/capability-proxy/terminal.d.ts +4 -0
  72. package/dist/services/capability-proxy/terminal.js +179 -0
  73. package/dist/services/capability-proxy/terminal.js.map +1 -0
  74. package/dist/services/connections/admin.js +19 -9
  75. package/dist/services/connections/admin.js.map +1 -1
  76. package/dist/services/connections/apply.d.ts +3 -9
  77. package/dist/services/connections/apply.js +0 -29
  78. package/dist/services/connections/apply.js.map +1 -1
  79. package/dist/services/connections/transactor.js +2 -2
  80. package/dist/services/connections/transactor.js.map +1 -1
  81. package/dist/services/files/bootstrap.d.ts +7 -0
  82. package/dist/services/files/bootstrap.js +16 -0
  83. package/dist/services/files/bootstrap.js.map +1 -0
  84. package/dist/services/files/photos/upload-page.d.ts +2 -0
  85. package/dist/services/files/photos/upload-page.js +248 -0
  86. package/dist/services/files/photos/upload-page.js.map +1 -0
  87. package/dist/services/files/photos/upload-store.d.ts +74 -0
  88. package/dist/services/files/photos/upload-store.js +432 -0
  89. package/dist/services/files/photos/upload-store.js.map +1 -0
  90. package/dist/services/http/proxy-utils.d.ts +7 -0
  91. package/dist/services/http/proxy-utils.js +29 -0
  92. package/dist/services/http/proxy-utils.js.map +1 -0
  93. package/dist/services/http/request-utils.d.ts +3 -0
  94. package/dist/services/http/request-utils.js +23 -0
  95. package/dist/services/http/request-utils.js.map +1 -0
  96. package/dist/services/instances/manager.d.ts +6 -5
  97. package/dist/services/instances/manager.js +45 -51
  98. package/dist/services/instances/manager.js.map +1 -1
  99. package/dist/services/instances/pairing.d.ts +17 -0
  100. package/dist/services/instances/pairing.js +53 -0
  101. package/dist/services/instances/pairing.js.map +1 -0
  102. package/dist/services/instances/status.d.ts +2 -0
  103. package/dist/services/instances/status.js +11 -0
  104. package/dist/services/instances/status.js.map +1 -0
  105. package/dist/services/integrations/hermes/integration.d.ts +1 -1
  106. package/dist/services/integrations/hermes/integration.js +7 -8
  107. package/dist/services/integrations/hermes/integration.js.map +1 -1
  108. package/dist/services/integrations/immich/client.d.ts +93 -0
  109. package/dist/services/integrations/immich/client.js +458 -0
  110. package/dist/services/integrations/immich/client.js.map +1 -0
  111. package/dist/services/integrations/immich/config.d.ts +15 -0
  112. package/dist/services/integrations/immich/config.js +178 -0
  113. package/dist/services/integrations/immich/config.js.map +1 -0
  114. package/dist/services/integrations/immich/discovery.d.ts +9 -0
  115. package/dist/services/integrations/immich/discovery.js +101 -0
  116. package/dist/services/integrations/immich/discovery.js.map +1 -0
  117. package/dist/services/integrations/immich/gallery-renderer.d.ts +5 -0
  118. package/dist/services/integrations/immich/gallery-renderer.js +150 -0
  119. package/dist/services/integrations/immich/gallery-renderer.js.map +1 -0
  120. package/dist/services/integrations/immich/immich-shim.d.ts +11 -0
  121. package/dist/services/integrations/immich/immich-shim.js +439 -0
  122. package/dist/services/integrations/immich/immich-shim.js.map +1 -0
  123. package/dist/services/integrations/immich/integration.d.ts +18 -0
  124. package/dist/services/integrations/immich/integration.js +64 -0
  125. package/dist/services/integrations/immich/integration.js.map +1 -0
  126. package/dist/services/integrations/immich/photo-library.d.ts +4 -0
  127. package/dist/services/integrations/immich/photo-library.js +63 -0
  128. package/dist/services/integrations/immich/photo-library.js.map +1 -0
  129. package/dist/services/integrations/immich/review-executor.d.ts +3 -0
  130. package/dist/services/integrations/immich/review-executor.js +41 -0
  131. package/dist/services/integrations/immich/review-executor.js.map +1 -0
  132. package/dist/services/integrations/immich/review-session-service.d.ts +27 -0
  133. package/dist/services/integrations/immich/review-session-service.js +206 -0
  134. package/dist/services/integrations/immich/review-session-service.js.map +1 -0
  135. package/dist/services/integrations/immich/review-store.d.ts +47 -0
  136. package/dist/services/integrations/immich/review-store.js +347 -0
  137. package/dist/services/integrations/immich/review-store.js.map +1 -0
  138. package/dist/services/integrations/immich/routes.d.ts +7 -0
  139. package/dist/services/integrations/immich/routes.js +363 -0
  140. package/dist/services/integrations/immich/routes.js.map +1 -0
  141. package/dist/services/integrations/immich/types.d.ts +186 -0
  142. package/dist/services/integrations/immich/types.js +2 -0
  143. package/dist/services/integrations/immich/types.js.map +1 -0
  144. package/dist/services/integrations/index.d.ts +1 -0
  145. package/dist/services/integrations/index.js +1 -0
  146. package/dist/services/integrations/index.js.map +1 -1
  147. package/dist/services/integrations/installable/installers/integration.js +113 -7
  148. package/dist/services/integrations/installable/installers/integration.js.map +1 -1
  149. package/dist/services/integrations/jishukb/integration.d.ts +3 -1
  150. package/dist/services/integrations/jishukb/integration.js +121 -10
  151. package/dist/services/integrations/jishukb/integration.js.map +1 -1
  152. package/dist/services/integrations/openclaw/integration.d.ts +21 -7
  153. package/dist/services/integrations/openclaw/integration.js +385 -158
  154. package/dist/services/integrations/openclaw/integration.js.map +1 -1
  155. package/dist/services/integrations/openclaw/jishukb-native-mcp.d.ts +58 -0
  156. package/dist/services/integrations/openclaw/jishukb-native-mcp.js +373 -0
  157. package/dist/services/integrations/openclaw/jishukb-native-mcp.js.map +1 -0
  158. package/dist/services/integrations/openclaw/jishukb-shim.d.ts +8 -4
  159. package/dist/services/integrations/openclaw/jishukb-shim.js +624 -17
  160. package/dist/services/integrations/openclaw/jishukb-shim.js.map +1 -1
  161. package/dist/services/integrations/openclaw/mcporter.d.ts +13 -0
  162. package/dist/services/integrations/openclaw/mcporter.js +31 -0
  163. package/dist/services/integrations/openclaw/mcporter.js.map +1 -1
  164. package/dist/services/integrations/openclaw/native-mcp.d.ts +48 -0
  165. package/dist/services/integrations/openclaw/native-mcp.js +125 -0
  166. package/dist/services/integrations/openclaw/native-mcp.js.map +1 -0
  167. package/dist/services/integrations/openclaw/routes.js +4 -1
  168. package/dist/services/integrations/openclaw/routes.js.map +1 -1
  169. package/dist/services/integrations/types.d.ts +5 -17
  170. package/dist/services/repair/runtime-repair.js +68 -1
  171. package/dist/services/repair/runtime-repair.js.map +1 -1
  172. package/dist/services/runtime/docker-network.d.ts +8 -0
  173. package/dist/services/runtime/docker-network.js +123 -0
  174. package/dist/services/runtime/docker-network.js.map +1 -0
  175. package/dist/services/runtime/driver-registry.d.ts +4 -0
  176. package/dist/services/runtime/driver-registry.js.map +1 -1
  177. package/dist/services/runtime/drivers/nomad.d.ts +1 -0
  178. package/dist/services/runtime/drivers/nomad.js +35 -5
  179. package/dist/services/runtime/drivers/nomad.js.map +1 -1
  180. package/dist/services/runtime/service-manager.d.ts +2 -0
  181. package/dist/services/runtime/service-manager.js +18 -0
  182. package/dist/services/runtime/service-manager.js.map +1 -0
  183. package/dist/services/runtime/types.d.ts +1 -0
  184. package/dist/services/runtime/workload-compiler.js +29 -4
  185. package/dist/services/runtime/workload-compiler.js.map +1 -1
  186. package/dist/services/setup/setup-manager.js +29 -73
  187. package/dist/services/setup/setup-manager.js.map +1 -1
  188. package/dist/services/system/runtime-ownership.d.ts +36 -0
  189. package/dist/services/system/runtime-ownership.js +250 -0
  190. package/dist/services/system/runtime-ownership.js.map +1 -0
  191. package/dist/services/system/system-reconciler.js +53 -0
  192. package/dist/services/system/system-reconciler.js.map +1 -1
  193. package/dist/types.d.ts +19 -3
  194. package/dist/utils/path-safety.js +1 -1
  195. package/dist/utils/service-user.d.ts +13 -0
  196. package/dist/utils/service-user.js +129 -0
  197. package/dist/utils/service-user.js.map +1 -0
  198. package/install/jishu-install.sh +0 -1
  199. package/node_modules/brace-expansion/dist/commonjs/index.js +24 -14
  200. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  201. package/node_modules/brace-expansion/dist/esm/index.js +24 -14
  202. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  203. package/node_modules/brace-expansion/package.json +2 -2
  204. package/node_modules/fast-uri/index.js +1 -1
  205. package/node_modules/fast-uri/package.json +1 -1
  206. package/node_modules/fast-uri/test/security.test.js +28 -0
  207. package/node_modules/fastify/SECURITY.md +1 -1
  208. package/node_modules/fastify/SPONSORS.md +6 -4
  209. package/node_modules/fastify/docs/Guides/Database.md +0 -28
  210. package/node_modules/fastify/docs/Guides/Ecosystem.md +13 -2
  211. package/node_modules/fastify/docs/Guides/Serverless.md +2 -2
  212. package/node_modules/fastify/docs/Guides/Write-Plugin.md +1 -1
  213. package/node_modules/fastify/docs/Reference/Encapsulation.md +27 -26
  214. package/node_modules/fastify/docs/Reference/Errors.md +10 -4
  215. package/node_modules/fastify/docs/Reference/HTTP2.md +10 -10
  216. package/node_modules/fastify/docs/Reference/Hooks.md +4 -4
  217. package/node_modules/fastify/docs/Reference/Index.md +14 -16
  218. package/node_modules/fastify/docs/Reference/LTS.md +12 -13
  219. package/node_modules/fastify/docs/Reference/Lifecycle.md +9 -8
  220. package/node_modules/fastify/docs/Reference/Logging.md +44 -39
  221. package/node_modules/fastify/docs/Reference/Middleware.md +21 -25
  222. package/node_modules/fastify/docs/Reference/Principles.md +2 -2
  223. package/node_modules/fastify/docs/Reference/Reply.md +6 -1
  224. package/node_modules/fastify/docs/Reference/Request.md +27 -16
  225. package/node_modules/fastify/docs/Reference/Routes.md +5 -2
  226. package/node_modules/fastify/docs/Reference/Server.md +31 -3
  227. package/node_modules/fastify/docs/Reference/Type-Providers.md +29 -5
  228. package/node_modules/fastify/docs/Reference/Validation-and-Serialization.md +15 -2
  229. package/node_modules/fastify/docs/Reference/Warnings.md +7 -6
  230. package/node_modules/fastify/eslint.config.js +7 -2
  231. package/node_modules/fastify/fastify.d.ts +8 -3
  232. package/node_modules/fastify/fastify.js +43 -14
  233. package/node_modules/fastify/lib/content-type-parser.js +13 -1
  234. package/node_modules/fastify/lib/decorate.js +11 -3
  235. package/node_modules/fastify/lib/error-handler.js +4 -3
  236. package/node_modules/fastify/lib/error-serializer.js +59 -59
  237. package/node_modules/fastify/lib/errors.js +16 -1
  238. package/node_modules/fastify/lib/four-oh-four.js +14 -9
  239. package/node_modules/fastify/lib/handle-request.js +11 -5
  240. package/node_modules/fastify/lib/plugin-override.js +2 -1
  241. package/node_modules/fastify/lib/plugin-utils.js +5 -5
  242. package/node_modules/fastify/lib/reply.js +63 -8
  243. package/node_modules/fastify/lib/request.js +14 -4
  244. package/node_modules/fastify/lib/route.js +20 -6
  245. package/node_modules/fastify/lib/schema-controller.js +1 -1
  246. package/node_modules/fastify/lib/schemas.js +37 -30
  247. package/node_modules/fastify/lib/symbols.js +3 -1
  248. package/node_modules/fastify/lib/validation.js +1 -13
  249. package/node_modules/fastify/lib/warnings.js +3 -3
  250. package/node_modules/fastify/package.json +13 -15
  251. package/node_modules/fastify/scripts/validate-ecosystem-links.js +1 -0
  252. package/node_modules/fastify/test/bundler/esbuild/package.json +1 -1
  253. package/node_modules/fastify/test/close-pipelining.test.js +1 -2
  254. package/node_modules/fastify/test/custom-http-server.test.js +38 -0
  255. package/node_modules/fastify/test/decorator-instance-properties.test.js +63 -0
  256. package/node_modules/fastify/test/diagnostics-channel/async-error-handler.test.js +74 -0
  257. package/node_modules/fastify/test/hooks.test.js +23 -0
  258. package/node_modules/fastify/test/http-methods/get.test.js +1 -1
  259. package/node_modules/fastify/test/http2/plain.test.js +135 -0
  260. package/node_modules/fastify/test/http2/secure-with-fallback.test.js +1 -1
  261. package/node_modules/fastify/test/https/https.test.js +1 -2
  262. package/node_modules/fastify/test/internals/errors.test.js +31 -1
  263. package/node_modules/fastify/test/internals/plugin.test.js +3 -1
  264. package/node_modules/fastify/test/internals/request.test.js +27 -3
  265. package/node_modules/fastify/test/internals/schema-controller-perf.test.js +33 -0
  266. package/node_modules/fastify/test/logger/logging.test.js +18 -1
  267. package/node_modules/fastify/test/logger/options.test.js +38 -1
  268. package/node_modules/fastify/test/reply-error.test.js +1 -1
  269. package/node_modules/fastify/test/reply-trailers.test.js +70 -0
  270. package/node_modules/fastify/test/request-media-type.test.js +105 -0
  271. package/node_modules/fastify/test/route-prefix.test.js +34 -0
  272. package/node_modules/fastify/test/router-options.test.js +222 -11
  273. package/node_modules/fastify/test/schema-serialization.test.js +108 -0
  274. package/node_modules/fastify/test/schema-validation.test.js +24 -0
  275. package/node_modules/fastify/test/scripts/validate-ecosystem-links.test.js +40 -57
  276. package/node_modules/fastify/test/throw.test.js +14 -0
  277. package/node_modules/fastify/test/trust-proxy.test.js +21 -0
  278. package/node_modules/fastify/test/types/content-type-parser.tst.ts +70 -0
  279. package/node_modules/fastify/test/types/{decorate-request-reply.test-d.ts → decorate-request-reply.tst.ts} +4 -4
  280. package/node_modules/fastify/test/types/{dummy-plugin.ts → dummy-plugin.mts} +1 -1
  281. package/node_modules/fastify/test/types/errors.tst.ts +91 -0
  282. package/node_modules/fastify/test/types/fastify.tst.ts +351 -0
  283. package/node_modules/fastify/test/types/hooks.tst.ts +578 -0
  284. package/node_modules/fastify/test/types/instance.tst.ts +597 -0
  285. package/node_modules/fastify/test/types/{logger.test-d.ts → logger.tst.ts} +61 -62
  286. package/node_modules/fastify/test/types/plugin.tst.ts +96 -0
  287. package/node_modules/fastify/test/types/register.tst.ts +245 -0
  288. package/node_modules/fastify/test/types/reply.tst.ts +297 -0
  289. package/node_modules/fastify/test/types/request.tst.ts +199 -0
  290. package/node_modules/fastify/test/types/route.tst.ts +576 -0
  291. package/node_modules/fastify/test/types/{schema.test-d.ts → schema.tst.ts} +22 -22
  292. package/node_modules/fastify/test/types/{serverFactory.test-d.ts → serverFactory.tst.ts} +4 -4
  293. package/node_modules/fastify/test/types/tsconfig.json +9 -0
  294. package/node_modules/fastify/test/types/{type-provider.test-d.ts → type-provider.tst.ts} +256 -250
  295. package/node_modules/fastify/test/types/using.tst.ts +14 -0
  296. package/node_modules/fastify/types/errors.d.ts +3 -0
  297. package/node_modules/fastify/types/request.d.ts +23 -2
  298. package/node_modules/jishushell-panel/output/public/assets/{ApiKeyField-NKcbHjNz.js → ApiKeyField-Ce5d1xna.js} +1 -1
  299. package/node_modules/jishushell-panel/output/public/assets/{Dashboard-Da1fL38t.js → Dashboard-BXame3yg.js} +1 -1
  300. package/node_modules/jishushell-panel/output/public/assets/{HermesChatPanel-DZvmYsoh.js → HermesChatPanel-BHZtPCJd.js} +1 -1
  301. package/node_modules/jishushell-panel/output/public/assets/{HermesConfigForm-BLUWlKwm.js → HermesConfigForm-CB3GbNX9.js} +1 -1
  302. package/node_modules/jishushell-panel/output/public/assets/{InitPassword-BAKsshzk.js → InitPassword-Boab9F6g.js} +1 -1
  303. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-DrIWCqo-.js +14 -0
  304. package/node_modules/jishushell-panel/output/public/assets/{Login-DHeOmwI8.js → Login-CzpOkNau.js} +1 -1
  305. package/node_modules/jishushell-panel/output/public/assets/NewInstance-CANXyCcL.js +1 -0
  306. package/node_modules/jishushell-panel/output/public/assets/{ProviderRecommendations-H0ByEYF0.js → ProviderRecommendations-BABo9VOC.js} +1 -1
  307. package/node_modules/jishushell-panel/output/public/assets/Settings-CKp5XxFh.js +1 -0
  308. package/node_modules/jishushell-panel/output/public/assets/Setup-C7xVDPow.js +1 -0
  309. package/node_modules/jishushell-panel/output/public/assets/{WeixinLoginPanel-D-T6BxkQ.js → WeixinLoginPanel-B765Xz4C.js} +1 -1
  310. package/node_modules/jishushell-panel/output/public/assets/{index-ERt6_ngA.js → index-Bs6DSbiR.js} +6 -6
  311. package/node_modules/jishushell-panel/output/public/assets/{registry-DF93EzIb.js → registry-sWIZsIEF.js} +2 -2
  312. package/node_modules/jishushell-panel/output/public/assets/{usePolling-DeoThIQn.js → usePolling-D4IDOQd_.js} +1 -1
  313. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-Df8aUdv8.js +1 -0
  314. package/node_modules/jishushell-panel/output/public/assets/{vendor-react-Cc84NArf.js → vendor-react-0L0rjmYG.js} +3 -3
  315. package/node_modules/jishushell-panel/output/public/index.html +3 -3
  316. package/node_modules/jishushell-panel/package.json +1 -1
  317. package/node_modules/semver/classes/range.js +6 -2
  318. package/node_modules/semver/package.json +1 -1
  319. package/package.json +4 -4
  320. package/scripts/check-app-spec.mjs +4 -12
  321. package/scripts/check-architecture-boundaries.mjs +178 -0
  322. package/scripts/pack-gui-and-send-pi.sh +5 -3
  323. package/dependencies/jishushell-panel-0.6.18.tgz +0 -0
  324. package/dist/services/connections/suggestions.d.ts +0 -27
  325. package/dist/services/connections/suggestions.js +0 -124
  326. package/dist/services/connections/suggestions.js.map +0 -1
  327. package/node_modules/fastify/test/types/content-type-parser.test-d.ts +0 -72
  328. package/node_modules/fastify/test/types/errors.test-d.ts +0 -90
  329. package/node_modules/fastify/test/types/fastify.test-d.ts +0 -352
  330. package/node_modules/fastify/test/types/hooks.test-d.ts +0 -550
  331. package/node_modules/fastify/test/types/import.ts +0 -2
  332. package/node_modules/fastify/test/types/instance.test-d.ts +0 -588
  333. package/node_modules/fastify/test/types/plugin.test-d.ts +0 -97
  334. package/node_modules/fastify/test/types/register.test-d.ts +0 -237
  335. package/node_modules/fastify/test/types/reply.test-d.ts +0 -254
  336. package/node_modules/fastify/test/types/request.test-d.ts +0 -188
  337. package/node_modules/fastify/test/types/route.test-d.ts +0 -553
  338. package/node_modules/fastify/test/types/using.test-d.ts +0 -17
  339. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-Dgyc_TX5.js +0 -14
  340. package/node_modules/jishushell-panel/output/public/assets/NewInstance-CIy0cYtp.js +0 -1
  341. package/node_modules/jishushell-panel/output/public/assets/Settings-DAT-UMfP.js +0 -1
  342. package/node_modules/jishushell-panel/output/public/assets/Setup-g3uckFYR.js +0 -1
  343. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-CS8DFbkQ.js +0 -1
@@ -16,28 +16,39 @@ Request is a core Fastify object containing the following fields:
16
16
  [encapsulation context](./Encapsulation.md).
17
17
  - `id` - The request ID.
18
18
  - `log` - The logger instance of the incoming request.
19
- - `ip` - The IP address of the incoming request.
20
- - `ips` - An array of the IP addresses, ordered from closest to furthest, in the
21
- `X-Forwarded-For` header of the incoming request (only when the
22
- [`trustProxy`](./Server.md#factory-trust-proxy) option is enabled).
19
+ - `ip` - The IP address of the incoming request. This value is taken from
20
+ `socket.remoteAddress` (or from `X-Forwarded-For` when
21
+ [`trustProxy`](./Server.md#factory-trust-proxy) is enabled).
22
+ - `ips` - An array of IP addresses, ordered from closest to furthest, from
23
+ `X-Forwarded-For` (only when
24
+ [`trustProxy`](./Server.md#factory-trust-proxy) is enabled).
23
25
  - `host` - The host of the incoming request (derived from `X-Forwarded-Host`
24
- header when the [`trustProxy`](./Server.md#factory-trust-proxy) option is
25
- enabled). For HTTP/2 compatibility, it returns `:authority` if no host header
26
- exists. The host header may return an empty string if `requireHostHeader` is
27
- `false`, not provided with HTTP/1.0, or removed by schema validation.
28
- Security: this value comes from client-controlled headers; only trust it
29
- when you control proxy behavior and have validated or allow-listed hosts.
30
- No additional validation is performed beyond RFC parsing (see
31
- [RFC 9110, section 7.2](https://www.rfc-editor.org/rfc/rfc9110#section-7.2) and
32
- [RFC 3986, section 3.2.2](https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2)).
33
- - `hostname` - The hostname derived from the `host` property of the incoming request.
34
- - `port` - The port from the `host` property, which may refer to the port the
26
+ when [`trustProxy`](./Server.md#factory-trust-proxy) is enabled). For HTTP/2
27
+ compatibility, it returns `:authority` if no host header exists. The host
28
+ header may return an empty string if `requireHostHeader` is `false`, not
29
+ provided with HTTP/1.0, or removed by schema validation.
30
+ - `hostname` - The hostname parsed from `request.host`.
31
+ - `port` - The port parsed from `request.host`, which may refer to the port the
35
32
  server is listening on.
36
- - `protocol` - The protocol of the incoming request (`https` or `http`).
33
+ - `protocol` - The protocol of the incoming request (`https` or `http`). This
34
+ value comes from `socket.encrypted` (or `X-Forwarded-Proto` when
35
+ [`trustProxy`](./Server.md#factory-trust-proxy) is enabled).
36
+
37
+ > ⚠️ Security:
38
+ > `request.ip`, `request.ips`, `request.host`, `request.hostname`,
39
+ > `request.port`, and `request.protocol` come from request metadata
40
+ > (socket and/or forwarding headers) and should be treated as untrusted input.
41
+ > Fastify does not perform security validation for business logic.
42
+ > If these values are used in security-sensitive decisions, they must
43
+ > be validated explicitly (for example: trusted proxy configuration,
44
+ > allow-lists, strict parsing, and normalization).
45
+
37
46
  - `method` - The method of the incoming request.
38
47
  - `url` - The URL of the incoming request.
39
48
  - `originalUrl` - Similar to `url`, allows access to the original `url` in
40
49
  case of internal re-routing.
50
+ - `mediaType` - The media type extracted from `Content-Type` header. When `Content-Type`
51
+ header is missing, it will return `undefined`.
41
52
  - `is404` - `true` if request is being handled by 404 handler, `false` otherwise.
42
53
  - `socket` - The underlying connection of the incoming request.
43
54
  - `signal` - An `AbortSignal` that aborts when the handler timeout
@@ -102,7 +102,7 @@ fastify.route(options)
102
102
  schemas for request validations. See the [Validation and
103
103
  Serialization](./Validation-and-Serialization.md#schema-validator)
104
104
  documentation.
105
- * `serializerCompiler({ { schema, method, url, httpStatus, contentType } })`:
105
+ * `serializerCompiler({ schema, method, url, httpStatus, contentType })`:
106
106
  function that builds schemas for response serialization. See the [Validation and
107
107
  Serialization](./Validation-and-Serialization.md#schema-serializer)
108
108
  documentation.
@@ -513,6 +513,9 @@ See the `prefixTrailingSlash` route option above to change this behavior.
513
513
  Different log levels can be set for routes in Fastify by passing the `logLevel`
514
514
  option to the plugin or route with the desired
515
515
  [value](https://github.com/pinojs/pino/blob/main/docs/api.md#level-string).
516
+ If a route `logLevel` is invalid, Fastify throws
517
+ [`FST_ERR_ROUTE_LOG_LEVEL_INVALID`](./Errors.md#fst_err_route_log_level_invalid)
518
+ during route registration.
516
519
 
517
520
  Be aware that setting `logLevel` at the plugin level also affects
518
521
  [`setNotFoundHandler`](./Server.md#setnotfoundhandler) and
@@ -670,7 +673,7 @@ fastify.inject({
670
673
 
671
674
  > ⚠ Warning:
672
675
  > Set a
673
- > [`Vary`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary)
676
+ > [`Vary`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Vary)
674
677
  > header in responses with the value used for versioning
675
678
  > (e.g., `'Accept-Version'`) to prevent cache poisoning attacks.
676
679
  > This can also be configured in a Proxy/CDN.
@@ -48,6 +48,7 @@ describes the properties available in that options object.
48
48
  - [`ignoreTrailingSlash`](#ignoretrailingslash)
49
49
  - [`maxParamLength`](#maxparamlength)
50
50
  - [`onBadUrl`](#onbadurl)
51
+ - [`onMaxParamLength`](#onmaxparamlength)
51
52
  - [`querystringParser`](#querystringparser)
52
53
  - [`useSemicolonDelimiter`](#usesemicolondelimiter)
53
54
  - [Instance](#instance)
@@ -560,6 +561,12 @@ For more examples, refer to the
560
561
  You may access the `ip`, `ips`, `host` and `protocol` values on the
561
562
  [`request`](./Request.md) object.
562
563
 
564
+ > ⚠️ Security:
565
+ > These values are derived from socket/forwarding metadata and must be treated
566
+ > as untrusted input unless your proxy chain is explicitly trusted and
567
+ > validated. Do not use them directly for authorization or other
568
+ > security-sensitive decisions without explicit validation.
569
+
563
570
  ```js
564
571
  fastify.get('/', (request, reply) => {
565
572
  console.log(request.ip)
@@ -720,7 +727,7 @@ const fastify = require('fastify')({
720
727
  res.code(400)
721
728
  return res.send("Provided header is not valid")
722
729
  } else {
723
- res.send(err)
730
+ res.send(error)
724
731
  }
725
732
  }
726
733
  })
@@ -921,7 +928,7 @@ const fastify = require('fastify')({
921
928
  ```
922
929
 
923
930
  ### `defaultRoute`
924
- <a id="on-bad-url"></a>
931
+ <a id="default-route"></a>
925
932
 
926
933
  Fastify uses [find-my-way](https://github.com/delvedor/find-my-way) which supports,
927
934
  can pass a default route with the option defaultRoute.
@@ -1037,6 +1044,27 @@ const fastify = require('fastify')({
1037
1044
  As with `defaultRoute`, `req` and `res` are the raw Node.js request/response
1038
1045
  objects and do not provide Fastify's decorated helpers.
1039
1046
 
1047
+ ### `onMaxParamLength`
1048
+ <a id="on-max-param-length"></a>
1049
+
1050
+ Fastify uses [find-my-way](https://github.com/delvedor/find-my-way) which supports,
1051
+ the use case of a provide custom handler when `maxParamLength ` is exceed.
1052
+
1053
+ ```js
1054
+ const fastify = require('fastify')({
1055
+ routerOptions: {
1056
+ maxParamLength: 10,
1057
+ onMaxParamLength: (path, req, res) => {
1058
+ res.statusCode = 414
1059
+ res.end(`Bad path: ${path}`)
1060
+ }
1061
+ }
1062
+ })
1063
+ ```
1064
+
1065
+ As with `defaultRoute`, `req` and `res` are the raw Node.js request/response
1066
+ objects and do not provide Fastify's decorated helpers.
1067
+
1040
1068
  ### `querystringParser`
1041
1069
  <a id="querystringparser"></a>
1042
1070
 
@@ -2249,7 +2277,7 @@ fastify.get('/', {
2249
2277
  return
2250
2278
  }
2251
2279
 
2252
- fastify.errorHandler(error, request, response)
2280
+ fastify.errorHandler(error, request, reply)
2253
2281
  }
2254
2282
  }, handler)
2255
2283
  ```
@@ -23,8 +23,7 @@ See also the Type Provider wrapper packages for each of the packages respectivel
23
23
 
24
24
  - [`@fastify/type-provider-json-schema-to-ts`](https://github.com/fastify/fastify-type-provider-json-schema-to-ts)
25
25
  - [`@fastify/type-provider-typebox`](https://github.com/fastify/fastify-type-provider-typebox)
26
- - [`fastify-type-provider-zod`](https://github.com/turkerdev/fastify-type-provider-zod)
27
- (3rd party)
26
+ - [`@fastify/type-provider-zod`](https://github.com/fastify/fastify-type-provider-zod)
28
27
 
29
28
  ### Json Schema to Ts
30
29
 
@@ -88,14 +87,39 @@ server.get('/route', {
88
87
  ```
89
88
 
90
89
  See the [TypeBox
91
- documentation](https://sinclairzx81.github.io/typebox/#/docs/overview/2_setup)
90
+ documentation](https://sinclairzx81.github.io/typebox/)
92
91
  for setting-up AJV to work with TypeBox.
93
92
 
94
93
  ### Zod
95
94
 
96
- See [official documentation](https://github.com/turkerdev/fastify-type-provider-zod)
97
- for Zod Type Provider instructions.
95
+ The following sets up a Zod Type Provider:
98
96
 
97
+ ```bash
98
+ $ npm i zod @fastify/type-provider-zod
99
+ ```
100
+
101
+ ```typescript
102
+ import fastify from 'fastify'
103
+ import { ZodTypeProvider, serializerCompiler, validatorCompiler } from '@fastify/type-provider-zod'
104
+ import { z } from 'zod/v4'
105
+
106
+ const server = fastify()
107
+ server.setValidatorCompiler(validatorCompiler)
108
+ server.setSerializerCompiler(serializerCompiler)
109
+
110
+ server.withTypeProvider<ZodTypeProvider>().get('/route', {
111
+ schema: {
112
+ querystring: z.object({
113
+ foo: z.number(),
114
+ bar: z.string()
115
+ })
116
+ }
117
+ }, (request, reply) => {
118
+
119
+ // type Query = { foo: number, bar: string }
120
+ const { foo, bar } = request.query // type safe!
121
+ })
122
+ ```
99
123
 
100
124
  ### Scoped Type-Provider
101
125
 
@@ -300,6 +300,12 @@ Note that Ajv will try to [coerce](https://ajv.js.org/coercion.html) values to
300
300
  the types specified in the schema `type` keywords, both to pass validation and
301
301
  to use the correctly typed data afterwards.
302
302
 
303
+ > ⚠ Important:
304
+ > Fastify uses a custom [AJV configuration][1] such as `coerceTypes: 'array'`.
305
+ > Evaluate its behavior and verify if it meets the project requirements.
306
+
307
+ [1]: https://github.com/fastify/ajv-compiler?tab=readme-ov-file#ajv-configuration
308
+
303
309
  The Ajv default configuration in Fastify supports coercing array parameters in
304
310
  `querystring`. Example:
305
311
 
@@ -583,6 +589,11 @@ fastify.post('/the/url', {
583
589
  }, handler)
584
590
  ```
585
591
 
592
+ Fastify supports different JSON Schema validators via
593
+ `setValidatorCompiler`. Community plugins that integrate alternative JSON
594
+ Schema validators are listed on the
595
+ [Ecosystem](https://fastify.dev/docs/latest/Guides/Ecosystem/) page.
596
+
586
597
  ##### Custom Validator Best Practices
587
598
 
588
599
  When implementing custom validators, follow these patterns to ensure compatibility
@@ -920,8 +931,10 @@ For custom error responses in the schema, see
920
931
  [example](https://github.com/fastify/example/blob/HEAD/validation-messages/custom-errors-messages.js)
921
932
  usage.
922
933
 
923
- > Install version 1.0.1 of `ajv-errors`, as later versions are not compatible
924
- > with AJV v6 (the version shipped by Fastify v3).
934
+ > Fastify v5 uses AJV v8 and requires a compatible `ajv-errors` version.
935
+ > Fastify v3 requires `ajv-errors@1.0.1`, which supports AJV v6.
936
+ > See the [AJV compiler versions table](https://github.com/fastify/ajv-compiler/#versions)
937
+ > for the AJV version used by each Fastify release.
925
938
 
926
939
  Below is an example showing how to add **custom error messages for each
927
940
  property** of a schema by supplying custom AJV options. Inline comments in the
@@ -6,7 +6,8 @@
6
6
  - [Warnings In Fastify](#warnings-in-fastify)
7
7
  - [Fastify Warning Codes](#fastify-warning-codes)
8
8
  - [FSTWRN001](#FSTWRN001)
9
- - [FSTWRN002](#FSTWRN002)
9
+ - [FSTWRN003](#FSTWRN003)
10
+ - [FSTWRN004](#FSTWRN004)
10
11
  - [Fastify Deprecation Codes](#fastify-deprecation-codes)
11
12
  - [FSTDEP022](#FSTDEP022)
12
13
 
@@ -14,7 +15,7 @@
14
15
 
15
16
  ### Warnings In Fastify
16
17
 
17
- Fastify uses Node.js's [warning event](https://nodejs.org/api/process.html#event-warning)
18
+ Fastify uses the Node.js [warning event](https://nodejs.org/api/process.html#event-warning)
18
19
  API to notify users of deprecated features and coding mistakes. Fastify's
19
20
  warnings are recognizable by the `FSTWRN` and `FSTDEP` prefixes. When
20
21
  encountering such a warning, it is highly recommended to determine the cause
@@ -22,7 +23,7 @@ using the [`--trace-warnings`](https://nodejs.org/api/cli.html#trace-warnings)
22
23
  and [`--trace-deprecation`](https://nodejs.org/api/cli.html#trace-deprecation)
23
24
  flags. These produce stack traces pointing to where the issue occurs in the
24
25
  application's code. Issues opened about warnings without this information will
25
- be closed due to lack of details.
26
+ be closed.
26
27
 
27
28
  Warnings can also be disabled, though it is not recommended. If necessary, use
28
29
  one of the following methods:
@@ -33,15 +34,15 @@ one of the following methods:
33
34
 
34
35
  For more information on disabling warnings, see [Node's documentation](https://nodejs.org/api/cli.html).
35
36
 
36
- Disabling warnings may cause issues when upgrading Fastify versions. Only
37
- experienced users should consider disabling warnings.
37
+ Disabling warnings is not recommended and may cause unexpected behavior.
38
38
 
39
39
  ### Fastify Warning Codes
40
40
 
41
41
  | Code | Description | How to solve | Discussion |
42
42
  | ---- | ----------- | ------------ | ---------- |
43
43
  | <a id="FSTWRN001">FSTWRN001</a> | The specified schema for a route is missing. This may indicate the schema is not well specified. | Check the schema for the route. | [#4647](https://github.com/fastify/fastify/pull/4647) |
44
- | <a id="FSTWRN002">FSTWRN002</a> | The %s plugin being registered mixes async and callback styles, which will result in an error in `fastify@5`. | Do not mix async and callback style. | [#5139](https://github.com/fastify/fastify/pull/5139) |
44
+ | <a id="FSTWRN003">FSTWRN003</a> | The `%s` plugin mixes async and callback styles, which may lead to unhandled rejections. | Do not mix async and callback style. | [#6011](https://github.com/fastify/fastify/pull/6011) |
45
+ | <a id="FSTWRN004">FSTWRN004</a> | An `errorHandler` is being overridden in the same scope, which can lead to subtle bugs. | Avoid calling `setErrorHandler` more than once in the same scope. For more information, see [Server documentation](https://fastify.dev/docs/latest/Reference/Server/#allowerrorhandleroverride). | [#6104](https://github.com/fastify/fastify/pull/6104) |
45
46
 
46
47
 
47
48
  ### Fastify Deprecation Codes
@@ -6,8 +6,7 @@ module.exports = [
6
6
  ignores: [
7
7
  'lib/config-validator.js',
8
8
  'lib/error-serializer.js',
9
- 'test/same-shape.test.js',
10
- 'test/types/import.js'
9
+ 'test/same-shape.test.js'
11
10
  ],
12
11
  ts: true
13
12
  }),
@@ -31,5 +30,11 @@ module.exports = [
31
30
  rules: {
32
31
  'max-len': 'off'
33
32
  }
33
+ },
34
+ {
35
+ files: ['test/types/**/*'],
36
+ rules: {
37
+ '@typescript-eslint/no-unused-vars': 'off'
38
+ }
34
39
  }
35
40
  ]
@@ -6,7 +6,7 @@ import { Socket } from 'node:net'
6
6
  import { BuildCompilerFromPool, ValidatorFactory } from '@fastify/ajv-compiler'
7
7
  import { FastifyError } from '@fastify/error'
8
8
  import { Options as FJSOptions, SerializerFactory } from '@fastify/fast-json-stringify-compiler'
9
- import { Config as FindMyWayConfig, ConstraintStrategy, HTTPVersion } from 'find-my-way'
9
+ import { ConstraintStrategy, Config as FindMyWayConfig, HTTPVersion } from 'find-my-way'
10
10
  import { InjectOptions, CallbackFunc as LightMyRequestCallback, Chain as LightMyRequestChain, Response as LightMyRequestResponse } from 'light-my-request'
11
11
 
12
12
  import { AddContentTypeParser, ConstructorAction, FastifyBodyParser, FastifyContentTypeParser, getDefaultJsonParser, hasContentTypeParser, ProtoAction } from './types/content-type-parser'
@@ -28,7 +28,7 @@ import { FastifyRegister, FastifyRegisterOptions, RegisterOptions } from './type
28
28
  import { FastifyReply } from './types/reply'
29
29
  import { FastifyRequest, RequestGenericInterface } from './types/request'
30
30
  import { RouteGenericInterface, RouteHandler, RouteHandlerMethod, RouteOptions, RouteShorthandMethod, RouteShorthandOptions, RouteShorthandOptionsWithHandler } from './types/route'
31
- import { FastifySchema, FastifySchemaValidationError, FastifySchemaCompiler, FastifySerializerCompiler, SchemaErrorDataVar, SchemaErrorFormatter } from './types/schema'
31
+ import { FastifySchema, FastifySchemaCompiler, FastifySchemaValidationError, FastifySerializerCompiler, SchemaErrorDataVar, SchemaErrorFormatter } from './types/schema'
32
32
  import { FastifyServerFactory, FastifyServerFactoryHandler } from './types/server-factory'
33
33
  import { FastifyTypeProvider, FastifyTypeProviderDefault, SafePromiseLike } from './types/type-provider'
34
34
  import { ContextConfigDefault, HTTPMethods, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault, RequestBodyDefault, RequestHeadersDefault, RequestParamsDefault, RequestQuerystringDefault } from './types/utils'
@@ -90,7 +90,7 @@ declare namespace fastify {
90
90
 
91
91
  type TrustProxyFunction = (address: string, hop: number) => boolean
92
92
 
93
- export type FastifyRouterOptions<RawServer extends RawServerBase> = Omit<FindMyWayConfigForServer<RawServer>, 'defaultRoute' | 'onBadUrl' | 'querystringParser'> & {
93
+ export type FastifyRouterOptions<RawServer extends RawServerBase> = Omit<FindMyWayConfigForServer<RawServer>, 'defaultRoute' | 'onBadUrl' | 'onMaxParamLength' | 'querystringParser'> & {
94
94
  defaultRoute?: (
95
95
  req: RawRequestDefaultExpression<RawServer>,
96
96
  res: RawReplyDefaultExpression<RawServer>
@@ -100,6 +100,11 @@ declare namespace fastify {
100
100
  req: RawRequestDefaultExpression<RawServer>,
101
101
  res: RawReplyDefaultExpression<RawServer>
102
102
  ) => void,
103
+ onMaxParamLength?: (
104
+ path: string,
105
+ req: RawRequestDefaultExpression<RawServer>,
106
+ res: RawReplyDefaultExpression<RawServer>
107
+ ) => void,
103
108
  querystringParser?: (str: string) => { [key: string]: unknown }
104
109
  }
105
110
 
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const VERSION = '5.8.5'
3
+ const VERSION = '5.9.0'
4
4
 
5
5
  const Avvio = require('avvio')
6
6
  const http = require('node:http')
@@ -63,6 +63,7 @@ const { defaultInitOptions } = getSecuredInitialConfig
63
63
  const {
64
64
  FST_ERR_ASYNC_CONSTRAINT,
65
65
  FST_ERR_BAD_URL,
66
+ FST_ERR_MAX_PARAM_LENGTH,
66
67
  FST_ERR_OPTIONS_NOT_OBJ,
67
68
  FST_ERR_QSP_NOT_FN,
68
69
  FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN,
@@ -92,7 +93,7 @@ function fastify (serverOptions) {
92
93
  disableRequestLogging,
93
94
  hasLogger,
94
95
  initialConfig
95
- } = processOptions(serverOptions, defaultRoute, onBadUrl)
96
+ } = processOptions(serverOptions, defaultRoute, onBadUrl, onMaxParamLength)
96
97
 
97
98
  // Default router
98
99
  const router = buildRouting(options.routerOptions)
@@ -381,8 +382,7 @@ function fastify (serverOptions) {
381
382
  hookRunnerApplication('preClose', fastify[kAvvioBoot], fastify, function () {
382
383
  if (fastify[kState].listening) {
383
384
  /* istanbul ignore next: Cannot test this without Node.js core support */
384
- if (forceCloseConnections === 'idle') {
385
- // Not needed in Node 19
385
+ if (forceCloseConnections === 'idle' && options.serverFactory) {
386
386
  instance.server.closeIdleConnections()
387
387
  /* istanbul ignore next: Cannot test this without Node.js core support */
388
388
  } else if (serverHasCloseAllConnections && forceCloseConnections) {
@@ -423,8 +423,8 @@ function fastify (serverOptions) {
423
423
  })
424
424
  })
425
425
 
426
- // Create bad URL context
427
- const onBadUrlContext = new Context({
426
+ // Create route event (bad URL, max param length, etc) context
427
+ const routeEventContext = new Context({
428
428
  server: fastify,
429
429
  config: {}
430
430
  })
@@ -637,10 +637,10 @@ function fastify (serverOptions) {
637
637
 
638
638
  function onBadUrl (path, req, res) {
639
639
  if (options.frameworkErrors) {
640
- const id = getGenReqId(onBadUrlContext.server, req)
641
- const childLogger = createChildLogger(onBadUrlContext, options.logger, req, id)
640
+ const id = getGenReqId(routeEventContext.server, req)
641
+ const childLogger = createChildLogger(routeEventContext, options.logger, req, id)
642
642
 
643
- const request = new Request(id, null, req, null, childLogger, onBadUrlContext)
643
+ const request = new Request(id, null, req, null, childLogger, routeEventContext)
644
644
  const reply = new Reply(res, request, childLogger)
645
645
 
646
646
  const resolvedDisableRequestLogging = typeof disableRequestLogging === 'function' ? disableRequestLogging(req) : disableRequestLogging
@@ -663,15 +663,43 @@ function fastify (serverOptions) {
663
663
  res.end(body)
664
664
  }
665
665
 
666
+ function onMaxParamLength (path, req, res) {
667
+ if (options.frameworkErrors) {
668
+ const id = getGenReqId(routeEventContext.server, req)
669
+ const childLogger = createChildLogger(routeEventContext, options.logger, req, id)
670
+
671
+ const request = new Request(id, null, req, null, childLogger, routeEventContext)
672
+ const reply = new Reply(res, request, childLogger)
673
+
674
+ const resolvedDisableRequestLogging = typeof disableRequestLogging === 'function' ? disableRequestLogging(req) : disableRequestLogging
675
+ if (resolvedDisableRequestLogging === false) {
676
+ childLogger.info({ req: request }, 'incoming request')
677
+ }
678
+
679
+ return options.frameworkErrors(new FST_ERR_MAX_PARAM_LENGTH(path), request, reply)
680
+ }
681
+ const body = JSON.stringify({
682
+ error: 'Bad Request',
683
+ code: 'FST_ERR_MAX_PARAM_LENGTH',
684
+ message: `'${path}' is exceeding the max param length`,
685
+ statusCode: 414
686
+ })
687
+ res.writeHead(414, {
688
+ 'Content-Type': 'application/json',
689
+ 'Content-Length': Buffer.byteLength(body)
690
+ })
691
+ res.end(body)
692
+ }
693
+
666
694
  function buildAsyncConstraintCallback (isAsync, req, res) {
667
695
  if (isAsync === false) return undefined
668
696
  return function onAsyncConstraintError (err) {
669
697
  if (err) {
670
698
  if (options.frameworkErrors) {
671
- const id = getGenReqId(onBadUrlContext.server, req)
672
- const childLogger = createChildLogger(onBadUrlContext, options.logger, req, id)
699
+ const id = getGenReqId(routeEventContext.server, req)
700
+ const childLogger = createChildLogger(routeEventContext, options.logger, req, id)
673
701
 
674
- const request = new Request(id, null, req, null, childLogger, onBadUrlContext)
702
+ const request = new Request(id, null, req, null, childLogger, routeEventContext)
675
703
  const reply = new Reply(res, request, childLogger)
676
704
 
677
705
  const resolvedDisableRequestLogging = typeof disableRequestLogging === 'function' ? disableRequestLogging(req) : disableRequestLogging
@@ -748,7 +776,7 @@ function fastify (serverOptions) {
748
776
  if (!options.allowErrorHandlerOverride && this[kErrorHandlerAlreadySet]) {
749
777
  throw new FST_ERR_ERROR_HANDLER_ALREADY_SET()
750
778
  } else if (this[kErrorHandlerAlreadySet]) {
751
- FSTWRN004("To disable this behavior, set 'allowErrorHandlerOverride' to false or ignore this message. For more information, visit: https://fastify.dev/docs/latest/Reference/Server/#allowerrorhandleroverride")
779
+ FSTWRN004()
752
780
  }
753
781
 
754
782
  this[kErrorHandlerAlreadySet] = true
@@ -821,7 +849,7 @@ function fastify (serverOptions) {
821
849
  }
822
850
  }
823
851
 
824
- function processOptions (options, defaultRoute, onBadUrl) {
852
+ function processOptions (options, defaultRoute, onBadUrl, onMaxParamLength) {
825
853
  // Options validations
826
854
  if (options && typeof options !== 'object') {
827
855
  throw new FST_ERR_OPTIONS_NOT_OBJ()
@@ -890,6 +918,7 @@ function processOptions (options, defaultRoute, onBadUrl) {
890
918
  options.routerOptions = buildRouterOptions(options, {
891
919
  defaultRoute,
892
920
  onBadUrl,
921
+ onMaxParamLength,
893
922
  ignoreTrailingSlash: defaultInitOptions.ignoreTrailingSlash,
894
923
  ignoreDuplicateSlashes: defaultInitOptions.ignoreDuplicateSlashes,
895
924
  maxParamLength: defaultInitOptions.maxParamLength,
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const { AsyncResource } = require('node:async_hooks')
4
- const { FifoMap: Fifo } = require('toad-cache')
4
+ const { FifoMap: Fifo, LruMap: Lru } = require('toad-cache')
5
5
  const { parse: secureJsonParse } = require('secure-json-parse')
6
6
  const ContentType = require('./content-type')
7
7
  const {
@@ -39,6 +39,15 @@ function ContentTypeParser (bodyLimit, onProtoPoisoning, onConstructorPoisoning)
39
39
  this.parserList = ['application/json', 'text/plain']
40
40
  this.parserRegExpList = []
41
41
  this.cache = new Fifo(100)
42
+ this.ctCache = new Lru(100)
43
+ }
44
+
45
+ ContentTypeParser.prototype.getContentType = function (raw) {
46
+ let ct = this.ctCache.get(raw)
47
+ if (ct !== undefined) return ct
48
+ ct = new ContentType(raw)
49
+ this.ctCache.set(raw, ct)
50
+ return ct
42
51
  }
43
52
 
44
53
  ContentTypeParser.prototype.add = function (contentType, opts, parserFn) {
@@ -118,6 +127,8 @@ ContentTypeParser.prototype.existingParser = function (contentType) {
118
127
 
119
128
  ContentTypeParser.prototype.getParser = function (contentType) {
120
129
  if (typeof contentType === 'string') {
130
+ const cached = this.cache.get(contentType)
131
+ if (cached !== undefined) return cached
121
132
  contentType = new ContentType(contentType)
122
133
  }
123
134
  const ct = contentType.toString()
@@ -158,6 +169,7 @@ ContentTypeParser.prototype.removeAll = function () {
158
169
  this.parserRegExpList = []
159
170
  this.parserList = []
160
171
  this.cache = new Fifo(100)
172
+ this.ctCache = new Lru(100)
161
173
  }
162
174
 
163
175
  ContentTypeParser.prototype.remove = function (contentType) {
@@ -47,7 +47,7 @@ function getInstanceDecorator (name) {
47
47
 
48
48
  function decorateConstructor (konstructor, name, fn, dependencies) {
49
49
  const instance = konstructor.prototype
50
- if (Object.hasOwn(instance, name) || hasKey(konstructor, name)) {
50
+ if (Object.hasOwn(instance, name) || hasKey(konstructor, name) || hasInstanceProperty(konstructor, name)) {
51
51
  throw new FST_ERR_DEC_ALREADY_PRESENT(name)
52
52
  }
53
53
 
@@ -87,19 +87,27 @@ function checkExistence (instance, name) {
87
87
  }
88
88
 
89
89
  function hasKey (fn, name) {
90
- if (fn.props) {
91
- return fn.props.find(({ key }) => key === name)
90
+ return fn.props ? fn.props.some(p => p.key === name) : false
91
+ }
92
+
93
+ function hasInstanceProperty (konstructor, name) {
94
+ let k = konstructor
95
+ while (k) {
96
+ if (k.instanceProperties && k.instanceProperties.has(name)) return true
97
+ k = k.parent
92
98
  }
93
99
  return false
94
100
  }
95
101
 
96
102
  function checkRequestExistence (name) {
97
103
  if (name && hasKey(this[kRequest], name)) return true
104
+ if (name && hasInstanceProperty(this[kRequest], name)) return true
98
105
  return checkExistence(this[kRequest].prototype, name)
99
106
  }
100
107
 
101
108
  function checkReplyExistence (name) {
102
109
  if (name && hasKey(this[kReply], name)) return true
110
+ if (name && hasInstanceProperty(this[kReply], name)) return true
103
111
  return checkExistence(this[kReply].prototype, name)
104
112
  }
105
113
 
@@ -8,7 +8,8 @@ const {
8
8
  kReplyNextErrorHandler,
9
9
  kReplyIsRunningOnErrorHook,
10
10
  kRouteContext,
11
- kDisableRequestLogging
11
+ kDisableRequestLogging,
12
+ kDiagnosticsStore
12
13
  } = require('./symbols.js')
13
14
 
14
15
  const {
@@ -19,7 +20,6 @@ const {
19
20
  const { getSchemaSerializer } = require('./schemas')
20
21
 
21
22
  const serializeError = require('./error-serializer')
22
-
23
23
  const rootErrorHandler = {
24
24
  func: defaultErrorHandler,
25
25
  toJSON () {
@@ -69,7 +69,8 @@ function handleError (reply, error, cb) {
69
69
  const result = func(error, reply.request, reply)
70
70
  if (result !== undefined) {
71
71
  if (result !== null && typeof result.then === 'function') {
72
- wrapThenable(result, reply)
72
+ const store = reply[kDiagnosticsStore] || null
73
+ wrapThenable(result, reply, store)
73
74
  } else {
74
75
  reply.send(result)
75
76
  }