// Admin emails can approve or reject submitted entries, review reports and// read the inbox, and are exempt from the submission rate limit.//// Set entirely by the ADMIN_EMAILS env var (comma-separated). There is// deliberately no hardcoded fallback: this repository is public, and a default// in the source would publish a private address to everyone who clones it. An// unset variable means nobody is an admin, which fails closed.function adminList(): string[] { const fromEnv = process.env.ADMIN_EMAILS; if (!fromEnv?.trim()) return []; return fromEnv .split(",") .map((e) => e.trim().toLowerCase()) .filter(Boolean);}export function isAdmin(email: string | null | undefined): boolean { if (!email) return false; return adminList().includes(email.toLowerCase());}
// Admin emails can approve or reject submitted entries, review reports and
// read the inbox, and are exempt from the submission rate limit.
//
// Set entirely by the ADMIN_EMAILS env var (comma-separated). There is
// deliberately no hardcoded fallback: this repository is public, and a default
// in the source would publish a private address to everyone who clones it. An
// unset variable means nobody is an admin, which fails closed.
function adminList(): string[] {
const fromEnv = process.env.ADMIN_EMAILS;
if (!fromEnv?.trim()) return [];
return fromEnv
.split(",")
.map((e) => e.trim().toLowerCase())
.filter(Boolean);
}
export function isAdmin(email: string | null | undefined): boolean {
if (!email) return false;
return adminList().includes(email.toLowerCase());
}