mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-18 16:35:31 +01: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
105 lines
2.8 KiB
TypeScript
105 lines
2.8 KiB
TypeScript
import { IToken, TokenCreateData, TokenQuery, TokenUpdateData, TokenDeleteResult } from '~/types';
|
|
import logger from '~/config/winston';
|
|
|
|
// Factory function that takes mongoose instance and returns the methods
|
|
export function createTokenMethods(mongoose: typeof import('mongoose')) {
|
|
/**
|
|
* Creates a new Token instance.
|
|
*/
|
|
async function createToken(tokenData: TokenCreateData): Promise<IToken> {
|
|
try {
|
|
const Token = mongoose.models.Token;
|
|
const currentTime = new Date();
|
|
const expiresAt = new Date(currentTime.getTime() + tokenData.expiresIn * 1000);
|
|
|
|
const newTokenData = {
|
|
...tokenData,
|
|
createdAt: currentTime,
|
|
expiresAt,
|
|
};
|
|
|
|
return await Token.create(newTokenData);
|
|
} catch (error) {
|
|
logger.debug('An error occurred while creating token:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates a Token document that matches the provided query.
|
|
*/
|
|
async function updateToken(
|
|
query: TokenQuery,
|
|
updateData: TokenUpdateData,
|
|
): Promise<IToken | null> {
|
|
try {
|
|
const Token = mongoose.models.Token;
|
|
return await Token.findOneAndUpdate(query, updateData, { new: true });
|
|
} catch (error) {
|
|
logger.debug('An error occurred while updating token:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deletes all Token documents that match the provided token, user ID, or email.
|
|
*/
|
|
async function deleteTokens(query: TokenQuery): Promise<TokenDeleteResult> {
|
|
try {
|
|
const Token = mongoose.models.Token;
|
|
return await Token.deleteMany({
|
|
$or: [
|
|
{ userId: query.userId },
|
|
{ token: query.token },
|
|
{ email: query.email },
|
|
{ identifier: query.identifier },
|
|
],
|
|
});
|
|
} catch (error) {
|
|
logger.debug('An error occurred while deleting tokens:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Finds a Token document that matches the provided query.
|
|
*/
|
|
async function findToken(query: TokenQuery): Promise<IToken | null> {
|
|
try {
|
|
const Token = mongoose.models.Token;
|
|
const conditions = [];
|
|
|
|
if (query.userId) {
|
|
conditions.push({ userId: query.userId });
|
|
}
|
|
if (query.token) {
|
|
conditions.push({ token: query.token });
|
|
}
|
|
if (query.email) {
|
|
conditions.push({ email: query.email });
|
|
}
|
|
if (query.identifier) {
|
|
conditions.push({ identifier: query.identifier });
|
|
}
|
|
|
|
const token = await Token.findOne({
|
|
$and: conditions,
|
|
}).lean();
|
|
|
|
return token as IToken | null;
|
|
} catch (error) {
|
|
logger.debug('An error occurred while finding token:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Return all methods
|
|
return {
|
|
findToken,
|
|
createToken,
|
|
updateToken,
|
|
deleteTokens,
|
|
};
|
|
}
|
|
|
|
export type TokenMethods = ReturnType<typeof createTokenMethods>;
|