Files
seedit/electron/proxy-server.cjs
Tom (plebeius.eth) 6444fb5b06 fix(electron): migrate Electron files to CommonJS for cross-platform compatibility
fixes conflicts between ES Modules used by Vite and CommonJS modules needed by Electron in packaged applications
2025-04-01 00:29:25 +02:00

54 lines
1.7 KiB
JavaScript
Executable File

// use this proxy server to debug ipfs api requests made by electron
// Convert external module imports to CommonJS require()
const http = require('http');
const httpProxy = require('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}`);
};
module.exports = { start };