diff --git a/api/cache/banViolation.js b/api/cache/banViolation.js index 7072dae968..17b23f1c12 100644 --- a/api/cache/banViolation.js +++ b/api/cache/banViolation.js @@ -1,8 +1,8 @@ +const { logger } = require('@librechat/data-schemas'); const { ViolationTypes } = require('librechat-data-provider'); -const { deleteAllUserSessions } = require('@librechat/data-schemas'); const { isEnabled, math, removePorts } = require('~/server/utils'); +const { deleteAllUserSessions } = require('~/models'); const getLogStores = require('./getLogStores'); -const { logger } = require('~/config'); const { BAN_VIOLATIONS, BAN_INTERVAL } = process.env ?? {}; const interval = math(BAN_INTERVAL, 20); diff --git a/api/lib/db/indexSync.js b/api/lib/db/indexSync.js index 7a22d907da..285912ade5 100644 --- a/api/lib/db/indexSync.js +++ b/api/lib/db/indexSync.js @@ -1,6 +1,10 @@ +const mongoose = require('mongoose'); const { MeiliSearch } = require('meilisearch'); -const { Message, Conversation, logger } = require('@librechat/data-schemas'); const { isEnabled } = require('~/server/utils'); +const { logger } = require('@librechat/data-schemas'); + +const Conversation = mongoose.models.Conversation; +const Message = mongoose.models.Message; const searchEnabled = isEnabled(process.env.SEARCH); const indexingDisabled = isEnabled(process.env.MEILI_NO_SYNC); diff --git a/api/models/Action.js b/api/models/Action.js index 677b4d78df..4de66bdfa3 100644 --- a/api/models/Action.js +++ b/api/models/Action.js @@ -1,7 +1,5 @@ const mongoose = require('mongoose'); -const { actionSchema } = require('@librechat/data-schemas'); - -const Action = mongoose.model('action', actionSchema); +const Action = mongoose.models.Action; /** * Update an action with new data without overwriting existing properties, diff --git a/api/models/Agent.js b/api/models/Agent.js index 013c1b4210..358e3d855b 100644 --- a/api/models/Agent.js +++ b/api/models/Agent.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); const crypto = require('node:crypto'); -const { Agent } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { SystemRoles, Tools, actionDelimiter } = require('librechat-data-provider'); const { GLOBAL_PROJECT_NAME, EPHEMERAL_AGENT_ID, mcp_delimiter } = require('librechat-data-provider').Constants; @@ -13,7 +13,8 @@ const { } = require('./Project'); const getLogStores = require('~/cache/getLogStores'); const { getActions } = require('./Action'); -const { logger } = require('~/config'); + +const Agent = mongoose.models.Agent; /** * Create an agent with the provided data. diff --git a/api/models/Agent.spec.js b/api/models/Agent.spec.js index b935d506d3..d9a2e5c0e5 100644 --- a/api/models/Agent.spec.js +++ b/api/models/Agent.spec.js @@ -8,19 +8,21 @@ process.env.CREDS_IV = '0123456789abcdef'; const mongoose = require('mongoose'); const { v4: uuidv4 } = require('uuid'); -const { Agent } = require('@librechat/data-schemas'); + const { MongoMemoryServer } = require('mongodb-memory-server'); const { - addAgentResourceFile, - removeAgentResourceFiles, - createAgent, - updateAgent, getAgent, + updateAgent, deleteAgent, + createAgent, getListAgents, updateAgentProjects, + addAgentResourceFile, + removeAgentResourceFiles, } = require('./Agent'); +const Agent = mongoose.models.Agent; + describe('Agent Resource File Operations', () => { let mongoServer; diff --git a/api/models/Assistant.js b/api/models/Assistant.js index 99282171bf..e69bc714fc 100644 --- a/api/models/Assistant.js +++ b/api/models/Assistant.js @@ -1,4 +1,5 @@ -const { Assistant } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const Assistant = mongoose.models.Assistant; /** * Update an assistant with new data without overwriting existing properties, diff --git a/api/models/Banner.js b/api/models/Banner.js index 4345abc4fe..c7f4a1d2b8 100644 --- a/api/models/Banner.js +++ b/api/models/Banner.js @@ -1,4 +1,7 @@ -const { Banner, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); + +const Banner = mongoose.models.Banner; /** * Retrieves the current active banner. diff --git a/api/models/Conversation.js b/api/models/Conversation.js index 219c7c6c92..5cbd2a9bdb 100644 --- a/api/models/Conversation.js +++ b/api/models/Conversation.js @@ -1,5 +1,9 @@ -const { Conversation, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { getMessages, deleteMessages } = require('./Message'); + +const Conversation = mongoose.models.Conversation; + /** * Searches for a conversation by conversationId and returns a lean document with only conversationId and user. * @param {string} conversationId - The conversation's ID. diff --git a/api/models/ConversationTag.js b/api/models/ConversationTag.js index ffee78b1af..985367689a 100644 --- a/api/models/ConversationTag.js +++ b/api/models/ConversationTag.js @@ -1,4 +1,8 @@ -const { ConversationTag, Conversation, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); + +const ConversationTag = mongoose.models.ConversationTag; +const Conversation = mongoose.models.Conversation; /** * Retrieves all conversation tags for a user. diff --git a/api/models/File.js b/api/models/File.js index 52177d287e..354feb79e5 100644 --- a/api/models/File.js +++ b/api/models/File.js @@ -1,7 +1,8 @@ const mongoose = require('mongoose'); -const { File } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { EToolResources } = require('librechat-data-provider'); -const { logger } = require('~/config'); + +const File = mongoose.models.File; /** * Finds a file by its file_id with additional query options. diff --git a/api/models/Message.js b/api/models/Message.js index c4d2102618..28bdf56d4f 100644 --- a/api/models/Message.js +++ b/api/models/Message.js @@ -1,5 +1,8 @@ const { z } = require('zod'); -const { Message, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); + +const Message = mongoose.models.Message; const idSchema = z.string().uuid(); /** diff --git a/api/models/Preset.js b/api/models/Preset.js index 731675bfb5..eda3feddf0 100644 --- a/api/models/Preset.js +++ b/api/models/Preset.js @@ -1,4 +1,7 @@ -const { Preset, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); + +const Preset = mongoose.models.Preset; const getPreset = async (user, presetId) => { try { diff --git a/api/models/Project.js b/api/models/Project.js index 51c5286a0b..313e165b48 100644 --- a/api/models/Project.js +++ b/api/models/Project.js @@ -1,6 +1,8 @@ -const { Project } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); const { GLOBAL_PROJECT_NAME } = require('librechat-data-provider').Constants; +const Project = mongoose.models.Project; + /** * Retrieve a project by ID and convert the found project document to a plain object. * diff --git a/api/models/Prompt.js b/api/models/Prompt.js index 68c91d880b..c6807ba3ef 100644 --- a/api/models/Prompt.js +++ b/api/models/Prompt.js @@ -1,5 +1,6 @@ +const mongoose = require('mongoose'); const { ObjectId } = require('mongodb'); -const { Prompt, PromptGroup, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { SystemRoles, SystemCategories, Constants } = require('librechat-data-provider'); const { getProjectByName, @@ -9,6 +10,9 @@ const { } = require('./Project'); const { escapeRegExp } = require('~/server/utils'); +const PromptGroup = mongoose.models.PromptGroup; +const Prompt = mongoose.models.Prompt; + /** * Create a pipeline for the aggregation to get prompt groups * @param {Object} query diff --git a/api/models/Role.js b/api/models/Role.js index f91d6fafb2..0532fcca4a 100644 --- a/api/models/Role.js +++ b/api/models/Role.js @@ -6,9 +6,12 @@ const { permissionsSchema, removeNullishValues, } = require('librechat-data-provider'); -const { Role, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const getLogStores = require('~/cache/getLogStores'); +const Role = mongoose.models.Role; + /** * Retrieve a role by name and convert the found role document to a plain object. * If the role with the given name doesn't exist and the name is a system defined role, diff --git a/api/models/Role.spec.js b/api/models/Role.spec.js index 736ca881c8..201834ea93 100644 --- a/api/models/Role.spec.js +++ b/api/models/Role.spec.js @@ -1,5 +1,4 @@ const mongoose = require('mongoose'); -const { Role, logger } = require('@librechat/data-schemas'); const { MongoMemoryServer } = require('mongodb-memory-server'); const { SystemRoles, @@ -10,6 +9,8 @@ const { const { getRoleByName, updateAccessPermissions, initializeRoles } = require('~/models/Role'); const getLogStores = require('~/cache/getLogStores'); +const Role = mongoose.models.Role; + // Mock the cache jest.mock('~/cache/getLogStores', () => jest.fn().mockReturnValue({ diff --git a/api/models/Share.js b/api/models/Share.js index fe03fc60f1..1f50c7ce90 100644 --- a/api/models/Share.js +++ b/api/models/Share.js @@ -1,8 +1,12 @@ const { nanoid } = require('nanoid'); +const mongoose = require('mongoose'); const { Constants } = require('librechat-data-provider'); -const { SharedLink, Conversation, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { getMessages } = require('./Message'); +const Conversation = mongoose.models.Conversation; +const SharedLink = mongoose.models.SharedLink; + class ShareServiceError extends Error { constructor(message, code) { super(message); diff --git a/api/models/Token.js b/api/models/Token.js index e5a2332d6b..b64ae984eb 100644 --- a/api/models/Token.js +++ b/api/models/Token.js @@ -1,6 +1,8 @@ -const { Token } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); const { encryptV2 } = require('~/server/utils/crypto'); +const Token = mongoose.models.Token; + /** * Handles the OAuth token by creating or updating the token. * @param {object} fields diff --git a/api/models/ToolCall.js b/api/models/ToolCall.js index a587767e9c..cce4c6e6a0 100644 --- a/api/models/ToolCall.js +++ b/api/models/ToolCall.js @@ -1,4 +1,7 @@ -const { ToolCall } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); + +const ToolCall = mongoose.models.ToolCall; + /** * Create a new tool call * @param {IToolCallData} toolCallData - The tool call data diff --git a/api/models/Transaction.js b/api/models/Transaction.js index 3a955071c6..9a71de14e0 100644 --- a/api/models/Transaction.js +++ b/api/models/Transaction.js @@ -1,8 +1,11 @@ const mongoose = require('mongoose'); -const { Balance, Transaction, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { getBalanceConfig } = require('~/server/services/Config'); const { getMultiplier, getCacheMultiplier } = require('./tx'); +const Transaction = mongoose.models.Transaction; +const Balance = mongoose.models.Balance; + const cancelRate = 1.15; /** diff --git a/api/models/Transaction.spec.js b/api/models/Transaction.spec.js index ab19b4179d..58bfbece0c 100644 --- a/api/models/Transaction.spec.js +++ b/api/models/Transaction.spec.js @@ -1,10 +1,10 @@ const mongoose = require('mongoose'); -const { Balance } = require('@librechat/data-schemas'); const { MongoMemoryServer } = require('mongodb-memory-server'); const { spendTokens, spendStructuredTokens } = require('./spendTokens'); const { getBalanceConfig } = require('~/server/services/Config'); const { getMultiplier, getCacheMultiplier } = require('./tx'); const { createTransaction } = require('./Transaction'); +const Balance = mongoose.models.Balance; // Mock the custom config module so we can control the balance flag. jest.mock('~/server/services/Config'); diff --git a/api/models/balanceMethods.js b/api/models/balanceMethods.js index ec82c35bf6..b911c1ab19 100644 --- a/api/models/balanceMethods.js +++ b/api/models/balanceMethods.js @@ -1,9 +1,11 @@ -const { Balance } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { ViolationTypes } = require('librechat-data-provider'); const { createAutoRefillTransaction } = require('./Transaction'); const { logViolation } = require('~/cache'); const { getMultiplier } = require('./tx'); -const { logger } = require('~/config'); + +const Balance = mongoose.models.Balance; function isInvalidDate(date) { return isNaN(date); diff --git a/api/models/convoStructure.spec.js b/api/models/convoStructure.spec.js index e78f9ce84d..6d660f9176 100644 --- a/api/models/convoStructure.spec.js +++ b/api/models/convoStructure.spec.js @@ -1,8 +1,9 @@ const mongoose = require('mongoose'); -const { Message } = require('@librechat/data-schemas'); const { MongoMemoryServer } = require('mongodb-memory-server'); const { getMessages, bulkSaveMessages } = require('./Message'); +const Message = mongoose.models.Message; + // Original version of buildTree function function buildTree({ messages, fileMap }) { if (messages === null) { diff --git a/api/models/index.js b/api/models/index.js index 5896b1634f..2e33611655 100644 --- a/api/models/index.js +++ b/api/models/index.js @@ -1,3 +1,7 @@ +const mongoose = require('mongoose'); +const { createModels, createMethods } = require('@librechat/data-schemas'); +createModels(mongoose); +const methods = createMethods(mongoose); const { comparePassword } = require('./userMethods'); const { findFileById, @@ -21,6 +25,7 @@ const { getConvoTitle, getConvo, saveConvo, deleteConvos } = require('./Conversa const { getPreset, getPresets, savePreset, deletePresets } = require('./Preset'); module.exports = { + ...methods, comparePassword, findFileById, createFile, diff --git a/api/models/inviteUser.js b/api/models/inviteUser.js index b8b4792339..d2e452737a 100644 --- a/api/models/inviteUser.js +++ b/api/models/inviteUser.js @@ -1,7 +1,9 @@ const mongoose = require('mongoose'); -const { Token, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { getRandomValues, hashToken } = require('~/server/utils/crypto'); +const Token = mongoose.models.Token; + /** * @module inviteUser * @description This module provides functions to create and get user invites diff --git a/api/models/spendTokens.spec.js b/api/models/spendTokens.spec.js index 7c9d804e25..2f31813597 100644 --- a/api/models/spendTokens.spec.js +++ b/api/models/spendTokens.spec.js @@ -1,8 +1,9 @@ const mongoose = require('mongoose'); const { MongoMemoryServer } = require('mongodb-memory-server'); -const { Transaction, Balance } = require('@librechat/data-schemas'); const { spendTokens, spendStructuredTokens } = require('./spendTokens'); const { createTransaction, createAutoRefillTransaction } = require('./Transaction'); +const Transaction = mongoose.models.Transaction; +const Balance = mongoose.models.Balance; // Mock the logger to prevent console output during tests jest.mock('~/config', () => ({ diff --git a/api/server/controllers/AuthController.js b/api/server/controllers/AuthController.js index 47db8d13a1..f6c96f7a40 100644 --- a/api/server/controllers/AuthController.js +++ b/api/server/controllers/AuthController.js @@ -1,7 +1,8 @@ const cookies = require('cookie'); const jwt = require('jsonwebtoken'); +const mongoose = require('mongoose'); const openIdClient = require('openid-client'); -const { User, Session, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { registerUser, resetPassword, @@ -12,6 +13,9 @@ const { const { getOpenIdConfig } = require('~/strategies'); const { isEnabled } = require('~/server/utils'); +const Session = mongoose.models.Session; +const User = mongoose.models.User; + const registrationController = async (req, res) => { try { const response = await registerUser(req.body); diff --git a/api/server/controllers/Balance.js b/api/server/controllers/Balance.js index 7a96f1d657..bc1b9addda 100644 --- a/api/server/controllers/Balance.js +++ b/api/server/controllers/Balance.js @@ -1,4 +1,7 @@ -const { Balance } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); + +const Balance = mongoose.models.Balance; + async function balanceController(req, res) { const balanceData = await Balance.findOne( { user: req.user.id }, diff --git a/api/server/controllers/TwoFactorController.js b/api/server/controllers/TwoFactorController.js index 1ca6bd70b5..12849d3b58 100644 --- a/api/server/controllers/TwoFactorController.js +++ b/api/server/controllers/TwoFactorController.js @@ -1,4 +1,5 @@ -const { User, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { generateTOTPSecret, generateBackupCodes, @@ -9,6 +10,8 @@ const { const { encryptV3 } = require('~/server/utils/crypto'); const safeAppTitle = (process.env.APP_TITLE || 'LibreChat').replace(/\s+/g, ''); +const User = mongoose.models.User; + /** * Enable 2FA for the user by generating a new TOTP secret and backup codes. * The secret is encrypted and stored, and 2FA is marked as disabled until confirmed. diff --git a/api/server/controllers/UserController.js b/api/server/controllers/UserController.js index c49b4b944a..ecc7021ba5 100644 --- a/api/server/controllers/UserController.js +++ b/api/server/controllers/UserController.js @@ -4,7 +4,8 @@ const { webSearchKeys, extractWebSearchEnvVars, } = require('librechat-data-provider'); -const { User, Session, Transaction, Balance, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { getFiles, deleteFiles, deleteConvos, deletePresets, deleteMessages } = require('~/models'); const { updateUserPluginAuth, deleteUserPluginAuth } = require('~/server/services/PluginService'); const { updateUserPluginsService, deleteUserKey } = require('~/server/services/UserService'); @@ -14,6 +15,11 @@ const { processDeleteRequest } = require('~/server/services/Files/process'); const { deleteAllSharedLinks } = require('~/models/Share'); const { deleteToolCalls } = require('~/models/ToolCall'); +const Transaction = mongoose.models.Transaction; +const Session = mongoose.models.Session; +const Balance = mongoose.models.Balance; +const User = mongoose.models.User; + const getUserController = async (req, res) => { /** @type {MongoUser} */ const userData = req.user.toObject != null ? req.user.toObject() : { ...req.user }; diff --git a/api/server/controllers/auth/TwoFactorAuthController.js b/api/server/controllers/auth/TwoFactorAuthController.js index ae7bf870c8..1f6bfb6d25 100644 --- a/api/server/controllers/auth/TwoFactorAuthController.js +++ b/api/server/controllers/auth/TwoFactorAuthController.js @@ -1,11 +1,14 @@ const jwt = require('jsonwebtoken'); +const mongoose = require('mongoose'); const { verifyTOTP, verifyBackupCode, getTOTPSecret, } = require('~/server/services/twoFactorService'); const { setAuthTokens } = require('~/server/services/AuthService'); -const { User, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); + +const User = mongoose.models.User; /** * Verifies the 2FA code during login using a temporary token. diff --git a/api/server/middleware/checkBan.js b/api/server/middleware/checkBan.js index 8741075597..7797f68693 100644 --- a/api/server/middleware/checkBan.js +++ b/api/server/middleware/checkBan.js @@ -1,11 +1,14 @@ const { Keyv } = require('keyv'); const uap = require('ua-parser-js'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { ViolationTypes } = require('librechat-data-provider'); const { isEnabled, removePorts } = require('~/server/utils'); const keyvMongo = require('~/cache/keyvMongo'); const denyRequest = require('./denyRequest'); const { getLogStores } = require('~/cache'); -const { User, logger } = require('@librechat/data-schemas'); + +const User = mongoose.models.User; const banCache = new Keyv({ store: keyvMongo, namespace: ViolationTypes.BAN, ttl: 0 }); const message = 'Your account has been temporarily banned due to violations of our service.'; diff --git a/api/server/middleware/checkInviteUser.js b/api/server/middleware/checkInviteUser.js index 1174fc2ed8..42e1faba5b 100644 --- a/api/server/middleware/checkInviteUser.js +++ b/api/server/middleware/checkInviteUser.js @@ -1,5 +1,5 @@ -const { deleteTokens } = require('@librechat/data-schemas'); const { getInvite } = require('~/models/inviteUser'); +const { deleteTokens } = require('~/models'); async function checkInviteUser(req, res, next) { const token = req.body.token; diff --git a/api/server/middleware/setBalanceConfig.js b/api/server/middleware/setBalanceConfig.js index 1b1cd79f39..ec7f9ce6dc 100644 --- a/api/server/middleware/setBalanceConfig.js +++ b/api/server/middleware/setBalanceConfig.js @@ -1,6 +1,9 @@ -const { Balance, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { getBalanceConfig } = require('~/server/services/Config'); +const Balance = mongoose.models.Balance; + /** * Middleware to synchronize user balance settings with current balance configuration. * @function diff --git a/api/server/routes/messages.js b/api/server/routes/messages.js index 08fd273a02..47f3e2ef65 100644 --- a/api/server/routes/messages.js +++ b/api/server/routes/messages.js @@ -1,6 +1,7 @@ const express = require('express'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { ContentTypes } = require('librechat-data-provider'); -const { Message, logger } = require('@librechat/data-schemas'); const { saveConvo, saveMessage, @@ -15,6 +16,8 @@ const { cleanUpPrimaryKeyValue } = require('~/lib/utils/misc'); const { getConvosQueried } = require('~/models/Conversation'); const { countTokens } = require('~/server/utils'); +const Message = mongoose.models.Message; + const router = express.Router(); router.use(requireJwtAuth); diff --git a/api/server/services/ActionService.js b/api/server/services/ActionService.js index e9ff02f5b7..a35c74ad74 100644 --- a/api/server/services/ActionService.js +++ b/api/server/services/ActionService.js @@ -1,7 +1,6 @@ const jwt = require('jsonwebtoken'); const { nanoid } = require('nanoid'); const { tool } = require('@langchain/core/tools'); -const { findToken } = require('@librechat/data-schemas'); const { GraphEvents, sleep } = require('@librechat/agents'); const { Time, @@ -20,7 +19,7 @@ const { getActions, deleteActions } = require('~/models/Action'); const { deleteAssistant } = require('~/models/Assistant'); const { logAxiosError } = require('~/utils'); const { getLogStores } = require('~/cache'); -const db = require('~/lib/db/connectDb'); +const { findToken } = require('~/models'); const JWT_SECRET = process.env.JWT_SECRET; const toolNameRegex = /^[a-zA-Z0-9_-]+$/; diff --git a/api/server/services/AuthService.js b/api/server/services/AuthService.js index 0caf8c893d..11b37ac886 100644 --- a/api/server/services/AuthService.js +++ b/api/server/services/AuthService.js @@ -1,5 +1,6 @@ const bcrypt = require('bcryptjs'); const { webcrypto } = require('node:crypto'); +const { SystemRoles, errorsToString } = require('librechat-data-provider'); const { findUser, createUser, @@ -15,8 +16,7 @@ const { generateToken, deleteUserById, generateRefreshToken, -} = require('@librechat/data-schemas'); -const { SystemRoles, errorsToString } = require('librechat-data-provider'); +} = require('~/models'); const { isEnabled, checkEmailConfig, sendEmail } = require('~/server/utils'); const { isEmailDomainAllowed } = require('~/server/services/domains'); const { getBalanceConfig } = require('~/server/services/Config'); diff --git a/api/server/services/Files/Azure/images.js b/api/server/services/Files/Azure/images.js index d3950bedcc..6672806dbd 100644 --- a/api/server/services/Files/Azure/images.js +++ b/api/server/services/Files/Azure/images.js @@ -1,9 +1,9 @@ const fs = require('fs'); const path = require('path'); const sharp = require('sharp'); -const { updateUser, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { resizeImageBuffer } = require('../images/resize'); -const { updateFile } = require('~/models/File'); +const { updateUser, updateFile } = require('~/models'); const { saveBufferToAzure } = require('./crud'); /** diff --git a/api/server/services/Files/Firebase/images.js b/api/server/services/Files/Firebase/images.js index 8002a8998e..980095da3d 100644 --- a/api/server/services/Files/Firebase/images.js +++ b/api/server/services/Files/Firebase/images.js @@ -1,10 +1,10 @@ const fs = require('fs'); const path = require('path'); const sharp = require('sharp'); +const { logger } = require('@librechat/data-schemas'); const { resizeImageBuffer } = require('../images/resize'); +const { updateUser, updateFile } = require('~/models'); const { saveBufferToFirebase } = require('./crud'); -const { updateFile } = require('~/models/File'); -const { logger, updateUser } = require('@librechat/data-schemas'); /** * Converts an image file to the target format. The function first resizes the image based on the specified diff --git a/api/server/services/Files/Local/images.js b/api/server/services/Files/Local/images.js index ebfe8bc898..cb60d425c6 100644 --- a/api/server/services/Files/Local/images.js +++ b/api/server/services/Files/Local/images.js @@ -1,9 +1,8 @@ const fs = require('fs'); const path = require('path'); const sharp = require('sharp'); -const { updateUser } = require('@librechat/data-schemas'); const { resizeImageBuffer } = require('../images/resize'); -const { updateFile } = require('~/models/File'); +const { updateUser, updateFile } = require('~/models'); /** * Converts an image file to the target format. The function first resizes the image based on the specified diff --git a/api/server/services/Files/S3/images.js b/api/server/services/Files/S3/images.js index b358a6f015..d8d9c85cf5 100644 --- a/api/server/services/Files/S3/images.js +++ b/api/server/services/Files/S3/images.js @@ -1,9 +1,9 @@ const fs = require('fs'); const path = require('path'); const sharp = require('sharp'); -const { logger, updateUser } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { resizeImageBuffer } = require('../images/resize'); -const { updateFile } = require('~/models/File'); +const { updateUser, updateFile } = require('~/models'); const { saveBufferToS3 } = require('./crud'); const defaultBasePath = 'images'; diff --git a/api/server/services/PluginService.js b/api/server/services/PluginService.js index 3c7af612a9..d05b5d50f3 100644 --- a/api/server/services/PluginService.js +++ b/api/server/services/PluginService.js @@ -1,7 +1,9 @@ -const { PluginAuth } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); const { encrypt, decrypt } = require('~/server/utils/'); const { logger } = require('~/config'); +const PluginAuth = mongoose.models.PluginAuth; + /** * Asynchronously retrieves and decrypts the authentication value for a user's plugin, based on a specified authentication field. * diff --git a/api/server/services/UserService.js b/api/server/services/UserService.js index 8b2847c04a..7b78c3489a 100644 --- a/api/server/services/UserService.js +++ b/api/server/services/UserService.js @@ -1,6 +1,10 @@ +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { ErrorTypes } = require('librechat-data-provider'); -const { Key, logger, updateUser } = require('@librechat/data-schemas'); const { encrypt, decrypt } = require('~/server/utils/crypto'); +const { updateUser } = require('~/models'); + +const Key = mongoose.models.Key; /** * Updates the plugins for a user based on the action specified (install/uninstall). diff --git a/api/server/services/twoFactorService.js b/api/server/services/twoFactorService.js index 7029eb75e7..de055e0745 100644 --- a/api/server/services/twoFactorService.js +++ b/api/server/services/twoFactorService.js @@ -1,7 +1,9 @@ +const mongoose = require('mongoose'); const { webcrypto } = require('node:crypto'); -const { User } = require('@librechat/data-schemas'); const { hashBackupCode, decryptV3, decryptV2 } = require('~/server/utils/crypto'); +const User = mongoose.models.User; + // Base32 alphabet for TOTP secret encoding. const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; diff --git a/api/strategies/appleStrategy.test.js b/api/strategies/appleStrategy.test.js index 887b4f5a38..58b449024f 100644 --- a/api/strategies/appleStrategy.test.js +++ b/api/strategies/appleStrategy.test.js @@ -1,11 +1,13 @@ const mongoose = require('mongoose'); -const { MongoMemoryServer } = require('mongodb-memory-server'); const jwt = require('jsonwebtoken'); +const { logger } = require('@librechat/data-schemas'); const { Strategy: AppleStrategy } = require('passport-apple'); -const socialLogin = require('./socialLogin'); +const { MongoMemoryServer } = require('mongodb-memory-server'); const { createSocialUser, handleExistingUser } = require('./process'); const { isEnabled } = require('~/server/utils'); -const { User, logger } = require('@librechat/data-schemas'); +const socialLogin = require('./socialLogin'); + +const User = mongoose.models.User; // Mocking external dependencies jest.mock('jsonwebtoken'); diff --git a/api/strategies/jwtStrategy.js b/api/strategies/jwtStrategy.js index 91dac3875d..379b581287 100644 --- a/api/strategies/jwtStrategy.js +++ b/api/strategies/jwtStrategy.js @@ -1,7 +1,10 @@ +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { SystemRoles } = require('librechat-data-provider'); -const { User, logger } = require('@librechat/data-schemas'); const { Strategy: JwtStrategy, ExtractJwt } = require('passport-jwt'); +const User = mongoose.models.User; + // JWT strategy const jwtLogin = () => new JwtStrategy( diff --git a/api/strategies/ldapStrategy.js b/api/strategies/ldapStrategy.js index ee2a80a4d9..5ab2981b13 100644 --- a/api/strategies/ldapStrategy.js +++ b/api/strategies/ldapStrategy.js @@ -1,10 +1,13 @@ const fs = require('fs'); +const mongoose = require('mongoose'); const LdapStrategy = require('passport-ldapauth'); const { SystemRoles } = require('librechat-data-provider'); -const { User, createUser, findUser, updateUser } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); +const { createUser, findUser, updateUser } = require('~/models'); const { getBalanceConfig } = require('~/server/services/Config'); const { isEnabled } = require('~/server/utils'); -const logger = require('~/utils/logger'); + +const User = mongoose.models.User; const { LDAP_URL, diff --git a/api/strategies/localStrategy.js b/api/strategies/localStrategy.js index 70d03de419..059442930c 100644 --- a/api/strategies/localStrategy.js +++ b/api/strategies/localStrategy.js @@ -1,10 +1,13 @@ -const { User, logger } = require('@librechat/data-schemas'); +const mongoose = require('mongoose'); +const { logger } = require('@librechat/data-schemas'); const { errorsToString } = require('librechat-data-provider'); const { Strategy: PassportLocalStrategy } = require('passport-local'); const { isEnabled, checkEmailConfig } = require('~/server/utils'); const { comparePassword } = require('~/models'); const { loginSchema } = require('./validators'); +const User = mongoose.models.User; + // Unix timestamp for 2024-06-07 15:20:18 Eastern Time const verificationEnabledTimestamp = 1717788018; diff --git a/api/strategies/openidStrategy.js b/api/strategies/openidStrategy.js index 0ebe8a73d7..678ce64b2e 100644 --- a/api/strategies/openidStrategy.js +++ b/api/strategies/openidStrategy.js @@ -1,15 +1,18 @@ const fetch = require('node-fetch'); +const mongoose = require('mongoose'); const passport = require('passport'); const client = require('openid-client'); const jwtDecode = require('jsonwebtoken/decode'); +const { logger } = require('@librechat/data-schemas'); const { CacheKeys } = require('librechat-data-provider'); const { HttpsProxyAgent } = require('https-proxy-agent'); -const { User, logger } = require('@librechat/data-schemas'); const { Strategy: OpenIDStrategy } = require('openid-client/passport'); const { getStrategyFunctions } = require('~/server/services/Files/strategies'); const getLogStores = require('~/cache/getLogStores'); const { isEnabled } = require('~/server/utils'); +const User = mongoose.models.User; + /** * @typedef {import('openid-client').ClientMetadata} ClientMetadata * @typedef {import('openid-client').Configuration} Configuration diff --git a/api/strategies/openidStrategy.spec.js b/api/strategies/openidStrategy.spec.js index e96dfe1083..7a639eb1ce 100644 --- a/api/strategies/openidStrategy.spec.js +++ b/api/strategies/openidStrategy.spec.js @@ -1,4 +1,5 @@ const fetch = require('node-fetch'); +const mongoose = require('mongoose'); const jwtDecode = require('jsonwebtoken/decode'); const { setupOpenId } = require('./openidStrategy'); const { getBalanceConfig } = require('~/server/services/Config'); @@ -7,7 +8,6 @@ const { getBalanceConfig } = require('~/server/services/Config'); const mockCreateUser = jest.fn(); const mockFindUser = jest.fn(); const mockUpdateUser = jest.fn(); -let User; const mockModels = { User: { @@ -132,8 +132,7 @@ describe('setupOpenId', () => { picture: 'https://example.com/avatar.png', }), }; - const { registerModels } = require('@librechat/data-schemas'); - User = registerModels().User; + const User = mongoose.models.User; beforeEach(async () => { // Clear previous mock calls and reset implementations jest.clearAllMocks(); diff --git a/api/strategies/process.js b/api/strategies/process.js index c8dee199b6..774d8d015e 100644 --- a/api/strategies/process.js +++ b/api/strategies/process.js @@ -1,7 +1,7 @@ const { FileSources } = require('librechat-data-provider'); -const { updateUser, createUser, getUserById } = require('@librechat/data-schemas'); const { getStrategyFunctions } = require('~/server/services/Files/strategies'); const { resizeAvatar } = require('~/server/services/Files/images/avatar'); +const { updateUser, createUser, getUserById } = require('~/models'); const { getBalanceConfig } = require('~/server/services/Config'); /** diff --git a/api/strategies/socialLogin.js b/api/strategies/socialLogin.js index c61913ceef..4f9462316a 100644 --- a/api/strategies/socialLogin.js +++ b/api/strategies/socialLogin.js @@ -1,6 +1,7 @@ -const { findUser, logger } = require('@librechat/data-schemas'); +const { logger } = require('@librechat/data-schemas'); const { createSocialUser, handleExistingUser } = require('./process'); const { isEnabled } = require('~/server/utils'); +const { findUser } = require('~/models'); const socialLogin = (provider, getProfileDetails) => async (accessToken, refreshToken, idToken, profile, cb) => { diff --git a/packages/data-schemas/src/index.ts b/packages/data-schemas/src/index.ts index 05b39ebcad..c1fc8a47d2 100644 --- a/packages/data-schemas/src/index.ts +++ b/packages/data-schemas/src/index.ts @@ -1,3 +1,5 @@ export { createModels } from './models'; export { createMethods } from './methods'; export type * from './types'; +export { default as logger } from './config/winston'; +export { default as meiliLogger } from './config/meiliLogger';