diff --git a/packages/middleware-recursion-detection/src/index.spec.ts b/packages/middleware-recursion-detection/src/index.spec.ts index 5b2452816021..2d4aa06bab83 100644 --- a/packages/middleware-recursion-detection/src/index.spec.ts +++ b/packages/middleware-recursion-detection/src/index.spec.ts @@ -70,6 +70,27 @@ describe(recursionDetectionMiddleware.name, () => { expect(request.headers[TRACE_ID_HEADER_NAME]).toBe("some-real-trace-id"); }); + it(`should NOT set ${TRACE_ID_HEADER_NAME} header when the header is already set in all lowercase`, async () => { + process.env = { + AWS_LAMBDA_FUNCTION_NAME: "some-function", + _X_AMZN_TRACE_ID: "some-trace-id", + }; + const handler = recursionDetectionMiddleware({ runtime: "node" })(mockNextHandler, {} as any); + await handler({ + input: {}, + request: new HttpRequest({ + headers: { + [TRACE_ID_HEADER_NAME.toLowerCase()]: "some-real-trace-id", + }, + }), + }); + + const { calls } = (mockNextHandler as any).mock; + expect(calls.length).toBe(1); + const { request } = mockNextHandler.mock.calls[0][0]; + expect(request.headers[TRACE_ID_HEADER_NAME.toLowerCase()]).toBe("some-real-trace-id"); + }); + it("has no effect for browser runtime", async () => { process.env = { AWS_LAMBDA_FUNCTION_NAME: "some-function", diff --git a/packages/middleware-recursion-detection/src/index.ts b/packages/middleware-recursion-detection/src/index.ts index 42fb46ecfdc9..1ac9e78f677e 100644 --- a/packages/middleware-recursion-detection/src/index.ts +++ b/packages/middleware-recursion-detection/src/index.ts @@ -30,7 +30,9 @@ export const recursionDetectionMiddleware = if ( !HttpRequest.isInstance(request) || options.runtime !== "node" || - request.headers.hasOwnProperty(TRACE_ID_HEADER_NAME) + Object.keys(request.headers).some( + (key) => key.toLowerCase() === TRACE_ID_HEADER_NAME.toLowerCase() + ) ) { return next(args); }