21 lines
635 B
JavaScript
21 lines
635 B
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { createIpRateLimiter } from '../src/rateLimits.js';
|
|
|
|
test('limits requests per IP within the configured window', () => {
|
|
const limiter = createIpRateLimiter({
|
|
windowMs: 60_000,
|
|
max: 2,
|
|
message: 'Too many reads.'
|
|
});
|
|
|
|
assert.equal(limiter.check('203.0.113.8').remaining, 1);
|
|
assert.equal(limiter.check('203.0.113.8').remaining, 0);
|
|
assert.equal(limiter.check('203.0.113.9').remaining, 1);
|
|
|
|
assert.throws(
|
|
() => limiter.check('203.0.113.8'),
|
|
(error) => error.statusCode === 429 && error.message === 'Too many reads.'
|
|
);
|
|
});
|