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<boolean>} 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; | |