mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-22 19:30:15 +01:00
WIP: appConfig fix: update memory configuration retrieval to use getAppConfig based on user role fix: update comment for AppConfig interface to clarify purpose
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
const { SystemRoles } = require('librechat-data-provider');
|
|
const { getAppConfig } = require('~/server/services/Config/getAppConfig');
|
|
const { getAssistant } = require('~/models/Assistant');
|
|
|
|
/**
|
|
* Checks if the assistant is supported or excluded
|
|
* @param {object} params
|
|
* @param {object} params.req - Express Request
|
|
* @param {object} params.req.body - The request payload.
|
|
* @param {string} params.overrideEndpoint - The override endpoint
|
|
* @param {string} params.overrideAssistantId - The override assistant ID
|
|
* @param {OpenAIClient} params.openai - OpenAI API Client
|
|
* @returns {Promise<void>}
|
|
*/
|
|
const validateAuthor = async ({ req, openai, overrideEndpoint, overrideAssistantId }) => {
|
|
if (req.user.role === SystemRoles.ADMIN) {
|
|
return;
|
|
}
|
|
|
|
const endpoint = overrideEndpoint ?? req.body.endpoint ?? req.query.endpoint;
|
|
const assistant_id =
|
|
overrideAssistantId ?? req.params.id ?? req.body.assistant_id ?? req.query.assistant_id;
|
|
|
|
const appConfig = await getAppConfig({ role: req.user?.role });
|
|
/** @type {Partial<TAssistantEndpoint>} */
|
|
const assistantsConfig = appConfig?.[endpoint];
|
|
if (!assistantsConfig) {
|
|
return;
|
|
}
|
|
|
|
if (!assistantsConfig.privateAssistants) {
|
|
return;
|
|
}
|
|
|
|
const assistantDoc = await getAssistant({ assistant_id, user: req.user.id });
|
|
if (assistantDoc) {
|
|
return;
|
|
}
|
|
const assistant = await openai.beta.assistants.retrieve(assistant_id);
|
|
if (req.user.id !== assistant?.metadata?.author) {
|
|
throw new Error(`Assistant ${assistant_id} is not authored by the user.`);
|
|
}
|
|
};
|
|
|
|
module.exports = validateAuthor;
|