import {default as createQueue, PRIORITY} from '../http-queue'; import ssrConfig from '../../../ssr-config' import {substituteVars} from "../../../utils/format"; const CLIENT_ID = 'u0swxz56n4iumc634at1osoqdk31qt'; const TWITCH_AUTH_URL = 'https://id.twitch.tv/oauth2' const AUTHORIZATION_URL = `${TWITCH_AUTH_URL}/authorize?client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(ssrConfig.domain + '/twitch')}&response_type=token` + '&scope=${scopes}&state=${state}'; const VALIDATE_URL = `${TWITCH_AUTH_URL}/validate` const TWITCH_API_URL = 'https://api.twitch.tv/helix'; const PROFILE_URL = TWITCH_API_URL + '/users?login=${login}'; const VIDEOS_URL = TWITCH_API_URL + '/videos?user_id=${userId}&type=${type}&first=100'; const STREAMS_URL = TWITCH_API_URL + '/streams?user_id=${userId}'; export default (options = {}) => { const queue = createQueue(options); const {fetchJson, fetchHtml, ...queueToReturn} = queue; const fetchApi = (url, accessToken, priority = PRIORITY.FG_LOW, options = {}) => fetchJson( url, { ...options, headers: { 'Client-ID': CLIENT_ID, 'Authorization': `Bearer ${accessToken}` } }, priority, ) const getAuthUrl = (state = '', scopes = '') => substituteVars(AUTHORIZATION_URL, {state: encodeURIComponent(state), scopes: encodeURIComponent(scopes)}); const validateToken = async (accessToken, priority = PRIORITY.FG_LOW, options = {}) => fetchJson(VALIDATE_URL, {...options, headers: {'Authorization': `OAuth ${accessToken}`}}, priority) const profile = async (accessToken, login, priority = PRIORITY.FG_LOW, options = {}) => fetchApi(substituteVars(PROFILE_URL, {login: encodeURIComponent(login)}), accessToken, priority, options) const videos = async (accessToken, userId, type = 'archive', priority = PRIORITY.FG_LOW, options = {}) => fetchApi(substituteVars(VIDEOS_URL, {userId: encodeURIComponent(userId), type: encodeURIComponent(type)}), accessToken, priority, options) const streams = async (accessToken, userId, priority = PRIORITY.FG_LOW, options = {}) => fetchApi(substituteVars(STREAMS_URL, {userId: encodeURIComponent(userId)}), accessToken, priority, options) return { getAuthUrl, validateToken, profile, videos, streams, ...queueToReturn, } }