diff --git a/checkmate/checkmate.js b/checkmate/checkmate.js index bd47adb..b70eebc 100644 --- a/checkmate/checkmate.js +++ b/checkmate/checkmate.js @@ -192,7 +192,15 @@ async function extractStreamUrl(ID) { const racePromise = Promise.race([alphaPromise, gammaPromise, deltaPromise]); - const [fastestResult, betaResult, alphaResult, epsilonResult] = await Promise.all([racePromise, betaPromise, alphaPromise, epsilonPromise]); + const [fastestResult, betaResult, alphaResult] = await Promise.all([racePromise, betaPromise, alphaPromise]); + + let epsilonResult = null; + const alphaHas4K = alphaResult && !alphaResult.error && alphaResult.data && alphaResult.data.streams && + alphaResult.data.streams.some((_, i, arr) => i % 2 === 0 && arr[i] && arr[i].toLowerCase().includes('4k')); + + if (!alphaHas4K) { + epsilonResult = await epsilonPromise; + } const resultStreams = []; let subtitle = null; @@ -240,30 +248,31 @@ async function extractStreamUrl(ID) { headers: alphaResult.data.referer ? { "Referer": alphaResult.data.referer } : {} }); } else { - console.log('Alpha did not return a 4K stream'); - } - } + console.log('Alpha did not return a 4K stream, checking epsilon as fallback'); + + if (epsilonResult && !epsilonResult.error && epsilonResult.data && epsilonResult.data.streams) { + const epsilonStreams = epsilonResult.data.streams; + let epsilonFourKUrl = null; - if (epsilonResult && !epsilonResult.error && epsilonResult.data && epsilonResult.data.streams) { - const streams = epsilonResult.data.streams; - let fourKUrl = null; + for (const stream of epsilonStreams) { + if (stream.title && stream.title.includes('4K') && stream.streamUrl) { + epsilonFourKUrl = stream; + break; + } + } - for (const stream of streams) { - if (stream.title && stream.title.includes('4K') && stream.streamUrl) { - fourKUrl = stream; - break; + if (epsilonFourKUrl) { + console.log('Using epsilon as 4K fallback provider'); + resultStreams.push({ + title: "4K", + streamUrl: epsilonFourKUrl.streamUrl, + headers: epsilonFourKUrl.headers || { "Referer": "https://mapple.uk/", "Origin": "https://mapple.uk" } + }); + } else { + console.log('Epsilon fallback also did not return a 4K stream'); + } } } - - if (fourKUrl) { - resultStreams.push({ - title: "4K Secondary", - streamUrl: fourKUrl.streamUrl, - headers: fourKUrl.headers || { "Referer": "https://mapple.uk/", "Origin": "https://mapple.uk" } - }); - } else { - console.log('Epsilon did not return a 4K stream'); - } } console.log(JSON.stringify({ streams: resultStreams, @@ -7490,4 +7499,4 @@ function uint8ArrayToBase64Url(bytes) { })); -// Veni Vidi Veci \ No newline at end of file +// Veni Vidi Veci