import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from 'axios';
import { MaybeGetter } from '../types';
import { MaybeArray } from '../types/utilities';
export type AxiosInstanceSetupHook = (instance: AxiosInstance) => void;
export type PrefectConfig = {
    baseUrl: string;
    token?: string;
};
type ConfigFunction<R, T extends PrefectConfig = PrefectConfig> = (config: T) => R;
export type ApiBaseUrl<T extends PrefectConfig = PrefectConfig> = string | ConfigFunction<string, T>;
export type ApiHeaders<T extends PrefectConfig = PrefectConfig> = RawAxiosRequestHeaders | ConfigFunction<RawAxiosRequestHeaders, T>;
export declare const getPrefectBaseUrl: ApiBaseUrl;
export declare const getPrefectUIHeaders: RawAxiosRequestHeaders;
export declare const getAuthorizationHeaders: ApiHeaders;
export declare class Api<T extends PrefectConfig = PrefectConfig> {
    protected readonly apiConfig: MaybeGetter<T>;
    protected apiHeaders: MaybeArray<ApiHeaders>;
    protected apiBaseUrl: ApiBaseUrl;
    protected routePrefix: string | undefined;
    protected instanceSetupHook: AxiosInstanceSetupHook | null;
    constructor(apiConfig: MaybeGetter<T>, instanceSetupHook?: AxiosInstanceSetupHook | null);
    protected getConfig(): T;
    protected composeBaseUrl(): string;
    protected composeHeaders(): RawAxiosRequestHeaders;
    protected combinePath(route: string | undefined): string;
    protected instance(): AxiosInstance;
    protected get<T, R = AxiosResponse<T>>(route?: string, config?: AxiosRequestConfig): Promise<R>;
    protected delete<T, R = AxiosResponse<T>>(route?: string, config?: AxiosRequestConfig): Promise<R>;
    protected head<T, R = AxiosResponse<T>>(route?: string, config?: AxiosRequestConfig): Promise<R>;
    protected options<T, R = AxiosResponse<T>>(route?: string, config?: AxiosRequestConfig): Promise<R>;
    protected post<T, R = AxiosResponse<T>>(route?: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
    protected put<T, R = AxiosResponse<T>>(route?: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
    protected patch<T, R = AxiosResponse<T>>(route?: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
}
export {};
