Files
hy2-panel/app/api/subscription/[token]/clash/route.ts
T

45 lines
1.0 KiB
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 configuration unavailable", {
status: 409,
});
}
const profileName =
user.subscription_label || settings.profileName || user.username;
return new Response(body, {
status: 200,
headers: buildSubscriptionHeaders(user, profileName),
});
}