diff --git a/packages/archive/package.json b/packages/archive/package.json
index 2dcdc49..ec153ed 100644
--- a/packages/archive/package.json
+++ b/packages/archive/package.json
@@ -19,6 +19,7 @@
"@logtail/pino": "^0.4.22",
"@prisma/client": "^5.15.0",
"@socket.io/admin-ui": "^0.5.1",
+ "dotenv": "^16.4.5",
"fastify": "^4.28.0",
"fastify-plugin": "^4.5.1",
"jsdom": "^22.1.0",
diff --git a/packages/archive/src/lib/activity.ts b/packages/archive/src/lib/activity.ts
index ecf72b7..33bc935 100644
--- a/packages/archive/src/lib/activity.ts
+++ b/packages/archive/src/lib/activity.ts
@@ -5,6 +5,7 @@ import type { PrismaClient, PrismaPromise } from "@prisma/client";
import { getResponse } from "./parser";
import type { UserSummary } from "./user";
import { upsertUserSnapshot } from "./user";
+import lgUrl from "../utils/url";
export interface Activity {
content: string;
@@ -30,7 +31,7 @@ export async function saveActivityPage(
) {
const res = await getResponse(
logger,
- `https://www.luogu.com.cn/api/feed/list?page=${page}`,
+ lgUrl(`/api/feed/list?page=${page}`, false),
false,
).then((response): Promise
=> response.json());
diff --git a/packages/archive/src/lib/judgement.ts b/packages/archive/src/lib/judgement.ts
index e5bfaa3..f53fa66 100644
--- a/packages/archive/src/lib/judgement.ts
+++ b/packages/archive/src/lib/judgement.ts
@@ -2,6 +2,7 @@ import type { PrismaClient, PrismaPromise } from "@prisma/client";
import type { BaseLogger } from "pino";
import { getResponse } from "./parser";
import { UserSummary, upsertUserSnapshot } from "./user";
+import lgUrl from "../utils/url";
interface JudgementBody {
user: UserSummary;
@@ -23,7 +24,7 @@ export default async function saveJudgements(
) {
const res = await getResponse(
logger,
- `https://www.luogu.com.cn/judgement?_contentOnly`,
+ lgUrl(`/judgement?_contentOnly`, false),
false,
).then((response): Promise => response.json());
diff --git a/packages/archive/src/lib/list.ts b/packages/archive/src/lib/list.ts
index a5bea75..e4bb9a1 100644
--- a/packages/archive/src/lib/list.ts
+++ b/packages/archive/src/lib/list.ts
@@ -3,6 +3,7 @@ import type { PrismaClient } from "@prisma/client";
import type { UserSummary } from "./user";
import type { ForumData, ReplyContent } from "./post";
import { getResponse } from "./parser";
+import lgUrl from "../utils/url";
interface PostData {
id: number;
@@ -40,7 +41,7 @@ export default async function getPostList(
) {
const response = await getResponse(
logger,
- `https://www.luogu.com/discuss?_contentOnly&page=${page}`,
+ lgUrl(`/discuss?_contentOnly&page=${page}`),
false,
);
const {
diff --git a/packages/archive/src/lib/paste.ts b/packages/archive/src/lib/paste.ts
index 7860352..e3c04dc 100644
--- a/packages/archive/src/lib/paste.ts
+++ b/packages/archive/src/lib/paste.ts
@@ -3,6 +3,7 @@ import type { PrismaClient } from "@prisma/client";
import { getResponse } from "./parser";
import { type UserSummary } from "./user";
import { upsertUserSnapshot } from "./user";
+import lgUrl from "../utils/url";
interface Paste {
data: string;
@@ -25,7 +26,7 @@ export default async function savePaste(
) {
const response = await getResponse(
logger,
- `https://www.luogu.com.cn/paste/${id}?_contentOnly`,
+ lgUrl(`/paste/${id}?_contentOnly`, false),
);
const json = (await response.json()) as
| { code: 403 | 404; currentData: LuoguError }
diff --git a/packages/archive/src/lib/post.ts b/packages/archive/src/lib/post.ts
index 86e72e6..969f047 100644
--- a/packages/archive/src/lib/post.ts
+++ b/packages/archive/src/lib/post.ts
@@ -5,6 +5,7 @@ import type { PostSnapshot, PrismaClient } from "@prisma/client";
import { getResponse } from "./parser";
import type { ServerToClientEvents } from "../plugins/socket.io";
import { UserSummary, upsertUserSnapshot } from "./user";
+import lgUrl from "../utils/url";
const PAGES_PER_SAVE = parseInt(process.env.PAGES_PER_SAVE ?? "64", 10);
export const emitters: Record = {};
@@ -65,7 +66,7 @@ export async function savePost(
const fetchPage = (page: number) =>
getResponse(
logger,
- `https://www.luogu.com/discuss/${id}?_contentOnly&page=${page}`,
+ lgUrl(`/discuss/${id}?_contentOnly&page=${page}`),
false,
).then((response): Promise => response.json());
diff --git a/packages/archive/src/server.ts b/packages/archive/src/server.ts
index 98e7061..e937c8c 100644
--- a/packages/archive/src/server.ts
+++ b/packages/archive/src/server.ts
@@ -6,6 +6,8 @@ import routes from "./plugins/routes";
import io from "./plugins/socket.io";
import cron from "./plugins/cron";
+import "dotenv/config";
+
const fastify = Fastify({
logger: process.env.SOURCE_TOKEN
? pino(
diff --git a/packages/archive/src/utils/url.ts b/packages/archive/src/utils/url.ts
new file mode 100644
index 0000000..485406b
--- /dev/null
+++ b/packages/archive/src/utils/url.ts
@@ -0,0 +1,7 @@
+const backendGlobal = process.env.LUOGU_URL ?? "https://www.luogu.com";
+const backendCN = process.env.LUOGU_CN_URL ?? "https://www.luogu.com.cn";
+
+export default function lgUrl(path: string, global = true): string {
+ if (global) return `${backendGlobal}${path}`;
+ return `${backendCN}${path}`;
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3ef0e4c..7c95171 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -54,6 +54,9 @@ importers:
'@socket.io/admin-ui':
specifier: ^0.5.1
version: 0.5.1(socket.io@4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ dotenv:
+ specifier: ^16.4.5
+ version: 16.4.5
fastify:
specifier: ^4.28.0
version: 4.28.0