const { EmbedChats } = require("../models/embedChats"); const { EmbedConfig } = require("../models/embedConfig"); const { EventLogs } = require("../models/eventLogs"); const { reqBody, userFromSession } = require("../utils/http"); const { validEmbedConfigId } = require("../utils/middleware/embedMiddleware"); const { flexUserRoleValid, ROLES, } = require("../utils/middleware/multiUserProtected"); const { validatedRequest } = require("../utils/middleware/validatedRequest"); const { chatHistoryViewable, } = require("../utils/middleware/chatHistoryViewable"); function embedManagementEndpoints(app) { if (!app) return; app.get( "/embeds", [validatedRequest, flexUserRoleValid([ROLES.admin])], async (_, response) => { try { const embeds = await EmbedConfig.whereWithWorkspace({}, null, { createdAt: "desc", }); response.status(200).json({ embeds }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); app.post( "/embeds/new", [validatedRequest, flexUserRoleValid([ROLES.admin])], async (request, response) => { try { const user = await userFromSession(request, response); const data = reqBody(request); const { embed, message: error } = await EmbedConfig.new(data, user?.id); await EventLogs.logEvent( "embed_created", { embedId: embed.id }, user?.id ); response.status(200).json({ embed, error }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); app.post( "/embed/update/:embedId", [validatedRequest, flexUserRoleValid([ROLES.admin]), validEmbedConfigId], async (request, response) => { try { const user = await userFromSession(request, response); const { embedId } = request.params; const updates = reqBody(request); const { success, error } = await EmbedConfig.update(embedId, updates); await EventLogs.logEvent("embed_updated", { embedId }, user?.id); response.status(200).json({ success, error }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); app.delete( "/embed/:embedId", [validatedRequest, flexUserRoleValid([ROLES.admin]), validEmbedConfigId], async (request, response) => { try { const { embedId } = request.params; await EmbedConfig.delete({ id: Number(embedId) }); await EventLogs.logEvent( "embed_deleted", { embedId }, response?.locals?.user?.id ); response.status(200).json({ success: true, error: null }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); app.post( "/embed/chats", [chatHistoryViewable, validatedRequest, flexUserRoleValid([ROLES.admin])], async (request, response) => { try { const { offset = 0, limit = 20 } = reqBody(request); const embedChats = await EmbedChats.whereWithEmbedAndWorkspace( {}, limit, { id: "desc" }, offset * limit ); const totalChats = await EmbedChats.count(); const hasPages = totalChats > (offset + 1) * limit; response.status(200).json({ chats: embedChats, hasPages, totalChats }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); app.delete( "/embed/chats/:chatId", [validatedRequest, flexUserRoleValid([ROLES.admin])], async (request, response) => { try { const { chatId } = request.params; await EmbedChats.delete({ id: Number(chatId) }); response.status(200).json({ success: true, error: null }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); } module.exports = { embedManagementEndpoints };