import assert from "node:assert/strict"; import test from "node:test"; import { consumeRequestRateLimit } from "../src/lib/request-rate-limit.ts"; test("a user is allowed up to the window limit and then must wait", () => { const store = new Map(); const first = consumeRequestRateLimit({ key: "search:user-1", limit: 2, windowMs: 60_000, now: 1_000, store, }); const second = consumeRequestRateLimit({ key: "search:user-1", limit: 2, windowMs: 60_000, now: 2_000, store, }); const blocked = consumeRequestRateLimit({ key: "search:user-1", limit: 2, windowMs: 60_000, now: 3_000, store, }); const otherUser = consumeRequestRateLimit({ key: "search:user-2", limit: 2, windowMs: 60_000, now: 3_000, store, }); const afterWindow = consumeRequestRateLimit({ key: "search:user-1", limit: 2, windowMs: 60_000, now: 61_500, store, }); assert.deepEqual(first, { ok: true }); assert.deepEqual(second, { ok: true }); assert.deepEqual(blocked, { ok: false, retryAfterSeconds: 58 }); assert.deepEqual(otherUser, { ok: true }); assert.deepEqual(afterWindow, { ok: true }); });