import { FastifyPluginCallback, FastifySchema, RouteOptions } from 'fastify' import { OpenAPI, OpenAPIV2, OpenAPIV3, // eslint-disable-next-line camelcase OpenAPIV3_1 } from 'openapi-types' /** * Swagger-UI Vendor Extensions * @see https://support.smartbear.com/swaggerhub/docs/apis/vendor-extensions.html#api-docs-x-tokenname */ declare module 'openapi-types' { namespace OpenAPIV3 { interface OAuth2SecurityScheme { 'x-tokenName'?: string; } } namespace OpenAPIV2 { interface SecuritySchemeOauth2Base { 'x-tokenName'?: string; } } } declare module 'fastify' { interface FastifyInstance { swagger: ((opts?: { yaml?: false }) => OpenAPI.Document) & ((opts: { yaml: true }) => string) & ((opts: { yaml: boolean }) => OpenAPI.Document | string); swaggerCSP: { script: string[]; style: string[]; } } interface FastifySchema { hide?: boolean; deprecated?: boolean; tags?: readonly string[]; description?: string; summary?: string; consumes?: readonly string[]; produces?: readonly string[]; externalDocs?: OpenAPIV2.ExternalDocumentationObject | OpenAPIV3.ExternalDocumentationObject; security?: ReadonlyArray<{ [securityLabel: string]: readonly string[] }>; /** * OpenAPI operation unique identifier */ operationId?: string; } interface RouteShorthandOptions { links?: { [statusCode: string]: OpenAPIV3.ResponseObject['links']; } } interface FastifyContextConfig { swaggerTransform?: fastifySwagger.SwaggerTransform | false; swagger?: { exposeHeadRoute?: boolean } } } type SwaggerDocumentObject = { swaggerObject: Partial; } | { // eslint-disable-next-line camelcase openapiObject: Partial; } type FastifySwagger = FastifyPluginCallback declare namespace fastifySwagger { export type SwaggerOptions = (FastifyStaticSwaggerOptions | FastifyDynamicSwaggerOptions) export interface FastifySwaggerOptions { mode?: 'static' | 'dynamic'; } type JSONValue = | string | null | number | boolean | JSONObject | Array export interface JSONObject { [key: string]: JSONValue; } export type SwaggerTransform = ({ schema, url, route, ...documentObject }: { schema: S; url: string; route: RouteOptions; } & SwaggerDocumentObject) => { schema: FastifySchema; url: string } // eslint-disable-next-line camelcase export type SwaggerTransformObject = (documentObject: SwaggerDocumentObject) => Partial | Partial export interface FastifyDynamicSwaggerOptions extends FastifySwaggerOptions { mode?: 'dynamic'; swagger?: Partial; // eslint-disable-next-line camelcase openapi?: Partial hiddenTag?: string; hideUntagged?: boolean; /** Include HEAD routes in the definitions */ exposeHeadRoutes?: boolean; /** * Strips matching base path from routes in documentation * @default true */ stripBasePath?: boolean; /** * custom function to transform the route's schema and url */ transform?: SwaggerTransform; /** * custom function to transform the openapi or swagger object before it is rendered */ transformObject?: SwaggerTransformObject; /** Overrides the Fastify decorator. */ decorator?: 'swagger' | (string & Record); refResolver?: { /** Clone the input schema without changing it. Default to `false`. */ clone?: boolean; buildLocalReference: ( /** The `json` that is being resolved. */ json: JSONObject, /** The `baseUri` object of the schema. */ baseUri: { scheme?: string; userinfo?: string; host?: string; port?: number | string; path?: string; query?: string; fragment?: string; reference?: string; error?: string; }, /** `fragment` is the `$ref` string when the `$ref` is a relative reference. */ fragment: string, /** `i` is a local counter to generate a unique key. */ i: number ) => string; } } export interface StaticPathSpec { path: string; postProcessor?: (spec: OpenAPI.Document) => OpenAPI.Document; baseDir: string; } export interface StaticDocumentSpec { document: OpenAPIV2.Document | OpenAPIV3.Document; } export interface FastifyStaticSwaggerOptions extends FastifySwaggerOptions { mode: 'static'; specification: StaticPathSpec | StaticDocumentSpec; } export function formatParamUrl (paramUrl: string): string export const fastifySwagger: FastifySwagger export { fastifySwagger as default } } declare function fastifySwagger (...params: Parameters): ReturnType export = fastifySwagger