| 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 }; |
|
|