react-native-clarity 3.0.0 → 3.0.2
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/LICENSE +20 -20
- package/README.md +127 -127
- package/android/build.gradle +81 -81
- package/android/gradle.properties +7 -7
- package/android/src/main/AndroidManifest.xml +4 -4
- package/android/src/main/java/com/microsoft/clarity/reactnative/ClarityModule.kt +122 -122
- package/android/src/main/java/com/microsoft/clarity/reactnative/ClarityPackage.kt +17 -17
- package/ios/Clarity.h +12 -12
- package/ios/Clarity.m +131 -131
- package/ios/Clarity.xcodeproj/project.pbxproj +280 -280
- package/lib/commonjs/index.js +74 -66
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +74 -66
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +105 -105
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +165 -165
- package/react-native-clarity.podspec +36 -36
- package/src/index.tsx +257 -248
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
package com.microsoft.clarity.reactnative
|
|
2
|
-
|
|
3
|
-
import android.os.Handler
|
|
4
|
-
import android.os.Looper
|
|
5
|
-
import com.facebook.react.bridge.*
|
|
6
|
-
import com.microsoft.clarity.Clarity
|
|
7
|
-
import com.microsoft.clarity.ClarityConfig
|
|
8
|
-
import com.microsoft.clarity.models.ApplicationFramework
|
|
9
|
-
import com.microsoft.clarity.models.LogLevel
|
|
10
|
-
|
|
11
|
-
class ClarityModule(reactContext: ReactApplicationContext) :
|
|
12
|
-
ReactContextBaseJavaModule(reactContext) {
|
|
13
|
-
|
|
14
|
-
override fun getName(): String {
|
|
15
|
-
return NAME
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@ReactMethod
|
|
19
|
-
fun initialize(
|
|
20
|
-
projectId: String,
|
|
21
|
-
userId: String?,
|
|
22
|
-
logLevel: String,
|
|
23
|
-
allowMeteredNetworkUsage: Boolean,
|
|
24
|
-
enableWebViewCapture: Boolean,
|
|
25
|
-
allowedDomains: ReadableArray,
|
|
26
|
-
disableOnLowEndDevices: Boolean,
|
|
27
|
-
enableDailyNetworkUsageLimit: Boolean,
|
|
28
|
-
maximumDailyNetworkUsageInMB: Double,
|
|
29
|
-
promise: Promise
|
|
30
|
-
) {
|
|
31
|
-
val allowedActivities = listOf<String>(); // not supported
|
|
32
|
-
val disallowedActivities = listOf<String>(); // not supported
|
|
33
|
-
|
|
34
|
-
// We use two parameters because the react method parameters do not accept nullable primitive types.
|
|
35
|
-
// Moreover, the Long data type is not supported. Js numbers are translated into doubles.
|
|
36
|
-
val maximumDailyNetworkUsageInMBLong = if (enableDailyNetworkUsageLimit) maximumDailyNetworkUsageInMB.toLong() else null
|
|
37
|
-
|
|
38
|
-
val config = ClarityConfig(
|
|
39
|
-
projectId,
|
|
40
|
-
userId,
|
|
41
|
-
LogLevel.valueOf(logLevel),
|
|
42
|
-
allowMeteredNetworkUsage,
|
|
43
|
-
enableWebViewCapture,
|
|
44
|
-
readableArrayToList(allowedDomains),
|
|
45
|
-
ApplicationFramework.ReactNative,
|
|
46
|
-
allowedActivities,
|
|
47
|
-
disallowedActivities,
|
|
48
|
-
disableOnLowEndDevices,
|
|
49
|
-
maximumDailyNetworkUsageInMBLong
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
// Run on the main thread as recommended by the native Clarity SDK.
|
|
53
|
-
Handler(Looper.getMainLooper()).post {
|
|
54
|
-
promise.resolve(Clarity.initialize(currentActivity, config))
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
@ReactMethod
|
|
59
|
-
fun pause(promise: Promise) {
|
|
60
|
-
// Cannot resolve void
|
|
61
|
-
Clarity.pause()
|
|
62
|
-
promise.resolve(Clarity.isPaused())
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@ReactMethod
|
|
66
|
-
fun resume(promise: Promise) {
|
|
67
|
-
// Cannot resolve void
|
|
68
|
-
Clarity.resume()
|
|
69
|
-
promise.resolve(!Clarity.isPaused())
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@ReactMethod
|
|
73
|
-
fun isPaused(promise: Promise) {
|
|
74
|
-
promise.resolve(Clarity.isPaused())
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
@ReactMethod
|
|
79
|
-
fun setCustomUserId(customUserId: String, promise: Promise) {
|
|
80
|
-
promise.resolve(Clarity.setCustomUserId(customUserId))
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
@ReactMethod
|
|
84
|
-
fun setCustomSessionId(customSessionId: String, promise: Promise) {
|
|
85
|
-
promise.resolve(Clarity.setCustomSessionId(customSessionId))
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@ReactMethod
|
|
89
|
-
fun getCurrentSessionId(promise: Promise) {
|
|
90
|
-
promise.resolve(Clarity.getCurrentSessionId())
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
@ReactMethod
|
|
94
|
-
fun setCustomTag(key: String?, value: String?, promise: Promise) {
|
|
95
|
-
promise.resolve(Clarity.setCustomTag(key, value))
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
@ReactMethod
|
|
99
|
-
fun setCurrentScreenName(screenName: String?, promise: Promise) {
|
|
100
|
-
promise.resolve(Clarity.setCurrentScreenName(screenName))
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
@ReactMethod
|
|
104
|
-
fun getCurrentSessionUrl(promise: Promise) {
|
|
105
|
-
promise.resolve(Clarity.getCurrentSessionUrl())
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
private fun readableArrayToList(arr: ReadableArray): List<String> {
|
|
110
|
-
val ret = mutableListOf<String>()
|
|
111
|
-
|
|
112
|
-
for (i in 0 until arr.size()) {
|
|
113
|
-
ret.add(arr.getString(i))
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return ret
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
companion object {
|
|
120
|
-
const val NAME = "Clarity"
|
|
121
|
-
}
|
|
122
|
-
}
|
|
1
|
+
package com.microsoft.clarity.reactnative
|
|
2
|
+
|
|
3
|
+
import android.os.Handler
|
|
4
|
+
import android.os.Looper
|
|
5
|
+
import com.facebook.react.bridge.*
|
|
6
|
+
import com.microsoft.clarity.Clarity
|
|
7
|
+
import com.microsoft.clarity.ClarityConfig
|
|
8
|
+
import com.microsoft.clarity.models.ApplicationFramework
|
|
9
|
+
import com.microsoft.clarity.models.LogLevel
|
|
10
|
+
|
|
11
|
+
class ClarityModule(reactContext: ReactApplicationContext) :
|
|
12
|
+
ReactContextBaseJavaModule(reactContext) {
|
|
13
|
+
|
|
14
|
+
override fun getName(): String {
|
|
15
|
+
return NAME
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@ReactMethod
|
|
19
|
+
fun initialize(
|
|
20
|
+
projectId: String,
|
|
21
|
+
userId: String?,
|
|
22
|
+
logLevel: String,
|
|
23
|
+
allowMeteredNetworkUsage: Boolean,
|
|
24
|
+
enableWebViewCapture: Boolean,
|
|
25
|
+
allowedDomains: ReadableArray,
|
|
26
|
+
disableOnLowEndDevices: Boolean,
|
|
27
|
+
enableDailyNetworkUsageLimit: Boolean,
|
|
28
|
+
maximumDailyNetworkUsageInMB: Double,
|
|
29
|
+
promise: Promise
|
|
30
|
+
) {
|
|
31
|
+
val allowedActivities = listOf<String>(); // not supported
|
|
32
|
+
val disallowedActivities = listOf<String>(); // not supported
|
|
33
|
+
|
|
34
|
+
// We use two parameters because the react method parameters do not accept nullable primitive types.
|
|
35
|
+
// Moreover, the Long data type is not supported. Js numbers are translated into doubles.
|
|
36
|
+
val maximumDailyNetworkUsageInMBLong = if (enableDailyNetworkUsageLimit) maximumDailyNetworkUsageInMB.toLong() else null
|
|
37
|
+
|
|
38
|
+
val config = ClarityConfig(
|
|
39
|
+
projectId,
|
|
40
|
+
userId,
|
|
41
|
+
LogLevel.valueOf(logLevel),
|
|
42
|
+
allowMeteredNetworkUsage,
|
|
43
|
+
enableWebViewCapture,
|
|
44
|
+
readableArrayToList(allowedDomains),
|
|
45
|
+
ApplicationFramework.ReactNative,
|
|
46
|
+
allowedActivities,
|
|
47
|
+
disallowedActivities,
|
|
48
|
+
disableOnLowEndDevices,
|
|
49
|
+
maximumDailyNetworkUsageInMBLong
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
// Run on the main thread as recommended by the native Clarity SDK.
|
|
53
|
+
Handler(Looper.getMainLooper()).post {
|
|
54
|
+
promise.resolve(Clarity.initialize(currentActivity, config))
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@ReactMethod
|
|
59
|
+
fun pause(promise: Promise) {
|
|
60
|
+
// Cannot resolve void
|
|
61
|
+
Clarity.pause()
|
|
62
|
+
promise.resolve(Clarity.isPaused())
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
fun resume(promise: Promise) {
|
|
67
|
+
// Cannot resolve void
|
|
68
|
+
Clarity.resume()
|
|
69
|
+
promise.resolve(!Clarity.isPaused())
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@ReactMethod
|
|
73
|
+
fun isPaused(promise: Promise) {
|
|
74
|
+
promise.resolve(Clarity.isPaused())
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@ReactMethod
|
|
79
|
+
fun setCustomUserId(customUserId: String, promise: Promise) {
|
|
80
|
+
promise.resolve(Clarity.setCustomUserId(customUserId))
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@ReactMethod
|
|
84
|
+
fun setCustomSessionId(customSessionId: String, promise: Promise) {
|
|
85
|
+
promise.resolve(Clarity.setCustomSessionId(customSessionId))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@ReactMethod
|
|
89
|
+
fun getCurrentSessionId(promise: Promise) {
|
|
90
|
+
promise.resolve(Clarity.getCurrentSessionId())
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@ReactMethod
|
|
94
|
+
fun setCustomTag(key: String?, value: String?, promise: Promise) {
|
|
95
|
+
promise.resolve(Clarity.setCustomTag(key, value))
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@ReactMethod
|
|
99
|
+
fun setCurrentScreenName(screenName: String?, promise: Promise) {
|
|
100
|
+
promise.resolve(Clarity.setCurrentScreenName(screenName))
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@ReactMethod
|
|
104
|
+
fun getCurrentSessionUrl(promise: Promise) {
|
|
105
|
+
promise.resolve(Clarity.getCurrentSessionUrl())
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
private fun readableArrayToList(arr: ReadableArray): List<String> {
|
|
110
|
+
val ret = mutableListOf<String>()
|
|
111
|
+
|
|
112
|
+
for (i in 0 until arr.size()) {
|
|
113
|
+
ret.add(arr.getString(i))
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return ret
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
companion object {
|
|
120
|
+
const val NAME = "Clarity"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
package com.microsoft.clarity.reactnative
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.ReactPackage
|
|
4
|
-
import com.facebook.react.bridge.JavaScriptModule
|
|
5
|
-
import com.facebook.react.bridge.NativeModule
|
|
6
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
|
-
import com.facebook.react.uimanager.ViewManager
|
|
8
|
-
|
|
9
|
-
class ClarityPackage : ReactPackage {
|
|
10
|
-
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
11
|
-
return listOf(ClarityModule(reactContext))
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
15
|
-
return emptyList()
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
package com.microsoft.clarity.reactnative
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.ReactPackage
|
|
4
|
+
import com.facebook.react.bridge.JavaScriptModule
|
|
5
|
+
import com.facebook.react.bridge.NativeModule
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
|
+
import com.facebook.react.uimanager.ViewManager
|
|
8
|
+
|
|
9
|
+
class ClarityPackage : ReactPackage {
|
|
10
|
+
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
11
|
+
return listOf(ClarityModule(reactContext))
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
15
|
+
return emptyList()
|
|
16
|
+
}
|
|
17
|
+
}
|
package/ios/Clarity.h
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
3
|
-
#import "RNClaritySpec.h"
|
|
4
|
-
|
|
5
|
-
@interface Clarity : NSObject <NativeClaritySpec>
|
|
6
|
-
#else
|
|
7
|
-
#import <React/RCTBridgeModule.h>
|
|
8
|
-
|
|
9
|
-
@interface Clarity : NSObject <RCTBridgeModule>
|
|
10
|
-
#endif
|
|
11
|
-
|
|
12
|
-
@end
|
|
1
|
+
|
|
2
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
3
|
+
#import "RNClaritySpec.h"
|
|
4
|
+
|
|
5
|
+
@interface Clarity : NSObject <NativeClaritySpec>
|
|
6
|
+
#else
|
|
7
|
+
#import <React/RCTBridgeModule.h>
|
|
8
|
+
|
|
9
|
+
@interface Clarity : NSObject <RCTBridgeModule>
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
@end
|
package/ios/Clarity.m
CHANGED
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
#import "Clarity.h"
|
|
2
|
-
#import <React/RCTLog.h>
|
|
3
|
-
|
|
4
|
-
@import Clarity;
|
|
5
|
-
|
|
6
|
-
@implementation Clarity
|
|
7
|
-
RCT_EXPORT_MODULE()
|
|
8
|
-
|
|
9
|
-
RCT_EXPORT_METHOD(initialize:(NSString *)projectId
|
|
10
|
-
userId:(NSString *)userId
|
|
11
|
-
logLevel:(NSString *)logLevel
|
|
12
|
-
allowMeteredNetworkUsage:(BOOL)allowMeteredNetworkUsage
|
|
13
|
-
enableWebViewCapture:(BOOL)enableWebViewCapture
|
|
14
|
-
allowedDomains:(NSArray *)allowedDomains
|
|
15
|
-
disableOnLowEndDevices:(BOOL)disableOnLowEndDevices
|
|
16
|
-
enableDailyNetworkUsageLimit:(BOOL)enableDailyNetworkUsageLimit
|
|
17
|
-
maximumDailyNetworkUsageInMB:(double)maximumDailyNetworkUsageInMB
|
|
18
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
19
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
20
|
-
{
|
|
21
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
22
|
-
ClarityConfig* config = [[ClarityConfig alloc]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
[ClaritySDK initializeWithConfig:config];
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
resolve(@(true));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
RCT_EXPORT_METHOD(pause:(RCTPromiseResolveBlock)resolve
|
|
38
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
39
|
-
{
|
|
40
|
-
[ClaritySDK pause];
|
|
41
|
-
resolve(@([ClaritySDK isPaused]));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
RCT_EXPORT_METHOD(resume:(RCTPromiseResolveBlock)resolve
|
|
45
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
46
|
-
{
|
|
47
|
-
[ClaritySDK resume];
|
|
48
|
-
resolve(@((BOOL)(![ClaritySDK isPaused])));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
RCT_EXPORT_METHOD(isPaused:(RCTPromiseResolveBlock)resolve
|
|
52
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
53
|
-
{
|
|
54
|
-
resolve(@([ClaritySDK isPaused]));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
RCT_EXPORT_METHOD(setCustomUserId:(NSString *)customUserId
|
|
58
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
59
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
60
|
-
{
|
|
61
|
-
resolve(@([ClaritySDK setCustomUserId:customUserId]));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
RCT_EXPORT_METHOD(setCustomSessionId:(NSString *)customSessionId
|
|
65
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
66
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
67
|
-
{
|
|
68
|
-
resolve(@([ClaritySDK setCustomSessionId:customSessionId]));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
RCT_EXPORT_METHOD(getCurrentSessionId:(RCTPromiseResolveBlock)resolve
|
|
72
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
73
|
-
{
|
|
74
|
-
resolve([ClaritySDK getCurrentSessionId]);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
RCT_EXPORT_METHOD(setCustomTag:(NSString *)key value:(NSString *)value
|
|
78
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
79
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
80
|
-
{
|
|
81
|
-
resolve(@([ClaritySDK setCustomTagWithKey:key value:value]));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
RCT_EXPORT_METHOD(setCurrentScreenName:(NSString *)currentScreenName
|
|
85
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
86
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
87
|
-
{
|
|
88
|
-
resolve(@([ClaritySDK setCurrentScreenNameWithName:currentScreenName]));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
RCT_EXPORT_METHOD(getCurrentSessionUrl:(RCTPromiseResolveBlock)resolve
|
|
92
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
93
|
-
{
|
|
94
|
-
resolve([ClaritySDK getCurrentSessionUrl]);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
- (LogLevel)convertLogLevelToEnum:(NSString*)logLevel
|
|
98
|
-
{
|
|
99
|
-
if ([logLevel isEqual:@"Verbose"]) {
|
|
100
|
-
return LogLevelVerbose;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if ([logLevel isEqual:@"Debug"]) {
|
|
104
|
-
return LogLevelDebug;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if ([logLevel isEqual:@"Info"]) {
|
|
108
|
-
return LogLevelInfo;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if ([logLevel isEqual:@"Warning"]) {
|
|
112
|
-
return LogLevelWarning;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if ([logLevel isEqual:@"Error"]) {
|
|
116
|
-
return LogLevelError;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return LogLevelNone;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Don't compile this code when we build for the old architecture.
|
|
123
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
124
|
-
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
125
|
-
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
126
|
-
{
|
|
127
|
-
return std::make_shared<facebook::react::NativeClaritySpecJSI>(params);
|
|
128
|
-
}
|
|
129
|
-
#endif
|
|
130
|
-
|
|
131
|
-
@end
|
|
1
|
+
#import "Clarity.h"
|
|
2
|
+
#import <React/RCTLog.h>
|
|
3
|
+
|
|
4
|
+
@import Clarity;
|
|
5
|
+
|
|
6
|
+
@implementation Clarity
|
|
7
|
+
RCT_EXPORT_MODULE()
|
|
8
|
+
|
|
9
|
+
RCT_EXPORT_METHOD(initialize:(NSString *)projectId
|
|
10
|
+
userId:(NSString *)userId
|
|
11
|
+
logLevel:(NSString *)logLevel
|
|
12
|
+
allowMeteredNetworkUsage:(BOOL)allowMeteredNetworkUsage
|
|
13
|
+
enableWebViewCapture:(BOOL)enableWebViewCapture
|
|
14
|
+
allowedDomains:(NSArray *)allowedDomains
|
|
15
|
+
disableOnLowEndDevices:(BOOL)disableOnLowEndDevices
|
|
16
|
+
enableDailyNetworkUsageLimit:(BOOL)enableDailyNetworkUsageLimit
|
|
17
|
+
maximumDailyNetworkUsageInMB:(double)maximumDailyNetworkUsageInMB
|
|
18
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
19
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
20
|
+
{
|
|
21
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
22
|
+
ClarityConfig* config = [[ClarityConfig alloc] initWithProjectId:projectId];
|
|
23
|
+
|
|
24
|
+
config.userId = userId;
|
|
25
|
+
config.logLevel = [self convertLogLevelToEnum:logLevel];
|
|
26
|
+
config.allowMeteredNetworkUsage = allowMeteredNetworkUsage;
|
|
27
|
+
config.enableWebViewCapture = enableWebViewCapture;
|
|
28
|
+
config.disableOnLowEndDevices = disableOnLowEndDevices;
|
|
29
|
+
config.applicationFramework = ApplicationFrameworkReactNative;
|
|
30
|
+
|
|
31
|
+
[ClaritySDK initializeWithConfig:config];
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
resolve(@(true));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
RCT_EXPORT_METHOD(pause:(RCTPromiseResolveBlock)resolve
|
|
38
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
39
|
+
{
|
|
40
|
+
[ClaritySDK pause];
|
|
41
|
+
resolve(@([ClaritySDK isPaused]));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
RCT_EXPORT_METHOD(resume:(RCTPromiseResolveBlock)resolve
|
|
45
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
46
|
+
{
|
|
47
|
+
[ClaritySDK resume];
|
|
48
|
+
resolve(@((BOOL)(![ClaritySDK isPaused])));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
RCT_EXPORT_METHOD(isPaused:(RCTPromiseResolveBlock)resolve
|
|
52
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
53
|
+
{
|
|
54
|
+
resolve(@([ClaritySDK isPaused]));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
RCT_EXPORT_METHOD(setCustomUserId:(NSString *)customUserId
|
|
58
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
59
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
60
|
+
{
|
|
61
|
+
resolve(@([ClaritySDK setCustomUserId:customUserId]));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
RCT_EXPORT_METHOD(setCustomSessionId:(NSString *)customSessionId
|
|
65
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
66
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
67
|
+
{
|
|
68
|
+
resolve(@([ClaritySDK setCustomSessionId:customSessionId]));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
RCT_EXPORT_METHOD(getCurrentSessionId:(RCTPromiseResolveBlock)resolve
|
|
72
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
73
|
+
{
|
|
74
|
+
resolve([ClaritySDK getCurrentSessionId]);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
RCT_EXPORT_METHOD(setCustomTag:(NSString *)key value:(NSString *)value
|
|
78
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
79
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
80
|
+
{
|
|
81
|
+
resolve(@([ClaritySDK setCustomTagWithKey:key value:value]));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
RCT_EXPORT_METHOD(setCurrentScreenName:(NSString *)currentScreenName
|
|
85
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
86
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
87
|
+
{
|
|
88
|
+
resolve(@([ClaritySDK setCurrentScreenNameWithName:currentScreenName]));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
RCT_EXPORT_METHOD(getCurrentSessionUrl:(RCTPromiseResolveBlock)resolve
|
|
92
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
93
|
+
{
|
|
94
|
+
resolve([ClaritySDK getCurrentSessionUrl]);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
- (LogLevel)convertLogLevelToEnum:(NSString*)logLevel
|
|
98
|
+
{
|
|
99
|
+
if ([logLevel isEqual:@"Verbose"]) {
|
|
100
|
+
return LogLevelVerbose;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if ([logLevel isEqual:@"Debug"]) {
|
|
104
|
+
return LogLevelDebug;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if ([logLevel isEqual:@"Info"]) {
|
|
108
|
+
return LogLevelInfo;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if ([logLevel isEqual:@"Warning"]) {
|
|
112
|
+
return LogLevelWarning;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if ([logLevel isEqual:@"Error"]) {
|
|
116
|
+
return LogLevelError;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return LogLevelNone;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Don't compile this code when we build for the old architecture.
|
|
123
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
124
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
125
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
126
|
+
{
|
|
127
|
+
return std::make_shared<facebook::react::NativeClaritySpecJSI>(params);
|
|
128
|
+
}
|
|
129
|
+
#endif
|
|
130
|
+
|
|
131
|
+
@end
|