diff --git a/lib/actions/getService.js b/lib/actions/getService.js
new file mode 100644
index 00000000..2e7bc7b2
--- /dev/null
+++ b/lib/actions/getService.js
@@ -0,0 +1,20 @@
+const appleDef = require('../music_services/appleDef');
+const spotifyDef = require('../music_services/spotifyDef');
+const deezerDef = require('../music_services/deezerDef');
+const libraryDef = require('../music_services/libraryDef');
+const { eliteDef } = require('./musicSearch');
+
+function getService(service) {
+ if (service === 'apple') {
+ return appleDef;
+ } else if (service === 'spotify') {
+ return spotifyDef;
+ } else if (service === 'deezer') {
+ return deezerDef;
+ } else if (service === 'elite') {
+ return eliteDef;
+ } else if (service === 'library') {
+ return libraryDef;
+ }
+}
+exports.getService = getService;
diff --git a/lib/actions/musicSearch.js b/lib/actions/musicSearch.js
index 5625284c..de0b2f17 100644
--- a/lib/actions/musicSearch.js
+++ b/lib/actions/musicSearch.js
@@ -1,61 +1,65 @@
+/* eslint-disable no-extend-native */
'use strict';
-const request = require('request-promise');
-const fs = require("fs");
+
+const request = require('request-promise-native');
+const fs = require('fs');
const isRadioOrLineIn = require('../helpers/is-radio-or-line-in');
const appleDef = require('../music_services/appleDef');
const spotifyDef = require('../music_services/spotifyDef');
const deezerDef = require('../music_services/deezerDef');
+
const eliteDef = deezerDef.init(true);
const libraryDef = require('../music_services/libraryDef');
-const musicServices = ['apple','spotify','deezer','elite','library'];
-const serviceNames = {apple:'Apple Music',spotify:'Spotify',deezer:'Deezer',elite:'Deezer',library:'Library'};
-const musicTypes = ['album','song','station','load','playlist'];
+const musicServices = ['apple', 'spotify', 'deezer', 'elite', 'library'];
+const serviceNames = {
+ apple: 'Apple Music', spotify: 'Spotify', deezer: 'Deezer', elite: 'Deezer', library: 'Library'
+};
+const musicTypes = ['album', 'song', 'station', 'load', 'playlist'];
-var country = '';
-var accountId = '';
-var accountSN = '';
-var searchType = 0;
+let country = '';
+let accountId = '';
+let accountSN = '';
+let searchType = 0;
function getService(service) {
- if (service == 'apple') {
+ if (service === 'apple') {
return appleDef;
} else
- if (service == 'spotify') {
+ if (service === 'spotify') {
return spotifyDef;
} else
- if (service == 'deezer') {
+ if (service === 'deezer') {
return deezerDef;
} else
- if (service == 'elite') {
+ if (service === 'elite') {
return eliteDef;
} else
- if (service == 'library') {
+ if (service === 'library') {
return libraryDef;
}
}
-function getAccountId(player, service)
-{
+function getAccountId(player, service) {
accountId = '';
-
- if (service != 'library') {
- return request({url: player.baseUrl + '/status/accounts',json: false})
+
+ if (service !== 'library') {
+ return request({ url: `${player.baseUrl}/status/accounts`, json: false })
.then((res) => {
- var actLoc = res.indexOf(player.system.getServiceType(serviceNames[service]));
-
- if (actLoc != -1) {
- var idLoc = res.indexOf('', actLoc)+4;
- var snLoc = res.indexOf('SerialNum="', actLoc)+11;
-
- accountId = res.substring(idLoc,res.indexOf('',idLoc));
- accountSN = res.substring(snLoc,res.indexOf('"',snLoc));
+ const actLoc = res.indexOf(player.system.getServiceType(serviceNames[service]));
+
+ if (actLoc !== -1) {
+ const idLoc = res.indexOf('', actLoc) + 4;
+ const snLoc = res.indexOf('SerialNum="', actLoc) + 11;
+
+ accountId = res.substring(idLoc, res.indexOf('', idLoc));
+ accountSN = res.substring(snLoc, res.indexOf('"', snLoc));
}
-
+
return Promise.resolve();
});
-
+
return promise;
} else {
return Promise.resolve();
@@ -71,123 +75,125 @@ function getRequestOptions(serviceDef, url) {
}
};
-function doSearch(service, type, term)
-{
- var serviceDef = getService(service);
- var url = serviceDef.search[type];
- var authenticate = serviceDef.authenticate;
+function doSearch(service, type, term) {
+ const serviceDef = getService(service);
+ let url = serviceDef.search[type];
+ const authenticate = serviceDef.authenticate;
term = decodeURIComponent(term);
-
- // Check for search type specifiers
+ let newTerm = '';
+ const artistPos = term.indexOf('artist:');
+ const trackPos = term.indexOf('track:');
+ // Check for search type specifiers
if (term.indexOf(':') > -1) {
- var newTerm = '';
- var artistPos = term.indexOf('artist:');
- var albumPos = term.indexOf('album:');
- var trackPos = term.indexOf('track:');
- var nextPos = -1;
- var artist = '';
- var album = '';
- var track = '';
-
+ const albumPos = term.indexOf('album:');
+ let nextPos = -1;
+ let artist = '';
+ let album = '';
+ let track = '';
+
if (artistPos > -1) {
- nextPos = (albumPos < trackPos)?albumPos:trackPos;
- artist = term.substring(artistPos+7,(artistPos < nextPos)?nextPos:term.length);
+ nextPos = (albumPos < trackPos) ? albumPos : trackPos;
+ artist = term.substring(artistPos + 7, (artistPos < nextPos) ? nextPos : term.length);
}
if (albumPos > -1) {
- nextPos = (trackPos < artistPos)?trackPos:artistPos;
- album = term.substring(albumPos+6,(albumPos < nextPos)?nextPos:term.length);
+ nextPos = (trackPos < artistPos) ? trackPos : artistPos;
+ album = term.substring(albumPos + 6, (albumPos < nextPos) ? nextPos : term.length);
}
if (trackPos > -1) {
- nextPos = (albumPos < artistPos)?albumPos:artistPos;
- track = term.substring(trackPos+6,(trackPos < nextPos)?nextPos:term.length);
+ nextPos = (albumPos < artistPos) ? albumPos : artistPos;
+ track = term.substring(trackPos + 6, (trackPos < nextPos) ? nextPos : term.length);
}
-
+
newTerm = serviceDef.term(type, term, artist, album, track);
-
} else {
- newTerm = (service == 'library')?term:encodeURIComponent(term);
+ newTerm = (service === 'library') ? term : encodeURIComponent(term);
+ }
+
+ if (type === 'song') {
+ searchType = (trackPos > -1) ? 1 : ((artistPos > -1) ? 2 : 0);
}
-
- if (type == 'song') {
- searchType = (trackPos > -1)?1:((artistPos > -1)?2:0);
- }
url += newTerm;
-
- if (service == 'library') {
+
+ if (service === 'library') {
return Promise.resolve(libraryDef.searchlib(type, newTerm));
} else
- if ((serviceDef.country != '') && (country == '')) {
- return request({url: 'http://ipinfo.io',
- json: true})
- .then((res) => {
- country = res.country;
- url += serviceDef.country + country;
- return authenticate().then(() => request(getRequestOptions(serviceDef, url)));
- });
+ if ((serviceDef.country !== '') && (country === '')) {
+ return request({
+ url: 'http://ipinfo.io',
+ json: true
+ })
+ .then((res) => {
+ country = res.country;
+ url += serviceDef.country + country;
+ return authenticate().then(() => request(getRequestOptions(serviceDef, url)));
+ });
} else {
if (serviceDef.country != '') {
url += serviceDef.country + country;
}
-
+
return authenticate().then(() => request(getRequestOptions(serviceDef, url)));
}
}
-Array.prototype.shuffle=function(){
- var len = this.length,temp,i
- while(len){
- i=Math.random()*len-- >>> 0;
- temp=this[len],this[len]=this[i],this[i]=temp;
+
+// eslint-disable-next-line func-names
+Array.prototype.shuffle = function () {
+ let len = this.length;
+ let temp;
+ let i;
+ while (len) {
+ i = Math.random() * len-- >>> 0;
+ temp = this[len], this[len] = this[i], this[i] = temp;
}
return this;
-}
+};
-function loadTracks(player, service, type, tracksJson)
-{
- var tracks = getService(service).tracks(type, tracksJson);
-
- if ((service == 'library') && (type == 'album')) {
+function loadTracks(player, service, type, tracksJson) {
+ const tracks = getService(service).tracks(type, tracksJson);
+
+ if ((service === 'library') && (type === 'album')) {
tracks.isArtist = true;
- } else
- if (type != 'album') {
- if (searchType == 0) {
+ } else
+ if (type !== 'album') {
+ if (searchType === 0) {
// Determine if the request was for a specific song or for many songs by a specific artist
if (tracks.count > 1) {
- var artistCount = 1;
- var trackCount = 1;
- var artists = tracks.queueTracks.map(function(track) {
- return track.artistName.toLowerCase();
- }).sort();
- var songs = tracks.queueTracks.map(function(track) {
- return track.trackName.toLowerCase();
- }).sort();
-
- var prevArtist=artists[0];
- var prevTrack=songs[0];
-
- for (var i=1; i < tracks.count;i++) {
- if (artists[i] != prevArtist) {
+ let artistCount = 1;
+ let trackCount = 1;
+ const artists = tracks.queueTracks.map((track) => {
+ return track.artistName.toLowerCase();
+ }).sort();
+ const songs = tracks.queueTracks.map((track) => {
+ return track.trackName.toLowerCase();
+ }).sort();
+
+ let prevArtist = artists[0];
+ let prevTrack = songs[0];
+
+ for (let i = 1; i < tracks.count; i++) {
+ if (artists[i] !== prevArtist) {
artistCount++;
prevArtist = artists[i];
}
- if (songs[i] != prevTrack) {
+ if (songs[i] !== prevTrack) {
trackCount++;
prevTrack = songs[i];
- }
+ }
}
- tracks.isArtist = (trackCount/artistCount > 2);
+ tracks.isArtist = (trackCount / artistCount > 2);
}
} else {
- tracks.isArtist = (searchType == 2);
+ tracks.isArtist = (searchType === 2);
}
}
-
+
//To avoid playing the same song first in a list of artist tracks when shuffle is on
if (tracks.isArtist && player.coordinator.state.playMode.shuffle) {
- tracks.queueTracks.shuffle();
+ tracks.queueTracks.shuffle();
}
-
+
return tracks;
}
@@ -197,17 +203,17 @@ function musicSearch(player, values) {
const type = values[1];
const term = values[2];
const queueURI = 'x-rincon-queue:' + player.coordinator.uuid + '#0';
-
- if (musicServices.indexOf(service) == -1) {
+
+ if (musicServices.indexOf(service) === -1) {
return Promise.reject('Invalid music service');
- }
+ }
- if (musicTypes.indexOf(type) == -1) {
+ if (musicTypes.indexOf(type) === -1) {
return Promise.reject('Invalid type ' + type);
}
-
- if ((service == 'library') && ((type == 'load') || libraryDef.nolib())) {
- return libraryDef.load(player, (type == 'load'));
+
+ if ((service === 'library') && ((type === 'load') || libraryDef.nolib())) {
+ return libraryDef.load(player, (type === 'load'));
}
return getAccountId(player, service)
@@ -220,15 +226,15 @@ function musicSearch(player, values) {
if (serviceDef.empty(type, resList)) {
return Promise.reject('No matches were found');
} else {
- var UaM = null;
-
- if (type == 'station') {
+ let UaM = null;
+
+ if (type === 'station') {
UaM = serviceDef.urimeta(type, resList);
- return player.coordinator.setAVTransport(UaM.uri, UaM.metadata)
+ return player.coordinator.setAVTransport(UaM.uri, UaM.metadata)
.then(() => player.coordinator.play());
- } else
- if ((type == 'album' || type =='playlist') && (service != 'library')) {
+ } else
+ if ((type === 'album' || type === 'playlist') && (service !== 'library')) {
UaM = serviceDef.urimeta(type, resList);
return player.coordinator.clearQueue()
@@ -236,12 +242,12 @@ function musicSearch(player, values) {
.then(() => player.coordinator.addURIToQueue(UaM.uri, UaM.metadata, true, 1))
.then(() => player.coordinator.play());
} else { // Play songs
- var tracks = loadTracks(player, service, type, resList);
-
+ const tracks = loadTracks(player, service, type, resList);
+
if (tracks.count == 0) {
return Promise.reject('No matches were found');
} else {
- if (tracks.isArtist) { // Play numerous songs by the specified artist
+ if (tracks.isArtist) { // Play numerous songs by the specified artist
return player.coordinator.clearQueue()
.then(() => player.coordinator.setAVTransport(queueURI, ''))
.then(() => player.coordinator.addURIToQueue(tracks.queueTracks[0].uri, tracks.queueTracks[0].metadata, true, 1))
@@ -253,12 +259,12 @@ function musicSearch(player, values) {
}, Promise.resolve());
});
} else { // Play the one specified song
- var empty = false;
- var nextTrackNo = 0;
+ let empty = false;
+ let nextTrackNo = 0;
return player.coordinator.getQueue(0, 1)
.then((queue) => {
- empty = (queue.length == 0);
+ empty = (queue.length === 0);
nextTrackNo = (empty) ? 1 : player.coordinator.state.trackNo + 1;
})
.then(() => player.coordinator.addURIToQueue(tracks.queueTracks[0].uri, tracks.queueTracks[0].metadata, true, nextTrackNo))
diff --git a/lib/actions/siriusXM.js b/lib/actions/siriusXM.js
index 0930ec67..c5ca054c 100644
--- a/lib/actions/siriusXM.js
+++ b/lib/actions/siriusXM.js
@@ -1,5 +1,5 @@
'use strict';
-const request = require('request-promise');
+const request = require('request-promise-native');
const Fuse = require('fuse.js');
const channels = require('../sirius-channels.json');
diff --git a/lib/music_services/spotifyDef.js b/lib/music_services/spotifyDef.js
index d20b7216..78828437 100644
--- a/lib/music_services/spotifyDef.js
+++ b/lib/music_services/spotifyDef.js
@@ -1,6 +1,6 @@
'use strict';
-var request = require('request-promise');
+var request = require('request-promise-native');
const settings = require('../../settings');
var clientId = "";
diff --git a/package-lock.json b/package-lock.json
index 8873d5e6..cd02f53c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -31,6 +31,7 @@
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
"requires": {
"co": "^4.6.0",
"fast-deep-equal": "^1.0.0",
@@ -102,9 +103,12 @@
"dev": true
},
"asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
},
"assert-plus": {
"version": "1.0.0",
@@ -145,9 +149,9 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
- "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"babel-code-frame": {
"version": "6.26.0",
@@ -204,7 +208,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "optional": true,
"requires": {
"tweetnacl": "^0.14.3"
}
@@ -336,7 +339,8 @@
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
},
"color-convert": {
"version": "1.9.2",
@@ -359,9 +363,9 @@
"integrity": "sha512-jg/vxRmv430jixZrC+La5kMbUWqIg32/JsYNZb94+JEmzceYbWKTsv1OuTp+7EaqiaWRR2tPcykibwCRgclIsw=="
},
"combined-stream": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
@@ -461,7 +465,6 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "optional": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -720,7 +723,8 @@
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
},
"fast-json-stable-stringify": {
"version": "2.0.0",
@@ -780,12 +784,12 @@
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
+ "combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
@@ -875,12 +879,35 @@
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
- "ajv": "^5.1.0",
+ "ajv": "^6.5.5",
"har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ }
}
},
"has": {
@@ -1087,9 +1114,9 @@
"dev": true
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -1099,8 +1126,7 @@
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-schema": {
"version": "0.2.3",
@@ -1110,7 +1136,8 @@
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
@@ -1188,10 +1215,9 @@
}
},
"lodash": {
- "version": "4.17.10",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
- "dev": true
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"lru-cache": {
"version": "4.1.3",
@@ -1209,16 +1235,16 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
- "version": "1.35.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
- "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
},
"mime-types": {
- "version": "2.1.19",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
- "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"requires": {
- "mime-db": "~1.35.0"
+ "mime-db": "1.40.0"
}
},
"mimic-fn": {
@@ -1318,9 +1344,9 @@
}
},
"oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"object-assign": {
"version": "4.1.1",
@@ -1517,10 +1543,15 @@
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
+ "psl": {
+ "version": "1.1.32",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz",
+ "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g=="
+ },
"punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"qs": {
"version": "6.5.2",
@@ -1586,48 +1617,48 @@
"dev": true
},
"request": {
- "version": "2.87.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
- "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
"aws-sign2": "~0.7.0",
- "aws4": "^1.6.0",
+ "aws4": "^1.8.0",
"caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.1",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
"forever-agent": "~0.6.1",
- "form-data": "~2.3.1",
- "har-validator": "~5.0.3",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.17",
- "oauth-sign": "~0.8.2",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
- "qs": "~6.5.1",
- "safe-buffer": "^5.1.1",
- "tough-cookie": "~2.3.3",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
- "uuid": "^3.1.0"
+ "uuid": "^3.3.2"
}
},
- "request-promise": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-1.0.2.tgz",
- "integrity": "sha1-FV9BBgjZJXwInB0LJvjY96iqhqE=",
+ "request-promise-core": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
+ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
"requires": {
- "bluebird": "^2.3",
- "cls-bluebird": "^1.0.1",
- "lodash": "^3.10.0",
- "request": "^2.34"
- },
- "dependencies": {
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
- }
+ "lodash": "^4.17.11"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
+ "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+ "requires": {
+ "request-promise-core": "1.1.2",
+ "stealthy-require": "^1.1.1",
+ "tough-cookie": "^2.3.3"
}
},
"require-uncached": {
@@ -1808,9 +1839,9 @@
"dev": true
},
"sshpk": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
- "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -1823,6 +1854,11 @@
"tweetnacl": "~0.14.0"
}
},
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+ },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -1941,11 +1977,19 @@
"integrity": "sha512-KSl/Q1GJ4FoxbqKCLhTiIowVzom2cP0fgWGXKsJupbJQqfnCDmxkdMopIrt+y5Ak6YAGdy9TKpplWDioaBsbEw=="
},
"tough-cookie": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
+ "psl": "^1.1.24",
"punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
}
},
"tunnel-agent": {
@@ -1959,8 +2003,7 @@
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-check": {
"version": "0.3.2",
@@ -1987,6 +2030,14 @@
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
"url": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
diff --git a/package.json b/package.json
index af9afe88..0c71f2f9 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,8 @@
"mime": "^1.4.1",
"music-metadata": "^1.1.0",
"node-static": "^0.7.9",
- "request-promise": "~1.0.2",
+ "request": "^2.88.0",
+ "request-promise-native": "^1.0.7",
"sonos-discovery": "https://github.com/jishi/node-sonos-discovery/archive/v1.7.3.tar.gz",
"wav-file-info": "0.0.8"
},