import { CallModel, InitModelOf, ObjectWithType } from '../index';
/**
 * Represents a robust "call" that, when it fails, is retried automatically for a specific
 * number of times, before failing ultimately. The call implementation must be provided
 * by a subclass by overriding the _callImpl() method.
 */
export declare abstract class Call implements CallModel, ObjectWithType {
    model: CallModel;
    objectType: string;
    minCallDuration: number;
    callCounter: number;
    retryIntervals: number[];
    maxRetries: number;
    defaultRetryInterval: number;
    deferred: JQuery.Deferred<any>;
    aborted: boolean;
    initialized: boolean;
    pendingCall: JQuery.Promise<any>;
    callTimeoutId: number;
    callStartTimestamp: number;
    type: string;
    name: string;
    uniqueName: string;
    logPrefix: string;
    result: any;
    constructor();
    static GLOBAL_SEQ: number;
    init(model: InitModelOf<this>): void;
    protected _checkInitialized(): void;
    protected _updateLogPrefix(): void;
    protected _resolve(): void;
    protected _reject(): void;
    protected _setResult(...args: any[]): void;
    /**
     * Performs the call with retries.
     *
     * Returns a promise that is ...
     * ... RESOLVED when the call was successful (possibly after some retries).
     * ... REJECTED when the call failed and no more retries are possible.
     *
     *
     *     | (promise)
     *     |   ^
     *     v   |
     *   +--------+           +---------+           .---------------.  (yes)
     *   | call() | . . . . . | _call() | ------>  <    success?     > ------> [RESOLVE]
     *   +--------+           +---------+           '---------------'
     *                             ^                       |(no)
     *                             |                       |
     *                             |                       v
     *                             |                .---------------.  (yes)
     *                             |               <    aborted?     > ------> [REJECT]
     *                             |                '---------------'
     *                             |                       |(no)
     *                             |                       |
     *                             |                       v
     *                             |                .---------------.  (no)
     *                             |               < retry possible? > ------> [REJECT]
     *                             |                '---------------'
     *                             |                       |(yes)
     *                             |        sleep          |
     *                             +-------- %%% ----------+
     */
    call(): JQuery.Promise<any>;
    /**
     * Aborts the call. If the request is currently running, it is aborted (interrupted).
     * If a retry is scheduled, that retry is cancelled.
     *
     * The promise returned by call() is REJECTED.
     */
    abort(): void;
    protected _call(): void;
    /**
     * Performs the actual request.
     */
    protected abstract _callImpl(): JQuery.Promise<any>;
    protected _setResultDone(...args: any[]): void;
    protected _setResultFail(...args: any[]): void;
    protected _onCallDone(...args: any[]): void;
    protected _onCallFail(...args: any[]): void;
    /**
     * Checks if the call can be retried. If a number is returned, a retry is performed with a delay of the corresponding amount of milliseconds.
     * All other values indicate that no retry must be performed. (It is recommended to return 'false' or 'null' in this case.)
     * This method MAY be overridden by a subclass.
     */
    protected _nextRetryImpl(...args: any[]): number | boolean;
    protected _abort(): void;
    protected _abortImpl(): void;
}
//# sourceMappingURL=Call.d.ts.map