@web-bee-ru/openapi-axios
Version:
A TypeScript abstraction over Axios for typed requests generated from OpenAPI (Swagger) schemas using openapi-typescript.
78 lines (77 loc) • 15.7 kB
TypeScript
import type { AxiosInstance } from "axios";
import { type MethodType } from "./const/methods.js";
import type { IOpenApiAxiosOptions, OptionsType, ValidStatusType } from "./types/options.js";
import type { GetApiResponse } from "./types/response.js";
import type { RouteResponsesByStatusCode, RoutesForMethod, SchemaType } from "./types/schemeTypes.js";
import type { IsNullable } from "./types/utils.js";
/**
* @description OpenApiAxios class is a wrapper around Axios that provides methods to handle API requests
* and responses based on OpenAPI specifications.
*
* @template Schema - The OpenAPI schema type.
* @template ClassValidStatus - The type that configures the error handling strategy.
*/
export declare class OpenApiAxios<Schema extends SchemaType, ClassValidStatus extends ValidStatusType> {
private axios;
private opt;
/**
* @description Creates an instance of OpenApiAxios.
*
* @param axios - The Axios instance to use for requests.
* @param options - Configuration options for the OpenApiAxios instance.
*/
constructor(axios: AxiosInstance, options: IOpenApiAxiosOptions<ClassValidStatus>);
get: <Route extends RoutesForMethod<Schema, "get">, MethodValidStatus extends ValidStatusType | undefined = undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "get", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "get", Route, "parameters">, "query">> ? T extends true ? [path: Route, options: OptionsType<Schema, "get", Route, MethodValidStatus>] : [path: Route, options?: OptionsType<Schema, "get", Route, MethodValidStatus> | undefined] : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "get", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "get", Route, "responses">>>>;
head: <Route extends RoutesForMethod<Schema, "head">, MethodValidStatus extends ValidStatusType | undefined = undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "head", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "head", Route, "parameters">, "query">> ? T extends true ? [path: Route, options: OptionsType<Schema, "head", Route, MethodValidStatus>] : [path: Route, options?: OptionsType<Schema, "head", Route, MethodValidStatus> | undefined] : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "head", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "head", Route, "responses">>>>;
delete: <Route extends RoutesForMethod<Schema, "delete">, MethodValidStatus extends ValidStatusType | undefined = undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "delete", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "delete", Route, "parameters">, "query">> ? T extends true ? [path: Route, options: OptionsType<Schema, "delete", Route, MethodValidStatus>] : [path: Route, options?: OptionsType<Schema, "delete", Route, MethodValidStatus> | undefined] : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "delete", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "delete", Route, "responses">>>>;
options: <Route extends RoutesForMethod<Schema, "options">, MethodValidStatus extends ValidStatusType | undefined = undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "options", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "options", Route, "parameters">, "query">> ? T extends true ? [path: Route, options: OptionsType<Schema, "options", Route, MethodValidStatus>] : [path: Route, options?: OptionsType<Schema, "options", Route, MethodValidStatus> | undefined] : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "options", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "options", Route, "responses">>>>;
put: <Route extends RoutesForMethod<Schema, "put">, MethodValidStatus extends ValidStatusType | undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "parameters">, "query">> ? T extends true ? [path: Route, body: import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route> : undefined, options: OptionsType<Schema, "put", Route, MethodValidStatus>] : (import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "parameters">, "query">> extends infer T_1 ? T_1 extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "parameters">, "query">> ? T_1 extends true ? true : import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route>> : never : never) extends infer T_2 ? T_2 extends (import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "parameters">, "query">> extends infer T_3 ? T_3 extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "parameters">, "query">> ? T_3 extends true ? true : import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route>> : never : never) ? T_2 extends true ? [path: Route, body: import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route> : undefined, options?: OptionsType<Schema, "put", Route, MethodValidStatus> | undefined] : [path: Route, body?: (import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "put", Route> : undefined) | undefined, options?: OptionsType<Schema, "put", Route, MethodValidStatus> | undefined] : never : never : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "put", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "put", Route, "responses">>>>;
post: <Route extends RoutesForMethod<Schema, "post">, MethodValidStatus extends ValidStatusType | undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "parameters">, "query">> ? T extends true ? [path: Route, body: import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route> : undefined, options: OptionsType<Schema, "post", Route, MethodValidStatus>] : (import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "parameters">, "query">> extends infer T_1 ? T_1 extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "parameters">, "query">> ? T_1 extends true ? true : import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route>> : never : never) extends infer T_2 ? T_2 extends (import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "parameters">, "query">> extends infer T_3 ? T_3 extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "parameters">, "query">> ? T_3 extends true ? true : import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route>> : never : never) ? T_2 extends true ? [path: Route, body: import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route> : undefined, options?: OptionsType<Schema, "post", Route, MethodValidStatus> | undefined] : [path: Route, body?: (import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "post", Route> : undefined) | undefined, options?: OptionsType<Schema, "post", Route, MethodValidStatus> | undefined] : never : never : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "post", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "post", Route, "responses">>>>;
patch: <Route extends RoutesForMethod<Schema, "patch">, MethodValidStatus extends ValidStatusType | undefined>(...args: import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "parameters">, "query">> extends infer T ? T extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "parameters">, "query">> ? T extends true ? [path: Route, body: import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route> : undefined, options: OptionsType<Schema, "patch", Route, MethodValidStatus>] : (import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "parameters">, "query">> extends infer T_1 ? T_1 extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "parameters">, "query">> ? T_1 extends true ? true : import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route>> : never : never) extends infer T_2 ? T_2 extends (import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "parameters">, "query">> extends infer T_3 ? T_3 extends import("./types/utils.js").NotNever<import("./types/utils.js").FilterKeyOrNever<import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "parameters">, "query">> ? T_3 extends true ? true : import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route>> : never : never) ? T_2 extends true ? [path: Route, body: import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route> : undefined, options?: OptionsType<Schema, "patch", Route, MethodValidStatus> | undefined] : [path: Route, body?: (import("./types/utils.js").NotNever<import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route>> extends true ? import("./types/schemeTypes.js").RouteRequestBody<Schema, "patch", Route> : undefined) | undefined, options?: OptionsType<Schema, "patch", Route, MethodValidStatus> | undefined] : never : never : never : never) => Promise<GetApiResponse<IsNullable<MethodValidStatus> extends true ? ClassValidStatus : NonNullable<MethodValidStatus>, RouteResponsesByStatusCode<Schema, "patch", Route, import("./types/schemeTypes.js").SchemeRouteField<Schema, "patch", Route, "responses">>>>;
/**
* @description Generates a URI for a given API endpoint, including query parameters.
*
* @param method - The HTTP method to use.
* @param path - The API route.
* @param options - Additional options for the request.
* @returns The generated URI as a string.
*/
getUri<Method extends MethodType, Route extends RoutesForMethod<Schema, Method>>(method: Method, path: Route, options?: OptionsType<Schema, Method, Route>): Promise<string>;
/**
* @description Prepares the options and URL for an API request.
*
* @param path - The API route.
* @param options - Additional options for the request.
* @returns An object containing the prepared URL string and new options.
*/
private prepareOptions;
/**
* @description Prepares the API response based on the valid status type.
*
* @param response - The Axios response promise.
* @param options - Options for the request.
* @returns A promise that resolves to the processed API response.
*/
private prepareResponse;
/**
* @description Converts OpenAPI options to Axios request options.
*
* @param options - The options to convert.
* @returns The converted Axios request configuration.
*/
private optionsToAxiosOptions;
/**
* @description Creates a fetcher method for HTTP methods that do not have a request body (e.g., GET, DELETE).
*
* @param method - The HTTP method to create a fetcher for.
* @returns A function that performs the API request.
*/
private factoryWithoutBody;
/**
* @description Creates a fetcher method for HTTP methods that have a request body (e.g., POST, PUT).
*
* @param method - The HTTP method to create a fetcher for.
* @returns A function that performs the API request.
*/
private factoryWithBody;
}