Skip to content

fix: add rate limiting to auth service endpoints#188

Open
jakebromberg wants to merge 7 commits intomainfrom
fix/12-auth-rate-limiting
Open

fix: add rate limiting to auth service endpoints#188
jakebromberg wants to merge 7 commits intomainfrom
fix/12-auth-rate-limiting

Conversation

@jakebromberg
Copy link
Member

Summary

  • Adds express-rate-limit middleware to the auth service (apps/auth/app.ts), limiting auth endpoints to 10 requests per 15-minute window per IP.
  • Login, password reset, and anonymous sign-in were previously unbounded, leaving them vulnerable to brute-force attacks.
  • Adds a unit test that verifies rate limiting configuration is present in the auth app source.

Test plan

  • Unit test tests/unit/auth/rate-limiting.test.ts passes (verifies express-rate-limit import, rateLimit() config, and middleware ordering before the auth handler)
  • Manual smoke test: hit /auth/sign-in/email more than 10 times in 15 minutes and confirm 429 response

Made with Cursor

The auth service had no rate limiting, leaving login, password reset,
and anonymous sign-in vulnerable to brute-force attacks.

Co-authored-by: Cursor <cursoragent@cursor.com>
@jakebromberg jakebromberg force-pushed the fix/12-auth-rate-limiting branch from 21f53fa to de98620 Compare February 27, 2026 05:56
Jake Bromberg and others added 6 commits February 27, 2026 09:46
The auth rate limiter (10 req/15 min) causes integration test failures
because tests like discogs.spec.js call signInAnonymous() repeatedly.
Disable the rate limiter when NODE_ENV=test or USE_MOCK_SERVICES=true,
matching the pattern used by the backend's rateLimiting middleware.

Also set NODE_ENV=test on the CI auth container in docker-compose so
the rate limiter is skipped during integration tests.
AUTH_BYPASS is guaranteed to be set in CI, unlike NODE_ENV which may
not propagate reliably through Docker. This ensures the auth service
disables rate limiting during integration tests, preventing 429 errors.
The tsup env config was replacing process.env.NODE_ENV with
its build-time value ("development") in the compiled output.
This meant the runtime NODE_ENV=test set by docker-compose
had no effect, so the rate limiter was always active in CI
integration tests, causing 429 Too Many Requests failures.

Removing the env block lets process.env.NODE_ENV be read at
runtime, which is what the isTestEnv guard in app.ts expects.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants