diff --git a/src/app/api/agent-server/v1/nodes/route.ts b/src/app/api/agent-server/v1/nodes/route.ts new file mode 100644 index 0000000..be9caec --- /dev/null +++ b/src/app/api/agent-server/v1/nodes/route.ts @@ -0,0 +1,37 @@ +export const dynamic = 'force-dynamic' + +import { NextRequest, NextResponse } from 'next/server' + +import { getAccountServiceApiBaseUrl } from '@server/serviceConfig' +import { getAccountSession } from '@server/account/session' + +const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl() + +type ErrorPayload = { + error: string +} + +export async function GET(request: NextRequest) { + const session = await getAccountSession(request) + const user = session.user + + if (!user || !session.token) { + return NextResponse.json({ error: 'unauthenticated' }, { status: 401 }) + } + + const response = await fetch(`${ACCOUNT_API_BASE}/agent/nodes`, { + method: 'GET', + headers: { + Authorization: `Bearer ${session.token}`, + Accept: 'application/json', + }, + cache: 'no-store', + }) + + const payload = await response.json().catch(() => null) + if (payload === null) { + return NextResponse.json({ error: 'invalid_response' }, { status: 502 }) + } + + return NextResponse.json(payload, { status: response.status }) +} diff --git a/src/modules/extensions/builtin/user-center/components/VlessQrCard.tsx b/src/modules/extensions/builtin/user-center/components/VlessQrCard.tsx index 758f4d6..2a62349 100644 --- a/src/modules/extensions/builtin/user-center/components/VlessQrCard.tsx +++ b/src/modules/extensions/builtin/user-center/components/VlessQrCard.tsx @@ -57,7 +57,7 @@ interface VlessQrCardProps { } export default function VlessQrCard({ uuid, copy }: VlessQrCardProps) { - const { data: nodes } = useSWR('/api/agent/nodes', fetcher) + const { data: nodes } = useSWR('/api/agent-server/v1/nodes', fetcher) const [selectedNode, setSelectedNode] = useState(null) const [preferredTransport, setPreferredTransport] = useState('tcp') const [isSelectorOpen, setIsSelectorOpen] = useState(false) @@ -260,7 +260,7 @@ export default function VlessQrCard({ uuid, copy }: VlessQrCardProps) { ) : !nodes || nodes.length === 0 ? (

❌ 节点数据缺失

-

无法从服务器获取代理节点列表。请检查 /api/agent/nodes 接口是否正常。

+

无法从服务器获取代理节点列表。请检查 /api/agent-server/v1/nodes 接口是否正常。

) : !effectiveNode ? (
diff --git a/src/modules/extensions/builtin/user-center/routes/agent.tsx b/src/modules/extensions/builtin/user-center/routes/agent.tsx index f7213be..d3cbe0e 100644 --- a/src/modules/extensions/builtin/user-center/routes/agent.tsx +++ b/src/modules/extensions/builtin/user-center/routes/agent.tsx @@ -45,7 +45,7 @@ async function fetcher(url: string): Promise { export default function UserCenterAgentRoute() { const { language } = useLanguage() const t = translations[language].userCenter - const { data: nodes, error, isLoading, mutate } = useSWR('/api/agent/nodes', fetcher) + const { data: nodes, error, isLoading, mutate } = useSWR('/api/agent-server/v1/nodes', fetcher) const groupedNodes = useMemo(() => { const groups: Record = {