Files
seedit/electron/proxy-server.js
2025-05-13 22:59:09 +02:00

53 lines
1.7 KiB
JavaScript
Executable File

// use this proxy server to debug ipfs api requests made by electron
import http from 'http';
import httpProxy from 'http-proxy';
// start proxy
const proxy = httpProxy.createProxyServer({});
// rewrite the request
proxy.on('proxyReq', function (proxyReq, req, res, options) {
// remove headers that could potentially cause an ipfs 403 error
proxyReq.removeHeader('X-Forwarded-For');
proxyReq.removeHeader('X-Forwarded-Proto');
proxyReq.removeHeader('sec-ch-ua');
proxyReq.removeHeader('sec-ch-ua-mobile');
proxyReq.removeHeader('user-agent');
proxyReq.removeHeader('origin');
proxyReq.removeHeader('sec-fetch-site');
proxyReq.removeHeader('sec-fetch-mode');
proxyReq.removeHeader('sec-fetch-dest');
proxyReq.removeHeader('referer');
});
proxy.on('error', (e, req, res) => {
console.error(e);
// if not ended, will hang forever
res.statusCode = 502;
res.setHeader('Content-Type', 'text/plain');
res.end(`502 Bad Gateway: ${e.message}`);
});
// start server
const start = ({ proxyPort, targetPort } = {}) => {
const server = http.createServer();
// never timeout the keep alive connection
server.keepAliveTimeout = 0;
server.on('request', async (req, res) => {
console.log(new Date().toISOString(), req.method, req.url, req.rawHeaders);
// fix cors error from dev url localhost:3000
// should not be necessary in production build using file url
res.setHeader('Access-Control-Allow-Origin', '*');
proxy.web(req, res, { target: `http://localhost:${targetPort}` });
});
server.on('error', console.error);
server.listen(proxyPort);
console.log(`proxy server listening on port ${proxyPort}`);
};
export default { start };