diff --git a/api/models/Project.js b/api/models/Project.js index e982e34b5d..32e44e9e07 100644 --- a/api/models/Project.js +++ b/api/models/Project.js @@ -1,6 +1,9 @@ const { model } = require('mongoose'); +const { Constants } = require('librechat-data-provider'); const projectSchema = require('~/models/schema/projectSchema'); +const { GLOBAL_PROJECT_NAME } = Constants; + const Project = model('Project', projectSchema); /** @@ -33,7 +36,7 @@ const getProjectByName = async function (projectName, fieldsToSelect = null) { const update = { $setOnInsert: { name: projectName } }; const options = { new: true, - upsert: projectName === 'instance', + upsert: projectName === GLOBAL_PROJECT_NAME, lean: true, select: fieldsToSelect, }; diff --git a/api/models/Prompt.js b/api/models/Prompt.js index 56dcd78570..8a54cdccc3 100644 --- a/api/models/Prompt.js +++ b/api/models/Prompt.js @@ -1,5 +1,5 @@ const { ObjectId } = require('mongodb'); -const { SystemRoles, SystemCategories } = require('librechat-data-provider'); +const { SystemRoles, SystemCategories, Constants } = require('librechat-data-provider'); const { getProjectByName, addGroupIdsToProject, @@ -9,6 +9,8 @@ const { const { Prompt, PromptGroup } = require('./schema/promptSchema'); const { logger } = require('~/config'); +const { GLOBAL_PROJECT_NAME } = Constants; + /** * Create a pipeline for the aggregation to get prompt groups * @param {Object} query @@ -123,7 +125,7 @@ const getAllPromptGroups = async (req, filter) => { let combinedQuery = query; if (searchShared) { - const project = await getProjectByName('instance', 'promptGroupIds'); + const project = await getProjectByName(GLOBAL_PROJECT_NAME, 'promptGroupIds'); if (project && project.promptGroupIds.length > 0) { const projectQuery = { _id: { $in: project.promptGroupIds }, ...query }; delete projectQuery.author; @@ -177,7 +179,7 @@ const getPromptGroups = async (req, filter) => { if (searchShared) { // const projects = req.user.projects || []; // TODO: handle multiple projects - const project = await getProjectByName('instance', 'promptGroupIds'); + const project = await getProjectByName(GLOBAL_PROJECT_NAME, 'promptGroupIds'); if (project && project.promptGroupIds.length > 0) { const projectQuery = { _id: { $in: project.promptGroupIds }, ...query }; delete projectQuery.author; diff --git a/api/server/routes/config.js b/api/server/routes/config.js index 3fc90c14bc..f61c64d95f 100644 --- a/api/server/routes/config.js +++ b/api/server/routes/config.js @@ -1,11 +1,13 @@ const express = require('express'); -const { CacheKeys, defaultSocialLogins } = require('librechat-data-provider'); +const { CacheKeys, defaultSocialLogins, Constants } = require('librechat-data-provider'); const { getLdapConfig } = require('~/server/services/Config/ldap'); const { getProjectByName } = require('~/models/Project'); const { isEnabled } = require('~/server/utils'); const { getLogStores } = require('~/cache'); const { logger } = require('~/config'); +const { GLOBAL_PROJECT_NAME } = Constants; + const router = express.Router(); const emailLoginEnabled = process.env.ALLOW_EMAIL_LOGIN === undefined || isEnabled(process.env.ALLOW_EMAIL_LOGIN); @@ -32,7 +34,7 @@ router.get('/', async function (req, res) { return today.getMonth() === 1 && today.getDate() === 11; }; - const instanceProject = await getProjectByName('instance', '_id'); + const instanceProject = await getProjectByName(GLOBAL_PROJECT_NAME, '_id'); const ldap = getLdapConfig(); diff --git a/api/server/routes/prompts.js b/api/server/routes/prompts.js index 5a6dcafcb6..54128d3b39 100644 --- a/api/server/routes/prompts.js +++ b/api/server/routes/prompts.js @@ -24,6 +24,7 @@ const checkPromptCreate = generateCheckAccess(PermissionTypes.PROMPTS, [ Permissions.USE, Permissions.CREATE, ]); + const checkGlobalPromptShare = generateCheckAccess( PermissionTypes.PROMPTS, [Permissions.USE, Permissions.CREATE], diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index b6c2c0a03f..40a98a7679 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -1037,6 +1037,8 @@ export enum Constants { SAVED_TAG = 'Saved', /** Max number of Conversation starters for Agents/Assistants */ MAX_CONVO_STARTERS = 4, + /** Global/instance Project Name */ + GLOBAL_PROJECT_NAME = 'instance', } export enum LocalStorageKeys {