Browse Source

Request messaging

pull/760/head
mrjvs 2 years ago
parent
commit
e1be30dde9
  1. 5
      src/backend/extension/messaging.ts
  2. 14
      src/backend/extension/plasmo.ts
  3. 24
      src/backend/providers/fetchers.ts

5
src/backend/extension/messaging.ts

@ -4,6 +4,7 @@ import { @@ -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<MessageKey extends keyof MessagesMetadata>( @@ -32,9 +33,9 @@ function sendMessage<MessageKey extends keyof MessagesMetadata>(
});
}
export async function sendExtensionRequest(
export async function sendExtensionRequest<T>(
ops: Omit<MessagesMetadata["makeRequest"]["req"], "requestDomain">,
): Promise<MessagesMetadata["makeRequest"]["res"] | null> {
): Promise<ExtensionMakeRequestResponse<T> | null> {
return sendMessage("makeRequest", {
requestDomain: window.location.origin,
...ops,

14
src/backend/extension/plasmo.ts

@ -22,11 +22,13 @@ export interface ExtensionMakeRequest extends ExtensionBaseRequest { @@ -22,11 +22,13 @@ export interface ExtensionMakeRequest extends ExtensionBaseRequest {
body?: string | FormData | URLSearchParams | Record<string, any>;
}
export type ExtensionMakeRequestResponse = ExtensionBaseResponse<{
status: number;
requestHeaders: Record<string, string>;
responseHeaders: Record<string, string>;
data: string | Record<string, unknown>;
export type ExtensionMakeRequestResponse<T> = ExtensionBaseResponse<{
response: {
statusCode: number;
headers: Record<string, string>;
finalUrl: string;
body: T;
};
}>;
export interface ExtensionPrepareStreamRequest extends ExtensionBaseRequest {
@ -47,7 +49,7 @@ export interface MmMetadata { @@ -47,7 +49,7 @@ export interface MmMetadata {
};
makeRequest: {
req: ExtensionMakeRequest;
res: ExtensionMakeRequestResponse;
res: ExtensionMakeRequestResponse<any>;
};
prepareStream: {
req: ExtensionPrepareStreamRequest;

24
src/backend/providers/fetchers.ts

@ -53,12 +53,32 @@ export function makeLoadBalancedSimpleProxyFetcher() { @@ -53,12 +53,32 @@ export function makeLoadBalancedSimpleProxyFetcher() {
return fetcher;
}
function makeFinalHeaders(
readHeaders: string[],
headers: Record<string, string>,
): 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<any>({
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;
}

Loading…
Cancel
Save