TypeScript 50.6%
JavaScript 46.1%
SQL 2.1%
Shell 0.6%
CSS 0.5%
1// Attribution d'un rôle depuis le serveur (jamais depuis le navigateur) : DATABASE_URL=… pnpm tsx scripts/grant-role.ts <email> <ADMIN|MODERATOR|AGENT_VERIFIED>2import postgres from "postgres";3const [email, role] = process.argv.slice(2);4if (!email || !["ADMIN", "MODERATOR", "AGENT_VERIFIED"].includes(role ?? "")) { console.error("usage: grant-role.ts <email> <ADMIN|MODERATOR|AGENT_VERIFIED>"); process.exit(1); }5const sql = postgres(process.env.DATABASE_URL!, { max: 1 });6const [u] = await sql`select id from users where email = ${email.toLowerCase()}`; if (!u) { console.error("utilisateur introuvable (il doit s'être connecté une première fois)"); process.exit(1); }7await sql`insert into user_roles (user_id, role, note) values (${u.id}, ${role}, 'CLI serveur') on conflict do nothing`;8await sql`insert into audit_events (actor_id, action, object_type, object_id, metadata_redacted) values (null, 'cli.grant_role', 'user', ${u.id}, ${sql.json({ role })})`;9console.log(`rôle ${role} attribué à ${email}`); await sql.end();10