From 97fe076afa8d914b63ce4723908cbc204247f7a1 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Sat, 6 Jan 2024 17:34:40 +0100 Subject: [PATCH 1/3] Add overrides for proxying specific domains --- src/index.ts | 19 +++++-------------- src/providers.ts | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 src/providers.ts diff --git a/src/index.ts b/src/index.ts index 8b4a32c..8704ffc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,24 +3,15 @@ import { streamSSE } from 'hono/streaming'; import { cors } from 'hono/cors'; import { ScrapeMedia, - makeProviders, - makeStandardFetcher, - targets, } from '@movie-web/providers'; import { ZodError, z } from 'zod'; import { embedSchema, scrapeAllSchema, sourceSchema } from '@/schema'; import { validateTurnstile } from '@/turnstile'; +import { getProviders } from '@/providers'; // hono doesn't export this type, so we retrieve it from a function type SSEStreamingApi = Parameters['1']>['0']; -const fetcher = makeStandardFetcher(fetch); - -const providers = makeProviders({ - fetcher, - target: targets.BROWSER, -}); - const app = new Hono(); function isTurnstileEnabled(context: Context) { @@ -103,7 +94,7 @@ app.get('/scrape', async (context) => { } try { - const output = await providers.runAll({ + const output = await getProviders(context).runAll({ media, events: { discoverEmbeds(evt) { @@ -176,7 +167,7 @@ app.get('/scrape/embed', async (context) => { await writeSSEEvent(stream, 'token', jwtResponse); } try { - const output = await providers.runEmbedScraper({ + const output = await getProviders(context).runEmbedScraper({ id: embedInput.id, url: embedInput.url, events: { @@ -240,7 +231,7 @@ app.get('/scrape/source', async (context) => { await writeSSEEvent(stream, 'token', jwtResponse); } try { - const output = await providers.runSourceScraper({ + const output = await getProviders(context).runSourceScraper({ id: sourceInput.id, media: sourceInput, events: { @@ -268,7 +259,7 @@ app.get('/scrape/source', async (context) => { }); app.get('/metadata', async (context) => { - return context.json([providers.listEmbeds(), providers.listSources()]); + return context.json([getProviders(context).listEmbeds(), getProviders(context).listSources()]); }); export default app; diff --git a/src/providers.ts b/src/providers.ts new file mode 100644 index 0000000..8d502db --- /dev/null +++ b/src/providers.ts @@ -0,0 +1,21 @@ +import { makeProviders, makeSimpleProxyFetcher, makeStandardFetcher, targets, Fetcher as RealFetcher } from "@movie-web/providers"; +import { Context, Env } from "hono"; + +const specialDomains = ["showbox.shegu.net", "mbpapi.shegu.net"] +const standardFetcher = makeStandardFetcher(fetch); + +export function getProviders(context: Context) { + const proxyUrl = (context.env?.PROXY_URL as string | undefined) ?? ''; + + const fetcher: RealFetcher = (u,ops) => { + const url = new URL(u); + if (specialDomains.includes(url.hostname) && !!proxyUrl) + return makeSimpleProxyFetcher(proxyUrl, fetch)(u, ops); + return standardFetcher(u, ops); + }; + + return makeProviders({ + fetcher, + target: targets.BROWSER, + }); +} From 7e7b3159f76ac0e4322af0ea4acf604c08aa7d55 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Sat, 6 Jan 2024 17:35:45 +0100 Subject: [PATCH 2/3] Dont hardcode domains --- src/providers.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/providers.ts b/src/providers.ts index 8d502db..b8b2725 100644 --- a/src/providers.ts +++ b/src/providers.ts @@ -1,11 +1,12 @@ import { makeProviders, makeSimpleProxyFetcher, makeStandardFetcher, targets, Fetcher as RealFetcher } from "@movie-web/providers"; import { Context, Env } from "hono"; -const specialDomains = ["showbox.shegu.net", "mbpapi.shegu.net"] const standardFetcher = makeStandardFetcher(fetch); export function getProviders(context: Context) { const proxyUrl = (context.env?.PROXY_URL as string | undefined) ?? ''; + const specialDomainsEnv = (context.env?.PROXIED_DOMAINS as string | undefined) ?? ''; + const specialDomains = specialDomainsEnv.split(",").map(v=>v.trim()).filter(v=>v.length>0); const fetcher: RealFetcher = (u,ops) => { const url = new URL(u); From d35827e16052fd185a966a202ac4a374b2f05203 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Sat, 6 Jan 2024 17:37:27 +0100 Subject: [PATCH 3/3] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9e05c3a..b19334f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "providers-api", - "version": "1.0.4", + "version": "1.1.0", "private": true, "type": "module", "scripts": {