2016-03-25 11:58:03 +00:00
|
|
|
import axios from 'axios';
|
2016-03-20 01:14:41 +00:00
|
|
|
import _ from 'lodash';
|
2016-03-25 12:50:52 +00:00
|
|
|
import log from 'loglevel';
|
2016-03-20 01:14:41 +00:00
|
|
|
|
|
|
|
const ELECTRON_VERSIONS_URL = 'https://atom.io/download/atom-shell/index.json';
|
2017-11-14 13:05:01 +00:00
|
|
|
const DEFAULT_CHROME_VERSION = '58.0.3029.110';
|
2016-03-20 01:14:41 +00:00
|
|
|
|
2018-05-24 07:02:44 +00:00
|
|
|
function getChromeVersionForElectronVersion(
|
|
|
|
electronVersion,
|
|
|
|
url = ELECTRON_VERSIONS_URL,
|
|
|
|
) {
|
|
|
|
return axios.get(url, { timeout: 5000 }).then((response) => {
|
|
|
|
if (response.status !== 200) {
|
|
|
|
throw new Error(`Bad request: Status code ${response.status}`);
|
|
|
|
}
|
2017-04-29 14:52:12 +00:00
|
|
|
|
2018-05-24 07:02:44 +00:00
|
|
|
const { data } = response;
|
|
|
|
const electronVersionToChromeVersion = _.zipObject(
|
|
|
|
data.map((d) => d.version),
|
|
|
|
data.map((d) => d.chrome),
|
|
|
|
);
|
2017-04-29 14:52:12 +00:00
|
|
|
|
2018-05-24 07:02:44 +00:00
|
|
|
if (!(electronVersion in electronVersionToChromeVersion)) {
|
|
|
|
throw new Error(
|
|
|
|
`Electron version '${electronVersion}' not found in retrieved version list!`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return electronVersionToChromeVersion[electronVersion];
|
|
|
|
});
|
2016-03-20 01:14:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export function getUserAgentString(chromeVersion, platform) {
|
2017-04-29 14:52:12 +00:00
|
|
|
let userAgent;
|
|
|
|
switch (platform) {
|
|
|
|
case 'darwin':
|
2018-02-02 13:06:29 +00:00
|
|
|
case 'mas':
|
2017-04-29 14:52:12 +00:00
|
|
|
userAgent = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion} Safari/537.36`;
|
|
|
|
break;
|
|
|
|
case 'win32':
|
|
|
|
userAgent = `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion} Safari/537.36`;
|
|
|
|
break;
|
|
|
|
case 'linux':
|
|
|
|
userAgent = `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion} Safari/537.36`;
|
|
|
|
break;
|
|
|
|
default:
|
2018-05-24 07:02:44 +00:00
|
|
|
throw new Error(
|
|
|
|
'Error invalid platform specified to getUserAgentString()',
|
|
|
|
);
|
2017-04-29 14:52:12 +00:00
|
|
|
}
|
|
|
|
return userAgent;
|
2016-03-20 01:14:41 +00:00
|
|
|
}
|
|
|
|
|
2018-05-24 07:02:44 +00:00
|
|
|
function inferUserAgent(
|
|
|
|
electronVersion,
|
|
|
|
platform,
|
|
|
|
url = ELECTRON_VERSIONS_URL,
|
|
|
|
) {
|
2017-04-29 14:52:12 +00:00
|
|
|
return getChromeVersionForElectronVersion(electronVersion, url)
|
2018-05-24 07:02:44 +00:00
|
|
|
.then((chromeVersion) => getUserAgentString(chromeVersion, platform))
|
2017-04-29 14:52:12 +00:00
|
|
|
.catch(() => {
|
2018-05-24 07:02:44 +00:00
|
|
|
log.warn(
|
|
|
|
`Unable to infer chrome version for user agent, using ${DEFAULT_CHROME_VERSION}`,
|
|
|
|
);
|
2017-04-29 14:52:12 +00:00
|
|
|
return getUserAgentString(DEFAULT_CHROME_VERSION, platform);
|
|
|
|
});
|
2016-03-20 01:14:41 +00:00
|
|
|
}
|
2016-03-25 12:10:45 +00:00
|
|
|
|
|
|
|
export default inferUserAgent;
|