@luciq/react-native 19.6.0-51917-SNAPSHOT → 19.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +174 -111
- package/android/native.gradle +1 -1
- package/android/src/main/java/ai/luciq/reactlibrary/Constants.java +3 -0
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqAPMModule.java +13 -14
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerModule.java +19 -21
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativeModule.java +131 -132
- package/android/src/main/java/ai/luciq/reactlibrary/utils/EventEmitterModule.java +3 -5
- package/android/src/main/java/ai/luciq/reactlibrary/utils/LuciqRNLogger.java +53 -0
- package/dist/utils/LuciqUtils.js +1 -0
- package/ios/RNLuciq/LuciqNetworkLoggerBridge.m +30 -6
- package/ios/RNLuciq/LuciqReactBridge.m +21 -4
- package/ios/RNLuciq/Util/LuciqRNLogger.h +32 -0
- package/ios/RNLuciq/Util/LuciqRNLogger.m +57 -0
- package/ios/native.rb +1 -1
- package/package.json +2 -1
- package/src/utils/LuciqUtils.ts +5 -0
|
@@ -4,7 +4,7 @@ package ai.luciq.reactlibrary;
|
|
|
4
4
|
import static ai.luciq.apm.configuration.cp.APMFeature.APM_NETWORK_PLUGIN_INSTALLED;
|
|
5
5
|
import static ai.luciq.apm.configuration.cp.APMFeature.CP_NATIVE_INTERCEPTION_ENABLED;
|
|
6
6
|
|
|
7
|
-
import
|
|
7
|
+
import static ai.luciq.reactlibrary.Constants.NET_TAG;
|
|
8
8
|
|
|
9
9
|
import androidx.annotation.NonNull;
|
|
10
10
|
|
|
@@ -20,6 +20,7 @@ import ai.luciq.apm.InternalAPM;
|
|
|
20
20
|
import ai.luciq.apm.sanitization.OnCompleteCallback;
|
|
21
21
|
import ai.luciq.library.logging.listeners.networklogs.NetworkLogSnapshot;
|
|
22
22
|
import ai.luciq.reactlibrary.utils.EventEmitterModule;
|
|
23
|
+
import ai.luciq.reactlibrary.utils.LuciqRNLogger;
|
|
23
24
|
import ai.luciq.reactlibrary.utils.MainThreadHandler;
|
|
24
25
|
|
|
25
26
|
import org.json.JSONException;
|
|
@@ -32,8 +33,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
|
32
33
|
|
|
33
34
|
public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
34
35
|
|
|
35
|
-
private static final String NET_TAG = "LCQ-RN-NET";
|
|
36
|
-
|
|
37
36
|
public final ConcurrentHashMap<String, OnCompleteCallback<NetworkLogSnapshot>> callbackMap = new ConcurrentHashMap<String, OnCompleteCallback<NetworkLogSnapshot>>();
|
|
38
37
|
|
|
39
38
|
public RNLuciqNetworkLoggerModule(ReactApplicationContext reactContext) {
|
|
@@ -60,7 +59,7 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
60
59
|
|
|
61
60
|
private boolean getFlagValue(String key) {
|
|
62
61
|
boolean value = InternalAPM._isFeatureEnabledCP(key, "");
|
|
63
|
-
|
|
62
|
+
LuciqRNLogger.d(NET_TAG, "[getFlagValue] key=" + key + ", value=" + value);
|
|
64
63
|
return value;
|
|
65
64
|
}
|
|
66
65
|
|
|
@@ -90,16 +89,16 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
90
89
|
*/
|
|
91
90
|
@ReactMethod
|
|
92
91
|
public void isNativeInterceptionEnabled(Promise promise) {
|
|
93
|
-
|
|
92
|
+
LuciqRNLogger.d(NET_TAG, "[isNativeInterceptionEnabled] Querying CP_NATIVE_INTERCEPTION_ENABLED flag");
|
|
94
93
|
MainThreadHandler.runOnMainThread(new Runnable() {
|
|
95
94
|
@Override
|
|
96
95
|
public void run() {
|
|
97
96
|
try {
|
|
98
97
|
boolean enabled = getFlagValue(CP_NATIVE_INTERCEPTION_ENABLED);
|
|
99
|
-
|
|
98
|
+
LuciqRNLogger.d(NET_TAG, "[isNativeInterceptionEnabled] Result=" + enabled);
|
|
100
99
|
promise.resolve(enabled);
|
|
101
100
|
} catch (Exception e) {
|
|
102
|
-
|
|
101
|
+
LuciqRNLogger.e(NET_TAG, "[isNativeInterceptionEnabled] Error — falling back to false (JS interceptor)", e);
|
|
103
102
|
e.printStackTrace();
|
|
104
103
|
promise.resolve(false);
|
|
105
104
|
}
|
|
@@ -115,16 +114,16 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
115
114
|
*/
|
|
116
115
|
@ReactMethod
|
|
117
116
|
public void hasAPMNetworkPlugin(Promise promise) {
|
|
118
|
-
|
|
117
|
+
LuciqRNLogger.d(NET_TAG, "[hasAPMNetworkPlugin] Querying APM_NETWORK_PLUGIN_INSTALLED flag");
|
|
119
118
|
MainThreadHandler.runOnMainThread(new Runnable() {
|
|
120
119
|
@Override
|
|
121
120
|
public void run() {
|
|
122
121
|
try {
|
|
123
122
|
boolean hasPlugin = getFlagValue(APM_NETWORK_PLUGIN_INSTALLED);
|
|
124
|
-
|
|
123
|
+
LuciqRNLogger.d(NET_TAG, "[hasAPMNetworkPlugin] Result=" + hasPlugin);
|
|
125
124
|
promise.resolve(hasPlugin);
|
|
126
125
|
} catch (Exception e) {
|
|
127
|
-
|
|
126
|
+
LuciqRNLogger.e(NET_TAG, "[hasAPMNetworkPlugin] Error — falling back to false", e);
|
|
128
127
|
e.printStackTrace();
|
|
129
128
|
promise.resolve(false);
|
|
130
129
|
}
|
|
@@ -136,14 +135,14 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
136
135
|
|
|
137
136
|
@ReactMethod
|
|
138
137
|
public void registerNetworkLogsListener() {
|
|
139
|
-
|
|
138
|
+
LuciqRNLogger.d(NET_TAG, "[registerNetworkLogsListener] Registering network log sanitizer");
|
|
140
139
|
MainThreadHandler.runOnMainThread(new Runnable() {
|
|
141
140
|
@Override
|
|
142
141
|
public void run() {
|
|
143
142
|
InternalAPM._registerNetworkLogSanitizer((networkLogSnapshot, onCompleteCallback) -> {
|
|
144
143
|
final String id = String.valueOf(onCompleteCallback.hashCode());
|
|
145
144
|
callbackMap.put(id, onCompleteCallback);
|
|
146
|
-
|
|
145
|
+
LuciqRNLogger.d(NET_TAG, "[NetworkLogSanitizer] Received snapshot — id=" + id + ", url=" + networkLogSnapshot.getUrl() + ", responseCode=" + networkLogSnapshot.getResponseCode() + ", callbackMapSize=" + callbackMap.size());
|
|
147
146
|
|
|
148
147
|
WritableMap networkSnapshotParams = Arguments.createMap();
|
|
149
148
|
networkSnapshotParams.putString("id", id);
|
|
@@ -161,7 +160,7 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
161
160
|
}
|
|
162
161
|
|
|
163
162
|
sendEvent(Constants.LCQ_NETWORK_LOGGER_HANDLER, networkSnapshotParams);
|
|
164
|
-
|
|
163
|
+
LuciqRNLogger.d(NET_TAG, "[NetworkLogSanitizer] Sent event to JS: " + Constants.LCQ_NETWORK_LOGGER_HANDLER + " for " + networkLogSnapshot.getUrl());
|
|
165
164
|
});
|
|
166
165
|
}
|
|
167
166
|
});
|
|
@@ -169,12 +168,12 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
169
168
|
|
|
170
169
|
@ReactMethod
|
|
171
170
|
public void resetNetworkLogsListener() {
|
|
172
|
-
|
|
171
|
+
LuciqRNLogger.d(NET_TAG, "[resetNetworkLogsListener] Clearing network log sanitizer, callbackMapSize=" + callbackMap.size());
|
|
173
172
|
MainThreadHandler.runOnMainThread(new Runnable() {
|
|
174
173
|
@Override
|
|
175
174
|
public void run() {
|
|
176
175
|
InternalAPM._registerNetworkLogSanitizer(null);
|
|
177
|
-
|
|
176
|
+
LuciqRNLogger.d(NET_TAG, "[resetNetworkLogsListener] Sanitizer cleared");
|
|
178
177
|
}
|
|
179
178
|
});
|
|
180
179
|
}
|
|
@@ -189,7 +188,7 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
189
188
|
ReadableMap requestHeaders,
|
|
190
189
|
ReadableMap responseHeaders
|
|
191
190
|
) {
|
|
192
|
-
|
|
191
|
+
LuciqRNLogger.d(NET_TAG, "[updateNetworkLogSnapshot] callbackID=" + callbackID + ", url=" + url + ", responseCode=" + responseCode + ", callbackMapSize=" + callbackMap.size());
|
|
193
192
|
try {
|
|
194
193
|
Map<String, Object> requestHeadersMap = convertReadableMapToMap(requestHeaders);
|
|
195
194
|
Map<String, Object> responseHeadersMap = convertReadableMapToMap(responseHeaders);
|
|
@@ -198,20 +197,19 @@ public class RNLuciqNetworkLoggerModule extends EventEmitterModule {
|
|
|
198
197
|
if (!url.isEmpty()) {
|
|
199
198
|
modifiedSnapshot = new NetworkLogSnapshot(url, requestHeadersMap, requestBody, responseHeadersMap, responseBody, responseCode);
|
|
200
199
|
} else {
|
|
201
|
-
|
|
200
|
+
LuciqRNLogger.d(NET_TAG, "[updateNetworkLogSnapshot] Empty URL — snapshot will be null (request filtered/removed)");
|
|
202
201
|
}
|
|
203
202
|
|
|
204
203
|
final OnCompleteCallback<NetworkLogSnapshot> callback = callbackMap.get(callbackID);
|
|
205
204
|
if (callback != null) {
|
|
206
205
|
callback.onComplete(modifiedSnapshot);
|
|
207
206
|
callbackMap.remove(callbackID);
|
|
208
|
-
|
|
207
|
+
LuciqRNLogger.d(NET_TAG, "[updateNetworkLogSnapshot] Callback invoked and removed for " + callbackID + ", remaining=" + callbackMap.size());
|
|
209
208
|
} else {
|
|
210
|
-
|
|
209
|
+
LuciqRNLogger.e(NET_TAG, "[updateNetworkLogSnapshot] No callback found for callbackID=" + callbackID + " — possible leak or duplicate call, mapKeys=" + callbackMap.keySet());
|
|
211
210
|
}
|
|
212
211
|
} catch (Exception e) {
|
|
213
|
-
|
|
214
|
-
Log.e("IB-CP-Bridge", "LuciqNetworkLogger.updateNetworkLogSnapshot failed to parse the network snapshot object.");
|
|
212
|
+
LuciqRNLogger.e(NET_TAG, "[updateNetworkLogSnapshot] Exception processing snapshot: " + e.getMessage() + " for callbackID=" + callbackID, e);
|
|
215
213
|
}
|
|
216
214
|
}
|
|
217
215
|
}
|