src/api/Api.js
import HttpClient from './HttpClient';
import SearchFetcher from './SearchFetcher';
import TrackFetcher from './TrackFetcher';
import AlbumFetcher from './AlbumFetcher';
import ArtistFetcher from './ArtistFetcher';
import FeaturedPlaylistFetcher from './FeaturedPlaylistFetcher';
import FeaturedPlaylistCategoryFetcher from './FeaturedPlaylistCategoryFetcher';
import NewReleaseCategoryFetcher from './NewReleaseCategoryFetcher';
import NewHitsPlaylistFetcher from './NewHitsPlaylistFetcher';
import GenreStationFetcher from './GenreStationFetcher';
import MoodStationFetcher from './MoodStationFetcher';
import ChartFetcher from './ChartFetcher';
import SharedPlaylistFetcher from './SharedPlaylistFetcher';
/**
* Fetch KKBOX resources.
*/
export default class Api {
/**
* Need access token to initialize.
*
* @param {string} token - Get via Auth.
* @param {string} [territory = 'TW'] - ['TW', 'HK', 'SG', 'MY', 'JP'] The territory for the fetcher.
* @example new Api(token);
* @example new Api(token, 'TW');
*/
constructor(token, territory = 'TW') {
this.territory = territory;
this.httpClient = undefined;
this.setToken(token);
}
/**
* Set new token and create fetchers with the new token.
*
* @param {string} token - Get via Auth.
* @example api.setToken(token);
*/
setToken(token) {
this.httpClient = new HttpClient(token);
/**
* @type {SearchFetcher}
*/
this.searchFetcher = new SearchFetcher(this.httpClient, this.territory);
/**
* @type {TrackFetcher}
*/
this.trackFetcher = new TrackFetcher(this.httpClient, this.territory);
/**
* @type {AlbumFetcher}
*/
this.albumFetcher = new AlbumFetcher(this.httpClient, this.territory);
/**
* @type {ArtistFetcher}
*/
this.artistFetcher = new ArtistFetcher(this.httpClient, this.territory);
/**
* @type {FeaturedPlaylistFetcher}
*/
this.featuredPlaylistFetcher = new FeaturedPlaylistFetcher(
this.httpClient,
this.territory
);
/**
* @type {FeaturedPlaylistCategoryFetcher}
*/
this.featuredPlaylistCategoryFetcher = new FeaturedPlaylistCategoryFetcher(
this.httpClient,
this.territory
);
/**
* @type {NewReleaseCategoryFetcher}
*/
this.newReleaseCategoryFetcher = new NewReleaseCategoryFetcher(
this.httpClient,
this.territory
);
/**
* @type {NewHitsPlaylistFetcher}
*/
this.newHitsPlaylistFetcher = new NewHitsPlaylistFetcher(
this.httpClient,
this.territory
);
/**
* @type {GenreStationFetcher}
*/
this.genreStationFetcher = new GenreStationFetcher(
this.httpClient,
this.territory
);
/**
* @type {MoodStationFetcher}
*/
this.moodStationFetcher = new MoodStationFetcher(
this.httpClient,
this.territory
);
/**
* @type {ChartFetcher}
*/
this.chartFetcher = new ChartFetcher(this.httpClient, this.territory);
/**
* @type {SharedPlaylistFetcher}
*/
this.sharedPlaylistFetcher = new SharedPlaylistFetcher(
this.httpClient,
this.territory
);
}
}