@@ -17,7 +17,8 @@ import { ERR_UNSUPPORTED_CLASS_METHOD_DECORATOR_RUNTIME_BEHAVIOR } from "./Const
1717export type ControllerMethodArg =
1818 | "param"
1919 | "body"
20- | "query" ;
20+ | "query"
21+ | "headers" ;
2122
2223// an enhanced version of a (decorated) method which
2324// is declared in the (decorated) Controller Class
@@ -127,22 +128,26 @@ function getEnhancedHandler(
127128 try {
128129 parsedReqBody = await _internal . parseOakReqBody ( ctx ) ;
129130 } catch ( e ) {
130- return ctx . throw ( 400 , `Unable to parse request body: ${ e . message } ` , {
131- stack : e . stack ,
132- } ) ;
131+ return ctx . throw (
132+ 400 ,
133+ `Unable to parse request body: ${ ( e as Error ) . message } ` ,
134+ {
135+ stack : ( e as Error ) . stack ,
136+ } ,
137+ ) ;
133138 }
134139
135140 const parsedReqSearchParams : Record < string , string > = { } ;
136141 try {
137- ctx . request . url . searchParams . forEach ( ( value , key ) =>
142+ ctx . request . url . searchParams . forEach ( ( value : string , key : string ) =>
138143 parsedReqSearchParams [ key ] = value
139144 ) ;
140145 } catch ( e ) {
141146 return ctx . throw (
142147 400 ,
143- `Unable to parse request search params: ${ e . message } ` ,
148+ `Unable to parse request search params: ${ ( e as Error ) . message } ` ,
144149 {
145- stack : e . stack ,
150+ stack : ( e as Error ) . stack ,
146151 } ,
147152 ) ;
148153 }
@@ -164,6 +169,13 @@ function getEnhancedHandler(
164169 // search query a.k.a URLSearchParams
165170 decoratedArgs . push ( parsedReqSearchParams ) ;
166171 break ;
172+ case p === "headers" : {
173+ // request headers
174+ const headers : Record < string , string > = { } ;
175+ ctx . request . headers . forEach ( ( v : string , k : string ) => headers [ k ] = v ) ;
176+ decoratedArgs . push ( headers ) ;
177+ break ;
178+ }
167179 case [ "ctx" , "context" ] . includes ( p ) :
168180 // `ctx` or `context` is supported by default (as the last argument)
169181 // but can also be declared explicitly
0 commit comments