Spaccogram/webk/vite.proxy.js

46 lines
1.1 KiB
JavaScript

const express = require('express');
const http = require('http');
const httpProxy = require('http-proxy');
const app = express();
const fromPort = 80;
const toPort = 8080;
const host = 'localhost';
app.set('etag', false);
app.use((req, res, next) => {
res.set('Cache-Control', 'no-store');
next();
});
app.get('*', async(req, res) => {
const promise = fetch(`http://${host}:${toPort}` + req.url);
const fetchResponse = await promise;
fetchResponse.headers.forEach((value, key) => {
res.setHeader(key, value);
});
const clone = fetchResponse.clone();
let text = await fetchResponse.text();
if(text.includes(`${host}:${toPort}`)) {
text = text.replace(`${host}:${toPort}`, `${host}:${fromPort}`);
res.send(text);
} else {
const arrayBuffer = await clone.arrayBuffer();
const array = new Uint8Array(arrayBuffer);
res.write(array);
res.end();
}
});
const server = http.createServer(app).listen(fromPort);
server.on('upgrade', (req, socket, head) => {
proxy.ws(req, socket, head);
});
const proxy = new httpProxy.createProxyServer({
target: {
host: host,
port: toPort
}
});