diff --git a/src/main/java/com/merge/api/MergeApiClientBuilder.java b/src/main/java/com/merge/api/MergeApiClientBuilder.java index 005532bc..9ea465bd 100644 --- a/src/main/java/com/merge/api/MergeApiClientBuilder.java +++ b/src/main/java/com/merge/api/MergeApiClientBuilder.java @@ -5,6 +5,9 @@ import com.merge.api.core.ClientOptions; import com.merge.api.core.Environment; +import okhttp3.OkHttpClient; + +import java.util.function.Consumer; public final class MergeApiClientBuilder { private ClientOptions.Builder clientOptionsBuilder = ClientOptions.builder(); @@ -15,6 +18,8 @@ public final class MergeApiClientBuilder { private Environment environment = Environment.PRODUCTION; + private Consumer okHttpConfigurer; + /** * Sets apiKey */ @@ -41,6 +46,11 @@ public MergeApiClientBuilder url(String url) { return this; } + public MergeApiClientBuilder okHttpConfigurer(Consumer okHttpConfigurer) { + this.okHttpConfigurer = okHttpConfigurer; + return this; + } + public MergeApiClient build() { if (apiKey == null) { throw new RuntimeException("Please provide apiKey"); @@ -50,6 +60,9 @@ public MergeApiClient build() { this.clientOptionsBuilder.addHeader("X-Account-Token", this.accountToken); } clientOptionsBuilder.environment(this.environment); + if (okHttpConfigurer != null) { + clientOptionsBuilder.addOkHttpConfigurer(okHttpConfigurer); + } return new MergeApiClient(clientOptionsBuilder.build()); } } diff --git a/src/main/java/com/merge/api/core/ClientOptions.java b/src/main/java/com/merge/api/core/ClientOptions.java index f6e4307f..a0d85f12 100644 --- a/src/main/java/com/merge/api/core/ClientOptions.java +++ b/src/main/java/com/merge/api/core/ClientOptions.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.function.Supplier; import okhttp3.OkHttpClient; @@ -76,6 +77,8 @@ public static Builder builder() { public static final class Builder { private Environment environment; + private Consumer okHttpConfigurer; + private final Map headers = new HashMap<>(); private final Map> headerSuppliers = new HashMap<>(); @@ -95,11 +98,20 @@ public Builder addHeader(String key, Supplier value) { return this; } + public Builder addOkHttpConfigurer(Consumer okHttpConfigurer) { + this.okHttpConfigurer = okHttpConfigurer; + return this; + } + public ClientOptions build() { - OkHttpClient okhttpClient = new OkHttpClient.Builder() - .addInterceptor(new RetryInterceptor(3)) - .build(); - return new ClientOptions(environment, headers, headerSuppliers, okhttpClient); + OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder() + .addInterceptor(new RetryInterceptor(3)); + + if (okHttpConfigurer != null) { + okHttpConfigurer.accept(okHttpClientBuilder); + } + + return new ClientOptions(environment, headers, headerSuppliers, okHttpClientBuilder.build()); } } }