UNPKG

@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
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; }