import { defineStore } from 'pinia'; const baseUrl = '/api/Users'; export const auth = defineStore({ id: 'auth', state: () => ({ user: "", refreshTokenTimeout: 0 }), actions: { async googleLogin(client, idToken) { const response = await client.post("https://people.googleapis.com/v1/people/me", { headers: { "Authorization": "Bearer " + idToken } }) this.user = { accessToken: response.data.accessToken, refreshToken: response.data.refreshToken, email: response.data.email } localStorage.setItem('jwt', this.user.accessToken); this.startRefreshTokenTimer(); }, async login(client, email, password) { const requestBody = { email: email, password: password }; const response = await client.post(`${baseUrl}/login`, requestBody) this.user = { accessToken: response.data.accessToken, refreshToken: response.data.refreshToken, email: email } localStorage.setItem('jwt', this.user.accessToken); this.startRefreshTokenTimer(); }, async loginGoogle(client, accessToken) { const response = await client.post(`${baseUrl}/google`, {accessToken: accessToken}) this.user = { accessToken: response.data.accessToken, refreshToken: response.data.refreshToken, email: response.data.email } localStorage.setItem('jwt', this.user.accessToken); this.startRefreshTokenTimer(); }, logout() { localStorage.setItem('jwt', ''); this.user = null; this.stopRefreshTokenTimer(); }, async refreshToken(client) { const response = await client.post(`${baseUrl}/refresh`); this.user.accessToken = response.accessToken; localStorage.setItem('jwt', this.user.accessToken); this.startRefreshTokenTimer(); }, startRefreshTokenTimer() { const timeout = 50 * 1000; this.refreshTokenTimeout = setTimeout(this.refreshToken, timeout); }, stopRefreshTokenTimer() { clearTimeout(this.refreshTokenTimeout); } } });