diff --git a/animekai/hardsub/animekai.js b/animekai/hardsub/animekai.js index 9e8a627..ba133a0 100644 --- a/animekai/hardsub/animekai.js +++ b/animekai/hardsub/animekai.js @@ -81,16 +81,6 @@ async function extractDetails(url) { } async function extractEpisodes(url) { - const sendEpisodes = async (endpoint, episodeData) => { - const promises = episodeData.map(item => - fetchv2(`${endpoint}=${encodeURIComponent(item.data)}`) - .then(res => res.json()) - .then(json => ({ name: item.name, data: json.result })) - .catch(err => ({ name: item.name, error: err.toString() })) - ); - return Promise.all(promises); - }; - try { const actualUrl = url.replace("Animekai:", "").trim(); const htmlText = await (await fetchv2(actualUrl)).text(); @@ -108,18 +98,9 @@ async function extractEpisodes(url) { 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}` + const episodes = episodeMatches.map(([_, episodeNum, episodeToken]) => ({ + number: parseInt(episodeNum, 10), + href: `https://animekai.to/ajax/links/list?token=${episodeToken}&_=ENCRYPT_ME` })); return JSON.stringify(episodes); @@ -134,6 +115,15 @@ async function extractEpisodes(url) { async function extractStreamUrl(url) { try { + const tokenMatch = url.match(/token=([^&]+)/); + if (tokenMatch && tokenMatch[1]) { + const rawToken = tokenMatch[1]; + const encryptResponse = await fetchv2(`https://enc-dec.app/api/enc-kai?text=${encodeURIComponent(rawToken)}`); + const encryptData = await encryptResponse.json(); + const encryptedToken = encryptData.result; + url = url.replace('&_=ENCRYPT_ME', `&_=${encryptedToken}`); + } + const fetchUrl = `${url}`; const response = await fetchv2(fetchUrl); const text = await response.text(); @@ -233,16 +223,16 @@ async function extractStreamUrl(url) { }; const decryptedUrls = await processStreams(streamUrls); - const decryptedDub = decryptedUrls.Sub || decryptedUrls.Dub || decryptedUrls.Softsub; + const decryptedSub = decryptedUrls.Sub || decryptedUrls.Dub || decryptedUrls.Softsub; - console.log(decryptedDub); + console.log(decryptedSub); 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 (decryptedDub) { - const response = await fetchv2(decryptedDub.replace("/e/", "/media/"), headers); + if (decryptedSub) { + const response = await fetchv2(decryptedSub.replace("/e/", "/media/"), headers); const responseJson = await response.json(); const result = responseJson?.result;