import { setIsLogged } from '#lib/utils' import { useUserStore } from '#lib/stores' import { useRoute, useNuxtApp } from 'nuxt/app' import type { AppCookies, SignInWithTokenRequest, UserStore } from '#lib/types' import { useNadal } from '#lib/composables' import { AppStorageEnum, RouterEnum } from '#lib/enums' /** * Sign In with Token * @param {string} token - A token * @param {SignInWithTokenRequest} payload - Data login * @returns {UserStore} Details about the user's information */ export function useLoginWithToken() { const nuxtApp = useNuxtApp() const $appCookies = nuxtApp.$appCookies as AppCookies const { auth } = useNadal() const store = useUserStore() const route = useRoute() const { fetchUserPromotion } = usePromotion() const { token = '' } = route.query const IGNORE_ROUTES = [ RouterEnum.Login, RouterEnum.ResetPassword, RouterEnum.Account, RouterEnum.NotFound, RouterEnum.Maintenance ] const checkAndLoginWithToken = async () => { if (token && !IGNORE_ROUTES.includes(route.path as RouterEnum)) { const data = await auth.signInWithToken< SignInWithTokenRequest, UserStore >({ token: token.toString() }) if (data) { store.setUser(data) setIsLogged(true) window.dispatchEvent(new Event(AppStorageEnum.Storage)) fetchUserPromotion() $appCookies.token.value = data.token $appCookies.gpToken.value = data.gptoken return true } } return false } return { checkAndLoginWithToken, } }