LibreChat/packages/data-schemas/src/utils/transactions.ts
Danny Avila eed43e6662
feat: Add granular role-based permissions system with Entra ID integration
- Implement RBAC with viewer/editor/owner roles using bitwise permissions
      - Add AccessRole, AclEntry, and Group models for permission management
      - Create PermissionService for core permission logic and validation
      - Integrate Microsoft Graph API for Entra ID user/group search
      - Add middleware for resource access validation with custom ID resolvers
      - Implement bulk permission updates with transaction support
      - Create permission management UI with people picker and role selection
      - Add public sharing capabilities for resources
      - Include database migration for existing agent ownership
      - Support hybrid local/Entra ID identity management
      - Add comprehensive test coverage for all new services

chore: Update @librechat/data-schemas to version 0.0.9 and export common module in index.ts

fix: Update userGroup tests to mock logger correctly and change principalId expectation from null to undefined
2025-06-20 16:22:36 -04:00

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