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" },