]*data-id="([^"]+)"/) || [])[1];
+ if (!animeIdMatch) return JSON.stringify([{ error: "AniID not found" }]);
+
+ const tokenResponse = await fetchv2(`https://enc-dec.app/api/enc-kai?text=${encodeURIComponent(animeIdMatch)}`);
+ const tokenData = await tokenResponse.json();
+ const token = tokenData.result;
+
+ const episodeListUrl = `https://animekai.to/ajax/episodes/list?ani_id=${animeIdMatch}&_=${token}`;
+ const episodeListData = await (await fetchv2(episodeListUrl)).json();
+ const cleanedHtml = cleanJsonHtml(episodeListData.result);
+
+ const episodeRegex = /
]+num="([^"]+)"[^>]+token="([^"]+)"[^>]*>/g;
+ const episodeMatches = [...cleanedHtml.matchAll(episodeRegex)];
+
+ const recentEpisodeMatches = episodeMatches.slice(-50);
+
+ const episodeData = recentEpisodeMatches.map(([_, episodeNum, episodeToken]) => ({
+ name: `Episode ${episodeNum}`,
+ data: episodeToken
+ }));
+
+ const batchResults = await sendEpisodes("https://enc-dec.app/api/enc-kai?text", episodeData);
+
+ const episodes = batchResults.map((result, index) => ({
+ number: parseInt(recentEpisodeMatches[index][1], 10),
+ href: `https://animekai.to/ajax/links/list?token=${recentEpisodeMatches[index][2]}&_=${result.data}`
+ }));
+
+ return JSON.stringify(episodes);
} catch (err) {
console.error("Error fetching episodes:" + err);
return [{
@@ -159,13 +158,13 @@ async function extractStreamUrl(url) {
{ name: "Sub", data: serverIdSub }
].filter(item => item.data);
- const tokenBatchResponse = await fetchv2(
- "https://ilovekai.simplepostrequest.workers.dev/?ilovefeet",
- {},
- "POST",
- JSON.stringify(tokenRequestData)
+ const tokenPromises = tokenRequestData.map(item =>
+ fetchv2(`https://enc-dec.app/api/enc-kai?text=${encodeURIComponent(item.data)}`)
+ .then(res => res.json())
+ .then(json => ({ name: item.name, data: json.result }))
+ .catch(err => ({ name: item.name, error: err.toString() }))
);
- const tokenResults = await tokenBatchResponse.json();
+ const tokenResults = await Promise.all(tokenPromises);
const streamUrls = tokenResults.map(result => {
const serverIdMap = {
@@ -210,13 +209,13 @@ async function extractStreamUrl(url) {
return {};
}
- const decryptBatchResponse = await fetchv2(
- "https://ilovekai.simplepostrequest.workers.dev/?ilovearmpits",
- {},
- "POST",
- JSON.stringify(decryptRequestData)
+ const decryptPromises = decryptRequestData.map(item =>
+ fetchv2(`https://enc-dec.app/api/dec-kai?text=${encodeURIComponent(item.data)}`)
+ .then(res => res.json())
+ .then(json => ({ name: item.name, data: JSON.stringify(json.result) }))
+ .catch(err => ({ name: item.name, error: err.toString() }))
);
- const decryptResults = await decryptBatchResponse.json();
+ const decryptResults = await Promise.all(decryptPromises);
const finalResults = {};
decryptResults.forEach(result => {
@@ -234,16 +233,16 @@ async function extractStreamUrl(url) {
};
const decryptedUrls = await processStreams(streamUrls);
- const decryptedSub = decryptedUrls.Sub || decryptedUrls.Softsub || decryptedUrls.Dub;
-
- console.log(decryptedSub);
+ const decryptedDub = decryptedUrls.Sub || decryptedUrls.Dub || decryptedUrls.Softsub;
+
+ console.log(decryptedDub);
const headers = {
"Referer": "https://animekai.to/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
};
- if (decryptedSub) {
- const response = await fetchv2(decryptedSub.replace("/e/", "/media/"), headers);
+ if (decryptedDub) {
+ const response = await fetchv2(decryptedDub.replace("/e/", "/media/"), headers);
const responseJson = await response.json();
const result = responseJson?.result;