hi-frontend/functions/v1/[[path]].ts
shanshanzhong 830430645c
Some checks failed
Build and Release / Build (push) Has been cancelled
merge: 同步 origin/main (v1.4.0) 到定制版本
2026-03-19 02:56:42 -07:00

64 lines
1.5 KiB
TypeScript

interface Env {
API_BASE_URL: string;
}
export const onRequest: PagesFunction<Env> = async (context) => {
const { request, env } = context;
const apiBase = (env.API_BASE_URL || "https://api.ppanel.dev").replace(
/\/$/,
"",
);
const url = new URL(request.url);
const targetUrl = `${apiBase}${url.pathname}${url.search}`;
const headers = new Headers(request.headers);
headers.set("Host", new URL(apiBase).host);
headers.delete("cf-connecting-ip");
headers.delete("cf-ipcountry");
headers.delete("cf-ray");
headers.delete("cf-visitor");
const init: RequestInit = {
method: request.method,
headers,
redirect: "follow",
};
if (
request.method !== "GET" &&
request.method !== "HEAD" &&
request.body !== null
) {
init.body = request.body;
}
const response = await fetch(targetUrl, init);
const responseHeaders = new Headers(response.headers);
responseHeaders.delete("set-cookie");
responseHeaders.set("Access-Control-Allow-Origin", url.origin);
responseHeaders.set(
"Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, PATCH, OPTIONS",
);
responseHeaders.set(
"Access-Control-Allow-Headers",
"Content-Type, Authorization",
);
if (request.method === "OPTIONS") {
return new Response(null, {
status: 204,
headers: responseHeaders,
});
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: responseHeaders,
});
};