all repos — stealth-developers @ 6103149c03340fe2c2d0f2500d24a1efdd9c1635

frontend/src/stores/auth.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
import { ref } from "vue";
import { defineStore } from "pinia";
import type { User } from "@/types";

export const useAuthStore = defineStore("auth", () => {
	const isAuthenticated = ref(false);
	const isLoading = ref(true);
	const user = ref<User | null>(null);

	async function getUser() {
		try {
			const response = await fetch("/api/me");
			const data = await response.json();
			user.value = data.profile;
			isAuthenticated.value = true;
		} catch {}

		isLoading.value = false;
	}

	async function waitForAuth() {
		while (isLoading.value) {
			await getUser();
		}
	}

	return {
		isAuthenticated,
		user,
		getUser,
		waitForAuth,
	};
});