Latihan 1 dari materi Account Recovery & Lockout di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi createLockoutTracker() di kode awal: lockout dengan sliding window. Konstanta WINDOW = 15 * 60 * 1000 (15 menit dalam milidetik) dan THRESHOLD = 5 sudah ada di kode awal, biarkan. Kembalikan object dengan tiga method:
recordFailure(userId, now): catat satu kegagalan login untuk userId pada waktu now (milidetik).
isLockedOut(userId, now): buang catatan yang sudah keluar dari jendela (yang waktunya gak lebih besar dari now - WINDOW), simpan sisanya, lalu kembalikan true kalau sisa kegagalannya minimal THRESHOLD, selain itu false.
clearFailures(userId): hapus semua catatan user itu. Ini yang dipanggil saat login berhasil.
Kunci userId boleh string apa saja, seperti 'u1' dan 'u2'. Di aplikasi sungguhan isinya email|ip.
Pemanggilan dan console.log di kode awal sudah ada, biarkan begitu. Output-nya harus persis enam baris ini, berurutan:
false (belum ada kegagalan)
false (baru 4 kegagalan)
true (5 kegagalan dalam 15 menit)
false (16 menit kemudian, semua kegagalan lama sudah keluar jendela)
true (u2 gagal 5 kali)
false (setelah clearFailures('u2'))
Dicek juga dengan tracker baru: 5 kegagalan untuk 'z', lalu isLockedOut, clearFailures, dan isLockedOut lagi harus memberi [true,false]. Lalu 5 kegagalan untuk 'w' mulai waktu 1000, diperiksa di 1000 dan di 1000 + 16 * 60 * 1000, harus memberi [true,false].