Socket
Socket
Sign inDemoInstall

graphql-spotify

Package Overview
Dependencies
21
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.4.15 to 0.4.21

.travis.yml

152

dist/lib.js

@@ -85,3 +85,3 @@ module.exports =

var _resolvers = __webpack_require__(16);
var _resolvers = __webpack_require__(19);

@@ -164,4 +164,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var _RootQuery = __webpack_require__(15);
var _RecommendationParameters = __webpack_require__(15);
var _RecommendationParameters2 = _interopRequireDefault(_RecommendationParameters);
var _RecommendationsResponse = __webpack_require__(16);
var _RecommendationsResponse2 = _interopRequireDefault(_RecommendationsResponse);
var _RecommendationsSeedObject = __webpack_require__(17);
var _RecommendationsSeedObject2 = _interopRequireDefault(_RecommendationsSeedObject);
var _RootQuery = __webpack_require__(18);
var _RootQuery2 = _interopRequireDefault(_RootQuery);

@@ -178,3 +190,3 @@

const typeDefs = [SchemaDefinition, _RootQuery2.default, _Playlist2.default, _Image2.default, _User2.default, _PlaylistTrack2.default, _Track2.default, _Album2.default, _Artist2.default, _Paging2.default, _AudioFeatures2.default, _PlayHistory2.default, _Category2.default, _ExternalUrls2.default];
const typeDefs = [SchemaDefinition, _RootQuery2.default, _Playlist2.default, _Image2.default, _User2.default, _PlaylistTrack2.default, _Track2.default, _Album2.default, _Artist2.default, _Paging2.default, _AudioFeatures2.default, _PlayHistory2.default, _Category2.default, _RecommendationParameters2.default, _RecommendationsResponse2.default, _RecommendationsSeedObject2.default, _ExternalUrls2.default];

@@ -571,2 +583,87 @@ exports.default = typeDefs;

Object.defineProperty(exports, "__esModule", {
value: true
});
// TODO after all parameters on targting attributes from https://beta.developer.spotify.com/documentation/web-api/reference/browse/get-recommendations/
const RecommendationParameters = `
input RecommendationParameters {
limit: Int
seed_artists: [String]
seed_genres: [String]
seed_tracks: [String]
}
`;
exports.default = RecommendationParameters;
/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const RecommendationsResponse = `
type RecommendationsResponse {
seeds: [RecommendationsSeedObject]
"""
An array of track object (simplified) ordered according to the parameters supplied
"""
tracks: [Track]
}
`;
exports.default = RecommendationsResponse;
/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const RecommendationsSeedObject = `
type RecommendationsSeedObject {
"""
The number of tracks available after min_* and max_* filters have been applied
"""
afterFilteringSize: Int
"""
The number of tracks available after relinking for regional availability.
"""
afterRelinkingSize: Int
"""
A link to the full track or artist data for this seed. For tracks this will be a link to a Track Object. For artists a link to an Artist Object. For genre seeds, this value will be null.
"""
href: String
"""
The id used to select this seed. This will be the same as the string used in the seed_artists , seed_tracks or seed_genres parameter
"""
id: String
"""
The number of recommended tracks available for this seed.
"""
initialPoolSize: Int
"""
The entity type of this seed. One of artist , track or genre
"""
type: String
}
`;
exports.default = RecommendationsSeedObject;
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true

@@ -602,2 +699,5 @@ });

categories(limit: Int, offset: Int): Paging
"""
"""
recommendations(parameters: RecommendationParameters): RecommendationsResponse

@@ -615,3 +715,3 @@ }

/***/ }),
/* 16 */
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

@@ -627,3 +727,3 @@

var _SpotifyWebApi = __webpack_require__(17);
var _SpotifyWebApi = __webpack_require__(20);

@@ -633,3 +733,3 @@ function makeResolvers(token) {

PlaylistLoader, PlaylistTracksLoader, AlbumsLoader, UserLoader, ArtistsLoader,
AudioFeaturesLoader, SavedContainsLoader, TracksLoader, CategoriesLoader
AudioFeaturesLoader, SavedContainsLoader, TracksLoader, CategoriesLoader, RecommendationsLoader
} = (0, _SpotifyWebApi.makeLoaders)(token);

@@ -662,2 +762,5 @@

return res.categories;
},
recommendations: async (obj, args) => {
return await RecommendationsLoader.load(args.parameters);
}

@@ -776,3 +879,3 @@ },

/***/ }),
/* 17 */
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

@@ -789,2 +892,3 @@

exports.getFeaturedPlaylists = getFeaturedPlaylists;
exports.getRecommendations = getRecommendations;
exports.getCategories = getCategories;

@@ -809,6 +913,7 @@ exports.getRecentlyPlayed = getRecentlyPlayed;

exports.makeCategoriesLoader = makeCategoriesLoader;
exports.makeRecommendationsLoader = makeRecommendationsLoader;
__webpack_require__(18);
__webpack_require__(21);
var _dataloader = __webpack_require__(19);
var _dataloader = __webpack_require__(22);

@@ -827,2 +932,6 @@ var _dataloader2 = _interopRequireDefault(_dataloader);

function cacheKeyFnForQueryKeys(key) {
return JSON.stringify(key);
}
function serializeToURLParameters(obj) {

@@ -859,2 +968,11 @@ return Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&');

async function getRecommendations(token, queryParams) {
let res = await fetch(`https://api.spotify.com/v1/recommendations?${serializeToURLParameters(queryParams)}`, {
method: 'GET',
headers: makeHeaders(token)
});
res = await res.json();
return res;
}
async function getCategories(token, queryParams = {}) {

@@ -952,3 +1070,4 @@ let res = await fetch(`https://api.spotify.com/v1/browse/categories?${serializeToURLParameters(queryParams)}`, {

AudioFeaturesLoader: makeAudioFeaturesLoader(token),
CategoriesLoader: makeCategoriesLoader(token)
CategoriesLoader: makeCategoriesLoader(token),
RecommendationsLoader: makeRecommendationsLoader(token)
};

@@ -1026,7 +1145,14 @@ }

};
return new _dataloader2.default(batchLoadFn, { batch: false });
return new _dataloader2.default(batchLoadFn, { batch: false, cacheKeyFn: cacheKeyFnForQueryKeys });
}
function makeRecommendationsLoader(token) {
const batchLoadFn = async ([key]) => {
return [await getRecommendations(token, key)];
};
return new _dataloader2.default(batchLoadFn, { batch: false, cacheKeyFn: cacheKeyFnForQueryKeys });
}
/***/ }),
/* 18 */
/* 21 */
/***/ (function(module, exports) {

@@ -1037,3 +1163,3 @@

/***/ }),
/* 19 */
/* 22 */
/***/ (function(module, exports) {

@@ -1040,0 +1166,0 @@

2

package.json
{
"name": "graphql-spotify",
"version": "0.4.15",
"version": "0.4.21",
"description": "GraphQL Schema And Resolvers For Spotify Web API",

@@ -5,0 +5,0 @@ "main": "dist/lib.js",

import {
getCategories,
getFeaturedPlaylists, getRecentlyPlayed, makeLoaders, saveTrackToLib

@@ -9,3 +8,4 @@ } from './SpotifyWebApi'

PlaylistLoader, PlaylistTracksLoader, AlbumsLoader, UserLoader, ArtistsLoader,
AudioFeaturesLoader, SavedContainsLoader, TracksLoader, CategoriesLoader
AudioFeaturesLoader, SavedContainsLoader, TracksLoader, CategoriesLoader, RecommendationsLoader,
CategoryPlaylistLoader
} = makeLoaders(token);

@@ -38,2 +38,5 @@

return res.categories
},
recommendations: async (obj, args) => {
return await RecommendationsLoader.load(args.parameters)
}

@@ -63,3 +66,5 @@ },

// otherwise always fetch all of the tracks
let currentOffset = items.length;
// when resolving a full playlist there are already items
let allItems = items || []
let currentOffset = allItems.length
let fetches = []

@@ -71,3 +76,2 @@ while (currentOffset < total ) {

const fetchResults = await Promise.all(fetches);
let allItems = items
fetchResults.forEach((result) => {

@@ -134,2 +138,8 @@ allItems = allItems.concat(result.items)

},
Category: {
playlists: async(category, args) => {
const { playlists } = await CategoryPlaylistLoader.load({ id: category.id, queryParams: args })
return playlists
}
},
Item: {

@@ -136,0 +146,0 @@ __resolveType(object, context, info){

@@ -10,2 +10,6 @@ const Category = `

name: String
"""
Get a list of Spotify playlists tagged with a particular category
"""
playlists(country: String, limit: Int, offset: Int): Paging
}

@@ -12,0 +16,0 @@ `

@@ -13,2 +13,6 @@ import Playlist from './Playlist'

import Category from './Category'
import RecommendationParameters from './RecommendationParameters'
import RecommendationsResponse from './RecommendationsResponse'
import RecommendationsSeedObject from './RecommendationsSeedObject'
import RootQuery from './RootQuery'

@@ -24,4 +28,4 @@

const typeDefs = [SchemaDefinition, RootQuery, Playlist, Image, User, PlaylistTrack, Track, Album, Artist, Paging,
AudioFeatures, PlayHistory, Category, ExternalUrls];
AudioFeatures, PlayHistory, Category, RecommendationParameters, RecommendationsResponse, RecommendationsSeedObject, ExternalUrls];
export default typeDefs

@@ -29,2 +29,5 @@ const RootQuery = `

categories(limit: Int, offset: Int): Paging
"""
"""
recommendations(parameters: RecommendationParameters): RecommendationsResponse

@@ -31,0 +34,0 @@ }

@@ -12,2 +12,6 @@ import 'isomorphic-fetch'

function cacheKeyFnForQueryKeys(key) {
return JSON.stringify(key)
}
function serializeToURLParameters(obj) {

@@ -46,2 +50,22 @@ return Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&')

export async function getCategoryPlaylists(token, id, queryParams = {})
{
let res = await fetch(`https://api.spotify.com/v1/browse/categories/${id}/playlists?${serializeToURLParameters(queryParams)}`, {
method: 'GET',
headers: makeHeaders(token)
});
res = await res.json();
return res;
}
export async function getRecommendations(token, queryParams)
{
let res = await fetch(`https://api.spotify.com/v1/recommendations?${serializeToURLParameters(queryParams)}`, {
method: 'GET',
headers: makeHeaders(token)
});
res = await res.json();
return res;
}
export async function getCategories(token, queryParams = {})

@@ -137,16 +161,2 @@ {

export function makeLoaders(token) {
return {
UserLoader : makeUserLoader(token),
PlaylistLoader : makePlaylistLoader(token),
PlaylistTracksLoader: makePlaylistTracksLoader(token),
AlbumsLoader: makeAlbumsLoader(token),
ArtistsLoader: makeArtistsLoader(token),
TracksLoader: makeTracksLoader(token),
SavedContainsLoader: makeSavedContainsLoader(token),
AudioFeaturesLoader: makeAudioFeaturesLoader(token),
CategoriesLoader : makeCategoriesLoader(token),
}
}
export function makeUserLoader(token) {

@@ -221,3 +231,32 @@ const batchLoadFn = async ([key]) => {

}
return new Dataloader(batchLoadFn, { batch: false })
return new Dataloader(batchLoadFn, { batch: false, cacheKeyFn: cacheKeyFnForQueryKeys })
}
export function makeCategoriesPlaylistsLoader(token) {
const batchLoadFn = async ([{ id, queryParams }]) => {
return [await getCategoryPlaylists(token, id, queryParams)]
}
return new Dataloader(batchLoadFn, { batch: false, cacheKeyFn: cacheKeyFnForQueryKeys })
}
export function makeRecommendationsLoader(token) {
const batchLoadFn = async ([key]) => {
return [await getRecommendations(token, key)]
}
return new Dataloader(batchLoadFn, { batch: false, cacheKeyFn: cacheKeyFnForQueryKeys })
}
export function makeLoaders(token) {
return {
UserLoader : makeUserLoader(token),
PlaylistLoader : makePlaylistLoader(token),
PlaylistTracksLoader: makePlaylistTracksLoader(token),
AlbumsLoader: makeAlbumsLoader(token),
ArtistsLoader: makeArtistsLoader(token),
TracksLoader: makeTracksLoader(token),
SavedContainsLoader: makeSavedContainsLoader(token),
AudioFeaturesLoader: makeAudioFeaturesLoader(token),
CategoriesLoader : makeCategoriesLoader(token),
RecommendationsLoader: makeRecommendationsLoader(token),
CategoryPlaylistLoader: makeCategoriesPlaylistsLoader(token)
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc