From 25a0e1cbbc808754685cdb66fe60b646fa21c7b9 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Mon, 22 Feb 2021 15:07:44 -0500 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20use=20electron's=20n?= =?UTF-8?q?et=20request=20instead=20of=20axios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/desktop/electron-app/src/origin.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ui/desktop/electron-app/src/origin.js b/ui/desktop/electron-app/src/origin.js index 7d85e4466..967b9aebc 100644 --- a/ui/desktop/electron-app/src/origin.js +++ b/ui/desktop/electron-app/src/origin.js @@ -1,4 +1,28 @@ const axios = require('axios'); +const { net } = require('electron') + +const requestTimeoutSeconds = 10; +// Simple promise wrapper around Electron's net.request feature. +// https://www.electronjs.org/docs/api/client-request +const netRequestPromise = url => new Promise((resolve, reject) => { + try { + const request = net.request(url); + // We don't worry about canceling the request timeout timer once a + // request ends because: request.abort() has no effect after a request + // ends and the promise will already have been completed, so a rejection + // has no effect either. + const requestTimeout = + setTimeout(() => { + request.abort(); + reject(new Error('Request timeout')); + }, requestTimeoutSeconds * 1000); + request.on('error', reject); + request.on('response', resolve); + request.end(); + } catch (e) { + reject(e); + } +}); // Provides a singleton class instance to enable a consistent view of // runtime settings across the application. @@ -34,7 +58,8 @@ class RuntimeSettings { // test to see if the origin is API-compatible with the desktop client. const scopesEndpoint = `${origin}/v1/scopes`; try { - await axios.get(scopesEndpoint) + await netRequestPromise(scopesEndpoint); + //await axios.get(scopesEndpoint); } catch (e) { throw new Error(`Origin ${origin} could not be validated.`); }