UNPKG

loadmill

Version:

A node.js module for running load tests and functional tests on loadmill.com

69 lines (68 loc) 2.93 kB
"use strict"; exports.__esModule = true; exports.HttpMethods = exports.sendHttpRequest = void 0; var tslib_1 = require("tslib"); var superagent = require("superagent"); var DEFAULT_TIMEOUT_MS = 30000; // 30 seconds var RETRY_DELAY_MS = 1000; // 1 second var sendHttpRequest = function (options) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var err_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 6]); return [4 /*yield*/, _executeRequest(options)]; case 1: return [2 /*return*/, _a.sent()]; case 2: err_1 = _a.sent(); console.error("Error during " + (options.method || HttpMethods.GET).toUpperCase() + " request to " + options.url + ":", err_1); if (!_shouldRetry(err_1)) return [3 /*break*/, 5]; console.log("Retrying " + (options.method || HttpMethods.GET).toUpperCase() + " request to " + options.url + "..."); return [4 /*yield*/, _delay(RETRY_DELAY_MS)]; case 3: _a.sent(); return [4 /*yield*/, _executeRequest(options)]; case 4: return [2 /*return*/, _a.sent()]; case 5: throw err_1; case 6: return [2 /*return*/]; } }); }); }; exports.sendHttpRequest = sendHttpRequest; var _executeRequest = function (options) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var _a, method, url, token, query, body, request; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: _a = options.method, method = _a === void 0 ? HttpMethods.GET : _a, url = options.url, token = options.token, query = options.query, body = options.body; request = superagent[method](url) .auth(token, '') .timeout(DEFAULT_TIMEOUT_MS); if (query) { request = request.query(query); } if (body) { request = request.send(body); } return [4 /*yield*/, request]; case 1: return [2 /*return*/, _b.sent()]; } }); }); }; // retry on network issues var _shouldRetry = function (err) { return err.timeout || err.code === 'ECONNREFUSED' || err.code === 'ECONNABORTED' || err.code === 'ETIMEDOUT' || err.code === 'ECONNRESET'; }; var _delay = function (ms) { return new Promise(function (resolve) { return setTimeout(resolve, ms); }); }; var HttpMethods; (function (HttpMethods) { HttpMethods["GET"] = "get"; HttpMethods["POST"] = "post"; HttpMethods["PUT"] = "put"; HttpMethods["DELETE"] = "delete"; HttpMethods["PATCH"] = "patch"; })(HttpMethods = exports.HttpMethods || (exports.HttpMethods = {}));