#!/usr/bin/env node // ───────────────────────────────────────────────────────────── // bin/invite.js — add / remove / list invites. // // Usage: // npm run invite -- add someone@example.com // npm run invite -- remove someone@example.com // npm run invite -- list // // Or directly: // node bin/invite.js add someone@example.com // ───────────────────────────────────────────────────────────── import { q } from '../src/db.js'; const [, , cmd, arg] = process.argv; const EMAIL_RE = /^[^@\s]+@[^@\s]+\.[^@\s]+$/; function help() { console.log('Usage:'); console.log(' invite add '); console.log(' invite remove '); console.log(' invite list'); process.exit(1); } switch (cmd) { case 'add': { if (!arg || !EMAIL_RE.test(arg)) help(); const email = arg.trim().toLowerCase(); q.upsertInvite.run(email, Date.now(), 'cli'); console.log(`Invited ${email}`); break; } case 'remove': { if (!arg || !EMAIL_RE.test(arg)) help(); const email = arg.trim().toLowerCase(); const result = q.deleteInvite.run(email); console.log(result.changes > 0 ? `Removed ${email}` : `No invite for ${email}`); break; } case 'list': { const rows = q.listInvites.all(); if (rows.length === 0) { console.log('(no invites)'); } else { for (const r of rows) { const d = new Date(r.invited_at).toISOString().slice(0, 10); console.log(` ${d} ${r.email}${r.invited_by ? ` (by ${r.invited_by})` : ''}`); } console.log(`\n${rows.length} invite${rows.length === 1 ? '' : 's'} total.`); } break; } default: help(); }