Files
GNX-mailEnterprise/frontend/node_modules/.cache/babel-loader/7d51f779189baba17078ffc1f162c110254252bc070f209a5b6e081df587d770.json
Iliyan Angelov c67067a2a4 Mail
2025-09-14 23:24:25 +03:00

1 line
12 KiB
JSON

{"ast":null,"code":"import axios from 'axios';\nimport toast from 'react-hot-toast';\nconst API_BASE_URL = process.env.REACT_APP_API_URL || 'http://localhost:8000/api';\n\n// Create axios instance\nexport const api = axios.create({\n baseURL: API_BASE_URL,\n headers: {\n 'Content-Type': 'application/json'\n }\n});\n\n// Request interceptor to add auth token\napi.interceptors.request.use(config => {\n const token = localStorage.getItem('access_token');\n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n return config;\n}, error => {\n return Promise.reject(error);\n});\n\n// Response interceptor to handle token refresh\napi.interceptors.response.use(response => response, async error => {\n var _error$response, _error$response2, _error$response3, _error$response4;\n const originalRequest = error.config;\n if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n try {\n const refreshToken = localStorage.getItem('refresh_token');\n if (refreshToken) {\n const response = await axios.post(`${API_BASE_URL}/auth/token/refresh/`, {\n refresh: refreshToken\n });\n const {\n access\n } = response.data;\n localStorage.setItem('access_token', access);\n\n // Retry original request with new token\n originalRequest.headers.Authorization = `Bearer ${access}`;\n return api(originalRequest);\n }\n } catch (refreshError) {\n // Refresh failed, redirect to login\n localStorage.removeItem('access_token');\n localStorage.removeItem('refresh_token');\n window.location.href = '/login';\n return Promise.reject(refreshError);\n }\n }\n\n // Handle other errors\n if (((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) >= 500) {\n toast.error('Server error. Please try again later.');\n } else if (((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.status) === 403) {\n toast.error('You do not have permission to perform this action.');\n } else if (((_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : _error$response4.status) === 404) {\n toast.error('Resource not found.');\n }\n return Promise.reject(error);\n});\n\n// API endpoints\nexport const endpoints = {\n // Auth\n login: '/accounts/login/',\n register: '/accounts/register/',\n logout: '/accounts/logout/',\n profile: '/accounts/profile/',\n changePassword: '/accounts/change-password/',\n // Emails\n emails: '/emails/',\n emailDetail: id => `/emails/${id}/`,\n sendEmail: '/emails/send/',\n fetchEmails: '/emails/fetch/',\n emailStats: '/emails/stats/',\n emailSearch: '/emails/search/',\n emailBulkAction: '/emails/bulk-action/',\n // Folders\n folders: '/emails/folders/',\n folderDetail: id => `/emails/folders/${id}/`,\n // Contacts\n contacts: '/contacts/',\n contactDetail: id => `/contacts/${id}/`,\n contactSearch: '/contacts/search/',\n contactStats: '/contacts/stats/',\n contactExport: '/contacts/export/',\n contactImport: '/contacts/import/',\n // Templates\n templates: '/emails/templates/',\n templateDetail: id => `/emails/templates/${id}/`,\n // Signatures\n signatures: '/emails/signatures/',\n signatureDetail: id => `/emails/signatures/${id}/`\n};\n\n// Helper functions\nexport const handleApiError = error => {\n var _error$response5;\n if ((_error$response5 = error.response) !== null && _error$response5 !== void 0 && _error$response5.data) {\n const {\n data\n } = error.response;\n if (typeof data === 'string') {\n return data;\n }\n if (data.message) {\n return data.message;\n }\n if (data.error) {\n return data.error;\n }\n if (data.detail) {\n return data.detail;\n }\n\n // Handle validation errors\n if (typeof data === 'object') {\n const errors = Object.values(data).flat();\n return errors.join(', ');\n }\n }\n return 'An unexpected error occurred';\n};\nexport default api;","map":{"version":3,"names":["axios","toast","API_BASE_URL","process","env","REACT_APP_API_URL","api","create","baseURL","headers","interceptors","request","use","config","token","localStorage","getItem","Authorization","error","Promise","reject","response","_error$response","_error$response2","_error$response3","_error$response4","originalRequest","status","_retry","refreshToken","post","refresh","access","data","setItem","refreshError","removeItem","window","location","href","endpoints","login","register","logout","profile","changePassword","emails","emailDetail","id","sendEmail","fetchEmails","emailStats","emailSearch","emailBulkAction","folders","folderDetail","contacts","contactDetail","contactSearch","contactStats","contactExport","contactImport","templates","templateDetail","signatures","signatureDetail","handleApiError","_error$response5","message","detail","errors","Object","values","flat","join"],"sources":["/home/gnx/Desktop/gnx-mail/frontend/src/services/api.js"],"sourcesContent":["import axios from 'axios';\nimport toast from 'react-hot-toast';\n\nconst API_BASE_URL = process.env.REACT_APP_API_URL || 'http://localhost:8000/api';\n\n// Create axios instance\nexport const api = axios.create({\n baseURL: API_BASE_URL,\n headers: {\n 'Content-Type': 'application/json',\n },\n});\n\n// Request interceptor to add auth token\napi.interceptors.request.use(\n (config) => {\n const token = localStorage.getItem('access_token');\n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n);\n\n// Response interceptor to handle token refresh\napi.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config;\n\n if (error.response?.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n try {\n const refreshToken = localStorage.getItem('refresh_token');\n if (refreshToken) {\n const response = await axios.post(`${API_BASE_URL}/auth/token/refresh/`, {\n refresh: refreshToken,\n });\n\n const { access } = response.data;\n localStorage.setItem('access_token', access);\n \n // Retry original request with new token\n originalRequest.headers.Authorization = `Bearer ${access}`;\n return api(originalRequest);\n }\n } catch (refreshError) {\n // Refresh failed, redirect to login\n localStorage.removeItem('access_token');\n localStorage.removeItem('refresh_token');\n window.location.href = '/login';\n return Promise.reject(refreshError);\n }\n }\n\n // Handle other errors\n if (error.response?.status >= 500) {\n toast.error('Server error. Please try again later.');\n } else if (error.response?.status === 403) {\n toast.error('You do not have permission to perform this action.');\n } else if (error.response?.status === 404) {\n toast.error('Resource not found.');\n }\n\n return Promise.reject(error);\n }\n);\n\n// API endpoints\nexport const endpoints = {\n // Auth\n login: '/accounts/login/',\n register: '/accounts/register/',\n logout: '/accounts/logout/',\n profile: '/accounts/profile/',\n changePassword: '/accounts/change-password/',\n \n // Emails\n emails: '/emails/',\n emailDetail: (id) => `/emails/${id}/`,\n sendEmail: '/emails/send/',\n fetchEmails: '/emails/fetch/',\n emailStats: '/emails/stats/',\n emailSearch: '/emails/search/',\n emailBulkAction: '/emails/bulk-action/',\n \n // Folders\n folders: '/emails/folders/',\n folderDetail: (id) => `/emails/folders/${id}/`,\n \n // Contacts\n contacts: '/contacts/',\n contactDetail: (id) => `/contacts/${id}/`,\n contactSearch: '/contacts/search/',\n contactStats: '/contacts/stats/',\n contactExport: '/contacts/export/',\n contactImport: '/contacts/import/',\n \n // Templates\n templates: '/emails/templates/',\n templateDetail: (id) => `/emails/templates/${id}/`,\n \n // Signatures\n signatures: '/emails/signatures/',\n signatureDetail: (id) => `/emails/signatures/${id}/`,\n};\n\n// Helper functions\nexport const handleApiError = (error) => {\n if (error.response?.data) {\n const { data } = error.response;\n \n if (typeof data === 'string') {\n return data;\n }\n \n if (data.message) {\n return data.message;\n }\n \n if (data.error) {\n return data.error;\n }\n \n if (data.detail) {\n return data.detail;\n }\n \n // Handle validation errors\n if (typeof data === 'object') {\n const errors = Object.values(data).flat();\n return errors.join(', ');\n }\n }\n \n return 'An unexpected error occurred';\n};\n\nexport default api;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}