@luciq/react-native 19.3.0 → 19.4.0-44237-SNAPSHOT

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.
Files changed (110) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +118 -0
  3. package/RNLuciq.podspec +6 -2
  4. package/android/build.gradle +25 -0
  5. package/android/native.gradle +1 -1
  6. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqAPMModule.java +3 -3
  7. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqBugReportingModule.java +28 -24
  8. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqCrashReportingModule.java +18 -7
  9. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsModule.java +1 -2
  10. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerModule.java +24 -29
  11. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativeModule.java +112 -16
  12. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativePackage.java +2 -0
  13. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqRepliesModule.java +4 -16
  14. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSessionReplayModule.java +5 -16
  15. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSurveysModule.java +7 -15
  16. package/android/src/main/java/ai/luciq/reactlibrary/utils/ReportUtil.java +0 -7
  17. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +9 -0
  18. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +33 -0
  19. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +33 -0
  20. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +9 -0
  21. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +9 -0
  22. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +33 -0
  23. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +33 -0
  24. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +33 -0
  25. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +33 -0
  26. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +11 -0
  27. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +22 -0
  28. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +22 -0
  29. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +10 -0
  30. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +10 -0
  31. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +22 -0
  32. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +22 -0
  33. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +22 -0
  34. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +22 -0
  35. package/dist/modules/BugReporting.js +3 -3
  36. package/dist/modules/Luciq.d.ts +15 -0
  37. package/dist/modules/Luciq.js +22 -1
  38. package/dist/modules/Replies.js +1 -1
  39. package/dist/modules/Surveys.js +2 -2
  40. package/dist/native/NativeBugReporting.d.ts +4 -4
  41. package/dist/native/NativeCrashReporting.d.ts +2 -2
  42. package/dist/native/NativeLuciq.d.ts +5 -3
  43. package/dist/native/NativePackage.js +25 -2
  44. package/dist/native/NativeReplies.d.ts +1 -1
  45. package/dist/native/NativeSurveys.d.ts +2 -2
  46. package/dist/native/specs/NativeAPM.d.ts +21 -0
  47. package/dist/native/specs/NativeAPM.js +2 -0
  48. package/dist/native/specs/NativeBugReporting.d.ts +29 -0
  49. package/dist/native/specs/NativeBugReporting.js +2 -0
  50. package/dist/native/specs/NativeCrashReporting.d.ts +12 -0
  51. package/dist/native/specs/NativeCrashReporting.js +2 -0
  52. package/dist/native/specs/NativeFeatureRequests.d.ts +8 -0
  53. package/dist/native/specs/NativeFeatureRequests.js +2 -0
  54. package/dist/native/specs/NativeLuciq.d.ts +80 -0
  55. package/dist/native/specs/NativeLuciq.js +2 -0
  56. package/dist/native/specs/NativeNetworkLogger.d.ts +16 -0
  57. package/dist/native/specs/NativeNetworkLogger.js +2 -0
  58. package/dist/native/specs/NativeReplies.d.ts +21 -0
  59. package/dist/native/specs/NativeReplies.js +2 -0
  60. package/dist/native/specs/NativeSessionReplay.d.ts +17 -0
  61. package/dist/native/specs/NativeSessionReplay.js +2 -0
  62. package/dist/native/specs/NativeSurveys.d.ts +18 -0
  63. package/dist/native/specs/NativeSurveys.js +2 -0
  64. package/dist/utils/Enums.js +3 -1
  65. package/dist/utils/LuciqUtils.d.ts +1 -1
  66. package/dist/utils/LuciqUtils.js +0 -3
  67. package/ios/RNLuciq/LuciqAPMBridge.h +5 -5
  68. package/ios/RNLuciq/{LuciqAPMBridge.m → LuciqAPMBridge.mm} +48 -39
  69. package/ios/RNLuciq/LuciqBugReportingBridge.h +6 -6
  70. package/ios/RNLuciq/LuciqBugReportingBridge.mm +234 -0
  71. package/ios/RNLuciq/LuciqCrashReportingBridge.h +16 -5
  72. package/ios/RNLuciq/LuciqCrashReportingBridge.mm +91 -0
  73. package/ios/RNLuciq/LuciqFeatureRequestsBridge.h +1 -1
  74. package/ios/RNLuciq/{LuciqFeatureRequestsBridge.m → LuciqFeatureRequestsBridge.mm} +21 -16
  75. package/ios/RNLuciq/LuciqNetworkLoggerBridge.h +1 -30
  76. package/ios/RNLuciq/{LuciqNetworkLoggerBridge.m → LuciqNetworkLoggerBridge.mm} +46 -77
  77. package/ios/RNLuciq/LuciqReactBridge.h +13 -13
  78. package/ios/RNLuciq/{LuciqReactBridge.m → LuciqReactBridge.mm} +95 -34
  79. package/ios/RNLuciq/LuciqRepliesBridge.h +3 -3
  80. package/ios/RNLuciq/LuciqRepliesBridge.mm +86 -0
  81. package/ios/RNLuciq/LuciqSessionReplayBridge.h +5 -5
  82. package/ios/RNLuciq/{LuciqSessionReplayBridge.m → LuciqSessionReplayBridge.mm} +35 -25
  83. package/ios/RNLuciq/LuciqSurveysBridge.h +5 -5
  84. package/ios/RNLuciq/{LuciqSurveysBridge.m → LuciqSurveysBridge.mm} +34 -35
  85. package/ios/native.rb +1 -1
  86. package/package.json +9 -2
  87. package/src/modules/BugReporting.ts +3 -3
  88. package/src/modules/Luciq.ts +25 -1
  89. package/src/modules/Replies.ts +1 -1
  90. package/src/modules/Surveys.ts +2 -2
  91. package/src/native/NativeBugReporting.ts +3 -6
  92. package/src/native/NativeCrashReporting.ts +2 -2
  93. package/src/native/NativeLuciq.ts +7 -3
  94. package/src/native/NativePackage.ts +52 -2
  95. package/src/native/NativeReplies.ts +1 -1
  96. package/src/native/NativeSurveys.ts +2 -2
  97. package/src/native/specs/NativeAPM.ts +47 -0
  98. package/src/native/specs/NativeBugReporting.ts +53 -0
  99. package/src/native/specs/NativeCrashReporting.ts +23 -0
  100. package/src/native/specs/NativeFeatureRequests.ts +10 -0
  101. package/src/native/specs/NativeLuciq.ts +137 -0
  102. package/src/native/specs/NativeNetworkLogger.ts +31 -0
  103. package/src/native/specs/NativeReplies.ts +27 -0
  104. package/src/native/specs/NativeSessionReplay.ts +20 -0
  105. package/src/native/specs/NativeSurveys.ts +23 -0
  106. package/src/utils/Enums.ts +4 -1
  107. package/src/utils/LuciqUtils.ts +1 -6
  108. package/ios/RNLuciq/LuciqBugReportingBridge.m +0 -249
  109. package/ios/RNLuciq/LuciqCrashReportingBridge.m +0 -68
  110. package/ios/RNLuciq/LuciqRepliesBridge.m +0 -80
@@ -1,11 +1,3 @@
1
- //
2
- // LuciqFeatureRequestsBridge.m
3
- // RNLuciq
4
- //
5
- // Created by Salma Ali on 7/30/19.
6
- // Copyright © 2019 luciq. All rights reserved.
7
- //
8
-
9
1
  #import "LuciqFeatureRequestsBridge.h"
10
2
  #import <LuciqSDK/LCQFeatureRequests.h>
11
3
  #import <asl.h>
@@ -14,6 +6,13 @@
14
6
  #import <LuciqSDK/LCQTypes.h>
15
7
  #import <React/RCTUIManager.h>
16
8
 
9
+ #ifdef RCT_NEW_ARCH_ENABLED
10
+ #import <RNLuciqSpec/RNLuciqSpec.h>
11
+
12
+ @interface LuciqFeatureRequestsBridge () <NativeFeatureRequestsSpec>
13
+ @end
14
+ #endif
15
+
17
16
  @implementation LuciqFeatureRequestsBridge
18
17
 
19
18
  - (dispatch_queue_t)methodQueue {
@@ -36,26 +35,32 @@ RCT_EXPORT_METHOD(show) {
36
35
  }
37
36
 
38
37
  RCT_EXPORT_METHOD(setEmailFieldRequiredForFeatureRequests:(BOOL)isEmailFieldRequired
39
- forAction:(NSArray *)actionTypesArray) {
38
+ types:(NSArray *)actionTypesArray) {
40
39
  LCQAction actionTypes = 0;
41
40
 
42
- for (NSNumber *boxedValue in actionTypesArray) {
43
- actionTypes |= [boxedValue intValue];
41
+ for (id value in actionTypesArray) {
42
+ if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) {
43
+ actionTypes |= [value intValue];
44
+ }
44
45
  }
45
46
 
46
47
  [LCQFeatureRequests setEmailFieldRequired:isEmailFieldRequired forAction:actionTypes];
47
48
  }
48
49
 
49
- RCT_EXPORT_METHOD(setEnabled: (BOOL) isEnabled) {
50
+ RCT_EXPORT_METHOD(setEnabled:(BOOL)isEnabled) {
50
51
  LCQFeatureRequests.enabled = isEnabled;
51
52
  }
52
53
 
53
- @synthesize description;
54
+ #ifdef RCT_NEW_ARCH_ENABLED
55
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
56
+ (const facebook::react::ObjCTurboModule::InitParams &)params
57
+ {
58
+ return std::make_shared<facebook::react::NativeFeatureRequestsSpecJSI>(params);
59
+ }
60
+ #endif
54
61
 
62
+ @synthesize description;
55
63
  @synthesize hash;
56
-
57
64
  @synthesize superclass;
58
65
 
59
66
  @end
60
-
61
-
@@ -2,15 +2,9 @@
2
2
  #import <React/RCTEventEmitter.h>
3
3
  #import <LuciqSDK/LCQTypes.h>
4
4
 
5
- typedef void (^ LCQURLRequestAsyncObfuscationCompletedHandler)(NSURLRequest * _Nonnull request);
5
+ typedef void (^LCQURLRequestAsyncObfuscationCompletedHandler)(NSURLRequest * _Nonnull request);
6
6
  typedef void (^LCQURLRequestResponseAsyncFilteringCompletedHandler)(BOOL keep);
7
7
 
8
- typedef NS_ENUM(NSInteger, NetworkListenerType) {
9
- NetworkListenerTypeFiltering,
10
- NetworkListenerTypeObfuscation,
11
- NetworkListenerTypeBoth
12
- };
13
-
14
8
  @interface LuciqNetworkLoggerBridge : RCTEventEmitter <RCTBridgeModule>
15
9
 
16
10
  @property NSMutableDictionary<NSString *, LCQURLRequestAsyncObfuscationCompletedHandler> * _Nonnull requestObfuscationCompletionDictionary;
@@ -18,27 +12,4 @@ typedef NS_ENUM(NSInteger, NetworkListenerType) {
18
12
  @property NSMutableDictionary<NSString *, LCQURLRequestResponseAsyncFilteringCompletedHandler> * _Nonnull requestFilteringCompletionDictionary;
19
13
  @property NSMutableDictionary<NSString *, LCQURLRequestResponseAsyncFilteringCompletedHandler> * _Nonnull responseFilteringCompletionDictionary;
20
14
 
21
- /*
22
- +------------------------------------------------------------------------+
23
- | NetworkLogger Module |
24
- +------------------------------------------------------------------------+
25
- */
26
-
27
- - (BOOL)isNativeInterceptionEnabled;
28
-
29
- - (void) registerNetworkLogsListener:(NetworkListenerType)listenerType;
30
-
31
- - (void)updateNetworkLogSnapshot:(NSString * _Nonnull)url
32
- callbackID:(NSString * _Nonnull)callbackID
33
- requestBody:(NSString * _Nullable)requestBody
34
- responseBody:(NSString * _Nullable)responseBody
35
- responseCode:(double)responseCode
36
- requestHeaders:(NSDictionary * _Nullable)requestHeaders
37
- responseHeaders:(NSDictionary * _Nullable)responseHeaders;
38
-
39
- - (void) setNetworkLoggingRequestFilterPredicateIOS:(NSString * _Nonnull) callbackID : (BOOL)value;
40
-
41
- - (void)forceStartNetworkLoggingIOS;
42
-
43
- - (void)forceStopNetworkLoggingIOS;
44
15
  @end
@@ -1,30 +1,18 @@
1
- //
2
- // LuciqNetworkLoggerBridge.m
3
- // RNLuciq
4
- //
5
- // Created by Andrew Amin on 01/10/2024.
6
- //
7
1
  #import "LuciqNetworkLoggerBridge.h"
8
2
  #import "Util/LCQNetworkLogger+CP.h"
9
3
 
10
4
  #import <React/RCTLog.h>
11
5
  #import <React/RCTConvert.h>
12
6
 
13
- // Extend RCTConvert to handle NetworkListenerType enum conversion
14
- @implementation RCTConvert (NetworkListenerType)
15
-
16
- // The RCT_ENUM_CONVERTER macro handles the conversion between JS values (Int) and Objective-C enum values
17
- RCT_ENUM_CONVERTER(NetworkListenerType, (@{
18
- @"filtering": @(NetworkListenerTypeFiltering),
19
- @"obfuscation": @(NetworkListenerTypeObfuscation),
20
- @"both": @(NetworkListenerTypeBoth)
21
- }), NetworkListenerTypeFiltering, integerValue)
7
+ #ifdef RCT_NEW_ARCH_ENABLED
8
+ #import <RNLuciqSpec/RNLuciqSpec.h>
22
9
 
10
+ @interface LuciqNetworkLoggerBridge () <NativeNetworkLoggerSpec>
23
11
  @end
12
+ #endif
24
13
 
25
14
  @implementation LuciqNetworkLoggerBridge
26
15
 
27
-
28
16
  - (instancetype)init {
29
17
  self = [super init];
30
18
  if (self) {
@@ -51,135 +39,118 @@ RCT_ENUM_CONVERTER(NetworkListenerType, (@{
51
39
  @"LCQNetworkLoggerHandler"
52
40
  ];
53
41
  }
42
+
54
43
  RCT_EXPORT_MODULE(LCQNetworkLogger)
55
44
 
56
45
  bool lcq_hasListeners = NO;
57
46
 
58
-
59
-
60
- // Will be called when this module's first listener is added.
61
- -(void)startObserving {
47
+ - (void)startObserving {
62
48
  lcq_hasListeners = YES;
63
- // Set up any upstream listeners or background tasks as necessary
64
49
  }
65
50
 
66
- // Will be called when this module's last listener is removed, or on dealloc.
67
- -(void)stopObserving {
51
+ - (void)stopObserving {
68
52
  lcq_hasListeners = NO;
69
- // Remove upstream listeners, stop unnecessary background tasks
70
53
  }
71
54
 
72
- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(isNativeInterceptionEnabled) {
55
+ RCT_EXPORT_SYNCHRONOUS_TYPED_METHOD(NSNumber *, isNativeInterceptionEnabled) {
73
56
  return @(LCQNetworkLogger.isNativeNetworkInterceptionFeatureEnabled);
74
57
  }
75
58
 
76
-
77
-
78
- RCT_EXPORT_METHOD(registerNetworkLogsListener: (NetworkListenerType) listenerType) {
79
- switch (listenerType) {
80
- case NetworkListenerTypeFiltering:
81
- [self setupRequestFilteringHandler];
82
- break;
83
-
84
- case NetworkListenerTypeObfuscation:
85
- [self setupRequestObfuscationHandler];
86
- break;
87
-
88
- case NetworkListenerTypeBoth:
89
- // The obfuscation handler sends additional data to the JavaScript side. If filtering is applied, the request will be ignored; otherwise, it will be obfuscated and saved in the database.
90
- [self setupRequestObfuscationHandler];
91
- break;
92
-
93
- default:
94
- NSLog(@"Unknown NetworkListenerType");
95
- break;
96
- }
59
+ RCT_EXPORT_METHOD(registerNetworkLogsListener:(NSString * _Nullable)type) {
60
+ NSString *value = type ?: @"filtering";
61
+ if ([value isEqualToString:@"filtering"]) {
62
+ [self setupRequestFilteringHandler];
63
+ } else if ([value isEqualToString:@"obfuscation"] || [value isEqualToString:@"both"]) {
64
+ // Obfuscation pipeline also subsumes filtering: filtered requests get dropped, the rest obfuscated.
65
+ [self setupRequestObfuscationHandler];
66
+ } else {
67
+ NSLog(@"Unknown network listener type: %@", value);
68
+ }
97
69
  }
98
70
 
99
-
100
- RCT_EXPORT_METHOD(updateNetworkLogSnapshot:(NSString * _Nonnull)url
101
- callbackID:(NSString * _Nonnull)callbackID
71
+ RCT_EXPORT_METHOD(updateNetworkLogSnapshot:(NSString *)url
72
+ callbackID:(NSString *)callbackID
102
73
  requestBody:(NSString * _Nullable)requestBody
103
74
  responseBody:(NSString * _Nullable)responseBody
104
75
  responseCode:(double)responseCode
105
- requestHeaders:(NSDictionary * _Nullable)requestHeaders
106
- responseHeaders:(NSDictionary * _Nullable)responseHeaders)
76
+ requestHeaders:(NSDictionary *)requestHeaders
77
+ responseHeaders:(NSDictionary *)responseHeaders)
107
78
  {
108
- // Validate and construct the URL
109
79
  NSURL *requestURL = [NSURL URLWithString:url];
110
80
  if (!requestURL) {
111
81
  NSLog(@"Invalid URL: %@", url);
112
82
  return;
113
83
  }
114
84
 
115
- // Initialize the NSMutableURLRequest
116
85
  NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:requestURL];
117
86
 
118
- // Set the HTTP body if provided
119
87
  if (requestBody && [requestBody isKindOfClass:[NSString class]]) {
120
88
  request.HTTPBody = [requestBody dataUsingEncoding:NSUTF8StringEncoding];
121
89
  }
122
90
 
123
- // Ensure requestHeaders is a valid dictionary before setting it
124
91
  if (requestHeaders && [requestHeaders isKindOfClass:[NSDictionary class]]) {
125
92
  request.allHTTPHeaderFields = requestHeaders;
126
- } else {
127
- NSLog(@"Invalid requestHeaders format, expected NSDictionary.");
128
93
  }
129
94
 
130
- // Ensure callbackID is valid and the completion handler exists
131
95
  LCQURLRequestAsyncObfuscationCompletedHandler completionHandler = self.requestObfuscationCompletionDictionary[callbackID];
132
96
  if (callbackID && [callbackID isKindOfClass:[NSString class]] && completionHandler) {
133
- // Call the completion handler with the constructed request
134
97
  completionHandler(request);
135
98
  } else {
136
99
  NSLog(@"CallbackID not found or completion handler is unavailable for CallbackID: %@", callbackID);
137
100
  }
138
101
  }
139
102
 
140
- RCT_EXPORT_METHOD(setNetworkLoggingRequestFilterPredicateIOS: (NSString * _Nonnull) callbackID : (BOOL)value ){
141
-
103
+ RCT_EXPORT_METHOD(setNetworkLoggingRequestFilterPredicateIOS:(NSString *)callbackID
104
+ value:(BOOL)value) {
142
105
  if (self.requestFilteringCompletionDictionary[callbackID] != nil) {
143
- // ⬇️ YES == Request will be saved, NO == will be ignored
144
106
  ((LCQURLRequestResponseAsyncFilteringCompletedHandler)self.requestFilteringCompletionDictionary[callbackID])(value);
145
107
  } else {
146
108
  NSLog(@"Not Available Completion");
147
109
  }
148
110
  }
149
111
 
112
+ RCT_EXPORT_METHOD(forceStartNetworkLoggingIOS) {
113
+ [LCQNetworkLogger forceStartNetworkLogging];
114
+ }
115
+
116
+ RCT_EXPORT_METHOD(forceStopNetworkLoggingIOS) {
117
+ [LCQNetworkLogger forceStopNetworkLogging];
118
+ }
119
+
120
+ // Android-only methods — iOS no-ops to satisfy the unified spec.
121
+ RCT_EXPORT_METHOD(hasAPMNetworkPlugin:(RCTPromiseResolveBlock)resolve
122
+ reject:(RCTPromiseRejectBlock)reject) {
123
+ resolve(@NO);
124
+ }
125
+
126
+ RCT_EXPORT_METHOD(resetNetworkLogsListener) { }
150
127
 
151
128
  #pragma mark - Helper Methods
152
129
 
153
- // Set up the filtering handler
154
130
  - (void)setupRequestFilteringHandler {
155
131
  [LCQNetworkLogger setCPRequestFilteringHandler:^(NSURLRequest * _Nonnull request, void (^ _Nonnull completion)(BOOL)) {
156
132
  NSString *callbackID = [[[NSUUID alloc] init] UUIDString];
157
133
  self.requestFilteringCompletionDictionary[callbackID] = completion;
158
134
 
159
135
  NSDictionary *dict = [self createNetworkRequestDictForRequest:request callbackID:callbackID];
160
- if(lcq_hasListeners){
136
+ if (lcq_hasListeners) {
161
137
  [self sendEventWithName:@"LCQNetworkLoggerHandler" body:dict];
162
138
  }
163
-
164
139
  }];
165
140
  }
166
141
 
167
- // Set up the obfuscation handler
168
142
  - (void)setupRequestObfuscationHandler {
169
143
  [LCQNetworkLogger setCPRequestAsyncObfuscationHandler:^(NSURLRequest * _Nonnull request, void (^ _Nonnull completion)(NSURLRequest * _Nonnull)) {
170
144
  NSString *callbackID = [[[NSUUID alloc] init] UUIDString];
171
145
  self.requestObfuscationCompletionDictionary[callbackID] = completion;
172
146
 
173
-
174
147
  NSDictionary *dict = [self createNetworkRequestDictForRequest:request callbackID:callbackID];
175
148
  if (lcq_hasListeners) {
176
149
  [self sendEventWithName:@"LCQNetworkLoggerHandler" body:dict];
177
150
  }
178
-
179
151
  }];
180
152
  }
181
153
 
182
- // Helper to create a dictionary from the request and callbackID
183
154
  - (NSDictionary *)createNetworkRequestDictForRequest:(NSURLRequest *)request callbackID:(NSString *)callbackID {
184
155
  NSString *urlString = request.URL.absoluteString ?: @"";
185
156
  NSString *bodyString = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding] ?: @"";
@@ -193,14 +164,12 @@ RCT_EXPORT_METHOD(setNetworkLoggingRequestFilterPredicateIOS: (NSString * _Nonnu
193
164
  };
194
165
  }
195
166
 
196
- RCT_EXPORT_METHOD(forceStartNetworkLoggingIOS) {
197
- [LCQNetworkLogger forceStartNetworkLogging];
198
- }
199
-
200
- RCT_EXPORT_METHOD(forceStopNetworkLoggingIOS) {
201
- [LCQNetworkLogger forceStopNetworkLogging];
167
+ #ifdef RCT_NEW_ARCH_ENABLED
168
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
169
+ (const facebook::react::ObjCTurboModule::InitParams &)params
170
+ {
171
+ return std::make_shared<facebook::react::NativeNetworkLoggerSpecJSI>(params);
202
172
  }
203
-
204
-
173
+ #endif
205
174
 
206
175
  @end
@@ -52,11 +52,11 @@
52
52
 
53
53
  - (void)resetTags;
54
54
 
55
- - (void)getTags:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
55
+ - (void)getTags:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
56
56
 
57
- - (void)setString:(NSString *)value toKey:(NSString *)key;
57
+ - (void)setString:(NSString *)value key:(NSString *)key;
58
58
 
59
- - (void)identifyUser:(NSString *)email name:(NSString *)name userId:(nullable NSString *)userId;
59
+ - (void)identifyUser:(NSString *)email name:(NSString *)name id:(nullable NSString *)userId;
60
60
 
61
61
  - (void)logOut;
62
62
 
@@ -64,18 +64,18 @@
64
64
 
65
65
  - (void)logVerbose:(NSString *)log;
66
66
 
67
- - (void)setReproStepsConfig:(LCQUserStepsMode)bugMode:(LCQUserStepsMode)crashMode:(LCQUserStepsMode)sessionReplayMode;
67
+ - (void)setReproStepsConfig:(NSString *)bugMode crashMode:(NSString *)crashMode sessionReplay:(NSString *)sessionReplayMode;
68
68
 
69
- - (void)setUserAttribute:(NSString *)key withValue:(NSString *)value;
69
+ - (void)setUserAttribute:(NSString *)key value:(NSString *)value;
70
70
 
71
71
  - (void)getUserAttribute:(NSString *)key
72
- :(RCTPromiseResolveBlock)resolve
73
- :(RCTPromiseRejectBlock)reject;
72
+ resolve:(RCTPromiseResolveBlock)resolve
73
+ reject:(RCTPromiseRejectBlock)reject;
74
74
 
75
75
  - (void)removeUserAttribute:(NSString *)key;
76
76
 
77
77
  - (void)getAllUserAttributes:(RCTPromiseResolveBlock)resolve
78
- :(RCTPromiseRejectBlock)reject;
78
+ reject:(RCTPromiseRejectBlock)reject;
79
79
 
80
80
  - (void)clearAllUserAttributes;
81
81
 
@@ -83,7 +83,7 @@
83
83
 
84
84
  - (void)setWelcomeMessageMode:(LCQWelcomeMessageMode)welcomeMessageMode;
85
85
 
86
- - (void)setFileAttachment:(NSString *)fileLocation;
86
+ - (void)setFileAttachment:(NSString *)fileLocation fileName:(NSString * _Nullable)fileName;
87
87
 
88
88
  - (void)show;
89
89
 
@@ -111,9 +111,9 @@
111
111
  */
112
112
 
113
113
  - (void)setNetworkLoggingEnabled:(BOOL)isEnabled;
114
- - (void)isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
115
- - (void)isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
116
- - (void)isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
114
+ - (void)isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
115
+ - (void)isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
116
+ - (void)isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
117
117
  - (void)networkLogIOS:(NSString * _Nonnull)url
118
118
  method:(NSString * _Nonnull)method
119
119
  requestBody:(NSString * _Nonnull)requestBody
@@ -146,6 +146,6 @@ w3cExternalTraceAttributes:(NSDictionary * _Nullable)w3cExternalTraceAttributes;
146
146
  - (void)removeAllFeatureFlags;
147
147
  - (void)setNetworkLogBodyEnabled:(BOOL)isEnabled;
148
148
  - (void)enableAutoMasking:(NSArray *)autoMaskingTypes;
149
- - (void)getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
149
+ - (void)getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
150
150
 
151
151
  @end
@@ -16,6 +16,13 @@
16
16
  #import "RNLuciq.h"
17
17
  #import "Util/LCQNetworkLogger+CP.h"
18
18
 
19
+ #ifdef RCT_NEW_ARCH_ENABLED
20
+ #import <RNLuciqSpec/RNLuciqSpec.h>
21
+
22
+ @interface LuciqReactBridge () <NativeLuciqSpec>
23
+ @end
24
+ #endif
25
+
19
26
  @interface Luciq (PrivateWillSendAPI)
20
27
  + (void)setWillSendReportHandler_private:(void(^)(LCQReport *report, void(^reportCompletionHandler)(LCQReport *)))willSendReportHandler_private;
21
28
  @end
@@ -59,7 +66,7 @@ RCT_EXPORT_METHOD(init:(NSString *)token
59
66
 
60
67
  [Luciq setCodePushVersion:codePushVersion];
61
68
 
62
- [Luciq setOverAirVersion:overAirVersion[@"version"] withType:[overAirVersion[@"service"] intValue]];
69
+ [Luciq setOverAirVersion:overAirVersion[@"version"] withType:(LCQOverAirType)[overAirVersion[@"service"] intValue]];
63
70
 
64
71
  [RNLuciq initWithToken:token
65
72
  invocationEvents:invocationEvents
@@ -72,20 +79,26 @@ RCT_EXPORT_METHOD(setCodePushVersion:(NSString *)version) {
72
79
  }
73
80
 
74
81
  RCT_EXPORT_METHOD(setOverAirVersion:(NSDictionary *)overAirVersion) {
75
- [Luciq setOverAirVersion:overAirVersion[@"version"] withType:[overAirVersion[@"service"] intValue]];
82
+ [Luciq setOverAirVersion:overAirVersion[@"version"] withType:(LCQOverAirType)[overAirVersion[@"service"] intValue]];
76
83
  }
77
84
 
78
85
  RCT_EXPORT_METHOD(setAppVariant:(NSString *)appVariant) {
79
86
  Luciq.appVariant = appVariant;
80
87
  }
81
88
 
82
- RCT_EXPORT_METHOD(setReproStepsConfig:(LCQUserStepsMode)bugMode :(LCQUserStepsMode)crashMode:(LCQUserStepsMode)sessionReplayMode) {
83
- [Luciq setReproStepsFor:LCQIssueTypeBug withMode:bugMode];
84
- [Luciq setReproStepsFor:LCQIssueTypeAllCrashes withMode:crashMode];
85
- [Luciq setReproStepsFor:LCQIssueTypeSessionReplay withMode:sessionReplayMode];
89
+ RCT_EXPORT_METHOD(setReproStepsConfig:(NSString *)bugMode
90
+ crashMode:(NSString *)crashMode
91
+ sessionReplay:(NSString *)sessionReplayMode) {
92
+ LCQUserStepsMode bug = (LCQUserStepsMode)[bugMode intValue];
93
+ LCQUserStepsMode crash = (LCQUserStepsMode)[crashMode intValue];
94
+ LCQUserStepsMode sr = (LCQUserStepsMode)[sessionReplayMode intValue];
95
+ [Luciq setReproStepsFor:LCQIssueTypeBug withMode:bug];
96
+ [Luciq setReproStepsFor:LCQIssueTypeAllCrashes withMode:crash];
97
+ [Luciq setReproStepsFor:LCQIssueTypeSessionReplay withMode:sr];
86
98
  }
87
99
 
88
- RCT_EXPORT_METHOD(setFileAttachment:(NSString *)fileLocation) {
100
+ RCT_EXPORT_METHOD(setFileAttachment:(NSString *)fileLocation
101
+ fileName:(NSString * _Nullable)fileName) {
89
102
  NSURL *url = [NSURL URLWithString:fileLocation];
90
103
  [Luciq addFileAttachmentWithURL:url];
91
104
  }
@@ -98,24 +111,39 @@ RCT_EXPORT_METHOD(setTrackUserSteps:(BOOL)isEnabled) {
98
111
  [Luciq setTrackUserSteps:isEnabled];
99
112
  }
100
113
 
114
+ RCT_EXPORT_METHOD(setWebViewMonitoringEnabled:(BOOL)isEnabled) {
115
+ [Luciq setWebViewMonitoringEnabled:isEnabled];
116
+ }
117
+
118
+ RCT_EXPORT_METHOD(setWebViewNetworkTrackingEnabled:(BOOL)isEnabled) {
119
+ [Luciq setWebViewNetworkTrackingEnabled:isEnabled];
120
+ }
121
+
122
+ RCT_EXPORT_METHOD(setWebViewUserInteractionsTrackingEnabled:(BOOL)isEnabled) {
123
+ [Luciq setWebViewUserInteractionsTrackingEnabled:isEnabled];
124
+ }
125
+
101
126
  LCQReport *currentReport = nil;
102
- RCT_EXPORT_METHOD(setPreSendingHandler:(RCTResponseSenderBlock)callBack) {
103
- if (callBack != nil) {
104
- Luciq.willSendReportHandler = ^LCQReport * _Nonnull(LCQReport * _Nonnull report) {
105
- NSArray *tagsArray = report.tags;
106
- NSArray *luciqLogs= report.luciqLogs;
107
- NSArray *consoleLogs= report.consoleLogs;
108
- NSDictionary *userAttributes= report.userAttributes;
109
- NSArray *fileAttachments= report.fileLocations;
110
- NSDictionary *dict = @{ @"tagsArray" : tagsArray, @"luciqLogs" : luciqLogs, @"consoleLogs" : consoleLogs, @"userAttributes" : userAttributes, @"fileAttachments" : fileAttachments};
111
- [self sendEventWithName:@"LCQpreSendingHandler" body:dict];
112
-
113
- currentReport = report;
114
- return report;
127
+ RCT_EXPORT_METHOD(setPreSendingHandler) {
128
+ __weak LuciqReactBridge *weakSelf = self;
129
+ Luciq.willSendReportHandler = ^LCQReport * _Nonnull(LCQReport * _Nonnull report) {
130
+ NSArray *tagsArray = report.tags;
131
+ NSArray *luciqLogs = report.luciqLogs;
132
+ NSArray *consoleLogs = report.consoleLogs;
133
+ NSDictionary *userAttributes = report.userAttributes;
134
+ NSArray *fileAttachments = report.fileLocations;
135
+ NSDictionary *dict = @{
136
+ @"tagsArray": tagsArray,
137
+ @"luciqLogs": luciqLogs,
138
+ @"consoleLogs": consoleLogs,
139
+ @"userAttributes": userAttributes,
140
+ @"fileAttachments": fileAttachments
115
141
  };
116
- } else {
117
- Luciq.willSendReportHandler = nil;
118
- }
142
+ [weakSelf sendEventWithName:@"LCQpreSendingHandler" body:dict];
143
+
144
+ currentReport = report;
145
+ return report;
146
+ };
119
147
  }
120
148
 
121
149
  RCT_EXPORT_METHOD(appendTagToReport:(NSString*) tag) {
@@ -278,11 +306,12 @@ RCT_EXPORT_METHOD(resetTags) {
278
306
  [Luciq resetTags];
279
307
  }
280
308
 
281
- RCT_EXPORT_METHOD(getTags:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
309
+ RCT_EXPORT_METHOD(getTags:(RCTPromiseResolveBlock)resolve
310
+ reject:(RCTPromiseRejectBlock)reject) {
282
311
  resolve([Luciq getTags]);
283
312
  }
284
313
 
285
- RCT_EXPORT_METHOD(setString:(NSString*)value toKey:(NSString*)key) {
314
+ RCT_EXPORT_METHOD(setString:(NSString *)value key:(NSString *)key) {
286
315
  [Luciq setValue:value forStringWithKey:key];
287
316
  }
288
317
 
@@ -294,7 +323,9 @@ RCT_EXPORT_METHOD(clearFileAttachments) {
294
323
  [Luciq clearFileAttachments];
295
324
  }
296
325
 
297
- RCT_EXPORT_METHOD(identifyUser:(NSString *)email name:(NSString *)name userId:(nullable NSString *)userId) {
326
+ RCT_EXPORT_METHOD(identifyUser:(NSString *)email
327
+ name:(NSString *)name
328
+ id:(NSString * _Nullable)userId) {
298
329
  [Luciq identifyUserWithID:userId email:email name:name];
299
330
  }
300
331
 
@@ -302,11 +333,11 @@ RCT_EXPORT_METHOD(logOut) {
302
333
  [Luciq logOut];
303
334
  }
304
335
 
305
- RCT_EXPORT_METHOD(setUserAttribute:(NSString *)key withValue:(NSString *)value) {
336
+ RCT_EXPORT_METHOD(setUserAttribute:(NSString *)key value:(NSString *)value) {
306
337
  [Luciq setUserAttribute:value withKey:key];
307
338
  }
308
339
 
309
- RCT_EXPORT_METHOD(getUserAttribute:(NSString *)key :(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
340
+ RCT_EXPORT_METHOD(getUserAttribute:(NSString *)key resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
310
341
  @try {
311
342
  resolve([Luciq userAttributeForKey:key]);
312
343
  } @catch (NSException *exception) {
@@ -318,7 +349,8 @@ RCT_EXPORT_METHOD(removeUserAttribute:(NSString *)key) {
318
349
  [Luciq removeUserAttributeForKey:key];
319
350
  }
320
351
 
321
- RCT_EXPORT_METHOD(getAllUserAttributes:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
352
+ RCT_EXPORT_METHOD(getAllUserAttributes:(RCTPromiseResolveBlock)resolve
353
+ reject:(RCTPromiseRejectBlock)reject) {
322
354
  resolve([Luciq userAttributes]);
323
355
  }
324
356
 
@@ -488,13 +520,16 @@ RCT_EXPORT_METHOD(willRedirectToStore){
488
520
  [Luciq willRedirectToAppStore];
489
521
  }
490
522
 
491
- RCT_EXPORT_METHOD(isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
523
+ RCT_EXPORT_METHOD(isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve
524
+ reject:(RCTPromiseRejectBlock)reject) {
492
525
  resolve(@(LCQNetworkLogger.w3ExternalTraceIDEnabled));
493
526
  }
494
- RCT_EXPORT_METHOD(isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
527
+ RCT_EXPORT_METHOD(isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve
528
+ reject:(RCTPromiseRejectBlock)reject) {
495
529
  resolve(@(LCQNetworkLogger.w3ExternalGeneratedHeaderEnabled));
496
530
  }
497
- RCT_EXPORT_METHOD(isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
531
+ RCT_EXPORT_METHOD(isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve
532
+ reject:(RCTPromiseRejectBlock)reject) {
498
533
  resolve(@(LCQNetworkLogger.w3CaughtHeaderEnabled));
499
534
  }
500
535
 
@@ -503,6 +538,10 @@ RCT_EXPORT_METHOD(isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTP
503
538
  return ArgsRegistry.getAll;
504
539
  }
505
540
 
541
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAllConstants) {
542
+ return ArgsRegistry.getAll;
543
+ }
544
+
506
545
  - (void) setBaseUrlForDeprecationLogs {
507
546
  SEL setCurrentPlatformSEL = NSSelectorFromString(@"setCurrentPlatform:");
508
547
  if([[Luciq class] respondsToSelector:setCurrentPlatformSEL]) {
@@ -537,7 +576,8 @@ RCT_EXPORT_METHOD(enableAutoMasking:(NSArray *)autoMaskingTypes) {
537
576
  [Luciq setAutoMaskScreenshots: autoMaskingOptions];
538
577
  };
539
578
 
540
- RCT_EXPORT_METHOD(getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
579
+ RCT_EXPORT_METHOD(getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve
580
+ reject:(RCTPromiseRejectBlock)reject) {
541
581
  resolve(@(LCQNetworkLogger.getNetworkBodyMaxSize));
542
582
  }
543
583
 
@@ -547,7 +587,7 @@ RCT_EXPORT_METHOD(setNetworkLogBodyEnabled:(BOOL)isEnabled) {
547
587
 
548
588
  // Checks if Luciq SDK is initialized
549
589
  RCT_EXPORT_METHOD(isBuilt:(RCTPromiseResolveBlock)resolve
550
- rejecter:(RCTPromiseRejectBlock)reject) {
590
+ reject:(RCTPromiseRejectBlock)reject) {
551
591
  @try {
552
592
  BOOL isBuilt = YES;
553
593
  resolve(@(isBuilt));
@@ -557,4 +597,25 @@ RCT_EXPORT_METHOD(isBuilt:(RCTPromiseResolveBlock)resolve
557
597
  }
558
598
  }
559
599
 
600
+ // Stubs for spec-declared methods that are Android-only.
601
+ RCT_EXPORT_METHOD(networkLogAndroid:(NSString *)url
602
+ requestBody:(NSString *)requestBody
603
+ responseBody:(NSString * _Nullable)responseBody
604
+ method:(NSString *)method
605
+ responseCode:(double)responseCode
606
+ requestHeaders:(NSString *)requestHeaders
607
+ responseHeaders:(NSString *)responseHeaders
608
+ duration:(double)duration) { }
609
+
610
+ RCT_EXPORT_METHOD(registerFeatureFlagsChangeListener) { }
611
+ RCT_EXPORT_METHOD(setOnFeaturesUpdatedListener) { }
612
+
613
+ #ifdef RCT_NEW_ARCH_ENABLED
614
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
615
+ (const facebook::react::ObjCTurboModule::InitParams &)params
616
+ {
617
+ return std::make_shared<facebook::react::NativeLuciqSpecJSI>(params);
618
+ }
619
+ #endif
620
+
560
621
  @end
@@ -21,13 +21,13 @@
21
21
 
22
22
  - (void)setEnabled:(BOOL) isEnabled;
23
23
 
24
- - (void)hasChats:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
24
+ - (void)hasChats:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
25
25
 
26
26
  - (void)show;
27
27
 
28
- - (void)setOnNewReplyReceivedHandler:(RCTResponseSenderBlock) callback;
28
+ - (void)setOnNewReplyReceivedHandler;
29
29
 
30
- - (void)getUnreadRepliesCount:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
30
+ - (void)getUnreadRepliesCount:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
31
31
 
32
32
  - (void)setInAppNotificationEnabled:(BOOL)isChatNotificationEnabled;
33
33