39 lines
1021 B
TypeScript
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),
|
|
});
|
|
}
|