fix
Sync Versions to index.json / sync-versions (push) Failing after 23s
Fetch and Save Remote Content / fetch (push) Failing after 13m19s

This commit is contained in:
aka paul
2026-06-04 17:31:03 +02:00
parent 6259f42863
commit eb493f2835
2 changed files with 34 additions and 29 deletions
+33 -28
View File
@@ -2,7 +2,7 @@ async function searchResults(keyword) {
try { try {
const encodedKeyword = encodeURIComponent(keyword); const encodedKeyword = encodeURIComponent(keyword);
const ddosInterceptor = new DdosGuardInterceptor(); const ddosInterceptor = new DdosGuardInterceptor();
const responseText = await ddosInterceptor.fetchWithBypass(`https://animepahe.com/api?m=search&q=${encodedKeyword}`); const responseText = await ddosInterceptor.fetchWithBypass(`https://animepahe.pw/api?m=search&q=${encodedKeyword}`);
const dataText = await responseText.text(); const dataText = await responseText.text();
console.log(dataText); console.log(dataText);
const data = JSON.parse(dataText); const data = JSON.parse(dataText);
@@ -10,14 +10,14 @@ async function searchResults(keyword) {
return { return {
title: result.title, title: result.title,
image: result.poster, image: result.poster,
href: `https://animepahe.com/anime/${result.session}` href: `https://animepahe.pw/anime/${result.session}`
}; };
}); });
return JSON.stringify(transformedResults); return JSON.stringify(transformedResults);
} catch (error) { } catch (error) {
console.log("Fetch error in searchResults: " + error); console.log("Fetch error in searchResults: " + error);
return JSON.stringify([{ title: "Error", image: "", href: "" }]); return JSON.stringify([{ title: "Please wait a bit then try again!", image: "", href: "" }]);
} }
} }
@@ -57,17 +57,17 @@ async function extractEpisodes(url) {
if (!uuidMatch) throw new Error("Invalid URL"); if (!uuidMatch) throw new Error("Invalid URL");
const id = uuidMatch[1]; const id = uuidMatch[1];
const ddosInterceptor = new DdosGuardInterceptor(); const ddosInterceptor = new DdosGuardInterceptor();
let page = 1; let page = 1;
const apiUrl1 = `https://animepahe.com/api?m=release&id=${id}&sort=episode_asc&page=${page}`; const apiUrl1 = `https://animepahe.pw/api?m=release&id=${id}&sort=episode_asc&page=${page}`;
const response1 = await ddosInterceptor.fetchWithBypass(apiUrl1); const response1 = await ddosInterceptor.fetchWithBypass(apiUrl1);
const dataText1 = await response1.text(); const dataText1 = await response1.text();
const data1 = JSON.parse(dataText1); const data1 = JSON.parse(dataText1);
for (const item of data1.data) { for (const item of data1.data) {
results.push({ results.push({
href: `https://animepahe.com/play/${id}/${item.session}`, href: `https://animepahe.pw/play/${id}/${item.session}`,
number: item.episode number: item.episode
}); });
} }
@@ -81,7 +81,7 @@ async function extractEpisodes(url) {
let retries = 0; let retries = 0;
while (!pageData && retries < 3) { while (!pageData && retries < 3) {
try { try {
const apiUrl = `https://animepahe.com/api?m=release&id=${id}&sort=episode_asc&page=${pageNum}`; const apiUrl = `https://animepahe.pw/api?m=release&id=${id}&sort=episode_asc&page=${pageNum}`;
const response = await ddosInterceptor.fetchWithBypass(apiUrl); const response = await ddosInterceptor.fetchWithBypass(apiUrl);
const dataText = await response.text(); const dataText = await response.text();
pageData = JSON.parse(dataText); pageData = JSON.parse(dataText);
@@ -95,13 +95,13 @@ async function extractEpisodes(url) {
return pageData; return pageData;
})(p)); })(p));
} }
const allPagesData = await Promise.all(pagePromises); const allPagesData = await Promise.all(pagePromises);
for (const pageData of allPagesData) { for (const pageData of allPagesData) {
if (pageData && pageData.data) { if (pageData && pageData.data) {
for (const item of pageData.data) { for (const item of pageData.data) {
results.push({ results.push({
href: `https://animepahe.com/play/${id}/${item.session}`, href: `https://animepahe.pw/play/${id}/${item.session}`,
number: item.episode number: item.episode
}); });
} }
@@ -185,14 +185,14 @@ async function extractStreamUrl(url) {
const parts = scriptContent.split('));eval('); const parts = scriptContent.split('));eval(');
if (parts.length === 2) { if (parts.length === 2) {
const layer2Packed = parts[1].substring(0, parts[1].length - 1); const layer2Packed = parts[1].substring(0, parts[1].length - 1);
try { unpacked = unpack(layer2Packed); } catch(e) {} try { unpacked = unpack(layer2Packed); } catch (e) { }
} }
} else { } else {
try { unpacked = unpack(scriptContent); } catch(e) {} try { unpacked = unpack(scriptContent); } catch (e) { }
} }
if (unpacked) { if (unpacked) {
const urlMatch = unpacked.match(/const source=\\?['"]([^'"]+)['"]/) || const urlMatch = unpacked.match(/const source=\\?['"]([^'"]+)['"]/) ||
unpacked.match(/https:\/\/[^\s'";]+\.m3u8/); unpacked.match(/https:\/\/[^\s'";]+\.m3u8/);
if (urlMatch) { if (urlMatch) {
let hlsUrl = (urlMatch[1] || urlMatch[0]).replace(/\\+$/, ''); let hlsUrl = (urlMatch[1] || urlMatch[0]).replace(/\\+$/, '');
hlsUrl = hlsUrl.replace("/stream/", "/hls/").replace("uwu.m3u8", "owo.m3u8"); hlsUrl = hlsUrl.replace("/stream/", "/hls/").replace("uwu.m3u8", "owo.m3u8");
@@ -265,15 +265,20 @@ async function extractStreamUrl(url) {
} }
} }
// Fixed DDOS Bypass // Fixed Bypass
class DdosGuardInterceptor { class DdosGuardInterceptor {
constructor() { constructor() {
this.errorCodes = [403]; this.errorCodes = [403];
this.serverCheck = ["ddos-guard"]; this.serverCheck = ["ddos-guard"];
this.cookieStore = {}; this.cookieStore = {};
} }
async fetchWithBypass(url, options = {}) { async fetchWithBypass(url, options = {}) {
const solverUrl = `https://tmdbproxy22.simplepostrequest.workers.dev/solver?url=${encodeURIComponent(url)}&cache=1h`;
return fetchv2(solverUrl, options.headers || {});
}
async fetchWithBypassDdos(url, options = {}) {
let response = await this.fetchWithCookies(url, options); let response = await this.fetchWithCookies(url, options);
let responseText = null; let responseText = null;
@@ -291,10 +296,10 @@ class DdosGuardInterceptor {
return response; return response;
} }
const isBlocked = responseText.includes('ddos-guard/js-challenge') || const isBlocked = responseText.includes('ddos-guard/js-challenge') ||
responseText.includes('DDoS-Guard') || responseText.includes('DDoS-Guard') ||
responseText.includes('data-ddg-origin'); responseText.includes('data-ddg-origin');
if (!isBlocked) { if (!isBlocked) {
response.text = async () => responseText; response.text = async () => responseText;
return response; return response;
@@ -309,7 +314,7 @@ class DdosGuardInterceptor {
response.text = async () => responseText; response.text = async () => responseText;
return response; return response;
} }
return this.fetchWithCookies(url, options); return this.fetchWithCookies(url, options);
} }
@@ -453,7 +458,7 @@ class Unbaser {
this.unbase = this._dictunbaser; this.unbase = this._dictunbaser;
} }
} }
_dictunbaser(value) { _dictunbaser(value) {
let ret = 0; let ret = 0;
[...value].reverse().forEach((cipher, index) => { [...value].reverse().forEach((cipher, index) => {
@@ -487,20 +492,20 @@ function unpack(source) {
} }
throw Error("Could not make sense of p.a.c.k.e.r data (unexpected code structure)"); throw Error("Could not make sense of p.a.c.k.e.r data (unexpected code structure)");
} }
let { payload, symtab, radix, count } = _filterargs(source); let { payload, symtab, radix, count } = _filterargs(source);
if (count != symtab.length) { if (count != symtab.length) {
throw Error("Malformed p.a.c.k.e.r. symtab."); throw Error("Malformed p.a.c.k.e.r. symtab.");
} }
let unbase; let unbase;
try { try {
unbase = new Unbaser(radix); unbase = new Unbaser(radix);
} catch (e) { } catch (e) {
throw Error("Unknown p.a.c.k.e.r. encoding."); throw Error("Unknown p.a.c.k.e.r. encoding.");
} }
function lookup(match) { function lookup(match) {
const word = match; const word = match;
let word2; let word2;
@@ -511,7 +516,7 @@ function unpack(source) {
} }
return word2 || word; return word2 || word;
} }
source = payload.replace(/\b\w+\b/g, lookup); source = payload.replace(/\b\w+\b/g, lookup);
return source; return source;
} }
+1 -1
View File
@@ -5,7 +5,7 @@
"name": "50/50", "name": "50/50",
"icon": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3122kQwublLkZ6rf1fEpUP79BxZOFmH9BSA&s" "icon": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3122kQwublLkZ6rf1fEpUP79BxZOFmH9BSA&s"
}, },
"version": "1.0.4", "version": "1.2.0",
"language": "English", "language": "English",
"streamType": "HLS", "streamType": "HLS",
"quality": "1080p", "quality": "1080p",