Summary
POST /events/submit is auth-gated but unbounded — a single member could enqueue arbitrary draft events into the staff review queue. Same concern will apply to future member-facing submission endpoints in Plans 4 and 5.
Requirements
Context
Flagged in the Plan 2 review. Rate limiting is best done at the Worker layer (e.g., Cloudflare Workers KV or Durable Object). Plan 4 (forms) and Plan 5 (announcements/broadcast) will benefit from the same primitive.
Implementation Notes
Options:
- Cloudflare Workers Rate Limiting API (built-in, easy)
- KV-backed counter with TTL (cheap, works on the existing stack)
- Postgres-backed counter (consistent but adds DB hops to every submit)
Workers Rate Limiting API is the YAGNI default unless we need cross-region consistency.
Summary
POST /events/submitis auth-gated but unbounded — a single member could enqueue arbitrary draft events into the staff review queue. Same concern will apply to future member-facing submission endpoints in Plans 4 and 5.Requirements
POST /events/submit429 Too Many Requestswith aRetry-AfterheaderContext
Flagged in the Plan 2 review. Rate limiting is best done at the Worker layer (e.g., Cloudflare Workers KV or Durable Object). Plan 4 (forms) and Plan 5 (announcements/broadcast) will benefit from the same primitive.
Implementation Notes
Options:
Workers Rate Limiting API is the YAGNI default unless we need cross-region consistency.