import APIResponse from "../responses/APIResponse";
export default class RequestQueue {
    private static queue;
    private static running;
    /**
     * Add a request to the queue.
     * Requests are processed automatically, in the order they were added.
     * @param {string} requestInfo Target URL
     * @param {RequestInit} requestInit Additional request data
     * @param {number} timeout Timeout before the next request
     * @returns
     */
    static add(requestInfo: string, requestInit?: RequestInit, timeout?: number): Promise<QueueResponse>;
    /**
     * Begins queue execution, if it's not running already
     */
    private static run;
}
/**
 * Response received from the API.
 * Data is in a raw format, and likely needs to be reformatted
 */
export interface QueueResponse {
    status: ResponseStatus;
    data: any;
}
/**
 * Formatted variant of `QueueResponse`.
 * Data has been reformatted to fit the APIResponse interface
 */
export interface FormattedResponse<T extends APIResponse> extends GenericResponse<T> {
    data: T[];
}
export interface GenericResponse<T> extends QueueResponse {
    data: T[];
}
/**
 * Basic response status.
 * Should accompany every API response.
 */
export interface ResponseStatus {
    /** HTTP Response code */
    code: number;
    /** URL to which the request is made */
    url: string | null;
    /** Optional message, clarifying the HTTP code */
    message?: string;
    /** Extra data being passed in the response */
    extra?: string;
}
