import type { CookieOptions, Request, Response } from 'express'; import type { Database, Orm } from './database'; import type { Logger, LoggerTokens } from './logger'; import type { ApiType } from './shared'; type InterceptorCookieValue = string | undefined; type InterceptorHeaderValue = number | string | string[] | undefined; export interface RequestInterceptorParams { orm: Orm; request: Request; getCookie: (name: string) => InterceptorCookieValue; getHeader: (field: string) => InterceptorHeaderValue; getHeaders: () => Record; log: (logger?: Logger<'request', Api>) => Partial; setDelay: (delay: number) => Promise; } export type RequestInterceptor = (params: RequestInterceptorParams) => Promise | void; export interface ResponseInterceptorParams { orm: Orm; request: Request; response: Response; appendHeader: (field: string, value?: string | string[]) => void; attachment: (filename: string) => void; clearCookie: (name: string, options?: CookieOptions) => void; getCookie: (name: string) => InterceptorCookieValue; getRequestHeader: (field: string) => InterceptorHeaderValue; getRequestHeaders: () => Record; getResponseHeader: (field: string) => InterceptorHeaderValue; getResponseHeaders: () => Record; log: (logger?: Logger<'response', Api>) => Partial; setCookie: (name: string, value: string, options?: CookieOptions) => void; setDelay: (delay: number) => Promise; setHeader: (field: string, value?: string | string[]) => void; setStatusCode: (statusCode: number) => void; } export type ResponseInterceptor = (data: Data, params: ResponseInterceptorParams) => any; export interface Interceptors { request?: RequestInterceptor; response?: ResponseInterceptor; } export {};