add rivestream WIP

This commit is contained in:
Pas 2025-08-09 08:56:59 -06:00
parent af1bff8f02
commit b5ec1e08fb
3 changed files with 87 additions and 59 deletions

View file

@ -12,6 +12,7 @@ import { insertunitScraper } from '@/providers/sources/insertunit';
import { mp4hydraScraper } from '@/providers/sources/mp4hydra'; import { mp4hydraScraper } from '@/providers/sources/mp4hydra';
import { nepuScraper } from '@/providers/sources/nepu'; import { nepuScraper } from '@/providers/sources/nepu';
import { pirxcyScraper } from '@/providers/sources/pirxcy'; import { pirxcyScraper } from '@/providers/sources/pirxcy';
import { rivestreamScraper } from '@/providers/sources/rivestream';
import { tugaflixScraper } from '@/providers/sources/tugaflix'; import { tugaflixScraper } from '@/providers/sources/tugaflix';
import { vidsrcScraper } from '@/providers/sources/vidsrc'; import { vidsrcScraper } from '@/providers/sources/vidsrc';
import { vidsrcsuScraper } from '@/providers/sources/vidsrcsu'; import { vidsrcsuScraper } from '@/providers/sources/vidsrcsu';
@ -30,6 +31,22 @@ import { closeLoadScraper } from './embeds/closeload';
import { madplayBaseEmbed, madplayNsapiEmbed, madplayNsapiVidFastEmbed, madplayRoperEmbed } from './embeds/madplay'; import { madplayBaseEmbed, madplayNsapiEmbed, madplayNsapiVidFastEmbed, madplayRoperEmbed } from './embeds/madplay';
import { mp4hydraServer1Scraper, mp4hydraServer2Scraper } from './embeds/mp4hydra'; import { mp4hydraServer1Scraper, mp4hydraServer2Scraper } from './embeds/mp4hydra';
import { ridooScraper } from './embeds/ridoo'; import { ridooScraper } from './embeds/ridoo';
import {
rivestreamAnimezScraper,
rivestreamAquaScraper,
rivestreamAsiaCloudScraper,
rivestreamCurveScraper,
rivestreamFlowcastScraper,
rivestreamGuardScraper,
rivestreamHQScraper,
rivestreamHindicastScraper,
rivestreamHumpyScraper,
rivestreamLokiScraper,
rivestreamNinjaScraper,
rivestreamPrimevidsScraper,
rivestreamSapphireScraper,
rivestreamShadowScraper,
} from './embeds/rivestream';
import { streamtapeLatinoScraper, streamtapeScraper } from './embeds/streamtape'; import { streamtapeLatinoScraper, streamtapeScraper } from './embeds/streamtape';
import { streamvidScraper } from './embeds/streamvid'; import { streamvidScraper } from './embeds/streamvid';
import { import {
@ -127,6 +144,7 @@ export function gatherAllSources(): Array<Sourcerer> {
madplayScraper, madplayScraper,
rgshowsScraper, rgshowsScraper,
vidifyScraper, vidifyScraper,
rivestreamScraper,
]; ];
} }
@ -190,5 +208,19 @@ export function gatherAllEmbeds(): Array<Embed> {
vidifyHotelEmbed, vidifyHotelEmbed,
vidifyIndiaEmbed, vidifyIndiaEmbed,
vidifyJuliettEmbed, vidifyJuliettEmbed,
rivestreamFlowcastScraper,
rivestreamPrimevidsScraper,
rivestreamHumpyScraper,
rivestreamLokiScraper,
rivestreamAsiaCloudScraper,
rivestreamShadowScraper,
rivestreamHindicastScraper,
rivestreamAnimezScraper,
rivestreamSapphireScraper,
rivestreamAquaScraper,
rivestreamGuardScraper,
rivestreamCurveScraper,
rivestreamHQScraper,
rivestreamNinjaScraper,
]; ];
} }

View file

@ -4,7 +4,7 @@ import { NotFoundError } from '@/utils/errors';
import { findFirstM3U8Url } from '@/utils/m3u8'; import { findFirstM3U8Url } from '@/utils/m3u8';
import { createM3U8ProxyUrl } from '@/utils/proxy'; import { createM3U8ProxyUrl } from '@/utils/proxy';
import { EmbedOutput, makeEmbed } from '../base'; // the ranks need changing :thumbsup: import { EmbedOutput, makeEmbed } from '../base';
const baseUrl = 'rivestream.org'; const baseUrl = 'rivestream.org';
const headers = { const headers = {
@ -14,10 +14,10 @@ const headers = {
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}; };
export const rivestreamFlowcastEmbed = makeEmbed({ export const rivestreamFlowcastScraper = makeEmbed({
id: 'rivestream-flowcast', id: 'rivestream-flowcast',
name: 'Rivestream Flowcast', name: 'Rivestream Flowcast',
rank: 230, rank: 424,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -25,7 +25,7 @@ export const rivestreamFlowcastEmbed = makeEmbed({
let url = `https://${baseUrl}/`; let url = `https://${baseUrl}/`;
if (type === 'movie') { if (type === 'movie') {
url += `/api/backendfetch?requestID=movieVideoProvider&id=${tmdbId}&service=flowcast&secretKey=NTUyOTk2OGE=&proxyMode=undefined`; ${tmdbId} ${season} ${episode} url += `/api/backendfetch?requestID=movieVideoProvider&id=${tmdbId}&service=flowcast&secretKey=NTUyOTk2OGE=&proxyMode=undefined`;
} else if (type === 'show') { } else if (type === 'show') {
url += `/api/backendfetch?requestID=tvVideoProvider&id=${tmdbId}&season=${season}&episode=${episode}&service=flowcast&secretKey=M2IyYWEwMzU=&proxyMode=undefined`; url += `/api/backendfetch?requestID=tvVideoProvider&id=${tmdbId}&season=${season}&episode=${episode}&service=flowcast&secretKey=M2IyYWEwMzU=&proxyMode=undefined`;
} else { } else {
@ -33,6 +33,7 @@ export const rivestreamFlowcastEmbed = makeEmbed({
} }
const res = await ctx.proxiedFetcher(url, { headers }); const res = await ctx.proxiedFetcher(url, { headers });
console.log(res.data.sources);
const playlistUrl = findFirstM3U8Url(res); const playlistUrl = findFirstM3U8Url(res);
if (!playlistUrl) { if (!playlistUrl) {
@ -55,10 +56,10 @@ export const rivestreamFlowcastEmbed = makeEmbed({
}, },
}); });
export const rivestreamPrimevidsEmbed = makeEmbed({ export const rivestreamPrimevidsScraper = makeEmbed({
id: 'rivestream-primevids', id: 'rivestream-primevids',
name: 'Rivestream Primevids', name: 'Rivestream Primevids',
rank: 240, rank: 423,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -96,10 +97,10 @@ export const rivestreamPrimevidsEmbed = makeEmbed({
}, },
}); });
export const rivestreamHumpyEmbed = makeEmbed({ export const rivestreamHumpyScraper = makeEmbed({
id: 'rivestream-humpy', id: 'rivestream-humpy',
name: 'Rivestream Humpy', name: 'Rivestream Humpy',
rank: 250, rank: 422,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -137,10 +138,10 @@ export const rivestreamHumpyEmbed = makeEmbed({
}, },
}); });
export const rivestreamLokiEmbed = makeEmbed({ export const rivestreamLokiScraper = makeEmbed({
id: 'rivestream-loki', id: 'rivestream-loki',
name: 'Rivestream Loki', name: 'Rivestream Loki',
rank: 260, rank: 421,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -178,10 +179,10 @@ export const rivestreamLokiEmbed = makeEmbed({
}, },
}); });
export const rivestreamAsiaCloudEmbed = makeEmbed({ export const rivestreamAsiaCloudScraper = makeEmbed({
id: 'rivestream-asiacloud', id: 'rivestream-asiacloud',
name: 'Rivestream AsiaCloud', name: 'Rivestream AsiaCloud',
rank: 270, rank: 420,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -219,10 +220,10 @@ export const rivestreamAsiaCloudEmbed = makeEmbed({
}, },
}); });
export const rivestreamShadowEmbed = makeEmbed({ export const rivestreamShadowScraper = makeEmbed({
id: 'rivestream-shadow', id: 'rivestream-shadow',
name: 'Rivestream Shadow', name: 'Rivestream Shadow',
rank: 280, rank: 419,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -260,10 +261,10 @@ export const rivestreamShadowEmbed = makeEmbed({
}, },
}); });
export const rivestreamHindicastEmbed = makeEmbed({ export const rivestreamHindicastScraper = makeEmbed({
id: 'rivestream-hindicast', id: 'rivestream-hindicast',
name: 'Rivestream Hindicast', name: 'Rivestream Hindicast',
rank: 290, rank: 418,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -301,10 +302,10 @@ export const rivestreamHindicastEmbed = makeEmbed({
}, },
}); });
export const rivestreamAnimezEmbed = makeEmbed({ export const rivestreamAnimezScraper = makeEmbed({
id: 'rivestream-animez', id: 'rivestream-animez',
name: 'Rivestream Animez', name: 'Rivestream Animez',
rank: 300, rank: 417,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -342,10 +343,10 @@ export const rivestreamAnimezEmbed = makeEmbed({
}, },
}); });
export const rivestreamSapphireEmbed = makeEmbed({ export const rivestreamSapphireScraper = makeEmbed({
id: 'rivestream-sapphire', id: 'rivestream-sapphire',
name: 'Rivestream Sapphire', name: 'Rivestream Sapphire',
rank: 310, rank: 416,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -383,10 +384,10 @@ export const rivestreamSapphireEmbed = makeEmbed({
}, },
}); });
export const rivestreamAquaEmbed = makeEmbed({ export const rivestreamAquaScraper = makeEmbed({
id: 'rivestream-aqua', id: 'rivestream-aqua',
name: 'Rivestream Aqua', name: 'Rivestream Aqua',
rank: 320, rank: 415,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -424,10 +425,10 @@ export const rivestreamAquaEmbed = makeEmbed({
}, },
}); });
export const rivestreamGuardEmbed = makeEmbed({ export const rivestreamGuardScraper = makeEmbed({
id: 'rivestream-guard', id: 'rivestream-guard',
name: 'Rivestream Guard', name: 'Rivestream Guard',
rank: 330, rank: 414,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -465,10 +466,10 @@ export const rivestreamGuardEmbed = makeEmbed({
}, },
}); });
export const rivestreamCurveEmbed = makeEmbed({ export const rivestreamCurveScraper = makeEmbed({
id: 'rivestream-curve', id: 'rivestream-curve',
name: 'Rivestream Curve', name: 'Rivestream Curve',
rank: 340, rank: 413,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -506,10 +507,10 @@ export const rivestreamCurveEmbed = makeEmbed({
}, },
}); });
export const rivestreamHQEmbed = makeEmbed({ export const rivestreamHQScraper = makeEmbed({
id: 'rivestream-hq', id: 'rivestream-hq',
name: 'Rivestream HQ', name: 'Rivestream HQ',
rank: 350, rank: 412,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -547,10 +548,10 @@ export const rivestreamHQEmbed = makeEmbed({
}, },
}); });
export const rivestreamNinjaEmbed = makeEmbed({ export const rivestreamNinjaScraper = makeEmbed({
id: 'rivestream-ninja', id: 'rivestream-ninja',
name: 'Rivestream Ninja', name: 'Rivestream Ninja',
rank: 360, rank: 411,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -588,10 +589,10 @@ export const rivestreamNinjaEmbed = makeEmbed({
}, },
}); });
export const rivestreamAlphaEmbed = makeEmbed({ export const rivestreamAlphaScraper = makeEmbed({
id: 'rivestream-alpha', id: 'rivestream-alpha',
name: 'Rivestream Alpha', name: 'Rivestream Alpha',
rank: 370, rank: 410,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -629,10 +630,10 @@ export const rivestreamAlphaEmbed = makeEmbed({
}, },
}); });
export const rivestreamKazeEmbed = makeEmbed({ export const rivestreamKazeScraper = makeEmbed({
id: 'rivestream-kaze', id: 'rivestream-kaze',
name: 'Rivestream Kaze', name: 'Rivestream Kaze',
rank: 380, rank: 409,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -670,10 +671,10 @@ export const rivestreamKazeEmbed = makeEmbed({
}, },
}); });
export const rivestreamZenesisEmbed = makeEmbed({ export const rivestreamZenesisScraper = makeEmbed({
id: 'rivestream-zenesis', id: 'rivestream-zenesis',
name: 'Rivestream Zenesis', name: 'Rivestream Zenesis',
rank: 390, rank: 408,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -711,10 +712,10 @@ export const rivestreamZenesisEmbed = makeEmbed({
}, },
}); });
export const rivestreamZenithEmbed = makeEmbed({ export const rivestreamZenithScraper = makeEmbed({
id: 'rivestream-zenith', id: 'rivestream-zenith',
name: 'Rivestream Zenith', name: 'Rivestream Zenith',
rank: 400, rank: 407,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -752,10 +753,10 @@ export const rivestreamZenithEmbed = makeEmbed({
}, },
}); });
export const rivestreamGhostEmbed = makeEmbed({ export const rivestreamGhostScraper = makeEmbed({
id: 'rivestream-ghost', id: 'rivestream-ghost',
name: 'Rivestream Ghost', name: 'Rivestream Ghost',
rank: 410, rank: 406,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -793,10 +794,10 @@ export const rivestreamGhostEmbed = makeEmbed({
}, },
}); });
export const rivestreamKinoEchoEmbed = makeEmbed({ export const rivestreamKinoEchoScraper = makeEmbed({
id: 'rivestream-kinoecho', id: 'rivestream-kinoecho',
name: 'Rivestream KinoEcho', name: 'Rivestream KinoEcho',
rank: 420, rank: 405,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -834,10 +835,10 @@ export const rivestreamKinoEchoEmbed = makeEmbed({
}, },
}); });
export const rivestreamEE3Embed = makeEmbed({ export const rivestreamEE3Scraper = makeEmbed({
id: 'rivestream-ee3', id: 'rivestream-ee3',
name: 'Rivestream EE3', name: 'Rivestream EE3',
rank: 430, rank: 404,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -875,10 +876,10 @@ export const rivestreamEE3Embed = makeEmbed({
}, },
}); });
export const rivestreamVoltEmbed = makeEmbed({ export const rivestreamVoltScraper = makeEmbed({
id: 'rivestream-volt', id: 'rivestream-volt',
name: 'Rivestream Volt', name: 'Rivestream Volt',
rank: 440, rank: 403,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -916,11 +917,10 @@ export const rivestreamVoltEmbed = makeEmbed({
}, },
}); });
export const rivestreamPutafilmeScraper = makeEmbed({
export const rivestreamPutafilmeEmbed = makeEmbed({
id: 'rivestream-putafilme', id: 'rivestream-putafilme',
name: 'Rivestream Putafilme', name: 'Rivestream Putafilme',
rank: 460, rank: 402,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -958,11 +958,10 @@ export const rivestreamPutafilmeEmbed = makeEmbed({
}, },
}); });
export const rivestreamOphimScraper = makeEmbed({
export const rivestreamOphimEmbed = makeEmbed({
id: 'rivestream-ophim', id: 'rivestream-ophim',
name: 'Rivestream Ophim', name: 'Rivestream Ophim',
rank: 450, rank: 401,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -1000,10 +999,10 @@ export const rivestreamOphimEmbed = makeEmbed({
}, },
}); });
export const rivestreamKageEmbed = makeEmbed({ export const rivestreamKageScraper = makeEmbed({
id: 'rivestream-kage', id: 'rivestream-kage',
name: 'Rivestream Kage', name: 'Rivestream Kage',
rank: 460, rank: 400,
async scrape(ctx): Promise<EmbedOutput> { async scrape(ctx): Promise<EmbedOutput> {
const query = JSON.parse(ctx.url); const query = JSON.parse(ctx.url);
const { type, tmdbId, season, episode } = query; const { type, tmdbId, season, episode } = query;
@ -1040,7 +1039,3 @@ export const rivestreamKageEmbed = makeEmbed({
}; };
}, },
}); });

View file

@ -124,7 +124,8 @@ async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promis
export const rivestreamScraper = makeSourcerer({ export const rivestreamScraper = makeSourcerer({
id: 'rivestream', id: 'rivestream',
name: 'Rivestream', name: 'Rivestream',
rank: 124, // change this rank: 134,
disabled: true,
flags: [flags.CORS_ALLOWED], flags: [flags.CORS_ALLOWED],
scrapeMovie: comboScraper, scrapeMovie: comboScraper,
scrapeShow: comboScraper, scrapeShow: comboScraper,