Download quality fallback, shuffle, repeat, lastfm
This commit is contained in:
parent
a77d8437bd
commit
27b55a4876
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "client",
|
"name": "client",
|
||||||
"version": "0.1.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -6,7 +6,21 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-list v-if='!loading'>
|
<v-list v-if='!loading'>
|
||||||
<v-lazy v-for='(track, index) in tracks' :key='track.id' max-height='100'>
|
<v-list-item v-if='!$root.settings.logListen'>
|
||||||
|
<v-list-item-avatar>
|
||||||
|
<v-icon class='yellow--text'>mdi-alert</v-icon>
|
||||||
|
</v-list-item-avatar>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>
|
||||||
|
Streaming logging is disabled!
|
||||||
|
</v-list-item-title>
|
||||||
|
<v-list-item-subtitle>
|
||||||
|
Enable it in settings for history to work properly.
|
||||||
|
</v-list-item-subtitle>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
|
||||||
|
<v-lazy v-for='(track, index) in tracks' :key='track.id + "INDEX" + index.toString()' max-height='100'>
|
||||||
<TrackTile :track='track' @click='play(index)'></TrackTile>
|
<TrackTile :track='track' @click='play(index)'></TrackTile>
|
||||||
</v-lazy>
|
</v-lazy>
|
||||||
</v-list>
|
</v-list>
|
||||||
|
|
|
@ -9,6 +9,12 @@
|
||||||
>{{track.title}}<span v-if='track.explicit' class='red--text text-overline pl-2'>E</span></v-list-item-title>
|
>{{track.title}}<span v-if='track.explicit' class='red--text text-overline pl-2'>E</span></v-list-item-title>
|
||||||
<v-list-item-subtitle>{{track.artistString}}</v-list-item-subtitle>
|
<v-list-item-subtitle>{{track.artistString}}</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
|
<v-list-item-action>
|
||||||
|
<!-- Duration -->
|
||||||
|
<div class='text-caption mx-2'>
|
||||||
|
{{$duration(track.duration)}}
|
||||||
|
</div>
|
||||||
|
</v-list-item-action>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<!-- Quick add/remoev to library -->
|
<!-- Quick add/remoev to library -->
|
||||||
<v-btn @click.stop='addLibrary' icon v-if='!isLibrary'>
|
<v-btn @click.stop='addLibrary' icon v-if='!isLibrary'>
|
||||||
|
|
|
@ -16,9 +16,15 @@ let axiosInstance = axios.create({
|
||||||
Vue.prototype.$axios = axiosInstance;
|
Vue.prototype.$axios = axiosInstance;
|
||||||
|
|
||||||
//Duration formatter
|
//Duration formatter
|
||||||
Vue.prototype.$duration = (s) => {
|
Vue.prototype.$duration = (ms) => {
|
||||||
let pad = (n, z = 2) => ('00' + n).slice(-z);
|
if (isNaN(ms) || ms < 1) return '0:00';
|
||||||
return ((s%3.6e6)/6e4 | 0) + ':' + pad((s%6e4)/1000|0);
|
let s = Math.floor(ms / 1000);
|
||||||
|
let hours = Math.floor(s / 3600);
|
||||||
|
s %= 3600;
|
||||||
|
let min = Math.floor(s / 60);
|
||||||
|
let sec = s % 60;
|
||||||
|
if (hours == 0) return `${min}:${sec.toString().padStart(2, '0')}`;
|
||||||
|
return `${hours}:${min.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Abbrevation
|
//Abbrevation
|
||||||
|
@ -82,6 +88,11 @@ new Vue({
|
||||||
track: null
|
track: null
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//Repeat & Shuffle
|
||||||
|
//0 - normal, 1 - repeat list, 2 - repeat track
|
||||||
|
repeat: 0,
|
||||||
|
shuffle: false,
|
||||||
|
|
||||||
//Library cache
|
//Library cache
|
||||||
libraryTracks: [],
|
libraryTracks: [],
|
||||||
|
|
||||||
|
@ -109,8 +120,6 @@ new Vue({
|
||||||
if (!this.audio || this.state != 1) return;
|
if (!this.audio || this.state != 1) return;
|
||||||
this.audio.play();
|
this.audio.play();
|
||||||
this.state = 2;
|
this.state = 2;
|
||||||
|
|
||||||
this.logListen();
|
|
||||||
},
|
},
|
||||||
pause() {
|
pause() {
|
||||||
if (!this.audio || this.state != 2) return;
|
if (!this.audio || this.state != 2) return;
|
||||||
|
@ -200,13 +209,41 @@ new Vue({
|
||||||
|
|
||||||
//Gapless playback
|
//Gapless playback
|
||||||
if (this.position >= (this.duration() - 5000) && this.state == 2) {
|
if (this.position >= (this.duration() - 5000) && this.state == 2) {
|
||||||
this.loadGapless();
|
if (!this.shuffle && this.repeat != 2)
|
||||||
|
this.loadGapless();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Scrobble/LogListen
|
||||||
|
if (this.position >= this.duration() * 0.75) {
|
||||||
|
this.logListen();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.audio.muted = this.muted;
|
this.audio.muted = this.muted;
|
||||||
this.audio.volume = this.volume;
|
this.audio.volume = this.volume;
|
||||||
|
|
||||||
this.audio.addEventListener('ended', async () => {
|
this.audio.addEventListener('ended', async () => {
|
||||||
|
|
||||||
|
//Shuffle
|
||||||
|
if (this.shuffle) {
|
||||||
|
let index = Math.round(Math.random()*this.queue.data.length) - this.queue.index;
|
||||||
|
this.skip(index);
|
||||||
|
this.savePlaybackInfo();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Repeat track
|
||||||
|
if (this.repeat == 2) {
|
||||||
|
this.seek(0);
|
||||||
|
this.audio.play();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Repeat list
|
||||||
|
if (this.queue.index == this.queue.data.length - 1) {
|
||||||
|
this.skip(-(this.queue.data.length - 1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//Load gapless
|
//Load gapless
|
||||||
if (this.gapless.promise || this.gapless.audio) {
|
if (this.gapless.promise || this.gapless.audio) {
|
||||||
this.state = 3;
|
this.state = 3;
|
||||||
|
@ -222,7 +259,6 @@ new Vue({
|
||||||
//Play
|
//Play
|
||||||
this.state = 2;
|
this.state = 2;
|
||||||
this.audio.play();
|
this.audio.play();
|
||||||
this.logListen();
|
|
||||||
await this.savePlaybackInfo();
|
await this.savePlaybackInfo();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -309,7 +345,9 @@ new Vue({
|
||||||
let data = {
|
let data = {
|
||||||
queue: this.queue,
|
queue: this.queue,
|
||||||
position: this.position,
|
position: this.position,
|
||||||
track: this.track
|
track: this.track,
|
||||||
|
shuffle: this.shuffle,
|
||||||
|
repeat: this.repeat
|
||||||
}
|
}
|
||||||
await this.$axios.post('/playback', data);
|
await this.$axios.post('/playback', data);
|
||||||
},
|
},
|
||||||
|
@ -336,12 +374,11 @@ new Vue({
|
||||||
|
|
||||||
//Log song listened to deezer, only if allowed
|
//Log song listened to deezer, only if allowed
|
||||||
async logListen() {
|
async logListen() {
|
||||||
if (!this.settings.logListen) return;
|
|
||||||
if (this.logListenId == this.track.id) return;
|
if (this.logListenId == this.track.id) return;
|
||||||
if (!this.track || !this.track.id) return;
|
if (!this.track || !this.track.id) return;
|
||||||
|
|
||||||
this.logListenId = this.track.id;
|
this.logListenId = this.track.id;
|
||||||
await this.$axios.put(`/log/${this.track.id}`);
|
await this.$axios.post(`/log`, this.track);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
|
@ -357,6 +394,8 @@ new Vue({
|
||||||
if (pd.data != {}) {
|
if (pd.data != {}) {
|
||||||
if (pd.data.queue) this.queue = pd.data.queue;
|
if (pd.data.queue) this.queue = pd.data.queue;
|
||||||
if (pd.data.track) this.track = pd.data.track;
|
if (pd.data.track) this.track = pd.data.track;
|
||||||
|
if (pd.data.shuffle) this.shuffle = pd.data.shuffle;
|
||||||
|
if (pd.data.repeat) this.repeat = pd.data.repeat;
|
||||||
this.playTrack(this.track).then(() => {
|
this.playTrack(this.track).then(() => {
|
||||||
this.seek(pd.data.position);
|
this.seek(pd.data.position);
|
||||||
});
|
});
|
||||||
|
|
|
@ -41,13 +41,18 @@
|
||||||
|
|
||||||
<h1 class='mt-2'>Tracks</h1>
|
<h1 class='mt-2'>Tracks</h1>
|
||||||
<v-list avatar v-if='album.tracks.length > 0'>
|
<v-list avatar v-if='album.tracks.length > 0'>
|
||||||
<TrackTile
|
<div v-for='(track, index) in album.tracks' :key='track.id'>
|
||||||
v-for='(track, index) in album.tracks'
|
|
||||||
:key='track.id'
|
<!-- Disk split -->
|
||||||
:track='track'
|
<div
|
||||||
@click='playTrack(index)'
|
v-if='index == 0 || track.diskNumber != album.tracks[index-1].diskNumber'
|
||||||
>
|
class='mx-4 text-subtitle-1'
|
||||||
</TrackTile>
|
>
|
||||||
|
Disk {{track.diskNumber}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<TrackTile :track='track' @click='playTrack(index)'></TrackTile>
|
||||||
|
</div>
|
||||||
</v-list>
|
</v-list>
|
||||||
|
|
||||||
<DownloadDialog :tracks='album.tracks' v-if='downloadDialog' @close='downloadDialog = false'></DownloadDialog>
|
<DownloadDialog :tracks='album.tracks' v-if='downloadDialog' @close='downloadDialog = false'></DownloadDialog>
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
min='0'
|
min='0'
|
||||||
step='1'
|
step='1'
|
||||||
:max='this.$root.duration() / 1000'
|
:max='this.$root.duration() / 1000'
|
||||||
@click='seekEvent'
|
@click.prevent.stop='seekEvent'
|
||||||
@start='seeking = true'
|
@start='seeking = true'
|
||||||
@end='seek'
|
@end='seek'
|
||||||
:value='position'
|
:value='position'
|
||||||
|
@ -54,12 +54,14 @@
|
||||||
<v-icon size='42px'>mdi-skip-previous</v-icon>
|
<v-icon size='42px'>mdi-skip-previous</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-btn icon x-large @click='$root.toggle()'>
|
<v-btn icon x-large @click='$root.toggle()'>
|
||||||
<v-icon size='56px' v-if='!$root.isPlaying()'>mdi-play</v-icon>
|
<v-icon size='56px' v-if='!$root.isPlaying()'>mdi-play</v-icon>
|
||||||
<v-icon size='56px' v-if='$root.isPlaying()'>mdi-pause</v-icon>
|
<v-icon size='56px' v-if='$root.isPlaying()'>mdi-pause</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-btn icon x-large @click='$root.skip(1)'>
|
<v-btn icon x-large @click='$root.skip(1)'>
|
||||||
<v-icon size='42px'>mdi-skip-next</v-icon>
|
<v-icon size='42px'>mdi-skip-next</v-icon>
|
||||||
|
@ -68,7 +70,17 @@
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<!-- Bottom actions -->
|
<!-- Bottom actions -->
|
||||||
<div class='d-flex my-1 mx-8 '>
|
<div class='d-flex my-1 mx-2 '>
|
||||||
|
|
||||||
|
<v-btn icon @click='repeatClick'>
|
||||||
|
<v-icon v-if='$root.repeat == 0'>mdi-repeat</v-icon>
|
||||||
|
<v-icon color='primary' v-if='$root.repeat == 1'>mdi-repeat</v-icon>
|
||||||
|
<v-icon color='primary' v-if='$root.repeat == 2'>mdi-repeat-once</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
<v-btn icon @click='$root.shuffle = !$root.shuffle'>
|
||||||
|
<v-icon v-if='!$root.shuffle'>mdi-shuffle</v-icon>
|
||||||
|
<v-icon v-if='$root.shuffle' color='primary'>mdi-shuffle</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
|
||||||
<v-btn icon @click='addLibrary'>
|
<v-btn icon @click='addLibrary'>
|
||||||
<v-icon v-if='!inLibrary'>mdi-heart</v-icon>
|
<v-icon v-if='!inLibrary'>mdi-heart</v-icon>
|
||||||
|
@ -271,6 +283,14 @@ export default {
|
||||||
//Save volume
|
//Save volume
|
||||||
updateVolume(v) {
|
updateVolume(v) {
|
||||||
this.$root.volume = v;
|
this.$root.volume = v;
|
||||||
|
},
|
||||||
|
//Repeat button click
|
||||||
|
repeatClick() {
|
||||||
|
if (this.$root.repeat == 2) {
|
||||||
|
this.$root.repeat = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.$root.repeat += 1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
@ -67,6 +67,13 @@
|
||||||
<v-list-item-subtitle>This allows listening history, flow and recommendations to work properly.</v-list-item-subtitle>
|
<v-list-item-subtitle>This allows listening history, flow and recommendations to work properly.</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
<!-- LastFM -->
|
||||||
|
<v-list-item @click='connectLastFM' v-if='!$root.settings.lastFM'>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>Login with LastFM</v-list-item-title>
|
||||||
|
<v-list-item-subtitle>Connect your LastFM account to allow scrobbling.</v-list-item-subtitle>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
|
||||||
<!-- Minimize to tray -->
|
<!-- Minimize to tray -->
|
||||||
<v-list-item v-if='$root.settings.electron'>
|
<v-list-item v-if='$root.settings.electron'>
|
||||||
|
@ -166,6 +173,11 @@ export default {
|
||||||
this.$root.settings.arl = null;
|
this.$root.settings.arl = null;
|
||||||
await this.$root.saveSettings();
|
await this.$root.saveSettings();
|
||||||
location.reload();
|
location.reload();
|
||||||
|
},
|
||||||
|
//Redirect to lastfm login
|
||||||
|
async connectLastFM() {
|
||||||
|
let res = await this.$axios.get('/lastfm');
|
||||||
|
window.location.replace(res.data.url);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
@ -1,64 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "freezer",
|
"name": "freezer",
|
||||||
"version": "1.0.0",
|
"version": "1.0.4",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/get": {
|
|
||||||
"version": "1.12.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz",
|
|
||||||
"integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "^4.1.1",
|
|
||||||
"env-paths": "^2.2.0",
|
|
||||||
"fs-extra": "^8.1.0",
|
|
||||||
"global-agent": "^2.0.2",
|
|
||||||
"global-tunnel-ng": "^2.7.1",
|
|
||||||
"got": "^9.6.0",
|
|
||||||
"progress": "^2.0.3",
|
|
||||||
"sanitize-filename": "^1.6.2",
|
|
||||||
"sumchecker": "^3.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
|
||||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "^2.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@sindresorhus/is": {
|
|
||||||
"version": "0.14.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
|
|
||||||
"integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@szmarczak/http-timer": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"defer-to-connect": "^1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@types/node": {
|
|
||||||
"version": "12.12.54",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz",
|
|
||||||
"integrity": "sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"accepts": {
|
"accepts": {
|
||||||
"version": "1.3.7",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
||||||
|
@ -219,67 +164,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"boolean": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"browser-id3-writer": {
|
"browser-id3-writer": {
|
||||||
"version": "4.4.0",
|
"version": "4.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/browser-id3-writer/-/browser-id3-writer-4.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/browser-id3-writer/-/browser-id3-writer-4.4.0.tgz",
|
||||||
"integrity": "sha512-8xce9wo4VoKNR4udEGOAf8vndYxhToqQS+1wyrjdYVPQKRc4Wm6xwGG6XrKYgax28y5AvrbCkqK6t1RplPN2Ew=="
|
"integrity": "sha512-8xce9wo4VoKNR4udEGOAf8vndYxhToqQS+1wyrjdYVPQKRc4Wm6xwGG6XrKYgax28y5AvrbCkqK6t1RplPN2Ew=="
|
||||||
},
|
},
|
||||||
"buffer-crc32": {
|
|
||||||
"version": "0.2.13",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
|
||||||
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"buffer-from": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"bytes": {
|
"bytes": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
||||||
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
|
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
|
||||||
},
|
},
|
||||||
"cacheable-request": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
|
|
||||||
"integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"clone-response": "^1.0.2",
|
|
||||||
"get-stream": "^5.1.0",
|
|
||||||
"http-cache-semantics": "^4.0.0",
|
|
||||||
"keyv": "^3.0.0",
|
|
||||||
"lowercase-keys": "^2.0.0",
|
|
||||||
"normalize-url": "^4.1.0",
|
|
||||||
"responselike": "^1.0.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"get-stream": {
|
|
||||||
"version": "5.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
|
||||||
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pump": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lowercase-keys": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"callsite": {
|
"callsite": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
|
||||||
|
@ -290,15 +184,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||||
},
|
},
|
||||||
"clone-response": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"mimic-response": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"combined-stream": {
|
"combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
@ -327,29 +212,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
|
||||||
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
|
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
|
||||||
},
|
},
|
||||||
"concat-stream": {
|
|
||||||
"version": "1.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
|
|
||||||
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"buffer-from": "^1.0.0",
|
|
||||||
"inherits": "^2.0.3",
|
|
||||||
"readable-stream": "^2.2.2",
|
|
||||||
"typedarray": "^0.0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"config-chain": {
|
|
||||||
"version": "1.1.12",
|
|
||||||
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
|
|
||||||
"integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"ini": "^1.3.4",
|
|
||||||
"proto-list": "~1.2.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"content-disposition": {
|
"content-disposition": {
|
||||||
"version": "0.5.3",
|
"version": "0.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
|
||||||
|
@ -373,13 +235,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
"core-js": {
|
|
||||||
"version": "3.6.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
|
|
||||||
"integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
|
@ -401,36 +256,11 @@
|
||||||
"ms": "2.0.0"
|
"ms": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"decompress-response": {
|
|
||||||
"version": "3.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
|
||||||
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"mimic-response": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"deepmerge": {
|
"deepmerge": {
|
||||||
"version": "4.2.2",
|
"version": "4.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
|
||||||
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
|
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
|
||||||
},
|
},
|
||||||
"defer-to-connect": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
|
|
||||||
"integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"define-properties": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
|
|
||||||
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"object-keys": "^1.0.12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"delayed-stream": {
|
"delayed-stream": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
@ -446,19 +276,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
||||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
||||||
},
|
},
|
||||||
"detect-node": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"duplexer3": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
|
|
||||||
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ecc-jsbn": {
|
"ecc-jsbn": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||||
|
@ -473,31 +290,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||||
},
|
},
|
||||||
"electron": {
|
|
||||||
"version": "9.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/electron/-/electron-9.2.1.tgz",
|
|
||||||
"integrity": "sha512-ZsetaQjXB8+9/EFW1FnfK4ukpkwXCxMEaiKiUZhZ0ZLFlLnFCpe0Bg4vdDf7e4boWGcnlgN1jAJpBw7w0eXuqA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@electron/get": "^1.0.1",
|
|
||||||
"@types/node": "^12.0.12",
|
|
||||||
"extract-zip": "^1.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"encodeurl": {
|
"encodeurl": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
||||||
},
|
},
|
||||||
"end-of-stream": {
|
|
||||||
"version": "1.4.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
|
||||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"once": "^1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"engine.io": {
|
"engine.io": {
|
||||||
"version": "3.4.2",
|
"version": "3.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz",
|
||||||
|
@ -589,31 +386,11 @@
|
||||||
"has-binary2": "~1.0.2"
|
"has-binary2": "~1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"env-paths": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"es6-error": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
|
|
||||||
"integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"escape-html": {
|
"escape-html": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
||||||
},
|
},
|
||||||
"escape-string-regexp": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"etag": {
|
"etag": {
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||||
|
@ -671,29 +448,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||||
},
|
},
|
||||||
"extract-zip": {
|
|
||||||
"version": "1.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
|
|
||||||
"integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"concat-stream": "^1.6.2",
|
|
||||||
"debug": "^2.6.9",
|
|
||||||
"mkdirp": "^0.5.4",
|
|
||||||
"yauzl": "^2.10.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extsprintf": {
|
"extsprintf": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
||||||
|
@ -709,15 +463,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
||||||
},
|
},
|
||||||
"fd-slicer": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pend": "~1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"file-uri-to-path": {
|
"file-uri-to-path": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
|
||||||
|
@ -780,26 +525,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
||||||
},
|
},
|
||||||
"fs-extra": {
|
|
||||||
"version": "8.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
|
|
||||||
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.2.0",
|
|
||||||
"jsonfile": "^4.0.0",
|
|
||||||
"universalify": "^0.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"get-stream": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
|
|
||||||
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pump": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"getpass": {
|
"getpass": {
|
||||||
"version": "0.1.7",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
|
||||||
|
@ -808,70 +533,6 @@
|
||||||
"assert-plus": "^1.0.0"
|
"assert-plus": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"global-agent": {
|
|
||||||
"version": "2.1.12",
|
|
||||||
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
|
|
||||||
"integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"boolean": "^3.0.1",
|
|
||||||
"core-js": "^3.6.5",
|
|
||||||
"es6-error": "^4.1.1",
|
|
||||||
"matcher": "^3.0.0",
|
|
||||||
"roarr": "^2.15.3",
|
|
||||||
"semver": "^7.3.2",
|
|
||||||
"serialize-error": "^7.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"global-tunnel-ng": {
|
|
||||||
"version": "2.7.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
|
|
||||||
"integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"encodeurl": "^1.0.2",
|
|
||||||
"lodash": "^4.17.10",
|
|
||||||
"npm-conf": "^1.1.3",
|
|
||||||
"tunnel": "^0.0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"globalthis": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"define-properties": "^1.1.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"got": {
|
|
||||||
"version": "9.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
|
|
||||||
"integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@sindresorhus/is": "^0.14.0",
|
|
||||||
"@szmarczak/http-timer": "^1.1.2",
|
|
||||||
"cacheable-request": "^6.0.0",
|
|
||||||
"decompress-response": "^3.3.0",
|
|
||||||
"duplexer3": "^0.1.4",
|
|
||||||
"get-stream": "^4.1.0",
|
|
||||||
"lowercase-keys": "^1.0.1",
|
|
||||||
"mimic-response": "^1.0.1",
|
|
||||||
"p-cancelable": "^1.0.0",
|
|
||||||
"to-readable-stream": "^1.0.0",
|
|
||||||
"url-parse-lax": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"graceful-fs": {
|
|
||||||
"version": "4.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
|
||||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"har-schema": {
|
"har-schema": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
|
||||||
|
@ -899,12 +560,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
|
||||||
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
|
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
|
||||||
},
|
},
|
||||||
"http-cache-semantics": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
|
|
||||||
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"http-errors": {
|
"http-errors": {
|
||||||
"version": "1.7.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
|
||||||
|
@ -950,13 +605,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||||
},
|
},
|
||||||
"ini": {
|
|
||||||
"version": "1.3.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
|
||||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"ipaddr.js": {
|
"ipaddr.js": {
|
||||||
"version": "1.9.1",
|
"version": "1.9.1",
|
||||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||||
|
@ -982,12 +630,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
||||||
},
|
},
|
||||||
"json-buffer": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"json-schema": {
|
"json-schema": {
|
||||||
"version": "0.2.3",
|
"version": "0.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||||
|
@ -1003,15 +645,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
||||||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
|
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
|
||||||
},
|
},
|
||||||
"jsonfile": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
|
||||||
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jsprim": {
|
"jsprim": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
||||||
|
@ -1023,13 +656,27 @@
|
||||||
"verror": "1.10.0"
|
"verror": "1.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"keyv": {
|
"lastfm": {
|
||||||
"version": "3.1.0",
|
"version": "0.8.4",
|
||||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/lastfm/-/lastfm-0.8.4.tgz",
|
||||||
"integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
|
"integrity": "sha1-Td3wgpem+iP4TUgnBSoNKC/plog=",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"json-buffer": "3.0.0"
|
"underscore": "^1.11.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.11.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz",
|
||||||
|
"integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lastfmapi": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lastfmapi/-/lastfmapi-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-zjNtz3zIGCDCLcQCR8l7MRM0hvo=",
|
||||||
|
"requires": {
|
||||||
|
"lastfm": "0.8.x"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lie": {
|
"lie": {
|
||||||
|
@ -1048,29 +695,6 @@
|
||||||
"lie": "3.1.1"
|
"lie": "3.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.20",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
|
|
||||||
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"lowercase-keys": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"matcher": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"escape-string-regexp": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media-typer": {
|
"media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
|
@ -1113,12 +737,6 @@
|
||||||
"mime-db": "1.44.0"
|
"mime-db": "1.44.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mimic-response": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||||
|
@ -1172,23 +790,6 @@
|
||||||
"node-addon-api": "^2.0.0"
|
"node-addon-api": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"normalize-url": {
|
|
||||||
"version": "4.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
|
|
||||||
"integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"npm-conf": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
|
|
||||||
"integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"config-chain": "^1.1.11",
|
|
||||||
"pify": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth-sign": {
|
"oauth-sign": {
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
|
@ -1199,13 +800,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
||||||
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
|
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
|
||||||
},
|
},
|
||||||
"object-keys": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"on-finished": {
|
"on-finished": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
||||||
|
@ -1214,21 +808,6 @@
|
||||||
"ee-first": "1.1.1"
|
"ee-first": "1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"p-cancelable": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"parseqs": {
|
"parseqs": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
||||||
|
@ -1255,30 +834,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||||
},
|
},
|
||||||
"pend": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"performance-now": {
|
"performance-now": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
||||||
},
|
},
|
||||||
"pify": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"prepend-http": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"probe-image-size": {
|
"probe-image-size": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz",
|
||||||
|
@ -1291,25 +851,6 @@
|
||||||
"stream-parser": "~0.3.1"
|
"stream-parser": "~0.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"process-nextick-args": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"progress": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"proto-list": {
|
|
||||||
"version": "1.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
|
|
||||||
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"proxy-addr": {
|
"proxy-addr": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
|
||||||
|
@ -1324,16 +865,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||||
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
|
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
|
||||||
},
|
},
|
||||||
"pump": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"end-of-stream": "^1.1.0",
|
|
||||||
"once": "^1.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"punycode": {
|
"punycode": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||||
|
@ -1360,29 +891,6 @@
|
||||||
"unpipe": "1.0.0"
|
"unpipe": "1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"readable-stream": {
|
|
||||||
"version": "2.3.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
|
||||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"core-util-is": "~1.0.0",
|
|
||||||
"inherits": "~2.0.3",
|
|
||||||
"isarray": "~1.0.0",
|
|
||||||
"process-nextick-args": "~2.0.0",
|
|
||||||
"safe-buffer": "~5.1.1",
|
|
||||||
"string_decoder": "~1.1.1",
|
|
||||||
"util-deprecate": "~1.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"isarray": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"request": {
|
"request": {
|
||||||
"version": "2.88.2",
|
"version": "2.88.2",
|
||||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
|
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
|
||||||
|
@ -1417,30 +925,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"responselike": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"lowercase-keys": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"roarr": {
|
|
||||||
"version": "2.15.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz",
|
|
||||||
"integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"boolean": "^3.0.0",
|
|
||||||
"detect-node": "^2.0.4",
|
|
||||||
"globalthis": "^1.0.1",
|
|
||||||
"json-stringify-safe": "^5.0.1",
|
|
||||||
"semver-compare": "^1.0.0",
|
|
||||||
"sprintf-js": "^1.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||||
|
@ -1459,20 +943,6 @@
|
||||||
"truncate-utf8-bytes": "^1.0.0"
|
"truncate-utf8-bytes": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"semver": {
|
|
||||||
"version": "7.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
|
|
||||||
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"semver-compare": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"send": {
|
"send": {
|
||||||
"version": "0.17.1",
|
"version": "0.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
||||||
|
@ -1515,16 +985,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serialize-error": {
|
|
||||||
"version": "7.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
|
|
||||||
"integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"type-fest": "^0.13.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"serve-static": {
|
"serve-static": {
|
||||||
"version": "1.14.1",
|
"version": "1.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
|
||||||
|
@ -1660,13 +1120,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sprintf-js": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"sshpk": {
|
"sshpk": {
|
||||||
"version": "1.16.1",
|
"version": "1.16.1",
|
||||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
||||||
|
@ -1706,52 +1159,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"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==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"safe-buffer": "~5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sumchecker": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "^4.1.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
|
||||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "^2.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"to-array": {
|
"to-array": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
||||||
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
|
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
|
||||||
},
|
},
|
||||||
"to-readable-stream": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"toidentifier": {
|
"toidentifier": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||||
|
@ -1774,13 +1186,6 @@
|
||||||
"utf8-byte-length": "^1.0.1"
|
"utf8-byte-length": "^1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tunnel": {
|
|
||||||
"version": "0.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
|
||||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"tunnel-agent": {
|
"tunnel-agent": {
|
||||||
"version": "0.6.0",
|
"version": "0.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||||
|
@ -1794,13 +1199,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
||||||
},
|
},
|
||||||
"type-fest": {
|
|
||||||
"version": "0.13.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
|
|
||||||
"integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"type-is": {
|
"type-is": {
|
||||||
"version": "1.6.18",
|
"version": "1.6.18",
|
||||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
||||||
|
@ -1810,23 +1208,11 @@
|
||||||
"mime-types": "~2.1.24"
|
"mime-types": "~2.1.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"typedarray": {
|
|
||||||
"version": "0.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
|
||||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"underscore": {
|
"underscore": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
||||||
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
|
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
|
||||||
},
|
},
|
||||||
"universalify": {
|
|
||||||
"version": "0.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
|
||||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"unpipe": {
|
"unpipe": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||||
|
@ -1840,26 +1226,11 @@
|
||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"url-parse-lax": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prepend-http": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"utf8-byte-length": {
|
"utf8-byte-length": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
|
||||||
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E="
|
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E="
|
||||||
},
|
},
|
||||||
"util-deprecate": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"utils-merge": {
|
"utils-merge": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||||
|
@ -1885,12 +1256,6 @@
|
||||||
"extsprintf": "^1.2.0"
|
"extsprintf": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ws": {
|
"ws": {
|
||||||
"version": "7.3.1",
|
"version": "7.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
|
||||||
|
@ -1901,16 +1266,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
|
||||||
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
|
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
|
||||||
},
|
},
|
||||||
"yauzl": {
|
|
||||||
"version": "2.10.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
|
||||||
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"buffer-crc32": "~0.2.3",
|
|
||||||
"fd-slicer": "~1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"yeast": {
|
"yeast": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "freezer",
|
"name": "freezer",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.3",
|
"version": "1.0.4",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "background.js",
|
"main": "background.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -13,13 +13,12 @@
|
||||||
"axios": "^0.19.2",
|
"axios": "^0.19.2",
|
||||||
"browser-id3-writer": "^4.4.0",
|
"browser-id3-writer": "^4.4.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
|
"lastfmapi": "^0.1.1",
|
||||||
"metaflac-js2": "^1.0.7",
|
"metaflac-js2": "^1.0.7",
|
||||||
"nedb": "^1.8.0",
|
"nedb": "^1.8.0",
|
||||||
"nodeezcryptor": "git+https://notabug.org/xefglm/nodeezcryptor",
|
"nodeezcryptor": "git+https://notabug.org/xefglm/nodeezcryptor",
|
||||||
"sanitize-filename": "^1.6.3",
|
"sanitize-filename": "^1.6.3",
|
||||||
"socket.io": "^2.3.0"
|
"socket.io": "^2.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {}
|
||||||
"electron": "^9.2.1"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,7 @@ class DeezerAPI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return data.data;
|
return data.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ class Track {
|
||||||
this.artistString = this.artists.map((a) => a.name).join(', ');
|
this.artistString = this.artists.map((a) => a.name).join(', ');
|
||||||
|
|
||||||
this.album = new Album(json);
|
this.album = new Album(json);
|
||||||
this.trackNumber = json.TRACK_NUMBER;
|
this.trackNumber = parseInt((json.TRACK_NUMBER || 0).toString(), 10);
|
||||||
this.diskNumber = json.DISK_NUMBER;
|
this.diskNumber = parseInt((json.DISK_NUMBER || 0).toString(), 10);
|
||||||
this.explicit = json['EXPLICIT_LYRICS'] == 1 ? true:false;
|
this.explicit = json['EXPLICIT_LYRICS'] == 1 ? true:false;
|
||||||
this.lyricsId = json.LYRICS_ID;
|
this.lyricsId = json.LYRICS_ID;
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ class Album {
|
||||||
//Type
|
//Type
|
||||||
this.type = 'album';
|
this.type = 'album';
|
||||||
if (json.TYPE && json.TYPE.toString() == "0") this.type = 'single';
|
if (json.TYPE && json.TYPE.toString() == "0") this.type = 'single';
|
||||||
if (!json.ARTISTS_ALBUMS_IS_OFFICIAL) this.type = 'featured';
|
if (json.ROLE_ID == 5) this.type = 'featured';
|
||||||
|
|
||||||
//Helpers
|
//Helpers
|
||||||
this.artistString = this.artists.map((a) => a.name).join(', ');
|
this.artistString = this.artists.map((a) => a.name).join(', ');
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Downloads {
|
||||||
|
|
||||||
generateTrackPath(track, quality) {
|
generateTrackPath(track, quality) {
|
||||||
//Generate filename
|
//Generate filename
|
||||||
let fn = this.settings.downloadFilename + (quality == 9 ? '.flac' : '.mp3');
|
let fn = this.settings.downloadFilename;
|
||||||
|
|
||||||
//Disable feats for single artist
|
//Disable feats for single artist
|
||||||
let feats = '';
|
let feats = '';
|
||||||
|
@ -108,12 +108,15 @@ class Downloads {
|
||||||
//Save to DB
|
//Save to DB
|
||||||
if (this.download) {
|
if (this.download) {
|
||||||
await new Promise((res, rej) => {
|
await new Promise((res, rej) => {
|
||||||
// this.db.update({_id: this.download.id}, {state: 3}, (e) => {
|
this.db.update({_id: this.download.id}, {
|
||||||
// res();
|
state: this.download.state,
|
||||||
// });
|
fallback: this.download.fallback,
|
||||||
this.db.remove({_id: this.download.id}, (e) => {
|
}, (e) => {
|
||||||
res();
|
res();
|
||||||
});
|
});
|
||||||
|
// this.db.remove({_id: this.download.id}, (e) => {
|
||||||
|
// res();
|
||||||
|
// });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +147,7 @@ class Downloads {
|
||||||
if (!docs) return;
|
if (!docs) return;
|
||||||
|
|
||||||
for (let d of docs) {
|
for (let d of docs) {
|
||||||
if (d.state < 3) this.downloads.push(Download.fromDB(d, () => {this._downloadDone();}));
|
if (d.state < 3 && d.state >= 0) this.downloads.push(Download.fromDB(d, () => {this._downloadDone();}));
|
||||||
//TODO: Ignore for now completed
|
//TODO: Ignore for now completed
|
||||||
}
|
}
|
||||||
res();
|
res();
|
||||||
|
@ -196,7 +199,9 @@ class Download {
|
||||||
//1 - downloading
|
//1 - downloading
|
||||||
//2 - post-processing
|
//2 - post-processing
|
||||||
//3 - done
|
//3 - done
|
||||||
|
//-1 - download error
|
||||||
this.state = 0;
|
this.state = 0;
|
||||||
|
this.fallback = false;
|
||||||
|
|
||||||
this._request;
|
this._request;
|
||||||
//Post Processing Promise
|
//Post Processing Promise
|
||||||
|
@ -213,7 +218,8 @@ class Download {
|
||||||
path: this.path,
|
path: this.path,
|
||||||
quality: this.quality,
|
quality: this.quality,
|
||||||
track: this.track,
|
track: this.track,
|
||||||
state: this.state
|
state: this.state,
|
||||||
|
fallback: this.fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -221,6 +227,7 @@ class Download {
|
||||||
//Create download from DB document
|
//Create download from DB document
|
||||||
static fromDB(doc, onDone) {
|
static fromDB(doc, onDone) {
|
||||||
let d = new Download(doc.track, doc.path, doc.quality, onDone);
|
let d = new Download(doc.track, doc.path, doc.quality, onDone);
|
||||||
|
d.fallback = doc.fallback ? true : false; //Null check
|
||||||
d.state = doc.state;
|
d.state = doc.state;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
@ -240,8 +247,24 @@ class Download {
|
||||||
|
|
||||||
//Get download info
|
//Get download info
|
||||||
if (!this.url) this.url = Track.getUrl(this.track.streamUrl, this.quality);
|
if (!this.url) this.url = Track.getUrl(this.track.streamUrl, this.quality);
|
||||||
|
|
||||||
this._request = https.get(this.url, {headers: {'Range': `bytes=${start}-`}}, (r) => {
|
this._request = https.get(this.url, {headers: {'Range': `bytes=${start}-`}}, (r) => {
|
||||||
|
|
||||||
|
//Error
|
||||||
|
if (r.statusCode >= 400) {
|
||||||
|
//Fallback on error
|
||||||
|
if (this.quality > 1) {
|
||||||
|
if (this.quality == 3) this.quality = 1;
|
||||||
|
if (this.quality == 9) this.quality = 3;
|
||||||
|
this.url = null;
|
||||||
|
this.fallback = true;
|
||||||
|
return this.start();
|
||||||
|
};
|
||||||
|
//Error
|
||||||
|
this.state = -1;
|
||||||
|
console.log(`Undownloadable track ID: ${this.track.id}`);
|
||||||
|
return this.onDone();
|
||||||
|
}
|
||||||
|
|
||||||
//On download done
|
//On download done
|
||||||
r.on('end', () => {
|
r.on('end', () => {
|
||||||
if (this.downloaded != this.size) return;
|
if (this.downloaded != this.size) return;
|
||||||
|
@ -288,6 +311,7 @@ class Download {
|
||||||
} catch (e) {};
|
} catch (e) {};
|
||||||
|
|
||||||
//Decrypt
|
//Decrypt
|
||||||
|
this.path += (this.quality == 9) ? '.flac' : '.mp3';
|
||||||
decryptor.decryptFile(decryptor.getKey(this.track.id), tmp, `${tmp}.DEC`);
|
decryptor.decryptFile(decryptor.getKey(this.track.id), tmp, `${tmp}.DEC`);
|
||||||
fs.promises.copyFile(`${tmp}.DEC`, this.path);
|
fs.promises.copyFile(`${tmp}.DEC`, this.path);
|
||||||
//Delete encrypted
|
//Delete encrypted
|
||||||
|
|
|
@ -3,6 +3,7 @@ const path = require('path');
|
||||||
const https = require('https');
|
const https = require('https');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const axios = require('axios').default;
|
const axios = require('axios').default;
|
||||||
|
const LastfmAPI = require('lastfmapi');
|
||||||
const {DeezerAPI, DeezerDecryptionStream} = require('./deezer');
|
const {DeezerAPI, DeezerDecryptionStream} = require('./deezer');
|
||||||
const {Settings} = require('./settings');
|
const {Settings} = require('./settings');
|
||||||
const {Track, Album, Artist, Playlist, DeezerProfile, SearchResults, DeezerLibrary, DeezerPage, Lyrics} = require('./definitions');
|
const {Track, Album, Artist, Playlist, DeezerProfile, SearchResults, DeezerLibrary, DeezerPage, Lyrics} = require('./definitions');
|
||||||
|
@ -21,6 +22,12 @@ app.use(express.static(path.join(__dirname, '../client', 'dist')));
|
||||||
//Server
|
//Server
|
||||||
const server = require('http').createServer(app);
|
const server = require('http').createServer(app);
|
||||||
const io = require('socket.io').listen(server);
|
const io = require('socket.io').listen(server);
|
||||||
|
//LastFM
|
||||||
|
//plz don't steal creds, it's just lastfm
|
||||||
|
let lastfm = new LastfmAPI({
|
||||||
|
api_key: 'b6ab5ae967bcd8b10b23f68f42493829',
|
||||||
|
secret: '861b0dff9a8a574bec747f9dab8b82bf'
|
||||||
|
});
|
||||||
|
|
||||||
//Get playback info
|
//Get playback info
|
||||||
app.get('/playback', async (req, res) => {
|
app.get('/playback', async (req, res) => {
|
||||||
|
@ -425,20 +432,58 @@ app.delete('/downloads/:index', async (req, res) => {
|
||||||
res.status(200).end();
|
res.status(200).end();
|
||||||
});
|
});
|
||||||
|
|
||||||
//Log listen to deezer
|
//Log listen to deezer & lastfm
|
||||||
app.put('/log/:id', async (req, res) => {
|
app.post('/log', async (req, res) => {
|
||||||
await deezer.callApi('log.listen', {
|
//LastFM
|
||||||
params: {
|
if (settings.lastFM)
|
||||||
timestamp: Math.floor(new Date() / 1000),
|
lastfm.track.scrobble({
|
||||||
ts_listen: Math.floor(new Date() / 1000),
|
artist: req.body.artists[0].name,
|
||||||
type: 1,
|
track: req.body.title,
|
||||||
stat: {seek: 0, pause: 0, sync: 0},
|
timestamp: Math.floor((new Date()).getTime() / 1000)
|
||||||
media: {id: req.params.id.toString(), type: 'song', format: 'MP3_128'}
|
});
|
||||||
}
|
|
||||||
});
|
//Deezer
|
||||||
|
if (settings.logListen)
|
||||||
|
await deezer.callApi('log.listen', {
|
||||||
|
params: {
|
||||||
|
timestamp: Math.floor(new Date() / 1000),
|
||||||
|
ts_listen: Math.floor(new Date() / 1000),
|
||||||
|
type: 1,
|
||||||
|
stat: {seek: 0, pause: 0, sync: 0},
|
||||||
|
media: {id: req.body.id, type: 'song', format: 'MP3_128'}
|
||||||
|
}
|
||||||
|
});
|
||||||
res.status(200).end();
|
res.status(200).end();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Last.FM authorization callback
|
||||||
|
app.get('/lastfm', async (req, res) => {
|
||||||
|
//Got token
|
||||||
|
if (req.query.token) {
|
||||||
|
let token = req.query.token;
|
||||||
|
await new Promise((res, rej) => {
|
||||||
|
lastfm.authenticate(token, (err, sess) => {
|
||||||
|
if (err) res();
|
||||||
|
//Save to settings
|
||||||
|
settings.lastFM = {
|
||||||
|
name: sess.username,
|
||||||
|
key: sess.key
|
||||||
|
};
|
||||||
|
settings.save();
|
||||||
|
res();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
authorizeLastFM();
|
||||||
|
//Redirect to homepage
|
||||||
|
return res.redirect('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get auth url
|
||||||
|
res.json({
|
||||||
|
url: lastfm.getAuthenticationUrl({cb: `http://${req.socket.remoteAddress}:${settings.port}/lastfm`})
|
||||||
|
}).end();
|
||||||
|
});
|
||||||
|
|
||||||
//Redirect to index on unknown path
|
//Redirect to index on unknown path
|
||||||
app.all('*', (req, res) => {
|
app.all('*', (req, res) => {
|
||||||
res.redirect('/');
|
res.redirect('/');
|
||||||
|
@ -490,6 +535,12 @@ async function qualityFallback(info, quality = 3) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Autorize lastfm with saved credentials
|
||||||
|
function authorizeLastFM() {
|
||||||
|
if (!settings.lastFM) return;
|
||||||
|
lastfm.setSessionCredentials(settings.lastFM.name, settings.lastFM.key);
|
||||||
|
}
|
||||||
|
|
||||||
//ecb = Error callback
|
//ecb = Error callback
|
||||||
async function createServer(electron = false, ecb) {
|
async function createServer(electron = false, ecb) {
|
||||||
//Prepare globals
|
//Prepare globals
|
||||||
|
@ -526,6 +577,9 @@ async function createServer(electron = false, ecb) {
|
||||||
});
|
});
|
||||||
}, 350);
|
}, 350);
|
||||||
|
|
||||||
|
//LastFM
|
||||||
|
authorizeLastFM();
|
||||||
|
|
||||||
//Start server
|
//Start server
|
||||||
server.on('error', (e) => {
|
server.on('error', (e) => {
|
||||||
ecb(e);
|
ecb(e);
|
||||||
|
|
|
@ -24,6 +24,7 @@ class Settings {
|
||||||
this.downloadFilename = '%0trackNumber%. %artists% - %title%';
|
this.downloadFilename = '%0trackNumber%. %artists% - %title%';
|
||||||
|
|
||||||
this.logListen = false;
|
this.logListen = false;
|
||||||
|
this.lastFM = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Based on electorn app.getPath
|
//Based on electorn app.getPath
|
||||||
|
@ -80,7 +81,8 @@ class Settings {
|
||||||
Object.assign(this, JSON.parse(data));
|
Object.assign(this, JSON.parse(data));
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(`Error loading settings: ${e}. Using defaults.`)
|
console.error(`Error loading settings: ${e}. Using defaults.`);
|
||||||
|
this.save();
|
||||||
}
|
}
|
||||||
this.electron = e;
|
this.electron = e;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "freezer",
|
"name": "freezer",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.3",
|
"version": "1.0.4",
|
||||||
"description": "",
|
"description": "",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pack": "electron-builder --dir",
|
"pack": "electron-builder --dir",
|
||||||
|
|
Loading…
Reference in New Issue