/** * @since 0.0.1 */ import { Either } from "fp-ts/Either"; import { Reader } from "fp-ts/Reader"; import { HttpError } from "./Error.js"; import { Fetch } from "./Fetch.js"; import { HttpRequest } from "./internal/request.js"; import { InterceptorError } from "./internal/interceptor.js"; export { /** * @since 0.0.1 * @category model */ InterceptorError, } from "./internal/interceptor.js"; /** @internal */ export type Merge, T extends Interceptor> = I extends Interceptors ? T extends Interceptor ? Interceptors : never : never; type NextFunction = (request: HttpRequest) => Promise>; /** * @since 0.0.1 * @category model */ export interface Chain { request: HttpRequest; proceed: NextFunction; } /** * @since 0.0.1 * @category model */ export interface Interceptor extends Reader>> { } /** * @since 0.0.1 * @category model */ export type Interceptors = Array>; /** * @since 0.0.1 * @category constructor */ export declare const of: (interceptor: Interceptor) => Interceptors; /** * @since 0.0.1 * @category constructor */ export declare const empty: () => Interceptors; /** * @since 0.0.1 * @category combinator */ export declare const add: { >(interceptor: T): (interceptors: Interceptors) => Merge, T>; , E, R>(interceptors: Interceptors, interceptor: T): Merge, T>; }; /** * @since 0.0.1 * @category constructor */ export declare const copy: (interceptors: Interceptors) => Interceptors; /** * @since 0.0.1 * @category constructor */ export declare const make: (interceptors: Interceptors) => (fetch: Fetch) => Fetch;