@domoinc/ryuu-proxy
Version:
a middleware that provides a proxy for local domo app development
106 lines • 5.31 kB
JavaScript
;
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