const { EModelEndpoint, AuthKeys } = require('librechat-data-provider'); const { getUserKey, checkUserKeyExpiry } = require('~/server/services/UserService'); const { GoogleClient } = require('~/app'); const { isEnabled } = require('~/server/utils'); const initializeClient = async ({ req, res, endpointOption }) => { const { GOOGLE_KEY, GOOGLE_REVERSE_PROXY, GOOGLE_AUTH_HEADER, PROXY, } = process.env; const isUserProvided = GOOGLE_KEY === 'user_provided'; const { key: expiresAt } = req.body; let userKey = null; if (expiresAt && isUserProvided) { checkUserKeyExpiry(expiresAt, EModelEndpoint.google); userKey = await getUserKey({ userId: req.user.id, name: EModelEndpoint.google }); } let serviceKey = {}; try { serviceKey = require('~/data/auth.json'); } catch (e) { // Do nothing } const credentials = isUserProvided ? userKey : { [AuthKeys.GOOGLE_SERVICE_KEY]: serviceKey, [AuthKeys.GOOGLE_API_KEY]: GOOGLE_KEY, }; const clientOptions = {}; /** @type {undefined | TBaseEndpoint} */ const allConfig = req.app.locals.all; /** @type {undefined | TBaseEndpoint} */ const googleConfig = req.app.locals[EModelEndpoint.google]; if (googleConfig) { clientOptions.streamRate = googleConfig.streamRate; } if (allConfig) { clientOptions.streamRate = allConfig.streamRate; } const client = new GoogleClient(credentials, { req, res, reverseProxyUrl: GOOGLE_REVERSE_PROXY ?? null, authHeader: isEnabled(GOOGLE_AUTH_HEADER) ?? null, proxy: PROXY ?? null, ...clientOptions, ...endpointOption, }); return { client, credentials, }; }; module.exports = initializeClient;