'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeChunkedRequest = makeChunkedRequest; function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const http = require('http'); const https = require('https'); function makeChunkedRequest(route, chunks, options, callback) { /** * Given an array of chunks, make a slow request, only writing chunks * after a specified amount of time * * route: string * options: object * method: the method of the request * contentType: the content type of the request * chunkInterval: how long to wait to upload a chunk after the last chunk was flushed * token: the token to make an authorized request from * chunks: chunked body of the request to upload */ const { method, chunkInterval, token, contentType } = options; let httpModule = http; if (route.startsWith('https')) { httpModule = https; } const requestPromise = new Promise((() => { var _ref = _asyncToGenerator(function* (resolve, reject) { let writeTimeout; const req = httpModule.request(route, { method, headers: { authorization: token, 'Content-Type': contentType, 'Content-Length': Buffer.byteLength(chunks.join('')) } }, function (res) { let responseData = ''; res.setEncoding('utf8'); res.on('data', function (chunk) { responseData += chunk; }); res.on('end', function () { resolve({ status: res.statusCode, body: responseData }); }); }); req.on('error', function (e) { if (writeTimeout != null) { clearTimeout(writeTimeout); } reject(e); }); for (let i = 0; i < chunks.length; i++) { yield new Promise(function (resolve) { req.write(chunks[i], function () { writeTimeout = setTimeout(resolve, chunkInterval); }); }); } req.end(); }); return function (_x, _x2) { return _ref.apply(this, arguments); }; })()); requestPromise.then(body => callback(null, body)).catch(callback); }