Skip to content

Commit 58d9486

Browse files
cortinicometa-codesync[bot]
authored andcommitted
Expose DevSupportHttpClient as public API (#55778)
Summary: Pull Request resolved: #55778 Revert the `DevSupportRequestHeaders` extraction from D94354168 and instead make `DevSupportHttpClient` itself `public`. This gives external consumers (e.g. Expo Dev Launcher) direct access to the shared OkHttpClient instances and the `addRequestHeader`/`removeRequestHeader` methods without needing a separate intermediary singleton. Changes: - Remove `DevSupportRequestHeaders` class and its `request_headers` Buck target - Change `DevSupportHttpClient` from `internal` to `public` - Restore `addRequestHeader`/`removeRequestHeader` methods in `DevSupportHttpClient` - Revert `interfaces` Buck target to include all `interfaces/*.kt` files - Revert inspector Buck target to remove the `request_headers` dependency This looks breaking from the API prespective but `DevSupportRequestHeaders` was never shipped, so it's just an addittive change. Changelog: [Android][Added] - Make DevSupportHttpClient public for custom dev-support HTTP header registration Reviewed By: cipolleschi Differential Revision: D94515394 fbshipit-source-id: 709eb0e039f9b0a21d67b042dc9df0fc287720de
1 parent fc9940d commit 58d9486

File tree

3 files changed

+32
-61
lines changed

3 files changed

+32
-61
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,6 +2101,14 @@ public final class com/facebook/react/devsupport/StackTraceHelper$StackFrameImpl
21012101
public fun toJSON ()Lorg/json/JSONObject;
21022102
}
21032103

2104+
public final class com/facebook/react/devsupport/inspector/DevSupportHttpClient {
2105+
public static final field INSTANCE Lcom/facebook/react/devsupport/inspector/DevSupportHttpClient;
2106+
public static final fun addRequestHeader (Ljava/lang/String;Ljava/lang/String;)V
2107+
public final fun getHttpClient ()Lokhttp3/OkHttpClient;
2108+
public final fun getWebsocketClient ()Lokhttp3/OkHttpClient;
2109+
public static final fun removeRequestHeader (Ljava/lang/String;)V
2110+
}
2111+
21042112
public abstract interface class com/facebook/react/devsupport/interfaces/BundleLoadCallback {
21052113
public fun onError (Ljava/lang/Exception;)V
21062114
public abstract fun onSuccess ()V
@@ -2184,13 +2192,6 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevSupp
21842192
public abstract fun onResume ()V
21852193
}
21862194

2187-
public final class com/facebook/react/devsupport/interfaces/DevSupportRequestHeaders {
2188-
public static final field INSTANCE Lcom/facebook/react/devsupport/interfaces/DevSupportRequestHeaders;
2189-
public static final fun addRequestHeader (Ljava/lang/String;Ljava/lang/String;)V
2190-
public static final fun allHeaders ()Ljava/util/Map;
2191-
public static final fun removeRequestHeader (Ljava/lang/String;)V
2192-
}
2193-
21942195
public abstract interface class com/facebook/react/devsupport/interfaces/ErrorCustomizer {
21952196
public abstract fun customizeErrorInfo (Landroid/util/Pair;)Landroid/util/Pair;
21962197
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/DevSupportHttpClient.kt

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,29 @@
99

1010
package com.facebook.react.devsupport.inspector
1111

12-
import com.facebook.react.devsupport.interfaces.DevSupportRequestHeaders
12+
import java.util.concurrent.ConcurrentHashMap
1313
import java.util.concurrent.TimeUnit
1414
import okhttp3.Interceptor
1515
import okhttp3.OkHttpClient
1616

1717
/**
1818
* Shared [OkHttpClient] instances for devsupport networking. Uses a single connection pool and
19-
* dispatcher across all dev support HTTP and WebSocket usage. Injects custom request headers
20-
* registered via [DevSupportRequestHeaders] into every outgoing request.
19+
* dispatcher across all dev support HTTP and WebSocket usage. Supports injecting custom request
20+
* headers that are applied to every outgoing request via an OkHttp interceptor.
2121
*/
22-
internal object DevSupportHttpClient {
22+
public object DevSupportHttpClient {
23+
private val customHeaders = ConcurrentHashMap<String, String>()
24+
2325
private val headerInterceptor = Interceptor { chain ->
24-
val originalRequest = chain.request()
25-
val headers = DevSupportRequestHeaders.allHeaders()
26-
if (headers.isEmpty()) {
27-
chain.proceed(originalRequest)
28-
} else {
29-
val builder = originalRequest.newBuilder()
30-
for ((name, value) in headers) {
31-
builder.header(name, value)
32-
}
33-
chain.proceed(builder.build())
26+
val builder = chain.request().newBuilder()
27+
for ((name, value) in customHeaders) {
28+
builder.header(name, value)
3429
}
30+
chain.proceed(builder.build())
3531
}
3632

3733
/** Client for HTTP requests: connect=5s, write=disabled, read=disabled. */
38-
val httpClient: OkHttpClient =
34+
public val httpClient: OkHttpClient =
3935
OkHttpClient.Builder()
4036
.addInterceptor(headerInterceptor)
4137
.connectTimeout(5, TimeUnit.SECONDS)
@@ -44,10 +40,22 @@ internal object DevSupportHttpClient {
4440
.build()
4541

4642
/** Client for WebSocket connections: connect=10s, write=10s, read=disabled. */
47-
val websocketClient: OkHttpClient =
43+
public val websocketClient: OkHttpClient =
4844
httpClient
4945
.newBuilder()
5046
.connectTimeout(10, TimeUnit.SECONDS)
5147
.writeTimeout(10, TimeUnit.SECONDS)
5248
.build()
49+
50+
/** Add a custom header to be included in all requests made through both clients. */
51+
@JvmStatic
52+
public fun addRequestHeader(name: String, value: String) {
53+
customHeaders[name] = value
54+
}
55+
56+
/** Remove a previously added custom header. */
57+
@JvmStatic
58+
public fun removeRequestHeader(name: String) {
59+
customHeaders.remove(name)
60+
}
5361
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportRequestHeaders.kt

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)