@luciq/react-native 19.4.0-44237-SNAPSHOT → 19.4.0-47504-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 (116) hide show
  1. package/README.md +0 -118
  2. package/RNLuciq.podspec +2 -6
  3. package/android/build.gradle +0 -25
  4. package/android/proguard-rules.txt +1 -1
  5. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqAPMModule.java +12 -3
  6. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqBugReportingModule.java +24 -28
  7. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqCrashReportingModule.java +7 -18
  8. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsModule.java +2 -1
  9. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerModule.java +56 -29
  10. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativeModule.java +47 -78
  11. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqRepliesModule.java +16 -4
  12. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSessionReplayModule.java +16 -5
  13. package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSurveysModule.java +15 -7
  14. package/android/src/main/java/ai/luciq/reactlibrary/utils/EventEmitterModule.java +7 -0
  15. package/dist/modules/BugReporting.js +3 -3
  16. package/dist/modules/Luciq.js +3 -2
  17. package/dist/modules/NetworkLogger.d.ts +0 -5
  18. package/dist/modules/NetworkLogger.js +9 -1
  19. package/dist/modules/Replies.js +1 -1
  20. package/dist/modules/Surveys.js +2 -2
  21. package/dist/native/NativeBugReporting.d.ts +4 -4
  22. package/dist/native/NativeCrashReporting.d.ts +2 -2
  23. package/dist/native/NativeLuciq.d.ts +3 -2
  24. package/dist/native/NativePackage.js +2 -25
  25. package/dist/native/NativeReplies.d.ts +1 -1
  26. package/dist/native/NativeSurveys.d.ts +2 -2
  27. package/dist/utils/Enums.js +1 -3
  28. package/dist/utils/FeatureFlags.d.ts +6 -0
  29. package/dist/utils/FeatureFlags.js +35 -0
  30. package/dist/utils/LuciqUtils.d.ts +1 -1
  31. package/dist/utils/LuciqUtils.js +9 -0
  32. package/dist/utils/XhrNetworkInterceptor.js +85 -53
  33. package/ios/RNLuciq/LuciqAPMBridge.h +5 -5
  34. package/ios/RNLuciq/{LuciqAPMBridge.mm → LuciqAPMBridge.m} +39 -48
  35. package/ios/RNLuciq/LuciqBugReportingBridge.h +6 -6
  36. package/ios/RNLuciq/LuciqBugReportingBridge.m +249 -0
  37. package/ios/RNLuciq/LuciqCrashReportingBridge.h +5 -16
  38. package/ios/RNLuciq/LuciqCrashReportingBridge.m +68 -0
  39. package/ios/RNLuciq/LuciqFeatureRequestsBridge.h +1 -1
  40. package/ios/RNLuciq/{LuciqFeatureRequestsBridge.mm → LuciqFeatureRequestsBridge.m} +16 -21
  41. package/ios/RNLuciq/LuciqNetworkLoggerBridge.h +30 -1
  42. package/ios/RNLuciq/{LuciqNetworkLoggerBridge.mm → LuciqNetworkLoggerBridge.m} +77 -46
  43. package/ios/RNLuciq/LuciqReactBridge.h +13 -13
  44. package/ios/RNLuciq/{LuciqReactBridge.mm → LuciqReactBridge.m} +34 -83
  45. package/ios/RNLuciq/LuciqRepliesBridge.h +3 -3
  46. package/ios/RNLuciq/LuciqRepliesBridge.m +80 -0
  47. package/ios/RNLuciq/LuciqSessionReplayBridge.h +5 -5
  48. package/ios/RNLuciq/{LuciqSessionReplayBridge.mm → LuciqSessionReplayBridge.m} +25 -35
  49. package/ios/RNLuciq/LuciqSurveysBridge.h +5 -5
  50. package/ios/RNLuciq/{LuciqSurveysBridge.mm → LuciqSurveysBridge.m} +35 -34
  51. package/package.json +1 -9
  52. package/scripts/get-github-app-token.sh +70 -0
  53. package/scripts/notify-github.sh +17 -8
  54. package/src/modules/BugReporting.ts +3 -3
  55. package/src/modules/Luciq.ts +4 -2
  56. package/src/modules/NetworkLogger.ts +26 -1
  57. package/src/modules/Replies.ts +1 -1
  58. package/src/modules/Surveys.ts +2 -2
  59. package/src/native/NativeBugReporting.ts +6 -3
  60. package/src/native/NativeCrashReporting.ts +2 -2
  61. package/src/native/NativeLuciq.ts +3 -2
  62. package/src/native/NativePackage.ts +2 -52
  63. package/src/native/NativeReplies.ts +1 -1
  64. package/src/native/NativeSurveys.ts +2 -2
  65. package/src/utils/Enums.ts +1 -4
  66. package/src/utils/FeatureFlags.ts +44 -0
  67. package/src/utils/LuciqUtils.ts +21 -1
  68. package/src/utils/XhrNetworkInterceptor.ts +128 -55
  69. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +0 -9
  70. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +0 -33
  71. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +0 -33
  72. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +0 -9
  73. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +0 -9
  74. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +0 -33
  75. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +0 -33
  76. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +0 -33
  77. package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +0 -33
  78. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +0 -11
  79. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +0 -22
  80. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +0 -22
  81. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +0 -10
  82. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +0 -10
  83. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +0 -22
  84. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +0 -22
  85. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +0 -22
  86. package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +0 -22
  87. package/dist/native/specs/NativeAPM.d.ts +0 -21
  88. package/dist/native/specs/NativeAPM.js +0 -2
  89. package/dist/native/specs/NativeBugReporting.d.ts +0 -29
  90. package/dist/native/specs/NativeBugReporting.js +0 -2
  91. package/dist/native/specs/NativeCrashReporting.d.ts +0 -12
  92. package/dist/native/specs/NativeCrashReporting.js +0 -2
  93. package/dist/native/specs/NativeFeatureRequests.d.ts +0 -8
  94. package/dist/native/specs/NativeFeatureRequests.js +0 -2
  95. package/dist/native/specs/NativeLuciq.d.ts +0 -80
  96. package/dist/native/specs/NativeLuciq.js +0 -2
  97. package/dist/native/specs/NativeNetworkLogger.d.ts +0 -16
  98. package/dist/native/specs/NativeNetworkLogger.js +0 -2
  99. package/dist/native/specs/NativeReplies.d.ts +0 -21
  100. package/dist/native/specs/NativeReplies.js +0 -2
  101. package/dist/native/specs/NativeSessionReplay.d.ts +0 -17
  102. package/dist/native/specs/NativeSessionReplay.js +0 -2
  103. package/dist/native/specs/NativeSurveys.d.ts +0 -18
  104. package/dist/native/specs/NativeSurveys.js +0 -2
  105. package/ios/RNLuciq/LuciqBugReportingBridge.mm +0 -234
  106. package/ios/RNLuciq/LuciqCrashReportingBridge.mm +0 -91
  107. package/ios/RNLuciq/LuciqRepliesBridge.mm +0 -86
  108. package/src/native/specs/NativeAPM.ts +0 -47
  109. package/src/native/specs/NativeBugReporting.ts +0 -53
  110. package/src/native/specs/NativeCrashReporting.ts +0 -23
  111. package/src/native/specs/NativeFeatureRequests.ts +0 -10
  112. package/src/native/specs/NativeLuciq.ts +0 -137
  113. package/src/native/specs/NativeNetworkLogger.ts +0 -31
  114. package/src/native/specs/NativeReplies.ts +0 -27
  115. package/src/native/specs/NativeSessionReplay.ts +0 -20
  116. package/src/native/specs/NativeSurveys.ts +0 -23
@@ -1,18 +1,30 @@
1
+ //
2
+ // LuciqNetworkLoggerBridge.m
3
+ // RNLuciq
4
+ //
5
+ // Created by Andrew Amin on 01/10/2024.
6
+ //
1
7
  #import "LuciqNetworkLoggerBridge.h"
2
8
  #import "Util/LCQNetworkLogger+CP.h"
3
9
 
4
10
  #import <React/RCTLog.h>
5
11
  #import <React/RCTConvert.h>
6
12
 
7
- #ifdef RCT_NEW_ARCH_ENABLED
8
- #import <RNLuciqSpec/RNLuciqSpec.h>
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)
9
22
 
10
- @interface LuciqNetworkLoggerBridge () <NativeNetworkLoggerSpec>
11
23
  @end
12
- #endif
13
24
 
14
25
  @implementation LuciqNetworkLoggerBridge
15
26
 
27
+
16
28
  - (instancetype)init {
17
29
  self = [super init];
18
30
  if (self) {
@@ -39,118 +51,135 @@
39
51
  @"LCQNetworkLoggerHandler"
40
52
  ];
41
53
  }
42
-
43
54
  RCT_EXPORT_MODULE(LCQNetworkLogger)
44
55
 
45
56
  bool lcq_hasListeners = NO;
46
57
 
47
- - (void)startObserving {
58
+
59
+
60
+ // Will be called when this module's first listener is added.
61
+ -(void)startObserving {
48
62
  lcq_hasListeners = YES;
63
+ // Set up any upstream listeners or background tasks as necessary
49
64
  }
50
65
 
51
- - (void)stopObserving {
66
+ // Will be called when this module's last listener is removed, or on dealloc.
67
+ -(void)stopObserving {
52
68
  lcq_hasListeners = NO;
69
+ // Remove upstream listeners, stop unnecessary background tasks
53
70
  }
54
71
 
55
- RCT_EXPORT_SYNCHRONOUS_TYPED_METHOD(NSNumber *, isNativeInterceptionEnabled) {
72
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(isNativeInterceptionEnabled) {
56
73
  return @(LCQNetworkLogger.isNativeNetworkInterceptionFeatureEnabled);
57
74
  }
58
75
 
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
- }
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
+ }
69
97
  }
70
98
 
71
- RCT_EXPORT_METHOD(updateNetworkLogSnapshot:(NSString *)url
72
- callbackID:(NSString *)callbackID
99
+
100
+ RCT_EXPORT_METHOD(updateNetworkLogSnapshot:(NSString * _Nonnull)url
101
+ callbackID:(NSString * _Nonnull)callbackID
73
102
  requestBody:(NSString * _Nullable)requestBody
74
103
  responseBody:(NSString * _Nullable)responseBody
75
104
  responseCode:(double)responseCode
76
- requestHeaders:(NSDictionary *)requestHeaders
77
- responseHeaders:(NSDictionary *)responseHeaders)
105
+ requestHeaders:(NSDictionary * _Nullable)requestHeaders
106
+ responseHeaders:(NSDictionary * _Nullable)responseHeaders)
78
107
  {
108
+ // Validate and construct the URL
79
109
  NSURL *requestURL = [NSURL URLWithString:url];
80
110
  if (!requestURL) {
81
111
  NSLog(@"Invalid URL: %@", url);
82
112
  return;
83
113
  }
84
114
 
115
+ // Initialize the NSMutableURLRequest
85
116
  NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:requestURL];
86
117
 
118
+ // Set the HTTP body if provided
87
119
  if (requestBody && [requestBody isKindOfClass:[NSString class]]) {
88
120
  request.HTTPBody = [requestBody dataUsingEncoding:NSUTF8StringEncoding];
89
121
  }
90
122
 
123
+ // Ensure requestHeaders is a valid dictionary before setting it
91
124
  if (requestHeaders && [requestHeaders isKindOfClass:[NSDictionary class]]) {
92
125
  request.allHTTPHeaderFields = requestHeaders;
126
+ } else {
127
+ NSLog(@"Invalid requestHeaders format, expected NSDictionary.");
93
128
  }
94
129
 
130
+ // Ensure callbackID is valid and the completion handler exists
95
131
  LCQURLRequestAsyncObfuscationCompletedHandler completionHandler = self.requestObfuscationCompletionDictionary[callbackID];
96
132
  if (callbackID && [callbackID isKindOfClass:[NSString class]] && completionHandler) {
133
+ // Call the completion handler with the constructed request
97
134
  completionHandler(request);
98
135
  } else {
99
136
  NSLog(@"CallbackID not found or completion handler is unavailable for CallbackID: %@", callbackID);
100
137
  }
101
138
  }
102
139
 
103
- RCT_EXPORT_METHOD(setNetworkLoggingRequestFilterPredicateIOS:(NSString *)callbackID
104
- value:(BOOL)value) {
140
+ RCT_EXPORT_METHOD(setNetworkLoggingRequestFilterPredicateIOS: (NSString * _Nonnull) callbackID : (BOOL)value ){
141
+
105
142
  if (self.requestFilteringCompletionDictionary[callbackID] != nil) {
143
+ // ⬇️ YES == Request will be saved, NO == will be ignored
106
144
  ((LCQURLRequestResponseAsyncFilteringCompletedHandler)self.requestFilteringCompletionDictionary[callbackID])(value);
107
145
  } else {
108
146
  NSLog(@"Not Available Completion");
109
147
  }
110
148
  }
111
149
 
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) { }
127
150
 
128
151
  #pragma mark - Helper Methods
129
152
 
153
+ // Set up the filtering handler
130
154
  - (void)setupRequestFilteringHandler {
131
155
  [LCQNetworkLogger setCPRequestFilteringHandler:^(NSURLRequest * _Nonnull request, void (^ _Nonnull completion)(BOOL)) {
132
156
  NSString *callbackID = [[[NSUUID alloc] init] UUIDString];
133
157
  self.requestFilteringCompletionDictionary[callbackID] = completion;
134
158
 
135
159
  NSDictionary *dict = [self createNetworkRequestDictForRequest:request callbackID:callbackID];
136
- if (lcq_hasListeners) {
160
+ if(lcq_hasListeners){
137
161
  [self sendEventWithName:@"LCQNetworkLoggerHandler" body:dict];
138
162
  }
163
+
139
164
  }];
140
165
  }
141
166
 
167
+ // Set up the obfuscation handler
142
168
  - (void)setupRequestObfuscationHandler {
143
169
  [LCQNetworkLogger setCPRequestAsyncObfuscationHandler:^(NSURLRequest * _Nonnull request, void (^ _Nonnull completion)(NSURLRequest * _Nonnull)) {
144
170
  NSString *callbackID = [[[NSUUID alloc] init] UUIDString];
145
171
  self.requestObfuscationCompletionDictionary[callbackID] = completion;
146
172
 
173
+
147
174
  NSDictionary *dict = [self createNetworkRequestDictForRequest:request callbackID:callbackID];
148
175
  if (lcq_hasListeners) {
149
176
  [self sendEventWithName:@"LCQNetworkLoggerHandler" body:dict];
150
177
  }
178
+
151
179
  }];
152
180
  }
153
181
 
182
+ // Helper to create a dictionary from the request and callbackID
154
183
  - (NSDictionary *)createNetworkRequestDictForRequest:(NSURLRequest *)request callbackID:(NSString *)callbackID {
155
184
  NSString *urlString = request.URL.absoluteString ?: @"";
156
185
  NSString *bodyString = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding] ?: @"";
@@ -164,12 +193,14 @@ RCT_EXPORT_METHOD(resetNetworkLogsListener) { }
164
193
  };
165
194
  }
166
195
 
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);
196
+ RCT_EXPORT_METHOD(forceStartNetworkLoggingIOS) {
197
+ [LCQNetworkLogger forceStartNetworkLogging];
172
198
  }
173
- #endif
199
+
200
+ RCT_EXPORT_METHOD(forceStopNetworkLoggingIOS) {
201
+ [LCQNetworkLogger forceStopNetworkLogging];
202
+ }
203
+
204
+
174
205
 
175
206
  @end
@@ -52,11 +52,11 @@
52
52
 
53
53
  - (void)resetTags;
54
54
 
55
- - (void)getTags:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
55
+ - (void)getTags:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
56
56
 
57
- - (void)setString:(NSString *)value key:(NSString *)key;
57
+ - (void)setString:(NSString *)value toKey:(NSString *)key;
58
58
 
59
- - (void)identifyUser:(NSString *)email name:(NSString *)name id:(nullable NSString *)userId;
59
+ - (void)identifyUser:(NSString *)email name:(NSString *)name userId:(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:(NSString *)bugMode crashMode:(NSString *)crashMode sessionReplay:(NSString *)sessionReplayMode;
67
+ - (void)setReproStepsConfig:(LCQUserStepsMode)bugMode:(LCQUserStepsMode)crashMode:(LCQUserStepsMode)sessionReplayMode;
68
68
 
69
- - (void)setUserAttribute:(NSString *)key value:(NSString *)value;
69
+ - (void)setUserAttribute:(NSString *)key withValue:(NSString *)value;
70
70
 
71
71
  - (void)getUserAttribute:(NSString *)key
72
- resolve:(RCTPromiseResolveBlock)resolve
73
- reject:(RCTPromiseRejectBlock)reject;
72
+ :(RCTPromiseResolveBlock)resolve
73
+ :(RCTPromiseRejectBlock)reject;
74
74
 
75
75
  - (void)removeUserAttribute:(NSString *)key;
76
76
 
77
77
  - (void)getAllUserAttributes:(RCTPromiseResolveBlock)resolve
78
- reject:(RCTPromiseRejectBlock)reject;
78
+ :(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 fileName:(NSString * _Nullable)fileName;
86
+ - (void)setFileAttachment:(NSString *)fileLocation;
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 reject:(RCTPromiseRejectBlock)reject;
115
- - (void)isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
116
- - (void)isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
114
+ - (void)isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
115
+ - (void)isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
116
+ - (void)isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve :(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 reject:(RCTPromiseRejectBlock)reject;
149
+ - (void)getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
150
150
 
151
151
  @end
@@ -16,13 +16,6 @@
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
-
26
19
  @interface Luciq (PrivateWillSendAPI)
27
20
  + (void)setWillSendReportHandler_private:(void(^)(LCQReport *report, void(^reportCompletionHandler)(LCQReport *)))willSendReportHandler_private;
28
21
  @end
@@ -66,7 +59,7 @@ RCT_EXPORT_METHOD(init:(NSString *)token
66
59
 
67
60
  [Luciq setCodePushVersion:codePushVersion];
68
61
 
69
- [Luciq setOverAirVersion:overAirVersion[@"version"] withType:(LCQOverAirType)[overAirVersion[@"service"] intValue]];
62
+ [Luciq setOverAirVersion:overAirVersion[@"version"] withType:[overAirVersion[@"service"] intValue]];
70
63
 
71
64
  [RNLuciq initWithToken:token
72
65
  invocationEvents:invocationEvents
@@ -79,26 +72,20 @@ RCT_EXPORT_METHOD(setCodePushVersion:(NSString *)version) {
79
72
  }
80
73
 
81
74
  RCT_EXPORT_METHOD(setOverAirVersion:(NSDictionary *)overAirVersion) {
82
- [Luciq setOverAirVersion:overAirVersion[@"version"] withType:(LCQOverAirType)[overAirVersion[@"service"] intValue]];
75
+ [Luciq setOverAirVersion:overAirVersion[@"version"] withType:[overAirVersion[@"service"] intValue]];
83
76
  }
84
77
 
85
78
  RCT_EXPORT_METHOD(setAppVariant:(NSString *)appVariant) {
86
79
  Luciq.appVariant = appVariant;
87
80
  }
88
81
 
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];
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];
98
86
  }
99
87
 
100
- RCT_EXPORT_METHOD(setFileAttachment:(NSString *)fileLocation
101
- fileName:(NSString * _Nullable)fileName) {
88
+ RCT_EXPORT_METHOD(setFileAttachment:(NSString *)fileLocation) {
102
89
  NSURL *url = [NSURL URLWithString:fileLocation];
103
90
  [Luciq addFileAttachmentWithURL:url];
104
91
  }
@@ -124,26 +111,23 @@ RCT_EXPORT_METHOD(setWebViewUserInteractionsTrackingEnabled:(BOOL)isEnabled) {
124
111
  }
125
112
 
126
113
  LCQReport *currentReport = nil;
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
114
+ RCT_EXPORT_METHOD(setPreSendingHandler:(RCTResponseSenderBlock)callBack) {
115
+ if (callBack != nil) {
116
+ Luciq.willSendReportHandler = ^LCQReport * _Nonnull(LCQReport * _Nonnull report) {
117
+ NSArray *tagsArray = report.tags;
118
+ NSArray *luciqLogs= report.luciqLogs;
119
+ NSArray *consoleLogs= report.consoleLogs;
120
+ NSDictionary *userAttributes= report.userAttributes;
121
+ NSArray *fileAttachments= report.fileLocations;
122
+ NSDictionary *dict = @{ @"tagsArray" : tagsArray, @"luciqLogs" : luciqLogs, @"consoleLogs" : consoleLogs, @"userAttributes" : userAttributes, @"fileAttachments" : fileAttachments};
123
+ [self sendEventWithName:@"LCQpreSendingHandler" body:dict];
124
+
125
+ currentReport = report;
126
+ return report;
141
127
  };
142
- [weakSelf sendEventWithName:@"LCQpreSendingHandler" body:dict];
143
-
144
- currentReport = report;
145
- return report;
146
- };
128
+ } else {
129
+ Luciq.willSendReportHandler = nil;
130
+ }
147
131
  }
148
132
 
149
133
  RCT_EXPORT_METHOD(appendTagToReport:(NSString*) tag) {
@@ -306,12 +290,11 @@ RCT_EXPORT_METHOD(resetTags) {
306
290
  [Luciq resetTags];
307
291
  }
308
292
 
309
- RCT_EXPORT_METHOD(getTags:(RCTPromiseResolveBlock)resolve
310
- reject:(RCTPromiseRejectBlock)reject) {
293
+ RCT_EXPORT_METHOD(getTags:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
311
294
  resolve([Luciq getTags]);
312
295
  }
313
296
 
314
- RCT_EXPORT_METHOD(setString:(NSString *)value key:(NSString *)key) {
297
+ RCT_EXPORT_METHOD(setString:(NSString*)value toKey:(NSString*)key) {
315
298
  [Luciq setValue:value forStringWithKey:key];
316
299
  }
317
300
 
@@ -323,9 +306,7 @@ RCT_EXPORT_METHOD(clearFileAttachments) {
323
306
  [Luciq clearFileAttachments];
324
307
  }
325
308
 
326
- RCT_EXPORT_METHOD(identifyUser:(NSString *)email
327
- name:(NSString *)name
328
- id:(NSString * _Nullable)userId) {
309
+ RCT_EXPORT_METHOD(identifyUser:(NSString *)email name:(NSString *)name userId:(nullable NSString *)userId) {
329
310
  [Luciq identifyUserWithID:userId email:email name:name];
330
311
  }
331
312
 
@@ -333,11 +314,11 @@ RCT_EXPORT_METHOD(logOut) {
333
314
  [Luciq logOut];
334
315
  }
335
316
 
336
- RCT_EXPORT_METHOD(setUserAttribute:(NSString *)key value:(NSString *)value) {
317
+ RCT_EXPORT_METHOD(setUserAttribute:(NSString *)key withValue:(NSString *)value) {
337
318
  [Luciq setUserAttribute:value withKey:key];
338
319
  }
339
320
 
340
- RCT_EXPORT_METHOD(getUserAttribute:(NSString *)key resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
321
+ RCT_EXPORT_METHOD(getUserAttribute:(NSString *)key :(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
341
322
  @try {
342
323
  resolve([Luciq userAttributeForKey:key]);
343
324
  } @catch (NSException *exception) {
@@ -349,8 +330,7 @@ RCT_EXPORT_METHOD(removeUserAttribute:(NSString *)key) {
349
330
  [Luciq removeUserAttributeForKey:key];
350
331
  }
351
332
 
352
- RCT_EXPORT_METHOD(getAllUserAttributes:(RCTPromiseResolveBlock)resolve
353
- reject:(RCTPromiseRejectBlock)reject) {
333
+ RCT_EXPORT_METHOD(getAllUserAttributes:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
354
334
  resolve([Luciq userAttributes]);
355
335
  }
356
336
 
@@ -520,16 +500,13 @@ RCT_EXPORT_METHOD(willRedirectToStore){
520
500
  [Luciq willRedirectToAppStore];
521
501
  }
522
502
 
523
- RCT_EXPORT_METHOD(isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve
524
- reject:(RCTPromiseRejectBlock)reject) {
503
+ RCT_EXPORT_METHOD(isW3ExternalTraceIDEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
525
504
  resolve(@(LCQNetworkLogger.w3ExternalTraceIDEnabled));
526
505
  }
527
- RCT_EXPORT_METHOD(isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve
528
- reject:(RCTPromiseRejectBlock)reject) {
506
+ RCT_EXPORT_METHOD(isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
529
507
  resolve(@(LCQNetworkLogger.w3ExternalGeneratedHeaderEnabled));
530
508
  }
531
- RCT_EXPORT_METHOD(isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve
532
- reject:(RCTPromiseRejectBlock)reject) {
509
+ RCT_EXPORT_METHOD(isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
533
510
  resolve(@(LCQNetworkLogger.w3CaughtHeaderEnabled));
534
511
  }
535
512
 
@@ -538,10 +515,6 @@ RCT_EXPORT_METHOD(isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve
538
515
  return ArgsRegistry.getAll;
539
516
  }
540
517
 
541
- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAllConstants) {
542
- return ArgsRegistry.getAll;
543
- }
544
-
545
518
  - (void) setBaseUrlForDeprecationLogs {
546
519
  SEL setCurrentPlatformSEL = NSSelectorFromString(@"setCurrentPlatform:");
547
520
  if([[Luciq class] respondsToSelector:setCurrentPlatformSEL]) {
@@ -576,8 +549,7 @@ RCT_EXPORT_METHOD(enableAutoMasking:(NSArray *)autoMaskingTypes) {
576
549
  [Luciq setAutoMaskScreenshots: autoMaskingOptions];
577
550
  };
578
551
 
579
- RCT_EXPORT_METHOD(getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve
580
- reject:(RCTPromiseRejectBlock)reject) {
552
+ RCT_EXPORT_METHOD(getNetworkBodyMaxSize:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
581
553
  resolve(@(LCQNetworkLogger.getNetworkBodyMaxSize));
582
554
  }
583
555
 
@@ -587,7 +559,7 @@ RCT_EXPORT_METHOD(setNetworkLogBodyEnabled:(BOOL)isEnabled) {
587
559
 
588
560
  // Checks if Luciq SDK is initialized
589
561
  RCT_EXPORT_METHOD(isBuilt:(RCTPromiseResolveBlock)resolve
590
- reject:(RCTPromiseRejectBlock)reject) {
562
+ rejecter:(RCTPromiseRejectBlock)reject) {
591
563
  @try {
592
564
  BOOL isBuilt = YES;
593
565
  resolve(@(isBuilt));
@@ -597,25 +569,4 @@ RCT_EXPORT_METHOD(isBuilt:(RCTPromiseResolveBlock)resolve
597
569
  }
598
570
  }
599
571
 
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
-
621
572
  @end
@@ -21,13 +21,13 @@
21
21
 
22
22
  - (void)setEnabled:(BOOL) isEnabled;
23
23
 
24
- - (void)hasChats:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
24
+ - (void)hasChats:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
25
25
 
26
26
  - (void)show;
27
27
 
28
- - (void)setOnNewReplyReceivedHandler;
28
+ - (void)setOnNewReplyReceivedHandler:(RCTResponseSenderBlock) callback;
29
29
 
30
- - (void)getUnreadRepliesCount:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
30
+ - (void)getUnreadRepliesCount:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
31
31
 
32
32
  - (void)setInAppNotificationEnabled:(BOOL)isChatNotificationEnabled;
33
33
 
@@ -0,0 +1,80 @@
1
+ //
2
+ // LuciqRepliesBridge.m
3
+ // RNLuciq
4
+ //
5
+ // Created by Salma Ali on 7/30/19.
6
+ // Copyright © 2019 luciq. All rights reserved.
7
+ //
8
+ //
9
+
10
+ #import "LuciqRepliesBridge.h"
11
+ #import <LuciqSDK/LCQReplies.h>
12
+ #import <asl.h>
13
+ #import <React/RCTLog.h>
14
+ #import <os/log.h>
15
+ #import <LuciqSDK/LCQTypes.h>
16
+ #import <React/RCTUIManager.h>
17
+
18
+ @implementation LuciqRepliesBridge
19
+
20
+ - (dispatch_queue_t)methodQueue {
21
+ return dispatch_get_main_queue();
22
+ }
23
+
24
+ + (BOOL)requiresMainQueueSetup
25
+ {
26
+ return NO;
27
+ }
28
+
29
+ - (NSArray<NSString *> *)supportedEvents {
30
+ return @[@"LCQOnNewReplyReceivedCallback"];
31
+ }
32
+
33
+ RCT_EXPORT_MODULE(LCQReplies)
34
+
35
+ RCT_EXPORT_METHOD(setEnabled:(BOOL) isEnabled) {
36
+ LCQReplies.enabled = isEnabled;
37
+ }
38
+
39
+ RCT_EXPORT_METHOD(hasChats:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
40
+ BOOL hasChats = LCQReplies.hasChats;
41
+ resolve(@(hasChats));
42
+
43
+ }
44
+
45
+ RCT_EXPORT_METHOD(show) {
46
+ [[NSRunLoop mainRunLoop] performSelector:@selector(show) target:[LCQReplies class] argument:nil order:0 modes:@[NSDefaultRunLoopMode]];
47
+ }
48
+
49
+ RCT_EXPORT_METHOD(setOnNewReplyReceivedHandler:(RCTResponseSenderBlock) callback) {
50
+ if (callback != nil) {
51
+ LCQReplies.didReceiveReplyHandler = ^{
52
+ [self sendEventWithName:@"LCQOnNewReplyReceivedCallback" body:nil];
53
+ };
54
+ } else {
55
+ LCQReplies.didReceiveReplyHandler = nil;
56
+ }
57
+
58
+ }
59
+
60
+ RCT_EXPORT_METHOD(getUnreadRepliesCount:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
61
+ resolve(@(LCQReplies.unreadRepliesCount));
62
+ }
63
+
64
+ RCT_EXPORT_METHOD(setInAppNotificationEnabled:(BOOL)isChatNotificationEnabled) {
65
+ LCQReplies.inAppNotificationsEnabled = isChatNotificationEnabled;
66
+ }
67
+
68
+ RCT_EXPORT_METHOD(setPushNotificationsEnabled:(BOOL)isPushNotificationEnabled) {
69
+ [LCQReplies setPushNotificationsEnabled:isPushNotificationEnabled];
70
+ }
71
+
72
+ @synthesize description;
73
+
74
+ @synthesize hash;
75
+
76
+ @synthesize superclass;
77
+
78
+ @end
79
+
80
+
@@ -19,17 +19,17 @@
19
19
 
20
20
  - (void)setUserStepsEnabled:(BOOL)isEnabled;
21
21
 
22
- - (void)getSessionReplayLink:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
22
+ - (void)getSessionReplayLink:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
23
23
 
24
- - (void)setSyncCallback:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
24
+ - (void)setSyncCallback;
25
25
 
26
26
  - (void)evaluateSync:(BOOL)result;
27
27
 
28
- - (void)setCapturingMode:(NSString *)mode;
28
+ - (void)setCapturingMode:(LCQScreenshotCapturingMode)mode;
29
29
 
30
- - (void)setScreenshotQuality:(NSString *)quality;
30
+ - (void)setScreenshotQuality:(LCQScreenshotQualityMode)quality;
31
31
 
32
- - (void)setScreenshotCaptureInterval:(double)intervalMs;
32
+ - (void)setScreenshotCaptureInterval:(NSInteger)intervalMs;
33
33
 
34
34
  @property (atomic, copy) SessionEvaluationCompletion sessionEvaluationCompletion;
35
35