/ electron / proxy-server.js
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 };