18 lines
721 B
Go
18 lines
721 B
Go
|
|
package mw
|
||
|
|
|
||
|
|
import "context"
|
||
|
|
|
||
|
|
// RateLimiterStore is the pluggable backend for rate-limiting middleware.
|
||
|
|
// The key is determined by the caller (client IP or user ID).
|
||
|
|
//
|
||
|
|
// Shipped implementations:
|
||
|
|
// - [InMemoryRateLimiterStore] — per-key token bucket, stdlib only (this package)
|
||
|
|
// - einherjar/cache-valkey — Valkey-backed store for distributed deployments
|
||
|
|
//
|
||
|
|
// cache-valkey satisfies this interface via Go duck typing — it never imports web/mw.
|
||
|
|
type RateLimiterStore interface {
|
||
|
|
// Allow returns true when the request for the given key is within the rate limit.
|
||
|
|
// A non-nil error means the store is temporarily unavailable; middleware fails open.
|
||
|
|
Allow(ctx context.Context, key string) (bool, error)
|
||
|
|
}
|