From 5cdd85486b97e7c2649e5f2bc03f6696c4e03d0b Mon Sep 17 00:00:00 2001 From: Imken Date: Sun, 6 Oct 2024 22:50:24 +0800 Subject: [PATCH] Make luogu url configurable (#29) --- packages/archive/package.json | 1 + packages/archive/src/lib/activity.ts | 3 ++- packages/archive/src/lib/judgement.ts | 3 ++- packages/archive/src/lib/list.ts | 3 ++- packages/archive/src/lib/paste.ts | 3 ++- packages/archive/src/lib/post.ts | 3 ++- packages/archive/src/server.ts | 2 ++ packages/archive/src/utils/url.ts | 7 +++++++ pnpm-lock.yaml | 3 +++ 9 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 packages/archive/src/utils/url.ts 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