Initial commit

This commit is contained in:
janisslsm committed 2026-07-19 20:09:25 +03:00
commit 6e86adb0e6
23 files changed
+6141

No files matched your search

+32
View File
@@ -0,0 +1,32 @@
/**
* Extractor Logic
* This file handles parsing HTML/JSON to find video streams.
*/
import { fetchText, HEADERS } from './http.js';
import cheerio from 'cheerio-without-node-native';
export async function extractStreams(tmdbId, mediaType, season, episode) {
// 1. Construct the search or video URL
// const url = `https://example.com/watch/${tmdbId}`;
// 2. Fetch content
// const html = await fetchText(url);
// 3. Parse with Cheerio
// const $ = cheerio.load(html);
// const videoUrl = $('video source').attr('src');
// 4. Return streams
// if (videoUrl) {
// return [{
// name: "MyTemplateProvider",
// title: "1080p Stream",
// url: videoUrl,
// quality: "1080p",
// headers: HEADERS
// }];
// }
return [];
}
+42
View File
@@ -0,0 +1,42 @@
/**
* HTTP Utilities
* Use this file for network requests and headers.
*/
export const HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36",
// Add other common headers like 'Referer' if needed
};
/**
* Fetch text content from a URL
* @param {string} url
* @param {object} options
*/
export async function fetchText(url, options = {}) {
console.log(`[Template] Fetching: ${url}`);
const response = await fetch(url, {
headers: {
...HEADERS,
...options.headers
},
...options
});
if (!response.ok) {
throw new Error(`HTTP error ${response.status} for ${url}`);
}
return await response.text();
}
/**
* Fetch JSON content from a URL
* @param {string} url
* @param {object} options
*/
export async function fetchJson(url, options = {}) {
const raw = await fetchText(url, options);
return JSON.parse(raw);
}
+29
View File
@@ -0,0 +1,29 @@
/**
* Template Provider
* Main entry point.
*/
import { extractStreams } from './extractor.js';
/**
* Main function called by Nuvio
* @param {string} tmdbId - TMDB ID of the media
* @param {string} mediaType - 'movie' or 'tv'
* @param {number} season - Season number (for TV)
* @param {number} episode - Episode number (for TV)
*/
async function getStreams(tmdbId, mediaType, season, episode) {
try {
console.log(`[Template] Request: ${mediaType} ${tmdbId}`);
// Call your extraction logic
const streams = await extractStreams(tmdbId, mediaType, season, episode);
return streams;
} catch (error) {
console.error(`[Template] Error: ${error.message}`);
return [];
}
}
module.exports = { getStreams };