function createServer()

in src/services/infuraService/codeFlowLogin.ts [98:140]


function createServer() {
  let deferredCode: IDeferred<string>;
  const codePromise = new Promise<string>((resolve, reject) => deferredCode = { resolve, reject });
  const codeTimer = setTimeout(() => deferredCode.reject(new Error('Timeout waiting for code')), defaultTimeout);
  const cancelCodeTimer = () => clearTimeout(codeTimer);

  const server = http.createServer((req, res) => {
    const reqUrl = new url.URL(req.url!, `${Constants.networkProtocols.http}${Constants.localhost}`);
    switch (reqUrl.pathname) {
      case '/callback':
        const error = reqUrl.searchParams.get('error_description') || reqUrl.searchParams.get('error');
        const code = reqUrl.searchParams.get('code');

        if (!error && code) {
          deferredCode.resolve(code);
          res.writeHead(302, { Location: '/' });
        } else {
          const err = new Error(error || 'No code received.');
          deferredCode.reject(err);
          res.writeHead(302, { Location: `/?error=${querystring.escape(err.message)}` });
        }
        res.end();
        break;
      case '/':
        sendFile(res, Constants.infuraFileResponse.path, 'text/html; charset=utf-8');
        break;
      case '/main.css':
        sendFile(res, Constants.infuraFileResponse.css, 'text/css; charset=utf-8');
        break;
      default:
        res.writeHead(404);
        res.end();
        break;
    }
  });

  codePromise.then(cancelCodeTimer, cancelCodeTimer);

  return {
    codePromise,
    server,
  };
}