import { db } from '../utils/db.js' class Authenticator { constructor() { this.currentUser = null } async sendEmail(answered) { return await db.post('/user/send-email/', answered) } async verifySession(hashedToken) { return await db.get(`/user/verify/${hashedToken}`) } async createToken(req) { return await db.post('/user/token', req, true) } async validateSession(hashedSessionToken) { return await db.post('/user/validate-session', hashedSessionToken, true) } async authenticateLoginCredentials(credentials) { return await db.post('/user/login', credentials) } async removeSession(hashedSessionToken) { return await db.post('/user/remove-session', hashedSessionToken, true) } grabStoredCookie(cookieKey) { const cookies = document.cookie.split('; ').reduce((prev, current) => { const [name, ...value] = current.split('=') prev[name] = value.join('=') return prev }, {}) const cookieVal = cookieKey in cookies ? cookies[`${cookieKey}`] : undefined return cookieVal } async verifySessionCookie(sessionCookie) { const hashedAccessToken = this.grabStoredCookie(sessionCookie) if (!hashedAccessToken) return console.warn('WARNING :=> accessToken is not defined') const validatedToken = await authenticator.validateSession( hashedAccessToken, ) if (validatedToken.error) { console.error('ERROR :=>', validatedToken.error) } else { return validatedToken } } } const authenticator = new Authenticator() export { authenticator, Authenticator }