import axios from 'axios'
const api = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000',
timeout: 10000,
})
// Request interceptor for auth
api.interceptors.request.use(
(config) => {
// Add auth token if available
const token = localStorage.getItem('authToken')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => {
return Promise.reject(error)
}
)
// Response interceptor for error handling
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
// Handle auth errors
localStorage.removeItem('authToken')
window.location.href = '/login'
}
return Promise.reject(error)
}
)
export interface DashboardData {
workflows: {
active: number
completed: number
failed: number
workflows: Array<{
id: string
name: string
status: 'running' | 'paused' | 'stopped' | 'completed' | 'failed'
progress: number
lastRun: string
nextRun?: string
}>
}
system: {
status: 'healthy' | 'warning' | 'error'
services: Array<{
name: string
status: 'online' | 'offline' | 'degraded'
uptime: string
responseTime?: string
}>
resources: {
cpu: number
memory: number
disk: number
}
}
metrics: {
performance: Array<{ time: string; workflows: number; apiCalls: number }>
success: Array<{ name: string; count: number }>
}
activity: Array<{
id: string
type: 'workflow' | 'api' | 'system' | 'user'
message: string
timestamp: string
status: 'success' | 'warning' | 'error' | 'info'
}>
}
export const fetchDashboardData = async (): Promise<DashboardData> => {
try {
const response = await api.get('/api/dashboard')
return response.data
} catch (error) {
// Return mock data for now
return {
workflows: {
active: 5,
completed: 12,
failed: 1,
workflows: []
},
system: {
status: 'healthy',
services: [],
resources: { cpu: 45, memory: 68, disk: 32 }
},
metrics: {
performance: [],
success: []
},
activity: []
}
}
}
export const createWorkflow = async (data: any) => {
const response = await api.post('/api/workflows', data)
return response.data
}
export const getWorkflows = async () => {
const response = await api.get('/api/workflows')
return response.data
}
export const getWorkflow = async (id: string) => {
const response = await api.get(`/api/workflows/${id}`)
return response.data
}
export const updateWorkflow = async (id: string, data: any) => {
const response = await api.put(`/api/workflows/${id}`, data)
return response.data
}
export const deleteWorkflow = async (id: string) => {
const response = await api.delete(`/api/workflows/${id}`)
return response.data
}
export const runWorkflow = async (id: string) => {
const response = await api.post(`/api/workflows/${id}/run`)
return response.data
}
export const stopWorkflow = async (id: string) => {
const response = await api.post(`/api/workflows/${id}/stop`)
return response.data
}
export const getSystemHealth = async () => {
const response = await api.get('/api/system/health')
return response.data
}
export const getMetrics = async (timeRange: string = '24h') => {
const response = await api.get(`/api/metrics?range=${timeRange}`)
return response.data
}
export const getActivity = async (limit: number = 50) => {
const response = await api.get(`/api/activity?limit=${limit}`)
return response.data
}
export default api