import type { Application, NextFunction, Request, RequestHandler, Response } from 'express'; import { interfaces as inversifyInterfaces } from 'inversify'; import { HTTP_VERBS_ENUM, PARAMETER_TYPE } from './constants'; import { HttpResponseMessage } from './httpResponseMessage'; type Prototype = { [P in keyof T]: T[P] extends NewableFunction ? T[P] : T[P] | undefined; } & { constructor: NewableFunction; }; interface ConstructorFunction> { prototype: Prototype; new (...args: unknown[]): T; } export type DecoratorTarget = ConstructorFunction | Prototype; export type Middleware = inversifyInterfaces.ServiceIdentifier | RequestHandler; export interface MiddlewareMetaData { [identifier: string]: Middleware[]; } export type ControllerHandler = (...params: unknown[]) => unknown; export interface Controller { } export interface ControllerMetadata { middleware: Middleware[]; path: string; target: DecoratorTarget; } export interface ControllerMethodMetadata extends ControllerMetadata { key: string; method: HTTP_VERBS_ENUM; } export interface ControllerParameterMetadata { [methodName: string]: ParameterMetadata[]; } export interface ParameterMetadata { index: number; injectRoot: boolean; parameterName?: string | symbol | undefined; type: PARAMETER_TYPE; } export type ExtractedParameters = ParameterMetadata[] | [Request, Response, NextFunction] | unknown[]; export type HandlerDecorator = (target: DecoratorTarget, key: string, value: unknown) => void; export type ConfigFunction = (app: Application) => void; export interface RoutingConfig { rootPath: string; } export interface Principal { details: T; isAuthenticated(): Promise; isInRole(role: string): Promise; isResourceOwner(resourceId: unknown): Promise; } export interface AuthProvider { getUser(req: Request, res: Response, next: NextFunction): Promise; } export interface HttpContext { container: inversifyInterfaces.Container; request: Request; response: Response; user: Principal; } export interface IHttpActionResult { executeAsync(): Promise; } export interface RouteDetails { args?: string[]; route: string; } export interface RouteInfo { controller: string; endpoints: RouteDetails[]; } export interface RawMetadata { controllerMetadata: ControllerMetadata; methodMetadata: ControllerMethodMetadata[]; parameterMetadata: ControllerParameterMetadata; } export {}; //# sourceMappingURL=interfaces.d.ts.map