mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-18 17:30:16 +01:00
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
|
|
import logger from '~/config/winston';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Checks if the connected MongoDB deployment supports transactions
|
||
|
|
* This requires a MongoDB replica set configuration
|
||
|
|
*
|
||
|
|
* @returns True if transactions are supported, false otherwise
|
||
|
|
*/
|
||
|
|
export const supportsTransactions = async (
|
||
|
|
mongoose: typeof import('mongoose'),
|
||
|
|
): Promise<boolean> => {
|
||
|
|
try {
|
||
|
|
const session = await mongoose.startSession();
|
||
|
|
try {
|
||
|
|
session.startTransaction();
|
||
|
|
|
||
|
|
await mongoose.connection.db?.collection('__transaction_test__').findOne({}, { session });
|
||
|
|
|
||
|
|
await session.abortTransaction();
|
||
|
|
logger.debug('MongoDB transactions are supported');
|
||
|
|
return true;
|
||
|
|
} catch (transactionError: unknown) {
|
||
|
|
logger.debug(
|
||
|
|
'MongoDB transactions not supported (transaction error):',
|
||
|
|
(transactionError as Error)?.message || 'Unknown error',
|
||
|
|
);
|
||
|
|
return false;
|
||
|
|
} finally {
|
||
|
|
await session.endSession();
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
logger.debug(
|
||
|
|
'MongoDB transactions not supported (session error):',
|
||
|
|
(error as Error)?.message || 'Unknown error',
|
||
|
|
);
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Gets whether the current MongoDB deployment supports transactions
|
||
|
|
* Caches the result for performance
|
||
|
|
*
|
||
|
|
* @returns True if transactions are supported, false otherwise
|
||
|
|
*/
|
||
|
|
export const getTransactionSupport = async (
|
||
|
|
mongoose: typeof import('mongoose'),
|
||
|
|
transactionSupportCache: boolean | null,
|
||
|
|
): Promise<boolean> => {
|
||
|
|
let transactionsSupported = false;
|
||
|
|
if (transactionSupportCache === null) {
|
||
|
|
transactionsSupported = await supportsTransactions(mongoose);
|
||
|
|
}
|
||
|
|
return transactionsSupported;
|
||
|
|
};
|