"use client"; import CookieService from "@Front/Services/CookieService/CookieService"; import EventEmitter from "@Front/Services/EventEmitter"; import JwtService from "@Front/Services/JwtService/JwtService"; export default class UserStore { public static readonly instance = new this(); protected readonly event = new EventEmitter(); public accessToken: string | null = null; public refreshToken: string | null = null; private constructor() {} public isConnected(): boolean { return !!this.accessToken; } public getRole(): string | undefined { const decodedPayload = JwtService.getInstance().decodeJwt(); return decodedPayload?.role; } public async connect(accessToken: string, refreshToken: string) { try { //Save tokens in cookies CookieService.getInstance().setCookie("leCoffreAccessToken", accessToken); CookieService.getInstance().setCookie("leCoffreRefreshToken", refreshToken); this.event.emit("connection", this.accessToken); } catch (error) { console.error(error); return false; } return true; } public async disconnect() { try { //Remove tokens from cookies CookieService.getInstance().deleteCookie("leCoffreAccessToken"); CookieService.getInstance().deleteCookie("leCoffreRefreshToken"); this.event.emit("disconnection", this.accessToken); } catch (error) { console.error(error); } } public onDisconnect(callback: (userAddress: string) => void): () => void { this.event.on("disconnection", callback); return () => this.event.off("disconnection", callback); } public onConnect(callback: (userAddress: string) => void): () => void { this.event.on("connection", callback); return () => this.event.off("connection", callback); } }