2026-04-14 18:05:32 +08:00

39 lines
1021 B
TypeScript

import { buildSubscriptionConfig, buildSubscriptionHeaders } from "@/lib/subscription";
import {
getSubscriptionSettings,
getUserBySubscriptionToken,
listSubscriptionNodes,
} from "@/lib/store";
export async function GET(
_request: Request,
context: RouteContext<"/api/subscription/[token]/clash">,
) {
const { token } = await context.params;
const user = await getUserBySubscriptionToken(token);
if (!user || !user.enabled) {
return new Response("subscription not found", { status: 404 });
}
const [nodes, settings] = await Promise.all([
listSubscriptionNodes(),
getSubscriptionSettings(),
]);
let body: string;
try {
body = buildSubscriptionConfig({ user, nodes, settings });
} catch {
return new Response("subscription secret unavailable", { status: 409 });
}
const profileName = user.subscription_label || settings.profileName || user.username;
return new Response(body, {
status: 200,
headers: buildSubscriptionHeaders(user, profileName),
});
}