From 6aae1c7bd78f768e7ad0f618c8edea54446017d5 Mon Sep 17 00:00:00 2001 From: EmilienMottet Date: Wed, 30 Apr 2025 21:43:44 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(engine):=20extract=20custom?= =?UTF-8?q?=20header=20parsing=20and=20update=20OpenAiEngine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - export parseCustomHeaders from src/utils/engine.ts - use parseCustomHeaders in OpenAiEngine for config.customHeaders - remove try/catch and inline JSON.parse logic - update config test to expect headers as object and drop JSON.parse Centralize header parsing for reuse and simplify engine code Update tests to match new header format for clarity --- src/engine/openAi.ts | 14 ++++---------- src/utils/engine.ts | 2 +- test/unit/config.test.ts | 6 +++--- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/engine/openAi.ts b/src/engine/openAi.ts index f87bcd1..22a9b37 100644 --- a/src/engine/openAi.ts +++ b/src/engine/openAi.ts @@ -1,6 +1,7 @@ import axios from 'axios'; import { OpenAI } from 'openai'; import { GenerateCommitMessageErrorEnum } from '../generateCommitMessageFromGitDiff'; +import { parseCustomHeaders } from '../utils/engine'; import { removeContentTags } from '../utils/removeContentTags'; import { tokenCount } from '../utils/tokenCount'; import { AiEngine, AiEngineConfig } from './Engine'; @@ -23,16 +24,9 @@ export class OpenAiEngine implements AiEngine { } if (config.customHeaders) { - try { - let headers = config.customHeaders; - if (typeof config.customHeaders === 'string') { - headers = JSON.parse(config.customHeaders); - } - - if (headers && typeof headers === 'object' && Object.keys(headers).length > 0) { - clientOptions.defaultHeaders = headers; - } - } catch (error) { + const headers = parseCustomHeaders(config.customHeaders); + if (Object.keys(headers).length > 0) { + clientOptions.defaultHeaders = headers; } } diff --git a/src/utils/engine.ts b/src/utils/engine.ts index e265b5b..dbc45a0 100644 --- a/src/utils/engine.ts +++ b/src/utils/engine.ts @@ -12,7 +12,7 @@ import { GroqEngine } from '../engine/groq'; import { MLXEngine } from '../engine/mlx'; import { DeepseekEngine } from '../engine/deepseek'; -function parseCustomHeaders(headers: any): Record { +export function parseCustomHeaders(headers: any): Record { let parsedHeaders = {}; if (!headers) { diff --git a/test/unit/config.test.ts b/test/unit/config.test.ts index 871655d..fc4709d 100644 --- a/test/unit/config.test.ts +++ b/test/unit/config.test.ts @@ -138,10 +138,10 @@ describe('config', () => { }); expect(config).not.toEqual(null); - expect(config.OCO_API_CUSTOM_HEADERS).toEqual('{"Authorization": "Bearer token123", "X-Custom-Header": "test-value"}'); + expect(config.OCO_API_CUSTOM_HEADERS).toEqual({"Authorization": "Bearer token123", "X-Custom-Header": "test-value"}); - // Verify that the JSON can be parsed correctly - const parsedHeaders = JSON.parse(config.OCO_API_CUSTOM_HEADERS); + // No need to parse JSON again since it's already an object + const parsedHeaders = config.OCO_API_CUSTOM_HEADERS; expect(parsedHeaders).toHaveProperty('Authorization', 'Bearer token123'); expect(parsedHeaders).toHaveProperty('X-Custom-Header', 'test-value'); expect(parsedHeaders).not.toHaveProperty('X-Global-Header');