Latihan 1: Rate Limiting untuk Autentikasi — Auth

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.

Lengkapi createRateLimiter(windowMs, maxRequests) di kode awal: rate limiter dengan sliding window. Function itu mengembalikan function allow(key, now) yang:

  1. Membuang catatan waktu lama untuk key itu, yaitu yang t <= now - windowMs. Catatan yang tepat di batas (now - windowMs) dianggap sudah di luar jendela.
  2. Kalau jumlah percobaan di jendela sudah >= maxRequests, kembalikan false (ditolak), tapi percobaan ini tetap dicatat.
  3. Selain itu, catat now dan kembalikan true.

Tiap key punya catatan sendiri. Semua waktu dalam milidetik.

Pemanggilan dan console.log di kode awal sudah ada (createRateLimiter(60000, 3), 3 percobaan per menit), biarkan begitu. Output-nya harus persis tujuh baris ini, berurutan:

  1. true (ip1 di 1000)
  2. true (ip1 di 2000)
  3. true (ip1 di 3000)
  4. false (ip1 di 4000, penuh, tapi tetap dicatat)
  5. true (ip2 di 4000, kunci lain)
  6. true (ip1 di 62000, catatan 1000 dan 2000 sudah keluar)
  7. false (ip1 di 62500: 3000, 4000, dan 62000 masih di jendela)

Dicek juga: createRateLimiter(1000, 2) dengan panggilan ('a', 0), ('a', 100), ('a', 200), ('b', 200), ('a', 5000) harus memberi [true,true,false,true,true].

Hint