import { logger } from '@librechat/data-schemas'; import type { AppConfig } from '@librechat/data-schemas'; /** * Default retention period for temporary chats in hours */ export const DEFAULT_RETENTION_HOURS = 24 * 30; // 30 days /** * Minimum allowed retention period in hours */ export const MIN_RETENTION_HOURS = 1; /** * Maximum allowed retention period in hours (1 year = 8760 hours) */ export const MAX_RETENTION_HOURS = 8760; /** * Gets the temporary chat retention period from environment variables or config * @param interfaceConfig - The custom configuration object * @returns The retention period in hours */ export function getTempChatRetentionHours( interfaceConfig?: AppConfig['interfaceConfig'] | null, ): number { let retentionHours = DEFAULT_RETENTION_HOURS; // Check environment variable first if (process.env.TEMP_CHAT_RETENTION_HOURS) { const envValue = parseInt(process.env.TEMP_CHAT_RETENTION_HOURS, 10); if (!isNaN(envValue)) { retentionHours = envValue; } else { logger.warn( `Invalid TEMP_CHAT_RETENTION_HOURS environment variable: ${process.env.TEMP_CHAT_RETENTION_HOURS}. Using default: ${DEFAULT_RETENTION_HOURS} hours.`, ); } } // Check config file (takes precedence over environment variable) if (interfaceConfig?.temporaryChatRetention !== undefined) { const configValue = interfaceConfig.temporaryChatRetention; if (typeof configValue === 'number' && !isNaN(configValue)) { retentionHours = configValue; } else { logger.warn( `Invalid temporaryChatRetention in config: ${configValue}. Using ${retentionHours} hours.`, ); } } // Validate the retention period if (retentionHours < MIN_RETENTION_HOURS) { logger.warn( `Temporary chat retention period ${retentionHours} is below minimum ${MIN_RETENTION_HOURS} hours. Using minimum value.`, ); retentionHours = MIN_RETENTION_HOURS; } else if (retentionHours > MAX_RETENTION_HOURS) { logger.warn( `Temporary chat retention period ${retentionHours} exceeds maximum ${MAX_RETENTION_HOURS} hours. Using maximum value.`, ); retentionHours = MAX_RETENTION_HOURS; } return retentionHours; } /** * Creates an expiration date for temporary chats * @param interfaceConfig - The custom configuration object * @returns The expiration date */ export function createTempChatExpirationDate(interfaceConfig?: AppConfig['interfaceConfig']): Date { const retentionHours = getTempChatRetentionHours(interfaceConfig); return new Date(Date.now() + retentionHours * 60 * 60 * 1000); }