spark_rate_limiter

Rate limiting middleware for Spark applications.

Features

  • Client identification by IP address (or custom function)
  • Default rate limit rule for all routes
  • Path-specific rules with prefix or exact matching
  • In-memory request tracking (pluggable store interface)
  • Automatic reset after time window expires
  • Returns 429 Too Many Requests when limit exceeded

Installation

dependencies:
  spark_rate_limiter: ^1.0.0

Usage

Basic Setup (100 requests/minute)

import 'package:spark_rate_limiter/spark_rate_limiter.dart';

final handler = Pipeline()
    .addMiddleware(rateLimiterMiddleware(
      config: RateLimiterConfig.defaults(),
    ))
    .addHandler(myRouter);

Custom Configuration

rateLimiterMiddleware(
  config: RateLimiterConfig(
    defaultRule: RateLimitRule(100, Duration(minutes: 1)),
    specificRules: {
      '/login': RateLimitRule(5, Duration(minutes: 1)),
      '/api': RateLimitRule(1000, Duration(minutes: 1)),
      '/upload': RateLimitRule(10, Duration(hours: 1)),
    },
  ),
)

Custom Client Identification

rateLimiterMiddleware(
  config: RateLimiterConfig(
    defaultRule: RateLimitRule(100, Duration(minutes: 1)),
    identify: (request) {
      return request.headers['x-user-id'] ?? request.clientIp;
    },
  ),
)

Custom Store

// Implement RateLimitStore for Redis, database, etc.
rateLimiterMiddleware(
  config: RateLimiterConfig.defaults(),
  store: MyRedisRateLimitStore(),
)