import { ConfigI } from "#src/config";
export declare enum METHOD {
    GET = "GET",
    POST = "POST",
    PATCH = "PATCH",
    DELETE = "DELETE"
}
/**
 *
 */
export default abstract class API {
    protected readonly config: ConfigI;
    /**
     *
     * @protected
     */
    protected abstract readonly prefix: string;
    /**
     *
     * @param config
     */
    protected constructor(config: ConfigI);
    /**
     *
     * @param url
     * @protected
     */
    protected delete<Response = unknown>(url?: string): Promise<Response>;
    /**
     *=
     * @param url
     * @protected
     */
    protected get<Response = unknown>(url?: string): Promise<Response>;
    /**
     *
     * @param params
     * @param url
     * @protected
     */
    protected get<Response = unknown>(params: ParamsT, url?: string): Promise<Response>;
    /**
     *
     * @param data
     * @param url
     * @protected
     */
    protected patch<Response = unknown>(data: BodyT, url?: string): Promise<Response>;
    /**
     *
     * @param data
     * @param url
     * @protected
     */
    protected post<Response = unknown>(data: BodyT, url?: string): Promise<Response>;
    /**
     *
     * @param url
     * @protected
     */
    protected url(url: string): string;
    /**
     *
     * @param request
     * @protected
     */
    protected abstract request<Response = unknown>(request: RequestI): Promise<Response>;
}
export interface RequestI {
    body?: BodyT;
    method?: METHOD;
    params?: ParamsT;
    url?: string;
}
export declare type BodyT = Record<string, unknown>;
export declare type ParamsT = Record<string, boolean | number | string>;
