diff --git a/api/server/services/AuthService.js b/api/server/services/AuthService.js index 1ac5f76928..42f5c8a57c 100644 --- a/api/server/services/AuthService.js +++ b/api/server/services/AuthService.js @@ -1,8 +1,8 @@ const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const { webcrypto } = require('node:crypto'); -const { isEnabled } = require('@librechat/api'); const { logger } = require('@librechat/data-schemas'); +const { isEnabled, checkEmailConfig } = require('@librechat/api'); const { SystemRoles, errorsToString } = require('librechat-data-provider'); const { findUser, @@ -21,9 +21,9 @@ const { generateRefreshToken, } = require('~/models'); const { isEmailDomainAllowed } = require('~/server/services/domains'); -const { checkEmailConfig, sendEmail } = require('~/server/utils'); const { registerSchema } = require('~/strategies/validators'); const { getAppConfig } = require('~/server/services/Config'); +const { sendEmail } = require('~/server/utils'); const domains = { client: process.env.DOMAIN_CLIENT, diff --git a/api/server/services/start/checks.js b/api/server/services/start/checks.js index d6560c3f3d..5b13d41d59 100644 --- a/api/server/services/start/checks.js +++ b/api/server/services/start/checks.js @@ -1,12 +1,11 @@ -const { webSearchKeys } = require('@librechat/api'); +const { logger } = require('@librechat/data-schemas'); +const { isEnabled, webSearchKeys, checkEmailConfig } = require('@librechat/api'); const { Constants, + extractVariableName, deprecatedAzureVariables, conflictingAzureVariables, - extractVariableName, } = require('librechat-data-provider'); -const { isEnabled, checkEmailConfig } = require('~/server/utils'); -const { logger } = require('~/config'); const secretDefaults = { CREDS_KEY: 'f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0', @@ -76,7 +75,7 @@ async function checkHealth() { if (response?.ok && response?.status === 200) { logger.info(`RAG API is running and reachable at ${process.env.RAG_API_URL}.`); } - } catch (error) { + } catch { logger.warn( `RAG API is either not running or not reachable at ${process.env.RAG_API_URL}, you may experience errors with file uploads.`, ); diff --git a/api/server/utils/index.js b/api/server/utils/index.js index 2672f4f2ea..7e29b9f518 100644 --- a/api/server/utils/index.js +++ b/api/server/utils/index.js @@ -5,28 +5,7 @@ const sendEmail = require('./sendEmail'); const queue = require('./queue'); const files = require('./files'); -/** - * Check if email configuration is set - * @returns {Boolean} - */ -function checkEmailConfig() { - // Check if Mailgun is configured - const hasMailgunConfig = - !!process.env.MAILGUN_API_KEY && !!process.env.MAILGUN_DOMAIN && !!process.env.EMAIL_FROM; - - // Check if SMTP is configured - const hasSMTPConfig = - (!!process.env.EMAIL_SERVICE || !!process.env.EMAIL_HOST) && - !!process.env.EMAIL_USERNAME && - !!process.env.EMAIL_PASSWORD && - !!process.env.EMAIL_FROM; - - // Return true if either Mailgun or SMTP is properly configured - return hasMailgunConfig || hasSMTPConfig; -} - module.exports = { - checkEmailConfig, ...handleText, countTokens, removePorts, diff --git a/api/server/utils/sendEmail.js b/api/server/utils/sendEmail.js index c0afd0eebe..ee64b209fd 100644 --- a/api/server/utils/sendEmail.js +++ b/api/server/utils/sendEmail.js @@ -4,9 +4,8 @@ const axios = require('axios'); const FormData = require('form-data'); const nodemailer = require('nodemailer'); const handlebars = require('handlebars'); -const { logAxiosError } = require('@librechat/api'); const { logger } = require('@librechat/data-schemas'); -const { isEnabled } = require('~/server/utils/handleText'); +const { logAxiosError, isEnabled } = require('@librechat/api'); /** * Sends an email using Mailgun API. diff --git a/api/strategies/localStrategy.js b/api/strategies/localStrategy.js index 26b3b8197f..0d220ead25 100644 --- a/api/strategies/localStrategy.js +++ b/api/strategies/localStrategy.js @@ -1,7 +1,7 @@ const { logger } = require('@librechat/data-schemas'); const { errorsToString } = require('librechat-data-provider'); +const { isEnabled, checkEmailConfig } = require('@librechat/api'); const { Strategy: PassportLocalStrategy } = require('passport-local'); -const { isEnabled, checkEmailConfig } = require('~/server/utils'); const { findUser, comparePassword, updateUser } = require('~/models'); const { loginSchema } = require('./validators'); diff --git a/config/invite-user.js b/config/invite-user.js index b311837c3e..80fe0ab23a 100644 --- a/config/invite-user.js +++ b/config/invite-user.js @@ -1,10 +1,11 @@ const path = require('path'); const mongoose = require('mongoose'); +const { checkEmailConfig } = require('@librechat/api'); const { User } = require('@librechat/data-schemas').createModels(mongoose); require('module-alias')({ base: path.resolve(__dirname, '..', 'api') }); -const { sendEmail, checkEmailConfig } = require('~/server/utils'); const { askQuestion, silentExit } = require('./helpers'); const { createInvite } = require('~/models/inviteUser'); +const { sendEmail } = require('~/server/utils'); const connect = require('./connect'); (async () => { diff --git a/packages/api/src/utils/email.ts b/packages/api/src/utils/email.ts new file mode 100644 index 0000000000..f98e7c51be --- /dev/null +++ b/packages/api/src/utils/email.ts @@ -0,0 +1,16 @@ +/** + * Check if email configuration is set + * @returns Returns `true` if either Mailgun or SMTP is properly configured + */ +export function checkEmailConfig(): boolean { + const hasMailgunConfig = + !!process.env.MAILGUN_API_KEY && !!process.env.MAILGUN_DOMAIN && !!process.env.EMAIL_FROM; + + const hasSMTPConfig = + (!!process.env.EMAIL_SERVICE || !!process.env.EMAIL_HOST) && + !!process.env.EMAIL_USERNAME && + !!process.env.EMAIL_PASSWORD && + !!process.env.EMAIL_FROM; + + return hasMailgunConfig || hasSMTPConfig; +} diff --git a/packages/api/src/utils/index.ts b/packages/api/src/utils/index.ts index a513425c70..2ce0381aff 100644 --- a/packages/api/src/utils/index.ts +++ b/packages/api/src/utils/index.ts @@ -1,6 +1,7 @@ export * from './axios'; export * from './azure'; export * from './common'; +export * from './email'; export * from './env'; export * from './events'; export * from './files';