[swift6] adjust RequestInterceptor to pass RequestBuilder instead of OpenapiClient (#19904)

* inject requestBuilder instead of openAPIClient

* adjust template

* run samples

* fix tests

* fix test

* w

* fix
This commit is contained in:
Jonas Reichert 2024-10-18 10:45:35 +02:00 committed by GitHub
parent dc3718cd5c
commit f6c0b4ad6b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 83 additions and 76 deletions

View File

@ -150,14 +150,14 @@ fileprivate class URLSessionRequestBuilderConfiguration: @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ extension JSONDataEncoding: ParameterEncoding {}
} }
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} protocol OpenAPIInterceptor { {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} class DefaultOpenAPIInterceptor: OpenAPIInterceptor { {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendab
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ internal enum OpenAPIInterceptorRetry {
} }
internal protocol OpenAPIInterceptor { internal protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
internal class DefaultOpenAPIInterceptor: OpenAPIInterceptor { internal class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }

View File

@ -12,7 +12,14 @@ import PetstoreClient
public class BearerOpenAPIInterceptor: OpenAPIInterceptor { public class BearerOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
guard requestBuilder.requiresAuthentication else {
// no authentication required
completion(.success(urlRequest))
return
}
refreshTokenIfDoesntExist { token in refreshTokenIfDoesntExist { token in
// Change the current url request // Change the current url request
@ -20,13 +27,13 @@ public class BearerOpenAPIInterceptor: OpenAPIInterceptor {
newUrlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") newUrlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
// Change the global headers // Change the global headers
openAPIClient.customHeaders["Authorization"] = "Bearer \(token)" requestBuilder.openAPIClient.customHeaders["Authorization"] = "Bearer \(token)"
completion(.success(newUrlRequest)) completion(.success(newUrlRequest))
} }
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
// We will analyse the response to see if it's a 401, and if it's a 401, we will refresh the token and retry the request // We will analyse the response to see if it's a 401, and if it's a 401, we will refresh the token and retry the request
refreshTokenIfUnauthorizedRequestResponse( refreshTokenIfUnauthorizedRequestResponse(
data: data, data: data,
@ -37,7 +44,7 @@ public class BearerOpenAPIInterceptor: OpenAPIInterceptor {
if wasTokenRefreshed, let newToken = newToken { if wasTokenRefreshed, let newToken = newToken {
// Change the global headers // Change the global headers
openAPIClient.customHeaders["Authorization"] = "Bearer \(newToken)" requestBuilder.openAPIClient.customHeaders["Authorization"] = "Bearer \(newToken)"
completion(.retry) completion(.retry)
} else { } else {

View File

@ -150,14 +150,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T>, @unchecked Sendable {
do { do {
let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, openAPIClient: openAPIClient) { result in openAPIClient.interceptor.intercept(urlRequest: request, urlSession: urlSession, requestBuilder: self) { result in
switch result { switch result {
case .success(let modifiedRequest): case .success(let modifiedRequest):
let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in let dataTask = urlSession.dataTaskFromProtocol(with: modifiedRequest) { data, response, error in
self.cleanupRequest() self.cleanupRequest()
if let response, let error { if let response, let error {
self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, openAPIClient: self.openAPIClient, data: data, response: response, error: error) { retry in self.openAPIClient.interceptor.retry(urlRequest: modifiedRequest, urlSession: urlSession, requestBuilder: self, data: data, response: response, error: error) { retry in
switch retry { switch retry {
case .retry: case .retry:
self.execute(completion: completion) self.execute(completion: completion)
@ -692,19 +692,19 @@ public enum OpenAPIInterceptorRetry {
} }
public protocol OpenAPIInterceptor { public protocol OpenAPIInterceptor {
func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, Error>) -> Void) func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, Error>) -> Void)
func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void)
} }
public class DefaultOpenAPIInterceptor: OpenAPIInterceptor { public class DefaultOpenAPIInterceptor: OpenAPIInterceptor {
public init() {} public init() {}
public func intercept(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, completion: @escaping (Result<URLRequest, any Error>) -> Void) { public func intercept<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, completion: @escaping (Result<URLRequest, any Error>) -> Void) {
completion(.success(urlRequest)) completion(.success(urlRequest))
} }
public func retry(urlRequest: URLRequest, urlSession: URLSessionProtocol, openAPIClient: OpenAPIClient, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) { public func retry<T>(urlRequest: URLRequest, urlSession: URLSessionProtocol, requestBuilder: RequestBuilder<T>, data: Data?, response: URLResponse, error: Error, completion: @escaping (OpenAPIInterceptorRetry) -> Void) {
completion(.dontRetry) completion(.dontRetry)
} }
} }