66use ApiClients \Foundation \Middleware \MiddlewareInterface ;
77use Psr \Http \Message \RequestInterface ;
88use Psr \Http \Message \ResponseInterface ;
9+ use Psr \Http \Message \UriInterface ;
910use Psr \Log \LoggerInterface ;
1011use React \Promise \CancellablePromiseInterface ;
1112use Throwable ;
1415
1516class LoggerMiddleware implements MiddlewareInterface
1617{
17- const REQUEST = 'request ' ;
18- const RESPONSE = 'response ' ;
19- const ERROR = 'error ' ;
18+ private const REQUEST = 'request ' ;
19+ private const RESPONSE = 'response ' ;
20+ private const ERROR = 'error ' ;
2021
2122 /**
2223 * @var LoggerInterface
@@ -43,7 +44,10 @@ public function pre(
4344 }
4445
4546 $ this ->context [$ transactionId ][self ::REQUEST ]['method ' ] = $ request ->getMethod ();
46- $ this ->context [$ transactionId ][self ::REQUEST ]['uri ' ] = (string )$ request ->getUri ();
47+ $ this ->context [$ transactionId ][self ::REQUEST ]['uri ' ] = (string )$ this ->stripQueryItems (
48+ $ request ->getUri (),
49+ $ options
50+ );
4751 $ this ->context [$ transactionId ][self ::REQUEST ]['protocol_version ' ] = (string )$ request ->getProtocolVersion ();
4852 $ ignoreHeaders = $ options [self ::class][Options::IGNORE_HEADERS ] ?? [];
4953 $ this ->context [$ transactionId ] = $ this ->iterateHeaders (
@@ -53,6 +57,13 @@ public function pre(
5357 $ ignoreHeaders
5458 );
5559
60+ if (!isset ($ options [self ::class][Options::URL_LEVEL ])) {
61+ return resolve ($ request );
62+ }
63+
64+ $ message = 'Requesting: ' . $ this ->context [$ transactionId ][self ::REQUEST ]['uri ' ];
65+ $ this ->logger ->log ($ options [self ::class][Options::URL_LEVEL ], $ message , $ this ->context [$ transactionId ]);
66+
5667 return resolve ($ request );
5768 }
5869
@@ -164,4 +175,14 @@ private function addResponseToContext(
164175
165176 return $ context ;
166177 }
178+
179+ private function stripQueryItems (UriInterface $ uri , array $ options ): UriInterface
180+ {
181+ parse_str ($ uri ->getQuery (), $ query );
182+ foreach ($ options [self ::class][Options::IGNORE_URI_QUERY_ITEMS ] ?? [] as $ item ) {
183+ unset($ query [$ item ], $ query [$ item . '[] ' ]);
184+ }
185+
186+ return $ uri ->withQuery (http_build_query ($ query ));
187+ }
167188}
0 commit comments