import { atom } from 'nanostores' import type { AuthResult } from '../graphql/types.gen' import { getLogger } from '../utils/logger' import { resetToken, setToken } from '../graphql/privateGraphQLClient' import { apiClient } from '../utils/apiClient' import { createSignal } from 'solid-js' const log = getLogger('auth-store') const [session, setSession] = createSignal(null) export const signIn = async (params) => { const authResult = await apiClient.authLogin(params) setSession(authResult) setToken(authResult.token) log.debug('signed in') } export const signUp = async (params) => { const authResult = await apiClient.authRegister(params) setSession(authResult) setToken(authResult.token) log.debug('signed up') } export const signOut = () => { setSession(null) resetToken() log.debug('signed out') } export const emailChecks = atom<{ [email: string]: boolean }>({}) export const signCheck = async (params) => { emailChecks.set(await apiClient.authCheckEmail(params)) } export const resetCode = atom() export const register = async ({ email, password }: { email: string; password: string }) => { const authResult = await apiClient.authRegister({ email, password }) if (authResult && !authResult.error) { log.debug('register session update', authResult) setSession(authResult) } } export const signSendLink = async (params) => { await apiClient.authSendLink(params) // { email } resetToken() } export const signConfirm = async (params) => { const auth = await apiClient.authConfirmCode(params) // { code } setToken(auth.token) setSession(auth) } export const renewSession = async () => { const authResult = await apiClient.getSession() // token in header setToken(authResult.token) setSession(authResult) } export const useAuthStore = () => { return { session } }