fix: circular dependency of ~/models

This commit is contained in:
Danny Avila 2026-03-11 13:17:04 -04:00
parent 10bcf4702f
commit fb0ca3eee7
No known key found for this signature in database
GPG key ID: BF31EEB2C5CA0956
8 changed files with 19 additions and 17 deletions

View file

@ -8,8 +8,8 @@ const {
initializeClient: initAzureClient,
} = require('~/server/services/Endpoints/azureAssistants');
const { initializeClient } = require('~/server/services/Endpoints/assistants');
const { hasCapability } = require('~/server/middleware/roles/capabilities');
const { getEndpointsConfig } = require('~/server/services/Config');
const { hasCapability } = require('~/server/middleware');
/**
* @param {ServerRequest} req

View file

@ -1,5 +1,5 @@
const { logger, SystemCapabilities } = require('@librechat/data-schemas');
const { hasCapability } = require('~/server/middleware');
const { hasCapability } = require('~/server/middleware/roles/capabilities');
const { getAssistant } = require('~/models');
/**

View file

@ -1,15 +1,17 @@
const {
hasCapability,
requireCapability,
hasConfigCapability,
capabilityContextMiddleware,
} = require('./capabilities');
/**
* NOTE: hasCapability, requireCapability, hasConfigCapability, and
* capabilityContextMiddleware are intentionally NOT re-exported here.
*
* capabilities.js depends on ~/models, and the middleware barrel
* (middleware/index.js) is frequently required by modules that are
* themselves loaded while the barrel is still initialising creating
* a circular-require that silently returns an empty exports object.
*
* Always import capability helpers directly:
* require('~/server/middleware/roles/capabilities')
*/
const checkAdmin = require('./admin');
module.exports = {
checkAdmin,
hasCapability,
requireCapability,
hasConfigCapability,
capabilityContextMiddleware,
};

View file

@ -6,10 +6,10 @@ const { CacheKeys } = require('librechat-data-provider');
const { SystemCapabilities } = require('@librechat/data-schemas');
const { getAdminPanelUrl, exchangeAdminCode, createSetBalanceConfig } = require('@librechat/api');
const { loginController } = require('~/server/controllers/auth/LoginController');
const { requireCapability } = require('~/server/middleware/roles/capabilities');
const { createOAuthHandler } = require('~/server/controllers/auth/oauth');
const { findBalanceByUser, upsertBalanceFields } = require('~/models');
const { getAppConfig } = require('~/server/services/Config');
const { requireCapability } = require('~/server/middleware');
const getLogStores = require('~/cache/getLogStores');
const { getOpenIdConfig } = require('~/strategies');
const middleware = require('~/server/middleware');

View file

@ -24,11 +24,11 @@ const {
const { fileAccess } = require('~/server/middleware/accessResources/fileAccess');
const { getStrategyFunctions } = require('~/server/services/Files/strategies');
const { getOpenAIClient } = require('~/server/controllers/assistants/helpers');
const { hasCapability } = require('~/server/middleware/roles/capabilities');
const { checkPermission } = require('~/server/services/PermissionService');
const { loadAuthValues } = require('~/server/services/Tools/credentials');
const { hasAccessToFilesViaAgent } = require('~/server/services/Files');
const { cleanFileName } = require('~/server/utils/files');
const { hasCapability } = require('~/server/middleware');
const { getLogStores } = require('~/cache');
const { Readable } = require('stream');
const db = require('~/models');

View file

@ -32,7 +32,6 @@ const {
getPrompt,
} = require('~/models');
const {
hasCapability,
canAccessPromptGroupResource,
canAccessPromptViaGroup,
requireJwtAuth,
@ -43,6 +42,7 @@ const {
findAccessibleResources,
grantPermission,
} = require('~/server/services/PermissionService');
const { hasCapability } = require('~/server/middleware/roles/capabilities');
const router = express.Router();

View file

@ -36,7 +36,6 @@ jest.mock('~/models', () => {
jest.mock('~/server/middleware', () => ({
requireJwtAuth: (req, res, next) => next(),
hasCapability: jest.requireActual('~/server/middleware').hasCapability,
canAccessPromptViaGroup: jest.requireActual('~/server/middleware').canAccessPromptViaGroup,
canAccessPromptGroupResource:
jest.requireActual('~/server/middleware').canAccessPromptGroupResource,

View file

@ -12,8 +12,9 @@ const {
peoplePickerPermissionsSchema,
remoteAgentsPermissionsSchema,
} = require('librechat-data-provider');
const { hasCapability, requireCapability, requireJwtAuth } = require('~/server/middleware');
const { hasCapability, requireCapability } = require('~/server/middleware/roles/capabilities');
const { updateRoleByName, getRoleByName } = require('~/models');
const { requireJwtAuth } = require('~/server/middleware');
const router = express.Router();
router.use(requireJwtAuth);