PHP WebShell

Текущая директория: /opt/BitGoJS/modules/express/dist/src

Просмотр файла: retryPromise.js

"use strict";
/**
 * Thrown in `retryPromise()`
 *
 * @prettier
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.retryPromise = exports.ErrorMaxRetriesExceededError = void 0;
class ErrorMaxRetriesExceededError extends Error {
    constructor(maxTries) {
        super(`giving up after reaching max retry limit of ${maxTries}`);
    }
}
exports.ErrorMaxRetriesExceededError = ErrorMaxRetriesExceededError;
/**
 * Retries a promise (like a request) if it returns with 'ECONNREFUSED'. Retries are delayed with an exponential backoff.
 * @param {Function} func - Promise to execute. When it throws an error, it is called and passed to onError
 * @param {Function} onError - Error handler. Called with error as argument.
 *                             If an error should not be retried, the handler should re-throw the passed error.
 * @param params
 * @param {Number}   params.retryLimit - the maximum number of retries to attempt before giving up.
 */
async function retryPromise(func, onError = () => ({}), params = { retryLimit: 3 }) {
    let tryCount = 0;
    while (tryCount < params.retryLimit) {
        tryCount += 1;
        try {
            return await func();
        }
        catch (err) {
            if (err.code === 'ECONNREFUSED') {
                onError(err, tryCount);
            }
            else {
                throw new Error(err);
            }
        }
        // if we are going to make another attempt, delay first with exponential backoff
        if (tryCount < params.retryLimit) {
            const secondsToWait = 2 ** (tryCount - 1) + Math.random();
            await new Promise((res) => setTimeout(res, Math.round(secondsToWait * 1000)));
        }
    }
    throw new ErrorMaxRetriesExceededError(params.retryLimit);
}
exports.retryPromise = retryPromise;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnlQcm9taXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JldHJ5UHJvbWlzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBRUgsTUFBYSw0QkFBNkIsU0FBUSxLQUFLO0lBQ3JELFlBQVksUUFBZ0I7UUFDMUIsS0FBSyxDQUFDLCtDQUErQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRjtBQUpELG9FQUlDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQ2hDLElBQXNCLEVBQ3RCLFVBQWtELEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzVELFNBQWlDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRTtJQUVsRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFakIsT0FBTyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNuQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ2QsSUFBSTtZQUNGLE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUNyQjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN4QjtpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Y7UUFFRCxnRkFBZ0Y7UUFDaEYsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNoQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9FO0tBQ0Y7SUFFRCxNQUFNLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUEzQkQsb0NBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaHJvd24gaW4gYHJldHJ5UHJvbWlzZSgpYFxuICpcbiAqIEBwcmV0dGllclxuICovXG5cbmV4cG9ydCBjbGFzcyBFcnJvck1heFJldHJpZXNFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtYXhUcmllczogbnVtYmVyKSB7XG4gICAgc3VwZXIoYGdpdmluZyB1cCBhZnRlciByZWFjaGluZyBtYXggcmV0cnkgbGltaXQgb2YgJHttYXhUcmllc31gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXMgYSBwcm9taXNlIChsaWtlIGEgcmVxdWVzdCkgaWYgaXQgcmV0dXJucyB3aXRoICdFQ09OTlJFRlVTRUQnLiBSZXRyaWVzIGFyZSBkZWxheWVkIHdpdGggYW4gZXhwb25lbnRpYWwgYmFja29mZi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBQcm9taXNlIHRvIGV4ZWN1dGUuIFdoZW4gaXQgdGhyb3dzIGFuIGVycm9yLCBpdCBpcyBjYWxsZWQgYW5kIHBhc3NlZCB0byBvbkVycm9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkVycm9yIC0gRXJyb3IgaGFuZGxlci4gQ2FsbGVkIHdpdGggZXJyb3IgYXMgYXJndW1lbnQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYW4gZXJyb3Igc2hvdWxkIG5vdCBiZSByZXRyaWVkLCB0aGUgaGFuZGxlciBzaG91bGQgcmUtdGhyb3cgdGhlIHBhc3NlZCBlcnJvci5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSB7TnVtYmVyfSAgIHBhcmFtcy5yZXRyeUxpbWl0IC0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdCBiZWZvcmUgZ2l2aW5nIHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cnlQcm9taXNlPFQ+KFxuICBmdW5jOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBvbkVycm9yOiAoZXJyOiBFcnJvciwgdHJ5Q291bnQ6IG51bWJlcikgPT4gdm9pZCA9ICgpID0+ICh7fSksXG4gIHBhcmFtczogeyByZXRyeUxpbWl0OiBudW1iZXIgfSA9IHsgcmV0cnlMaW1pdDogMyB9XG4pOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHRyeUNvdW50ID0gMDtcblxuICB3aGlsZSAodHJ5Q291bnQgPCBwYXJhbXMucmV0cnlMaW1pdCkge1xuICAgIHRyeUNvdW50ICs9IDE7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmdW5jKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyLCB0cnlDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgZ29pbmcgdG8gbWFrZSBhbm90aGVyIGF0dGVtcHQsIGRlbGF5IGZpcnN0IHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxuICAgIGlmICh0cnlDb3VudCA8IHBhcmFtcy5yZXRyeUxpbWl0KSB7XG4gICAgICBjb25zdCBzZWNvbmRzVG9XYWl0ID0gMiAqKiAodHJ5Q291bnQgLSAxKSArIE1hdGgucmFuZG9tKCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzKSA9PiBzZXRUaW1lb3V0KHJlcywgTWF0aC5yb3VuZChzZWNvbmRzVG9XYWl0ICogMTAwMCkpKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3JNYXhSZXRyaWVzRXhjZWVkZWRFcnJvcihwYXJhbXMucmV0cnlMaW1pdCk7XG59XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!