mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 08:12:00 +02:00

* refactor: move model definitions and database-related methods to packages/data-schemas * ci: update tests due to new DB structure fix: disable mocking `librechat-data-provider` feat: Add schema exports to data-schemas package - Introduced a new schema module that exports various schemas including action, agent, and user schemas. - Updated index.ts to include the new schema exports for better modularity and organization. ci: fix appleStrategy tests fix: Agent.spec.js ci: refactor handleTools tests to use MongoMemoryServer for in-memory database fix: getLogStores imports ci: update banViolation tests to use MongoMemoryServer and improve session mocking test: refactor samlStrategy tests to improve mock configurations and user handling ci: fix crypto mock in handleText tests for improved accuracy ci: refactor spendTokens tests to improve model imports and setup ci: refactor Message model tests to use MongoMemoryServer and improve database interactions * refactor: streamline IMessage interface and move feedback properties to types/message.ts * refactor: use exported initializeRoles from `data-schemas`, remove api workspace version (this serves as an example of future migrations that still need to happen) * refactor: update model imports to use destructuring from `~/db/models` for consistency and clarity * refactor: remove unused mongoose imports from model files for cleaner code * refactor: remove unused mongoose imports from Share, Prompt, and Transaction model files for cleaner code * refactor: remove unused import in Transaction model for cleaner code * ci: update deploy workflow to reference new Docker Dev Branch Images Build and add new workflow for building Docker images on dev branch * chore: cleanup imports
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
const { logger } = require('@librechat/data-schemas');
|
|
const { getBalanceConfig } = require('~/server/services/Config');
|
|
const { Balance } = require('~/db/models');
|
|
|
|
/**
|
|
* Middleware to synchronize user balance settings with current balance configuration.
|
|
* @function
|
|
* @param {Object} req - Express request object containing user information.
|
|
* @param {Object} res - Express response object.
|
|
* @param {import('express').NextFunction} next - Next middleware function.
|
|
*/
|
|
const setBalanceConfig = async (req, res, next) => {
|
|
try {
|
|
const balanceConfig = await getBalanceConfig();
|
|
if (!balanceConfig?.enabled) {
|
|
return next();
|
|
}
|
|
if (balanceConfig.startBalance == null) {
|
|
return next();
|
|
}
|
|
|
|
const userId = req.user._id;
|
|
const userBalanceRecord = await Balance.findOne({ user: userId }).lean();
|
|
const updateFields = buildUpdateFields(balanceConfig, userBalanceRecord);
|
|
|
|
if (Object.keys(updateFields).length === 0) {
|
|
return next();
|
|
}
|
|
|
|
await Balance.findOneAndUpdate(
|
|
{ user: userId },
|
|
{ $set: updateFields },
|
|
{ upsert: true, new: true },
|
|
);
|
|
|
|
next();
|
|
} catch (error) {
|
|
logger.error('Error setting user balance:', error);
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Build an object containing fields that need updating
|
|
* @param {Object} config - The balance configuration
|
|
* @param {Object|null} userRecord - The user's current balance record, if any
|
|
* @returns {Object} Fields that need updating
|
|
*/
|
|
function buildUpdateFields(config, userRecord) {
|
|
const updateFields = {};
|
|
|
|
// Ensure user record has the required fields
|
|
if (!userRecord) {
|
|
updateFields.user = userRecord?.user;
|
|
updateFields.tokenCredits = config.startBalance;
|
|
}
|
|
|
|
if (userRecord?.tokenCredits == null && config.startBalance != null) {
|
|
updateFields.tokenCredits = config.startBalance;
|
|
}
|
|
|
|
const isAutoRefillConfigValid =
|
|
config.autoRefillEnabled &&
|
|
config.refillIntervalValue != null &&
|
|
config.refillIntervalUnit != null &&
|
|
config.refillAmount != null;
|
|
|
|
if (!isAutoRefillConfigValid) {
|
|
return updateFields;
|
|
}
|
|
|
|
if (userRecord?.autoRefillEnabled !== config.autoRefillEnabled) {
|
|
updateFields.autoRefillEnabled = config.autoRefillEnabled;
|
|
}
|
|
|
|
if (userRecord?.refillIntervalValue !== config.refillIntervalValue) {
|
|
updateFields.refillIntervalValue = config.refillIntervalValue;
|
|
}
|
|
|
|
if (userRecord?.refillIntervalUnit !== config.refillIntervalUnit) {
|
|
updateFields.refillIntervalUnit = config.refillIntervalUnit;
|
|
}
|
|
|
|
if (userRecord?.refillAmount !== config.refillAmount) {
|
|
updateFields.refillAmount = config.refillAmount;
|
|
}
|
|
|
|
return updateFields;
|
|
}
|
|
|
|
module.exports = setBalanceConfig;
|