diff --git a/src/source/Einschalten.ts b/src/source/Einschalten.ts index 2e2f960..834e53d 100644 --- a/src/source/Einschalten.ts +++ b/src/source/Einschalten.ts @@ -30,7 +30,7 @@ export class Einschalten extends Source { public async handleInternal(ctx: Context, _type: string, id: Id): Promise { const tmdbId = await getTmdbId(ctx, this.fetcher, id); - const { releaseName: title, streamUrl } = JSON.parse(await this.fetcher.text(ctx, new URL(`/api/movies/${tmdbId.id}/watch`, this.baseUrl))) as EinschaltenResponse; + const { releaseName: title, streamUrl } = await this.fetcher.json(ctx, new URL(`/api/movies/${tmdbId.id}/watch`, this.baseUrl)) as EinschaltenResponse; return [{ url: new URL(streamUrl), meta: { countryCodes: [CountryCode.de], title } }]; }; diff --git a/src/source/Frembed.ts b/src/source/Frembed.ts index 9768bd6..0faaef6 100644 --- a/src/source/Frembed.ts +++ b/src/source/Frembed.ts @@ -29,7 +29,7 @@ export class Frembed extends Source { ? new URL(`/api/series?id=${tmdbId.id}&sa=${tmdbId.season}&epi=${tmdbId.episode}&idType=tmdb`, this.baseUrl) : new URL(`/api/films?id=${tmdbId.id}&idType=tmdb`, this.baseUrl); - const json = JSON.parse(await this.fetcher.text(ctx, apiUrl)); + const json = await this.fetcher.json(ctx, apiUrl); const urls: URL[] = []; for (const key in json) { diff --git a/src/source/Movix.ts b/src/source/Movix.ts index ce1ae7e..8d4473b 100644 --- a/src/source/Movix.ts +++ b/src/source/Movix.ts @@ -33,7 +33,7 @@ export class Movix extends Source { ? new URL(`/api/tmdb/tv/${tmdbId.id}?season=${tmdbId.season}&episode=${tmdbId.episode}`, this.baseUrl) : new URL(`/api/tmdb/movie/${tmdbId.id}`, this.baseUrl); - const json = JSON.parse(await this.fetcher.text(ctx, apiUrl)); + const json = await this.fetcher.json(ctx, apiUrl); const data: MovixApiData | undefined = tmdbId.season ? json['current_episode'] : json; if (!data || !data.player_links) { diff --git a/src/source/PrimeWire.ts b/src/source/PrimeWire.ts index 9969c9b..9635aee 100644 --- a/src/source/PrimeWire.ts +++ b/src/source/PrimeWire.ts @@ -70,7 +70,7 @@ export class PrimeWire extends Source { primeSrcUrl.searchParams.set('type', 'tv'); } - const primeSrcResponse = JSON.parse(await this.fetcher.text(ctx, primeSrcUrl, { headers: { Referer: pageUrl.origin } })) as PrimeSrcResponsePartial; + const primeSrcResponse = await this.fetcher.json(ctx, primeSrcUrl, { headers: { Referer: pageUrl.origin } }) as PrimeSrcResponsePartial; const linksTokenMatch = appJs.match(/t="(0\.x.*?)"/) as string[]; const linksToken = linksTokenMatch[1] as string; @@ -85,7 +85,7 @@ export class PrimeWire extends Source { if (!targetUrlHref) { const linkFetchUrl = new URL(redirectUrl.href.replace('/gos/', '/go/')); linkFetchUrl.searchParams.set('token', linksToken); - targetUrlHref = JSON.parse(await this.fetcher.text(ctx, linkFetchUrl))['link'] as string; + targetUrlHref = (await this.fetcher.json(ctx, linkFetchUrl))['link'] as string; await this.redirectUrlCache.set(redirectUrl.href, targetUrlHref); } diff --git a/src/utils/Fetcher.ts b/src/utils/Fetcher.ts index ac27383..560d99d 100644 --- a/src/utils/Fetcher.ts +++ b/src/utils/Fetcher.ts @@ -101,6 +101,18 @@ export class Fetcher { return (await this.cachedFetch(ctx, url, { ...init, method: 'HEAD' })).headers; }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public async json(ctx: Context, url: URL, init?: CustomRequestInit): Promise { + const jsonInit = { + headers: { + Accept: 'application/json,text/plain,*/*', + }, + ...init, + }; + + return JSON.parse(await this.text(ctx, url, jsonInit)); + } + private getInit(ctx: Context, url: URL, init?: CustomRequestInit): CustomRequestInit { const cookieString = this.cookieJar.getCookieStringSync(url.href); const noProxyHeaders = init?.noProxyHeaders ?? false; diff --git a/src/utils/media-flow-proxy.ts b/src/utils/media-flow-proxy.ts index bedc70c..6b02f63 100644 --- a/src/utils/media-flow-proxy.ts +++ b/src/utils/media-flow-proxy.ts @@ -34,7 +34,7 @@ export const buildMediaFlowProxyExtractorStreamUrl = async (ctx: Context, fetche mediaFlowProxyUrl.searchParams.set('h_' + headerKey.toLowerCase(), headers[headerKey] as string); } - const extractResult: ExtractResult = JSON.parse(await fetcher.text(ctx, mediaFlowProxyUrl)); + const extractResult: ExtractResult = await fetcher.json(ctx, mediaFlowProxyUrl); const streamUrl = new URL(extractResult.mediaflow_proxy_url); diff --git a/src/utils/tmdb.ts b/src/utils/tmdb.ts index ff1a1cb..c8d892a 100644 --- a/src/utils/tmdb.ts +++ b/src/utils/tmdb.ts @@ -53,7 +53,7 @@ const tmdbFetch = async (ctx: Context, fetcher: Fetcher, path: string, searchPar } const data = await mutex.runExclusive(async () => { - return JSON.parse(await fetcher.text(ctx, url, config)); + return await fetcher.json(ctx, url, config); }); if (!mutex.isLocked()) {