PHP WebShell
Текущая директория: /opt/BitGoJS/modules/express/dist
Просмотр файла: retryPromise.js
"use strict";
/**
* Thrown in `retryPromise()`
*
* @prettier
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.ErrorMaxRetriesExceededError = void 0;
exports.retryPromise = retryPromise;
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);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnlQcm9taXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JldHJ5UHJvbWlzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBZ0JILG9DQTJCQztBQXpDRCxNQUFhLDRCQUE2QixTQUFRLEtBQUs7SUFDckQsWUFBWSxRQUFnQjtRQUMxQixLQUFLLENBQUMsK0NBQStDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBSkQsb0VBSUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FDaEMsSUFBc0IsRUFDdEIsVUFBa0QsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDNUQsU0FBaUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO0lBRWxELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVqQixPQUFPLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUVELGdGQUFnRjtRQUNoRixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhyb3duIGluIGByZXRyeVByb21pc2UoKWBcbiAqXG4gKiBAcHJldHRpZXJcbiAqL1xuXG5leHBvcnQgY2xhc3MgRXJyb3JNYXhSZXRyaWVzRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWF4VHJpZXM6IG51bWJlcikge1xuICAgIHN1cGVyKGBnaXZpbmcgdXAgYWZ0ZXIgcmVhY2hpbmcgbWF4IHJldHJ5IGxpbWl0IG9mICR7bWF4VHJpZXN9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWVzIGEgcHJvbWlzZSAobGlrZSBhIHJlcXVlc3QpIGlmIGl0IHJldHVybnMgd2l0aCAnRUNPTk5SRUZVU0VEJy4gUmV0cmllcyBhcmUgZGVsYXllZCB3aXRoIGFuIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIC0gUHJvbWlzZSB0byBleGVjdXRlLiBXaGVuIGl0IHRocm93cyBhbiBlcnJvciwgaXQgaXMgY2FsbGVkIGFuZCBwYXNzZWQgdG8gb25FcnJvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25FcnJvciAtIEVycm9yIGhhbmRsZXIuIENhbGxlZCB3aXRoIGVycm9yIGFzIGFyZ3VtZW50LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGFuIGVycm9yIHNob3VsZCBub3QgYmUgcmV0cmllZCwgdGhlIGhhbmRsZXIgc2hvdWxkIHJlLXRocm93IHRoZSBwYXNzZWQgZXJyb3IuXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0ge051bWJlcn0gICBwYXJhbXMucmV0cnlMaW1pdCAtIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQgYmVmb3JlIGdpdmluZyB1cC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5UHJvbWlzZTxUPihcbiAgZnVuYzogKCkgPT4gUHJvbWlzZTxUPixcbiAgb25FcnJvcjogKGVycjogRXJyb3IsIHRyeUNvdW50OiBudW1iZXIpID0+IHZvaWQgPSAoKSA9PiAoe30pLFxuICBwYXJhbXM6IHsgcmV0cnlMaW1pdDogbnVtYmVyIH0gPSB7IHJldHJ5TGltaXQ6IDMgfVxuKTogUHJvbWlzZTxUPiB7XG4gIGxldCB0cnlDb3VudCA9IDA7XG5cbiAgd2hpbGUgKHRyeUNvdW50IDwgcGFyYW1zLnJldHJ5TGltaXQpIHtcbiAgICB0cnlDb3VudCArPSAxO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZnVuYygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRUZVU0VEJykge1xuICAgICAgICBvbkVycm9yKGVyciwgdHJ5Q291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGdvaW5nIHRvIG1ha2UgYW5vdGhlciBhdHRlbXB0LCBkZWxheSBmaXJzdCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBpZiAodHJ5Q291bnQgPCBwYXJhbXMucmV0cnlMaW1pdCkge1xuICAgICAgY29uc3Qgc2Vjb25kc1RvV2FpdCA9IDIgKiogKHRyeUNvdW50IC0gMSkgKyBNYXRoLnJhbmRvbSgpO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIE1hdGgucm91bmQoc2Vjb25kc1RvV2FpdCAqIDEwMDApKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yTWF4UmV0cmllc0V4Y2VlZGVkRXJyb3IocGFyYW1zLnJldHJ5TGltaXQpO1xufVxuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!