From b435e7308690da4e3c5b9622654c7c81ef3f6d26 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 1 Jun 2026 18:58:11 +0800 Subject: [PATCH] fix: forward device pod session through cloud web --- internal/dev-entrypoint/cloud-web-proxy.mjs | 3 ++- internal/dev-entrypoint/http.test.mjs | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/dev-entrypoint/cloud-web-proxy.mjs b/internal/dev-entrypoint/cloud-web-proxy.mjs index aa27a688..7fc4755a 100644 --- a/internal/dev-entrypoint/cloud-web-proxy.mjs +++ b/internal/dev-entrypoint/cloud-web-proxy.mjs @@ -12,7 +12,8 @@ const FORWARDED_REQUEST_HEADERS = Object.freeze([ "x-trace-id", "x-request-id", "x-actor-id", - "x-source-service-id" + "x-source-service-id", + "x-hwlab-session-token" ]); export function isCloudWebSseRoute(pathname) { diff --git a/internal/dev-entrypoint/http.test.mjs b/internal/dev-entrypoint/http.test.mjs index 626d9ae9..3caf3034 100644 --- a/internal/dev-entrypoint/http.test.mjs +++ b/internal/dev-entrypoint/http.test.mjs @@ -2,6 +2,7 @@ import assert from "node:assert/strict"; import { createServer } from "node:http"; import test from "node:test"; +import { upstreamRequestHeaders } from "./cloud-web-proxy.mjs"; import { cloudWebProxyRoutePolicy } from "./cloud-web-routes.mjs"; import { proxyHttpRequest } from "./http.mjs"; @@ -83,6 +84,23 @@ test("cloud web route policy delegates auth authority to cloud-api", () => { }); }); +test("cloud web proxy forwards device-pod session tokens without forwarding bearer credentials", () => { + const headers = upstreamRequestHeaders({ + headers: { + accept: "application/json", + authorization: "Bearer should-not-forward", + cookie: "hwlab_session=session-a", + "x-hwlab-session-token": "device-pod-session-a", + "x-trace-id": "trc_device_pod_session_proxy" + } + }); + + assert.equal(headers["x-hwlab-session-token"], "device-pod-session-a"); + assert.equal(headers.cookie, "hwlab_session=session-a"); + assert.equal(headers["x-trace-id"], "trc_device_pod_session_proxy"); + assert.equal(headers.authorization, undefined); +}); + test("dev entrypoint proxy allows slow first response beyond legacy 4500ms", async () => { const upstream = createServer((request, response) => { request.resume();