graphql-spotify
Advanced tools
Comparing version 0.4.2 to 0.4.3
{ | ||
"name": "graphql-spotify", | ||
"version": "0.4.2", | ||
"version": "0.4.3", | ||
"description": "GraphQL Schema And Resolvers For Spotify Web API", | ||
@@ -5,0 +5,0 @@ "main": "dist/lib.js", |
@@ -8,3 +8,4 @@ import { | ||
PlaylistLoader, PlaylistTracksLoader, AlbumsLoader, UserLoader, ArtistsLoader, | ||
AudioFeaturesLoader, SavedContainsLoader, TracksLoader, CategoriesLoader, RecommendationsLoader | ||
AudioFeaturesLoader, SavedContainsLoader, TracksLoader, CategoriesLoader, RecommendationsLoader, | ||
CategoryPlaylistLoader, CategoryLoader | ||
} = makeLoaders(token); | ||
@@ -38,2 +39,6 @@ | ||
}, | ||
category: async (obj, args) => { | ||
const res = await CategoryLoader.load(args.id) | ||
return res | ||
}, | ||
recommendations: async (obj, args) => { | ||
@@ -65,3 +70,5 @@ return await RecommendationsLoader.load(args.parameters) | ||
// 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 = [] | ||
@@ -73,3 +80,2 @@ while (currentOffset < total ) { | ||
const fetchResults = await Promise.all(fetches); | ||
let allItems = items | ||
fetchResults.forEach((result) => { | ||
@@ -136,2 +142,8 @@ allItems = allItems.concat(result.items) | ||
}, | ||
Category: { | ||
playlists: async(category, args) => { | ||
const { playlists } = await CategoryPlaylistLoader.load({ id: category.id, queryParams: args }) | ||
return playlists | ||
} | ||
}, | ||
Item: { | ||
@@ -138,0 +150,0 @@ __resolveType(object, context, info){ |
@@ -10,2 +10,7 @@ const Category = ` | ||
name: String | ||
""" | ||
Get a list of Spotify playlists tagged with a particular category | ||
limit: Default: 20. Minimum: 1. Maximum: 50 | ||
""" | ||
playlists(country: String, limit: Int, offset: Int): Paging | ||
} | ||
@@ -12,0 +17,0 @@ ` |
@@ -6,2 +6,3 @@ const RootQuery = ` | ||
Returns the most recent 50 tracks played by a user | ||
Required Scope: **user-read-recently-played** | ||
""" | ||
@@ -29,5 +30,12 @@ recentlyPlayed: [PlayHistory] | ||
""" | ||
categories(limit: Int, offset: Int): Paging | ||
categories(limit: Int, offset: Int, country: String, locale: String): Paging | ||
""" | ||
Get a single category used to tag items in Spotify (on, for example, the Spotify player’s “Browse” tab) | ||
https://beta.developer.spotify.com/documentation/web-api/reference/browse/get-category/ | ||
""" | ||
category(id: String!): Category | ||
""" | ||
Save one or more tracks to the current user’s ‘Your Music’ library | ||
Required Scope: **user-library-modify** | ||
""" | ||
recommendations(parameters: RecommendationParameters): RecommendationsResponse | ||
@@ -34,0 +42,0 @@ |
@@ -20,2 +20,3 @@ const Track = ` | ||
saved in the user's library | ||
Required Scope: **user-library-read** | ||
""" | ||
@@ -22,0 +23,0 @@ saved: Boolean |
@@ -49,2 +49,12 @@ import 'isomorphic-fetch' | ||
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) | ||
@@ -70,2 +80,12 @@ { | ||
export async function getCategory(token, id) | ||
{ | ||
let res = await fetch(`https://api.spotify.com/v1/browse/categories/${id}`, { | ||
method: 'GET', | ||
headers: makeHeaders(token) | ||
}); | ||
res = await res.json(); | ||
return res; | ||
} | ||
export async function getRecentlyPlayed(token) { | ||
@@ -151,17 +171,2 @@ const url = "https://api.spotify.com/v1/me/player/recently-played?limit=50" | ||
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) | ||
} | ||
} | ||
export function makeUserLoader(token) { | ||
@@ -239,2 +244,16 @@ const batchLoadFn = async ([key]) => { | ||
export function makeCategoryLoader(token) { | ||
const batchLoadFn = async ([key]) => { | ||
const category = await getCategory(token, key) | ||
return [category] | ||
} | ||
return new Dataloader(batchLoadFn, { batch: false }) | ||
} | ||
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) { | ||
@@ -245,2 +264,19 @@ const batchLoadFn = async ([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), | ||
CategoryLoader: makeCategoryLoader(token) | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
203568
28
1736
1
75
28