| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 
							- const coreClass = require("../core");
 
- const config = require('config'),
 
- 	async  = require('async');
 
- let apiResults = {
 
- 	access_token: "",
 
- 	token_type: "",
 
- 	expires_in: 0,
 
- 	expires_at: 0,
 
- 	scope: "",
 
- };
 
- module.exports = class extends coreClass {
 
- 	constructor(name, moduleManager) {
 
- 		super(name, moduleManager);
 
- 		this.dependsOn = ["cache"];
 
- 	}
 
- 	initialize() {
 
- 		return new Promise((resolve, reject) => {
 
- 			this.setStage(1);
 
- 			this.cache = this.moduleManager.modules["cache"];
 
- 			this.utils = this.moduleManager.modules["utils"];
 
- 			const client = config.get("apis.spotify.client");
 
- 			const secret = config.get("apis.spotify.secret");
 
- 			const OAuth2 = require('oauth').OAuth2;
 
- 			this.SpotifyOauth = new OAuth2(
 
- 				client,
 
- 				secret, 
 
- 				'https://accounts.spotify.com/', 
 
- 				null,
 
- 				'api/token',
 
- 				null);
 
- 			async.waterfall([
 
- 				(next) => {
 
- 					this.setStage(2);
 
- 					this.cache.hget("api", "spotify", next, true);
 
- 				},
 
- 	
 
- 				(data, next) => {
 
- 					this.setStage(3);
 
- 					if (data) apiResults = data;
 
- 					next();
 
- 				}
 
- 			], async (err) => {
 
- 				if (err) {
 
- 					err = await this.utils.getError(err);
 
- 					reject(err);
 
- 				} else {
 
- 					resolve();
 
- 				}
 
- 			});
 
- 		});
 
- 	}
 
- 	async getToken() {
 
- 		try { await this._validateHook(); } catch { return; }
 
- 		return new Promise((resolve, reject) => {
 
- 			if (Date.now() > apiResults.expires_at) {
 
- 				this.requestToken(() => {
 
- 					resolve(apiResults.access_token);
 
- 				});
 
- 			} else resolve(apiResults.access_token);
 
- 		});
 
- 	}
 
- 	async requestToken(cb) {
 
- 		try { await this._validateHook(); } catch { return; }
 
- 		async.waterfall([
 
- 			(next) => {
 
- 				this.logger.info("SPOTIFY_REQUEST_TOKEN", "Requesting new Spotify token.");
 
- 				this.SpotifyOauth.getOAuthAccessToken(
 
- 					'',
 
- 					{ 'grant_type': 'client_credentials' },
 
- 					next
 
- 				);
 
- 			},
 
- 			(access_token, refresh_token, results, next) => {
 
- 				apiResults = results;
 
- 				apiResults.expires_at = Date.now() + (results.expires_in * 1000);
 
- 				this.cache.hset("api", "spotify", apiResults, next, true);
 
- 			}
 
- 		], () => {
 
- 			cb();
 
- 		});
 
- 	}
 
- }
 
 
  |