import { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse, type RawAxiosRequestHeaders } from "axios";
export type QueryParams = {
    [name: string]: string | number | number[] | boolean | string[] | undefined | null | QueryParams | QueryParams[];
};
export type HeaderParams = Record<string, string | number | undefined | null> | [string, string | number | undefined | null][] | Headers;
export type Server<T> = string & {
    __server__: T;
};
export interface AbstractAxiosConfig {
    axios?: AxiosInstance;
    basePath: string;
    defaultHeaders?: Record<string, string>;
    defaultTimeout?: number;
}
export declare abstract class AbstractAxiosClient {
    protected readonly axios: AxiosInstance;
    protected readonly basePath: string;
    protected readonly defaultHeaders: Record<string, string>;
    protected readonly defaultTimeout: number | undefined;
    protected constructor(config: AbstractAxiosConfig);
    protected _request<R extends AxiosResponse>(opts: AxiosRequestConfig): Promise<R>;
    protected _query(params: QueryParams): string;
    /**
     * Combines headers for a request, with precedence
     * 1. default headers
     * 2. route level header parameters
     * 3. raw request config (escape hatch)
     *
     * following these rules:
     * - header values of `undefined` are skipped
     * - header values of `null` will remove/delete any previously set headers
     *
     * Eg:
     * Passing `Authorization: null` as a parameter, will clear out any
     * default `Authorization` header.
     *
     * But passing `Authorization: undefined` as parameter will fallthrough
     * to the default `Authorization` header.
     *
     * @param paramHeaders
     * @param optsHeaders
     * @protected
     */
    protected _headers(paramHeaders?: HeaderParams, optsHeaders?: AxiosRequestConfig["headers"]): RawAxiosRequestHeaders;
    private setHeaders;
    private headersAsArray;
}
