This Dart package provides rate limiting by using an implementation of the token bucket algorithm.
final bucket =TokenBucket(
size:15,
refillInterval:constDuration(seconds:1),
refillAmount:10,
storage:MemoryTokenBucketStorage(), // optionally change the way the state of the bucket is stored
);
if(bucket.consume()) {
// Consumed 1 token successfully
}
if(bucket.consume(2)) {
// Consumed 2 tokens successfully
}If you want to store the tokens asynchronously in a custom storage, you can also use the AsyncTokenBucket.
final bucket =AsyncTokenBucket(
size:15,
refillInterval:constDuration(seconds:1),
refillAmount:10,
storage:MyCustomAsyncTokenBucketStorage(),
);
if(await bucket.consume()) {
// Consumed 1 token successfully
}