diff --git a/lib/routes.js b/lib/routes.js index 73344626..988bc152 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -1,10 +1,10 @@ // Native -const urlHelpers = require('url'); +const urlHelpers = require('url') // Packages const { send } = require('micro') const { valid, compare } = require('semver') -const { parse } = require('express-useragent') +const UAParser = require('ua-parser-js') const fetch = require('node-fetch') const distanceInWordsToNow = require('date-fns/distance_in_words_to_now') @@ -37,18 +37,28 @@ module.exports = ({ cache, config }) => { } exports.download = async (req, res) => { - const userAgent = parse(req.headers['user-agent']) + const parser = new UAParser(req.headers['user-agent']) + const os = parser.getOS() const params = urlHelpers.parse(req.url, true).query const isUpdate = params && params.update let platform - if (userAgent.isMac && isUpdate) { + const isMac = os && os.name && os.name.includes('Mac') + const isWindows = os && os.name && os.name.includes('Windows') + const isDebian = + os && + os.name && + (os.name.includes('Debian') || os.name.includes('Ubuntu')) + + if (isMac && isUpdate) { platform = 'darwin' - } else if (userAgent.isMac && !isUpdate) { + } else if (isMac && !isUpdate) { platform = 'dmg' - } else if (userAgent.isWindows) { + } else if (isWindows) { platform = 'exe' + } else if (isDebian) { + platform = 'deb' } // Get the latest version from the cache diff --git a/package.json b/package.json index cb03f66c..8e18ae15 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,14 @@ "rules": { "camelcase": 0, "new-cap": 0, + "unicorn/import-index": 0, "unicorn/no-process-exit": 0, "no-await-in-loop": 0 } }, "lint-staged": { "*.js": [ - "yarn test && :", + "yarn test --passWithNoTests && :", "prettier --single-quote --no-semi --write --no-editorconfig", "git add" ] @@ -31,7 +32,6 @@ "dependencies": { "async-retry": "1.2.3", "date-fns": "1.29.0", - "express-useragent": "1.0.12", "fetch": "1.1.0", "finalhandler": "1.1.0", "handlebars": "4.0.11", @@ -42,7 +42,8 @@ "router": "1.3.2", "semver": "5.5.0", "stream-to-string": "1.1.0", - "test-listen": "1.1.0" + "test-listen": "1.1.0", + "ua-parser-js": "0.7.21" }, "devDependencies": { "eslint-config-prettier": "2.9.0", diff --git a/yarn.lock b/yarn.lock index 6f05c091..739304c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1831,11 +1831,6 @@ expect@^24.0.0: jest-message-util "^24.0.0" jest-regex-util "^24.0.0" -express-useragent@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/express-useragent/-/express-useragent-1.0.12.tgz#5bae0109a925ec9b35417f31a4e8ad13f191253a" - integrity sha1-W64BCakl7Js1QX8xpOitE/GRJTo= - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -5977,6 +5972,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +ua-parser-js@0.7.21: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"