import Macroable from '@poppinss/macroable';
import type { Assert } from '@japa/assert';
import { ApiRequest } from './request.js';
import { SetupHandler, TeardownHandler, CookiesSerializer } from './types.js';
/**
 * ApiClient exposes the API to make HTTP requests in context of
 * testing.
 */
export declare class ApiClient extends Macroable {
    #private;
    constructor(baseUrl?: string, assert?: Assert);
    /**
     * Remove all globally registered setup hooks
     */
    static clearSetupHooks(): typeof ApiClient;
    /**
     * Remove all globally registered teardown hooks
     */
    static clearTeardownHooks(): typeof ApiClient;
    /**
     * Clear on request handlers registered using "onRequest"
     * method
     */
    static clearRequestHandlers(): typeof ApiClient;
    /**
     * Register a handler to be invoked everytime a new request
     * instance is created
     */
    static onRequest(handler: (request: ApiRequest) => void): typeof ApiClient;
    /**
     * Register setup hooks. Setup hooks are called before the request
     */
    static setup(handler: SetupHandler): typeof ApiClient;
    /**
     * Register teardown hooks. Teardown hooks are called before the request
     */
    static teardown(handler: TeardownHandler): typeof ApiClient;
    /**
     * Register a custom cookies serializer
     */
    static cookiesSerializer(serailizer: CookiesSerializer): typeof ApiClient;
    /**
     * Create an instance of the request
     */
    request(endpoint: string, method: string): ApiRequest;
    /**
     * Create an instance of the request for GET method
     */
    get(endpoint: string): ApiRequest;
    /**
     * Create an instance of the request for POST method
     */
    post(endpoint: string): ApiRequest;
    /**
     * Create an instance of the request for PUT method
     */
    put(endpoint: string): ApiRequest;
    /**
     * Create an instance of the request for PATCH method
     */
    patch(endpoint: string): ApiRequest;
    /**
     * Create an instance of the request for DELETE method
     */
    delete(endpoint: string): ApiRequest;
    /**
     * Create an instance of the request for HEAD method
     */
    head(endpoint: string): ApiRequest;
    /**
     * Create an instance of the request for OPTIONS method
     */
    options(endpoint: string): ApiRequest;
}
