import { HttpAdapter } from "../adapter.d.mts"; import { Axios, AxiosRequestConfig } from "axios"; import { HttpConfig, HttpMethod, HttpRequestOptions } from "../types.d.mts"; import { AxiosFlags } from "./types.d.mts"; import { BaseError, OperationKeys } from "@decaf-ts/db-decorators"; import { Context, MaybeContextualArg, PreparedStatement } from "@decaf-ts/core"; import { Model } from "@decaf-ts/decorator-validation"; import { Constructor } from "@decaf-ts/decoration"; /** * @description Axios implementation of the HTTP adapter * @summary Concrete implementation of HttpAdapter using Axios as the HTTP client. * This adapter provides CRUD operations for RESTful APIs using Axios for HTTP requests. * @template Axios - The Axios client type * @template AxiosRequestConfig - The Axios request configuration type * @template AxiosFlags - The flags type extending HttpFlags * @template Context - The context type for this adapter * @param {Axios} native - The Axios instance * @param {HttpConfig} config - Configuration for the HTTP adapter * @param {string} [alias] - Optional alias for the adapter * @class * @example * ```typescript * import axios from 'axios'; * import { AxiosHttpAdapter } from '@decaf-ts/for-http'; * * const config = { protocol: 'https', host: 'api.example.com' }; * const adapter = new AxiosHttpAdapter(axios.create(), config); * * // Use the adapter with a repository * const userRepo = adapter.getRepository(User); * const user = await userRepo.findById('123'); * ``` * @mermaid * sequenceDiagram * participant Client * participant AxiosHttpAdapter * participant Axios * participant API * * Client->>AxiosHttpAdapter: create(table, id, data) * AxiosHttpAdapter->>AxiosHttpAdapter: url(table) * AxiosHttpAdapter->>Axios: post(url, data) * Axios->>API: HTTP POST Request * API-->>Axios: Response * Axios-->>AxiosHttpAdapter: Response Data * AxiosHttpAdapter-->>Client: Created Resource * * Client->>AxiosHttpAdapter: read(table, id) * AxiosHttpAdapter->>AxiosHttpAdapter: url(table, {id}) * AxiosHttpAdapter->>Axios: get(url) * Axios->>API: HTTP GET Request * API-->>Axios: Response * Axios-->>AxiosHttpAdapter: Response Data * AxiosHttpAdapter-->>Client: Resource Data */ export declare class AxiosHttpAdapter extends HttpAdapter, Context> { constructor(config: HttpConfig, alias?: string); protected getClient(): Axios; toRequest(query: PreparedStatement): AxiosRequestConfig; toRequest(ctx: Context): AxiosRequestConfig; toRequest(query: PreparedStatement, ctx: Context): AxiosRequestConfig; toRequest(method: HttpMethod, url: string, data?: unknown, options?: HttpRequestOptions): AxiosRequestConfig; private toAxiosRequestOptions; /** * @description Sends an HTTP request using Axios * @summary Implementation of the abstract request method from HttpAdapter. * This method uses the Axios instance to send HTTP requests with the provided configuration. * @template V - The response value type * @param {AxiosRequestConfig} details - The Axios request configuration * @return {Promise} A promise that resolves with the response data */ request(details: AxiosRequestConfig, ...args: MaybeContextualArg>): Promise; parseResponse(clazz: Constructor, method: OperationKeys | string, res: any): any; private normalizeResponseBody; parseError(err: Error, ...args: any[]): E; }