proxy-server.js
1 // use this proxy server to debug ipfs api requests made by electron 2 3 import http from 'http'; 4 import httpProxy from 'http-proxy'; 5 6 // start proxy 7 const proxy = httpProxy.createProxyServer({}); 8 9 // rewrite the request 10 proxy.on('proxyReq', function (proxyReq, req, res, options) { 11 // remove headers that could potentially cause an ipfs 403 error 12 proxyReq.removeHeader('X-Forwarded-For'); 13 proxyReq.removeHeader('X-Forwarded-Proto'); 14 proxyReq.removeHeader('sec-ch-ua'); 15 proxyReq.removeHeader('sec-ch-ua-mobile'); 16 proxyReq.removeHeader('user-agent'); 17 proxyReq.removeHeader('origin'); 18 proxyReq.removeHeader('sec-fetch-site'); 19 proxyReq.removeHeader('sec-fetch-mode'); 20 proxyReq.removeHeader('sec-fetch-dest'); 21 proxyReq.removeHeader('referer'); 22 }); 23 proxy.on('error', (e) => { 24 console.error(e); 25 }); 26 27 // start server 28 const start = ({ proxyPort, targetPort } = {}) => { 29 const server = http.createServer(); 30 31 // never timeout the keep alive connection 32 server.keepAliveTimeout = 0; 33 34 server.on('request', async (req, res) => { 35 console.log(new Date().toISOString(), req.method, req.url, req.rawHeaders); 36 37 // fix cors error from dev url localhost:3000 38 // should not be necessary in production build using file url 39 res.setHeader('Access-Control-Allow-Origin', '*'); 40 41 proxy.web(req, res, { target: `http://localhost:${targetPort}` }); 42 }); 43 server.on('error', console.error); 44 server.listen(proxyPort); 45 console.log(`proxy server listening on port ${proxyPort}`); 46 }; 47 48 export default { start };