File tree Expand file tree Collapse file tree 2 files changed +28
-5
lines changed
packages/middleware-recursion-detection/src Expand file tree Collapse file tree 2 files changed +28
-5
lines changed Original file line number Diff line number Diff line change @@ -70,6 +70,27 @@ describe(recursionDetectionMiddleware.name, () => {
7070 expect ( request . headers [ TRACE_ID_HEADER_NAME ] ) . toBe ( "some-real-trace-id" ) ;
7171 } ) ;
7272
73+ it ( `should NOT set ${ TRACE_ID_HEADER_NAME } header when the header is already set in all lowercase` , async ( ) => {
74+ process . env = {
75+ AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
76+ _X_AMZN_TRACE_ID : "some-trace-id" ,
77+ } ;
78+ const handler = recursionDetectionMiddleware ( { runtime : "node" } ) ( mockNextHandler , { } as any ) ;
79+ await handler ( {
80+ input : { } ,
81+ request : new HttpRequest ( {
82+ headers : {
83+ [ TRACE_ID_HEADER_NAME . toLowerCase ( ) ] : "some-real-trace-id" ,
84+ } ,
85+ } ) ,
86+ } ) ;
87+
88+ const { calls } = ( mockNextHandler as any ) . mock ;
89+ expect ( calls . length ) . toBe ( 1 ) ;
90+ const { request } = mockNextHandler . mock . calls [ 0 ] [ 0 ] ;
91+ expect ( request . headers [ TRACE_ID_HEADER_NAME . toLowerCase ( ) ] ) . toBe ( "some-real-trace-id" ) ;
92+ } ) ;
93+
7394 it ( "has no effect for browser runtime" , async ( ) => {
7495 process . env = {
7596 AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
Original file line number Diff line number Diff line change @@ -27,14 +27,16 @@ export const recursionDetectionMiddleware =
2727 < Output extends MetadataBearer > ( next : BuildHandler < any , Output > ) : BuildHandler < any , Output > =>
2828 async ( args : BuildHandlerArguments < any > ) : Promise < BuildHandlerOutput < Output > > => {
2929 const { request } = args ;
30- if (
31- ! HttpRequest . isInstance ( request ) ||
32- options . runtime !== "node" ||
33- request . headers . hasOwnProperty ( TRACE_ID_HEADER_NAME )
34- ) {
30+ if ( ! HttpRequest . isInstance ( request ) || options . runtime !== "node" ) {
3531 return next ( args ) ;
3632 }
33+ const traceIdHeader =
34+ Object . keys ( request . headers ?? { } ) . find ( ( h ) => h . toLowerCase ( ) === TRACE_ID_HEADER_NAME . toLowerCase ( ) ) ??
35+ TRACE_ID_HEADER_NAME ;
3736
37+ if ( request . headers . hasOwnProperty ( traceIdHeader ) ) {
38+ return next ( args ) ;
39+ }
3840 const functionName = process . env [ ENV_LAMBDA_FUNCTION_NAME ] ;
3941 const traceId = process . env [ ENV_TRACE_ID ] ;
4042 const nonEmptyString = ( str : unknown ) : str is string => typeof str === "string" && str . length > 0 ;
You can’t perform that action at this time.
0 commit comments