240 lines
6.8 KiB
JavaScript
240 lines
6.8 KiB
JavaScript
/**
|
|
* API utility for communicating with the Go backend
|
|
*/
|
|
import { API_CONFIG } from './config';
|
|
|
|
// Helper function for handling API responses
|
|
const handleResponse = async (response) => {
|
|
if (!response.ok) {
|
|
const errorData = await response.json().catch(() => ({}));
|
|
throw new Error(errorData.error || `API error: ${response.status}`);
|
|
}
|
|
|
|
// Check if response is JSON
|
|
const contentType = response.headers.get('content-type');
|
|
if (contentType && contentType.includes('application/json')) {
|
|
return response.json();
|
|
}
|
|
|
|
return response.text();
|
|
};
|
|
|
|
// Helper function to build a full URL
|
|
const buildUrl = (endpoint) => {
|
|
return `${API_CONFIG.baseUrl}${endpoint.startsWith('/') ? endpoint.substring(1) : endpoint}`;
|
|
};
|
|
|
|
// Agent-related API calls
|
|
export const agentApi = {
|
|
// Get list of all agents
|
|
getAgents: async () => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.agents), {
|
|
headers: API_CONFIG.headers
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Get a specific agent's configuration
|
|
getAgentConfig: async (name) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.agentConfig(name)), {
|
|
headers: API_CONFIG.headers
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Get agent configuration metadata
|
|
getAgentConfigMetadata: async () => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.agentConfigMetadata), {
|
|
headers: API_CONFIG.headers
|
|
});
|
|
const metadata = await handleResponse(response);
|
|
|
|
// Process metadata to group by section
|
|
if (metadata) {
|
|
const groupedMetadata = {};
|
|
|
|
// Handle Fields - Group by section
|
|
if (metadata.Fields) {
|
|
metadata.Fields.forEach(field => {
|
|
const section = field.tags?.section || 'Other';
|
|
const sectionKey = `${section}Section`; // Add "Section" postfix
|
|
|
|
if (!groupedMetadata[sectionKey]) {
|
|
groupedMetadata[sectionKey] = [];
|
|
}
|
|
|
|
groupedMetadata[sectionKey].push(field);
|
|
});
|
|
}
|
|
|
|
// Pass through connectors and actions field groups directly
|
|
// Make sure to assign the correct metadata to each section
|
|
if (metadata.Connectors) {
|
|
groupedMetadata.connectors = metadata.Connectors;
|
|
}
|
|
|
|
if (metadata.Actions) {
|
|
groupedMetadata.actions = metadata.Actions;
|
|
}
|
|
groupedMetadata.dynamicPrompts = metadata.DynamicPrompts;
|
|
|
|
return groupedMetadata;
|
|
}
|
|
|
|
return metadata;
|
|
},
|
|
|
|
// Create a new agent
|
|
createAgent: async (config) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.createAgent), {
|
|
method: 'POST',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify(config),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Update an existing agent's configuration
|
|
updateAgentConfig: async (name, config) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.agentConfig(name)), {
|
|
method: 'PUT',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify(config),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Delete an agent
|
|
deleteAgent: async (name) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.deleteAgent(name)), {
|
|
method: 'DELETE',
|
|
headers: API_CONFIG.headers,
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Pause an agent
|
|
pauseAgent: async (name) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.pauseAgent(name)), {
|
|
method: 'PUT',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify({}),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Start an agent
|
|
startAgent: async (name) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.startAgent(name)), {
|
|
method: 'PUT',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify({}),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Export agent configuration
|
|
exportAgentConfig: async (name) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.exportAgent(name)), {
|
|
headers: API_CONFIG.headers
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Import agent configuration
|
|
importAgent: async (formData) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.importAgent), {
|
|
method: 'POST',
|
|
body: formData,
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Generate group profiles
|
|
generateGroupProfiles: async (data) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.generateGroupProfiles), {
|
|
method: 'POST',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify(data),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Create a group of agents
|
|
createGroup: async (data) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.createGroup), {
|
|
method: 'POST',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify(data),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
};
|
|
|
|
// Chat-related API calls
|
|
export const chatApi = {
|
|
// Send a message to an agent using the JSON-based API
|
|
sendMessage: async (name, message) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.chat(name)), {
|
|
method: 'POST',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify({ message }),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Send a notification to an agent
|
|
sendNotification: async (name, message) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.notify(name)), {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
},
|
|
body: new URLSearchParams({ message }),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Get responses from an agent
|
|
getResponses: async (data) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.responses), {
|
|
method: 'POST',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify(data),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
};
|
|
|
|
// Action-related API calls
|
|
export const actionApi = {
|
|
// List available actions
|
|
listActions: async () => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.listActions), {
|
|
headers: API_CONFIG.headers
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
|
|
// Execute an action for an agent
|
|
executeAction: async (name, actionData) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.executeAction(name)), {
|
|
method: 'POST',
|
|
headers: API_CONFIG.headers,
|
|
body: JSON.stringify(actionData),
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
};
|
|
|
|
// Status-related API calls
|
|
export const statusApi = {
|
|
// Get agent status history
|
|
getStatusHistory: async (name) => {
|
|
const response = await fetch(buildUrl(API_CONFIG.endpoints.status(name)), {
|
|
headers: API_CONFIG.headers
|
|
});
|
|
return handleResponse(response);
|
|
},
|
|
};
|