1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.sleep = sleep;
|
7 | exports.asyncRetry = asyncRetry;
|
8 |
|
9 | async function sleep(periodMs = 0) {
|
10 | return await new Promise(r => setTimeout(r, periodMs));
|
11 | }
|
12 | /**
|
13 | * Retries the execution of an async function
|
14 | */
|
15 | // $FlowIgnore
|
16 |
|
17 |
|
18 | async function asyncRetry(asyncFunc, options = {}) {
|
19 | // set defaults
|
20 | options.maxRetries = typeof options.maxRetries === 'undefined' ? 2 : options.maxRetries;
|
21 | if (typeof options.maxRetries !== 'number') throw new Error(`options.maxRetries is of an invalid type`);
|
22 | let triesExecuted = 0;
|
23 | let nextBackoffMs = options.expoBackoffMs;
|
24 | /* eslint-disable no-constant-condition */
|
25 |
|
26 | while (true) {
|
27 | try {
|
28 | triesExecuted++;
|
29 | return await asyncFunc(triesExecuted);
|
30 | } catch (err) {
|
31 | if (options.asyncErrorHandler) {
|
32 | await options.asyncErrorHandler(err, triesExecuted);
|
33 | }
|
34 |
|
35 | if (triesExecuted > options.maxRetries) {
|
36 | if (typeof err === 'object') {
|
37 | err._triesExecuted = triesExecuted;
|
38 | }
|
39 |
|
40 | throw err;
|
41 | }
|
42 |
|
43 | if (nextBackoffMs) {
|
44 | await sleep(nextBackoffMs);
|
45 | nextBackoffMs *= 1.5;
|
46 | }
|
47 | }
|
48 | }
|
49 | }
|
50 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3luY1V0aWxzLmpzIl0sIm5hbWVzIjpbInNsZWVwIiwicGVyaW9kTXMiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJhc3luY1JldHJ5IiwiYXN5bmNGdW5jIiwib3B0aW9ucyIsIm1heFJldHJpZXMiLCJFcnJvciIsInRyaWVzRXhlY3V0ZWQiLCJuZXh0QmFja29mZk1zIiwiZXhwb0JhY2tvZmZNcyIsImVyciIsImFzeW5jRXJyb3JIYW5kbGVyIiwiX3RyaWVzRXhlY3V0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUU8sZUFBZUEsS0FBZixDQUFxQkMsUUFBZ0IsR0FBRyxDQUF4QyxFQUEyQztBQUNoRCxTQUFPLE1BQU0sSUFBSUMsT0FBSixDQUFZQyxDQUFDLElBQUlDLFVBQVUsQ0FBQ0QsQ0FBRCxFQUFJRixRQUFKLENBQTNCLENBQWI7QUFDRDtBQUVEOzs7QUFHQTs7O0FBQ08sZUFBZUksVUFBZixDQUE2QkMsU0FBN0IsRUFBaUZDLE9BQTBCLEdBQUcsRUFBOUcsRUFBOEg7QUFFbkk7QUFDQUEsRUFBQUEsT0FBTyxDQUFDQyxVQUFSLEdBQXNCLE9BQU9ELE9BQU8sQ0FBQ0MsVUFBZixLQUE4QixXQUEvQixHQUE4QyxDQUE5QyxHQUFrREQsT0FBTyxDQUFDQyxVQUEvRTtBQUVBLE1BQUksT0FBT0QsT0FBTyxDQUFDQyxVQUFmLEtBQThCLFFBQWxDLEVBQ0UsTUFBTSxJQUFJQyxLQUFKLENBQVcsMENBQVgsQ0FBTjtBQUVGLE1BQUlDLGFBQWEsR0FBRyxDQUFwQjtBQUNBLE1BQUlDLGFBQWEsR0FBR0osT0FBTyxDQUFDSyxhQUE1QjtBQUNBOztBQUNBLFNBQU8sSUFBUCxFQUFhO0FBQ1gsUUFBSTtBQUNGRixNQUFBQSxhQUFhO0FBQ2IsYUFBTyxNQUFNSixTQUFTLENBQUNJLGFBQUQsQ0FBdEI7QUFDRCxLQUhELENBR0UsT0FBT0csR0FBUCxFQUFZO0FBQ1osVUFBSU4sT0FBTyxDQUFDTyxpQkFBWixFQUErQjtBQUM3QixjQUFNUCxPQUFPLENBQUNPLGlCQUFSLENBQTBCRCxHQUExQixFQUErQkgsYUFBL0IsQ0FBTjtBQUNEOztBQUNELFVBQUlBLGFBQWEsR0FBR0gsT0FBTyxDQUFDQyxVQUE1QixFQUF3QztBQUN0QyxZQUFJLE9BQU9LLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUMzQkEsVUFBQUEsR0FBRyxDQUFDRSxjQUFKLEdBQXFCTCxhQUFyQjtBQUNEOztBQUNELGNBQU1HLEdBQU47QUFDRDs7QUFDRCxVQUFJRixhQUFKLEVBQW1CO0FBQ2pCLGNBQU1YLEtBQUssQ0FBQ1csYUFBRCxDQUFYO0FBQ0FBLFFBQUFBLGFBQWEsSUFBSSxHQUFqQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcblxudHlwZSBBc3luY1JldHJ5T3B0aW9ucyA9IHtcbiAgbWF4UmV0cmllcz86ID9udW1iZXIsXG4gIGV4cG9CYWNrb2ZmTXM/OiA/bnVtYmVyLFxuICBhc3luY0Vycm9ySGFuZGxlcj86ID8oZXJyOiBFcnJvciwgdHJpZXNFeGVjdXRlZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChwZXJpb2RNczogbnVtYmVyID0gMCkge1xuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIHBlcmlvZE1zKSlcbn1cblxuLyoqXG4gKiBSZXRyaWVzIHRoZSBleGVjdXRpb24gb2YgYW4gYXN5bmMgZnVuY3Rpb25cbiAqL1xuLy8gJEZsb3dJZ25vcmVcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1JldHJ5PFQ+KGFzeW5jRnVuYzogKHRyaWVzRXhlY3V0ZWQ/OiA/bnVtYmVyKSA9PiBQcm9taXNlPFQ+LCBvcHRpb25zOiBBc3luY1JldHJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxUPiB7XG5cbiAgLy8gc2V0IGRlZmF1bHRzXG4gIG9wdGlvbnMubWF4UmV0cmllcyA9ICh0eXBlb2Ygb3B0aW9ucy5tYXhSZXRyaWVzID09PSAndW5kZWZpbmVkJykgPyAyIDogb3B0aW9ucy5tYXhSZXRyaWVzXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm1heFJldHJpZXMgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBFcnJvcihgb3B0aW9ucy5tYXhSZXRyaWVzIGlzIG9mIGFuIGludmFsaWQgdHlwZWApXG5cbiAgbGV0IHRyaWVzRXhlY3V0ZWQgPSAwXG4gIGxldCBuZXh0QmFja29mZk1zID0gb3B0aW9ucy5leHBvQmFja29mZk1zXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICB0cmllc0V4ZWN1dGVkKytcbiAgICAgIHJldHVybiBhd2FpdCBhc3luY0Z1bmModHJpZXNFeGVjdXRlZClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFzeW5jRXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMuYXN5bmNFcnJvckhhbmRsZXIoZXJyLCB0cmllc0V4ZWN1dGVkKVxuICAgICAgfVxuICAgICAgaWYgKHRyaWVzRXhlY3V0ZWQgPiBvcHRpb25zLm1heFJldHJpZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZXJyLl90cmllc0V4ZWN1dGVkID0gdHJpZXNFeGVjdXRlZFxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgICAgaWYgKG5leHRCYWNrb2ZmTXMpIHtcbiAgICAgICAgYXdhaXQgc2xlZXAobmV4dEJhY2tvZmZNcylcbiAgICAgICAgbmV4dEJhY2tvZmZNcyAqPSAxLjVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXX0= |
\ | No newline at end of file |