11/**
2- * API Client for HiAnime API
3- * Handles all API calls to the backend
2+ * Tatakai Anime API Client
3+ * Production API client following tatakai-app architecture
44 */
5- class AnimeAPI {
5+ class TatakaiAnimeAPI {
66 static BASE_URL = 'https://aniwatch-api-taupe-eight.vercel.app/api/v2/hianime' ;
77
88 /**
9- * Generic fetch wrapper with error handling
9+ * Generic fetch wrapper for API calls
1010 */
1111 static async fetchAPI ( endpoint , options = { } ) {
1212 try {
@@ -16,211 +16,96 @@ class AnimeAPI {
1616 const response = await fetch ( url , {
1717 headers : {
1818 'Accept' : 'application/json' ,
19- 'User-Agent' : 'Mozilla/5.0 (Web0S; rv:1.0) Gecko/20100101 Firefox/1 .0' ,
19+ 'User-Agent' : 'Mozilla/5.0 (Web0S; Linux; SmartTV) Tatakai/1.0 .0' ,
2020 ...options . headers
2121 } ,
2222 ...options
2323 } ) ;
2424
2525 if ( ! response . ok ) {
26+ console . error ( `HTTP error! status: ${ response . status } ` ) ;
2627 throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
2728 }
2829
2930 const data = await response . json ( ) ;
30- return data ;
31+
32+ // Transform the response to match our expected structure
33+ const transformedData = {
34+ success : data . status === 200 ,
35+ data : data . data || data ,
36+ status : data . status
37+ } ;
38+
39+ return transformedData ;
3140 } catch ( error ) {
3241 console . error ( 'API Error:' , error ) ;
33- throw error ;
42+ throw new Error ( `Failed to fetch data: ${ error . message } ` ) ;
3443 }
3544 }
3645
3746 /**
3847 * Get home page data
3948 */
4049 static async getHomePage ( ) {
41- try {
42- const data = await this . fetchAPI ( '/home' ) ;
43- return data ;
44- } catch ( error ) {
45- console . error ( 'Error fetching home page:' , error ) ;
46- throw error ;
47- }
50+ return await this . fetchAPI ( '/home' ) ;
4851 }
4952
5053 /**
5154 * Search anime
5255 */
5356 static async searchAnime ( query , page = 1 , filters = { } ) {
54- try {
55- let endpoint = `/search?q=${ encodeURIComponent ( query ) } &page=${ page } ` ;
56-
57- // Add filters if provided
58- if ( filters . type ) endpoint += `&type=${ filters . type } ` ;
59- if ( filters . status ) endpoint += `&status=${ filters . status } ` ;
60- if ( filters . genres ) endpoint += `&genres=${ filters . genres } ` ;
61- if ( filters . sort ) endpoint += `&sort=${ filters . sort } ` ;
62- if ( filters . season ) endpoint += `&season=${ filters . season } ` ;
63- if ( filters . language ) endpoint += `&language=${ filters . language } ` ;
64- if ( filters . rated ) endpoint += `&rated=${ filters . rated } ` ;
65- if ( filters . start_date ) endpoint += `&start_date=${ filters . start_date } ` ;
66- if ( filters . end_date ) endpoint += `&end_date=${ filters . end_date } ` ;
67- if ( filters . score ) endpoint += `&score=${ filters . score } ` ;
68-
69- const data = await this . fetchAPI ( endpoint ) ;
70- return data ;
71- } catch ( error ) {
72- console . error ( 'Error searching anime:' , error ) ;
73- throw error ;
74- }
75- }
76-
77- /**
78- * Get search suggestions
79- */
80- static async getSearchSuggestions ( query ) {
81- try {
82- const data = await this . fetchAPI ( `/search/suggestion?q=${ encodeURIComponent ( query ) } ` ) ;
83- return data ;
84- } catch ( error ) {
85- console . error ( 'Error fetching search suggestions:' , error ) ;
86- throw error ;
87- }
57+ let endpoint = `/search?q=${ encodeURIComponent ( query ) } &page=${ page } ` ;
58+
59+ // Add filters if provided
60+ if ( filters . type ) endpoint += `&type=${ filters . type } ` ;
61+ if ( filters . status ) endpoint += `&status=${ filters . status } ` ;
62+ if ( filters . genres ) endpoint += `&genres=${ filters . genres } ` ;
63+
64+ return await this . fetchAPI ( endpoint ) ;
8865 }
8966
9067 /**
9168 * Get anime details
9269 */
9370 static async getAnimeInfo ( animeId ) {
94- try {
95- const data = await this . fetchAPI ( `/anime/${ animeId } ` ) ;
96- return data ;
97- } catch ( error ) {
98- console . error ( 'Error fetching anime info:' , error ) ;
99- throw error ;
100- }
71+ return await this . fetchAPI ( `/anime/${ animeId } ` ) ;
10172 }
10273
10374 /**
10475 * Get anime episodes
10576 */
10677 static async getAnimeEpisodes ( animeId ) {
107- try {
108- const data = await this . fetchAPI ( `/anime/${ animeId } /episodes` ) ;
109- return data ;
110- } catch ( error ) {
111- console . error ( 'Error fetching anime episodes:' , error ) ;
112- throw error ;
113- }
78+ return await this . fetchAPI ( `/anime/${ animeId } /episodes` ) ;
11479 }
11580
11681 /**
11782 * Get episode servers
11883 */
11984 static async getEpisodeServers ( episodeId ) {
120- try {
121- const data = await this . fetchAPI ( `/episode/servers?animeEpisodeId=${ encodeURIComponent ( episodeId ) } ` ) ;
122- return data ;
123- } catch ( error ) {
124- console . error ( 'Error fetching episode servers:' , error ) ;
125- throw error ;
126- }
85+ return await this . fetchAPI ( `/episode/servers?animeEpisodeId=${ encodeURIComponent ( episodeId ) } ` ) ;
12786 }
12887
12988 /**
13089 * Get episode streaming sources
13190 */
13291 static async getEpisodeSources ( episodeId , server = 'hd-1' , category = 'sub' ) {
133- try {
134- const data = await this . fetchAPI ( `/episode/sources?animeEpisodeId=${ encodeURIComponent ( episodeId ) } &server=${ server } &category=${ category } ` ) ;
135- return data ;
136- } catch ( error ) {
137- console . error ( 'Error fetching episode sources:' , error ) ;
138- throw error ;
139- }
92+ return await this . fetchAPI ( `/episode/sources?animeEpisodeId=${ encodeURIComponent ( episodeId ) } &server=${ encodeURIComponent ( server ) } &category=${ category } ` ) ;
14093 }
14194
14295 /**
14396 * Get anime by category
14497 */
14598 static async getAnimeByCategory ( category , page = 1 ) {
146- try {
147- const data = await this . fetchAPI ( `/category/${ category } ?page=${ page } ` ) ;
148- return data ;
149- } catch ( error ) {
150- console . error ( 'Error fetching anime by category:' , error ) ;
151- throw error ;
152- }
99+ return await this . fetchAPI ( `/category/${ category } ?page=${ page } ` ) ;
153100 }
154101
155102 /**
156103 * Get anime by genre
157104 */
158105 static async getAnimeByGenre ( genre , page = 1 ) {
159- try {
160- const data = await this . fetchAPI ( `/genre/${ genre } ?page=${ page } ` ) ;
161- return data ;
162- } catch ( error ) {
163- console . error ( 'Error fetching anime by genre:' , error ) ;
164- throw error ;
165- }
166- }
167-
168- /**
169- * Get anime by producer
170- */
171- static async getAnimeByProducer ( producer , page = 1 ) {
172- try {
173- const data = await this . fetchAPI ( `/producer/${ producer } ?page=${ page } ` ) ;
174- return data ;
175- } catch ( error ) {
176- console . error ( 'Error fetching anime by producer:' , error ) ;
177- throw error ;
178- }
179- }
180-
181- /**
182- * Get anime A-Z list
183- */
184- static async getAnimeAZList ( sortOption = 'all' , page = 1 ) {
185- try {
186- const data = await this . fetchAPI ( `/azlist/${ sortOption } ?page=${ page } ` ) ;
187- return data ;
188- } catch ( error ) {
189- console . error ( 'Error fetching A-Z list:' , error ) ;
190- throw error ;
191- }
192- }
193-
194- /**
195- * Get anime schedule
196- */
197- static async getAnimeSchedule ( date ) {
198- try {
199- const data = await this . fetchAPI ( `/schedule?date=${ date } ` ) ;
200- return data ;
201- } catch ( error ) {
202- console . error ( 'Error fetching anime schedule:' , error ) ;
203- throw error ;
204- }
205- }
206-
207- /**
208- * Get anime quick tip info
209- */
210- static async getAnimeQtip ( animeId ) {
211- try {
212- const data = await this . fetchAPI ( `/qtip/${ animeId } ` ) ;
213- return data ;
214- } catch ( error ) {
215- console . error ( 'Error fetching anime qtip:' , error ) ;
216- throw error ;
217- }
106+ return await this . fetchAPI ( `/genre/${ genre } ?page=${ page } ` ) ;
218107 }
219108}
220109
221- // Export for use in other modules
222- if ( typeof module !== 'undefined' && module . exports ) {
223- module . exports = AnimeAPI ;
224- } else {
225- window . AnimeAPI = AnimeAPI ;
226- }
110+ // Replace the original AnimeAPI with TatakaiAnimeAPI
111+ window . AnimeAPI = TatakaiAnimeAPI ;
0 commit comments