1616package com .vonage .client ;
1717
1818import java .net .URI ;
19+ import java .util .LinkedHashMap ;
20+ import java .util .Map ;
1921import java .util .Objects ;
2022import java .util .function .Function ;
2123
@@ -30,6 +32,7 @@ public class HttpConfig {
3032 private final String customUserAgent , apiBaseUri , restBaseUri , apiEuBaseUri , videoBaseUri ;
3133 private final Function <ApiRegion , String > regionalUriGetter ;
3234 private final URI proxy ;
35+ private final Map <String , String > customHeaders ;
3336
3437 private HttpConfig (Builder builder ) {
3538 if ((timeoutMillis = builder .timeoutMillis ) < 10 ) {
@@ -42,6 +45,7 @@ private HttpConfig(Builder builder) {
4245 apiEuBaseUri = builder .apiEuBaseUri ;
4346 regionalUriGetter = builder .regionalUriGetter ;
4447 customUserAgent = builder .customUserAgent ;
48+ customHeaders = builder .customHeaders ;
4549 }
4650
4751 /**
@@ -54,18 +58,39 @@ public int getTimeoutMillis() {
5458 return timeoutMillis ;
5559 }
5660
61+ /**
62+ * Returns the base URI for the "api" endpoints.
63+ *
64+ * @return The base URI for the "api" endpoints.
65+ */
5766 public String getApiBaseUri () {
5867 return apiBaseUri ;
5968 }
6069
70+ /**
71+ * Returns the base URI for the "rest" endpoints.
72+ *
73+ * @return The base URI for the "rest" endpoints.
74+ */
6175 public String getRestBaseUri () {
6276 return restBaseUri ;
6377 }
6478
79+ /**
80+ * Returns the base URI for the "video" endpoints.
81+ *
82+ * @return The base URI for the "video" endpoints.
83+ * @since 8.0.0
84+ */
6585 public String getVideoBaseUri () {
6686 return videoBaseUri ;
6787 }
6888
89+ /**
90+ * Returns the base URI for the "api-eu" endpoints.
91+ *
92+ * @return The base URI for the "api-eu" endpoints.
93+ */
6994 public String getApiEuBaseUri () {
7095 return apiEuBaseUri ;
7196 }
@@ -91,6 +116,16 @@ public String getCustomUserAgent() {
91116 return customUserAgent ;
92117 }
93118
119+ /**
120+ * Returns the additional headers to be included in all requests.
121+ *
122+ * @return A map of custom headers (may be empty if none are set).
123+ * @since 9.2.0
124+ */
125+ public Map <String , String > getCustomHeaders () {
126+ return customHeaders ;
127+ }
128+
94129 /**
95130 * Returns the proxy URL to use for the underlying HTTP client configuration.
96131 *
@@ -125,6 +160,7 @@ public static Builder builder() {
125160 public static final class Builder {
126161 private int timeoutMillis = 60_000 ;
127162 private URI proxy ;
163+ private Map <String , String > customHeaders = new LinkedHashMap <>(4 );
128164 private Function <ApiRegion , String > regionalUriGetter = region -> "https://" +region +".vonage.com" ;
129165 private String customUserAgent ,
130166 apiBaseUri = DEFAULT_API_BASE_URI ,
@@ -187,6 +223,20 @@ public Builder proxy(URI proxy) {
187223 return this ;
188224 }
189225
226+ /**
227+ * Add a custom HTTP header to all requests made with this client.
228+ *
229+ * @param name The header name.
230+ * @param value The header value.
231+ *
232+ * @return This builder.
233+ * @since 9.2.0
234+ */
235+ public Builder addRequestHeader (String name , String value ) {
236+ customHeaders .put (name , value );
237+ return this ;
238+ }
239+
190240 /**
191241 * Replaces the URI used in "api" endpoints.
192242 *
@@ -240,12 +290,11 @@ public Builder videoBaseUri(String videoBaseUri) {
240290 */
241291 public Builder baseUri (String baseUri ) {
242292 String sanitizedUri = sanitizeUri (baseUri );
243- regionalUriGetter (region -> sanitizedUri .replace ("://" , "://" + region + '.' ));
244293 apiBaseUri = sanitizedUri ;
245294 restBaseUri = sanitizedUri ;
246295 apiEuBaseUri = sanitizedUri ;
247296 videoBaseUri = sanitizedUri ;
248- return this ;
297+ return regionalUriGetter ( region -> sanitizedUri . replace ( "://" , "://" + region + '.' )) ;
249298 }
250299
251300 /**
0 commit comments