mirror of
https://gitlab.com/vyla-entertainment/sdk.git
synced 2026-11-14 14:17:35 -05:00
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
import { fetchJson } from '../utils/helpers.js';
|
|
|
|
const BASE_URL = 'https://f.rivo.st';
|
|
|
|
export async function getStream(args) {
|
|
const { id, s, e } = args || {};
|
|
const isTv = s != null && e != null;
|
|
const basePath = isTv
|
|
? `${BASE_URL}/api/source/tv/${id}?s=${s}&e=${e}`
|
|
: `${BASE_URL}/api/source/movie/${id}`;
|
|
|
|
const headers = {
|
|
Accept: '*/*',
|
|
Referer: `${BASE_URL}/`,
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36',
|
|
};
|
|
|
|
const serverIndices = Array.from({ length: 26 }, (_, i) => i + 1);
|
|
const delimiter = basePath.includes('?') ? '&' : '?';
|
|
|
|
const responses = await Promise.allSettled(
|
|
serverIndices.map(serverNum =>
|
|
fetchJson(`${basePath}${delimiter}server=${serverNum}`, { headers })
|
|
.catch(() => null)
|
|
)
|
|
);
|
|
|
|
const allUrls = [];
|
|
|
|
for (const res of responses) {
|
|
if (res.status !== 'fulfilled' || !res.value) continue;
|
|
const data = res.value;
|
|
|
|
if (Array.isArray(data.sources)) {
|
|
for (const src of data.sources) {
|
|
if (src?.url) {
|
|
allUrls.push({
|
|
url: src.url,
|
|
server: `Rivo - ${data.server || src.subProvider || 'Server'}`,
|
|
quality: src.quality || 'Auto',
|
|
type: src.kind || (src.url.includes('.m3u8') ? 'hls' : 'mp4'),
|
|
headers: {
|
|
Referer: `${BASE_URL}/`,
|
|
Origin: BASE_URL,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!allUrls.length) return null;
|
|
|
|
return {
|
|
url: allUrls[0].url,
|
|
headers: allUrls[0].headers,
|
|
allUrls,
|
|
};
|
|
} |