@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
|
@@ -6,13 +6,6 @@
|
|
|
6
6
|
#import <LuciqSDK/LCQSessionReplay.h>
|
|
7
7
|
#import "LuciqSessionReplayBridge.h"
|
|
8
8
|
|
|
9
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
10
|
-
#import <RNLuciqSpec/RNLuciqSpec.h>
|
|
11
|
-
|
|
12
|
-
@interface LuciqSessionReplayBridge () <NativeSessionReplaySpec>
|
|
13
|
-
@end
|
|
14
|
-
#endif
|
|
15
|
-
|
|
16
9
|
@implementation LuciqSessionReplayBridge
|
|
17
10
|
|
|
18
11
|
- (dispatch_queue_t)methodQueue {
|
|
@@ -48,14 +41,14 @@ RCT_EXPORT_METHOD(setUserStepsEnabled:(BOOL)isEnabled) {
|
|
|
48
41
|
LCQSessionReplay.userStepsEnabled = isEnabled;
|
|
49
42
|
}
|
|
50
43
|
|
|
51
|
-
RCT_EXPORT_METHOD(getSessionReplayLink:
|
|
52
|
-
|
|
44
|
+
RCT_EXPORT_METHOD(getSessionReplayLink:
|
|
45
|
+
(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock)reject) {
|
|
53
46
|
NSString *link = LCQSessionReplay.sessionReplayLink;
|
|
54
47
|
resolve(link);
|
|
55
48
|
}
|
|
56
49
|
|
|
57
50
|
- (NSArray<NSDictionary *> *)getNetworkLogsArray:
|
|
58
|
-
(NSArray<LCQSessionMetadataNetworkLogs *>*)networkLogs {
|
|
51
|
+
(NSArray<LCQSessionMetadataNetworkLogs *>*) networkLogs {
|
|
59
52
|
NSMutableArray<NSDictionary *> *networkLogsArray = [NSMutableArray array];
|
|
60
53
|
|
|
61
54
|
for (LCQSessionMetadataNetworkLogs* log in networkLogs) {
|
|
@@ -77,52 +70,49 @@ RCT_EXPORT_METHOD(getSessionReplayLink:(RCTPromiseResolveBlock)resolve
|
|
|
77
70
|
@"bugsCount": @(metadataObject.bugsCount),
|
|
78
71
|
@"fatalCrashCount": @(metadataObject.fatalCrashCount),
|
|
79
72
|
@"oomCrashCount": @(metadataObject.oomCrashCount),
|
|
80
|
-
@"networkLogs":
|
|
73
|
+
@"networkLogs":[self getNetworkLogsArray:metadataObject.networkLogs]
|
|
81
74
|
};
|
|
82
75
|
}
|
|
83
76
|
|
|
84
|
-
RCT_EXPORT_METHOD(setSyncCallback
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
body:[strongSelf getMetadataObjectMap:metadataObject]];
|
|
92
|
-
strongSelf.sessionEvaluationCompletion = completion;
|
|
77
|
+
RCT_EXPORT_METHOD(setSyncCallback) {
|
|
78
|
+
[LCQSessionReplay setSyncCallbackWithHandler:^(LCQSessionMetadata * _Nonnull metadataObject, SessionEvaluationCompletion _Nonnull completion) {
|
|
79
|
+
|
|
80
|
+
[self sendEventWithName:@"LCQSessionReplayOnSyncCallback"
|
|
81
|
+
body:[self getMetadataObjectMap:metadataObject]];
|
|
82
|
+
|
|
83
|
+
self.sessionEvaluationCompletion = completion;
|
|
93
84
|
}];
|
|
94
|
-
resolve([NSNull null]);
|
|
95
85
|
}
|
|
96
86
|
|
|
97
87
|
RCT_EXPORT_METHOD(evaluateSync:(BOOL)result) {
|
|
88
|
+
|
|
98
89
|
if (self.sessionEvaluationCompletion) {
|
|
90
|
+
|
|
99
91
|
self.sessionEvaluationCompletion(result);
|
|
92
|
+
|
|
100
93
|
self.sessionEvaluationCompletion = nil;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
94
|
|
|
104
|
-
|
|
105
|
-
LCQSessionReplay.screenshotCapturingMode = (LCQScreenshotCapturingMode)[mode intValue];
|
|
95
|
+
}
|
|
106
96
|
}
|
|
107
97
|
|
|
108
|
-
RCT_EXPORT_METHOD(
|
|
109
|
-
LCQSessionReplay.
|
|
98
|
+
RCT_EXPORT_METHOD(setCapturingMode:(LCQScreenshotCapturingMode)mode) {
|
|
99
|
+
LCQSessionReplay.screenshotCapturingMode = mode;
|
|
110
100
|
}
|
|
111
101
|
|
|
112
|
-
RCT_EXPORT_METHOD(
|
|
113
|
-
LCQSessionReplay.
|
|
102
|
+
RCT_EXPORT_METHOD(setScreenshotQuality:(LCQScreenshotQualityMode)quality) {
|
|
103
|
+
LCQSessionReplay.screenshotQualityMode = quality;
|
|
114
104
|
}
|
|
115
105
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
119
|
-
{
|
|
120
|
-
return std::make_shared<facebook::react::NativeSessionReplaySpecJSI>(params);
|
|
106
|
+
RCT_EXPORT_METHOD(setScreenshotCaptureInterval:(NSInteger)intervalMs) {
|
|
107
|
+
LCQSessionReplay.screenshotCaptureInterval = intervalMs;
|
|
121
108
|
}
|
|
122
|
-
#endif
|
|
123
109
|
|
|
124
110
|
@synthesize description;
|
|
111
|
+
|
|
125
112
|
@synthesize hash;
|
|
113
|
+
|
|
126
114
|
@synthesize superclass;
|
|
127
115
|
|
|
128
116
|
@end
|
|
117
|
+
|
|
118
|
+
|
|
@@ -22,19 +22,19 @@
|
|
|
22
22
|
|
|
23
23
|
- (void)showSurveysIfAvailable;
|
|
24
24
|
|
|
25
|
-
- (void)setOnShowHandler;
|
|
25
|
+
- (void)setOnShowHandler:(RCTResponseSenderBlock)callBack;
|
|
26
26
|
|
|
27
|
-
- (void)setOnDismissHandler;
|
|
27
|
+
- (void)setOnDismissHandler:(RCTResponseSenderBlock)callBack;
|
|
28
28
|
|
|
29
29
|
- (void)setAutoShowingEnabled:(BOOL)autoShowingSurveysEnabled;
|
|
30
30
|
|
|
31
31
|
- (void)setShouldShowWelcomeScreen:(BOOL)shouldShowWelcomeScreen;
|
|
32
32
|
|
|
33
33
|
- (void)hasRespondedToSurvey:(NSString *)surveyToken
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
:(RCTPromiseResolveBlock)resolve
|
|
35
|
+
:(RCTPromiseRejectBlock)reject;
|
|
36
36
|
|
|
37
|
-
- (void)getAvailableSurveys:(RCTPromiseResolveBlock)resolve
|
|
37
|
+
- (void)getAvailableSurveys:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject;
|
|
38
38
|
|
|
39
39
|
- (void)setEnabled:(BOOL)surveysEnabled;
|
|
40
40
|
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
//
|
|
2
|
+
// LuciqSurveysBridge.m
|
|
3
|
+
// RNLuciq
|
|
4
|
+
//
|
|
5
|
+
// Created by Salma Ali on 7/30/19.
|
|
6
|
+
// Copyright © 2019 luciq. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
1
9
|
#import "LuciqSurveysBridge.h"
|
|
2
10
|
#import <LuciqSDK/LCQSurveys.h>
|
|
3
11
|
#import <asl.h>
|
|
@@ -6,13 +14,6 @@
|
|
|
6
14
|
#import <LuciqSDK/LCQTypes.h>
|
|
7
15
|
#import <React/RCTUIManager.h>
|
|
8
16
|
|
|
9
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
10
|
-
#import <RNLuciqSpec/RNLuciqSpec.h>
|
|
11
|
-
|
|
12
|
-
@interface LuciqSurveysBridge () <NativeSurveysSpec>
|
|
13
|
-
@end
|
|
14
|
-
#endif
|
|
15
|
-
|
|
16
17
|
@implementation LuciqSurveysBridge
|
|
17
18
|
|
|
18
19
|
- (dispatch_queue_t)methodQueue {
|
|
@@ -26,9 +27,9 @@
|
|
|
26
27
|
|
|
27
28
|
- (NSArray<NSString *> *)supportedEvents {
|
|
28
29
|
return @[
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
@"LCQWillShowSurvey",
|
|
31
|
+
@"LCQDidDismissSurvey"
|
|
32
|
+
];
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
RCT_EXPORT_MODULE(LCQSurveys)
|
|
@@ -37,21 +38,18 @@ RCT_EXPORT_METHOD(showSurvey:(NSString *)surveyToken) {
|
|
|
37
38
|
[LCQSurveys showSurveyWithToken:surveyToken];
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
RCT_EXPORT_METHOD(hasRespondedToSurvey:(NSString *)surveyToken
|
|
41
|
-
resolve:(RCTPromiseResolveBlock)resolve
|
|
42
|
-
reject:(RCTPromiseRejectBlock)reject) {
|
|
41
|
+
RCT_EXPORT_METHOD(hasRespondedToSurvey:(NSString *)surveyToken :(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
|
|
43
42
|
[LCQSurveys hasRespondedToSurveyWithToken:surveyToken
|
|
44
43
|
completionHandler:^(BOOL hasResponded) {
|
|
45
44
|
resolve(@(hasResponded));
|
|
46
45
|
}];
|
|
47
46
|
}
|
|
48
47
|
|
|
49
|
-
RCT_EXPORT_METHOD(getAvailableSurveys:(RCTPromiseResolveBlock)resolve
|
|
50
|
-
reject:(RCTPromiseRejectBlock)reject) {
|
|
48
|
+
RCT_EXPORT_METHOD(getAvailableSurveys:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject) {
|
|
51
49
|
[LCQSurveys availableSurveysWithCompletionHandler:^(NSArray<LCQSurvey *> *availableSurveys) {
|
|
52
50
|
NSMutableArray<NSDictionary*>* mappedSurveys = [[NSMutableArray alloc] init];
|
|
53
51
|
for (LCQSurvey* survey in availableSurveys) {
|
|
54
|
-
[mappedSurveys addObject:@{@"title": survey.title}];
|
|
52
|
+
[mappedSurveys addObject:@{@"title": survey.title }];
|
|
55
53
|
}
|
|
56
54
|
resolve(mappedSurveys);
|
|
57
55
|
}];
|
|
@@ -65,18 +63,24 @@ RCT_EXPORT_METHOD(showSurveysIfAvailable) {
|
|
|
65
63
|
[LCQSurveys showSurveyIfAvailable];
|
|
66
64
|
}
|
|
67
65
|
|
|
68
|
-
RCT_EXPORT_METHOD(setOnShowHandler) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
RCT_EXPORT_METHOD(setOnShowHandler:(RCTResponseSenderBlock)callBack) {
|
|
67
|
+
if (callBack != nil) {
|
|
68
|
+
LCQSurveys.willShowSurveyHandler = ^{
|
|
69
|
+
[self sendEventWithName:@"LCQWillShowSurvey" body:nil];
|
|
70
|
+
};
|
|
71
|
+
} else {
|
|
72
|
+
LCQSurveys.willShowSurveyHandler = ^{};
|
|
73
|
+
}
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
RCT_EXPORT_METHOD(setOnDismissHandler) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
RCT_EXPORT_METHOD(setOnDismissHandler:(RCTResponseSenderBlock)callBack) {
|
|
77
|
+
if (callBack != nil) {
|
|
78
|
+
LCQSurveys.didDismissSurveyHandler = ^{
|
|
79
|
+
[self sendEventWithName:@"LCQDidDismissSurvey" body:nil];
|
|
80
|
+
};
|
|
81
|
+
} else {
|
|
82
|
+
LCQSurveys.didDismissSurveyHandler = ^{};
|
|
83
|
+
}
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
RCT_EXPORT_METHOD(setAutoShowingEnabled:(BOOL)autoShowingSurveysEnabled) {
|
|
@@ -91,16 +95,13 @@ RCT_EXPORT_METHOD(setAppStoreURL:(NSString *)appStoreURL) {
|
|
|
91
95
|
LCQSurveys.appStoreURL = appStoreURL;
|
|
92
96
|
}
|
|
93
97
|
|
|
94
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
95
|
-
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
96
|
-
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
97
|
-
{
|
|
98
|
-
return std::make_shared<facebook::react::NativeSurveysSpecJSI>(params);
|
|
99
|
-
}
|
|
100
|
-
#endif
|
|
101
|
-
|
|
102
98
|
@synthesize description;
|
|
99
|
+
|
|
103
100
|
@synthesize hash;
|
|
101
|
+
|
|
104
102
|
@synthesize superclass;
|
|
105
103
|
|
|
106
104
|
@end
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luciq/react-native",
|
|
3
3
|
"description": "Luciq is the Agentic Observability Platform built for Mobile.",
|
|
4
|
-
"version": "19.4.0-
|
|
4
|
+
"version": "19.4.0-47504-SNAPSHOT",
|
|
5
5
|
"author": "Luciq (https://luciq.ai)",
|
|
6
6
|
"repository": "github:luciqai/luciq-reactnative-sdk",
|
|
7
7
|
"homepage": "https://www.luciq.ai/platforms/react-native",
|
|
@@ -87,13 +87,5 @@
|
|
|
87
87
|
"expo": {
|
|
88
88
|
"optional": true
|
|
89
89
|
}
|
|
90
|
-
},
|
|
91
|
-
"codegenConfig": {
|
|
92
|
-
"name": "RNLuciqSpec",
|
|
93
|
-
"type": "modules",
|
|
94
|
-
"jsSrcsDir": "src/native/specs",
|
|
95
|
-
"android": {
|
|
96
|
-
"javaPackageName": "ai.luciq.reactlibrary"
|
|
97
|
-
}
|
|
98
90
|
}
|
|
99
91
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Generates a GitHub App installation token using openssl + curl.
|
|
4
|
+
# No external dependencies required.
|
|
5
|
+
#
|
|
6
|
+
# Usage: bash get-github-app-token.sh <APP_ID_ENV> <PRIVATE_KEY_ENV> <INSTALLATION_ID_ENV>
|
|
7
|
+
# Example: bash get-github-app-token.sh AND_LUCIQ_APP_ID AND_LUCIQ_PRIVATE_KEY AND_LUCIQ_INSTALLATION_ID
|
|
8
|
+
# Example: bash get-github-app-token.sh AND_INSTABUG_APP_ID AND_INSTABUG_PRIVATE_KEY AND_INSTABUG_INSTALLATION_ID
|
|
9
|
+
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
APP_ID_ENV="${1:?Usage: $0 <APP_ID_ENV> <PRIVATE_KEY_ENV> <INSTALLATION_ID_ENV>}"
|
|
13
|
+
PRIVATE_KEY_ENV="${2:?Usage: $0 <APP_ID_ENV> <PRIVATE_KEY_ENV> <INSTALLATION_ID_ENV>}"
|
|
14
|
+
INSTALL_ID_ENV="${3:?Usage: $0 <APP_ID_ENV> <PRIVATE_KEY_ENV> <INSTALLATION_ID_ENV>}"
|
|
15
|
+
|
|
16
|
+
APP_ID="${!APP_ID_ENV:?Error: $APP_ID_ENV is not set}"
|
|
17
|
+
PRIVATE_KEY="${!PRIVATE_KEY_ENV:?Error: $PRIVATE_KEY_ENV is not set}"
|
|
18
|
+
INSTALL_ID="${!INSTALL_ID_ENV:?Error: $INSTALL_ID_ENV is not set}"
|
|
19
|
+
|
|
20
|
+
# Reconstruct PEM file from flattened env var
|
|
21
|
+
# CircleCI flattens multiline env vars into a single line,
|
|
22
|
+
# so we extract header/footer and re-wrap the base64 body at 64 chars
|
|
23
|
+
PEM_FILE=$(mktemp)
|
|
24
|
+
chmod 600 "$PEM_FILE"
|
|
25
|
+
trap 'rm -f "$PEM_FILE"' EXIT
|
|
26
|
+
|
|
27
|
+
BODY=$(printf '%s' "$PRIVATE_KEY" | sed 's/-----BEGIN RSA PRIVATE KEY-----//;s/-----END RSA PRIVATE KEY-----//;s/ //g')
|
|
28
|
+
{
|
|
29
|
+
echo "-----BEGIN RSA PRIVATE KEY-----"
|
|
30
|
+
echo "$BODY" | fold -w 64
|
|
31
|
+
echo "-----END RSA PRIVATE KEY-----"
|
|
32
|
+
} > "$PEM_FILE"
|
|
33
|
+
|
|
34
|
+
# Base64url encode (RFC 4648): replace +/ with -_, strip =
|
|
35
|
+
b64url() {
|
|
36
|
+
openssl base64 -A | tr '+/' '-_' | tr -d '='
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
NOW=$(date +%s)
|
|
40
|
+
IAT=$((NOW - 60)) # 60s clock skew allowance per GitHub docs
|
|
41
|
+
EXP=$((NOW + 600)) # 10min max JWT lifetime per GitHub docs
|
|
42
|
+
|
|
43
|
+
# Create JWT header and payload
|
|
44
|
+
HEADER=$(printf '{"alg":"RS256","typ":"JWT"}' | b64url)
|
|
45
|
+
PAYLOAD=$(printf '{"iat":%d,"exp":%d,"iss":"%s"}' "$IAT" "$EXP" "$APP_ID" | b64url)
|
|
46
|
+
|
|
47
|
+
# Sign with RSA-SHA256
|
|
48
|
+
SIGNATURE=$(printf '%s.%s' "$HEADER" "$PAYLOAD" | openssl dgst -sha256 -sign "$PEM_FILE" -binary | b64url)
|
|
49
|
+
|
|
50
|
+
JWT_TOKEN="${HEADER}.${PAYLOAD}.${SIGNATURE}"
|
|
51
|
+
|
|
52
|
+
# Exchange JWT for installation token
|
|
53
|
+
RESPONSE=$(curl -sf -X POST \
|
|
54
|
+
-H "Authorization: Bearer $JWT_TOKEN" \
|
|
55
|
+
-H "Accept: application/vnd.github+json" \
|
|
56
|
+
-H "X-GitHub-Api-Version: 2022-11-28" \
|
|
57
|
+
"https://api.github.com/app/installations/${INSTALL_ID}/access_tokens") || {
|
|
58
|
+
echo "Error: GitHub API request failed (HTTP error)" >&2
|
|
59
|
+
exit 1
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
TOKEN=$(echo "$RESPONSE" | jq -r '.token // empty')
|
|
63
|
+
|
|
64
|
+
if [ -z "$TOKEN" ]; then
|
|
65
|
+
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "unknown error"')
|
|
66
|
+
echo "Error: Failed to get installation token: $ERROR_MSG" >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
echo "$TOKEN"
|
package/scripts/notify-github.sh
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
3
5
|
pr_url="https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pulls?head=$CIRCLE_PROJECT_USERNAME:$CIRCLE_BRANCH&state=open"
|
|
4
6
|
pr_response=$(curl --location --request GET "$pr_url" --header "Authorization: Bearer $RELEASE_GITHUB_TOKEN")
|
|
5
7
|
|
|
6
|
-
if
|
|
7
|
-
echo "
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
if ! echo "$pr_response" | jq -e 'type == "array"' >/dev/null; then
|
|
9
|
+
echo "Unexpected GitHub API response (not an array):"
|
|
10
|
+
echo "$pr_response"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
--data-raw "$1"
|
|
14
|
+
if [ "$(echo "$pr_response" | jq length)" -eq 0 ]; then
|
|
15
|
+
echo "No PR found to update"
|
|
16
|
+
exit 0
|
|
15
17
|
fi
|
|
18
|
+
|
|
19
|
+
pr_comment_url=$(echo "$pr_response" | jq -r ".[]._links.comments.href")
|
|
20
|
+
|
|
21
|
+
curl --location --request POST "$pr_comment_url" \
|
|
22
|
+
--header 'Content-Type: application/json' \
|
|
23
|
+
--header "Authorization: Bearer $RELEASE_GITHUB_TOKEN" \
|
|
24
|
+
--data-raw "$1"
|
|
@@ -47,7 +47,7 @@ export const setOptions = (options: InvocationOption[]) => {
|
|
|
47
47
|
*/
|
|
48
48
|
export const onInvokeHandler = (handler: () => void) => {
|
|
49
49
|
emitter.addListener(NativeEvents.ON_INVOKE_HANDLER, handler);
|
|
50
|
-
NativeBugReporting.setOnInvokeHandler();
|
|
50
|
+
NativeBugReporting.setOnInvokeHandler(handler);
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
/**
|
|
@@ -62,7 +62,7 @@ export const onSDKDismissedHandler = (
|
|
|
62
62
|
emitter.addListener(NativeEvents.ON_DISMISS_HANDLER, (payload) => {
|
|
63
63
|
handler(payload.dismissType, payload.reportType);
|
|
64
64
|
});
|
|
65
|
-
NativeBugReporting.setOnSDKDismissedHandler();
|
|
65
|
+
NativeBugReporting.setOnSDKDismissedHandler(handler);
|
|
66
66
|
};
|
|
67
67
|
|
|
68
68
|
/**
|
|
@@ -198,7 +198,7 @@ export const setDidSelectPromptOptionHandler = (handler: (promptOption: string)
|
|
|
198
198
|
emitter.addListener(NativeEvents.DID_SELECT_PROMPT_OPTION_HANDLER, (payload) => {
|
|
199
199
|
handler(payload.promptOption);
|
|
200
200
|
});
|
|
201
|
-
NativeBugReporting.setDidSelectPromptOptionHandler();
|
|
201
|
+
NativeBugReporting.setDidSelectPromptOptionHandler(handler);
|
|
202
202
|
};
|
|
203
203
|
|
|
204
204
|
/**
|
package/src/modules/Luciq.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { NavigationAction, NavigationState as NavigationStateV4 } from 'rea
|
|
|
10
10
|
import type { LuciqConfig } from '../models/LuciqConfig';
|
|
11
11
|
import Report from '../models/Report';
|
|
12
12
|
import { emitter, NativeEvents, NativeLuciq } from '../native/NativeLuciq';
|
|
13
|
-
import { registerFeatureFlagsListener } from '../utils/FeatureFlags';
|
|
13
|
+
import { registerFeatureFlagsListener, initFeatureFlagsCache } from '../utils/FeatureFlags';
|
|
14
14
|
import {
|
|
15
15
|
AutoMaskingType,
|
|
16
16
|
ColorTheme,
|
|
@@ -81,6 +81,8 @@ function reportCurrentViewForAndroid(screenName: string | null) {
|
|
|
81
81
|
* @param config SDK configurations. See {@link LuciqConfig} for more info.
|
|
82
82
|
*/
|
|
83
83
|
export const init = (config: LuciqConfig) => {
|
|
84
|
+
initFeatureFlagsCache();
|
|
85
|
+
|
|
84
86
|
if (Platform.OS === 'android') {
|
|
85
87
|
// Add android feature flags listener for android
|
|
86
88
|
registerFeatureFlagsListener();
|
|
@@ -753,7 +755,7 @@ export const onReportSubmitHandler = (handler?: (report: Report) => void) => {
|
|
|
753
755
|
handler && handler(reportObj);
|
|
754
756
|
});
|
|
755
757
|
|
|
756
|
-
NativeLuciq.setPreSendingHandler();
|
|
758
|
+
NativeLuciq.setPreSendingHandler(handler);
|
|
757
759
|
};
|
|
758
760
|
|
|
759
761
|
export const onNavigationStateChange = (
|
|
@@ -39,10 +39,17 @@ function getPortFromUrl(url: string) {
|
|
|
39
39
|
* It is enabled by default.
|
|
40
40
|
* @param isEnabled
|
|
41
41
|
*/
|
|
42
|
+
const NET_TAG = 'LCQ-RN-NET:';
|
|
43
|
+
|
|
42
44
|
export const setEnabled = (isEnabled: boolean) => {
|
|
43
45
|
if (isEnabled) {
|
|
44
46
|
xhr.enableInterception();
|
|
45
47
|
xhr.setOnDoneCallback(async (network) => {
|
|
48
|
+
Logger.debug(
|
|
49
|
+
NET_TAG,
|
|
50
|
+
`[NetworkLogger] onDoneCallback received: ${network.method} ${network.url}, status=${network.responseCode}`,
|
|
51
|
+
);
|
|
52
|
+
|
|
46
53
|
// eslint-disable-next-line no-new-func
|
|
47
54
|
const predicate = Function('network', 'return ' + _requestFilterExpression);
|
|
48
55
|
|
|
@@ -50,12 +57,17 @@ export const setEnabled = (isEnabled: boolean) => {
|
|
|
50
57
|
const MAX_NETWORK_BODY_SIZE_IN_BYTES = await NativeLuciq.getNetworkBodyMaxSize();
|
|
51
58
|
try {
|
|
52
59
|
if (_networkDataObfuscationHandler) {
|
|
60
|
+
Logger.debug(NET_TAG, `[NetworkLogger] Running obfuscation handler for ${network.url}`);
|
|
53
61
|
network = await _networkDataObfuscationHandler(network);
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
if (__DEV__) {
|
|
57
65
|
const urlPort = getPortFromUrl(network.url);
|
|
58
66
|
if (urlPort === LuciqRNConfig.metroDevServerPort) {
|
|
67
|
+
Logger.debug(
|
|
68
|
+
NET_TAG,
|
|
69
|
+
`[NetworkLogger] Skipping Metro dev server request: ${network.url}`,
|
|
70
|
+
);
|
|
59
71
|
return;
|
|
60
72
|
}
|
|
61
73
|
}
|
|
@@ -97,10 +109,23 @@ export const setEnabled = (isEnabled: boolean) => {
|
|
|
97
109
|
);
|
|
98
110
|
}
|
|
99
111
|
|
|
112
|
+
Logger.debug(
|
|
113
|
+
NET_TAG,
|
|
114
|
+
`[NetworkLogger] Reporting network log to native: ${network.method} ${network.url}`,
|
|
115
|
+
);
|
|
100
116
|
reportNetworkLog(network);
|
|
101
117
|
} catch (e) {
|
|
102
|
-
Logger.error(
|
|
118
|
+
Logger.error(
|
|
119
|
+
NET_TAG,
|
|
120
|
+
`[NetworkLogger] Error processing network log for ${network.url}:`,
|
|
121
|
+
e,
|
|
122
|
+
);
|
|
103
123
|
}
|
|
124
|
+
} else {
|
|
125
|
+
Logger.debug(
|
|
126
|
+
NET_TAG,
|
|
127
|
+
`[NetworkLogger] Request filtered out by predicate: ${network.method} ${network.url}, expression="${_requestFilterExpression}"`,
|
|
128
|
+
);
|
|
104
129
|
}
|
|
105
130
|
});
|
|
106
131
|
} else {
|
package/src/modules/Replies.ts
CHANGED
|
@@ -32,7 +32,7 @@ export const show = () => {
|
|
|
32
32
|
*/
|
|
33
33
|
export const setOnNewReplyReceivedHandler = (handler: () => void) => {
|
|
34
34
|
emitter.addListener(NativeEvents.ON_REPLY_RECEIVED_HANDLER, handler);
|
|
35
|
-
NativeReplies.setOnNewReplyReceivedHandler();
|
|
35
|
+
NativeReplies.setOnNewReplyReceivedHandler(handler);
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
/**
|
package/src/modules/Surveys.ts
CHANGED
|
@@ -55,7 +55,7 @@ export const setAutoShowingEnabled = (autoShowingSurveysEnabled: boolean) => {
|
|
|
55
55
|
*/
|
|
56
56
|
export const setOnShowHandler = (onShowHandler: () => void) => {
|
|
57
57
|
emitter.addListener(NativeEvents.WILL_SHOW_SURVEY_HANDLER, onShowHandler);
|
|
58
|
-
NativeSurveys.setOnShowHandler();
|
|
58
|
+
NativeSurveys.setOnShowHandler(onShowHandler);
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
/**
|
|
@@ -67,7 +67,7 @@ export const setOnShowHandler = (onShowHandler: () => void) => {
|
|
|
67
67
|
*/
|
|
68
68
|
export const setOnDismissHandler = (onDismissHandler: () => void) => {
|
|
69
69
|
emitter.addListener(NativeEvents.DID_DISMISS_SURVEY_HANDLER, onDismissHandler);
|
|
70
|
-
NativeSurveys.setOnDismissHandler();
|
|
70
|
+
NativeSurveys.setOnDismissHandler(onDismissHandler);
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NativeEventEmitter, NativeModule } from 'react-native';
|
|
2
2
|
|
|
3
3
|
import type {
|
|
4
|
+
DismissType,
|
|
4
5
|
ExtendedBugReportMode,
|
|
5
6
|
FloatingButtonPosition,
|
|
6
7
|
InvocationEvent,
|
|
@@ -43,9 +44,11 @@ export interface BugReportingNativeModule extends NativeModule {
|
|
|
43
44
|
setShakingThresholdForAndroid(threshold: number): void;
|
|
44
45
|
|
|
45
46
|
// Callbacks //
|
|
46
|
-
setOnInvokeHandler(): void;
|
|
47
|
-
setDidSelectPromptOptionHandler(): void;
|
|
48
|
-
setOnSDKDismissedHandler(
|
|
47
|
+
setOnInvokeHandler(handler: () => void): void;
|
|
48
|
+
setDidSelectPromptOptionHandler(handler: (promptOption: string) => void): void;
|
|
49
|
+
setOnSDKDismissedHandler(
|
|
50
|
+
handler: (dismissType: DismissType, reportType: ReportType) => void,
|
|
51
|
+
): void;
|
|
49
52
|
|
|
50
53
|
addUserConsent(
|
|
51
54
|
key: string,
|
|
@@ -23,10 +23,10 @@ export interface CauseCrashData {
|
|
|
23
23
|
}
|
|
24
24
|
export interface CrashReportingNativeModule extends NativeModule {
|
|
25
25
|
setEnabled(isEnabled: boolean): void;
|
|
26
|
-
sendJSCrash(data: CrashData): Promise<void>;
|
|
26
|
+
sendJSCrash(data: CrashData | string): Promise<void>;
|
|
27
27
|
|
|
28
28
|
sendHandledJSCrash(
|
|
29
|
-
data: CrashData,
|
|
29
|
+
data: CrashData | string,
|
|
30
30
|
userAttributes?: Record<string, string> | null,
|
|
31
31
|
fingerprint?: string | null,
|
|
32
32
|
nonFatalExceptionLevel?: NonFatalErrorLevel | null,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NativeEventEmitter, NativeModule, ProcessedColorValue } from 'react-native';
|
|
2
2
|
|
|
3
|
+
import type Report from '../models/Report';
|
|
3
4
|
import type {
|
|
4
5
|
AutoMaskingType,
|
|
5
6
|
ColorTheme,
|
|
@@ -137,7 +138,7 @@ export interface LuciqNativeModule extends NativeModule {
|
|
|
137
138
|
setFileAttachment(filePath: string, fileName?: string): void;
|
|
138
139
|
|
|
139
140
|
// Report APIs //
|
|
140
|
-
setPreSendingHandler(): void;
|
|
141
|
+
setPreSendingHandler(handler?: (report: Report) => void): void;
|
|
141
142
|
appendTagToReport(tag: string): void;
|
|
142
143
|
appendConsoleLogToReport(consoleLog: string): void;
|
|
143
144
|
setUserAttributeToReport(key: string, value: string): void;
|
|
@@ -160,7 +161,7 @@ export interface LuciqNativeModule extends NativeModule {
|
|
|
160
161
|
// Feature Flags Listener for Android
|
|
161
162
|
registerFeatureFlagsChangeListener(): void;
|
|
162
163
|
|
|
163
|
-
setOnFeaturesUpdatedListener(): void; // android only
|
|
164
|
+
setOnFeaturesUpdatedListener(handler?: (params: any) => void): void; // android only
|
|
164
165
|
enableAutoMasking(autoMaskingTypes: AutoMaskingType[]): void;
|
|
165
166
|
getNetworkBodyMaxSize(): Promise<number>;
|
|
166
167
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NativeModules as ReactNativeModules
|
|
1
|
+
import { NativeModules as ReactNativeModules } from 'react-native';
|
|
2
2
|
|
|
3
3
|
import type { ApmNativeModule } from './NativeAPM';
|
|
4
4
|
import type { BugReportingNativeModule } from './NativeBugReporting';
|
|
@@ -9,15 +9,6 @@ import type { RepliesNativeModule } from './NativeReplies';
|
|
|
9
9
|
import type { SurveysNativeModule } from './NativeSurveys';
|
|
10
10
|
import type { SessionReplayNativeModule } from './NativeSessionReplay';
|
|
11
11
|
import type { NetworkLoggerNativeModule } from './NativeNetworkLogger';
|
|
12
|
-
import type { Spec as ApmSpec } from './specs/NativeAPM';
|
|
13
|
-
import type { Spec as BugReportingSpec } from './specs/NativeBugReporting';
|
|
14
|
-
import type { Spec as CrashReportingSpec } from './specs/NativeCrashReporting';
|
|
15
|
-
import type { Spec as FeatureRequestsSpec } from './specs/NativeFeatureRequests';
|
|
16
|
-
import type { Spec as LuciqSpec } from './specs/NativeLuciq';
|
|
17
|
-
import type { Spec as NetworkLoggerSpec } from './specs/NativeNetworkLogger';
|
|
18
|
-
import type { Spec as RepliesSpec } from './specs/NativeReplies';
|
|
19
|
-
import type { Spec as SessionReplaySpec } from './specs/NativeSessionReplay';
|
|
20
|
-
import type { Spec as SurveysSpec } from './specs/NativeSurveys';
|
|
21
12
|
|
|
22
13
|
export interface LuciqNativePackage {
|
|
23
14
|
LCQAPM: ApmNativeModule;
|
|
@@ -31,45 +22,4 @@ export interface LuciqNativePackage {
|
|
|
31
22
|
LCQNetworkLogger: NetworkLoggerNativeModule;
|
|
32
23
|
}
|
|
33
24
|
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
function resolve<TSpec, TLegacy>(name: string, fallback: TLegacy): TLegacy {
|
|
37
|
-
return (TurboModuleRegistry.get<TSpec & object>(name) as unknown as TLegacy | null) ?? fallback;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const LCQAPM = resolve<ApmSpec, ApmNativeModule>('LCQAPM', legacy.LCQAPM);
|
|
41
|
-
const LCQBugReporting = resolve<BugReportingSpec, BugReportingNativeModule>(
|
|
42
|
-
'LCQBugReporting',
|
|
43
|
-
legacy.LCQBugReporting,
|
|
44
|
-
);
|
|
45
|
-
const LCQCrashReporting = resolve<CrashReportingSpec, CrashReportingNativeModule>(
|
|
46
|
-
'LCQCrashReporting',
|
|
47
|
-
legacy.LCQCrashReporting,
|
|
48
|
-
);
|
|
49
|
-
const LCQFeatureRequests = resolve<FeatureRequestsSpec, FeatureRequestsNativeModule>(
|
|
50
|
-
'LCQFeatureRequests',
|
|
51
|
-
legacy.LCQFeatureRequests,
|
|
52
|
-
);
|
|
53
|
-
const Luciq = resolve<LuciqSpec, LuciqNativeModule>('Luciq', legacy.Luciq);
|
|
54
|
-
const LCQReplies = resolve<RepliesSpec, RepliesNativeModule>('LCQReplies', legacy.LCQReplies);
|
|
55
|
-
const LCQSurveys = resolve<SurveysSpec, SurveysNativeModule>('LCQSurveys', legacy.LCQSurveys);
|
|
56
|
-
const LCQSessionReplay = resolve<SessionReplaySpec, SessionReplayNativeModule>(
|
|
57
|
-
'LCQSessionReplay',
|
|
58
|
-
legacy.LCQSessionReplay,
|
|
59
|
-
);
|
|
60
|
-
const LCQNetworkLogger = resolve<NetworkLoggerSpec, NetworkLoggerNativeModule>(
|
|
61
|
-
'LCQNetworkLogger',
|
|
62
|
-
legacy.LCQNetworkLogger,
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
export const NativeModules: LuciqNativePackage = {
|
|
66
|
-
LCQAPM,
|
|
67
|
-
LCQBugReporting,
|
|
68
|
-
LCQCrashReporting,
|
|
69
|
-
LCQFeatureRequests,
|
|
70
|
-
Luciq,
|
|
71
|
-
LCQReplies,
|
|
72
|
-
LCQSurveys,
|
|
73
|
-
LCQSessionReplay,
|
|
74
|
-
LCQNetworkLogger,
|
|
75
|
-
};
|
|
25
|
+
export const NativeModules = ReactNativeModules as LuciqNativePackage;
|
|
@@ -10,7 +10,7 @@ export interface RepliesNativeModule extends NativeModule {
|
|
|
10
10
|
getUnreadRepliesCount(): Promise<number>;
|
|
11
11
|
|
|
12
12
|
// Callbacks //
|
|
13
|
-
setOnNewReplyReceivedHandler(): void;
|
|
13
|
+
setOnNewReplyReceivedHandler(handler: () => void): void;
|
|
14
14
|
|
|
15
15
|
// Notifications APIs //
|
|
16
16
|
setPushNotificationsEnabled(isEnabled: boolean): void;
|