import { ILogin_DTO, ILogin_Response_DTO } from "@shared/contexts"; import secureLocalStorage from "react-secure-storage"; import { IAuthActions } from "../hooks"; import { createAxiosInstance } from "./axiosInstance"; export const createAxiosAuthActions = ( apiUrl: string, httpClient = createAxiosInstance() ): IAuthActions => ({ login: async ({ email, password }: ILogin_DTO) => { // eslint-disable-next-line no-useless-catch try { const { data } = await httpClient.request({ url: `${apiUrl}/auth/login`, method: "POST", data: { email, password, }, }); secureLocalStorage.setItem("uecko", JSON.stringify(data)); return { success: true, data, redirectTo: "/", }; } catch (error) { return { success: false, error: { message: "Login failed", name: "Invalid email or password", }, }; } }, logout: () => { secureLocalStorage.removeItem("uecko"); return Promise.resolve({ success: true, redirectTo: "/login", }); }, check: () => { const data: ILogin_Response_DTO = JSON.parse( secureLocalStorage.getItem("uecko")?.toString() || "" ); return Promise.resolve( data.token ? { authenticated: true, } : { authenticated: false, redirectTo: "/login" } ); }, onError: (error: any) => { console.error(error); secureLocalStorage.removeItem("uecko"); return Promise.resolve({ error, logout: true, }); }, });