@@ -80,10 +80,69 @@ public class {{ options.name }}Client {
8080 urlRequest. allHTTPHeaderFields ? [ key] = value
8181 }
8282
83+ let cancellableRequest = Cancellable { { options. name } } Request( request: request. asAny ( ) )
84+
8385 urlRequest = requestBehaviour. modifyRequest ( urlRequest)
8486
85- let cancellableRequest = Cancellable { { options. name } } Request( request: request. asAny ( ) )
87+ if request. isAuthorizationRequired
88+ && request. customHeaders [ HttpHeaderFields . authorization. rawValue] == nil
89+ && IDKit . isSessionAvailable {
90+ IDKit . refreshToken { [ weak self] result in
91+ guard let self else { return }
92+ guard case let . failure( error) = result else {
93+ guard case let . success( accessToken) = result,
94+ let accessToken else { return }
95+ urlRequest. setValue ( " Bearer \( accessToken) " ,
96+ forHTTPHeaderField: HttpHeaderFields . authorization. rawValue)
97+ self . validateNetworkRequest ( request: request,
98+ urlRequest: urlRequest,
99+ cancellableRequest: cancellableRequest,
100+ requestBehaviour: requestBehaviour,
101+ currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
102+ currentRetryCount: currentRetryCount,
103+ completionQueue: completionQueue,
104+ complete: complete)
105+ return
106+ }
107+
108+ if case . failedTokenRefresh = error {
109+ completionQueue. async {
110+ let response = { { options. name } } Response< T> ( request: request,
111+ result: . failure( APIClientError
112+ . unexpectedStatusCode ( statusCode: 401 ,
113+ data: Data ( " UNAUTHORIZED " . utf8) ) ) )
114+ complete ( response)
115+ }
116+ } else {
117+ completionQueue. async {
118+ let response = { { options. name } } Response< T> ( request: request,
119+ result: . failure( APIClientError . unknownError ( error) ) )
120+ complete ( response)
121+ }
122+ }
123+ }
124+ } else {
125+ validateNetworkRequest ( request: request,
126+ urlRequest: urlRequest,
127+ cancellableRequest: cancellableRequest,
128+ requestBehaviour: requestBehaviour,
129+ currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
130+ currentRetryCount: currentRetryCount,
131+ completionQueue: completionQueue,
132+ complete: complete)
133+ }
134+
135+ return cancellableRequest
136+ }
86137
138+ private func validateNetworkRequest< T> ( request: { { options. name } } Request< T> ,
139+ urlRequest: URLRequest,
140+ cancellableRequest: Cancellable{ { options. name } } Request,
141+ requestBehaviour: { { options. name } } RequestBehaviourGroup,
142+ currentUnauthorizedRetryCount: Int,
143+ currentRetryCount: Int,
144+ completionQueue: DispatchQueue,
145+ complete: @escaping ( { { options. name } } Response< T> ) - > Void) {
87146 requestBehaviour. validate ( urlRequest) { result in
88147 switch result {
89148 case . success( let urlRequest) :
@@ -101,7 +160,6 @@ public class {{ options.name }}Client {
101160 complete ( response)
102161 }
103162 }
104- return cancellableRequest
105163 }
106164
107165 private func makeNetworkRequest< T> ( request: { { options. name } } Request< T> ,
@@ -267,9 +325,10 @@ public class {{ options.name }}Client {
267325 }
268326
269327 if response. statusCode == HttpStatusCode . unauthorized. rawValue
328+ && request. customHeaders [ HttpHeaderFields . authorization. rawValue] == nil
270329 && currentUnauthorizedRetryCount < maxUnauthorizedRetryCount
271330 && IDKit . isSessionAvailable {
272- IDKit . refreshToken { [ weak self] result in
331+ IDKit . refreshToken ( force : true ) { [ weak self] result in
273332 guard case . failure( let error) = result else {
274333 self ? . makeRequest ( request,
275334 behaviours: requestBehaviour. behaviours,
0 commit comments