UNPKG

evtjs

Version:

Javascript API Bindings for the everiToken blockchain.

194 lines (153 loc) 7.56 kB
"use strict"; var _regenerator = require("babel-runtime/regenerator"); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator"); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _promise = require("babel-runtime/core-js/promise"); var _promise2 = _interopRequireDefault(_promise); var _typeof2 = require("babel-runtime/helpers/typeof"); var _typeof3 = _interopRequireDefault(_typeof2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var logger = require("./logger"); var httpModule = undefined; var httpsModule = undefined; var agent = undefined; // if in Node, initialize libraries if (!((typeof window === "undefined" ? "undefined" : (0, _typeof3.default)(window)) === "object" && typeof window.fetch === "function")) { httpModule = require("http"); httpsModule = require("https"); agent = new httpsModule.Agent({ keepAlive: true }); } module.exports = { /** * Fetch a url using fetch in browser and http or https in Node * @param {String} url * @param {*} options */ fetch: function fetch(url, options) { var didTimeout = false; if ((typeof window === "undefined" ? "undefined" : (0, _typeof3.default)(window)) === "object" && typeof window.fetch === "function") { // Browser with fetch support if (options.headers) { options.headers = new Headers(options.headers); } return new _promise2.default(function (resolve, reject) { var timeOutId = null; if (options.networkTimeout) { timeOutId = setTimeout(function () { didTimeout = true; reject(new Error("Request Timeout.")); }, options.networkTimeout); } window.fetch(url, options).then(function (res) { if (didTimeout) return; if (timeOutId !== null) clearTimeout(timeOutId); resolve(res); }).catch(function (e) { if (didTimeout) return; reject(e); }); }); } else { // Node return new _promise2.default(function (res, rej) { var http = url.startsWith("http:") ? httpModule : httpsModule; // parse http url var parsed_url = require("url").parse(url); // request via http module var req = { host: parsed_url.hostname, port: parsed_url.port || 80, path: parsed_url.path, protocol: url.startsWith("http:") ? "http:" : "https:", headers: options.headers || {}, method: options.method || "GET" }; if (url.startsWith("https:")) { req.agent = agent; } if (options.body) { req.headers["Content-Length"] = new Buffer(options.body, "utf8").length; } var timeOutId = null; var reqObj = http.request(req, function (response) { if (didTimeout) return; var buf = new Buffer(0); response.on("data", function (chunk) { buf = Buffer.concat([buf, chunk]); }); response.on("end", function () { if (didTimeout) return; if (timeOutId !== null) clearTimeout(timeOutId); logger.verbose("[fetch] finished " + response.statusCode + " " + url); var parsedResObj = { json: function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; return _context.abrupt("return", JSON.parse(buf.toString("utf8"))); case 4: _context.prev = 4; _context.t0 = _context["catch"](0); throw new Error("error while deserialization: " + buf.toString("utf8")); case 7: case "end": return _context.stop(); } } }, _callee, this, [[0, 4]]); })); function getJSON() { return _ref.apply(this, arguments); } return getJSON; }(), text: function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() { return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: return _context2.abrupt("return", buf.toString("utf8")); case 1: case "end": return _context2.stop(); } } }, _callee2, this); })); function text() { return _ref2.apply(this, arguments); } return text; }() }; res(parsedResObj); }); }); if (options.networkTimeout) { reqObj.setTimeout(options.networkTimeout, function () { didTimeout = true; reqObj.abort(); }); timeOutId = setTimeout(function () { didTimeout = true; reqObj.abort(); }, options.networkTimeout); } if (options.body) { reqObj.write(options.body); } reqObj.on("error", function (err) { rej(err); }); reqObj.end(); }); } } };