Merge PR #4647 into release/3.71.1

This commit is contained in:
r committed 2026-11-04 03:28:54 -05:00
commit b694a8ae01
2 files changed
+28 -2

No files matched your search

+26
View File
@@ -0,0 +1,26 @@
import { test } from 'vitest';
import assert from 'node:assert/strict';
import { SlidingWindowRateLimiter, TokenBucketRateLimiter } from '../v3/@claude-flow/shared/src/resilience/rate-limiter.ts';
for (const Type of [SlidingWindowRateLimiter, TokenBucketRateLimiter]) {
test(`${Type.name} resets only the explicit empty key`, () => {
const limiter = new Type({ maxRequests: 1, windowMs: 60_000 });
try {
assert.equal(limiter.consume('').allowed, true);
assert.equal(limiter.consume('other').allowed, true);
assert.equal(limiter.consume('').allowed, false);
limiter.reset('');
assert.equal(limiter.consume('').allowed, true);
assert.equal(limiter.consume('other').allowed, false);
} finally { limiter.destroy(); }
});
test(`${Type.name} omitted reset key still resets every key`, () => {
const limiter = new Type({ maxRequests: 1, windowMs: 60_000 });
try {
limiter.consume(''); limiter.consume('other');
limiter.reset();
assert.equal(limiter.consume('').allowed, true);
assert.equal(limiter.consume('other').allowed, true);
} finally { limiter.destroy(); }
});
}
@@ -161,7 +161,7 @@ export class SlidingWindowRateLimiter implements RateLimiter {
* Reset rate limit for a key
*/
reset(key?: string): void {
if (key) {
if (key !== undefined) {
this.requests.delete(key);
} else {
this.requests.clear();
@@ -317,7 +317,7 @@ export class TokenBucketRateLimiter implements RateLimiter {
* Reset bucket for a key
*/
reset(key?: string): void {
if (key) {
if (key !== undefined) {
this.buckets.delete(key);
} else {
this.buckets.clear();