hi-frontend/functions/v1/[[path]].ts
shanshanzhong d6616c5859 merge: 同步 upstream/main 新功能到定制版本
- feat: Add slider verification code (bd67997)
- fix bug: Inventory cannot be zero (1f7a6ee)
- fix: resolve merge conflicts and lint errors
2026-03-23 21:50:10 -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,
});
};