diff --git a/src/backend/extension/streams.ts b/src/backend/extension/streams.ts index daa7a54c..2afb900d 100644 --- a/src/backend/extension/streams.ts +++ b/src/backend/extension/streams.ts @@ -34,7 +34,7 @@ function buildHeadersFromStream(stream: Stream): Record { export async function prepareStream(stream: Stream) { await setDomainRule({ - ruleId: 2, + ruleId: 1, targetDomains: extractDomainsFromStream(stream), requestHeaders: buildHeadersFromStream(stream), }); diff --git a/src/backend/providers/fetchers.ts b/src/backend/providers/fetchers.ts index 83e42835..95267595 100644 --- a/src/backend/providers/fetchers.ts +++ b/src/backend/providers/fetchers.ts @@ -1,11 +1,9 @@ import { Fetcher, makeSimpleProxyFetcher } from "@movie-web/providers"; -import { setDomainRule } from "@/backend/extension/messaging"; +import { sendExtensionRequest } from "@/backend/extension/messaging"; import { getApiToken, setApiToken } from "@/backend/helpers/providerApi"; import { getProviderApiUrls, getProxyUrls } from "@/utils/proxyUrls"; -import { makeFullUrl } from "./utils"; - function makeLoadbalancedList(getter: () => string[]) { let listIndex = -1; return () => { @@ -69,31 +67,17 @@ function makeFinalHeaders( export function makeExtensionFetcher() { const fetcher: Fetcher = async (url, ops) => { - const fullUrl = makeFullUrl(url, ops); - const res = await setDomainRule({ - ruleId: 1, - targetDomains: [fullUrl], - requestHeaders: ops.headers, - }); - console.log(res, fullUrl); - const response = await fetch(fullUrl, { - method: ops.method, - headers: ops.headers, - body: ops.body as any, - }); - const contentType = response.headers.get("content-type"); - const body = contentType?.includes("application/json") - ? await response.json() - : await response.text(); - + const result = (await sendExtensionRequest({ + url, + ...ops, + })) as any; + if (!result?.success) throw new Error(`extension error: ${result?.error}`); + const res = result.response; return { - body, - finalUrl: response.url, - statusCode: response.status, - headers: makeFinalHeaders( - ops.readHeaders, - Object.fromEntries(response.headers.entries()), - ), + body: res.body, + finalUrl: res.finalUrl, + statusCode: res.statusCode, + headers: makeFinalHeaders(ops.readHeaders, res.headers), }; }; return fetcher; diff --git a/src/backend/providers/utils.ts b/src/backend/providers/utils.ts deleted file mode 100644 index 7149046c..00000000 --- a/src/backend/providers/utils.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { DefaultedFetcherOptions } from "@movie-web/providers"; - -export function makeFullUrl( - url: string, - ops?: DefaultedFetcherOptions, -): string { - // glue baseUrl and rest of url together - let leftSide = ops?.baseUrl ?? ""; - let rightSide = url; - - // left side should always end with slash, if its set - if (leftSide.length > 0 && !leftSide.endsWith("/")) leftSide += "/"; - - // right side should never start with slash - if (rightSide.startsWith("/")) rightSide = rightSide.slice(1); - - const fullUrl = leftSide + rightSide; - if (!fullUrl.startsWith("http://") && !fullUrl.startsWith("https://")) - throw new Error( - `Invald URL -- URL doesn't start with a http scheme: '${fullUrl}'`, - ); - - const parsedUrl = new URL(fullUrl); - Object.entries(ops?.query ?? {}).forEach(([k, v]) => { - parsedUrl.searchParams.set(k, v as string); - }); - - return parsedUrl.toString(); -}