diff --git a/src/providers/list/flixhq/index.ts b/src/providers/list/flixhq/index.ts new file mode 100644 index 00000000..d192b8e7 --- /dev/null +++ b/src/providers/list/flixhq/index.ts @@ -0,0 +1,67 @@ +import { + MWMediaProvider, + MWMediaType, + MWPortableMedia, + MWMediaStream, + MWQuery, + MWProviderMediaResult +} from "providers/types"; + +import { CORS_PROXY_URL } from "mw_constants"; + +export const flixhqProvider: MWMediaProvider = { + id: "flixhq", + enabled: true, + type: [MWMediaType.MOVIE], + displayName: "flixhq", + + async getMediaFromPortable(media: MWPortableMedia): Promise { + const searchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/info?id=${encodeURIComponent(media.mediaId)}` + ).then((d) => d.json()); + + return { + ...media, + title: searchRes.title, + year: searchRes.releaseDate, + } as MWProviderMediaResult; + }, + + async searchForMedia(query: MWQuery): Promise { + const searchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/${encodeURIComponent(query.searchQuery)}` + ).then((d) => d.json()); + + const results: MWProviderMediaResult[] = (searchRes || []).results.map((item: any) => ({ + title: item.title, + year: item.releaseDate, + mediaId: item.id, + type: MWMediaType.MOVIE, + })); + + return results; + }, + + async getStream(media: MWPortableMedia): Promise { + const searchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/info?id=${encodeURIComponent(media.mediaId)}` + ).then((d) => d.json()); + + const params = new URLSearchParams({ + episodeId: searchRes.episodes[0].id, + mediaId: media.mediaId + }) + + const watchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/watch?${encodeURIComponent(params.toString())}` + ).then((d) => d.json()); + + const source = watchRes.sources.reduce((p: any, c: any) => (c.quality > p.quality) ? c : p); + + return { + url: source.url, + type: source.isM3U8 ? "m3u8" : "mp4", + captions: [] + } as MWMediaStream; + }, +}; diff --git a/src/providers/methods/providers.ts b/src/providers/methods/providers.ts index 142f068b..1cabfbcc 100644 --- a/src/providers/methods/providers.ts +++ b/src/providers/methods/providers.ts @@ -3,12 +3,14 @@ import { gDrivePlayerScraper } from "providers/list/gdriveplayer"; import { MWWrappedMediaProvider, WrapProvider } from "providers/wrapper"; import { gomostreamScraper } from "providers/list/gomostream"; import { xemovieScraper } from "providers/list/xemovie"; +import { flixhqProvider } from "providers/list/flixhq"; export const mediaProvidersUnchecked: MWWrappedMediaProvider[] = [ WrapProvider(theFlixScraper), WrapProvider(gDrivePlayerScraper), WrapProvider(gomostreamScraper), WrapProvider(xemovieScraper), + WrapProvider(flixhqProvider), ]; export const mediaProviders: MWWrappedMediaProvider[] =