export declare type RetrySystemEventMapping = {
    error: Error;
    retry: {
        error: Error;
        countdown: number;
    };
    "before-run": void;
    "after-run": void;
};
export declare type RetrySystemEventName = keyof RetrySystemEventMapping;
declare type Callback<T> = () => Promise<T>;
declare type ParamCallback<P, T> = (p: P) => T;
export declare class RetrySystem {
    private delayMs;
    private readonly event;
    constructor(delayMs: number);
    get delay(): number;
    /**
     * handle when some event occurred. All possible event listed below
     *
     * 1. `before-run` - execute immediately when call try()
     * 2. `after-run`  - execute if and only if try callback is success
     * 3. `retry`      - execute everytime object has retry to execute callback
     *                 - parameter is object {countdown: number, error: Error}
     * 4. `error`      - execute when try() reject the result and finish retry but still not success
     *                 - parameter is Error
     *
     * @param type event type
     * @param cb callback when event occurred
     */
    on<K extends RetrySystemEventName, T extends RetrySystemEventMapping[K]>(type: K, cb: ParamCallback<T, void>): void;
    /**
     * apply new delay time to current object
     *
     * @param ms input delay time in millisecond
     */
    updateTime(ms: number): void;
    try<T>(cb: Callback<T>, limit?: number): Promise<T>;
}
export {};
//# sourceMappingURL=RetrySystem.d.ts.map