// Generated, do not edit. sha256:267314982d9469bd348aa537982dfb5f7b94157d526aea6cbeeb8cefdfe06595 import { randomBytes } from 'node:crypto'; import { CONFIG } from '../shared/config.js'; const nieuwToken = () => randomBytes(32).toString('hex'); export function createSessionStore({ ttlMs = CONFIG.AUTH.SESSION_TTL_MS, now = Date.now } = {}) { const sessies = new Map(); const verlopen = (aangemaakt) => now() - aangemaakt >= ttlMs; return { create() { for (const [token, aangemaakt] of sessies) if (verlopen(aangemaakt)) sessies.delete(token); const token = nieuwToken(); sessies.set(token, now()); return token; }, isValid(token) { if (typeof token !== 'string' || !token) return false; const aangemaakt = sessies.get(token); if (aangemaakt === undefined) return false; if (verlopen(aangemaakt)) { sessies.delete(token); return false; } return true; }, drop(token) { return sessies.delete(token); }, size() { return sessies.size; }, }; } export function createAttemptLimiter({ free = CONFIG.AUTH.LOGIN_ATTEMPTS.FREE, baseLockMs = CONFIG.AUTH.LOGIN_ATTEMPTS.BASE_LOCK_MS, maxLockMs = CONFIG.AUTH.LOGIN_ATTEMPTS.MAX_LOCK_MS, now = Date.now, } = {}) { const pogingen = new Map(); const wachttijd = (missers) => { if (missers <= free) return 0; return Math.min(maxLockMs, baseLockMs * 2 ** (missers - free - 1)); }; return { retryAfterMs(adres) { const staat = pogingen.get(adres); if (!staat) return 0; const over = staat.laatste + wachttijd(staat.missers) - now(); if (over <= 0) { if (over < -maxLockMs) pogingen.delete(adres); return 0; } return over; }, fail(adres) { const staat = pogingen.get(adres) || { missers: 0, laatste: 0 }; staat.missers += 1; staat.laatste = now(); pogingen.set(adres, staat); return wachttijd(staat.missers); }, succeed(adres) { pogingen.delete(adres); }, size() { return pogingen.size; }, }; }