UNPKG

fastify

Version:

Fast and low overhead web framework, for Node.js

240 lines (219 loc) 13.4 kB
import * as http from 'node:http' import * as http2 from 'node:http2' import * as https from 'node:https' import { Socket } from 'node:net' import { Options as AjvOptions, ValidatorFactory } from '@fastify/ajv-compiler' import { FastifyError } from '@fastify/error' import { Options as FJSOptions, SerializerFactory } from '@fastify/fast-json-stringify-compiler' import { ConstraintStrategy, HTTPVersion } from 'find-my-way' import { InjectOptions, CallbackFunc as LightMyRequestCallback, Chain as LightMyRequestChain, Response as LightMyRequestResponse } from 'light-my-request' import { AddContentTypeParser, ConstructorAction, FastifyBodyParser, FastifyContentTypeParser, getDefaultJsonParser, hasContentTypeParser, ProtoAction } from './types/content-type-parser' import { FastifyContextConfig, FastifyReplyContext, FastifyRequestContext } from './types/context' import { FastifyErrorCodes } from './types/errors' import { DoneFuncWithErrOrRes, HookHandlerDoneFunction, onCloseAsyncHookHandler, onCloseHookHandler, onErrorAsyncHookHandler, onErrorHookHandler, onListenAsyncHookHandler, onListenHookHandler, onReadyAsyncHookHandler, onReadyHookHandler, onRegisterHookHandler, onRequestAbortAsyncHookHandler, onRequestAbortHookHandler, onRequestAsyncHookHandler, onRequestHookHandler, onResponseAsyncHookHandler, onResponseHookHandler, onRouteHookHandler, onSendAsyncHookHandler, onSendHookHandler, onTimeoutAsyncHookHandler, onTimeoutHookHandler, preCloseAsyncHookHandler, preCloseHookHandler, preHandlerAsyncHookHandler, preHandlerHookHandler, preParsingAsyncHookHandler, preParsingHookHandler, preSerializationAsyncHookHandler, preSerializationHookHandler, preValidationAsyncHookHandler, preValidationHookHandler, RequestPayload } from './types/hooks' import { FastifyInstance, FastifyListenOptions, PrintRoutesOptions } from './types/instance' import { FastifyBaseLogger, FastifyChildLoggerFactory, FastifyLogFn, FastifyLoggerInstance, FastifyLoggerOptions, LogLevel, PinoLoggerOptions } from './types/logger' import { FastifyPlugin, FastifyPluginAsync, FastifyPluginCallback, FastifyPluginOptions } from './types/plugin' import { FastifyRegister, FastifyRegisterOptions, RegisterOptions } from './types/register' import { FastifyReply } from './types/reply' import { FastifyRequest, RequestGenericInterface } from './types/request' import { RouteGenericInterface, RouteHandler, RouteHandlerMethod, RouteOptions, RouteShorthandMethod, RouteShorthandOptions, RouteShorthandOptionsWithHandler } from './types/route' import { FastifySchema, FastifySchemaCompiler, FastifySchemaValidationError, SchemaErrorDataVar, SchemaErrorFormatter } from './types/schema' import { FastifyServerFactory, FastifyServerFactoryHandler } from './types/serverFactory' import { FastifyTypeProvider, FastifyTypeProviderDefault, SafePromiseLike } from './types/type-provider' import { ContextConfigDefault, HTTPMethods, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault, RequestBodyDefault, RequestHeadersDefault, RequestParamsDefault, RequestQuerystringDefault } from './types/utils' declare module '@fastify/error' { interface FastifyError { validationContext?: SchemaErrorDataVar; validation?: FastifySchemaValidationError[]; } } type Fastify = typeof fastify declare namespace fastify { export const errorCodes: FastifyErrorCodes export type FastifyHttp2SecureOptions< Server extends http2.Http2SecureServer, Logger extends FastifyBaseLogger = FastifyBaseLogger > = FastifyServerOptions<Server, Logger> & { http2: true, https: http2.SecureServerOptions, http2SessionTimeout?: number } export type FastifyHttp2Options< Server extends http2.Http2Server, Logger extends FastifyBaseLogger = FastifyBaseLogger > = FastifyServerOptions<Server, Logger> & { http2: true, http2SessionTimeout?: number } export type FastifyHttpsOptions< Server extends https.Server, Logger extends FastifyBaseLogger = FastifyBaseLogger > = FastifyServerOptions<Server, Logger> & { https: https.ServerOptions | null } export type FastifyHttpOptions< Server extends http.Server, Logger extends FastifyBaseLogger = FastifyBaseLogger > = FastifyServerOptions<Server, Logger> & { http?: http.ServerOptions | null } type FindMyWayVersion<RawServer extends RawServerBase> = RawServer extends http.Server ? HTTPVersion.V1 : HTTPVersion.V2 export interface ConnectionError extends Error { code: string, bytesParsed: number, rawPacket: { type: string, data: number[] } } type TrustProxyFunction = (address: string, hop: number) => boolean /** * Options for a fastify server instance. Utilizes conditional logic on the generic server parameter to enforce certain https and http2 */ export type FastifyServerOptions< RawServer extends RawServerBase = RawServerDefault, Logger extends FastifyBaseLogger = FastifyBaseLogger > = { ignoreTrailingSlash?: boolean, ignoreDuplicateSlashes?: boolean, connectionTimeout?: number, keepAliveTimeout?: number, maxRequestsPerSocket?: number, forceCloseConnections?: boolean | 'idle', requestTimeout?: number, pluginTimeout?: number, bodyLimit?: number, maxParamLength?: number, disableRequestLogging?: boolean, exposeHeadRoutes?: boolean, onProtoPoisoning?: ProtoAction, onConstructorPoisoning?: ConstructorAction, logger?: boolean | FastifyLoggerOptions<RawServer> & PinoLoggerOptions, loggerInstance?: Logger serializerOpts?: FJSOptions | Record<string, unknown>, serverFactory?: FastifyServerFactory<RawServer>, caseSensitive?: boolean, allowUnsafeRegex?: boolean, requestIdHeader?: string | false, requestIdLogLabel?: string; useSemicolonDelimiter?: boolean, genReqId?: (req: RawRequestDefaultExpression<RawServer>) => string, trustProxy?: boolean | string | string[] | number | TrustProxyFunction, querystringParser?: (str: string) => { [key: string]: unknown }, constraints?: { [name: string]: ConstraintStrategy<FindMyWayVersion<RawServer>, unknown>, }, schemaController?: { bucket?: (parentSchemas?: unknown) => { add(schema: unknown): FastifyInstance; getSchema(schemaId: string): unknown; getSchemas(): Record<string, unknown>; }; compilersFactory?: { buildValidator?: ValidatorFactory; buildSerializer?: SerializerFactory; }; }; return503OnClosing?: boolean, ajv?: { customOptions?: AjvOptions, plugins?: (Function | [Function, unknown])[] }, frameworkErrors?: <RequestGeneric extends RequestGenericInterface = RequestGenericInterface, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault, SchemaCompiler extends FastifySchema = FastifySchema>( error: FastifyError, req: FastifyRequest<RequestGeneric, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, TypeProvider>, res: FastifyReply<RequestGeneric, RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, FastifyContextConfig, SchemaCompiler, TypeProvider> ) => void, rewriteUrl?: ( // The RawRequestDefaultExpression, RawReplyDefaultExpression, and FastifyTypeProviderDefault parameters // should be narrowed further but those generic parameters are not passed to this FastifyServerOptions type this: FastifyInstance<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, Logger, FastifyTypeProviderDefault>, req: RawRequestDefaultExpression<RawServer> ) => string, schemaErrorFormatter?: SchemaErrorFormatter, /** * listener to error events emitted by client connections */ clientErrorHandler?: (error: ConnectionError, socket: Socket) => void, childLoggerFactory?: FastifyChildLoggerFactory } /** * @deprecated use {@link FastifySchemaValidationError} */ export type ValidationResult = FastifySchemaValidationError /* Export additional types */ export type { LightMyRequestChain, InjectOptions, LightMyRequestResponse, LightMyRequestCallback, // 'light-my-request' FastifyRequest, RequestGenericInterface, // './types/request' FastifyReply, // './types/reply' FastifyPluginCallback, FastifyPluginAsync, FastifyPluginOptions, FastifyPlugin, // './types/plugin' FastifyListenOptions, FastifyInstance, PrintRoutesOptions, // './types/instance' FastifyLoggerOptions, FastifyBaseLogger, FastifyLoggerInstance, FastifyLogFn, LogLevel, // './types/logger' FastifyRequestContext, FastifyContextConfig, FastifyReplyContext, // './types/context' RouteHandler, RouteHandlerMethod, RouteOptions, RouteShorthandMethod, RouteShorthandOptions, RouteShorthandOptionsWithHandler, RouteGenericInterface, // './types/route' FastifyRegister, FastifyRegisterOptions, RegisterOptions, // './types/register' FastifyBodyParser, FastifyContentTypeParser, AddContentTypeParser, hasContentTypeParser, getDefaultJsonParser, ProtoAction, ConstructorAction, // './types/content-type-parser' FastifyError, // '@fastify/error' FastifySchema, FastifySchemaCompiler, // './types/schema' HTTPMethods, RawServerBase, RawRequestDefaultExpression, RawReplyDefaultExpression, RawServerDefault, ContextConfigDefault, RequestBodyDefault, RequestQuerystringDefault, RequestParamsDefault, RequestHeadersDefault, // './types/utils' DoneFuncWithErrOrRes, HookHandlerDoneFunction, RequestPayload, onCloseAsyncHookHandler, onCloseHookHandler, onErrorAsyncHookHandler, onErrorHookHandler, onReadyAsyncHookHandler, onReadyHookHandler, onListenAsyncHookHandler, onListenHookHandler, onRegisterHookHandler, onRequestAsyncHookHandler, onRequestHookHandler, onResponseAsyncHookHandler, onResponseHookHandler, onRouteHookHandler, onSendAsyncHookHandler, onSendHookHandler, onTimeoutAsyncHookHandler, onTimeoutHookHandler, preHandlerAsyncHookHandler, preHandlerHookHandler, preParsingAsyncHookHandler, preParsingHookHandler, preSerializationAsyncHookHandler, preSerializationHookHandler, preValidationAsyncHookHandler, preValidationHookHandler, onRequestAbortHookHandler, onRequestAbortAsyncHookHandler, preCloseAsyncHookHandler, preCloseHookHandler, // './types/hooks' FastifyServerFactory, FastifyServerFactoryHandler, // './types/serverFactory' FastifyTypeProvider, FastifyTypeProviderDefault, SafePromiseLike, // './types/type-provider' FastifyErrorCodes // './types/errors' } // named export // import { plugin } from 'plugin' // const { plugin } = require('plugin') export const fastify: Fastify // default export // import plugin from 'plugin' export { fastify as default } } /** * Fastify factory function for the standard fastify http, https, or http2 server instance. * * The default function utilizes http * * @param opts Fastify server options * @returns Fastify server instance */ declare function fastify< Server extends http2.Http2SecureServer, Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>, Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>, Logger extends FastifyBaseLogger = FastifyBaseLogger, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault > (opts: fastify.FastifyHttp2SecureOptions<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & SafePromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>> declare function fastify< Server extends http2.Http2Server, Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>, Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>, Logger extends FastifyBaseLogger = FastifyBaseLogger, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault > (opts: fastify.FastifyHttp2Options<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & SafePromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>> declare function fastify< Server extends https.Server, Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>, Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>, Logger extends FastifyBaseLogger = FastifyBaseLogger, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault > (opts: fastify.FastifyHttpsOptions<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & SafePromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>> declare function fastify< Server extends http.Server, Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>, Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>, Logger extends FastifyBaseLogger = FastifyBaseLogger, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault > (opts?: fastify.FastifyHttpOptions<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & SafePromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>> // CJS export // const fastify = require('fastify') export = fastify