UNPKG

molstar

Version:

A comprehensive macromolecular library.

44 lines (43 loc) 2.02 kB
"use strict"; /** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchRetry = void 0; var tslib_1 = require("tslib"); var node_fetch_1 = tslib_1.__importDefault(require("node-fetch")); var retry_if_1 = require("../../../mol-util/retry-if"); var RETRIABLE_NETWORK_ERRORS = [ 'ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN' ]; function isRetriableNetworkError(error) { return error && RETRIABLE_NETWORK_ERRORS.includes(error.code); } function fetchRetry(url, timeout, retryCount, onRetry) { return tslib_1.__awaiter(this, void 0, void 0, function () { var controller, id, signal, result; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: controller = new AbortController(); id = setTimeout(function () { return controller.abort(); }, timeout); signal = controller.signal; return [4 /*yield*/, (0, retry_if_1.retryIf)(function () { return (0, node_fetch_1.default)(url, { signal: signal }); }, { retryThenIf: function (r) { return r.status === 408 /** timeout */ || r.status === 429 /** too many requests */ || (r.status >= 500 && r.status < 600); }, // TODO test retryCatchIf retryCatchIf: function (e) { return isRetriableNetworkError(e); }, onRetry: onRetry, retryCount: retryCount })]; case 1: result = _a.sent(); clearTimeout(id); return [2 /*return*/, result]; } }); }); } exports.fetchRetry = fetchRetry;