Latihan 1 dari materi Rate Limiting untuk Autentikasi di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Implementasikan sliding-window rate limiter sebagai factory createRateLimiter(windowMs, maxRequests).
Factory mengembalikan function allow(key, now) yang:
Menghapus timestamp lama (t <= now - windowMs) untuk key tersebut.
Jika jumlah request dalam window ≥ maxRequests → return false (tolak, jangan catat attempt ini).
Else → catat now, return true (diterima).
Timestamp yang persis di batas window (now - windowMs) dianggap di luar window (sudah boleh dibuang).
Hint
Simpan timestamp per key dalam Map<string, number[]>. Setiap allow() dipanggil, bersihkan dulu timestamp yang t <= now - windowMs, baru cek panjang array.
Kalau panjang setelah cleanup >= maxRequests → return false TANPA menambah now (penting: request yang ditolak tidak masuk rekaman). Else push now, return true.
Struktur: const bucket = (store.get(key) ?? []).filter(t => t > now - windowMs); if (bucket.length >= maxRequests) { store.set(key, bucket); return false; } bucket.push(now); store.set(key, bucket); return true.
HyperSheets
bagian dari BelajarWeb.dev
🔄
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...