From e1be30dde9ad62760b44300b945556791cad5e13 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Wed, 10 Jan 2024 18:20:51 +0100 Subject: [PATCH] Request messaging --- src/backend/extension/messaging.ts | 5 +++-- src/backend/extension/plasmo.ts | 14 ++++++++------ src/backend/providers/fetchers.ts | 24 ++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/backend/extension/messaging.ts b/src/backend/extension/messaging.ts index 28f80ad2..3d835a0e 100644 --- a/src/backend/extension/messaging.ts +++ b/src/backend/extension/messaging.ts @@ -4,6 +4,7 @@ import { } from "@plasmohq/messaging"; import { isAllowedExtensionVersion } from "@/backend/extension/compatibility"; +import { ExtensionMakeRequestResponse } from "@/backend/extension/plasmo"; let activeExtension = false; @@ -32,9 +33,9 @@ function sendMessage( }); } -export async function sendExtensionRequest( +export async function sendExtensionRequest( ops: Omit, -): Promise { +): Promise | null> { return sendMessage("makeRequest", { requestDomain: window.location.origin, ...ops, diff --git a/src/backend/extension/plasmo.ts b/src/backend/extension/plasmo.ts index 6c37ad14..0a2b3dc5 100644 --- a/src/backend/extension/plasmo.ts +++ b/src/backend/extension/plasmo.ts @@ -22,11 +22,13 @@ export interface ExtensionMakeRequest extends ExtensionBaseRequest { body?: string | FormData | URLSearchParams | Record; } -export type ExtensionMakeRequestResponse = ExtensionBaseResponse<{ - status: number; - requestHeaders: Record; - responseHeaders: Record; - data: string | Record; +export type ExtensionMakeRequestResponse = ExtensionBaseResponse<{ + response: { + statusCode: number; + headers: Record; + finalUrl: string; + body: T; + }; }>; export interface ExtensionPrepareStreamRequest extends ExtensionBaseRequest { @@ -47,7 +49,7 @@ export interface MmMetadata { }; makeRequest: { req: ExtensionMakeRequest; - res: ExtensionMakeRequestResponse; + res: ExtensionMakeRequestResponse; }; prepareStream: { req: ExtensionPrepareStreamRequest; diff --git a/src/backend/providers/fetchers.ts b/src/backend/providers/fetchers.ts index f1dbbfb8..9db649f5 100644 --- a/src/backend/providers/fetchers.ts +++ b/src/backend/providers/fetchers.ts @@ -53,12 +53,32 @@ export function makeLoadBalancedSimpleProxyFetcher() { return fetcher; } +function makeFinalHeaders( + readHeaders: string[], + headers: Record, +): Headers { + const lowercasedHeaders = readHeaders.map((v) => v.toLowerCase()); + return new Headers( + Object.entries(headers).filter((entry) => + lowercasedHeaders.includes(entry[0].toLowerCase()), + ), + ); +} + export function makeExtensionFetcher() { const fetcher: Fetcher = async (url, ops) => { - return sendExtensionRequest({ + const result = await sendExtensionRequest({ url, ...ops, - }) as any; + }); + if (!result?.success) throw new Error(`extension error: ${result?.error}`); + const res = result.response; + return { + body: res.body, + finalUrl: res.finalUrl, + statusCode: res.statusCode, + headers: makeFinalHeaders(ops.readHeaders, res.headers), + }; }; return fetcher; }