token (access JWT)
refreshToken (refresh JWT)
oauth_state / oauth_code_verifier

POST /api/v1/auth/forgot-password   { "email": "user@example.com" }
POST /api/v1/auth/verify-otp       { "email": "user@example.com", "otp": "123456" }
POST /api/v1/auth/reset-password   { "email": "user@example.com", "otp": "123456", "password": "NewStrongPass1!" }

Global limiter
Auth limiter
Forgot-password limiter
OTP verify limiter

# In backend/.env, set these BEFORE running:
# ADMIN_EMAIL=you@yourdomain.com
# ADMIN_PASSWORD=<a strong password of your own>
# ADMIN_NAME=Your Name
node seed-admin.js

# → Admin user created successfully / Updated existing user to admin role