diff --git a/api/app/clients/specs/BaseClient.test.js b/api/app/clients/specs/BaseClient.test.js index d620d5f647..0ba77db6fa 100644 --- a/api/app/clients/specs/BaseClient.test.js +++ b/api/app/clients/specs/BaseClient.test.js @@ -1,7 +1,7 @@ const { Constants } = require('librechat-data-provider'); const { initializeFakeClient } = require('./FakeClient'); -jest.mock('~/lib/db/connectDb'); +jest.mock('~/db/connect'); jest.mock('~/models', () => ({ User: jest.fn(), Key: jest.fn(), @@ -52,7 +52,7 @@ const messageHistory = [ { role: 'user', isCreatedByUser: true, - text: 'What\'s up', + text: "What's up", messageId: '3', parentMessageId: '2', }, @@ -456,7 +456,7 @@ describe('BaseClient', () => { const chatMessages2 = await TestClient.loadHistory(conversationId, '3'); expect(TestClient.currentMessages).toHaveLength(3); - expect(chatMessages2[chatMessages2.length - 1].text).toEqual('What\'s up'); + expect(chatMessages2[chatMessages2.length - 1].text).toEqual("What's up"); }); /* Most of the new sendMessage logic revolving around edited/continued AI messages diff --git a/api/app/clients/specs/OpenAIClient.test.js b/api/app/clients/specs/OpenAIClient.test.js index 579f636eef..cc4aa84d5d 100644 --- a/api/app/clients/specs/OpenAIClient.test.js +++ b/api/app/clients/specs/OpenAIClient.test.js @@ -5,7 +5,7 @@ const getLogStores = require('~/cache/getLogStores'); const OpenAIClient = require('../OpenAIClient'); jest.mock('meilisearch'); -jest.mock('~/lib/db/connectDb'); +jest.mock('~/db/connect'); jest.mock('~/models', () => ({ User: jest.fn(), Key: jest.fn(), @@ -462,17 +462,17 @@ describe('OpenAIClient', () => { role: 'system', name: 'example_user', content: - 'Let\'s circle back when we have more bandwidth to touch base on opportunities for increased leverage.', + "Let's circle back when we have more bandwidth to touch base on opportunities for increased leverage.", }, { role: 'system', name: 'example_assistant', - content: 'Let\'s talk later when we\'re less busy about how to do better.', + content: "Let's talk later when we're less busy about how to do better.", }, { role: 'user', content: - 'This late pivot means we don\'t have time to boil the ocean for the client deliverable.', + "This late pivot means we don't have time to boil the ocean for the client deliverable.", }, ]; diff --git a/api/app/clients/specs/PluginsClient.test.js b/api/app/clients/specs/PluginsClient.test.js index fd7bee5043..4928acefd1 100644 --- a/api/app/clients/specs/PluginsClient.test.js +++ b/api/app/clients/specs/PluginsClient.test.js @@ -3,7 +3,7 @@ const { Constants } = require('librechat-data-provider'); const { HumanMessage, AIMessage } = require('@langchain/core/messages'); const PluginsClient = require('../PluginsClient'); -jest.mock('~/lib/db/connectDb'); +jest.mock('~/db/connect'); jest.mock('~/models/Conversation', () => { return function () { return { diff --git a/api/app/clients/tools/util/handleTools.test.js b/api/app/clients/tools/util/handleTools.test.js index 7f2411b328..7e7a29f6e9 100644 --- a/api/app/clients/tools/util/handleTools.test.js +++ b/api/app/clients/tools/util/handleTools.test.js @@ -13,12 +13,10 @@ const mockPluginService = { const mockModels = { User: mockUser, }; -jest.mock('~/lib/db/connectDb', () => { +jest.mock('~/db/connect', () => { return { connectDb: jest.fn(), - get models() { - return mockModels; - }, + User: mockModels.mockUser, }; }); jest.mock('~/models/File', () => ({ @@ -60,7 +58,7 @@ describe('Tool Handlers', () => { }, ); - fakeUser = await User.createUser({ + fakeUser = await mockModels.User.createUser({ name: 'Fake User', username: 'fakeuser', email: 'fakeuser@example.com', @@ -226,7 +224,6 @@ describe('Tool Handlers', () => { try { await loadTool2(); } catch (error) { - // eslint-disable-next-line jest/no-conditional-expect expect(error).toBeDefined(); } }); diff --git a/api/cache/banViolation.spec.js b/api/cache/banViolation.spec.js index 162f97143e..73b3177f74 100644 --- a/api/cache/banViolation.spec.js +++ b/api/cache/banViolation.spec.js @@ -6,7 +6,7 @@ const mockModels = { }, }; -jest.mock('~/lib/db/connectDb', () => { +jest.mock('~/db/connect', () => { return { connectDb: jest.fn(), get models() { diff --git a/api/lib/db/connectDb.js b/api/db/connect.js similarity index 85% rename from api/lib/db/connectDb.js rename to api/db/connect.js index 54207e0f33..355e1df6b8 100644 --- a/api/lib/db/connectDb.js +++ b/api/db/connect.js @@ -42,16 +42,6 @@ async function connectDb(mongoUri = process.env.MONGO_URI) { return cached.conn; } -function getModels() { - return cached.models; -} module.exports = { connectDb, - getModels, - get models() { - if (!cached.models) { - throw new Error('Models not registered. '); - } - return cached.models; - }, }; diff --git a/api/db/index.js b/api/db/index.js new file mode 100644 index 0000000000..13531d2d27 --- /dev/null +++ b/api/db/index.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose'); +const { createModels } = require('@librechat/data-schemas'); +const { connectDb } = require('./connect'); +const indexSync = require('./indexSync'); + +const models = createModels(mongoose); + +module.exports = { connectDb, indexSync, ...models }; diff --git a/api/lib/db/indexSync.js b/api/db/indexSync.js similarity index 100% rename from api/lib/db/indexSync.js rename to api/db/indexSync.js diff --git a/api/lib/db/index.js b/api/lib/db/index.js deleted file mode 100644 index 917fca9967..0000000000 --- a/api/lib/db/index.js +++ /dev/null @@ -1,4 +0,0 @@ -const { connectDb, getModels} = require('./connectDb'); -const indexSync = require('./indexSync'); - -module.exports = { connectDb, getModels, indexSync }; diff --git a/api/models/Message.spec.js b/api/models/Message.spec.js index 25c2161b1e..270a71804e 100644 --- a/api/models/Message.spec.js +++ b/api/models/Message.spec.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); const { v4: uuidv4 } = require('uuid'); -const db = require('~/lib/db/connectDb'); +const db = require('db/connect'); jest.mock('mongoose'); @@ -35,7 +35,7 @@ const mockModels = { }, }; -jest.mock('~/lib/db/connectDb', () => { +jest.mock('~/db/connect', () => { return { get models() { return mockModels; diff --git a/api/models/index.js b/api/models/index.js index 2e33611655..7ecb9adcbb 100644 --- a/api/models/index.js +++ b/api/models/index.js @@ -1,6 +1,5 @@ const mongoose = require('mongoose'); -const { createModels, createMethods } = require('@librechat/data-schemas'); -createModels(mongoose); +const { createMethods } = require('@librechat/data-schemas'); const methods = createMethods(mongoose); const { comparePassword } = require('./userMethods'); const { diff --git a/api/models/spendTokens.js b/api/models/spendTokens.js index 48b2309524..d830f46eab 100644 --- a/api/models/spendTokens.js +++ b/api/models/spendTokens.js @@ -1,5 +1,5 @@ const { logger } = require('~/config'); -const db = require('~/lib/db/connectDb'); +const db = require('db/connect'); const { createTransaction, createStructuredTransaction } = require('./Transaction'); /** * Creates up to two transactions to record the spending of tokens. diff --git a/api/server/index.js b/api/server/index.js index f04a77c48d..8b3a5e41fb 100644 --- a/api/server/index.js +++ b/api/server/index.js @@ -10,7 +10,7 @@ const mongoSanitize = require('express-mongo-sanitize'); const fs = require('fs'); const cookieParser = require('cookie-parser'); const { jwtLogin, passportLogin } = require('~/strategies'); -const { connectDb, indexSync, getModels } = require('~/lib/db'); +const { connectDb, indexSync, getModels } = require('db'); const { isEnabled } = require('~/server/utils'); const { ldapLogin } = require('~/strategies'); const { logger } = require('~/config'); @@ -36,7 +36,7 @@ const startServer = async () => { axios.defaults.headers.common['Accept-Encoding'] = 'gzip'; } await connectDb(); - + logger.info('Connected to MongoDB'); await indexSync(); diff --git a/api/strategies/openidStrategy.js b/api/strategies/openidStrategy.js index 678ce64b2e..f5aa93b7df 100644 --- a/api/strategies/openidStrategy.js +++ b/api/strategies/openidStrategy.js @@ -38,7 +38,7 @@ class CustomOpenIDStrategy extends OpenIDStrategy { } } -const db = require('~/lib/db/connectDb'); +const db = require('db/connect'); const { getBalanceConfig } = require('~/server/services/Config'); let crypto; diff --git a/api/strategies/openidStrategy.spec.js b/api/strategies/openidStrategy.spec.js index 7a639eb1ce..c4a26f937a 100644 --- a/api/strategies/openidStrategy.spec.js +++ b/api/strategies/openidStrategy.spec.js @@ -17,7 +17,7 @@ const mockModels = { }, }; -jest.mock('~/lib/db/connectDb', () => { +jest.mock('~/db/connect', () => { return { getModels: jest.fn(() => mockModels), connectDb: jest.fn(), diff --git a/config/connect.js b/config/connect.js index 893523d03a..5ee72dd022 100644 --- a/config/connect.js +++ b/config/connect.js @@ -5,7 +5,7 @@ const moduleAlias = require('module-alias'); const basePath = path.resolve(__dirname, '..', 'api'); moduleAlias.addAlias('~', basePath); -const {connectDb }= require('~/lib/db/connectDb'); +const { connectDb } = require('db/connect'); require('./helpers'); async function connect() { diff --git a/e2e/setup/cleanupUser.ts b/e2e/setup/cleanupUser.ts index e2992debad..01f59142e8 100644 --- a/e2e/setup/cleanupUser.ts +++ b/e2e/setup/cleanupUser.ts @@ -1,6 +1,10 @@ -import { connectDb, getModels } from '@librechat/backend/lib/db/connectDb'; -import { findUser, deleteAllUserSessions } from '@librechat/data-schemas'; -import { deleteMessages, deleteConvos } from '@librechat/backend/models'; +import { connectDb } from '@librechat/backend/db/connect'; +import { + findUser, + deleteConvos, + deleteMessages, + deleteAllUserSessions, +} from '@librechat/backend/models'; type TUser = { email: string; password: string };