47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { type NextRequest, NextResponse } from "next/server";
|
|
import { auth } from "@clerk/nextjs/server";
|
|
import { freeTierRateLimit } from "@/lib/rate-limit";
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const { userId } = await auth();
|
|
|
|
if (!userId) {
|
|
return NextResponse.json(
|
|
{ error: "Authentication required" },
|
|
{ status: 401 }
|
|
);
|
|
}
|
|
|
|
const { hasApiKey } = await request.json();
|
|
|
|
// Check if user has API key (unlimited)
|
|
if (hasApiKey) {
|
|
return NextResponse.json({
|
|
hasApiKey: true,
|
|
creditsRemaining: "unlimited",
|
|
resetTime: null,
|
|
});
|
|
}
|
|
|
|
// For free tier, check rate limit status via Redis
|
|
const limitResult = await freeTierRateLimit.getRemaining(userId);
|
|
|
|
return NextResponse.json({
|
|
hasApiKey: false,
|
|
creditsRemaining: limitResult.remaining,
|
|
resetTime: limitResult.reset,
|
|
});
|
|
} catch (error) {
|
|
console.error("Error in check-credits API:", error);
|
|
return NextResponse.json(
|
|
{
|
|
error: `Internal server error: ${
|
|
error instanceof Error ? error.message : "Unknown error"
|
|
}`,
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|