This repository has been archived on 2024-06-08. You can view files and clone it, but cannot push or open issues or pull requests.
SolarAgent/src/stores/userinfo.ts

69 lines
1.6 KiB
TypeScript

import { defineStore } from "pinia"
import { ref } from "vue"
import { request } from "@/scripts/request"
import { Preferences } from "@capacitor/preferences"
import { useRealms } from "@/stores/realms"
import { useChannels } from "@/stores/channels"
export interface Userinfo {
isReady: boolean
isLoggedIn: boolean
displayName: string
data: any
}
const defaultUserinfo: Userinfo = {
isReady: false,
isLoggedIn: false,
displayName: "Citizen",
data: null
}
export async function getAtk() {
return (await Preferences.get({ key: "identity.access_token" })).value
}
export async function getRtk() {
return (await Preferences.get({ key: "identity.refresh_token" })).value
}
export async function checkLoggedIn(): Promise<boolean> {
return (await Preferences.get({ key: "identity.access_token" })).value != null
}
export const useUserinfo = defineStore("userinfo", () => {
const userinfoHooks = {
after: [useRealms().list, useChannels().list, useChannels().connect]
}
const userinfo = ref(defaultUserinfo)
const isReady = ref(false)
async function readProfiles() {
if (!(await checkLoggedIn())) {
isReady.value = true
}
const res = await request("identity", "/api/users/me", {
headers: { Authorization: `Bearer ${await getAtk()}` }
})
if (res.status !== 200) {
return
}
const data = await res.json()
userinfo.value = {
isReady: true,
isLoggedIn: true,
displayName: data["nick"],
data: data
}
userinfoHooks.after.forEach((call) => call())
}
return { userinfo, isReady, readProfiles }
})