b5ef09ff

By: Michael Lynch <git@mtlynch.io>

Reduce coupling in email auth by consolidating duplicated code and moving types to proper packages

- Delete NewTokenCreator (duplicated by NewSender); dev build uses NewSender with no-op email func
- Remove AllowWithRateLimit param and ErrRateLimited from magiclogin; rate limiting stays in the
  outer LoginTokenCreator closure where the client IP is available
- Move SMTP config types from domain package (little_moments) into magiclogin/loginmail/smtp
- Move EmailMessage and SendFunc into magiclogin/loginmail
- Extract mustParseSMTPConfig() in email_sender_prod.go to separate config parsing from wiring
- Return token entry from prod LoginTokenCreator instead of silently discarding it

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 1s 7s 7s 9s 1s
Eval 7s 48s 48s 55s 0s
Build 12s 5m34s 1m04s 1m16s 0s
Suite 1s 6m29s 1m15s 1m16s 1s

Timeline

0s10s20s30s40s50s1m1m10s