From 9105dd0e258ed4640c766513722d72f47a2fa4f5 Mon Sep 17 00:00:00 2001 From: decolua Date: Sat, 13 Jun 2026 22:06:59 +0700 Subject: [PATCH] =?UTF-8?q?refactor(open-sse):=20#11=20=E2=80=94=20dedupe?= =?UTF-8?q?=20client-facing=20SSE=5FHEADERS=5FCORS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gom block SSE headers + CORS lặp ở streamingHandler + responsesHandler vào sseConstants.SSE_HEADERS_CORS. Codex format-routing giữ nguyên (logic-driven theo kim chỉ nam DATA/LOGIC docs 07). Co-authored-by: Cursor --- open-sse/handlers/chatCore/streamingHandler.js | 8 +------- open-sse/handlers/responsesHandler.js | 8 ++------ open-sse/utils/sseConstants.js | 8 ++++++++ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/open-sse/handlers/chatCore/streamingHandler.js b/open-sse/handlers/chatCore/streamingHandler.js index f96bb9bd..e5599d02 100644 --- a/open-sse/handlers/chatCore/streamingHandler.js +++ b/open-sse/handlers/chatCore/streamingHandler.js @@ -7,13 +7,7 @@ import { STREAM_STALL_TIMEOUT_MS } from "../../config/runtimeConfig.js"; import { buildAbortedResponsesTerminalBytes } from "../../utils/responsesStreamHelpers.js"; import { buildRequestDetail, extractRequestConfig, saveUsageStats } from "./requestDetail.js"; import { saveRequestDetail } from "@/lib/usageDb.js"; - -const SSE_HEADERS = { - "Content-Type": "text/event-stream", - "Cache-Control": "no-cache", - "Connection": "keep-alive", - "Access-Control-Allow-Origin": "*" -}; +import { SSE_HEADERS_CORS as SSE_HEADERS } from "../../utils/sseConstants.js"; /** * Determine which SSE transform stream to use based on provider/format. diff --git a/open-sse/handlers/responsesHandler.js b/open-sse/handlers/responsesHandler.js index 823ff8c3..5cba7e94 100644 --- a/open-sse/handlers/responsesHandler.js +++ b/open-sse/handlers/responsesHandler.js @@ -7,6 +7,7 @@ import { handleChatCore } from "./chatCore.js"; import { convertResponsesApiFormat } from "../translator/helpers/responsesApiHelper.js"; import { createResponsesApiTransformStream } from "../transformer/responsesTransformer.js"; import { convertResponsesStreamToJson } from "../transformer/streamToJsonConverter.js"; +import { SSE_HEADERS_CORS } from "../utils/sseConstants.js"; /** * Handle /v1/responses request @@ -87,12 +88,7 @@ export async function handleResponsesCore({ body, modelInfo, credentials, log, o success: true, response: new Response(transformedBody, { status: 200, - headers: { - "Content-Type": "text/event-stream", - "Cache-Control": "no-cache", - "Connection": "keep-alive", - "Access-Control-Allow-Origin": "*" - } + headers: { ...SSE_HEADERS_CORS } }) }; } diff --git a/open-sse/utils/sseConstants.js b/open-sse/utils/sseConstants.js index fed78dae..680a05ca 100644 --- a/open-sse/utils/sseConstants.js +++ b/open-sse/utils/sseConstants.js @@ -13,3 +13,11 @@ export const SSE_HEADERS_NO_BUFFER = { "Cache-Control": "no-cache", "X-Accel-Buffering": "no" }; + +// Variant for client-facing SSE responses (adds permissive CORS) +export const SSE_HEADERS_CORS = { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "Access-Control-Allow-Origin": "*" +};