UNPKG

mappersmith

Version:

It is a lightweight rest client for node.js and the browser

89 lines (78 loc) 2.83 kB
import type { Request } from '../request' import type { Response } from '../response' export type Context = object export type RequestGetter = () => Promise<Request> export type ResponseGetter = () => Promise<Response> export type AbortFn = (error: Error) => void export type RenewFn = () => Promise<Response> export interface MiddlewareDescriptor { __name?: string /** * @deprecated: Use prepareRequest */ request?(request: Request): Promise<Request> | Request /** * Allows a middleware to tap into the prepare request phase */ prepareRequest( /** * This function must return a `Promise` resolving the `Request`. * * The method `enhance` can be used to generate a new request based on the previous one. */ next: RequestGetter, /** * Function that can be used to abort the middleware execution early on and throw a custom error to the user. */ abort: AbortFn ): Promise<Request | void> /** * Allows a middleware to tap into the response phase */ response( /** * This function must return a `Promise` resolving the `Response`. * * The method `enhance` can be used to generate a new response based on the previous one. */ next: ResponseGetter, /** * Function that is used to rerun the middleware stack. * * Useful for example when automatically refreshing an expired access token. */ renew: RenewFn, /** * The final request object (after the whole middleware chain has prepared and all `prepareRequest` been executed). * * Useful for example when you want to get access to the request without invoking `next` */ request: Request ): Promise<Response> } export interface MiddlewareParams { readonly clientId: string | null readonly context: Context readonly resourceMethod: string readonly resourceName: string readonly mockRequest?: boolean } // eslint-disable-next-line @typescript-eslint/ban-types type DefaultPrivateProps = {} /** * Mappersmith middleware, used to describe a factory function that given MiddlewareParams * returns a middleware object (partial of MiddlewareDescriptor). * * If the middleware needs to save local state you can use PrivateProps to allow it. */ export type Middleware<PrivateProps extends Record<string, unknown> = DefaultPrivateProps> = ( params: MiddlewareParams ) => Partial<MiddlewareDescriptor & PrivateProps> export { BasicAuthMiddleware } from './basic-auth' export { RetryMiddleware } from './retry/v2/index' export { CsrfMiddleware } from './csrf' export { DurationMiddleware } from './duration' export { EncodeJsonMiddleware } from './encode-json' export { GlobalErrorHandlerMiddleware } from './global-error-handler' export { LogMiddleware } from './log' export { TimeoutMiddleware } from './timeout'