Files
SerpentRace/SerpentRace_Frontend/src/api/userApi.js
T

76 lines
1.9 KiB
JavaScript

import axios from "axios"
export const API_CONFIG = {
baseURL: import.meta.env.VITE_API_URL + "/api",
wsURL: "http://localhost:3000",
timeout: 10000,
retryAttempts: 3,
}
const apiClient = axios.create({
baseURL: API_CONFIG.baseURL,
timeout: API_CONFIG.timeout,
withCredentials: true, // Important for cookie-based auth
headers: {
"Content-Type": "application/json",
},
})
// Add request interceptor for debugging
apiClient.interceptors.request.use(
(config) => {
console.log("Request URL:", config.url)
console.log("Request headers:", config.headers)
console.log("Current cookies:", document.cookie)
return config
},
(error) => {
return Promise.reject(error)
}
)
// Add response interceptor for debugging cookies
apiClient.interceptors.response.use(
(response) => {
console.log("Response status:", response.status)
console.log("Response headers:", response.headers)
console.log("Set-Cookie headers:", response.headers["set-cookie"])
console.log("Cookies after response:", document.cookie)
return response
},
(error) => {
console.error("API Error:", error.response?.data || error.message)
return Promise.reject(error)
}
)
//login
export const login = async (username, password) => {
try {
const response = await apiClient.post("/users/login", { username, password })
return response.data
} catch (error) {
throw error
}
}
//register
export const register = async (username, email, password, fname, lname, phone) => {
try {
const response = await apiClient.post("/users/create", { username, email, password, fname, lname, phone })
return { ...response.data, status: response.status }
} catch (error) {
throw error
}
}
//verify email
export const verifyEmail = async (token) => {
try {
const response = await apiClient.get(`/users/verify-email/${token}`)
return response.data
} catch (error) {
throw error
}
}