Spaces:
Build error
Build error
import axios, { AxiosError, AxiosResponse } from "axios"; | |
export const openHands = axios.create({ | |
baseURL: `${window.location.protocol}//${import.meta.env.VITE_BACKEND_BASE_URL || window?.location.host}`, | |
}); | |
// Helper function to check if a response contains an email verification error | |
// eslint-disable-next-line @typescript-eslint/no-explicit-any | |
const checkForEmailVerificationError = (data: any): boolean => { | |
const EMAIL_NOT_VERIFIED = "EmailNotVerifiedError"; | |
if (typeof data === "string") { | |
return data.includes(EMAIL_NOT_VERIFIED); | |
} | |
if (typeof data === "object" && data !== null) { | |
if ("message" in data) { | |
const { message } = data; | |
if (typeof message === "string") { | |
return message.includes(EMAIL_NOT_VERIFIED); | |
} | |
if (Array.isArray(message)) { | |
return message.some( | |
(msg) => typeof msg === "string" && msg.includes(EMAIL_NOT_VERIFIED), | |
); | |
} | |
} | |
// Search any values in object in case message key is different | |
return Object.values(data).some( | |
(value) => | |
(typeof value === "string" && value.includes(EMAIL_NOT_VERIFIED)) || | |
(Array.isArray(value) && | |
value.some( | |
(v) => typeof v === "string" && v.includes(EMAIL_NOT_VERIFIED), | |
)), | |
); | |
} | |
return false; | |
}; | |
// Set up the global interceptor | |
openHands.interceptors.response.use( | |
(response: AxiosResponse) => response, | |
(error: AxiosError) => { | |
// Check if it's a 403 error with the email verification message | |
if ( | |
error.response?.status === 403 && | |
checkForEmailVerificationError(error.response?.data) | |
) { | |
if (window.location.pathname !== "/settings/user") { | |
window.location.reload(); | |
} | |
} | |
// Continue with the error for other error handlers | |
return Promise.reject(error); | |
}, | |
); | |