/// import { HandlerContext, Request, Response } from '@loopback/express'; import { ReferenceObject, SchemaObject } from '@loopback/openapi-v3'; import Ajv, { ErrorObject, FormatDefinition, KeywordDefinition, Options as AjvOptions, ValidateFunction } from 'ajv'; import { ErrorMessageOptions } from 'ajv-errors'; import { Options, OptionsJson, OptionsText, OptionsUrlencoded } from 'body-parser'; import { ResolvedRoute, RouteEntry } from './router'; /** * Re-export types from `./middleware` */ export * from '@loopback/express'; /** * Find a route matching the incoming request. * Throw an error when no route was found. */ export type FindRoute = (request: Request) => ResolvedRoute; /** * A function to parse OpenAPI operation parameters for a given route */ export type ParseParams = (request: Request, route: ResolvedRoute) => Promise; /** * Invokes a method defined in the Application Controller * * @param controller - Name of end-user's application controller * class which defines the methods. * @param method - Method name in application controller class * @param args - Operation arguments for the method * @returns OperationRetval Result from method invocation */ export type InvokeMethod = (route: RouteEntry, args: OperationArgs) => Promise; /** * Send the operation response back to the client. * * @param response - The response the response to send to. * @param result - The operation result to send. */ export type Send = (response: Response, result: OperationRetval) => void; /** * Reject the request with an error. * * @param handlerContext - The context object holding HTTP request, response * and other data needed to handle an incoming HTTP request. * @param err - The error. */ export type Reject = (handlerContext: HandlerContext, err: Error) => void; /** * Log information about a failed request. * * @param err - The error reported by request handling code. * @param statusCode - Status code of the HTTP response * @param request - The request that failed. */ export type LogError = (err: Error, statusCode: number, request: Request) => void; /** * Cache for AJV schema validators */ export type SchemaValidatorCache = WeakMap>; /** * Options for AJV errors */ export type AjvErrorOptions = ErrorMessageOptions; /** * Factory function for Ajv instances */ export type AjvFactory = (options?: AjvOptions) => Ajv; /** * Ajv keyword definition with a name */ export type AjvKeyword = KeywordDefinition; /** * Ajv format definition with a name */ export type AjvFormat = FormatDefinition & { name: string; }; /** * Options for any value validation using AJV */ export interface ValueValidationOptions extends ValidationOptions { /** * Where the data comes from. It can be 'body', 'path', 'header', * 'query', 'cookie', etc... */ source?: string; /** * Parameter name, as provided in `ParameterObject#name` property. */ name?: string; } /** * Options for request body validation using AJV */ export interface ValidationOptions extends AjvOptions { /** * Custom cache for compiled schemas by AJV. This setting makes it possible * to skip the default cache. */ compiledSchemaCache?: SchemaValidatorCache; /** * Enable additional AJV keywords from https://github.com/epoberezkin/ajv-keywords * - `string[]`: Add an array of keywords from `ajv-keywords` */ ajvKeywords?: string[]; /** * Enable custom error messages in JSON-Schema for AJV validator * from https://github.com/epoberezkin/ajv-errors * - `true`: Enable `ajv-errors` * - `AjvErrorOptions`: Enable `ajv-errors` with options */ ajvErrors?: AjvErrorOptions; /** * A function that transform the `ErrorObject`s reported by AJV. * This could be used for error messages customization, localization, etc. */ ajvErrorTransformer?: (errors: ErrorObject[]) => ErrorObject[]; /** * A factory to create Ajv instance */ ajvFactory?: (options: AjvOptions) => Ajv; /** * An array of keys to be rejected, such as `__proto__`. */ prohibitedKeys?: string[]; } /** * Options for request body parsing * See https://github.com/expressjs/body-parser/#options * * Built-in parsers retrieve their own options from the request body parser * options. The parser specific properties override common ones. */ export interface RequestBodyParserOptions extends Options { /** * Options for json parser */ json?: OptionsJson; /** * Options for urlencoded parser */ urlencoded?: OptionsUrlencoded; /** * Options for text parser */ text?: OptionsText; /** * Options for raw parser */ raw?: Options; /** * Validation options for AJV, see https://github.com/epoberezkin/ajv#options * This setting is global for all request body parsers and it cannot be * overridden inside parser specific properties such as `json` or `text`. */ validation?: ValidationOptions; /** * Common options for all parsers */ [name: string]: unknown; } export type PathParameterValues = { [key: string]: any; }; export type OperationArgs = any[]; /** * Return value of a controller method (a function implementing an operation). * This is a type alias for "any", used to distinguish * operation results from other "any" typed values. */ export type OperationRetval = any; /** * user profile to add in session */ export interface SessionUserProfile { provider: string; token: string; email: string; [attribute: string]: any; } /** * interface to set variables in user session */ export interface Session { profile: SessionUserProfile; [key: string]: any; } /** * extending express request type with a session field */ export interface RequestWithSession extends Request { session: Session; } export type RequestBodyValidationOptions = ValidationOptions;