interface EffectCallback<T> {
    callback: (...args: any) => T | Promise<T>;
    args?: any[];
    override?: boolean;
}
type RetryOptionsSync<OnSuccess, OnFailure> = {
    onSuccess?: EffectCallback<OnSuccess>;
    onFailure?: EffectCallback<OnFailure>;
};
type RetryOptionsAsync<OnSuccess, OnFailure> = {
    delay?: number;
} & RetryOptionsSync<OnSuccess, OnFailure>;
type RetrierOptions<OnSuccess, OnFailure> = {
    maxRetries?: number;
} & RetryOptionsAsync<OnSuccess, OnFailure>;
/**
 * The Retrier class provides methods to retry operations synchronously and asynchronously
 * with a specified number of retries.
 *
 * @see [source](https://github.com/Poomcha/retrier)
 *
 */
declare class Retrier {
    protected _maxRetries: number;
    protected readonly _maxRetriesDefault: number;
    protected _delay: number;
    protected readonly _delayDefault: number;
    protected _onSuccess: EffectCallback<any> | undefined;
    protected _onFailure: EffectCallback<any> | undefined;
    /**
     * Constructs a new Retrier instance with optional configuration options.
     * @constructor
     *
     * @param options - Optional configuration options.
     * @param options.maxRetries - The maximum number of retries.
     * @param options.delay - Delay between two retries in ms.
     * @param options.onSuccess - onSuccess callback, can override default return.
     * @param options.onFailure - onFailure callback, can override default error throwing.
     * @throws Will throw an error if the maxRetries or delay are not valid positive integer
     * [0, Number.MAX_SAFE_INTEGER].
     */
    constructor(options?: RetrierOptions<any, any>);
    /**
     * Gets the maximum number of retries.
     *
     * @returns The maximum number of retries.
     */
    getMaxRetries(): number;
    /**
     * Gets the delay between retries.
     *
     * @returns Delay between retries.
     */
    getDelay(): number;
    /**
     * Get the _onSuccess private member.
     *
     * @returns _onSuccess member
     */
    getOnSuccess(): EffectCallback<any> | undefined;
    /**
     * Get the _onFailure private member.
     *
     * @returns _onFailure member.
     */
    getOnFailure(): EffectCallback<any> | undefined;
    /**
     * Sets the maximum number of retries.
     *
     * @param n - The number of retries to set.
     * @throws Will throw an error if the number is not a valid positive integer.
     */
    setMaxRetries(n: number): void;
    /**
     * Sets the delay between retries.
     *
     * @param delay - Delay between retries.
     * @throws Will throw an error if the number is not a valid positive integer
     */
    setDelay(delay: number): void;
    /**
     * Sets the _onSuccess member
     *
     * @param onSuccess
     * @param onSuccess.callback Callback to call on success
     * @param onSuccess.args Arguments to pass to the callback
     * @param onSuccess.override If true, override default behaviour of retry functions
     */
    setOnSuccess<T>(onSuccess: EffectCallback<T>): void;
    /**
     * Sets the _onFailure member
     *
     * @param onFailure
     * @param onFailure.callback Callback to call on failure
     * @param onFailure.args Arguments to pass to the callback
     * @param onFailure.override If true, override default behaviour of retry functions
     */
    setOnFailure<T>(onFailure: EffectCallback<T>): void;
    /**
     * Retries a synchronous operation, with a specified number of retries.
     * Returns the result of the operation as soon as it succeed, or throws
     * operation's error.
     * Give access to onSuccess and onFailure optionnal handlers to handle
     * success or failure.
     * onSuccess and onFailure are given operation result as first argument.
     *
     * @see [source](https://github.com/Poomcha/retrier)
     *
     *
     * @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
     * @param callback - Function to retry.
     * @param args - Optionnal arguments for callback.
     *
     *
     * @param options - Optionnal options.
     *
     *
     * @param options.onSuccess -
     * @param options.onSuccess.callback - Function to run on success.
     * @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
     *
     * @param options.Failure -
     * @param options.onFailure.callback - Function to run on failure.
     * @param options.onFailure.args - Optionnal arguments for onFailure.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
     *
     *
     * @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
     *
     *
     * @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
     */
    static retryStaticSync<T, OnSuccess, OnFailure>(maxRetries: number, callback: (...args: any[]) => T, args?: any[], options?: RetryOptionsSync<OnSuccess, OnFailure>): T | OnSuccess | OnFailure;
    /**
     * Retries an asynchronous operation, with a specified number of retries.
     * Returns the result of the operation as soon as it succeed, or throws
     * operation's error.
     * Give access to onSuccess and onFailure optionnal handlers to handle
     * success or failure.
     * onSuccess and onFailure are given operation result as first argument.
     *
     * @see [source](https://github.com/Poomcha/retrier)
     *
     * @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
     * @param callback - Function to retry.
     * @param args - Optionnal arguments for callback.
     *
     *
     * @param options - Optionnal options.
     *
     * @param options.delay - Positive integer, delay between 2 retry.
     *
     * @param options.onSuccess -
     * @param options.onSuccess.callback - Function to run on success.
     * @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
     *
     * @param options.Failure -
     * @param options.onFailure.callback - Function to run on failure.
     * @param options.onFailure.args - Optionnal arguments for onFailure.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
     *
     *
     * @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
     *
     *
     * @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
     */
    static retryStaticAsync<T, OnSuccess, OnFailure>(maxRetries: number, callback: (...args: any[]) => Promise<T>, args?: any[], options?: RetryOptionsAsync<OnSuccess, OnFailure>): Promise<T | OnSuccess | OnFailure>;
    /**
     * Retries a synchronous operation, with a specified number of retries.
     * Returns the result of the operation as soon as it succeed, or throws
     * operation's error.
     * Give access to onSuccess and onFailure optionnal handlers to handle
     * success or failure.
     * onSuccess and onFailure are given operation result as first argument.
     *
     * @see [source](https://github.com/Poomcha/retrier)
     *
     *
     * @param callback - Function to retry.
     * @param args - Optionnal arguments for callback.
     *
     *
     * @param options - Optionnal options, overule instance configuration.
     *
     * @param options.maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
     *
     * @param options.onSuccess -
     * @param options.onSuccess.callback - Function to run on success.
     * @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
     *
     * @param options.Failure -
     * @param options.onFailure.callback - Function to run on failure.
     * @param options.onFailure.args - Optionnal arguments for onFailure.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
     *
     *
     * @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
     *
     *
     * @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
     */
    retrySync<T, OnSuccess, OnFailure>(callback: (...args: any[]) => T, args?: any[], options?: RetrierOptions<OnSuccess, OnFailure>): T | OnSuccess | OnFailure;
    /**
     * Retries an asynchronous operation, with a specified number of retries.
     * Returns the result of the operation as soon as it succeed, or throws
     * operation's error.
     * Give access to onSuccess and onFailure optionnal handlers to handle
     * success or failure.
     * onSuccess and onFailure are given operation result as first argument.
     *
     * @see [source](https://github.com/Poomcha/retrier)
     *
     * @param callback - Function to retry.
     * @param args - Optionnal arguments for callback.
     *
     *
     * @param options - Optionnal options.
     *
     * @param options.maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
     *
     * @param options.delay - Positive integer, delay between 2 retry.
     *
     * @param options.onSuccess -
     * @param options.onSuccess.callback - Function to run on success.
     * @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
     *
     * @param options.Failure -
     * @param options.onFailure.callback - Function to run on failure.
     * @param options.onFailure.args - Optionnal arguments for onFailure.callback,
     *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
     * @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
     *
     *
     * @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
     *
     *
     * @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
     */
    retryAsync<T, OnSuccess, OnFailure>(callback: (...args: any[]) => Promise<T>, args?: any[], options?: RetrierOptions<OnSuccess, OnFailure>): Promise<T | OnSuccess | OnFailure>;
    /**
     * Internal method to retry a synchronous operation.
     *
     * @param callback - The callback function to retry.
     * @param retry - The current retry count.
     * @param args - Optional arguments to pass to the callback.
     * @param options - Optional retry options.
     * @returns The result of the callback function.
     * @throws Will throw an error if all retries fail.
     */
    private static _retrySync;
    /**
     * Internal method to retry an asynchronous operation.
     *
     * @param callback - The callback function to retry.
     * @param retry - The current retry count.
     * @param args - Optional arguments to pass to the callback.
     * @param options - Optional retry options.
     * @returns A promise that resolves to the result of the callback function.
     * @throws Will throw an error if all retries fail.
     */
    private static _retryAsync;
    /**
     * Internal method to set options configuration for non static sync methods
     *
     * @param options
     */
    private makeOptionsSync;
    /**
     * Internal method to set options configuration for non static async methods
     *
     * @param options
     */
    private makeOptionsAsync;
}

/**
 * Retries a synchronous operation, with a specified number of retries.
 * Returns the result of the operation as soon as it succeed, or throws
 * operation's error.
 * Give access to onSuccess and onFailure optionnal handlers to handle
 * success or failure.
 * onSuccess and onFailure are given operation result as first argument.
 *
 * @see [source](https://github.com/Poomcha/retrier)
 *
 *
 * @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
 * @param callback - Function to retry.
 * @param args - Optionnal arguments for callback.
 *
 *
 * @param options - Optionnal options.
 *
 *
 * @param options.onSuccess -
 * @param options.onSuccess.callback - Function to run on success.
 * @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
 *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
 * @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
 *
 * @param options.Failure -
 * @param options.onFailure.callback - Function to run on failure.
 * @param options.onFailure.args - Optionnal arguments for onFailure.callback,
 *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
 * @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
 *
 *
 * @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
 *
 *
 * @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
 */
declare const retrySync: typeof Retrier.retryStaticSync;
/**
 * Retries an asynchronous operation, with a specified number of retries.
 * Returns the result of the operation as soon as it succeed, or throws
 * operation's error.
 * Give access to onSuccess and onFailure optionnal handlers to handle
 * success or failure.
 * onSuccess and onFailure are given operation result as first argument.
 *
 * @see [source](https://github.com/Poomcha/retrier)
 *
 * @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
 * @param callback - Function to retry.
 * @param args - Optionnal arguments for callback.
 *
 *
 * @param options - Optionnal options.
 *
 * @param options.delay - Positive integer, delay between 2 retry.
 *
 * @param options.onSuccess -
 * @param options.onSuccess.callback - Function to run on success.
 * @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
 *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
 * @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
 *
 * @param options.Failure -
 * @param options.onFailure.callback - Function to run on failure.
 * @param options.onFailure.args - Optionnal arguments for onFailure.callback,
 *                                 first argument will always be global callback result as <code>[res, ...args]</code>.
 * @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
 *
 *
 * @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
 *
 *
 * @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
 */
declare const retryAsync: typeof Retrier.retryStaticAsync;

export { Retrier, retryAsync, retrySync };
