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,
};
}