diff --git a/src/providers/all.ts b/src/providers/all.ts index 7f7c034..8619c84 100644 --- a/src/providers/all.ts +++ b/src/providers/all.ts @@ -74,7 +74,7 @@ import { warezcdnembedHlsScraper } from './embeds/warezcdn/hls'; import { warezcdnembedMp4Scraper } from './embeds/warezcdn/mp4'; import { warezPlayerScraper } from './embeds/warezcdn/warezplayer'; import { webtor1080Scraper, webtor480Scraper, webtor4kScraper, webtor720Scraper } from './embeds/webtor'; -import { xprimeApolloEmbed, xprimeFoxEmbed, xprimeStreamboxEmbed } from './embeds/xprime'; +import { xprimeApolloEmbed, xprimeFoxEmbed, xprimeMarantEmbed, xprimeStreamboxEmbed } from './embeds/xprime'; import { EightStreamScraper } from './sources/8stream'; import { coitusScraper } from './sources/coitus'; import { ConsumetScraper } from './sources/consumet'; @@ -185,6 +185,7 @@ export function gatherAllEmbeds(): Array { xprimeFoxEmbed, xprimeApolloEmbed, xprimeStreamboxEmbed, + xprimeMarantEmbed, ConsumetVidCloudScraper, ConsumetStreamSBScraper, ConsumetVidStreamingScraper, diff --git a/src/providers/embeds/xprime.ts b/src/providers/embeds/xprime.ts index 7e7c0f6..4ec42ce 100644 --- a/src/providers/embeds/xprime.ts +++ b/src/providers/embeds/xprime.ts @@ -6,6 +6,7 @@ import { NotFoundError } from '@/utils/errors'; const foxBaseUrl = 'https://xprime.tv/foxtemp'; const apolloBaseUrl = 'https://kendrickl-3amar.site'; const showboxBaseUrl = 'https://xprime.tv/primebox'; +const marantBaseUrl = 'https://backend.xprime.tv/marant'; const languageMap: Record = { 'chinese - hong kong': 'zh', @@ -41,7 +42,7 @@ const languageMap: Record = { export const xprimeFoxEmbed = makeEmbed({ id: 'xprime-fox', name: 'Fox', - rank: 240, + rank: 241, async scrape(ctx): Promise { const query = JSON.parse(ctx.url); const params = new URLSearchParams({ @@ -85,7 +86,7 @@ export const xprimeFoxEmbed = makeEmbed({ export const xprimeApolloEmbed = makeEmbed({ id: 'xprime-apollo', name: 'Appolo', - rank: 242, + rank: 243, async scrape(ctx): Promise { const query = JSON.parse(ctx.url); let url = `${apolloBaseUrl}/${query.tmdbId}`; @@ -134,7 +135,7 @@ export const xprimeApolloEmbed = makeEmbed({ export const xprimeStreamboxEmbed = makeEmbed({ id: 'xprime-streambox', name: 'Streambox', - rank: 241, + rank: 242, async scrape(ctx): Promise { const query = JSON.parse(ctx.url); let url = showboxBaseUrl; @@ -197,3 +198,37 @@ export const xprimeStreamboxEmbed = makeEmbed({ }; }, }); + +export const xprimeMarantEmbed = makeEmbed({ + id: 'xprime-marant', + name: 'Marant', + rank: 240, + async scrape(ctx): Promise { + const query = JSON.parse(ctx.url); + let url = `${marantBaseUrl}?id=${query.tmdbId}`; + + if (query.type === 'show') { + url += `&season=${query.season}&episode=${query.episode}`; + } + + const data = await await ctx.fetcher(url); + + if (!data) throw new NotFoundError('No response received'); + if (data.error) throw new NotFoundError(data.error); + if (!data.url) throw new NotFoundError('No stream URL found in response'); + + ctx.progress(90); + + return { + stream: [ + { + type: 'hls', + id: 'primary', + playlist: data.url, + flags: [flags.CORS_ALLOWED], + captions: [], + }, + ], + }; + }, +}); diff --git a/src/providers/sources/xprime.ts b/src/providers/sources/xprime.ts index bc56e7d..c6713f3 100644 --- a/src/providers/sources/xprime.ts +++ b/src/providers/sources/xprime.ts @@ -26,6 +26,10 @@ async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promis embedId: 'xprime-streambox', url: JSON.stringify(query), }, + { + embedId: 'xprime-marant', + url: JSON.stringify(query), + }, ]; return { embeds }; diff --git a/src/utils/valid.ts b/src/utils/valid.ts index 683f5d3..8db48d0 100644 --- a/src/utils/valid.ts +++ b/src/utils/valid.ts @@ -14,7 +14,7 @@ import { hianimeHd2SubEmbed, } from '@/providers/embeds/hianime'; import { warezcdnembedMp4Scraper } from '@/providers/embeds/warezcdn/mp4'; -import { xprimeApolloEmbed, xprimeFoxEmbed, xprimeStreamboxEmbed } from '@/providers/embeds/xprime'; +import { xprimeApolloEmbed, xprimeFoxEmbed, xprimeMarantEmbed, xprimeStreamboxEmbed } from '@/providers/embeds/xprime'; import { embedsuScraper } from '@/providers/sources/embedsu'; import { uiraliveScraper } from '@/providers/sources/uiralive'; import { Stream } from '@/providers/streams'; @@ -35,6 +35,7 @@ const SKIP_VALIDATION_CHECK_IDS = [ xprimeFoxEmbed.id, xprimeApolloEmbed.id, xprimeStreamboxEmbed.id, + xprimeMarantEmbed.id, ConsumetVidCloudScraper.id, ConsumetStreamSBScraper.id, ConsumetVidStreamingScraper.id,