@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.
- package/README.md +0 -118
- package/RNLuciq.podspec +2 -6
- package/android/build.gradle +0 -25
- package/android/proguard-rules.txt +1 -1
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqAPMModule.java +12 -3
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqBugReportingModule.java +24 -28
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqCrashReportingModule.java +7 -18
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsModule.java +2 -1
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerModule.java +56 -29
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqReactnativeModule.java +47 -78
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqRepliesModule.java +16 -4
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSessionReplayModule.java +16 -5
- package/android/src/main/java/ai/luciq/reactlibrary/RNLuciqSurveysModule.java +15 -7
- package/android/src/main/java/ai/luciq/reactlibrary/utils/EventEmitterModule.java +7 -0
- package/dist/modules/BugReporting.js +3 -3
- package/dist/modules/Luciq.js +3 -2
- package/dist/modules/NetworkLogger.d.ts +0 -5
- package/dist/modules/NetworkLogger.js +9 -1
- package/dist/modules/Replies.js +1 -1
- package/dist/modules/Surveys.js +2 -2
- package/dist/native/NativeBugReporting.d.ts +4 -4
- package/dist/native/NativeCrashReporting.d.ts +2 -2
- package/dist/native/NativeLuciq.d.ts +3 -2
- package/dist/native/NativePackage.js +2 -25
- package/dist/native/NativeReplies.d.ts +1 -1
- package/dist/native/NativeSurveys.d.ts +2 -2
- package/dist/utils/Enums.js +1 -3
- package/dist/utils/FeatureFlags.d.ts +6 -0
- package/dist/utils/FeatureFlags.js +35 -0
- package/dist/utils/LuciqUtils.d.ts +1 -1
- package/dist/utils/LuciqUtils.js +9 -0
- package/dist/utils/XhrNetworkInterceptor.js +85 -53
- package/ios/RNLuciq/LuciqAPMBridge.h +5 -5
- package/ios/RNLuciq/{LuciqAPMBridge.mm → LuciqAPMBridge.m} +39 -48
- package/ios/RNLuciq/LuciqBugReportingBridge.h +6 -6
- package/ios/RNLuciq/LuciqBugReportingBridge.m +249 -0
- package/ios/RNLuciq/LuciqCrashReportingBridge.h +5 -16
- package/ios/RNLuciq/LuciqCrashReportingBridge.m +68 -0
- package/ios/RNLuciq/LuciqFeatureRequestsBridge.h +1 -1
- package/ios/RNLuciq/{LuciqFeatureRequestsBridge.mm → LuciqFeatureRequestsBridge.m} +16 -21
- package/ios/RNLuciq/LuciqNetworkLoggerBridge.h +30 -1
- package/ios/RNLuciq/{LuciqNetworkLoggerBridge.mm → LuciqNetworkLoggerBridge.m} +77 -46
- package/ios/RNLuciq/LuciqReactBridge.h +13 -13
- package/ios/RNLuciq/{LuciqReactBridge.mm → LuciqReactBridge.m} +34 -83
- package/ios/RNLuciq/LuciqRepliesBridge.h +3 -3
- package/ios/RNLuciq/LuciqRepliesBridge.m +80 -0
- package/ios/RNLuciq/LuciqSessionReplayBridge.h +5 -5
- package/ios/RNLuciq/{LuciqSessionReplayBridge.mm → LuciqSessionReplayBridge.m} +25 -35
- package/ios/RNLuciq/LuciqSurveysBridge.h +5 -5
- package/ios/RNLuciq/{LuciqSurveysBridge.mm → LuciqSurveysBridge.m} +35 -34
- package/package.json +1 -9
- package/scripts/get-github-app-token.sh +70 -0
- package/scripts/notify-github.sh +17 -8
- package/src/modules/BugReporting.ts +3 -3
- package/src/modules/Luciq.ts +4 -2
- package/src/modules/NetworkLogger.ts +26 -1
- package/src/modules/Replies.ts +1 -1
- package/src/modules/Surveys.ts +2 -2
- package/src/native/NativeBugReporting.ts +6 -3
- package/src/native/NativeCrashReporting.ts +2 -2
- package/src/native/NativeLuciq.ts +3 -2
- package/src/native/NativePackage.ts +2 -52
- package/src/native/NativeReplies.ts +1 -1
- package/src/native/NativeSurveys.ts +2 -2
- package/src/utils/Enums.ts +1 -4
- package/src/utils/FeatureFlags.ts +44 -0
- package/src/utils/LuciqUtils.ts +21 -1
- package/src/utils/XhrNetworkInterceptor.ts +128 -55
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +0 -9
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +0 -33
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +0 -33
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +0 -9
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +0 -9
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +0 -33
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +0 -33
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +0 -33
- package/android/src/newarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +0 -33
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqAPMBaseSpec.java +0 -11
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBaseSpec.java +0 -22
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqBugReportingBaseSpec.java +0 -22
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqCrashReportingBaseSpec.java +0 -10
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqFeatureRequestsBaseSpec.java +0 -10
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqNetworkLoggerBaseSpec.java +0 -22
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqRepliesBaseSpec.java +0 -22
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSessionReplayBaseSpec.java +0 -22
- package/android/src/oldarch/java/ai/luciq/reactlibrary/RNLuciqSurveysBaseSpec.java +0 -22
- package/dist/native/specs/NativeAPM.d.ts +0 -21
- package/dist/native/specs/NativeAPM.js +0 -2
- package/dist/native/specs/NativeBugReporting.d.ts +0 -29
- package/dist/native/specs/NativeBugReporting.js +0 -2
- package/dist/native/specs/NativeCrashReporting.d.ts +0 -12
- package/dist/native/specs/NativeCrashReporting.js +0 -2
- package/dist/native/specs/NativeFeatureRequests.d.ts +0 -8
- package/dist/native/specs/NativeFeatureRequests.js +0 -2
- package/dist/native/specs/NativeLuciq.d.ts +0 -80
- package/dist/native/specs/NativeLuciq.js +0 -2
- package/dist/native/specs/NativeNetworkLogger.d.ts +0 -16
- package/dist/native/specs/NativeNetworkLogger.js +0 -2
- package/dist/native/specs/NativeReplies.d.ts +0 -21
- package/dist/native/specs/NativeReplies.js +0 -2
- package/dist/native/specs/NativeSessionReplay.d.ts +0 -17
- package/dist/native/specs/NativeSessionReplay.js +0 -2
- package/dist/native/specs/NativeSurveys.d.ts +0 -18
- package/dist/native/specs/NativeSurveys.js +0 -2
- package/ios/RNLuciq/LuciqBugReportingBridge.mm +0 -234
- package/ios/RNLuciq/LuciqCrashReportingBridge.mm +0 -91
- package/ios/RNLuciq/LuciqRepliesBridge.mm +0 -86
- package/src/native/specs/NativeAPM.ts +0 -47
- package/src/native/specs/NativeBugReporting.ts +0 -53
- package/src/native/specs/NativeCrashReporting.ts +0 -23
- package/src/native/specs/NativeFeatureRequests.ts +0 -10
- package/src/native/specs/NativeLuciq.ts +0 -137
- package/src/native/specs/NativeNetworkLogger.ts +0 -31
- package/src/native/specs/NativeReplies.ts +0 -27
- package/src/native/specs/NativeSessionReplay.ts +0 -20
- 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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
72
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(isNativeInterceptionEnabled) {
|
|
56
73
|
return @(LCQNetworkLogger.isNativeNetworkInterceptionFeatureEnabled);
|
|
57
74
|
}
|
|
58
75
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
168
|
-
|
|
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
|
-
|
|
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
|
|
55
|
+
- (void)getTags:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
|
|
56
56
|
|
|
57
|
-
- (void)setString:(NSString *)value
|
|
57
|
+
- (void)setString:(NSString *)value toKey:(NSString *)key;
|
|
58
58
|
|
|
59
|
-
- (void)identifyUser:(NSString *)email name:(NSString *)name
|
|
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:(
|
|
67
|
+
- (void)setReproStepsConfig:(LCQUserStepsMode)bugMode:(LCQUserStepsMode)crashMode:(LCQUserStepsMode)sessionReplayMode;
|
|
68
68
|
|
|
69
|
-
- (void)setUserAttribute:(NSString *)key
|
|
69
|
+
- (void)setUserAttribute:(NSString *)key withValue:(NSString *)value;
|
|
70
70
|
|
|
71
71
|
- (void)getUserAttribute:(NSString *)key
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
:(RCTPromiseResolveBlock)resolve
|
|
73
|
+
:(RCTPromiseRejectBlock)reject;
|
|
74
74
|
|
|
75
75
|
- (void)removeUserAttribute:(NSString *)key;
|
|
76
76
|
|
|
77
77
|
- (void)getAllUserAttributes:(RCTPromiseResolveBlock)resolve
|
|
78
|
-
|
|
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
|
|
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
|
|
115
|
-
- (void)isW3ExternalGeneratedHeaderEnabled:(RCTPromiseResolveBlock)resolve
|
|
116
|
-
- (void)isW3CaughtHeaderEnabled:(RCTPromiseResolveBlock)resolve
|
|
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
|
|
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:
|
|
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:
|
|
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:(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
22
|
+
- (void)getSessionReplayLink:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
|
|
23
23
|
|
|
24
|
-
- (void)setSyncCallback
|
|
24
|
+
- (void)setSyncCallback;
|
|
25
25
|
|
|
26
26
|
- (void)evaluateSync:(BOOL)result;
|
|
27
27
|
|
|
28
|
-
- (void)setCapturingMode:(
|
|
28
|
+
- (void)setCapturingMode:(LCQScreenshotCapturingMode)mode;
|
|
29
29
|
|
|
30
|
-
- (void)setScreenshotQuality:(
|
|
30
|
+
- (void)setScreenshotQuality:(LCQScreenshotQualityMode)quality;
|
|
31
31
|
|
|
32
|
-
- (void)setScreenshotCaptureInterval:(
|
|
32
|
+
- (void)setScreenshotCaptureInterval:(NSInteger)intervalMs;
|
|
33
33
|
|
|
34
34
|
@property (atomic, copy) SessionEvaluationCompletion sessionEvaluationCompletion;
|
|
35
35
|
|