Capital/stores/userinfo.ts

56 lines
1.1 KiB
TypeScript
Raw Normal View History

import { defineStore } from "pinia"
import { ref } from "vue"
export interface Userinfo {
isLoggedIn: boolean
displayName: string
data: any
}
export const defaultUserinfo: Userinfo = {
isLoggedIn: false,
displayName: "Citizen",
data: null,
}
2024-08-12 15:51:42 +00:00
export function useAtk() {
return useCookie("__hydrogen_atk", { watch: "shallow" })
}
2024-08-12 15:51:42 +00:00
export function useLoggedInState() {
return computed(() => useAtk().value != null)
}
export const useUserinfo = defineStore("userinfo", () => {
const userinfo = ref(defaultUserinfo)
const isReady = ref(false)
async function readProfiles() {
2024-08-12 15:51:42 +00:00
if (!useLoggedInState().value) {
isReady.value = true
}
const config = useRuntimeConfig()
const res = await fetch(`${config.public.solarNetworkApi}/cgi/auth/users/me`, {
2024-08-12 15:51:42 +00:00
headers: { Authorization: `Bearer ${useAtk().value}` },
credentials: "include",
})
if (res.status !== 200) {
return
}
const data = await res.json()
isReady.value = true
userinfo.value = {
isLoggedIn: true,
displayName: data["nick"],
data: data,
}
}
return { userinfo, isReady, readProfiles }
})