node-fastify 5.8.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 (354) hide show
  1. package/.borp.yaml +3 -0
  2. package/.markdownlint-cli2.yaml +22 -0
  3. package/.prettierignore +1 -0
  4. package/GOVERNANCE.md +4 -0
  5. package/LICENSE +21 -0
  6. package/PROJECT_CHARTER.md +126 -0
  7. package/README.md +423 -0
  8. package/SECURITY.md +220 -0
  9. package/SPONSORS.md +24 -0
  10. package/build/build-error-serializer.js +35 -0
  11. package/build/build-validation.js +169 -0
  12. package/build/sync-version.js +11 -0
  13. package/docs/Guides/Benchmarking.md +60 -0
  14. package/docs/Guides/Database.md +321 -0
  15. package/docs/Guides/Delay-Accepting-Requests.md +608 -0
  16. package/docs/Guides/Detecting-When-Clients-Abort.md +172 -0
  17. package/docs/Guides/Ecosystem.md +726 -0
  18. package/docs/Guides/Fluent-Schema.md +127 -0
  19. package/docs/Guides/Getting-Started.md +620 -0
  20. package/docs/Guides/Index.md +43 -0
  21. package/docs/Guides/Migration-Guide-V3.md +287 -0
  22. package/docs/Guides/Migration-Guide-V4.md +267 -0
  23. package/docs/Guides/Migration-Guide-V5.md +727 -0
  24. package/docs/Guides/Plugins-Guide.md +520 -0
  25. package/docs/Guides/Prototype-Poisoning.md +383 -0
  26. package/docs/Guides/Recommendations.md +378 -0
  27. package/docs/Guides/Serverless.md +604 -0
  28. package/docs/Guides/Style-Guide.md +246 -0
  29. package/docs/Guides/Testing.md +481 -0
  30. package/docs/Guides/Write-Plugin.md +103 -0
  31. package/docs/Guides/Write-Type-Provider.md +34 -0
  32. package/docs/Reference/ContentTypeParser.md +271 -0
  33. package/docs/Reference/Decorators.md +436 -0
  34. package/docs/Reference/Encapsulation.md +194 -0
  35. package/docs/Reference/Errors.md +377 -0
  36. package/docs/Reference/HTTP2.md +94 -0
  37. package/docs/Reference/Hooks.md +958 -0
  38. package/docs/Reference/Index.md +73 -0
  39. package/docs/Reference/LTS.md +86 -0
  40. package/docs/Reference/Lifecycle.md +99 -0
  41. package/docs/Reference/Logging.md +268 -0
  42. package/docs/Reference/Middleware.md +79 -0
  43. package/docs/Reference/Plugins.md +245 -0
  44. package/docs/Reference/Principles.md +73 -0
  45. package/docs/Reference/Reply.md +1001 -0
  46. package/docs/Reference/Request.md +295 -0
  47. package/docs/Reference/Routes.md +802 -0
  48. package/docs/Reference/Server.md +2389 -0
  49. package/docs/Reference/Type-Providers.md +256 -0
  50. package/docs/Reference/TypeScript.md +1729 -0
  51. package/docs/Reference/Validation-and-Serialization.md +1130 -0
  52. package/docs/Reference/Warnings.md +58 -0
  53. package/docs/index.md +24 -0
  54. package/docs/resources/encapsulation_context.drawio +1 -0
  55. package/docs/resources/encapsulation_context.svg +3 -0
  56. package/eslint.config.js +35 -0
  57. package/examples/asyncawait.js +38 -0
  58. package/examples/benchmark/body.json +3 -0
  59. package/examples/benchmark/hooks-benchmark-async-await.js +44 -0
  60. package/examples/benchmark/hooks-benchmark.js +52 -0
  61. package/examples/benchmark/parser.js +47 -0
  62. package/examples/benchmark/simple.js +30 -0
  63. package/examples/benchmark/webstream.js +27 -0
  64. package/examples/hooks.js +91 -0
  65. package/examples/http2.js +39 -0
  66. package/examples/https.js +38 -0
  67. package/examples/parser.js +53 -0
  68. package/examples/plugin.js +12 -0
  69. package/examples/route-prefix.js +38 -0
  70. package/examples/shared-schema.js +38 -0
  71. package/examples/simple-stream.js +20 -0
  72. package/examples/simple.js +32 -0
  73. package/examples/simple.mjs +27 -0
  74. package/examples/typescript-server.ts +79 -0
  75. package/examples/use-plugin.js +29 -0
  76. package/fastify.d.ts +253 -0
  77. package/fastify.js +985 -0
  78. package/integration/server.js +29 -0
  79. package/integration/test.sh +23 -0
  80. package/lib/config-validator.js +1266 -0
  81. package/lib/content-type-parser.js +413 -0
  82. package/lib/content-type.js +160 -0
  83. package/lib/context.js +98 -0
  84. package/lib/decorate.js +152 -0
  85. package/lib/error-handler.js +173 -0
  86. package/lib/error-serializer.js +134 -0
  87. package/lib/error-status.js +14 -0
  88. package/lib/errors.js +516 -0
  89. package/lib/four-oh-four.js +190 -0
  90. package/lib/handle-request.js +195 -0
  91. package/lib/head-route.js +45 -0
  92. package/lib/hooks.js +429 -0
  93. package/lib/initial-config-validation.js +37 -0
  94. package/lib/logger-factory.js +136 -0
  95. package/lib/logger-pino.js +68 -0
  96. package/lib/noop-set.js +10 -0
  97. package/lib/plugin-override.js +90 -0
  98. package/lib/plugin-utils.js +169 -0
  99. package/lib/promise.js +23 -0
  100. package/lib/reply.js +1030 -0
  101. package/lib/req-id-gen-factory.js +52 -0
  102. package/lib/request.js +391 -0
  103. package/lib/route.js +686 -0
  104. package/lib/schema-controller.js +164 -0
  105. package/lib/schemas.js +207 -0
  106. package/lib/server.js +441 -0
  107. package/lib/symbols.js +71 -0
  108. package/lib/validation.js +280 -0
  109. package/lib/warnings.js +57 -0
  110. package/lib/wrap-thenable.js +84 -0
  111. package/package.json +225 -0
  112. package/scripts/validate-ecosystem-links.js +179 -0
  113. package/test/404s.test.js +2035 -0
  114. package/test/500s.test.js +422 -0
  115. package/test/allow-unsafe-regex.test.js +92 -0
  116. package/test/als.test.js +65 -0
  117. package/test/async-await.test.js +705 -0
  118. package/test/async-dispose.test.js +20 -0
  119. package/test/async_hooks.test.js +52 -0
  120. package/test/body-limit.test.js +224 -0
  121. package/test/buffer.test.js +74 -0
  122. package/test/build/error-serializer.test.js +36 -0
  123. package/test/build/version.test.js +14 -0
  124. package/test/build-certificate.js +109 -0
  125. package/test/bundler/README.md +29 -0
  126. package/test/bundler/esbuild/bundler-test.js +32 -0
  127. package/test/bundler/esbuild/package.json +10 -0
  128. package/test/bundler/esbuild/src/fail-plugin-version.js +14 -0
  129. package/test/bundler/esbuild/src/index.js +9 -0
  130. package/test/bundler/webpack/bundler-test.js +32 -0
  131. package/test/bundler/webpack/package.json +11 -0
  132. package/test/bundler/webpack/src/fail-plugin-version.js +14 -0
  133. package/test/bundler/webpack/src/index.js +9 -0
  134. package/test/bundler/webpack/webpack.config.js +15 -0
  135. package/test/case-insensitive.test.js +102 -0
  136. package/test/chainable.test.js +40 -0
  137. package/test/child-logger-factory.test.js +128 -0
  138. package/test/client-timeout.test.js +38 -0
  139. package/test/close-pipelining.test.js +78 -0
  140. package/test/close.test.js +706 -0
  141. package/test/conditional-pino.test.js +47 -0
  142. package/test/connection-timeout.test.js +42 -0
  143. package/test/constrained-routes.test.js +1138 -0
  144. package/test/content-length.test.js +174 -0
  145. package/test/content-parser.test.js +739 -0
  146. package/test/content-type.test.js +181 -0
  147. package/test/context-config.test.js +164 -0
  148. package/test/custom-http-server.test.js +118 -0
  149. package/test/custom-parser-async.test.js +59 -0
  150. package/test/custom-parser.0.test.js +701 -0
  151. package/test/custom-parser.1.test.js +266 -0
  152. package/test/custom-parser.2.test.js +91 -0
  153. package/test/custom-parser.3.test.js +208 -0
  154. package/test/custom-parser.4.test.js +218 -0
  155. package/test/custom-parser.5.test.js +130 -0
  156. package/test/custom-querystring-parser.test.js +129 -0
  157. package/test/decorator.test.js +1330 -0
  158. package/test/delete.test.js +344 -0
  159. package/test/diagnostics-channel/404.test.js +49 -0
  160. package/test/diagnostics-channel/async-delay-request.test.js +65 -0
  161. package/test/diagnostics-channel/async-request.test.js +64 -0
  162. package/test/diagnostics-channel/error-before-handler.test.js +35 -0
  163. package/test/diagnostics-channel/error-request.test.js +53 -0
  164. package/test/diagnostics-channel/error-status.test.js +123 -0
  165. package/test/diagnostics-channel/init.test.js +50 -0
  166. package/test/diagnostics-channel/sync-delay-request.test.js +49 -0
  167. package/test/diagnostics-channel/sync-request-reply.test.js +51 -0
  168. package/test/diagnostics-channel/sync-request.test.js +54 -0
  169. package/test/encapsulated-child-logger-factory.test.js +69 -0
  170. package/test/encapsulated-error-handler.test.js +237 -0
  171. package/test/esm/errorCodes.test.mjs +10 -0
  172. package/test/esm/esm.test.mjs +13 -0
  173. package/test/esm/index.test.js +8 -0
  174. package/test/esm/named-exports.mjs +14 -0
  175. package/test/esm/other.mjs +8 -0
  176. package/test/esm/plugin.mjs +8 -0
  177. package/test/fastify-instance.test.js +300 -0
  178. package/test/find-route.test.js +152 -0
  179. package/test/fluent-schema.test.js +209 -0
  180. package/test/genReqId.test.js +426 -0
  181. package/test/handler-context.test.js +45 -0
  182. package/test/handler-timeout.test.js +367 -0
  183. package/test/has-route.test.js +88 -0
  184. package/test/header-overflow.test.js +55 -0
  185. package/test/helper.js +496 -0
  186. package/test/hooks-async.test.js +1099 -0
  187. package/test/hooks.on-listen.test.js +1162 -0
  188. package/test/hooks.on-ready.test.js +421 -0
  189. package/test/hooks.test.js +3578 -0
  190. package/test/http-methods/copy.test.js +35 -0
  191. package/test/http-methods/custom-http-methods.test.js +114 -0
  192. package/test/http-methods/get.test.js +412 -0
  193. package/test/http-methods/head.test.js +263 -0
  194. package/test/http-methods/lock.test.js +108 -0
  195. package/test/http-methods/mkcalendar.test.js +143 -0
  196. package/test/http-methods/mkcol.test.js +35 -0
  197. package/test/http-methods/move.test.js +42 -0
  198. package/test/http-methods/propfind.test.js +136 -0
  199. package/test/http-methods/proppatch.test.js +105 -0
  200. package/test/http-methods/report.test.js +142 -0
  201. package/test/http-methods/search.test.js +233 -0
  202. package/test/http-methods/trace.test.js +21 -0
  203. package/test/http-methods/unlock.test.js +38 -0
  204. package/test/http2/closing.test.js +270 -0
  205. package/test/http2/constraint.test.js +109 -0
  206. package/test/http2/head.test.js +34 -0
  207. package/test/http2/plain.test.js +68 -0
  208. package/test/http2/secure-with-fallback.test.js +113 -0
  209. package/test/http2/secure.test.js +67 -0
  210. package/test/http2/unknown-http-method.test.js +34 -0
  211. package/test/https/custom-https-server.test.js +58 -0
  212. package/test/https/https.test.js +136 -0
  213. package/test/imports.test.js +17 -0
  214. package/test/inject.test.js +502 -0
  215. package/test/input-validation.js +335 -0
  216. package/test/internals/all.test.js +38 -0
  217. package/test/internals/content-type-parser.test.js +111 -0
  218. package/test/internals/context.test.js +31 -0
  219. package/test/internals/decorator.test.js +156 -0
  220. package/test/internals/errors.test.js +982 -0
  221. package/test/internals/handle-request.test.js +270 -0
  222. package/test/internals/hook-runner.test.js +449 -0
  223. package/test/internals/hooks.test.js +96 -0
  224. package/test/internals/initial-config.test.js +383 -0
  225. package/test/internals/logger.test.js +163 -0
  226. package/test/internals/plugin.test.js +170 -0
  227. package/test/internals/promise.test.js +63 -0
  228. package/test/internals/reply-serialize.test.js +714 -0
  229. package/test/internals/reply.test.js +1920 -0
  230. package/test/internals/req-id-gen-factory.test.js +133 -0
  231. package/test/internals/request-validate.test.js +1402 -0
  232. package/test/internals/request.test.js +506 -0
  233. package/test/internals/schema-controller-perf.test.js +40 -0
  234. package/test/internals/server.test.js +91 -0
  235. package/test/internals/validation.test.js +352 -0
  236. package/test/issue-4959.test.js +118 -0
  237. package/test/keep-alive-timeout.test.js +42 -0
  238. package/test/listen.1.test.js +154 -0
  239. package/test/listen.2.test.js +113 -0
  240. package/test/listen.3.test.js +83 -0
  241. package/test/listen.4.test.js +168 -0
  242. package/test/listen.5.test.js +122 -0
  243. package/test/logger/instantiation.test.js +341 -0
  244. package/test/logger/logger-test-utils.js +47 -0
  245. package/test/logger/logging.test.js +460 -0
  246. package/test/logger/options.test.js +579 -0
  247. package/test/logger/request.test.js +292 -0
  248. package/test/logger/response.test.js +183 -0
  249. package/test/logger/tap-parallel-not-ok +0 -0
  250. package/test/max-requests-per-socket.test.js +113 -0
  251. package/test/middleware.test.js +37 -0
  252. package/test/noop-set.test.js +19 -0
  253. package/test/nullable-validation.test.js +187 -0
  254. package/test/options.error-handler.test.js +5 -0
  255. package/test/options.test.js +5 -0
  256. package/test/output-validation.test.js +140 -0
  257. package/test/patch.error-handler.test.js +5 -0
  258. package/test/patch.test.js +5 -0
  259. package/test/plugin.1.test.js +230 -0
  260. package/test/plugin.2.test.js +314 -0
  261. package/test/plugin.3.test.js +287 -0
  262. package/test/plugin.4.test.js +504 -0
  263. package/test/plugin.helper.js +8 -0
  264. package/test/plugin.name.display.js +10 -0
  265. package/test/post-empty-body.test.js +38 -0
  266. package/test/pretty-print.test.js +366 -0
  267. package/test/promises.test.js +125 -0
  268. package/test/proto-poisoning.test.js +145 -0
  269. package/test/put.error-handler.test.js +5 -0
  270. package/test/put.test.js +5 -0
  271. package/test/register.test.js +184 -0
  272. package/test/reply-code.test.js +148 -0
  273. package/test/reply-early-hints.test.js +100 -0
  274. package/test/reply-error.test.js +815 -0
  275. package/test/reply-trailers.test.js +445 -0
  276. package/test/reply-web-stream-locked.test.js +37 -0
  277. package/test/request-error.test.js +624 -0
  278. package/test/request-header-host.test.js +339 -0
  279. package/test/request-id.test.js +118 -0
  280. package/test/request-timeout.test.js +53 -0
  281. package/test/route-hooks.test.js +635 -0
  282. package/test/route-prefix.test.js +904 -0
  283. package/test/route-shorthand.test.js +48 -0
  284. package/test/route.1.test.js +259 -0
  285. package/test/route.2.test.js +100 -0
  286. package/test/route.3.test.js +213 -0
  287. package/test/route.4.test.js +127 -0
  288. package/test/route.5.test.js +211 -0
  289. package/test/route.6.test.js +306 -0
  290. package/test/route.7.test.js +406 -0
  291. package/test/route.8.test.js +225 -0
  292. package/test/router-options.test.js +1108 -0
  293. package/test/same-shape.test.js +124 -0
  294. package/test/schema-examples.test.js +661 -0
  295. package/test/schema-feature.test.js +2198 -0
  296. package/test/schema-serialization.test.js +1171 -0
  297. package/test/schema-special-usage.test.js +1348 -0
  298. package/test/schema-validation.test.js +1572 -0
  299. package/test/scripts/validate-ecosystem-links.test.js +339 -0
  300. package/test/serialize-response.test.js +186 -0
  301. package/test/server.test.js +347 -0
  302. package/test/set-error-handler.test.js +69 -0
  303. package/test/skip-reply-send.test.js +317 -0
  304. package/test/stream-serializers.test.js +40 -0
  305. package/test/stream.1.test.js +94 -0
  306. package/test/stream.2.test.js +129 -0
  307. package/test/stream.3.test.js +198 -0
  308. package/test/stream.4.test.js +176 -0
  309. package/test/stream.5.test.js +188 -0
  310. package/test/sync-routes.test.js +32 -0
  311. package/test/throw.test.js +359 -0
  312. package/test/toolkit.js +63 -0
  313. package/test/trust-proxy.test.js +162 -0
  314. package/test/type-provider.test.js +22 -0
  315. package/test/types/content-type-parser.test-d.ts +72 -0
  316. package/test/types/decorate-request-reply.test-d.ts +18 -0
  317. package/test/types/dummy-plugin.ts +9 -0
  318. package/test/types/errors.test-d.ts +90 -0
  319. package/test/types/fastify.test-d.ts +352 -0
  320. package/test/types/hooks.test-d.ts +550 -0
  321. package/test/types/import.ts +2 -0
  322. package/test/types/instance.test-d.ts +588 -0
  323. package/test/types/logger.test-d.ts +277 -0
  324. package/test/types/plugin.test-d.ts +97 -0
  325. package/test/types/register.test-d.ts +237 -0
  326. package/test/types/reply.test-d.ts +254 -0
  327. package/test/types/request.test-d.ts +188 -0
  328. package/test/types/route.test-d.ts +553 -0
  329. package/test/types/schema.test-d.ts +135 -0
  330. package/test/types/serverFactory.test-d.ts +37 -0
  331. package/test/types/type-provider.test-d.ts +1213 -0
  332. package/test/types/using.test-d.ts +17 -0
  333. package/test/upgrade.test.js +52 -0
  334. package/test/url-rewriting.test.js +122 -0
  335. package/test/use-semicolon-delimiter.test.js +168 -0
  336. package/test/validation-error-handling.test.js +900 -0
  337. package/test/versioned-routes.test.js +603 -0
  338. package/test/web-api.test.js +616 -0
  339. package/test/wrap-thenable.test.js +30 -0
  340. package/types/content-type-parser.d.ts +75 -0
  341. package/types/context.d.ts +22 -0
  342. package/types/errors.d.ts +92 -0
  343. package/types/hooks.d.ts +875 -0
  344. package/types/instance.d.ts +609 -0
  345. package/types/logger.d.ts +107 -0
  346. package/types/plugin.d.ts +44 -0
  347. package/types/register.d.ts +42 -0
  348. package/types/reply.d.ts +81 -0
  349. package/types/request.d.ts +95 -0
  350. package/types/route.d.ts +199 -0
  351. package/types/schema.d.ts +61 -0
  352. package/types/server-factory.d.ts +19 -0
  353. package/types/type-provider.d.ts +130 -0
  354. package/types/utils.d.ts +98 -0
@@ -0,0 +1,875 @@
1
+ import { Readable } from 'node:stream'
2
+ import { FastifyInstance } from './instance'
3
+ import { RouteOptions, RouteGenericInterface } from './route'
4
+ import { RawServerBase, RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, ContextConfigDefault } from './utils'
5
+ import { FastifyRequest } from './request'
6
+ import { FastifyReply } from './reply'
7
+ import { FastifyError } from '@fastify/error'
8
+ import { FastifyBaseLogger } from './logger'
9
+ import {
10
+ FastifyTypeProvider,
11
+ FastifyTypeProviderDefault
12
+ } from './type-provider'
13
+ import { RegisterOptions } from './register'
14
+ import { FastifySchema } from './schema'
15
+ import { FastifyPluginOptions } from './plugin'
16
+
17
+ type HookHandlerDoneFunction = <TError extends Error = FastifyError>(err?: TError) => void
18
+
19
+ interface RequestPayload extends Readable {
20
+ receivedEncodedLength?: number;
21
+ }
22
+
23
+ // Lifecycle Hooks
24
+
25
+ /**
26
+ * `onRequest` is the first hook to be executed in the request lifecycle. There was no previous hook, the next hook will be `preParsing`.
27
+ * Notice: in the `onRequest` hook, request.body will always be null, because the body parsing happens before the `preHandler` hook.
28
+ */
29
+ export interface onRequestHookHandler<
30
+ RawServer extends RawServerBase = RawServerDefault,
31
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
32
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
33
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
34
+ ContextConfig = ContextConfigDefault,
35
+ SchemaCompiler extends FastifySchema = FastifySchema,
36
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
37
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
38
+ > {
39
+ (
40
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
41
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
42
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
43
+ done: HookHandlerDoneFunction
44
+ ): void;
45
+ }
46
+
47
+ export interface onRequestAsyncHookHandler<
48
+ RawServer extends RawServerBase = RawServerDefault,
49
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
50
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
51
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
52
+ ContextConfig = ContextConfigDefault,
53
+ SchemaCompiler extends FastifySchema = FastifySchema,
54
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
55
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
56
+ > {
57
+ (
58
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
59
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
60
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
61
+ ): Promise<unknown>;
62
+ }
63
+
64
+ // helper type which infers whether onRequestHookHandler or onRequestAsyncHookHandler are
65
+ // applicable based on the specified return type.
66
+ export type onRequestMetaHookHandler<
67
+ RawServer extends RawServerBase = RawServerDefault,
68
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
69
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
70
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
71
+ ContextConfig = ContextConfigDefault,
72
+ SchemaCompiler extends FastifySchema = FastifySchema,
73
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
74
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
75
+ Return extends ReturnType<onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
76
+ | ReturnType<onRequestAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
77
+ = ReturnType<onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
78
+ > = Return extends ReturnType<onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
79
+ ? onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
80
+ : onRequestAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
81
+
82
+ /**
83
+ * `preParsing` is the second hook to be executed in the request lifecycle. The previous hook was `onRequest`, the next hook will be `preValidation`.
84
+ * Notice: in the `preParsing` hook, request.body will always be null, because the body parsing happens before the `preHandler` hook.
85
+ */
86
+ export interface preParsingHookHandler<
87
+ RawServer extends RawServerBase = RawServerDefault,
88
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
89
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
90
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
91
+ ContextConfig = ContextConfigDefault,
92
+ SchemaCompiler extends FastifySchema = FastifySchema,
93
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
94
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
95
+ > {
96
+ (
97
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
98
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
99
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
100
+ payload: RequestPayload,
101
+ done: <TError extends Error = FastifyError>(err?: TError | null, res?: RequestPayload) => void
102
+ ): void;
103
+ }
104
+
105
+ export interface preParsingAsyncHookHandler<
106
+ RawServer extends RawServerBase = RawServerDefault,
107
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
108
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
109
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
110
+ ContextConfig = ContextConfigDefault,
111
+ SchemaCompiler extends FastifySchema = FastifySchema,
112
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
113
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
114
+ > {
115
+ (
116
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
117
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
118
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
119
+ payload: RequestPayload,
120
+ ): Promise<RequestPayload | unknown>;
121
+ }
122
+
123
+ // helper type which infers whether preParsingHookHandler or preParsingAsyncHookHandler are
124
+ // applicable based on the specified return type.
125
+ export type preParsingMetaHookHandler<
126
+ RawServer extends RawServerBase = RawServerDefault,
127
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
128
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
129
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
130
+ ContextConfig = ContextConfigDefault,
131
+ SchemaCompiler extends FastifySchema = FastifySchema,
132
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
133
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
134
+ Return extends ReturnType<preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
135
+ | ReturnType<preParsingAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
136
+ = ReturnType<preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
137
+ > = Return extends ReturnType<preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
138
+ ? preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
139
+ : preParsingAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
140
+
141
+ /**
142
+ * `preValidation` is the third hook to be executed in the request lifecycle. The previous hook was `preParsing`, the next hook will be `preHandler`.
143
+ */
144
+ export interface preValidationHookHandler<
145
+ RawServer extends RawServerBase = RawServerDefault,
146
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
147
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
148
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
149
+ ContextConfig = ContextConfigDefault,
150
+ SchemaCompiler extends FastifySchema = FastifySchema,
151
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
152
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
153
+ > {
154
+ (
155
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
156
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
157
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
158
+ done: HookHandlerDoneFunction
159
+ ): void;
160
+ }
161
+
162
+ export interface preValidationAsyncHookHandler<
163
+ RawServer extends RawServerBase = RawServerDefault,
164
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
165
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
166
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
167
+ ContextConfig = ContextConfigDefault,
168
+ SchemaCompiler extends FastifySchema = FastifySchema,
169
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
170
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
171
+ > {
172
+ (
173
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
174
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
175
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
176
+ ): Promise<unknown>;
177
+ }
178
+
179
+ // helper type which infers whether preValidationHookHandler or preValidationAsyncHookHandler are
180
+ // applicable based on the specified return type.
181
+ export type preValidationMetaHookHandler<
182
+ RawServer extends RawServerBase = RawServerDefault,
183
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
184
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
185
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
186
+ ContextConfig = ContextConfigDefault,
187
+ SchemaCompiler extends FastifySchema = FastifySchema,
188
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
189
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
190
+ Return extends ReturnType<preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
191
+ | ReturnType<preValidationAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
192
+ = ReturnType<preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
193
+ > = Return extends ReturnType<preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
194
+ ? preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
195
+ : preValidationAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
196
+
197
+ /**
198
+ * `preHandler` is the fourth hook to be executed in the request lifecycle. The previous hook was `preValidation`, the next hook will be `preSerialization`.
199
+ */
200
+ export interface preHandlerHookHandler<
201
+ RawServer extends RawServerBase = RawServerDefault,
202
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
203
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
204
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
205
+ ContextConfig = ContextConfigDefault,
206
+ SchemaCompiler extends FastifySchema = FastifySchema,
207
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
208
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
209
+ > {
210
+ (
211
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
212
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
213
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
214
+ done: HookHandlerDoneFunction
215
+ ): void;
216
+ }
217
+
218
+ export interface preHandlerAsyncHookHandler<
219
+ RawServer extends RawServerBase = RawServerDefault,
220
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
221
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
222
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
223
+ ContextConfig = ContextConfigDefault,
224
+ SchemaCompiler extends FastifySchema = FastifySchema,
225
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
226
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
227
+ > {
228
+ (
229
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
230
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
231
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
232
+ ): Promise<unknown>;
233
+ }
234
+
235
+ // helper type which infers whether preHandlerHookHandler or preHandlerAsyncHookHandler are
236
+ // applicable based on the specified return type.
237
+ export type preHandlerMetaHookHandler<
238
+ RawServer extends RawServerBase = RawServerDefault,
239
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
240
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
241
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
242
+ ContextConfig = ContextConfigDefault,
243
+ SchemaCompiler extends FastifySchema = FastifySchema,
244
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
245
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
246
+ Return extends ReturnType<preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
247
+ | ReturnType<preHandlerAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
248
+ = ReturnType<preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
249
+ > = Return extends ReturnType<preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
250
+ ? preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
251
+ : preHandlerAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
252
+
253
+ // This is used within the `preSerialization` and `onSend` hook handlers
254
+ interface DoneFuncWithErrOrRes {
255
+ (): void;
256
+ <TError extends Error = FastifyError>(err: TError): void;
257
+ (err: null, res: unknown): void;
258
+ }
259
+
260
+ /**
261
+ * `preSerialization` is the fifth hook to be executed in the request lifecycle. The previous hook was `preHandler`, the next hook will be `onSend`.
262
+ * Note: the hook is NOT called if the payload is a string, a Buffer, a stream or null.
263
+ */
264
+ export interface preSerializationHookHandler<
265
+ PreSerializationPayload = unknown,
266
+ RawServer extends RawServerBase = RawServerDefault,
267
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
268
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
269
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
270
+ ContextConfig = ContextConfigDefault,
271
+ SchemaCompiler extends FastifySchema = FastifySchema,
272
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
273
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
274
+ > {
275
+ (
276
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
277
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
278
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
279
+ payload: PreSerializationPayload,
280
+ done: DoneFuncWithErrOrRes
281
+ ): void;
282
+ }
283
+
284
+ export interface preSerializationAsyncHookHandler<
285
+ PreSerializationPayload = unknown,
286
+ RawServer extends RawServerBase = RawServerDefault,
287
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
288
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
289
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
290
+ ContextConfig = ContextConfigDefault,
291
+ SchemaCompiler extends FastifySchema = FastifySchema,
292
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
293
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
294
+ > {
295
+ (
296
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
297
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
298
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
299
+ payload: PreSerializationPayload
300
+ ): Promise<unknown>;
301
+ }
302
+
303
+ // helper type which infers whether preSerializationHookHandler or preSerializationAsyncHookHandler are
304
+ // applicable based on the specified return type.
305
+ export type preSerializationMetaHookHandler<
306
+ PreSerializationPayload = unknown,
307
+ RawServer extends RawServerBase = RawServerDefault,
308
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
309
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
310
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
311
+ ContextConfig = ContextConfigDefault,
312
+ SchemaCompiler extends FastifySchema = FastifySchema,
313
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
314
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
315
+ Return extends ReturnType<preSerializationHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
316
+ | ReturnType<preSerializationAsyncHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
317
+ = ReturnType<preSerializationHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
318
+ > = Return extends ReturnType<preSerializationHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
319
+ ? preSerializationHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
320
+ : preSerializationAsyncHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
321
+
322
+ /**
323
+ * You can change the payload with the `onSend` hook. It is the sixth hook to be executed in the request lifecycle. The previous hook was `preSerialization`, the next hook will be `onResponse`.
324
+ * Note: If you change the payload, you may only change it to a string, a Buffer, a stream, or null.
325
+ */
326
+ export interface onSendHookHandler<
327
+ OnSendPayload = unknown,
328
+ RawServer extends RawServerBase = RawServerDefault,
329
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
330
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
331
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
332
+ ContextConfig = ContextConfigDefault,
333
+ SchemaCompiler extends FastifySchema = FastifySchema,
334
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
335
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
336
+ > {
337
+ (
338
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
339
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
340
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
341
+ payload: OnSendPayload,
342
+ done: DoneFuncWithErrOrRes
343
+ ): void;
344
+ }
345
+
346
+ export interface onSendAsyncHookHandler<
347
+ OnSendPayload = unknown,
348
+ RawServer extends RawServerBase = RawServerDefault,
349
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
350
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
351
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
352
+ ContextConfig = ContextConfigDefault,
353
+ SchemaCompiler extends FastifySchema = FastifySchema,
354
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
355
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
356
+ > {
357
+ (
358
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
359
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
360
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
361
+ payload: OnSendPayload,
362
+ ): Promise<unknown>;
363
+ }
364
+
365
+ // helper type which infers whether onSendHookHandler or onSendAsyncHookHandler are
366
+ // applicable based on the specified return type.
367
+ export type onSendMetaHookHandler<
368
+ OnSendPayload = unknown,
369
+ RawServer extends RawServerBase = RawServerDefault,
370
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
371
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
372
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
373
+ ContextConfig = ContextConfigDefault,
374
+ SchemaCompiler extends FastifySchema = FastifySchema,
375
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
376
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
377
+ Return extends ReturnType<onSendHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
378
+ | ReturnType<onSendAsyncHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
379
+ = ReturnType<onSendHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
380
+ > = Return extends ReturnType<onSendHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
381
+ ? onSendHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
382
+ : onSendAsyncHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
383
+
384
+ /**
385
+ * `onResponse` is the seventh and last hook in the request hook lifecycle. The previous hook was `onSend`, there is no next hook.
386
+ * The onResponse hook is executed when a response has been sent, so you will not be able to send more data to the client. It can however be useful for sending data to external services, for example to gather statistics.
387
+ */
388
+ export interface onResponseHookHandler<
389
+ RawServer extends RawServerBase = RawServerDefault,
390
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
391
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
392
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
393
+ ContextConfig = ContextConfigDefault,
394
+ SchemaCompiler extends FastifySchema = FastifySchema,
395
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
396
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
397
+ > {
398
+ (
399
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
400
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
401
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
402
+ done: HookHandlerDoneFunction
403
+ ): void;
404
+ }
405
+
406
+ export interface onResponseAsyncHookHandler<
407
+ RawServer extends RawServerBase = RawServerDefault,
408
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
409
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
410
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
411
+ ContextConfig = ContextConfigDefault,
412
+ SchemaCompiler extends FastifySchema = FastifySchema,
413
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
414
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
415
+ > {
416
+ (
417
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
418
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
419
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>
420
+ ): Promise<unknown>;
421
+ }
422
+
423
+ // helper type which infers whether onResponseHookHandler or onResponseAsyncHookHandler are
424
+ // applicable based on the specified return type.
425
+ export type onResponseMetaHookHandler<
426
+ RawServer extends RawServerBase = RawServerDefault,
427
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
428
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
429
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
430
+ ContextConfig = ContextConfigDefault,
431
+ SchemaCompiler extends FastifySchema = FastifySchema,
432
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
433
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
434
+ Return extends ReturnType<onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
435
+ | ReturnType<onResponseAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
436
+ = ReturnType<onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
437
+ > = Return extends ReturnType<onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
438
+ ? onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
439
+ : onResponseAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
440
+
441
+ /**
442
+ * `onTimeout` is useful if you need to monitor the request timed out in your service. (if the `connectionTimeout` property is set on the fastify instance)
443
+ * The onTimeout hook is executed when a request is timed out and the http socket has been hanged up. Therefore you will not be able to send data to the client.
444
+ */
445
+ export interface onTimeoutHookHandler<
446
+ RawServer extends RawServerBase = RawServerDefault,
447
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
448
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
449
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
450
+ ContextConfig = ContextConfigDefault,
451
+ SchemaCompiler extends FastifySchema = FastifySchema,
452
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
453
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
454
+ > {
455
+ (
456
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
457
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
458
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
459
+ done: HookHandlerDoneFunction
460
+ ): void;
461
+ }
462
+
463
+ export interface onTimeoutAsyncHookHandler<
464
+ RawServer extends RawServerBase = RawServerDefault,
465
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
466
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
467
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
468
+ ContextConfig = ContextConfigDefault,
469
+ SchemaCompiler extends FastifySchema = FastifySchema,
470
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
471
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
472
+ > {
473
+ (
474
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
475
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
476
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>
477
+ ): Promise<unknown>;
478
+ }
479
+
480
+ // helper type which infers whether onTimeoutHookHandler or onTimeoutAsyncHookHandler are
481
+ // applicable based on the specified return type.
482
+ export type onTimeoutMetaHookHandler<
483
+ RawServer extends RawServerBase = RawServerDefault,
484
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
485
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
486
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
487
+ ContextConfig = ContextConfigDefault,
488
+ SchemaCompiler extends FastifySchema = FastifySchema,
489
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
490
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
491
+ Return extends ReturnType<onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
492
+ | ReturnType<onTimeoutAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
493
+ = ReturnType<onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
494
+ > = Return extends ReturnType<onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
495
+ ? onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
496
+ : onTimeoutAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
497
+
498
+ /**
499
+ * This hook is useful if you need to do some custom error logging or add some specific header in case of error.
500
+ * It is not intended for changing the error, and calling reply.send will throw an exception.
501
+ * This hook will be executed before the customErrorHandler.
502
+ * Notice: unlike the other hooks, pass an error to the done function is not supported.
503
+ */
504
+ export interface onErrorHookHandler<
505
+ RawServer extends RawServerBase = RawServerDefault,
506
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
507
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
508
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
509
+ ContextConfig = ContextConfigDefault,
510
+ TError extends Error = FastifyError,
511
+ SchemaCompiler extends FastifySchema = FastifySchema,
512
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
513
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
514
+ > {
515
+ (
516
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
517
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
518
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
519
+ error: TError,
520
+ done: () => void
521
+ ): void;
522
+ }
523
+
524
+ export interface onErrorAsyncHookHandler<
525
+ RawServer extends RawServerBase = RawServerDefault,
526
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
527
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
528
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
529
+ ContextConfig = ContextConfigDefault,
530
+ TError extends Error = FastifyError,
531
+ SchemaCompiler extends FastifySchema = FastifySchema,
532
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
533
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
534
+ > {
535
+ (
536
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
537
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
538
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
539
+ error: TError
540
+ ): Promise<unknown>;
541
+ }
542
+
543
+ // helper type which infers whether onErrorHookHandler or onErrorAsyncHookHandler are
544
+ // applicable based on the specified return type.
545
+ export type onErrorMetaHookHandler<
546
+ RawServer extends RawServerBase = RawServerDefault,
547
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
548
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
549
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
550
+ ContextConfig = ContextConfigDefault,
551
+ TError extends Error = FastifyError,
552
+ SchemaCompiler extends FastifySchema = FastifySchema,
553
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
554
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
555
+ Return extends ReturnType<onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, TError, SchemaCompiler, TypeProvider, Logger>>
556
+ | ReturnType<onErrorAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, TError, SchemaCompiler, TypeProvider, Logger>>
557
+ = ReturnType<onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, TError, SchemaCompiler, TypeProvider, Logger>>
558
+ > = Return extends ReturnType<onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, TError, SchemaCompiler, TypeProvider, Logger>>
559
+ ? onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, TError, SchemaCompiler, TypeProvider, Logger>
560
+ : onErrorAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, TError, SchemaCompiler, TypeProvider, Logger>
561
+
562
+ /**
563
+ * `onRequestAbort` is useful if you need to monitor the if the client aborts the request (if the `request.raw.aborted` property is set to `true`).
564
+ * The `onRequestAbort` hook is executed when a client closes the connection before the entire request has been received. Therefore, you will not be able to send data to the client.
565
+ * Notice: client abort detection is not completely reliable. See: https://github.com/fastify/fastify/blob/main/docs/Guides/Detecting-When-Clients-Abort.md
566
+ */
567
+ export interface onRequestAbortHookHandler<
568
+ RawServer extends RawServerBase = RawServerDefault,
569
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
570
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
571
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
572
+ ContextConfig = ContextConfigDefault,
573
+ SchemaCompiler extends FastifySchema = FastifySchema,
574
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
575
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
576
+ > {
577
+ (
578
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
579
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
580
+ done: HookHandlerDoneFunction
581
+ ): void;
582
+ }
583
+
584
+ export interface onRequestAbortAsyncHookHandler<
585
+ RawServer extends RawServerBase = RawServerDefault,
586
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
587
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
588
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
589
+ ContextConfig = ContextConfigDefault,
590
+ SchemaCompiler extends FastifySchema = FastifySchema,
591
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
592
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
593
+ > {
594
+ (
595
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
596
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
597
+ ): Promise<unknown>;
598
+ }
599
+
600
+ // helper type which infers whether onRequestAbortHookHandler or onRequestAbortHookHandler are
601
+ // applicable based on the specified return type.
602
+ export type onRequestAbortMetaHookHandler<
603
+ RawServer extends RawServerBase = RawServerDefault,
604
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
605
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
606
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
607
+ ContextConfig = ContextConfigDefault,
608
+ SchemaCompiler extends FastifySchema = FastifySchema,
609
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
610
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
611
+ Return extends ReturnType<onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
612
+ | ReturnType<onRequestAbortAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
613
+ = ReturnType<onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
614
+ > = Return extends ReturnType<onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>>
615
+ ? onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
616
+ : onRequestAbortAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
617
+
618
+ export type LifecycleHook = 'onRequest'
619
+ | 'preParsing'
620
+ | 'preValidation'
621
+ | 'preHandler'
622
+ | 'preSerialization'
623
+ | 'onSend'
624
+ | 'onResponse'
625
+ | 'onRequest'
626
+ | 'onError'
627
+ | 'onTimeout'
628
+ | 'onRequestAbort'
629
+
630
+ export type LifecycleHookLookup<K extends LifecycleHook> = K extends 'onRequest'
631
+ ? onRequestHookHandler
632
+ : K extends 'preParsing'
633
+ ? preParsingHookHandler
634
+ : K extends 'preValidation'
635
+ ? preValidationHookHandler
636
+ : K extends 'preHandler'
637
+ ? preHandlerHookHandler
638
+ : K extends 'preSerialization'
639
+ ? preSerializationHookHandler
640
+ : K extends 'onSend'
641
+ ? onSendHookHandler
642
+ : K extends 'onResponse'
643
+ ? onResponseHookHandler
644
+ : K extends 'onRequest'
645
+ ? onRequestHookHandler
646
+ : K extends 'onError'
647
+ ? onErrorHookHandler
648
+ : K extends 'onTimeout'
649
+ ? onTimeoutHookHandler
650
+ : K extends 'onRequestAbort'
651
+ ? onRequestAbortHookHandler
652
+ : never
653
+
654
+ export type LifecycleHookAsyncLookup<K extends LifecycleHook> = K extends 'onRequest'
655
+ ? onRequestAsyncHookHandler
656
+ : K extends 'preParsing'
657
+ ? preParsingAsyncHookHandler
658
+ : K extends 'preValidation'
659
+ ? preValidationAsyncHookHandler
660
+ : K extends 'preHandler'
661
+ ? preHandlerAsyncHookHandler
662
+ : K extends 'preSerialization'
663
+ ? preSerializationAsyncHookHandler
664
+ : K extends 'onSend'
665
+ ? onSendAsyncHookHandler
666
+ : K extends 'onResponse'
667
+ ? onResponseAsyncHookHandler
668
+ : K extends 'onRequest'
669
+ ? onRequestAsyncHookHandler
670
+ : K extends 'onError'
671
+ ? onErrorAsyncHookHandler
672
+ : K extends 'onTimeout'
673
+ ? onTimeoutAsyncHookHandler
674
+ : K extends 'onRequestAbort'
675
+ ? onRequestAbortAsyncHookHandler
676
+ : never
677
+
678
+ // Application Hooks
679
+
680
+ /**
681
+ * Triggered when a new route is registered. Listeners are passed a routeOptions object as the sole parameter. The interface is synchronous, and, as such, the listener does not get passed a callback
682
+ */
683
+ export interface onRouteHookHandler<
684
+ RawServer extends RawServerBase = RawServerDefault,
685
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
686
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
687
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
688
+ ContextConfig = ContextConfigDefault,
689
+ SchemaCompiler extends FastifySchema = FastifySchema,
690
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
691
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
692
+ > {
693
+ (
694
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
695
+ opts: RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider> & { routePath: string; path: string; prefix: string }
696
+ ): Promise<unknown> | void;
697
+ }
698
+
699
+ /**
700
+ * Triggered when a new plugin is registered and a new encapsulation context is created. The hook will be executed before the registered code.
701
+ * This hook can be useful if you are developing a plugin that needs to know when a plugin context is formed, and you want to operate in that specific context.
702
+ * Note: This hook will not be called if a plugin is wrapped inside fastify-plugin.
703
+ */
704
+ export interface onRegisterHookHandler<
705
+ RawServer extends RawServerBase = RawServerDefault,
706
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
707
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
708
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
709
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
710
+ Options extends FastifyPluginOptions = FastifyPluginOptions
711
+ > {
712
+ (
713
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
714
+ instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
715
+ opts: RegisterOptions & Options
716
+ ): Promise<unknown> | void;
717
+ }
718
+
719
+ /**
720
+ * Triggered when fastify.listen() or fastify.ready() is invoked to start the server. It is useful when plugins need a "ready" event, for example to load data before the server start listening for requests.
721
+ */
722
+ export interface onReadyHookHandler<
723
+ RawServer extends RawServerBase = RawServerDefault,
724
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
725
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
726
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
727
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
728
+ > {
729
+ (
730
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
731
+ done: HookHandlerDoneFunction
732
+ ): void;
733
+ }
734
+
735
+ export interface onReadyAsyncHookHandler<
736
+ RawServer extends RawServerBase = RawServerDefault,
737
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
738
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
739
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
740
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
741
+ > {
742
+ (
743
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
744
+ ): Promise<unknown>;
745
+ }
746
+
747
+ /**
748
+ * Triggered when fastify.listen() is invoked to start the server. It is useful when plugins need a "onListen" event, for example to run logics after the server start listening for requests.
749
+ */
750
+ export interface onListenHookHandler<
751
+ RawServer extends RawServerBase = RawServerDefault,
752
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
753
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
754
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
755
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
756
+ > {
757
+ (
758
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
759
+ done: HookHandlerDoneFunction
760
+ ): void;
761
+ }
762
+
763
+ export interface onListenAsyncHookHandler<
764
+ RawServer extends RawServerBase = RawServerDefault,
765
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
766
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
767
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
768
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
769
+ > {
770
+ (
771
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
772
+ ): Promise<unknown>;
773
+ }
774
+ /**
775
+ * Triggered when fastify.close() is invoked to stop the server. It is useful when plugins need a "shutdown" event, for example to close an open connection to a database.
776
+ */
777
+ export interface onCloseHookHandler<
778
+ RawServer extends RawServerBase = RawServerDefault,
779
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
780
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
781
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
782
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
783
+ > {
784
+ (
785
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
786
+ instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
787
+ done: HookHandlerDoneFunction
788
+ ): void;
789
+ }
790
+
791
+ export interface onCloseAsyncHookHandler<
792
+ RawServer extends RawServerBase = RawServerDefault,
793
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
794
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
795
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
796
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
797
+ > {
798
+ (
799
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
800
+ instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>
801
+ ): Promise<unknown>;
802
+ }
803
+
804
+ /**
805
+ * Triggered when fastify.close() is invoked to stop the server. It is useful when plugins need to cancel some state to allow the server to close successfully.
806
+ */
807
+ export interface preCloseHookHandler<
808
+ RawServer extends RawServerBase = RawServerDefault,
809
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
810
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
811
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
812
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
813
+ > {
814
+ (
815
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
816
+ done: HookHandlerDoneFunction
817
+ ): void;
818
+ }
819
+
820
+ export interface preCloseAsyncHookHandler<
821
+ RawServer extends RawServerBase = RawServerDefault,
822
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
823
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
824
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
825
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
826
+ > {
827
+ (
828
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
829
+ ): Promise<unknown>;
830
+ }
831
+
832
+ export type ApplicationHook = 'onRoute'
833
+ | 'onRegister'
834
+ | 'onReady'
835
+ | 'onListen'
836
+ | 'onClose'
837
+ | 'preClose'
838
+
839
+ export type ApplicationHookLookup<K extends ApplicationHook> = K extends 'onRegister'
840
+ ? onRegisterHookHandler
841
+ : K extends 'onReady'
842
+ ? onReadyHookHandler
843
+ : K extends 'onListen'
844
+ ? onListenHookHandler
845
+ : K extends 'onClose'
846
+ ? onCloseHookHandler
847
+ : K extends 'preClose'
848
+ ? preCloseHookHandler
849
+ : K extends 'onRoute'
850
+ ? onRouteHookHandler
851
+ : never
852
+
853
+ export type ApplicationHookAsyncLookup<K extends ApplicationHook> = K extends 'onRegister'
854
+ ? onRegisterHookHandler
855
+ : K extends 'onReady'
856
+ ? onReadyAsyncHookHandler
857
+ : K extends 'onListen'
858
+ ? onListenAsyncHookHandler
859
+ : K extends 'onClose'
860
+ ? onCloseAsyncHookHandler
861
+ : K extends 'preClose'
862
+ ? preCloseAsyncHookHandler
863
+ : never
864
+
865
+ export type HookLookup <K extends ApplicationHook | LifecycleHook> = K extends ApplicationHook
866
+ ? ApplicationHookLookup<K>
867
+ : K extends LifecycleHook
868
+ ? LifecycleHookLookup<K>
869
+ : never
870
+
871
+ export type HookAsyncLookup <K extends ApplicationHook | LifecycleHook> = K extends ApplicationHook
872
+ ? ApplicationHookAsyncLookup<K>
873
+ : K extends LifecycleHook
874
+ ? LifecycleHookAsyncLookup<K>
875
+ : never