diff --git a/1movies/1movies.json b/1movies/1movies.json index 36363dd..4a8f759 100644 --- a/1movies/1movies.json +++ b/1movies/1movies.json @@ -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", diff --git a/vidfast/vidfast.js b/vidfast/vidfast.js index 78d7c20..1fb0f8e 100644 --- a/vidfast/vidfast.js +++ b/vidfast/vidfast.js @@ -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)); diff --git a/vidfast/vidfast.json b/vidfast/vidfast.json index 510f22e..4a1e858 100644 --- a/vidfast/vidfast.json +++ b/vidfast/vidfast.json @@ -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",