Latihan 1 dari materi Auth di SPA & Mobile di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi createTokenStore(), tempat menyimpan access token di memori (variabel di dalam closure), bukan di localStorage. Function ini mengembalikan object dengan lima method:
setAccessToken(token): simpan token. Bentuknya { value, expiresAt }, dengan expiresAt timestamp dalam milidetik.
getAccessToken(): kembalikan token yang tersimpan, atau null kalau belum ada.
clearTokens(): hapus token (kembali ke null).
isAuthenticated(): kembalikan true kalau ada token danexpiresAt > Date.now(). Hasilnya harus boolean sungguhan: tulis accessToken !== null && ..., karena accessToken && ... menghasilkan null, bukan false.
needsRefresh(token): kembalikan true kalau sisa umur token kurang dari 60 detik: token.expiresAt - Date.now() < 60000.
Kode di bawah function sudah ada, biarkan. Output-nya harus persis enam baris ini, berurutan:
false (belum ada token)
true (token berlaku 1 jam)
abc123
true (sisa 30 detik)
false (sisa 120 detik)
false (setelah clearTokens())
Dicek juga: dengan token z9 yang berlaku 5 menit, isAuthenticated()true, getAccessToken().valuez9, dan needsRefresh untuk token yang sisa 5 detik true. Gabungannya "true|z9|true".
Hint
Token disimpan di variabel let di dalam createTokenStore, sehingga cuma method-method itu yang bisa membacanya, dan isinya hilang saat halaman di-reload. Semua waktu dalam milidetik.
Mulai dengan let accessToken = null. isAuthenticated: accessToken !== null && accessToken.expiresAt > Date.now(). needsRefresh: kurangkan Date.now() dari token.expiresAt, lalu bandingkan dengan 60000.