cloudworker-proxy
Version:
An api gateway for cloudflare workers
136 lines (105 loc) • 4.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getAgent = getAgent;
exports.configureFetchDefaults = configureFetchDefaults;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _https = require('https');
var _https2 = _interopRequireDefault(_https);
var _nodeFetch = require('node-fetch');
var _nodeFetch2 = _interopRequireDefault(_nodeFetch);
var _httpsProxyAgent = require('https-proxy-agent');
var _httpsProxyAgent2 = _interopRequireDefault(_httpsProxyAgent);
var _utils = require('./utils');
var _package = require('../package.json');
var _url = require('url');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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"); }); }; }
var agent = void 0;
var headers = void 0;
function getAgent() {
// Use HTTPS Proxy (Optional)
var proxy = process.env.proxy || process.env.HTTP_PROXY || process.env.http_proxy || process.env.HTTPS_PROXY || process.env.https_proxy;
var agentOptions = {};
if (proxy) {
Object.assign(agentOptions, (0, _url.parse)(proxy));
}
var ca = process.env.ca || process.env.HTTPS_CA || process.env.https_ca;
var caCerts = [];
if (ca) {
// Can be a single certificate or multiple, comma separated.
var caArr = ca.split(',');
// Replace the newline -- https://stackoverflow.com/questions/30400341
caCerts = caCerts.concat(caArr.map(function (cert) {
return cert.replace(/\\n/g, '\n');
}));
}
var cafile = process.env.cafile || process.env.HTTPS_CAFILE || process.env.https_cafile;
if (cafile) {
// Can be a single certificate file path or multiple paths, comma separated.
var caPathArr = cafile.split(',');
caCerts = caCerts.concat(caPathArr.map(function (cafilePath) {
return _fs2.default.readFileSync(cafilePath.trim());
}));
}
if (caCerts.length > 0) {
Object.assign(agentOptions, {
rejectUnauthorized: true,
ca: caCerts
});
}
if (proxy) {
return new _httpsProxyAgent2.default(agentOptions);
} else if (agentOptions.ca) {
return new _https2.default.Agent(agentOptions);
}
return undefined;
}
function configureFetchDefaults() {
agent = getAgent();
headers = {
'Content-Type': 'application/json',
'x-platform-version': _package.version
};
}
exports.default = function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var response;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (process.env.SDK_HTTP_DEBUG) {
// eslint-disable-next-line no-console
console.log(`platform-sdk fetching: ${options.method || 'GET'} ${url} ${JSON.stringify(options.headers) || 'NO_HEADERS'} ${options.body || 'NO_BODY'}`);
} else if (process.env.SLS_DEBUG) {
// eslint-disable-next-line no-console
console.log(`platform-sdk fetching: ${options.method || 'GET'} ${url}`);
}
_context.next = 3;
return (0, _nodeFetch2.default)(url, Object.assign({
agent
}, options, {
headers: Object.assign({}, headers, options.headers || {})
}));
case 3:
response = _context.sent;
_context.next = 6;
return (0, _utils.checkHttpResponse)(response);
case 6:
return _context.abrupt('return', response);
case 7:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
}));
return function (_x2) {
return _ref.apply(this, arguments);
};
}();
//# sourceMappingURL=fetch.js.map