You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					181 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					181 lines
				
				4.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import {FastifyPluginCallback, FastifySchema, onRequestHookHandler, preHandlerHookHandler} from 'fastify';
							 | 
						||
| 
								 | 
							
								import { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare module 'fastify' {
							 | 
						||
| 
								 | 
							
								  interface FastifyInstance {
							 | 
						||
| 
								 | 
							
								    swagger: (
							 | 
						||
| 
								 | 
							
								      opts?: {
							 | 
						||
| 
								 | 
							
								        yaml?: boolean;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ) => OpenAPI.Document;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    swaggerCSP: {
							 | 
						||
| 
								 | 
							
								      script: string[];
							 | 
						||
| 
								 | 
							
								      style: string[];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface FastifySchema {
							 | 
						||
| 
								 | 
							
								    hide?: boolean;
							 | 
						||
| 
								 | 
							
								    deprecated?: boolean;
							 | 
						||
| 
								 | 
							
								    tags?: string[];
							 | 
						||
| 
								 | 
							
								    description?: string;
							 | 
						||
| 
								 | 
							
								    summary?: string;
							 | 
						||
| 
								 | 
							
								    consumes?: string[];
							 | 
						||
| 
								 | 
							
								    produces?: string[];
							 | 
						||
| 
								 | 
							
								    externalDocs?: OpenAPIV2.ExternalDocumentationObject | OpenAPIV3.ExternalDocumentationObject;
							 | 
						||
| 
								 | 
							
								    security?: Array<{ [securityLabel: string]: string[] }>;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * OpenAPI operation unique identifier
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    operationId?: string;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface RouteShorthandOptions {
							 | 
						||
| 
								 | 
							
								    links?: {
							 | 
						||
| 
								 | 
							
								      [statusCode: string]: OpenAPIV3.ResponseObject['links'];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export const fastifySwagger: FastifyPluginCallback<SwaggerOptions>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type SwaggerOptions = (FastifyStaticSwaggerOptions | FastifyDynamicSwaggerOptions);
							 | 
						||
| 
								 | 
							
								export interface FastifySwaggerOptions {
							 | 
						||
| 
								 | 
							
								  mode?: 'static' | 'dynamic';
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Overwrite the swagger url end-point
							 | 
						||
| 
								 | 
							
								   * @default /documentation
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  routePrefix?: string;
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * To expose the documentation api
							 | 
						||
| 
								 | 
							
								   * @default false
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  exposeRoute?: boolean;
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Swagger UI Config
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  uiConfig?: FastifySwaggerUiConfigOptions
							 | 
						||
| 
								 | 
							
								  initOAuth?: FastifySwaggerInitOAuthOptions
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * CSP Config
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  staticCSP?: boolean | string | Record<string, string | string[]>
							 | 
						||
| 
								 | 
							
								  transformStaticCSP?: (header: string) => string
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * route hooks
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  uiHooks?: FastifySwaggerUiHooksOptions
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type FastifySwaggerUiConfigOptions = Partial<{
							 | 
						||
| 
								 | 
							
								  deepLinking: boolean
							 | 
						||
| 
								 | 
							
								  displayOperationId: boolean
							 | 
						||
| 
								 | 
							
								  defaultModelsExpandDepth: number
							 | 
						||
| 
								 | 
							
								  defaultModelExpandDepth: number
							 | 
						||
| 
								 | 
							
								  defaultModelRendering: string
							 | 
						||
| 
								 | 
							
								  displayRequestDuration: boolean
							 | 
						||
| 
								 | 
							
								  docExpansion: string
							 | 
						||
| 
								 | 
							
								  filter: boolean | string
							 | 
						||
| 
								 | 
							
								  layout: string
							 | 
						||
| 
								 | 
							
								  maxDisplayedTags: number
							 | 
						||
| 
								 | 
							
								  showExtensions: boolean
							 | 
						||
| 
								 | 
							
								  showCommonExtensions: boolean
							 | 
						||
| 
								 | 
							
								  useUnsafeMarkdown: boolean
							 | 
						||
| 
								 | 
							
								  syntaxHighlight: {
							 | 
						||
| 
								 | 
							
								    activate?: boolean
							 | 
						||
| 
								 | 
							
								    theme?: string
							 | 
						||
| 
								 | 
							
								  } | false
							 | 
						||
| 
								 | 
							
								  tryItOutEnabled: boolean
							 | 
						||
| 
								 | 
							
								  validatorUrl: string | null
							 | 
						||
| 
								 | 
							
								}>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type FastifySwaggerInitOAuthOptions = Partial<{
							 | 
						||
| 
								 | 
							
								  clientId: string,
							 | 
						||
| 
								 | 
							
								  clientSecret: string,
							 | 
						||
| 
								 | 
							
								  realm: string,
							 | 
						||
| 
								 | 
							
								  appName: string,
							 | 
						||
| 
								 | 
							
								  scopeSeparator: string,
							 | 
						||
| 
								 | 
							
								  scopes: string | string[],
							 | 
						||
| 
								 | 
							
								  additionalQueryStringParams: { [key: string]: any },
							 | 
						||
| 
								 | 
							
								  useBasicAuthenticationWithAccessCodeGrant: boolean,
							 | 
						||
| 
								 | 
							
								  usePkceWithAuthorizationCodeGrant: boolean
							 | 
						||
| 
								 | 
							
								}>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type JSONValue =
							 | 
						||
| 
								 | 
							
								    | string
							 | 
						||
| 
								 | 
							
								    | null
							 | 
						||
| 
								 | 
							
								    | number
							 | 
						||
| 
								 | 
							
								    | boolean
							 | 
						||
| 
								 | 
							
								    | JSONObject
							 | 
						||
| 
								 | 
							
								    | Array<JSONValue>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface JSONObject {
							 | 
						||
| 
								 | 
							
								  [key: string]: JSONValue;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface FastifyDynamicSwaggerOptions extends FastifySwaggerOptions {
							 | 
						||
| 
								 | 
							
								  mode?: 'dynamic';
							 | 
						||
| 
								 | 
							
								  swagger?: Partial<OpenAPIV2.Document>;
							 | 
						||
| 
								 | 
							
								  openapi?: Partial<OpenAPIV3.Document>
							 | 
						||
| 
								 | 
							
								  hiddenTag?: string;
							 | 
						||
| 
								 | 
							
								  hideUntagged?: boolean;
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Strips matching base path from routes in documentation
							 | 
						||
| 
								 | 
							
								   * @default true
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  stripBasePath?: boolean;
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * custom function to transform the route's schema and url
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  transform?: <S extends FastifySchema = FastifySchema>({schema, url}: {schema: S, url: string}) => { schema: JSONObject, url: string };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  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 type FastifySwaggerUiHooksOptions = Partial<{
							 | 
						||
| 
								 | 
							
								  onRequest?: onRequestHookHandler,
							 | 
						||
| 
								 | 
							
								  preHandler?: preHandlerHookHandler,
							 | 
						||
| 
								 | 
							
								}>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default fastifySwagger;
							 |