spotify.js 5.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. // Helper functions for accessing the Spotify API.
  3. const httpsRequest = require('./httpsRequest');
  4. var Parse = require('parse/node').Parse;
  5. // Returns a promise that fulfills iff this user id is valid.
  6. function validateAuthData(authData) {
  7. return request('me', authData.access_token).then(data => {
  8. if (data && data.id == authData.id) {
  9. return;
  10. }
  11. throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify auth is invalid for this user.');
  12. });
  13. }
  14. // Returns a promise that fulfills if this app id is valid.
  15. async function validateAppId(appIds, authData) {
  16. const access_token = authData.access_token;
  17. if (!Array.isArray(appIds)) {
  18. throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'appIds must be an array.');
  19. }
  20. if (!appIds.length) {
  21. throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify auth is not configured.');
  22. }
  23. const data = await request('me', access_token);
  24. if (!data || !appIds.includes(data.id)) {
  25. throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify auth is invalid for this user.');
  26. }
  27. }
  28. // A promisey wrapper for Spotify API requests.
  29. function request(path, access_token) {
  30. return httpsRequest.get({
  31. host: 'api.spotify.com',
  32. path: '/v1/' + path,
  33. headers: {
  34. Authorization: 'Bearer ' + access_token
  35. }
  36. });
  37. }
  38. module.exports = {
  39. validateAppId: validateAppId,
  40. validateAuthData: validateAuthData
  41. };
  42. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwidGhlbiIsImRhdGEiLCJpZCIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJhcHBJZHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJpbmNsdWRlcyIsInBhdGgiLCJnZXQiLCJob3N0IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvc3BvdGlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIFNwb3RpZnkgQVBJLlxuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSkge1xuICByZXR1cm4gcmVxdWVzdCgnbWUnLCBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pLnRoZW4oZGF0YSA9PiB7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5pZCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1Nwb3RpZnkgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhKSB7XG4gIGNvbnN0IGFjY2Vzc190b2tlbiA9IGF1dGhEYXRhLmFjY2Vzc190b2tlbjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFwcElkcykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2FwcElkcyBtdXN0IGJlIGFuIGFycmF5LicpO1xuICB9XG4gIGlmICghYXBwSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnU3BvdGlmeSBhdXRoIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXF1ZXN0KCdtZScsIGFjY2Vzc190b2tlbik7XG4gIGlmICghZGF0YSB8fCAhYXBwSWRzLmluY2x1ZGVzKGRhdGEuaWQpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdTcG90aWZ5IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgU3BvdGlmeSBBUEkgcmVxdWVzdHMuXG5mdW5jdGlvbiByZXF1ZXN0KHBhdGgsIGFjY2Vzc190b2tlbikge1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCh7XG4gICAgaG9zdDogJ2FwaS5zcG90aWZ5LmNvbScsXG4gICAgcGF0aDogJy92MS8nICsgcGF0aCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBhY2Nlc3NfdG9rZW4sXG4gICAgfSxcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLE1BQU1BLFlBQVksR0FBR0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzlDLElBQUlDLEtBQUssR0FBR0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDQyxLQUFLOztBQUV2QztBQUNBLFNBQVNDLGdCQUFnQkEsQ0FBQ0MsUUFBUSxFQUFFO0VBQ2xDLE9BQU9DLE9BQU8sQ0FBQyxJQUFJLEVBQUVELFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxJQUFJO0lBQ3ZELElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxFQUFFLElBQUlMLFFBQVEsQ0FBQ0ssRUFBRSxFQUFFO01BQ2xDO0lBQ0Y7SUFDQSxNQUFNLElBQUlQLEtBQUssQ0FBQ1EsS0FBSyxDQUFDUixLQUFLLENBQUNRLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsd0NBQXdDLENBQUM7RUFDL0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxlQUFlQyxhQUFhQSxDQUFDQyxNQUFNLEVBQUVULFFBQVEsRUFBRTtFQUM3QyxNQUFNRSxZQUFZLEdBQUdGLFFBQVEsQ0FBQ0UsWUFBWTtFQUMxQyxJQUFJLENBQUNRLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixNQUFNLENBQUMsRUFBRTtJQUMxQixNQUFNLElBQUlYLEtBQUssQ0FBQ1EsS0FBSyxDQUFDUixLQUFLLENBQUNRLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsMEJBQTBCLENBQUM7RUFDakY7RUFDQSxJQUFJLENBQUNFLE1BQU0sQ0FBQ0csTUFBTSxFQUFFO0lBQ2xCLE1BQU0sSUFBSWQsS0FBSyxDQUFDUSxLQUFLLENBQUNSLEtBQUssQ0FBQ1EsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSxpQ0FBaUMsQ0FBQztFQUN4RjtFQUNBLE1BQU1ILElBQUksR0FBRyxNQUFNSCxPQUFPLENBQUMsSUFBSSxFQUFFQyxZQUFZLENBQUM7RUFDOUMsSUFBSSxDQUFDRSxJQUFJLElBQUksQ0FBQ0ssTUFBTSxDQUFDSSxRQUFRLENBQUNULElBQUksQ0FBQ0MsRUFBRSxDQUFDLEVBQUU7SUFDdEMsTUFBTSxJQUFJUCxLQUFLLENBQUNRLEtBQUssQ0FBQ1IsS0FBSyxDQUFDUSxLQUFLLENBQUNDLGdCQUFnQixFQUFFLHdDQUF3QyxDQUFDO0VBQy9GO0FBQ0Y7O0FBRUE7QUFDQSxTQUFTTixPQUFPQSxDQUFDYSxJQUFJLEVBQUVaLFlBQVksRUFBRTtFQUNuQyxPQUFPTixZQUFZLENBQUNtQixHQUFHLENBQUM7SUFDdEJDLElBQUksRUFBRSxpQkFBaUI7SUFDdkJGLElBQUksRUFBRSxNQUFNLEdBQUdBLElBQUk7SUFDbkJHLE9BQU8sRUFBRTtNQUNQQyxhQUFhLEVBQUUsU0FBUyxHQUFHaEI7SUFDN0I7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVBaUIsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlosYUFBYSxFQUFFQSxhQUFhO0VBQzVCVCxnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==