sliding_window_limiter 2.0.1 copy "sliding_window_limiter: ^2.0.1" to clipboard
sliding_window_limiter: ^2.0.1 copied to clipboard

A Dart implementation of a sliding window rate limiter.

example/sliding_window_limiter_example.dart

import 'dart:convert';

import 'package:sliding_window_limiter/sliding_window_limiter.dart';

Future<void> main() async {
  String rateLimitId = 'client-IP-address-or-user-id';

  final limiter = SlidingWindowLimiter(
    id: rateLimitId,
    limit: 120,
    interval: Duration(minutes: 1),
    storage: RedisStorage(),
  );
  final rateLimit = await limiter.consume(1);
  if (!rateLimit.accepted) {
    print('Retry after: ${rateLimit.retryAfter}');
    print('Wait time: ${rateLimit.waitTime.inSeconds} seconds');
    throw Exception('Rate limit exceeded.');
  }
  print('Remaining tokens: ${rateLimit.remainingTokens}');
}

class RedisStorage implements Storage {
  @override
  Future<void> save(SlidingWindow window, Duration ttl) async {
    // Simulate saving to Redis
  }

  @override
  Future<SlidingWindow?> fetch(String id) async {
    final data = null; // Simulate fetching from Redis
    if (data == null) return null;
    return SlidingWindow.fromJson(jsonDecode(data));
  }
}
1
likes
160
points
63
downloads

Publisher

unverified uploader

Weekly Downloads

A Dart implementation of a sliding window rate limiter.

Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (license)

More

Packages that depend on sliding_window_limiter