pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

revert back to makeRequest

Jorrin a4b925dc ccbf8889

+12 -57
+1 -1
src/backend/extension/streams.ts
··· 34 34 35 35 export async function prepareStream(stream: Stream) { 36 36 await setDomainRule({ 37 - ruleId: 2, 37 + ruleId: 1, 38 38 targetDomains: extractDomainsFromStream(stream), 39 39 requestHeaders: buildHeadersFromStream(stream), 40 40 });
+11 -27
src/backend/providers/fetchers.ts
··· 1 1 import { Fetcher, makeSimpleProxyFetcher } from "@movie-web/providers"; 2 2 3 - import { setDomainRule } from "@/backend/extension/messaging"; 3 + import { sendExtensionRequest } from "@/backend/extension/messaging"; 4 4 import { getApiToken, setApiToken } from "@/backend/helpers/providerApi"; 5 5 import { getProviderApiUrls, getProxyUrls } from "@/utils/proxyUrls"; 6 - 7 - import { makeFullUrl } from "./utils"; 8 6 9 7 function makeLoadbalancedList(getter: () => string[]) { 10 8 let listIndex = -1; ··· 69 67 70 68 export function makeExtensionFetcher() { 71 69 const fetcher: Fetcher = async (url, ops) => { 72 - const fullUrl = makeFullUrl(url, ops); 73 - const res = await setDomainRule({ 74 - ruleId: 1, 75 - targetDomains: [fullUrl], 76 - requestHeaders: ops.headers, 77 - }); 78 - console.log(res, fullUrl); 79 - const response = await fetch(fullUrl, { 80 - method: ops.method, 81 - headers: ops.headers, 82 - body: ops.body as any, 83 - }); 84 - const contentType = response.headers.get("content-type"); 85 - const body = contentType?.includes("application/json") 86 - ? await response.json() 87 - : await response.text(); 88 - 70 + const result = (await sendExtensionRequest<any>({ 71 + url, 72 + ...ops, 73 + })) as any; 74 + if (!result?.success) throw new Error(`extension error: ${result?.error}`); 75 + const res = result.response; 89 76 return { 90 - body, 91 - finalUrl: response.url, 92 - statusCode: response.status, 93 - headers: makeFinalHeaders( 94 - ops.readHeaders, 95 - Object.fromEntries(response.headers.entries()), 96 - ), 77 + body: res.body, 78 + finalUrl: res.finalUrl, 79 + statusCode: res.statusCode, 80 + headers: makeFinalHeaders(ops.readHeaders, res.headers), 97 81 }; 98 82 }; 99 83 return fetcher;
-29
src/backend/providers/utils.ts
··· 1 - import { DefaultedFetcherOptions } from "@movie-web/providers"; 2 - 3 - export function makeFullUrl( 4 - url: string, 5 - ops?: DefaultedFetcherOptions, 6 - ): string { 7 - // glue baseUrl and rest of url together 8 - let leftSide = ops?.baseUrl ?? ""; 9 - let rightSide = url; 10 - 11 - // left side should always end with slash, if its set 12 - if (leftSide.length > 0 && !leftSide.endsWith("/")) leftSide += "/"; 13 - 14 - // right side should never start with slash 15 - if (rightSide.startsWith("/")) rightSide = rightSide.slice(1); 16 - 17 - const fullUrl = leftSide + rightSide; 18 - if (!fullUrl.startsWith("http://") && !fullUrl.startsWith("https://")) 19 - throw new Error( 20 - `Invald URL -- URL doesn't start with a http scheme: '${fullUrl}'`, 21 - ); 22 - 23 - const parsedUrl = new URL(fullUrl); 24 - Object.entries(ops?.query ?? {}).forEach(([k, v]) => { 25 - parsedUrl.searchParams.set(k, v as string); 26 - }); 27 - 28 - return parsedUrl.toString(); 29 - }