fix
Fetch and Save Remote Content / fetch (push) Successful in 28s
Sync Versions to index.json / sync-versions (push) Failing after 39s

This commit is contained in:
aka paul
2026-04-30 17:13:44 +02:00
parent 5a4ff66443
commit 6d987a6242
3 changed files with 59 additions and 32 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
"name": "50/50",
"icon": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3122kQwublLkZ6rf1fEpUP79BxZOFmH9BSA&s"
},
"version": "1.2.2",
"version": "1.2.3",
"language": "English",
"streamType": "HLS",
"quality": "1080p",
+57 -30
View File
@@ -377,6 +377,7 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
"X-Requested-With": "XMLHttpRequest"
};
console.log(`Requesting Base URL: ${baseUrl}`);
const pageResponse = await fetchv2(baseUrl, headers);
const pageText = await pageResponse.text();
@@ -389,44 +390,68 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
throw new Error('Could not find data in page');
}
const rawData = match[1];
console.log("Raw Data extracted:", rawData);
// Use the new enc-dec.app API to get server and stream URLs
const apiResponse = await soraFetch(`https://enc-dec.app/api/enc-vidfast?text=${encodeURIComponent(rawData)}`);
const apiUrl = `https://enc-dec.app/api/enc-vidfast?text=${encodeURIComponent(rawData)}&version=1`;
console.log(`Requesting Decrypt API: ${apiUrl}`);
const apiResponse = await soraFetch(apiUrl);
const apiData = await apiResponse.json();
console.log("API Data from enc-dec.app:", JSON.stringify(apiData));
if (apiData.status !== 200 || !apiData.result) {
throw new Error('Failed to decrypt data via enc-dec.app API');
}
const apiServers = apiData.result.servers;
const serversResponse = await fetchv2(apiServers, headers);
const serverList = await serversResponse.json();
const streamBase = apiData.result.stream;
const csrfToken = apiData.result.token;
if (csrfToken) {
headers["X-CSRF-Token"] = csrfToken;
}
console.log(`Requesting Servers URL: ${apiServers}`);
const serversResponse = await soraFetch(apiServers, { method: 'POST', headers: headers });
const serversEncrypted = await serversResponse.text();
const decServersResponse = await soraFetch('https://enc-dec.app/api/dec-vidfast', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: serversEncrypted, version: "1" })
});
const decServersData = await decServersResponse.json();
if (decServersData.status !== 200 || !decServersData.result) {
throw new Error('Failed to decrypt servers data via enc-dec.app API');
}
const serverList = decServersData.result;
if (!serverList || serverList.length === 0) {
throw new Error('No servers available');
}
const streamBase = apiData.result.stream;
const testServer = async (serverObj, index) => {
const server = serverObj.data;
const apiStream = streamBase + '/' + server;
try {
const streamResponse = await fetchv2(apiStream, headers);
console.log(`Requesting Stream URL for server ${index}: ${apiStream}`);
const streamResponse = await soraFetch(apiStream, { method: 'POST', headers: headers });
if (streamResponse.status !== 200) {
throw new Error(`Server ${index} returned status ${streamResponse.status}`);
const streamEncrypted = await streamResponse.text();
const decStreamResponse = await soraFetch('https://enc-dec.app/api/dec-vidfast', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: streamEncrypted, version: "1" })
});
const decStreamData = await decStreamResponse.json();
if (decStreamData.status !== 200 || !decStreamData.result) {
throw new Error(`Server ${index} failed to decrypt stream`);
}
const streamText = await streamResponse.text();
let data;
try {
data = JSON.parse(streamText);
} catch (e) {
throw new Error(`Server ${index} returned invalid JSON`);
}
let data = decStreamData.result;
if (!data.url) {
throw new Error(`Server ${index} has no URL`);
@@ -460,18 +485,6 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
if (preferredFormat === 'm3u8') {
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
const vFastServerObj = serverList.find(server => server.name === 'vFast');
if (vFastServerObj) {
const vFastIndex = serverList.indexOf(vFastServerObj);
try {
vFastServer = await testServer(vFastServerObj, vFastIndex);
} catch (error) {
console.log('vFast server failed: ' + error.message);
}
} else {
console.log('vFast server not found in server list');
}
const raceForSubtitles = new Promise((resolve, reject) => {
let completedCount = 0;
let firstWorkingServer = null;
@@ -513,7 +526,21 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
});
});
selectedServer = await raceForSubtitles;
let vFastPromise = Promise.resolve(null);
const vFastServerObj = serverList.find(server => server.name === 'vFast');
if (vFastServerObj) {
const vFastIndex = serverList.indexOf(vFastServerObj);
vFastPromise = serverPromises[vFastIndex].catch(error => {
console.log('vFast server failed: ' + error.message);
return null;
});
} else {
console.log('vFast server not found in server list');
}
const [selected, vFastResult] = await Promise.all([raceForSubtitles, vFastPromise]);
selectedServer = selected;
vFastServer = vFastResult;
} else {
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
+1 -1
View File
@@ -5,7 +5,7 @@
"name": "50/50",
"icon": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3122kQwublLkZ6rf1fEpUP79BxZOFmH9BSA&s"
},
"version": "1.2.0",
"version": "1.2.1",
"language": "English",
"streamType": "HLS",
"quality": "1080p",