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; // Save a flow configuration 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) { return response.status(500).json({ success: false, 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, }); } } ); // List all available flows 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, }); } } ); // Get a specific flow by UUID 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, }); } } ); // Run a specific flow // app.post( // "/agent-flows/:uuid/run", // [validatedRequest, flexUserRoleValid([ROLES.admin])], // async (request, response) => { // try { // const { uuid } = request.params; // const { variables = {} } = request.body; // // TODO: Implement flow execution // console.log("Running flow with UUID:", uuid); // await Telemetry.sendTelemetry("agent_flow_executed", { // variableCount: Object.keys(variables).length, // }); // return response.status(200).json({ // success: true, // results: { // success: true, // results: "test", // variables: variables, // }, // }); // } catch (error) { // console.error("Error running flow:", error); // return response.status(500).json({ // success: false, // error: error.message, // }); // } // } // ); // Delete a specific flow 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, }); } } ); // Toggle flow active status 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 };