forked from loafle/openapi-generator-original
[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:
parent
dc3718cd5c
commit
f6c0b4ad6b
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user