diff --git a/api/app/clients/OpenAIClient.js b/api/app/clients/OpenAIClient.js index c81d0c574c..cd46cf7d6f 100644 --- a/api/app/clients/OpenAIClient.js +++ b/api/app/clients/OpenAIClient.js @@ -652,10 +652,12 @@ class OpenAIClient extends BaseClient { const { headers } = this.options; if (headers && typeof headers === 'object' && !Array.isArray(headers)) { configOptions.baseOptions = { - headers: resolveHeaders({ headers: { - ...headers, - ...configOptions?.baseOptions?.headers, - } }), + headers: resolveHeaders({ + headers: { + ...headers, + ...configOptions?.baseOptions?.headers, + }, + }), }; } diff --git a/api/server/services/Endpoints/custom/initialize.js b/api/server/services/Endpoints/custom/initialize.js index 7e61dd17da..184cb612d8 100644 --- a/api/server/services/Endpoints/custom/initialize.js +++ b/api/server/services/Endpoints/custom/initialize.js @@ -28,7 +28,11 @@ const initializeClient = async ({ req, res, endpointOption, optionsOnly, overrid const CUSTOM_API_KEY = extractEnvVariable(endpointConfig.apiKey); const CUSTOM_BASE_URL = extractEnvVariable(endpointConfig.baseURL); - let resolvedHeaders = resolveHeaders({ headers: endpointConfig.headers, user: req.user, body: req.body }); + let resolvedHeaders = resolveHeaders({ + headers: endpointConfig.headers, + user: req.user, + body: req.body, + }); if (CUSTOM_API_KEY.match(envVarRegex)) { throw new Error(`Missing API Key for ${endpoint}.`); diff --git a/packages/api/src/utils/env.spec.ts b/packages/api/src/utils/env.spec.ts index 909299ba22..ae62d1ef2c 100644 --- a/packages/api/src/utils/env.spec.ts +++ b/packages/api/src/utils/env.spec.ts @@ -428,7 +428,11 @@ describe('resolveHeaders', () => { }); it('should process LIBRECHAT_BODY placeholders', () => { - const body = { conversationId: 'conv-123', parentMessageId: 'parent-456', messageId: 'msg-789' }; + const body = { + conversationId: 'conv-123', + parentMessageId: 'parent-456', + messageId: 'msg-789', + }; const headers = { 'X-Conversation': '{{LIBRECHAT_BODY_CONVERSATIONID}}' }; const result = resolveHeaders({ headers, body }); expect(result['X-Conversation']).toBe('conv-123'); diff --git a/packages/api/src/utils/env.ts b/packages/api/src/utils/env.ts index 09b401a594..ed777dc640 100644 --- a/packages/api/src/utils/env.ts +++ b/packages/api/src/utils/env.ts @@ -29,11 +29,7 @@ const ALLOWED_USER_FIELDS = [ * List of allowed request body fields that can be used in header placeholders. * These are common fields from the request body that are safe to expose in headers. */ -const ALLOWED_BODY_FIELDS = [ - 'conversationId', - 'parentMessageId', - 'messageId' -] as const; +const ALLOWED_BODY_FIELDS = ['conversationId', 'parentMessageId', 'messageId'] as const; /** * Processes a string value to replace user field placeholders @@ -81,7 +77,6 @@ function processUserPlaceholders(value: string, user?: TUser): string { * @returns The processed string with placeholders replaced */ function processBodyPlaceholders(value: string, body: RequestBody): string { - for (const field of ALLOWED_BODY_FIELDS) { const placeholder = `{{LIBRECHAT_BODY_${field.toUpperCase()}}}`; if (!value.includes(placeholder)) { @@ -195,7 +190,7 @@ export function processMCPEnv( /** * Resolves header values by replacing user placeholders, body variables, custom variables, and environment variables. - * + * * @param options - Optional configuration object. * @param options.headers - The headers object to process. * @param options.user - Optional user object for replacing user field placeholders (can be partial with just id). diff --git a/packages/data-provider/src/types/http.ts b/packages/data-provider/src/types/http.ts index 5b2363ee6f..c2d5e6f90f 100644 --- a/packages/data-provider/src/types/http.ts +++ b/packages/data-provider/src/types/http.ts @@ -4,4 +4,3 @@ export interface RequestBody { conversationId?: string; [key: string]: unknown; } -