mirror of
https://gitlab.com/vyla-entertainment/sdk.git
synced 2026-11-12 21:27:28 -05:00
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
import { fetchJson } from '../utils/helpers.js';
|
|
|
|
const BASE_URL = 'https://nebula.work.gd/private/7f6b9d179ba7ecd77a39520e';
|
|
|
|
async function getImdbId(tmdbApiKey, tmdbId, s, e) {
|
|
const key = tmdbApiKey;
|
|
if (!key) return null;
|
|
try {
|
|
const type = s != null && e != null ? 'tv' : 'movie';
|
|
const url = `https://api.themoviedb.org/3/${type}/${tmdbId}/external_ids?api_key=${key}`;
|
|
const res = await fetchJson(url);
|
|
return res?.imdb_id || null;
|
|
} catch(err) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function getStream({ id, s, e, tmdbApiKey }) {
|
|
try {
|
|
const imdbId = await getImdbId(tmdbApiKey, id, s, e);
|
|
if (!imdbId) return null;
|
|
|
|
const path = s != null && e != null
|
|
? `/stream/series/${imdbId}:${s}:${e}.json`
|
|
: `/stream/movie/${imdbId}.json`;
|
|
|
|
const response = await fetch(`${BASE_URL}${path}`, {
|
|
headers: {
|
|
'Accept': 'application/json'
|
|
},
|
|
signal: AbortSignal.timeout(15000)
|
|
});
|
|
|
|
if (!response.ok) return null;
|
|
|
|
const data = await response.json();
|
|
if (!data?.streams?.length) return null;
|
|
|
|
const allUrls = data.streams
|
|
.filter(stream => stream.url && stream.url.trim() !== '' && !stream.url.includes('hubcloud'))
|
|
.map(stream => {
|
|
const headers = stream.behaviorHints?.proxyHeaders?.request || {};
|
|
|
|
let serverName = stream.name || 'Unknown';
|
|
if (serverName.includes('\n')) serverName = serverName.split('\n')[0];
|
|
|
|
const filename = stream.filename || stream.behaviorHints?.filename;
|
|
if (filename) serverName += ` - ${filename}`;
|
|
|
|
return {
|
|
url: stream.url,
|
|
server: `Nebula - ${serverName}`,
|
|
type: stream.url.includes('.m3u8') ? 'hls' : 'mp4',
|
|
headers: Object.keys(headers).length > 0 ? headers : undefined,
|
|
skipProxy: stream.behaviorHints?.notWebReady === false
|
|
};
|
|
}).filter(Boolean);
|
|
return allUrls.length ? { allUrls } : null;
|
|
} catch (err) {
|
|
return null;
|
|
}
|
|
} |