algorembrant's picture
Upload 79 files
11f4e50 verified
import axios from 'axios';
const API_BASE = '/api';
const api = axios.create({
baseURL: API_BASE,
headers: { 'Content-Type': 'application/json' },
});
// Attach JWT token to every request
api.interceptors.request.use((config) => {
const token = localStorage.getItem('director_token');
if (token && config.headers) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// Handle 401 responses globally
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
localStorage.removeItem('director_token');
localStorage.removeItem('director_user');
window.location.href = '/login';
}
return Promise.reject(error);
}
);
// Auth
export const authAPI = {
register: (email: string, password: string) =>
api.post('/auth/register', { email, password }),
login: (email: string, password: string) =>
api.post('/auth/login', { email, password }),
};
// Projects
export const projectsAPI = {
list: () => api.get('/projects'),
get: (id: string) => api.get(`/projects/${id}`),
create: (data: { name: string; defaultPlatform: string; defaultFormat: string }) =>
api.post('/projects', data),
delete: (id: string) => api.delete(`/projects/${id}`),
};
// Videos
export const videosAPI = {
create: (projectId: string, data: any) =>
api.post(`/videos/${projectId}`, data),
get: (id: string) => api.get(`/videos/${id}`),
generate: (id: string) => api.post(`/videos/${id}/generate`),
status: (id: string) => api.get(`/videos/${id}/status`),
export: (id: string, data: { formats: string[]; quality: string }) =>
api.post(`/videos/${id}/export`, data),
};
// Presets
export const presetsAPI = {
list: () => api.get('/presets'),
create: (data: any) => api.post('/presets', data),
update: (id: string, data: any) => api.put(`/presets/${id}`, data),
delete: (id: string) => api.delete(`/presets/${id}`),
};
// Assets
export const assetsAPI = {
upload: (files: FileList | File[]) => {
const formData = new FormData();
Array.from(files).forEach((file) => formData.append('files', file));
return api.post('/assets/upload', formData, {
headers: { 'Content-Type': 'multipart/form-data' },
});
},
};
export default api;