diff --git a/src/backend/extension/plasmo.ts b/src/backend/extension/plasmo.ts index c13898be..14a5481f 100644 --- a/src/backend/extension/plasmo.ts +++ b/src/backend/extension/plasmo.ts @@ -19,9 +19,12 @@ export interface ExtensionMakeRequest extends ExtensionBaseRequest { url: string; method: string; headers?: Record; - body?: string | FormData | URLSearchParams | Record; + body?: string | Record; + bodyType?: "string" | "FormData" | "URLSearchParams" | "object"; } +export type ExtensionMakeRequestBodyType = ExtensionMakeRequest["bodyType"]; + export type ExtensionMakeRequestResponse = ExtensionBaseResponse<{ response: { statusCode: number; diff --git a/src/backend/extension/request.ts b/src/backend/extension/request.ts new file mode 100644 index 00000000..5885225e --- /dev/null +++ b/src/backend/extension/request.ts @@ -0,0 +1,17 @@ +import { ExtensionMakeRequestBodyType } from "./plasmo"; + +export function getBodyTypeFromBody( + body: unknown, +): ExtensionMakeRequestBodyType { + if (typeof body === "string") return "string"; + if (body instanceof FormData) return "FormData"; + if (body instanceof URLSearchParams) return "URLSearchParams"; + return "object"; +} + +export function convertBodyToObject(body: unknown): any { + if (body instanceof FormData || body instanceof URLSearchParams) { + return [...body]; + } + return body; +} diff --git a/src/backend/providers/fetchers.ts b/src/backend/providers/fetchers.ts index 95267595..5cb6f6ba 100644 --- a/src/backend/providers/fetchers.ts +++ b/src/backend/providers/fetchers.ts @@ -4,6 +4,8 @@ import { sendExtensionRequest } from "@/backend/extension/messaging"; import { getApiToken, setApiToken } from "@/backend/helpers/providerApi"; import { getProviderApiUrls, getProxyUrls } from "@/utils/proxyUrls"; +import { convertBodyToObject, getBodyTypeFromBody } from "../extension/request"; + function makeLoadbalancedList(getter: () => string[]) { let listIndex = -1; return () => { @@ -67,10 +69,12 @@ function makeFinalHeaders( export function makeExtensionFetcher() { const fetcher: Fetcher = async (url, ops) => { - const result = (await sendExtensionRequest({ + const result = await sendExtensionRequest({ url, ...ops, - })) as any; + body: convertBodyToObject(ops.body), + bodyType: getBodyTypeFromBody(ops.body), + }); if (!result?.success) throw new Error(`extension error: ${result?.error}`); const res = result.response; return {