mirror of
https://github.com/sussy-code/smov.git
synced 2024-12-21 14:47:41 +01:00
firefox support (kinda with manual permission set)
This commit is contained in:
parent
6c7f1acece
commit
ccbf888946
3 changed files with 56 additions and 11 deletions
|
@ -34,7 +34,7 @@ function buildHeadersFromStream(stream: Stream): Record<string, string> {
|
||||||
|
|
||||||
export async function prepareStream(stream: Stream) {
|
export async function prepareStream(stream: Stream) {
|
||||||
await setDomainRule({
|
await setDomainRule({
|
||||||
ruleId: 1,
|
ruleId: 2,
|
||||||
targetDomains: extractDomainsFromStream(stream),
|
targetDomains: extractDomainsFromStream(stream),
|
||||||
requestHeaders: buildHeadersFromStream(stream),
|
requestHeaders: buildHeadersFromStream(stream),
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import { Fetcher, makeSimpleProxyFetcher } from "@movie-web/providers";
|
import { Fetcher, makeSimpleProxyFetcher } from "@movie-web/providers";
|
||||||
|
|
||||||
import { sendExtensionRequest } from "@/backend/extension/messaging";
|
import { setDomainRule } from "@/backend/extension/messaging";
|
||||||
import { getApiToken, setApiToken } from "@/backend/helpers/providerApi";
|
import { getApiToken, setApiToken } from "@/backend/helpers/providerApi";
|
||||||
import { getProviderApiUrls, getProxyUrls } from "@/utils/proxyUrls";
|
import { getProviderApiUrls, getProxyUrls } from "@/utils/proxyUrls";
|
||||||
|
|
||||||
|
import { makeFullUrl } from "./utils";
|
||||||
|
|
||||||
function makeLoadbalancedList(getter: () => string[]) {
|
function makeLoadbalancedList(getter: () => string[]) {
|
||||||
let listIndex = -1;
|
let listIndex = -1;
|
||||||
return () => {
|
return () => {
|
||||||
|
@ -67,17 +69,31 @@ function makeFinalHeaders(
|
||||||
|
|
||||||
export function makeExtensionFetcher() {
|
export function makeExtensionFetcher() {
|
||||||
const fetcher: Fetcher = async (url, ops) => {
|
const fetcher: Fetcher = async (url, ops) => {
|
||||||
const result = await sendExtensionRequest<any>({
|
const fullUrl = makeFullUrl(url, ops);
|
||||||
url,
|
const res = await setDomainRule({
|
||||||
...ops,
|
ruleId: 1,
|
||||||
|
targetDomains: [fullUrl],
|
||||||
|
requestHeaders: ops.headers,
|
||||||
});
|
});
|
||||||
if (!result?.success) throw new Error(`extension error: ${result?.error}`);
|
console.log(res, fullUrl);
|
||||||
const res = result.response;
|
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();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
body: res.body,
|
body,
|
||||||
finalUrl: res.finalUrl,
|
finalUrl: response.url,
|
||||||
statusCode: res.statusCode,
|
statusCode: response.status,
|
||||||
headers: makeFinalHeaders(ops.readHeaders, res.headers),
|
headers: makeFinalHeaders(
|
||||||
|
ops.readHeaders,
|
||||||
|
Object.fromEntries(response.headers.entries()),
|
||||||
|
),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
return fetcher;
|
return fetcher;
|
||||||
|
|
29
src/backend/providers/utils.ts
Normal file
29
src/backend/providers/utils.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
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();
|
||||||
|
}
|
Loading…
Reference in a new issue