import MagicEmitter from "./MagicEmitter";
export declare const defaultRequestTimeout = 100;
export declare const minimumRequestTimeout = 50;
export type TOrArrayOfT<T> = T | T[];
export interface Data<T, NOT_FOUND = never> {
    data: T[];
    not_found?: NOT_FOUND[];
}
export interface List<T, NOT_FOUND = never> extends Data<T, NOT_FOUND> {
    object: "list";
    has_more: boolean;
    next_page: string | null;
    total_cards: string | null;
    warnings: string[];
}
export interface ApiCatalog extends Data<string> {
}
export interface SearchError extends Error {
    object: "error";
    code: string;
    status: number;
    details: string;
    warnings?: string[];
    attempts: number;
}
export interface RetryStrategy {
    attempts: number;
    timeout?: number;
    /**
     * Whether even `not_found` and `bad_request` errors should be retried.
     * @deprecated Don't use this, this is for unit tests
     */
    forced?: boolean;
    canRetry?(error: SearchError): boolean;
}
export default class MagicQuerier {
    static lastQuery: number;
    static retry: RetryStrategy;
    static agent?: string;
    static timeout: number;
    static requestCount: number;
    protected query<T>(apiPath: TOrArrayOfT<string | number | undefined>, query?: {
        [key: string]: any;
    }, post?: any): Promise<T>;
    protected queryPage<T>(emitter: MagicEmitter<T>, apiPath: string, query: any, page?: number): Promise<void>;
    private tryQuery;
    private queryFetch;
    private queryAxios;
    private canRetry;
}
