@@ -180,7 +180,7 @@ extension NetworkSessionDelegate: URLSessionDelegate {
180180
181181 case . deny( let reason) :
182182 networkSession. getLogger ( ) . logNetworkEvent (
183- message: reason,
183+ message: reason ?? " Denied for unspecified reasons " ,
184184 level: . error,
185185 file: #file,
186186 line: #line
@@ -270,7 +270,8 @@ extension NetworkSession {
270270 }
271271
272272 public func request< T: Decodable > ( endpoint: Endpoint ) async throws ( NetworkError) -> T {
273- let data = try await request ( endpoint: endpoint) as Data
273+ let response : NetworkResponse = try await request ( endpoint: endpoint)
274+ let data = response. body
274275
275276 // handle decoding corner cases
276277 var decoder = JSONDecoder ( )
@@ -306,8 +307,8 @@ extension NetworkSession {
306307
307308 @_disfavoredOverload
308309 public func request( endpoint: Endpoint ) async throws ( NetworkError) -> JSON {
309- let responseData = try await request ( endpoint: endpoint) as Data
310- guard let json = try ? JSON ( data: responseData ) else {
310+ let response : NetworkResponse = try await request ( endpoint: endpoint)
311+ guard let json = try ? JSON ( data: response . body ) else {
311312 throw URLError ( . cannotDecodeRawData) . asNetworkError ( )
312313 }
313314 return json
@@ -316,7 +317,7 @@ extension NetworkSession {
316317 // MARK: Raw
317318
318319 @discardableResult
319- public func request( endpoint: Endpoint ) async throws ( NetworkError) -> Data {
320+ public func request( endpoint: Endpoint ) async throws ( NetworkError) -> NetworkResponse {
320321 let endpointPath = await endpoint. path. resolveUrl ( )
321322 let url : URL
322323
@@ -413,7 +414,7 @@ extension NetworkSession {
413414
414415private extension NetworkSession {
415416
416- func executeRequest( request: inout URLRequest ) async throws ( NetworkError) -> Data {
417+ func executeRequest( request: inout URLRequest ) async throws ( NetworkError) -> NetworkResponse {
417418 // Content type
418419 let httpMethodSupportsBody = request. method. hasRequestBody
419420 let httpMethodHasBody = ( request. httpBody != nil )
@@ -450,17 +451,19 @@ private extension NetworkSession {
450451 do {
451452 let data = try await dataTaskProxy. data ( )
452453 closeProxyForTask ( dataTask)
453-
454+
454455 let validator = DefaultValidationProvider ( )
455- let statusCode = ( dataTask. response as? HTTPURLResponse ) ? . statusCode ?? - 1
456+ let response = dataTask. response
457+ let statusCode = ( response as? HTTPURLResponse ) ? . statusCode ?? - 1
458+
456459 try validator. validate ( statusCode: statusCode, data: data)
457- return data
460+ return NetworkResponse ( data: data , response : response )
458461 } catch let networkError {
459462 return try await retryRequest ( request: & request, error: networkError)
460463 }
461464 }
462465
463- func retryRequest( request: inout URLRequest , error networkError: NetworkError ) async throws ( NetworkError) -> Data {
466+ func retryRequest( request: inout URLRequest , error networkError: NetworkError ) async throws ( NetworkError) -> NetworkResponse {
464467 let retryResult = try await interceptor. retry ( urlRequest: & request, for: self , dueTo: networkError)
465468
466469 switch retryResult {
0 commit comments