2025-06-24 21:50:31 +02:00

70 lines
2.0 KiB
TypeScript

"use client";
import CookieService from "@Front/Services/CookieService/CookieService";
import EventEmitter from "@Front/Services/EventEmitter";
import JwtService from "@Front/Services/JwtService/JwtService";
import User from "src/sdk/User";
export default class UserStore {
public static readonly instance = new this();
protected readonly event = new EventEmitter();
private constructor() {}
public isConnected(): boolean {
return !!CookieService.getInstance().getCookie("leCoffreAccessToken");
}
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", CookieService.getInstance().getCookie("leCoffreAccessToken"));
} 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");
User.getInstance().clear();
this.event.emit("disconnection", CookieService.getInstance().getCookie("leCoffreAccessToken"));
} 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);
}
public getAccessToken(): string {
return CookieService.getInstance().getCookie("leCoffreAccessToken") || "";
}
public getRefreshToken(): string {
return CookieService.getInstance().getCookie("leCoffreRefreshToken") || "";
}
}