fix
This commit is contained in:
@@ -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.2.2",
|
"version": "1.2.3",
|
||||||
"language": "English",
|
"language": "English",
|
||||||
"streamType": "HLS",
|
"streamType": "HLS",
|
||||||
"quality": "1080p",
|
"quality": "1080p",
|
||||||
|
|||||||
+57
-30
@@ -377,6 +377,7 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
|
|||||||
"X-Requested-With": "XMLHttpRequest"
|
"X-Requested-With": "XMLHttpRequest"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(`Requesting Base URL: ${baseUrl}`);
|
||||||
const pageResponse = await fetchv2(baseUrl, headers);
|
const pageResponse = await fetchv2(baseUrl, headers);
|
||||||
const pageText = await pageResponse.text();
|
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');
|
throw new Error('Could not find data in page');
|
||||||
}
|
}
|
||||||
const rawData = match[1];
|
const rawData = match[1];
|
||||||
|
console.log("Raw Data extracted:", rawData);
|
||||||
|
|
||||||
// Use the new enc-dec.app API to get server and stream URLs
|
const apiUrl = `https://enc-dec.app/api/enc-vidfast?text=${encodeURIComponent(rawData)}&version=1`;
|
||||||
const apiResponse = await soraFetch(`https://enc-dec.app/api/enc-vidfast?text=${encodeURIComponent(rawData)}`);
|
console.log(`Requesting Decrypt API: ${apiUrl}`);
|
||||||
|
const apiResponse = await soraFetch(apiUrl);
|
||||||
const apiData = await apiResponse.json();
|
const apiData = await apiResponse.json();
|
||||||
|
console.log("API Data from enc-dec.app:", JSON.stringify(apiData));
|
||||||
|
|
||||||
if (apiData.status !== 200 || !apiData.result) {
|
if (apiData.status !== 200 || !apiData.result) {
|
||||||
throw new Error('Failed to decrypt data via enc-dec.app API');
|
throw new Error('Failed to decrypt data via enc-dec.app API');
|
||||||
}
|
}
|
||||||
|
|
||||||
const apiServers = apiData.result.servers;
|
const apiServers = apiData.result.servers;
|
||||||
const serversResponse = await fetchv2(apiServers, headers);
|
const streamBase = apiData.result.stream;
|
||||||
const serverList = await serversResponse.json();
|
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) {
|
if (!serverList || serverList.length === 0) {
|
||||||
throw new Error('No servers available');
|
throw new Error('No servers available');
|
||||||
}
|
}
|
||||||
|
|
||||||
const streamBase = apiData.result.stream;
|
|
||||||
|
|
||||||
const testServer = async (serverObj, index) => {
|
const testServer = async (serverObj, index) => {
|
||||||
const server = serverObj.data;
|
const server = serverObj.data;
|
||||||
const apiStream = streamBase + '/' + server;
|
const apiStream = streamBase + '/' + server;
|
||||||
|
|
||||||
try {
|
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) {
|
const streamEncrypted = await streamResponse.text();
|
||||||
throw new Error(`Server ${index} returned status ${streamResponse.status}`);
|
|
||||||
|
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 = decStreamData.result;
|
||||||
|
|
||||||
let data;
|
|
||||||
try {
|
|
||||||
data = JSON.parse(streamText);
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(`Server ${index} returned invalid JSON`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!data.url) {
|
if (!data.url) {
|
||||||
throw new Error(`Server ${index} has no 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') {
|
if (preferredFormat === 'm3u8') {
|
||||||
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
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) => {
|
const raceForSubtitles = new Promise((resolve, reject) => {
|
||||||
let completedCount = 0;
|
let completedCount = 0;
|
||||||
let firstWorkingServer = null;
|
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 {
|
} else {
|
||||||
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
||||||
|
|||||||
@@ -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.2.0",
|
"version": "1.2.1",
|
||||||
"language": "English",
|
"language": "English",
|
||||||
"streamType": "HLS",
|
"streamType": "HLS",
|
||||||
"quality": "1080p",
|
"quality": "1080p",
|
||||||
|
|||||||
Reference in New Issue
Block a user