- Token-bucket rate limiter keyed per (email+IP) using golang.org/x/time/rate - rate.Every(12s), burst=5, idleTTL=10min (D-16) - AllowN(t, 1) with injectable clock for deterministic tests (Pattern 8) - Janitor goroutine evicts entries idle > 10min via cleanupNow() - No .Allow() without args (Pitfall 8 avoided) - Five tests pass with -race: burst, refill, isolation, janitor, concurrent - golang.org/x/time v0.15.0 added to go.mod
25 lines
719 B
Modula-2
25 lines
719 B
Modula-2
module backend
|
|
|
|
go 1.26.1
|
|
|
|
require (
|
|
github.com/a-h/templ v0.3.1020
|
|
github.com/go-chi/chi/v5 v5.2.5
|
|
github.com/google/uuid v1.6.0
|
|
github.com/jackc/pgx/v5 v5.9.2
|
|
github.com/pressly/goose/v3 v3.27.1
|
|
golang.org/x/crypto v0.51.0
|
|
)
|
|
|
|
require (
|
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
|
github.com/mfridman/interpolate v0.0.2 // indirect
|
|
github.com/sethvargo/go-retry v0.3.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
golang.org/x/sync v0.20.0 // indirect
|
|
golang.org/x/sys v0.44.0 // indirect
|
|
golang.org/x/text v0.37.0 // indirect
|
|
golang.org/x/time v0.15.0 // indirect
|
|
)
|