@usercentrics/react-native-sdk 2.23.0 → 2.23.3

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 (56) hide show
  1. package/README.md +103 -22
  2. package/android/{build.gradle → build-legacy.gradle} +19 -2
  3. package/android/build.gradle.kts +76 -0
  4. package/android/gradle.properties +6 -2
  5. package/android/settings.gradle.kts +21 -0
  6. package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/RNUsercentricsModuleTest.kt +5 -5
  7. package/android/src/androidTest/java/com/usercentrics/reactnative/fake/FakePromise.kt +73 -0
  8. package/android/src/main/AndroidManifest.xml +1 -2
  9. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsModule.kt +34 -30
  10. package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +99 -0
  11. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsPackage.kt +3 -2
  12. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/ReactContextProvider.kt +1 -1
  13. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/ReactContextProviderImpl.kt +1 -1
  14. package/android/src/main/java/com/usercentrics/reactnative/UCRNFlag.kt +4 -0
  15. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/api/UsercentricsProxy.kt +2 -2
  16. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/BannerFontExtensions.kt +1 -1
  17. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/BannerSettingsExtensions.kt +5 -4
  18. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/CCPADataExtensions.kt +1 -1
  19. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/ConsentDisclosureSerializer.kt +1 -1
  20. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/ReadableMapExtensions.kt +1 -1
  21. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/TCFDataExtensions.kt +1 -1
  22. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UserDecisionExtensions.kt +20 -18
  23. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UserOptionsExtensions.kt +1 -1
  24. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsCMPDataExtensions.kt +1 -1
  25. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsConsentUserResponseExtensions.kt +1 -1
  26. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsReadyStatusExtensions.kt +1 -1
  27. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsServiceConsentExtensions.kt +1 -1
  28. package/android/src/test/java/com/usercentrics/reactnative/RNUsercentricsModuleTest.kt +159 -0
  29. package/android/src/test/java/com/usercentrics/reactnative/fake/FakePromise.kt +73 -0
  30. package/ios/Extensions/BannerSettings+Dict.swift +1 -0
  31. package/ios/Extensions/UIColor+Extensions.swift +1 -1
  32. package/ios/Extensions/UIImage+UsercentricsLogoDict.swift +1 -0
  33. package/ios/RNUsercentricsModule.swift +25 -1
  34. package/ios/RNUsercentricsModuleSpec.h +103 -0
  35. package/lib/NativeUsercentrics.d.ts +30 -0
  36. package/lib/NativeUsercentrics.js +10 -0
  37. package/lib/NativeUsercentrics.js.map +1 -0
  38. package/lib/Usercentrics.d.ts +8 -8
  39. package/lib/Usercentrics.js +3 -1
  40. package/lib/Usercentrics.js.map +1 -1
  41. package/package.json +98 -79
  42. package/react-native-usercentrics.podspec +26 -3
  43. package/CHANGELOG.md +0 -822
  44. package/android/settings.gradle +0 -1
  45. package/android/src/androidTest/java/com/usercentrics/reactnativemodule/fake/FakePromise.kt +0 -67
  46. package/android/src/main/java/com/usercentrics/reactnativeusercentrics/UCRNFlag.kt +0 -4
  47. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/api/FakeUsercentricsProxy.kt +0 -0
  48. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetCMPDataMock.kt +0 -0
  49. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetConsentsMock.kt +0 -0
  50. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetTCFDataMock.kt +0 -0
  51. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetUSPDataMock.kt +0 -0
  52. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetUserSessionDataMock.kt +0 -0
  53. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/ReactContextProviderMock.kt +0 -0
  54. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/SaveDecisionsForTCFMock.kt +0 -0
  55. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/SaveDecisionsMock.kt +0 -0
  56. /package/ios/{RNUsercentricsModule.m → RNUsercentricsModule.mm} +0 -0
package/README.md CHANGED
@@ -22,12 +22,36 @@ The Usercentrics Apps SDK is a native Consent Management Platform solution for m
22
22
  <img src="https://docs.usercentrics.com/cmp_in_app_sdk/latest/assets/media/predefinedUI.png" alt="Usercentrics UI" />
23
23
  </p>
24
24
 
25
- ### Requirements
26
- * Android 5.0 (API 21) or higher with Kotlin 1.5 or higher
27
- * iOS 11 or higher
28
- * React 17.0 or higher
29
- * React Native 0.65 or higher
30
- * Node 14
25
+ ## 📋 Requirements
26
+
27
+ ### Mobile Platforms
28
+ * **Android 5.0 (API 21)** or higher
29
+ * **iOS 11** or higher
30
+
31
+ ### Development Environment
32
+ * **Node.js 18.0+** (LTS recommended)
33
+ * **npm 9.0+** or **Yarn 1.22+**
34
+ * **TypeScript 5.1+**
35
+ * **React 18.2+**
36
+ * **React Native 0.74.3+** (with Fabric support)
37
+
38
+ ### Android Development
39
+ * **Java 17+** (OpenJDK or Oracle JDK)
40
+ * **Android SDK** with API 33+ platforms
41
+ * **Android NDK 25+**
42
+ * **Gradle 8.2+**
43
+ * **Kotlin 1.9.22+**
44
+ * **Android Gradle Plugin 8.2+**
45
+
46
+ ### iOS Development (macOS only)
47
+ * **Xcode 15.0+** with iOS SDK
48
+ * **CocoaPods 1.12+**
49
+ * **iOS Simulators** (recommended)
50
+
51
+ ### Optional but Recommended
52
+ * **Watchman** (for better file watching)
53
+ * **Git** (for version control)
54
+ * **SDKMan** (for Java version management)
31
55
 
32
56
  ## Get started!
33
57
 
@@ -41,35 +65,92 @@ Continue to our [documentation](https://usercentrics.com/docs/apps/intro/) for a
41
65
 
42
66
  See the [example](https://github.com/Usercentrics/react-native/tree/master/example) directory for a complete sample app using Usercentrics.
43
67
 
44
- ## Sample Project
68
+ ## Quick Start
45
69
 
46
- To run the sample project, you will need to run npm install from both root and example folders:
70
+ ### 🚀 Automated Setup (Recommended)
47
71
 
72
+ The easiest way to get started is using our automated setup script:
73
+
74
+ ```sh
75
+ # Check your development environment
76
+ npm run check-requirements
77
+
78
+ # Automatically install missing dependencies
79
+ npm run auto-setup
80
+
81
+ # Verify everything is ready
82
+ npm run check-requirements
83
+ ```
84
+
85
+ ### 📱 Running the Sample Project
86
+
87
+ ### Option 1: Using Helper Scripts
88
+ ```sh
89
+ # Install all dependencies
90
+ npm run install-dependencies
91
+
92
+ # Run Android app
93
+ npm run run-android
94
+
95
+ # Run iOS app (macOS only)
96
+ npm run ios
97
+ ```
98
+
99
+ ### Option 2: Manual Setup
48
100
  * From root folder:
49
101
  ```sh
50
- npm install
102
+ npm install --legacy-peer-deps
51
103
  ```
52
104
  * From example folder:
53
105
  ```sh
54
- npm install
106
+ npm install --legacy-peer-deps
55
107
  ```
56
108
 
57
- ### iOS
109
+ ### iOS (macOS only)
58
110
 
59
- From example folder:
60
- ```sh
61
- npx pod-install
62
- npx react-native run-ios
63
- ```
111
+ From example folder:
112
+ ```sh
113
+ npx pod-install
114
+ npx react-native run-ios
115
+ ```
64
116
 
65
- ### Android
117
+ ### Android
66
118
 
67
- Open the android folder using Android Studio in order to create essential files then run from example folder:
68
- ```sh
69
- npx react-native run-android
70
- ```
119
+ Make sure you have Android SDK configured, then from example folder:
120
+ ```sh
121
+ npx react-native run-android
122
+ ```
123
+
124
+ ## 🛠️ Development Scripts
125
+
126
+ | Script | Description |
127
+ |--------|-------------|
128
+ | `npm run auto-setup` | 🤖 Automatically install all required dependencies |
129
+ | `npm run check-requirements` | 🔍 Check development environment requirements |
130
+ | `npm run clean-all-caches` | 🧹 Clean all project and system caches |
131
+ | `npm run install-dependencies` | 📦 Install dependencies in root and example folders |
132
+ | `npm run run-android` | 🤖 Kill conflicting ports and run Android app |
133
+
134
+ ### 🔧 Troubleshooting
135
+
136
+ If you encounter issues:
137
+
138
+ 1. **Check Requirements**: `npm run check-requirements`
139
+ 2. **Clean & Reinstall**: `npm run clean-all-caches && npm run install-dependencies`
140
+ 3. **Auto Setup**: `npm run auto-setup` (installs missing tools)
141
+ 4. **Manual Setup**: Follow the detailed error messages from check-requirements
142
+
143
+ ### 📋 Environment Setup
144
+
145
+ The project includes intelligent scripts that will:
146
+ - ✅ Detect your operating system (macOS/Linux)
147
+ - ✅ Check for required tools and versions
148
+ - ✅ Install missing dependencies automatically
149
+ - ✅ Configure environment variables
150
+ - ✅ Apply necessary patches
151
+ - ✅ Verify the setup works correctly
71
152
 
72
- ### Consent Mediation
153
+ ## Consent Mediation
73
154
 
74
155
  You can enable and run the Consent Mediation example in this example by following the [documentation](https://usercentrics.com/docs/apps/features/consent-mediation/#enable-mediation).
75
156
 
@@ -1,4 +1,4 @@
1
- def usercentrics_version = "2.23.0"
1
+ def usercentrics_version = "2.23.3"
2
2
  version usercentrics_version
3
3
 
4
4
  buildscript {
@@ -27,6 +27,7 @@ apply plugin: 'com.android.library'
27
27
  apply plugin: 'kotlin-android'
28
28
 
29
29
  android {
30
+ namespace 'com.usercentrics.reactnative'
30
31
  compileSdkVersion 33
31
32
 
32
33
  compileOptions {
@@ -43,6 +44,22 @@ android {
43
44
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
44
45
  consumerProguardFile "proguard-rules.pro"
45
46
  }
47
+
48
+ buildTypes {
49
+ debug {
50
+ debuggable true
51
+ }
52
+ release {
53
+ minifyEnabled false
54
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
55
+ }
56
+ }
57
+
58
+ publishing {
59
+ singleVariant('release') {
60
+ withSourcesJar()
61
+ }
62
+ }
46
63
  }
47
64
 
48
65
  repositories {
@@ -61,4 +78,4 @@ dependencies {
61
78
  androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
62
79
  androidTestImplementation 'androidx.test:runner:1.4.0'
63
80
  androidTestImplementation 'androidx.test:rules:1.4.0'
64
- }
81
+ }
@@ -0,0 +1,76 @@
1
+ plugins {
2
+ id("com.android.library")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ val usercentricsVersion = "2.23.3"
7
+ val reactNativeVersion = "0.79.6"
8
+
9
+ android {
10
+ namespace = "com.usercentrics.reactnative"
11
+ compileSdk = 34
12
+
13
+ defaultConfig {
14
+ minSdk = 24
15
+ targetSdk = 34
16
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
17
+ consumerProguardFiles("proguard-rules.pro")
18
+
19
+ val isNewArchEnabled = project.findProperty("newArchEnabled") == "true"
20
+ val isHermesEnabled = project.findProperty("hermesEnabled") == "true"
21
+
22
+ buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchEnabled.toString())
23
+ buildConfigField("boolean", "IS_HERMES_ENABLED", isHermesEnabled.toString())
24
+
25
+ ndk {
26
+ abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
27
+ }
28
+ }
29
+
30
+ compileOptions {
31
+ sourceCompatibility = JavaVersion.VERSION_17
32
+ targetCompatibility = JavaVersion.VERSION_17
33
+ }
34
+
35
+ kotlinOptions {
36
+ jvmTarget = "17"
37
+ }
38
+
39
+ compileOptions {
40
+ sourceCompatibility = JavaVersion.VERSION_17
41
+ targetCompatibility = JavaVersion.VERSION_17
42
+ }
43
+
44
+ sourceSets {
45
+ getByName("main").java.srcDirs("src/main/kotlin")
46
+ }
47
+
48
+ buildFeatures {
49
+ buildConfig = true
50
+ }
51
+
52
+ packaging {
53
+ jniLibs {
54
+ useLegacyPackaging = false
55
+ }
56
+ }
57
+ }
58
+
59
+ dependencies {
60
+ implementation("com.facebook.react:react-android:$reactNativeVersion")
61
+ implementation("com.usercentrics.sdk:usercentrics-ui:$usercentricsVersion")
62
+
63
+ // Unit tests (JVM)
64
+ testImplementation("junit:junit:4.13.2")
65
+ testImplementation("io.mockk:mockk:1.13.12")
66
+ testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0")
67
+ testImplementation("com.facebook.react:react-android:$reactNativeVersion")
68
+
69
+ // Instrumented tests (Android)
70
+ androidTestImplementation("com.facebook.react:react-android:$reactNativeVersion")
71
+ androidTestImplementation("io.mockk:mockk-android:1.12.0")
72
+ androidTestImplementation("junit:junit:4.13.2")
73
+ androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3")
74
+ androidTestImplementation("androidx.test:runner:1.4.0")
75
+ androidTestImplementation("androidx.test:rules:1.4.0")
76
+ }
@@ -1,3 +1,7 @@
1
- org.gradle.jvmargs=-Xmx1536M
1
+ org.gradle.jvmargs=-Xmx2048M
2
2
  android.useAndroidX=true
3
- android.enableJetifier=true
3
+ android.enableJetifier=true
4
+
5
+ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
6
+
7
+ hermesEnabled=true
@@ -0,0 +1,21 @@
1
+ pluginManagement {
2
+ repositories {
3
+ google()
4
+ mavenCentral()
5
+ gradlePluginPortal()
6
+ }
7
+ plugins {
8
+ id("org.jetbrains.kotlin.android") version "2.0.21"
9
+ }
10
+ }
11
+
12
+ dependencyResolutionManagement {
13
+ repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
14
+ repositories {
15
+ google()
16
+ mavenCentral()
17
+ maven { url = uri("https://www.jitpack.io") }
18
+ }
19
+ }
20
+
21
+ rootProject.name = "usercentrics"
@@ -290,11 +290,11 @@ class RNUsercentricsModuleTest {
290
290
  val result = promise.resolveValue as WritableArray
291
291
  val consent = result.getMap(0)
292
292
 
293
- assertEquals(false, consent.getBoolean("status"))
294
- assertEquals("ocv9HNX_g", consent.getString("templateId"))
295
- assertEquals("Facebook SDK", consent.getString("dataProcessor"))
296
- assertEquals(0, consent.getInt("type"))
297
- assertEquals("1.0.1", consent.getString("version"))
293
+ assertEquals(false, consent?.getBoolean("status"))
294
+ assertEquals("ocv9HNX_g", consent?.getString("templateId"))
295
+ assertEquals("Facebook SDK", consent?.getString("dataProcessor"))
296
+ assertEquals(0, consent?.getInt("type"))
297
+ assertEquals("1.0.1", consent?.getString("version"))
298
298
  }
299
299
 
300
300
  @Test
@@ -0,0 +1,73 @@
1
+ package com.usercentrics.reactnativemodule.fake
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.WritableMap
5
+ import java.util.concurrent.CountDownLatch
6
+
7
+ internal class FakePromise : Promise {
8
+
9
+ var resolveValue: Any? = null
10
+ var rejectThrowable: Throwable? = null
11
+
12
+ private val lock = CountDownLatch(1)
13
+
14
+ fun await() {
15
+ lock.await()
16
+ }
17
+
18
+ override fun resolve(value: Any?) {
19
+ resolveValue = value
20
+ lock.countDown()
21
+ }
22
+
23
+ override fun reject(code: String, message: String?) {
24
+ rejectThrowable = RuntimeException("$code: $message")
25
+ lock.countDown()
26
+ }
27
+
28
+ override fun reject(code: String, throwable: Throwable?) {
29
+ rejectThrowable = throwable ?: RuntimeException(code)
30
+ lock.countDown()
31
+ }
32
+
33
+ override fun reject(code: String, message: String?, throwable: Throwable?) {
34
+ rejectThrowable = throwable ?: RuntimeException("$code: $message")
35
+ lock.countDown()
36
+ }
37
+
38
+ override fun reject(throwable: Throwable) {
39
+ rejectThrowable = throwable
40
+ lock.countDown()
41
+ }
42
+
43
+ override fun reject(throwable: Throwable, userInfo: WritableMap) {
44
+ rejectThrowable = throwable
45
+ lock.countDown()
46
+ }
47
+
48
+ override fun reject(code: String, userInfo: WritableMap) {
49
+ rejectThrowable = RuntimeException("$code: $userInfo")
50
+ lock.countDown()
51
+ }
52
+
53
+ override fun reject(code: String, throwable: Throwable?, userInfo: WritableMap) {
54
+ rejectThrowable = throwable
55
+ lock.countDown()
56
+ }
57
+
58
+ override fun reject(code: String, message: String?, userInfo: WritableMap) {
59
+ rejectThrowable = RuntimeException("$code: $message")
60
+ lock.countDown()
61
+ }
62
+
63
+ override fun reject(code: String?, message: String?, throwable: Throwable?, userInfo: WritableMap?) {
64
+ rejectThrowable = throwable ?: RuntimeException("$code: $message")
65
+ lock.countDown()
66
+ }
67
+
68
+ @Deprecated("Use reject(code, message) instead")
69
+ override fun reject(message: String) {
70
+ rejectThrowable = RuntimeException(message)
71
+ lock.countDown()
72
+ }
73
+ }
@@ -1,2 +1 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
- package="com.usercentrics.reactnativeusercentrics"></manifest>
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"/>
@@ -1,8 +1,8 @@
1
- package com.usercentrics.reactnativeusercentrics
1
+ package com.usercentrics.reactnative
2
2
 
3
3
  import com.facebook.react.bridge.*
4
- import com.usercentrics.reactnativeusercentrics.api.UsercentricsProxy
5
- import com.usercentrics.reactnativeusercentrics.extensions.*
4
+ import com.usercentrics.reactnative.api.UsercentricsProxy
5
+ import com.usercentrics.reactnative.extensions.*
6
6
  import com.usercentrics.sdk.UsercentricsAnalyticsEventType
7
7
  import com.usercentrics.sdk.models.settings.UsercentricsConsentType
8
8
  import com.usercentrics.sdk.services.tcf.TCFDecisionUILayer
@@ -11,18 +11,18 @@ internal class RNUsercentricsModule(
11
11
  reactContext: ReactApplicationContext,
12
12
  private val usercentricsProxy: UsercentricsProxy,
13
13
  private val reactContextProvider: ReactContextProvider,
14
- ) : ReactContextBaseJavaModule(reactContext) {
14
+ ) : RNUsercentricsModuleSpec(reactContext) {
15
15
 
16
- override fun getName() = "RNUsercentricsModule"
16
+ override fun getName() = NAME
17
17
 
18
18
  @ReactMethod
19
- fun configure(options: ReadableMap) {
19
+ override fun configure(options: ReadableMap) {
20
20
  val usercentricsOptions = options.usercentricsOptionsFromMap()
21
21
  usercentricsProxy.initialize(reactApplicationContext, usercentricsOptions)
22
22
  }
23
23
 
24
24
  @ReactMethod
25
- fun isReady(promise: Promise) {
25
+ override fun isReady(promise: Promise) {
26
26
  usercentricsProxy.isReady({
27
27
  promise.resolve(it.toWritableMap())
28
28
  }, {
@@ -31,7 +31,7 @@ internal class RNUsercentricsModule(
31
31
  }
32
32
 
33
33
  @ReactMethod
34
- fun showFirstLayer(options: ReadableMap?, promise: Promise) {
34
+ override fun showFirstLayer(options: ReadableMap?, promise: Promise) {
35
35
  runOnUiThread {
36
36
  try {
37
37
  val context = reactContextProvider.context()
@@ -46,7 +46,7 @@ internal class RNUsercentricsModule(
46
46
  }
47
47
 
48
48
  @ReactMethod
49
- fun showSecondLayer(options: ReadableMap?, promise: Promise) {
49
+ override fun showSecondLayer(options: ReadableMap?, promise: Promise) {
50
50
  runOnUiThread {
51
51
  try {
52
52
  val context = reactContextProvider.context()
@@ -61,7 +61,7 @@ internal class RNUsercentricsModule(
61
61
  }
62
62
 
63
63
  @ReactMethod
64
- fun restoreUserSession(controllerId: String, promise: Promise) {
64
+ override fun restoreUserSession(controllerId: String, promise: Promise) {
65
65
  usercentricsProxy.instance.restoreUserSession(controllerId, {
66
66
  promise.resolve(it.toWritableMap())
67
67
  }, {
@@ -70,59 +70,59 @@ internal class RNUsercentricsModule(
70
70
  }
71
71
 
72
72
  @ReactMethod
73
- fun getControllerId(promise: Promise) {
73
+ override fun getControllerId(promise: Promise) {
74
74
  promise.resolve(usercentricsProxy.instance.getControllerId())
75
75
  }
76
76
 
77
77
  @ReactMethod
78
- fun getABTestingVariant(promise: Promise) {
78
+ override fun getABTestingVariant(promise: Promise) {
79
79
  promise.resolve(usercentricsProxy.instance.getABTestingVariant())
80
80
  }
81
81
 
82
82
  @ReactMethod
83
- fun getConsents(promise: Promise) {
83
+ override fun getConsents(promise: Promise) {
84
84
  promise.resolve(usercentricsProxy.instance.getConsents().toWritableArray())
85
85
  }
86
86
 
87
87
  @ReactMethod
88
- fun getCMPData(promise: Promise) {
88
+ override fun getCMPData(promise: Promise) {
89
89
  promise.resolve(usercentricsProxy.instance.getCMPData().serialize())
90
90
  }
91
91
 
92
92
  @ReactMethod
93
- fun getAdditionalConsentModeData(promise: Promise) {
93
+ override fun getAdditionalConsentModeData(promise: Promise) {
94
94
  promise.resolve(usercentricsProxy.instance.getAdditionalConsentModeData().serialize())
95
95
  }
96
96
 
97
97
  @ReactMethod
98
- fun setCMPId(id: Int) {
98
+ override fun setCMPId(id: Int) {
99
99
  usercentricsProxy.instance.setCMPId(id)
100
100
  }
101
101
 
102
102
  @ReactMethod
103
- fun setABTestingVariant(variant: String) {
103
+ override fun setABTestingVariant(variant: String) {
104
104
  usercentricsProxy.instance.setABTestingVariant(variant)
105
105
  }
106
106
 
107
107
  @ReactMethod
108
- fun getTCFData(promise: Promise) {
108
+ override fun getTCFData(promise: Promise) {
109
109
  usercentricsProxy.instance.getTCFData {
110
110
  promise.resolve(it.serialize())
111
111
  }
112
112
  }
113
113
 
114
114
  @ReactMethod
115
- fun getUserSessionData(promise: Promise) {
115
+ override fun getUserSessionData(promise: Promise) {
116
116
  promise.resolve(usercentricsProxy.instance.getUserSessionData())
117
117
  }
118
118
 
119
119
  @ReactMethod
120
- fun getUSPData(promise: Promise) {
120
+ override fun getUSPData(promise: Promise) {
121
121
  promise.resolve(usercentricsProxy.instance.getUSPData().serialize())
122
122
  }
123
123
 
124
124
  @ReactMethod
125
- fun changeLanguage(language: String, promise: Promise) {
125
+ override fun changeLanguage(language: String, promise: Promise) {
126
126
  usercentricsProxy.instance.changeLanguage(language, {
127
127
  promise.resolve(null)
128
128
  }, {
@@ -131,7 +131,7 @@ internal class RNUsercentricsModule(
131
131
  }
132
132
 
133
133
  @ReactMethod
134
- fun acceptAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
134
+ override fun acceptAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
135
135
  promise.resolve(
136
136
  usercentricsProxy.instance.acceptAllForTCF(
137
137
  TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
@@ -140,7 +140,7 @@ internal class RNUsercentricsModule(
140
140
  }
141
141
 
142
142
  @ReactMethod
143
- fun acceptAll(consentType: Int, promise: Promise) {
143
+ override fun acceptAll(consentType: Int, promise: Promise) {
144
144
  promise.resolve(
145
145
  usercentricsProxy.instance.acceptAll(
146
146
  UsercentricsConsentType.values()[consentType]
@@ -149,7 +149,7 @@ internal class RNUsercentricsModule(
149
149
  }
150
150
 
151
151
  @ReactMethod
152
- fun denyAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
152
+ override fun denyAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
153
153
  promise.resolve(
154
154
  usercentricsProxy.instance.denyAllForTCF(
155
155
  TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
@@ -158,7 +158,7 @@ internal class RNUsercentricsModule(
158
158
  }
159
159
 
160
160
  @ReactMethod
161
- fun denyAll(consentType: Int, promise: Promise) {
161
+ override fun denyAll(consentType: Int, promise: Promise) {
162
162
  promise.resolve(
163
163
  usercentricsProxy.instance.denyAll(
164
164
  UsercentricsConsentType.values()[consentType]
@@ -167,7 +167,7 @@ internal class RNUsercentricsModule(
167
167
  }
168
168
 
169
169
  @ReactMethod
170
- fun saveDecisionsForTCF(
170
+ override fun saveDecisionsForTCF(
171
171
  tcfDecisions: ReadableMap,
172
172
  fromLayer: Int,
173
173
  saveDecisions: ReadableArray,
@@ -185,7 +185,7 @@ internal class RNUsercentricsModule(
185
185
  }
186
186
 
187
187
  @ReactMethod
188
- fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise) {
188
+ override fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise) {
189
189
  promise.resolve(
190
190
  usercentricsProxy.instance.saveDecisions(
191
191
  decisions.deserializeUserDecision(), UsercentricsConsentType.values()[consentType]
@@ -194,7 +194,7 @@ internal class RNUsercentricsModule(
194
194
  }
195
195
 
196
196
  @ReactMethod
197
- fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Int, promise: Promise) {
197
+ override fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Int, promise: Promise) {
198
198
  promise.resolve(
199
199
  usercentricsProxy.instance.saveOptOutForCCPA(
200
200
  isOptedOut, UsercentricsConsentType.values()[consentType]
@@ -203,12 +203,12 @@ internal class RNUsercentricsModule(
203
203
  }
204
204
 
205
205
  @ReactMethod
206
- fun track(event: Int) {
206
+ override fun track(event: Int) {
207
207
  usercentricsProxy.instance.track(UsercentricsAnalyticsEventType.values()[event])
208
208
  }
209
209
 
210
210
  @ReactMethod
211
- fun clearUserSession(promise: Promise) {
211
+ override fun clearUserSession(promise: Promise) {
212
212
  usercentricsProxy.instance.clearUserSession({
213
213
  promise.resolve(it.toWritableMap())
214
214
  }, {
@@ -219,4 +219,8 @@ internal class RNUsercentricsModule(
219
219
  private fun runOnUiThread(block: () -> Unit) {
220
220
  UiThreadUtil.runOnUiThread(block)
221
221
  }
222
+
223
+ companion object {
224
+ const val NAME = "RNUsercentricsModule"
225
+ }
222
226
  }