locadot
Version:
Secure your local development environment with HTTPS and custom domains like dev.localhost.
72 lines (71 loc) • 2.55 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const template_1 = require("../constants/template");
const logger_1 = __importDefault(require("../utils/logger"));
class HttpModule {
static requestHandler(req, res, proxy, domainMap) {
try {
const host = req.headers.host?.split(":")[0];
const targetPort = domainMap[host];
if (!targetPort) {
res.writeHead(502, { "Content-Type": "text/html" });
res.end((0, template_1.proxyNotFound)(host));
// logger.warn(
// `${
// host || ""
// } warn: Connection failed. Host not found. ${targetPort}. Total host available : ${
// Object.keys(domainMap).length
// }`
// );
}
proxy.web(req, res, {
target: `http://localhost:${targetPort}`,
changeOrigin: true,
headers: {
"X-Original-Host": host || "localhost",
},
}, (err) => {
logger_1.default.warn(`${host || ""} warn ${err.name}=> ${JSON.stringify(err, null, 2)}`);
res.writeHead(502);
res.end("Connection failed. Host not found.");
});
}
catch (error) {
logger_1.default.error(error);
}
}
}
HttpModule.requestUpgrade = (req, socket, head, proxy, domainMap) => {
try {
const host = req.headers.host?.split(":")[0];
const targetPort = domainMap[host];
if (!targetPort) {
socket.end();
return;
}
logger_1.default.info(host || "", "log", `WebSocket upgrade request for ${host}`);
proxy.ws(req, socket, head, {
target: `ws://localhost:${targetPort}`,
ws: true,
changeOrigin: true,
headers: {
host: `localhost:${targetPort}`,
"X-Original-Host": host || "localhost",
},
}, (err) => {
// locadotFile.updateLogs(
// host || "",
// "warn",
// `WebSocket Error: ${err.name}=> ${err.message}`
// );
socket.end();
});
}
catch (error) {
logger_1.default.error(error);
}
};
exports.default = HttpModule;