import { AccessToken, Ticket, TicketStorage, TokenStorage } from '../storage';
import { AxiosRequestConfig } from 'axios';
export type APIConfig = {
    baseURL: string;
    accessTokenKey?: string;
};
export type Logger = (message: any, ...args: any[]) => void;
/**
 * @internal
 */
export declare abstract class APIBase {
    readonly config: Required<APIConfig>;
    private tokenStorage;
    private ticketStorage;
    private axiosInstance;
    logger: Logger;
    constructor(config: APIConfig, tokenStorage?: TokenStorage, ticketStorage?: TicketStorage);
    request(opts: AxiosRequestConfig & {
        ignoreAccessToken?: boolean;
    }, retry?: number): Promise<any>;
    abstract resolveAccessToken(): Promise<{
        access_token: string;
        expires_in: number;
    }>;
    getAccessToken(): Promise<AccessToken>;
    ensureAccessToken(): Promise<AccessToken>;
    abstract resolveTicket(type: string): Promise<{
        ticket: string;
        expires_in: number;
    }>;
    getTicket(type: string): Promise<Ticket>;
    ensureTicket(type: string): Promise<Ticket>;
}
