import { NextResponse } from "next/server"; import { AdminAuthorizationError, requireAdminSession } from "@/lib/admin/auth"; import { adminErrorResponse } from "@/lib/admin/http"; import { epaySubmitUrl, readEpayConfig } from "@/lib/epay/config"; import { assertPublicGatewayUrl } from "@/lib/epay/gateway-policy"; export const runtime = "nodejs"; function reachableStatus(status: number) { return status >= 200 && status < 500; } export async function POST() { try { await requireAdminSession("write"); const config = await readEpayConfig(); const submitUrl = epaySubmitUrl(config.gatewayUrl); await assertPublicGatewayUrl(submitUrl); const startedAt = performance.now(); let response = await fetch(submitUrl, { method: "HEAD", redirect: "manual", signal: AbortSignal.timeout(8_000), }); if (response.status === 405 || response.status === 501) { response = await fetch(submitUrl, { method: "GET", redirect: "manual", signal: AbortSignal.timeout(8_000), }); } const available = reachableStatus(response.status); return NextResponse.json({ available, message: available ? "当前已保存的易支付配置可访问" : "当前已保存的易支付配置暂不可用", latencyMs: Math.round(performance.now() - startedAt), status: response.status, }); } catch (error) { if (error instanceof AdminAuthorizationError) return adminErrorResponse(error); return NextResponse.json({ available: false, message: "当前已保存的易支付配置暂不可用", }); } }