mirror of
https://gitlab.com/deeplydrumming/DeemixFix.git
synced 2026-01-16 17:02:57 -03:00
102 lines
2.8 KiB
JavaScript
102 lines
2.8 KiB
JavaScript
/**
|
|
* This example is using the Authorization Code flow.
|
|
*
|
|
* In root directory run
|
|
*
|
|
* npm install express
|
|
*
|
|
* then run with the followinng command. If you don't have a client_id and client_secret yet,
|
|
* create an application on Create an application here: https://developer.spotify.com/my-applications to get them.
|
|
* Make sure you whitelist the correct redirectUri in line 26.
|
|
*
|
|
* node access-token-server.js "<Client ID>" "<Client Secret>"
|
|
*
|
|
* and visit <http://localhost:8888/login> in your Browser.
|
|
*/
|
|
const SpotifyWebApi = require('../../');
|
|
const express = require('../../node_modules/express');
|
|
|
|
const scopes = [
|
|
'ugc-image-upload',
|
|
'user-read-playback-state',
|
|
'user-modify-playback-state',
|
|
'user-read-currently-playing',
|
|
'streaming',
|
|
'app-remote-control',
|
|
'user-read-email',
|
|
'user-read-private',
|
|
'playlist-read-collaborative',
|
|
'playlist-modify-public',
|
|
'playlist-read-private',
|
|
'playlist-modify-private',
|
|
'user-library-modify',
|
|
'user-library-read',
|
|
'user-top-read',
|
|
'user-read-playback-position',
|
|
'user-read-recently-played',
|
|
'user-follow-read',
|
|
'user-follow-modify'
|
|
];
|
|
|
|
const spotifyApi = new SpotifyWebApi({
|
|
redirectUri: 'http://localhost:8888/callback',
|
|
clientId: process.argv.slice(2)[0],
|
|
clientSecret: process.argv.slice(2)[1]
|
|
});
|
|
|
|
const app = express();
|
|
|
|
app.get('/login', (req, res) => {
|
|
res.redirect(spotifyApi.createAuthorizeURL(scopes));
|
|
});
|
|
|
|
app.get('/callback', (req, res) => {
|
|
const error = req.query.error;
|
|
const code = req.query.code;
|
|
const state = req.query.state;
|
|
|
|
if (error) {
|
|
console.error('Callback Error:', error);
|
|
res.send(`Callback Error: ${error}`);
|
|
return;
|
|
}
|
|
|
|
spotifyApi
|
|
.authorizationCodeGrant(code)
|
|
.then(data => {
|
|
const access_token = data.body['access_token'];
|
|
const refresh_token = data.body['refresh_token'];
|
|
const expires_in = data.body['expires_in'];
|
|
|
|
spotifyApi.setAccessToken(access_token);
|
|
spotifyApi.setRefreshToken(refresh_token);
|
|
|
|
console.log('access_token:', access_token);
|
|
console.log('refresh_token:', refresh_token);
|
|
|
|
console.log(
|
|
`Sucessfully retreived access token. Expires in ${expires_in} s.`
|
|
);
|
|
res.send('Success! You can now close the window.');
|
|
|
|
setInterval(async () => {
|
|
const data = await spotifyApi.refreshAccessToken();
|
|
const access_token = data.body['access_token'];
|
|
|
|
console.log('The access token has been refreshed!');
|
|
console.log('access_token:', access_token);
|
|
spotifyApi.setAccessToken(access_token);
|
|
}, expires_in / 2 * 1000);
|
|
})
|
|
.catch(error => {
|
|
console.error('Error getting Tokens:', error);
|
|
res.send(`Error getting Tokens: ${error}`);
|
|
});
|
|
});
|
|
|
|
app.listen(8888, () =>
|
|
console.log(
|
|
'HTTP Server up. Now go to http://localhost:8888/login in your browser.'
|
|
)
|
|
);
|