@gleif-it/vlei-verifier-workflows
Version:
Workflows for vLEI users and vLEI credentials for the vLEI-verifier service
44 lines (43 loc) • 2.03 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.retry = void 0;
const promises_1 = require("timers/promises");
function retry(fn_1) {
return __awaiter(this, arguments, void 0, function* (fn, options = {}) {
const { maxSleep = 1000, minSleep = 10, maxRetries, timeout = 10000, } = options;
const increaseFactor = 50;
let retries = 0;
let cause = null;
const start = Date.now();
while ((options.signal === undefined || options.signal.aborted === false) &&
Date.now() - start < timeout &&
(maxRetries === undefined || retries < maxRetries)) {
try {
const result = yield fn();
return result;
}
catch (err) {
cause = err;
const delay = Math.max(minSleep, Math.min(maxSleep, Math.pow(2, retries) * increaseFactor));
console.log(`Retrying in ${delay}ms`);
retries++;
yield (0, promises_1.setTimeout)(delay, undefined, { signal: options.signal });
}
}
if (!cause) {
cause = new Error(`Failed after ${retries} attempts`);
}
Object.assign(cause, { retries, maxAttempts: maxRetries });
throw cause;
});
}
exports.retry = retry;