import Axios, { AxiosRequestConfig } from 'axios'; import { UserResponse } from './types'; type MeQuery = () => Promise<UserResponse>; type LogoutQuery = () => Promise<any>; export type AuthClient = { me: MeQuery; logout: LogoutQuery; }; export function auth(config: AxiosRequestConfig): AuthClient { const axios = Axios.create({ ...config, baseURL: `${config.baseURL}/api/v1/`, }); const me: MeQuery = async (): Promise<UserResponse> => { return (await axios.get<UserResponse>('/users/me')).data; }; const logout: LogoutQuery = async (): Promise<any> => { return (await axios.get<any>('/logout')).data; }; return { me, logout, }; }