const Balance = require('./Balance'); const { logViolation } = require('../cache'); /** * Checks the balance for a user and determines if they can spend a certain amount. * If the user cannot spend the amount, it logs a violation and denies the request. * * @async * @function * @param {Object} params - The function parameters. * @param {Object} params.req - The Express request object. * @param {Object} params.res - The Express response object. * @param {Object} params.txData - The transaction data. * @param {string} params.txData.user - The user ID or identifier. * @param {('prompt' | 'completion')} params.txData.tokenType - The type of token. * @param {number} params.txData.amount - The amount of tokens. * @param {boolean} params.txData.debug - Debug flag. * @param {string} params.txData.model - The model name or identifier. * @returns {Promise} Returns true if the user can spend the amount, otherwise denies the request. * @throws {Error} Throws an error if there's an issue with the balance check. */ const checkBalance = async ({ req, res, txData }) => { const { canSpend, balance, tokenCost } = await Balance.check(txData); if (canSpend) { return true; } const type = 'token_balance'; const errorMessage = { type, balance, tokenCost, promptTokens: txData.amount, }; if (txData.generations && txData.generations.length > 0) { errorMessage.generations = txData.generations; } await logViolation(req, res, type, errorMessage, 0); throw new Error(JSON.stringify(errorMessage)); }; module.exports = checkBalance;