|
|
const { AgentFlows } = require("../utils/agentFlows"); |
|
|
const { |
|
|
flexUserRoleValid, |
|
|
ROLES, |
|
|
} = require("../utils/middleware/multiUserProtected"); |
|
|
const { validatedRequest } = require("../utils/middleware/validatedRequest"); |
|
|
const { Telemetry } = require("../models/telemetry"); |
|
|
|
|
|
function agentFlowEndpoints(app) { |
|
|
if (!app) return; |
|
|
|
|
|
|
|
|
app.post( |
|
|
"/agent-flows/save", |
|
|
[validatedRequest, flexUserRoleValid([ROLES.admin])], |
|
|
async (request, response) => { |
|
|
try { |
|
|
const { name, config, uuid } = request.body; |
|
|
|
|
|
if (!name || !config) { |
|
|
return response.status(400).json({ |
|
|
success: false, |
|
|
error: "Name and config are required", |
|
|
}); |
|
|
} |
|
|
|
|
|
const flow = AgentFlows.saveFlow(name, config, uuid); |
|
|
if (!flow || !flow.success) |
|
|
return response |
|
|
.status(200) |
|
|
.json({ flow: null, error: flow.error || "Failed to save flow" }); |
|
|
|
|
|
if (!uuid) { |
|
|
await Telemetry.sendTelemetry("agent_flow_created", { |
|
|
blockCount: config.blocks?.length || 0, |
|
|
}); |
|
|
} |
|
|
|
|
|
return response.status(200).json({ |
|
|
success: true, |
|
|
flow, |
|
|
}); |
|
|
} catch (error) { |
|
|
console.error("Error saving flow:", error); |
|
|
return response.status(500).json({ |
|
|
success: false, |
|
|
error: error.message, |
|
|
}); |
|
|
} |
|
|
} |
|
|
); |
|
|
|
|
|
|
|
|
app.get( |
|
|
"/agent-flows/list", |
|
|
[validatedRequest, flexUserRoleValid([ROLES.admin])], |
|
|
async (_request, response) => { |
|
|
try { |
|
|
const flows = AgentFlows.listFlows(); |
|
|
return response.status(200).json({ |
|
|
success: true, |
|
|
flows, |
|
|
}); |
|
|
} catch (error) { |
|
|
console.error("Error listing flows:", error); |
|
|
return response.status(500).json({ |
|
|
success: false, |
|
|
error: error.message, |
|
|
}); |
|
|
} |
|
|
} |
|
|
); |
|
|
|
|
|
|
|
|
app.get( |
|
|
"/agent-flows/:uuid", |
|
|
[validatedRequest, flexUserRoleValid([ROLES.admin])], |
|
|
async (request, response) => { |
|
|
try { |
|
|
const { uuid } = request.params; |
|
|
const flow = AgentFlows.loadFlow(uuid); |
|
|
if (!flow) { |
|
|
return response.status(404).json({ |
|
|
success: false, |
|
|
error: "Flow not found", |
|
|
}); |
|
|
} |
|
|
|
|
|
return response.status(200).json({ |
|
|
success: true, |
|
|
flow, |
|
|
}); |
|
|
} catch (error) { |
|
|
console.error("Error getting flow:", error); |
|
|
return response.status(500).json({ |
|
|
success: false, |
|
|
error: error.message, |
|
|
}); |
|
|
} |
|
|
} |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.delete( |
|
|
"/agent-flows/:uuid", |
|
|
[validatedRequest, flexUserRoleValid([ROLES.admin])], |
|
|
async (request, response) => { |
|
|
try { |
|
|
const { uuid } = request.params; |
|
|
const { success } = AgentFlows.deleteFlow(uuid); |
|
|
|
|
|
if (!success) { |
|
|
return response.status(500).json({ |
|
|
success: false, |
|
|
error: "Failed to delete flow", |
|
|
}); |
|
|
} |
|
|
|
|
|
return response.status(200).json({ |
|
|
success, |
|
|
}); |
|
|
} catch (error) { |
|
|
console.error("Error deleting flow:", error); |
|
|
return response.status(500).json({ |
|
|
success: false, |
|
|
error: error.message, |
|
|
}); |
|
|
} |
|
|
} |
|
|
); |
|
|
|
|
|
|
|
|
app.post( |
|
|
"/agent-flows/:uuid/toggle", |
|
|
[validatedRequest, flexUserRoleValid([ROLES.admin])], |
|
|
async (request, response) => { |
|
|
try { |
|
|
const { uuid } = request.params; |
|
|
const { active } = request.body; |
|
|
|
|
|
const flow = AgentFlows.loadFlow(uuid); |
|
|
if (!flow) { |
|
|
return response |
|
|
.status(404) |
|
|
.json({ success: false, error: "Flow not found" }); |
|
|
} |
|
|
|
|
|
flow.config.active = active; |
|
|
const { success } = AgentFlows.saveFlow(flow.name, flow.config, uuid); |
|
|
|
|
|
if (!success) { |
|
|
return response |
|
|
.status(500) |
|
|
.json({ success: false, error: "Failed to update flow" }); |
|
|
} |
|
|
|
|
|
return response.json({ success: true, flow }); |
|
|
} catch (error) { |
|
|
console.error("Error toggling flow:", error); |
|
|
response.status(500).json({ success: false, error: error.message }); |
|
|
} |
|
|
} |
|
|
); |
|
|
} |
|
|
|
|
|
module.exports = { agentFlowEndpoints }; |
|
|
|