UNPKG

@domoinc/ryuu-proxy

Version:

a middleware that provides a proxy for local domo app development

106 lines 5.31 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Proxy = void 0; var path = require("path"); var os = require("os"); var FormData = require("form-data"); var fs_1 = require("fs"); var HttpsProxyAgent = require("https-proxy-agent"); var dotenv = require("dotenv"); var Transport_1 = require("./lib/Transport"); var busboy = require("busboy"); var Proxy = /** @class */ (function () { function Proxy(config) { var _this = this; var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; this.onError = function (err, res) { var status = typeof err.response.data.statusCode !== "undefined" ? err.response.data.statusCode : 500; var msg = err.response.data.statusMessage !== undefined ? err.response.data.statusMessage : err; res.status(status).send(msg); }; this.express = function () { return function (req, res, next) { if (_this.transport.isDomoRequest(req.url)) { if (_this.transport.isMultiPartRequest(req.headers)) { var bb = busboy({ headers: req.headers }); var filePath_1; var fieldName_1; bb.on("file", function (fieldname, filestream, fileMetadata) { filePath_1 = path.join(os.tmpdir(), path.basename(fileMetadata.filename)); fieldName_1 = fieldname; filestream.pipe((0, fs_1.createWriteStream)(filePath_1)); }); bb.on("finish", function () { _this.transport .buildBasic(req) .then(function (options) { var form = new FormData(); form.append(fieldName_1, (0, fs_1.createReadStream)(filePath_1)); return _this.transport.request(__assign(__assign({}, options), { headers: __assign(__assign({}, options.headers), form.getHeaders()), data: form })); }) .then(function (rawRequest) { return rawRequest.data.pipe(res); }) .catch(function (err) { return _this.onError(err, res); }); }); return req.pipe(bb); } return _this.transport .build(req) .then(function (options) { return _this.transport.request(__assign(__assign({}, options), { httpsAgent: _this.agent })); }) .then(function (rawRequest) { return rawRequest.data.pipe(res); }) .catch(function (err) { return _this.onError(err, res); }); } return next(); }; }; this.stream = function (req) { if (_this.transport.isDomoRequest(req.url)) { return _this.transport.build(req).then(_this.transport.request); } }; this.transport = new Transport_1.default(config); dotenv.config({ path: process.cwd() + "/.env" }); if (((_a = process.env.REACT_APP_PROXY_HOST) !== null && _a !== void 0 ? _a : process.env.PROXY_HOST) !== undefined && ((_b = process.env.REACT_APP_PROXY_PORT) !== null && _b !== void 0 ? _b : process.env.PROXY_PORT) !== undefined) { if (((_c = process.env.REACT_APP_PROXY_USERNAME) !== null && _c !== void 0 ? _c : process.env.PROXY_USERNAME) !== undefined && ((_d = process.env.REACT_APP_PROXY_PASSWORD) !== null && _d !== void 0 ? _d : process.env.PROXY_PASSWORD) !== undefined) { //@ts-ignore this.agent = new HttpsProxyAgent("http://" + ((_e = process.env.REACT_APP_PROXY_USERNAME) !== null && _e !== void 0 ? _e : process.env.PROXY_USERNAME) + ":" + ((_f = process.env.REACT_APP_PROXY_PASSWORD) !== null && _f !== void 0 ? _f : process.env.PROXY_PASSWORD) + "@" + ((_g = process.env.REACT_APP_PROXY_HOST) !== null && _g !== void 0 ? _g : process.env.PROXY_HOST) + ":" + ((_h = process.env.REACT_APP_PROXY_PORT) !== null && _h !== void 0 ? _h : process.env.PROXY_PORT)); } else { //@ts-ignore this.agent = new HttpsProxyAgent("http://" + ((_j = process.env.REACT_APP_PROXY_HOST) !== null && _j !== void 0 ? _j : process.env.PROXY_HOST) + ":" + ((_k = process.env.REACT_APP_PROXY_PORT) !== null && _k !== void 0 ? _k : process.env.PROXY_PORT)); } } } return Proxy; }()); exports.Proxy = Proxy; //# sourceMappingURL=index.js.map