diff --git a/ffbinaries-lib.js b/ffbinaries-lib.js index de27a3f..7cf7fed 100644 --- a/ffbinaries-lib.js +++ b/ffbinaries-lib.js @@ -2,7 +2,7 @@ var os = require('os'); var fse = require('fs-extra'); var path = require('path'); var _ = require('lodash'); -var request = require('request'); +var axios = require('axios'); var async = require('async'); var childProcess = require('child_process'); var extractZip = require('extract-zip'); @@ -132,23 +132,23 @@ function listVersions(callback) { if (RUNTIME_CACHE.versionsAll) { return callback(null, RUNTIME_CACHE.versionsAll); } - request({ url: API_URL }, function (err, response, body) { - if (err) { - return callback(errorMsgs.connectionIssues); - } - - var parsed; + axios.get(API_URL) + .then((response) => { + var parsed; - try { - parsed = JSON.parse(body.toString()); - } catch (e) { - return callback(errorMsgs.parsingVersionList); - } + try { + parsed = response.data; + } catch (e) { + return callback(errorMsgs.parsingVersionList); + } - var versionsAll = Object.keys(parsed.versions); - RUNTIME_CACHE.versionsAll = versionsAll; - return callback(null, versionsAll); - }); + var versionsAll = Object.keys(parsed.versions); + RUNTIME_CACHE.versionsAll = versionsAll; + return callback(null, versionsAll); + }) + .catch((err) => { + console.error(err); + }); } /** * Gets full data set from ffbinaries.com @@ -164,26 +164,24 @@ function getVersionData(version, callback) { var url = version ? '/version/' + version : '/latest'; - request({ url: API_URL + url }, function (err, response, body) { - if (err) { - return callback(errorMsgs.connectionIssues); - } - - if (body === '404') { - return callback(errorMsgs.notFound); - } + axios.get(API_URL + url) + .then((response) => { + if (response.status === '404') { + return callback(errorMsgs.notFound); + } - var parsed; + var parsed; - try { - parsed = JSON.parse(body.toString()); - } catch (e) { - return callback(errorMsgs.parsingVersionData); - } + try { + parsed = response.data; + } catch (e) { + return callback(errorMsgs.parsingVersionData); + } - RUNTIME_CACHE[version] = parsed; - return callback(null, parsed); - }); + RUNTIME_CACHE[version] = parsed; + return callback(null, parsed); + }) + .catch(() => callback(errorMsgs.connectionIssues)); } /** @@ -281,25 +279,31 @@ function downloadUrls(components, urls, opts, callback) { var cacheFileTempName = zipPath + '.part'; var cacheFileFinalName = zipPath; - request({ url: url }, function () { - results.push({ - filename: binFilename, - path: destinationDir, - size: Math.floor(totalFilesize / 1024 / 1024 * 1000) / 1000 + 'MB', - status: 'File extracted to destination (downloaded from "' + url + '")', - code: 'DONE_CLEAN' - }); - - fse.renameSync(cacheFileTempName, cacheFileFinalName); - extractZipToDestination(zipFilename, cb); + axios.get(url, { + responseType: 'arraybuffer', + onDownloadProgress: (e) => { + runningTotal = e.loaded; + } }) - .on('response', function (response) { + .then((response) => { totalFilesize = response.headers['content-length']; + + var fileData = Buffer.from(response.data, 'binary'); + + fse.writeFileSync(cacheFileTempName, fileData); }) - .on('data', function (data) { - runningTotal += data.length; - }) - .pipe(fse.createWriteStream(cacheFileTempName)); + .finally(() => { + results.push({ + filename: binFilename, + path: destinationDir, + size: Math.floor(totalFilesize / 1024 / 1024 * 1000) / 1000 + 'MB', + status: 'File extracted to destination (downloaded from "' + url + '")', + code: 'DONE_CLEAN' + }); + + fse.renameSync(cacheFileTempName, cacheFileFinalName); + extractZipToDestination(zipFilename, cb); + }); } } }, function () { diff --git a/package-lock.json b/package-lock.json index 47ddaf4..56188c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", @@ -191,6 +192,28 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, + "axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "requires": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -959,6 +982,11 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, + "follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2076,6 +2104,11 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -2309,6 +2342,14 @@ "tweetnacl": "~0.14.0" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -2341,14 +2382,6 @@ "es-abstract": "^1.19.5" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", diff --git a/package.json b/package.json index 0e154e7..1a570d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ffbinaries", - "version": "1.1.6", + "version": "1.2.0", "description": "Download binaries for ffmpeg, ffprobe, ffserver and ffplay (Windows, macOS, Linux)", "main": "index.js", "bin": { @@ -46,6 +46,7 @@ "homepage": "https://ffbinaries.com", "dependencies": { "async": "^3.1.0", + "axios": "^1.6.7", "clarg": "0.0.4", "extract-zip": "^1.6.7", "fs-extra": "^8.1.0",