diff --git a/api/models/Conversation.js b/api/models/Conversation.js index 8a529dd10f..d81c716d37 100644 --- a/api/models/Conversation.js +++ b/api/models/Conversation.js @@ -1,6 +1,6 @@ const { logger } = require('@librechat/data-schemas'); const { createTempChatExpirationDate } = require('@librechat/api'); -const { getCustomConfig } = require('~/server/services/Config/getCustomConfig'); +const { getAppConfig } = require('~/server/services/Config/app'); const { getMessages, deleteMessages } = require('./Message'); const { Conversation } = require('~/db/models'); @@ -102,8 +102,8 @@ module.exports = { if (req?.body?.isTemporary) { try { - const customConfig = await getCustomConfig(); - update.expiredAt = createTempChatExpirationDate(customConfig); + const appConfig = await getAppConfig(); + update.expiredAt = createTempChatExpirationDate(appConfig?.interfaceConfig); } catch (err) { logger.error('Error creating temporary chat expiration date:', err); logger.info(`---\`saveConvo\` context: ${metadata?.context}`); diff --git a/api/models/Message.js b/api/models/Message.js index 5a3f84a8e2..860f114213 100644 --- a/api/models/Message.js +++ b/api/models/Message.js @@ -1,7 +1,7 @@ const { z } = require('zod'); const { logger } = require('@librechat/data-schemas'); const { createTempChatExpirationDate } = require('@librechat/api'); -const { getCustomConfig } = require('~/server/services/Config/getCustomConfig'); +const { getAppConfig } = require('~/server/services/Config/app'); const { Message } = require('~/db/models'); const idSchema = z.string().uuid(); @@ -57,8 +57,8 @@ async function saveMessage(req, params, metadata) { if (req?.body?.isTemporary) { try { - const customConfig = await getCustomConfig(); - update.expiredAt = createTempChatExpirationDate(customConfig); + const appConfig = await getAppConfig(); + update.expiredAt = createTempChatExpirationDate(appConfig?.interfaceConfig); } catch (err) { logger.error('Error creating temporary chat expiration date:', err); logger.info(`---\`saveMessage\` context: ${metadata?.context}`); diff --git a/packages/api/src/utils/tempChatRetention.spec.ts b/packages/api/src/utils/tempChatRetention.spec.ts index b0166e9522..7031dc9bf2 100644 --- a/packages/api/src/utils/tempChatRetention.spec.ts +++ b/packages/api/src/utils/tempChatRetention.spec.ts @@ -1,11 +1,11 @@ +import type { AppConfig } from '~/types'; import { + createTempChatExpirationDate, + getTempChatRetentionHours, + DEFAULT_RETENTION_HOURS, MIN_RETENTION_HOURS, MAX_RETENTION_HOURS, - DEFAULT_RETENTION_HOURS, - getTempChatRetentionHours, - createTempChatExpirationDate, } from './tempChatRetention'; -import type { TCustomConfig } from 'librechat-data-provider'; describe('tempChatRetention', () => { const originalEnv = process.env; @@ -33,43 +33,43 @@ describe('tempChatRetention', () => { }); it('should use config value when set', () => { - const config: Partial = { + const config: Partial = { interface: { temporaryChatRetention: 12, }, }; - const result = getTempChatRetentionHours(config); + const result = getTempChatRetentionHours(config?.interfaceConfig); expect(result).toBe(12); }); it('should prioritize config over environment variable', () => { process.env.TEMP_CHAT_RETENTION_HOURS = '48'; - const config: Partial = { + const config: Partial = { interface: { temporaryChatRetention: 12, }, }; - const result = getTempChatRetentionHours(config); + const result = getTempChatRetentionHours(config?.interfaceConfig); expect(result).toBe(12); }); it('should enforce minimum retention period', () => { - const config: Partial = { + const config: Partial = { interface: { temporaryChatRetention: 0, }, }; - const result = getTempChatRetentionHours(config); + const result = getTempChatRetentionHours(config?.interfaceConfig); expect(result).toBe(MIN_RETENTION_HOURS); }); it('should enforce maximum retention period', () => { - const config: Partial = { + const config: Partial = { interface: { temporaryChatRetention: 10000, }, }; - const result = getTempChatRetentionHours(config); + const result = getTempChatRetentionHours(config?.interfaceConfig); expect(result).toBe(MAX_RETENTION_HOURS); }); @@ -80,12 +80,12 @@ describe('tempChatRetention', () => { }); it('should handle invalid config value', () => { - const config: Partial = { + const config: Partial = { interface: { temporaryChatRetention: 'invalid' as unknown as number, }, }; - const result = getTempChatRetentionHours(config); + const result = getTempChatRetentionHours(config?.interfaceConfig); expect(result).toBe(DEFAULT_RETENTION_HOURS); }); }); @@ -103,13 +103,13 @@ describe('tempChatRetention', () => { }); it('should create expiration date with custom retention period', () => { - const config: Partial = { + const config: Partial = { interface: { temporaryChatRetention: 12, }, }; - const result = createTempChatExpirationDate(config); + const result = createTempChatExpirationDate(config?.interfaceConfig); const expectedDate = new Date(); expectedDate.setHours(expectedDate.getHours() + 12); diff --git a/packages/api/src/utils/tempChatRetention.ts b/packages/api/src/utils/tempChatRetention.ts index 6683b4c6ac..6b78681891 100644 --- a/packages/api/src/utils/tempChatRetention.ts +++ b/packages/api/src/utils/tempChatRetention.ts @@ -1,5 +1,5 @@ import { logger } from '@librechat/data-schemas'; -import type { TCustomConfig } from 'librechat-data-provider'; +import type { AppConfig } from '~/types'; /** * Default retention period for temporary chats in hours @@ -18,10 +18,12 @@ export const MAX_RETENTION_HOURS = 8760; /** * Gets the temporary chat retention period from environment variables or config - * @param config - The custom configuration object + * @param interfaceConfig - The custom configuration object * @returns The retention period in hours */ -export function getTempChatRetentionHours(config?: Partial | null): number { +export function getTempChatRetentionHours( + interfaceConfig?: AppConfig['interfaceConfig'] | null, +): number { let retentionHours = DEFAULT_RETENTION_HOURS; // Check environment variable first @@ -37,8 +39,8 @@ export function getTempChatRetentionHours(config?: Partial | null } // Check config file (takes precedence over environment variable) - if (config?.interface?.temporaryChatRetention !== undefined) { - const configValue = config.interface.temporaryChatRetention; + if (interfaceConfig?.temporaryChatRetention !== undefined) { + const configValue = interfaceConfig.temporaryChatRetention; if (typeof configValue === 'number' && !isNaN(configValue)) { retentionHours = configValue; } else { @@ -66,11 +68,11 @@ export function getTempChatRetentionHours(config?: Partial | null /** * Creates an expiration date for temporary chats - * @param config - The custom configuration object + * @param interfaceConfig - The custom configuration object * @returns The expiration date */ -export function createTempChatExpirationDate(config?: Partial): Date { - const retentionHours = getTempChatRetentionHours(config); +export function createTempChatExpirationDate(interfaceConfig?: AppConfig['interfaceConfig']): Date { + const retentionHours = getTempChatRetentionHours(interfaceConfig); const expiredAt = new Date(); expiredAt.setHours(expiredAt.getHours() + retentionHours); return expiredAt;