const PLAYLIST_IDS = [ 'spotify:playlist:0vvXsWCC9xrXsKd4FyS8kM', 'spotify:playlist:5G1gAuXjmJHgEoI7XzrXOP', 'spotify:playlist:5OJs7eATLrvZ2Ea9als3lK', 'spotify:playlist:5NKv3Ucc0kqe1Me7CEdWty', 'spotify:playlist:0jGkhFr4yxLlHnpRg2Njj4' ] interface SpotifyTracks { items: Array<{ track: { name: string } }> } const random = (max: number) => { return Math.floor(Math.random() * Math.floor(max)) } const getHeaders = (token: string) => ({ headers: { accept: 'application/json', 'content-type': 'application/json', authorization: `Bearer ${token}` } }) export const redirectToSpotifyConnect = () => { const authorizeURL = new URL('https://accounts.spotify.com/authorize') authorizeURL.searchParams.append( 'client_id', process.env.VUE_APP_SPOTIFY_CLIENT_ID || '' ) authorizeURL.searchParams.append('response_type', 'token') authorizeURL.searchParams.append('show_dialog', 'false') authorizeURL.searchParams.append( 'scope', 'streaming,user-modify-playback-state' ) authorizeURL.searchParams.append('redirect_uri', `${location.origin}/spotify`) location.href = authorizeURL.toString() } export const playOnSpotify = async (token: string, deviceId: string) => { const playlistId = PLAYLIST_IDS[random(PLAYLIST_IDS.length - 1)] const trackResult = await fetch( `https://api.spotify.com/v1/playlists/${playlistId}/tracks?fields=items(track(name))` ) const tracks = (await trackResult.json()) as SpotifyTracks await fetch( `https://api.spotify.com/v1/me/player/play?device_id=${deviceId}`, { method: 'PUT', ...getHeaders(token), body: JSON.stringify({ context_uri: PLAYLIST_IDS[random(PLAYLIST_IDS.length - 1)], offset: { position: random(tracks?.items?.length || 0) } }) } ) } export const pauseOnSpotify = async (token: string, deviceId: string) => { await fetch( `https://api.spotify.com/v1/me/player/pause?device_id=${deviceId}`, { method: 'PUT', ...getHeaders(token) } ) }