52 lines
1.3 KiB
TypeScript

import { requireUser } from "../../utils/auth";
import { getActiveCooldown, resolveCooldown } from "../../db/cooldown";
import { getProfile } from "../../db/profile";
/**
* GET /api/protection/state
* Combined protection + cooldown state polled every 30 s by the app.
*/
export default defineEventHandler(async (event) => {
const user = await requireUser(event);
const [cooldown, profile] = await Promise.all([
getActiveCooldown(user.id),
getProfile(user.id),
]);
const now = new Date();
let active = false;
let remainingSeconds = 0;
let cooldownEndsAt: string | null = null;
if (cooldown) {
const expired = now >= cooldown.cooldownEndsAt;
if (expired) {
await resolveCooldown(cooldown.id);
// After resolve: no active cooldown
} else {
active = true;
remainingSeconds = Math.max(
0,
Math.floor((cooldown.cooldownEndsAt.getTime() - now.getTime()) / 1000),
);
cooldownEndsAt = cooldown.cooldownEndsAt.toISOString();
}
}
const plan = (profile?.plan ?? "free") as "free" | "pro" | "legend";
return {
success: true,
data: {
protectionShouldBeActive: !active,
cooldown: {
active,
remainingSeconds,
cooldownEndsAt,
},
plan,
},
};
});