Skip to content

Commit 5224826

Browse files
authored
Add React deps, bunfig config, and API proxy (#27)
1 parent fc89fb7 commit 5224826

File tree

4 files changed

+72
-0
lines changed

4 files changed

+72
-0
lines changed

apps/admin/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
},
1515
"dependencies": {
1616
"@faker-js/faker": "^10.0.0",
17+
"react": "^19.2.0",
18+
"react-dom": "^19.2.0",
1719
"@lottiefiles/dotlottie-react": "^0.17.7",
1820
"@noble/curves": "^2.0.1",
1921
"@stripe/react-stripe-js": "^5.4.0",

apps/user/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
},
1515
"dependencies": {
1616
"@faker-js/faker": "^10.0.0",
17+
"react": "^19.2.0",
18+
"react-dom": "^19.2.0",
1719
"@lottiefiles/dotlottie-react": "^0.17.7",
1820
"@stripe/react-stripe-js": "^5.4.0",
1921
"@stripe/stripe-js": "^8.5.2",

bunfig.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[install]
2+
# Use hoisted (flat) node_modules layout instead of isolated installs.
3+
# This ensures Vite/Rollup can resolve dependencies correctly in CI environments
4+
# such as Cloudflare Pages.
5+
linker = "hoisted"

functions/v1/[[path]].ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
interface Env {
2+
API_BASE_URL: string;
3+
}
4+
5+
export const onRequest: PagesFunction<Env> = async (context) => {
6+
const { request, env } = context;
7+
8+
const apiBase = (env.API_BASE_URL || "https://api.ppanel.dev").replace(
9+
/\/$/,
10+
"",
11+
);
12+
13+
const url = new URL(request.url);
14+
const targetUrl = `${apiBase}${url.pathname}${url.search}`;
15+
16+
const headers = new Headers(request.headers);
17+
headers.set("Host", new URL(apiBase).host);
18+
headers.delete("cf-connecting-ip");
19+
headers.delete("cf-ipcountry");
20+
headers.delete("cf-ray");
21+
headers.delete("cf-visitor");
22+
23+
const init: RequestInit = {
24+
method: request.method,
25+
headers,
26+
redirect: "follow",
27+
};
28+
29+
if (
30+
request.method !== "GET" &&
31+
request.method !== "HEAD" &&
32+
request.body !== null
33+
) {
34+
init.body = request.body;
35+
}
36+
37+
const response = await fetch(targetUrl, init);
38+
39+
const responseHeaders = new Headers(response.headers);
40+
responseHeaders.delete("set-cookie");
41+
responseHeaders.set("Access-Control-Allow-Origin", url.origin);
42+
responseHeaders.set(
43+
"Access-Control-Allow-Methods",
44+
"GET, POST, PUT, DELETE, PATCH, OPTIONS",
45+
);
46+
responseHeaders.set(
47+
"Access-Control-Allow-Headers",
48+
"Content-Type, Authorization",
49+
);
50+
51+
if (request.method === "OPTIONS") {
52+
return new Response(null, {
53+
status: 204,
54+
headers: responseHeaders,
55+
});
56+
}
57+
58+
return new Response(response.body, {
59+
status: response.status,
60+
statusText: response.statusText,
61+
headers: responseHeaders,
62+
});
63+
};

0 commit comments

Comments
 (0)