export enum AuthStatus { disconnected, loading, connected }; export interface Auth { id: Ref; data: Ref>; sessionId: Ref; status: Ref; lastRefresh: Ref; register: (username: string, email: string, password: string, data?: Record) => Promise; login: (usernameOrEmail: string, password: string) => Promise; logout: () => Promise; refresh: () => Promise; } async function register(username: string, email: string, password: string, additionalData?: Record): Promise { const id = useState("auth:id"); const data = useState("auth:data"); const sessionId = useState("auth:sessionId"); const status = useState("auth:status"); const lastRefresh = useState("auth:date"); status.value = AuthStatus.loading; try { const result = await $fetch("/api/auth/register", { method: 'POST', body: { username, email, password, additionalData }, ignoreResponseError: true, }); if(result.success) { id.value = result.id!; data.value = { ...additionalData, username: username, email: email }; sessionId.value = result.sessionId!; status.value = AuthStatus.connected; lastRefresh.value = new Date(); return; } else if(result.error) { status.value = AuthStatus.disconnected; return result.error; } else { status.value = AuthStatus.disconnected; return; } } catch(e) { console.log(JSON.stringify(e)); status.value = AuthStatus.disconnected; } } async function login(usernameOrEmail: string, password: string): Promise { const status = useState("auth:status"); status.value = AuthStatus.disconnected; } async function logout(): Promise { const status = useState("auth:status"); status.value = AuthStatus.disconnected; } async function refresh(): Promise { const status = useState("auth:status"); status.value = AuthStatus.disconnected; } export default function useAuth(): Auth { const id = useState("auth:id", () => 0); const data = useState("auth:data", () => { }); const sessionId = useState("auth:sessionId", () => ''); const status = useState("auth:status", () => AuthStatus.disconnected); const lastRefresh = useState("auth:date", () => new Date()); return { id, data, sessionId, status, lastRefresh, register, login, logout, refresh }; }