@usercentrics/react-native-sdk 2.23.3 → 2.24.1
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 +5 -5
- package/android/build-legacy.gradle +11 -1
- package/android/build.gradle.kts +35 -17
- package/android/gradle.properties +1 -3
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsPackage.kt +37 -8
- package/android/src/main/jni/CMakeLists.txt +85 -0
- package/android/src/main/jni/RNUsercentricsModule.cpp +21 -0
- package/android/src/main/jni/rn_usercentrics.cpp +22 -0
- package/ios/Extensions/UsercentricsOptions+Dict.swift +1 -1
- package/lib/NativeUsercentrics.d.ts +2 -1
- package/lib/NativeUsercentrics.js +3 -2
- package/lib/NativeUsercentrics.js.map +1 -1
- package/lib/fabric/NativeUsercentricsModule.d.ts +30 -0
- package/lib/fabric/NativeUsercentricsModule.js +3 -0
- package/lib/fabric/NativeUsercentricsModule.js.map +1 -0
- package/package.json +15 -4
- package/react-native.config.js +15 -0
- package/src/NativeUsercentrics.ts +75 -0
- package/src/Usercentrics.tsx +145 -0
- package/src/__tests__/index.test.ts +476 -0
- package/src/__tests__/mocks.ts +402 -0
- package/src/fabric/NativeUsercentricsModule.ts +51 -0
- package/src/index.tsx +2 -0
- package/src/models/AdditionalConsentModeData.tsx +33 -0
- package/src/models/BannerSettings.tsx +117 -0
- package/src/models/CCPAData.tsx +32 -0
- package/src/models/CCPASettings.tsx +49 -0
- package/src/models/ConsentDisclosureObject.tsx +47 -0
- package/src/models/FirstLayerSettings.tsx +185 -0
- package/src/models/GeolocationRuleset.tsx +10 -0
- package/src/models/LegalBasisLocalization.tsx +100 -0
- package/src/models/NetworkMode.tsx +5 -0
- package/src/models/SecondLayerSettings.tsx +12 -0
- package/src/models/TCF2Settings.tsx +209 -0
- package/src/models/TCFData.tsx +297 -0
- package/src/models/TCFDecisionUILayer.tsx +5 -0
- package/src/models/TCFUserDecisions.tsx +73 -0
- package/src/models/UserDecision.tsx +10 -0
- package/src/models/UsercentricsAnalyticsEventType.tsx +15 -0
- package/src/models/UsercentricsCMPData.tsx +38 -0
- package/src/models/UsercentricsCategory.tsx +26 -0
- package/src/models/UsercentricsConsentType.tsx +5 -0
- package/src/models/UsercentricsConsentUserResponse.tsx +14 -0
- package/src/models/UsercentricsLabels.tsx +276 -0
- package/src/models/UsercentricsLocation.tsx +32 -0
- package/src/models/UsercentricsLoggerLevel.tsx +7 -0
- package/src/models/UsercentricsOptions.tsx +45 -0
- package/src/models/UsercentricsReadyStatus.tsx +20 -0
- package/src/models/UsercentricsService.tsx +134 -0
- package/src/models/UsercentricsServiceConsent.tsx +37 -0
- package/src/models/UsercentricsSettings.tsx +177 -0
- package/src/models/UsercentricsUserInteraction.tsx +7 -0
- package/src/models/UsercentricsVariant.tsx +6 -0
- package/src/models/index.tsx +29 -0
package/README.md
CHANGED
|
@@ -25,22 +25,22 @@ The Usercentrics Apps SDK is a native Consent Management Platform solution for m
|
|
|
25
25
|
## 📋 Requirements
|
|
26
26
|
|
|
27
27
|
### Mobile Platforms
|
|
28
|
-
* **Android
|
|
28
|
+
* **Android 7.0 (API 24)** or higher
|
|
29
29
|
* **iOS 11** or higher
|
|
30
30
|
|
|
31
31
|
### Development Environment
|
|
32
32
|
* **Node.js 18.0+** (LTS recommended)
|
|
33
33
|
* **npm 9.0+** or **Yarn 1.22+**
|
|
34
34
|
* **TypeScript 5.1+**
|
|
35
|
-
* **React 18.2+**
|
|
35
|
+
* **React 18.2+** (React 19 supported)
|
|
36
36
|
* **React Native 0.74.3+** (with Fabric support)
|
|
37
37
|
|
|
38
38
|
### Android Development
|
|
39
39
|
* **Java 17+** (OpenJDK or Oracle JDK)
|
|
40
|
-
* **Android SDK** with API
|
|
40
|
+
* **Android SDK** with API 34+ platforms
|
|
41
41
|
* **Android NDK 25+**
|
|
42
|
-
* **Gradle 8.2+**
|
|
43
|
-
* **Kotlin 1.9.22+**
|
|
42
|
+
* **Gradle 8.2+** (Gradle 8.13 used)
|
|
43
|
+
* **Kotlin 1.9.22+** (Kotlin 2.0.21 recommended)
|
|
44
44
|
* **Android Gradle Plugin 8.2+**
|
|
45
45
|
|
|
46
46
|
### iOS Development (macOS only)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
def usercentrics_version = "2.
|
|
1
|
+
def usercentrics_version = "2.24.1"
|
|
2
2
|
version usercentrics_version
|
|
3
3
|
|
|
4
4
|
buildscript {
|
|
@@ -78,4 +78,14 @@ dependencies {
|
|
|
78
78
|
androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
|
|
79
79
|
androidTestImplementation 'androidx.test:runner:1.4.0'
|
|
80
80
|
androidTestImplementation 'androidx.test:rules:1.4.0'
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Fix for Gradle task dependency issue with React Native autolinking
|
|
84
|
+
// This ensures that packageReleaseResources task waits for generateReleaseResValues to complete
|
|
85
|
+
afterEvaluate {
|
|
86
|
+
if (project.tasks.findByName("packageReleaseResources") && project.tasks.findByName(":usercentrics_react-native-sdk:generateReleaseResValues")) {
|
|
87
|
+
project.tasks.named("packageReleaseResources").configure {
|
|
88
|
+
dependsOn(":usercentrics_react-native-sdk:generateReleaseResValues")
|
|
89
|
+
}
|
|
90
|
+
}
|
|
81
91
|
}
|
package/android/build.gradle.kts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
val usercentricsVersion = "2.24.1"
|
|
2
|
+
val reactNativeVersion = "+"
|
|
3
|
+
|
|
4
|
+
fun BooleanProperty(name: String): Boolean {
|
|
5
|
+
return project.hasProperty(name) && project.property(name) == "true"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
val isNewArchitectureEnabled = BooleanProperty("newArchEnabled")
|
|
9
|
+
val isHermesEnabled = BooleanProperty("hermesEnabled")
|
|
10
|
+
|
|
1
11
|
plugins {
|
|
2
12
|
id("com.android.library")
|
|
3
|
-
id("
|
|
13
|
+
id("kotlin-android")
|
|
4
14
|
}
|
|
5
15
|
|
|
6
|
-
|
|
7
|
-
|
|
16
|
+
if (isNewArchitectureEnabled) {
|
|
17
|
+
apply(plugin = "com.facebook.react")
|
|
18
|
+
}
|
|
8
19
|
|
|
9
20
|
android {
|
|
10
21
|
namespace = "com.usercentrics.reactnative"
|
|
@@ -16,15 +27,14 @@ android {
|
|
|
16
27
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
17
28
|
consumerProguardFiles("proguard-rules.pro")
|
|
18
29
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchEnabled.toString())
|
|
30
|
+
// BuildConfig flags
|
|
31
|
+
buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled.toString())
|
|
23
32
|
buildConfigField("boolean", "IS_HERMES_ENABLED", isHermesEnabled.toString())
|
|
24
|
-
|
|
33
|
+
|
|
25
34
|
ndk {
|
|
26
35
|
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
|
|
27
36
|
}
|
|
37
|
+
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
compileOptions {
|
|
@@ -35,14 +45,12 @@ android {
|
|
|
35
45
|
kotlinOptions {
|
|
36
46
|
jvmTarget = "17"
|
|
37
47
|
}
|
|
38
|
-
|
|
39
|
-
compileOptions {
|
|
40
|
-
sourceCompatibility = JavaVersion.VERSION_17
|
|
41
|
-
targetCompatibility = JavaVersion.VERSION_17
|
|
42
|
-
}
|
|
43
48
|
|
|
44
49
|
sourceSets {
|
|
45
|
-
getByName("main").java.srcDirs(
|
|
50
|
+
getByName("main").java.srcDirs(
|
|
51
|
+
"src/main/kotlin",
|
|
52
|
+
"$buildDir/generated/codegen/NativeModules"
|
|
53
|
+
)
|
|
46
54
|
}
|
|
47
55
|
|
|
48
56
|
buildFeatures {
|
|
@@ -54,23 +62,33 @@ android {
|
|
|
54
62
|
useLegacyPackaging = false
|
|
55
63
|
}
|
|
56
64
|
}
|
|
65
|
+
|
|
57
66
|
}
|
|
58
67
|
|
|
59
68
|
dependencies {
|
|
60
69
|
implementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
61
70
|
implementation("com.usercentrics.sdk:usercentrics-ui:$usercentricsVersion")
|
|
62
71
|
|
|
63
|
-
// Unit tests
|
|
72
|
+
// Unit tests
|
|
64
73
|
testImplementation("junit:junit:4.13.2")
|
|
65
74
|
testImplementation("io.mockk:mockk:1.13.12")
|
|
66
75
|
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0")
|
|
67
|
-
testImplementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
68
76
|
|
|
69
|
-
// Instrumented tests
|
|
77
|
+
// Instrumented tests
|
|
70
78
|
androidTestImplementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
71
79
|
androidTestImplementation("io.mockk:mockk-android:1.12.0")
|
|
72
80
|
androidTestImplementation("junit:junit:4.13.2")
|
|
73
81
|
androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3")
|
|
74
82
|
androidTestImplementation("androidx.test:runner:1.4.0")
|
|
75
83
|
androidTestImplementation("androidx.test:rules:1.4.0")
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Fix for Gradle task dependency issue with React Native autolinking
|
|
87
|
+
// This ensures that packageReleaseResources task waits for generateReleaseResValues to complete
|
|
88
|
+
afterEvaluate {
|
|
89
|
+
if (project.tasks.findByName("packageReleaseResources") != null && project.tasks.findByName(":usercentrics_react-native-sdk:generateReleaseResValues") != null) {
|
|
90
|
+
project.tasks.named("packageReleaseResources").configure {
|
|
91
|
+
dependsOn(":usercentrics_react-native-sdk:generateReleaseResValues")
|
|
92
|
+
}
|
|
93
|
+
}
|
|
76
94
|
}
|
|
@@ -1,22 +1,51 @@
|
|
|
1
1
|
package com.usercentrics.reactnative
|
|
2
2
|
|
|
3
|
-
import com.facebook.react.
|
|
3
|
+
import com.facebook.react.TurboReactPackage
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModuleList
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
6
9
|
import com.facebook.react.uimanager.ViewManager
|
|
7
|
-
import com.facebook.react.turbomodule.core.interfaces.TurboModule
|
|
8
10
|
import com.usercentrics.reactnative.api.UsercentricsProxyImpl
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
@ReactModuleList(
|
|
13
|
+
nativeModules = [
|
|
14
|
+
RNUsercentricsModule::class,
|
|
15
|
+
],
|
|
16
|
+
)
|
|
17
|
+
class RNUsercentricsPackage : TurboReactPackage() {
|
|
11
18
|
|
|
12
19
|
private val usercentricsProxy = UsercentricsProxyImpl()
|
|
13
20
|
|
|
14
|
-
override fun
|
|
15
|
-
|
|
21
|
+
override fun getModule(s: String, reactApplicationContext: ReactApplicationContext): NativeModule? {
|
|
22
|
+
when (s) {
|
|
23
|
+
RNUsercentricsModule.NAME -> {
|
|
24
|
+
val reactContextProvider = ReactContextProviderImpl(reactApplicationContext)
|
|
25
|
+
return RNUsercentricsModule(reactApplicationContext, usercentricsProxy, reactContextProvider)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null
|
|
16
29
|
}
|
|
17
30
|
|
|
18
|
-
override fun
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider =
|
|
32
|
+
ReactModuleInfoProvider {
|
|
33
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
34
|
+
val isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
|
35
|
+
moduleInfos[RNUsercentricsModule.NAME] =
|
|
36
|
+
ReactModuleInfo(
|
|
37
|
+
RNUsercentricsModule.NAME,
|
|
38
|
+
RNUsercentricsModule.NAME,
|
|
39
|
+
false, // canOverrideExistingModule
|
|
40
|
+
false, // needsEagerInit
|
|
41
|
+
true, // hasConstants
|
|
42
|
+
false, // isCxxModule
|
|
43
|
+
isTurboModule,
|
|
44
|
+
)
|
|
45
|
+
moduleInfos
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
49
|
+
return emptyList()
|
|
21
50
|
}
|
|
22
51
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.13)
|
|
2
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
3
|
+
|
|
4
|
+
# Set library name
|
|
5
|
+
set(LIB_TARGET_NAME react_codegen_RNUsercentricsModule)
|
|
6
|
+
|
|
7
|
+
# Add compile options
|
|
8
|
+
add_compile_options(
|
|
9
|
+
-fexceptions
|
|
10
|
+
-frtti
|
|
11
|
+
-std=c++20
|
|
12
|
+
-Wall
|
|
13
|
+
-Wpedantic
|
|
14
|
+
-Wno-gnu-zero-variadic-macro-arguments
|
|
15
|
+
-Wno-dollar-in-identifier-extension
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Find source files
|
|
19
|
+
file(GLOB LIB_CUSTOM_SRCS CONFIGURE_DEPENDS *.cpp)
|
|
20
|
+
|
|
21
|
+
# Create the library
|
|
22
|
+
add_library(
|
|
23
|
+
${LIB_TARGET_NAME}
|
|
24
|
+
SHARED
|
|
25
|
+
${LIB_CUSTOM_SRCS}
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Include directories
|
|
29
|
+
target_include_directories(
|
|
30
|
+
${LIB_TARGET_NAME}
|
|
31
|
+
PUBLIC
|
|
32
|
+
.
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Link libraries based on React Native version
|
|
36
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
37
|
+
target_link_libraries(
|
|
38
|
+
${LIB_TARGET_NAME}
|
|
39
|
+
ReactAndroid::reactnative
|
|
40
|
+
ReactAndroid::jsi
|
|
41
|
+
fbjni::fbjni
|
|
42
|
+
)
|
|
43
|
+
else()
|
|
44
|
+
target_link_libraries(
|
|
45
|
+
${LIB_TARGET_NAME}
|
|
46
|
+
fbjni
|
|
47
|
+
folly_runtime
|
|
48
|
+
glog
|
|
49
|
+
jsi
|
|
50
|
+
react_codegen_rncore
|
|
51
|
+
react_debug
|
|
52
|
+
react_nativemodule_core
|
|
53
|
+
react_render_core
|
|
54
|
+
react_render_debug
|
|
55
|
+
react_render_graphics
|
|
56
|
+
react_render_mapbuffer
|
|
57
|
+
react_render_componentregistry
|
|
58
|
+
react_utils
|
|
59
|
+
rrc_view
|
|
60
|
+
turbomodulejsijni
|
|
61
|
+
yoga
|
|
62
|
+
)
|
|
63
|
+
endif()
|
|
64
|
+
|
|
65
|
+
# Compile options based on React Native version
|
|
66
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 80)
|
|
67
|
+
target_compile_reactnative_options(${LIB_TARGET_NAME} PRIVATE)
|
|
68
|
+
else()
|
|
69
|
+
target_compile_options(
|
|
70
|
+
${LIB_TARGET_NAME}
|
|
71
|
+
PRIVATE
|
|
72
|
+
-DLOG_TAG=\"ReactNative\"
|
|
73
|
+
-fexceptions
|
|
74
|
+
-frtti
|
|
75
|
+
-std=c++20
|
|
76
|
+
-Wall
|
|
77
|
+
)
|
|
78
|
+
endif()
|
|
79
|
+
|
|
80
|
+
# Additional include directories
|
|
81
|
+
target_include_directories(
|
|
82
|
+
${CMAKE_PROJECT_NAME}
|
|
83
|
+
PUBLIC
|
|
84
|
+
${CMAKE_CURRENT_SOURCE_DIR}
|
|
85
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#include <ReactCommon/JavaTurboModule.h>
|
|
2
|
+
#include <ReactCommon/TurboModule.h>
|
|
3
|
+
#include <jsi/jsi.h>
|
|
4
|
+
|
|
5
|
+
namespace facebook {
|
|
6
|
+
namespace react {
|
|
7
|
+
|
|
8
|
+
JSI_EXPORT
|
|
9
|
+
std::shared_ptr<TurboModule> RNUsercentricsModule_ModuleProvider(
|
|
10
|
+
const std::string &moduleName,
|
|
11
|
+
const JavaTurboModule::InitParams ¶ms) {
|
|
12
|
+
// This is a placeholder implementation
|
|
13
|
+
// The actual module is implemented in Java/Kotlin
|
|
14
|
+
return nullptr;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
} // namespace react
|
|
18
|
+
} // namespace facebook
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include <jni.h>
|
|
2
|
+
#include <jsi/jsi.h>
|
|
3
|
+
#include <fbjni/fbjni.h>
|
|
4
|
+
#include <ReactCommon/CallInvokerHolder.h>
|
|
5
|
+
#include <ReactCommon/TurboModuleUtils.h>
|
|
6
|
+
|
|
7
|
+
namespace facebook {
|
|
8
|
+
namespace react {
|
|
9
|
+
|
|
10
|
+
// This is a minimal C++ TurboModule bridge that delegates to the Kotlin implementation
|
|
11
|
+
// The actual TurboModule implementation is in RNUsercentricsModule.kt
|
|
12
|
+
|
|
13
|
+
extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
|
|
14
|
+
return facebook::jni::initialize(vm, [] {
|
|
15
|
+
// No additional initialization needed
|
|
16
|
+
// The Kotlin TurboModule will be loaded via TurboReactPackage
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
} // namespace react
|
|
21
|
+
} // namespace facebook
|
|
22
|
+
|
|
@@ -33,7 +33,7 @@ public extension UsercentricsOptions {
|
|
|
33
33
|
options.networkMode = NetworkMode.initialize(from: networkModeValue)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
if let consentMediationValue = dictionary["
|
|
36
|
+
if let consentMediationValue = dictionary["consentMediation"] as? Bool {
|
|
37
37
|
options.consentMediation = consentMediationValue
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { TurboModule } from 'react-native';
|
|
1
2
|
import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, UserDecision, TCFUserDecisions } from './models';
|
|
2
|
-
export interface Spec {
|
|
3
|
+
export interface Spec extends TurboModule {
|
|
3
4
|
configure(options: UsercentricsOptions): void;
|
|
4
5
|
isReady(): Promise<UsercentricsReadyStatus>;
|
|
5
6
|
showFirstLayer(options?: BannerSettings): Promise<UsercentricsConsentUserResponse>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { NativeModules } from 'react-native';
|
|
2
|
-
|
|
1
|
+
import { NativeModules, TurboModuleRegistry } from 'react-native';
|
|
2
|
+
// Try to get TurboModule first, fallback to NativeModule
|
|
3
|
+
const RNUsercentricsModule = TurboModuleRegistry.get('RNUsercentricsModule') || NativeModules.RNUsercentricsModule;
|
|
3
4
|
if (!RNUsercentricsModule) {
|
|
4
5
|
throw new Error('Usercentrics React Native SDK: Native module not found. ' +
|
|
5
6
|
'Make sure the SDK is properly installed and linked. ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AA8D/E,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC;AAEzH,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D;QAC1D,sDAAsD;QACtD,wCAAwC;QACxC,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED,eAAe,oBAA4B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
export interface Spec extends TurboModule {
|
|
3
|
+
configure(options: Object): void;
|
|
4
|
+
isReady(): Promise<Object>;
|
|
5
|
+
showFirstLayer(options?: Object): Promise<Object>;
|
|
6
|
+
showSecondLayer(options?: Object): Promise<Object>;
|
|
7
|
+
restoreUserSession(controllerId: string): Promise<Object>;
|
|
8
|
+
getControllerId(): Promise<string>;
|
|
9
|
+
clearUserSession(): Promise<Object>;
|
|
10
|
+
getConsents(): Promise<Array<Object>>;
|
|
11
|
+
getCMPData(): Promise<Object>;
|
|
12
|
+
getAdditionalConsentModeData(): Promise<Object>;
|
|
13
|
+
getTCFData(): Promise<Object>;
|
|
14
|
+
getUserSessionData(): Promise<string>;
|
|
15
|
+
getUSPData(): Promise<Object>;
|
|
16
|
+
getABTestingVariant(): Promise<string>;
|
|
17
|
+
setCMPId(id: number): void;
|
|
18
|
+
setABTestingVariant(variant: string): void;
|
|
19
|
+
changeLanguage(language: string): Promise<void>;
|
|
20
|
+
acceptAll(consentType: number): Promise<Array<Object>>;
|
|
21
|
+
acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
|
|
22
|
+
denyAll(consentType: number): Promise<Array<Object>>;
|
|
23
|
+
denyAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
|
|
24
|
+
saveDecisions(decisions: Array<Object>, consentType: number): Promise<Array<Object>>;
|
|
25
|
+
saveDecisionsForTCF(tcfDecisions: Object, fromLayer: number, saveDecisions: Array<Object>, consentType: number): Promise<Array<Object>>;
|
|
26
|
+
saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<Object>>;
|
|
27
|
+
track(event: number): void;
|
|
28
|
+
}
|
|
29
|
+
declare const _default: Spec | null;
|
|
30
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAiDnD,eAAe,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usercentrics/react-native-sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.24.1",
|
|
4
4
|
"description": "Usercentrics SDK",
|
|
5
5
|
"homepage": "https://usercentrics.com",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
8
8
|
"author": "Usercentrics <developer@usercentrics.com>",
|
|
9
9
|
"iosPackageName": "react-native-usercentrics",
|
|
10
|
-
"iosPackageVersion": "2.
|
|
10
|
+
"iosPackageVersion": "2.24.1",
|
|
11
11
|
"license": "SEE LICENSE IN LICENSE",
|
|
12
12
|
"files": [
|
|
13
13
|
"android",
|
|
14
14
|
"ios",
|
|
15
15
|
"lib",
|
|
16
|
+
"src",
|
|
16
17
|
"react-native-usercentrics.podspec",
|
|
17
|
-
"
|
|
18
|
+
"react-native.config.js",
|
|
18
19
|
"!.DS_Store",
|
|
19
20
|
"!.gradle",
|
|
20
21
|
"!.idea",
|
|
@@ -39,7 +40,9 @@
|
|
|
39
40
|
"run-android": "./scripts/run-android.sh",
|
|
40
41
|
"check-requirements": "./scripts/check-requirements.sh",
|
|
41
42
|
"auto-setup": "./scripts/auto-setup.sh",
|
|
42
|
-
"publish-local": "./scripts/publish-local.sh"
|
|
43
|
+
"publish-local": "./scripts/publish-local.sh",
|
|
44
|
+
"prepublishOnly": "node scripts/generate-codegen-jni.js",
|
|
45
|
+
"pack:local": "node scripts/generate-codegen-jni.js && npm pack"
|
|
43
46
|
},
|
|
44
47
|
"devDependencies": {
|
|
45
48
|
"@babel/core": "^7.25.10",
|
|
@@ -96,5 +99,13 @@
|
|
|
96
99
|
"react-native-safe-area-context": "^5.6.1",
|
|
97
100
|
"react-native-screens": "^4.16.0",
|
|
98
101
|
"react-native-webview": "^13.16.0"
|
|
102
|
+
},
|
|
103
|
+
"codegenConfig": {
|
|
104
|
+
"name": "RNUsercentricsModule",
|
|
105
|
+
"type": "all",
|
|
106
|
+
"jsSrcsDir": "./src/fabric",
|
|
107
|
+
"android": {
|
|
108
|
+
"javaPackageName": "com.usercentrics.reactnative"
|
|
109
|
+
}
|
|
99
110
|
}
|
|
100
111
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
dependency: {
|
|
3
|
+
platforms: {
|
|
4
|
+
android: {
|
|
5
|
+
sourceDir: './android',
|
|
6
|
+
packageImportPath: 'import com.usercentrics.reactnative.RNUsercentricsPackage;',
|
|
7
|
+
packageInstance: 'new RNUsercentricsPackage()',
|
|
8
|
+
componentDescriptors: []
|
|
9
|
+
},
|
|
10
|
+
ios: {
|
|
11
|
+
sourceDir: './ios',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { NativeModules, TurboModuleRegistry, TurboModule } from 'react-native';
|
|
2
|
+
import type {
|
|
3
|
+
UsercentricsOptions,
|
|
4
|
+
UsercentricsReadyStatus,
|
|
5
|
+
BannerSettings,
|
|
6
|
+
UsercentricsConsentUserResponse,
|
|
7
|
+
UsercentricsServiceConsent,
|
|
8
|
+
UsercentricsCMPData,
|
|
9
|
+
AdditionalConsentModeData,
|
|
10
|
+
TCFData,
|
|
11
|
+
CCPAData,
|
|
12
|
+
UserDecision,
|
|
13
|
+
TCFUserDecisions,
|
|
14
|
+
} from './models';
|
|
15
|
+
|
|
16
|
+
export interface Spec extends TurboModule {
|
|
17
|
+
// Configuration
|
|
18
|
+
configure(options: UsercentricsOptions): void;
|
|
19
|
+
isReady(): Promise<UsercentricsReadyStatus>;
|
|
20
|
+
|
|
21
|
+
// UI Methods
|
|
22
|
+
showFirstLayer(options?: BannerSettings): Promise<UsercentricsConsentUserResponse>;
|
|
23
|
+
showSecondLayer(options?: BannerSettings): Promise<UsercentricsConsentUserResponse>;
|
|
24
|
+
|
|
25
|
+
// Session Management
|
|
26
|
+
restoreUserSession(controllerId: string): Promise<UsercentricsReadyStatus>;
|
|
27
|
+
getControllerId(): Promise<string>;
|
|
28
|
+
clearUserSession(): Promise<UsercentricsReadyStatus>;
|
|
29
|
+
|
|
30
|
+
// Data Retrieval
|
|
31
|
+
getConsents(): Promise<Array<UsercentricsServiceConsent>>;
|
|
32
|
+
getCMPData(): Promise<UsercentricsCMPData>;
|
|
33
|
+
getAdditionalConsentModeData(): Promise<AdditionalConsentModeData>;
|
|
34
|
+
getTCFData(): Promise<TCFData>;
|
|
35
|
+
getUserSessionData(): Promise<string>;
|
|
36
|
+
getUSPData(): Promise<CCPAData>;
|
|
37
|
+
getABTestingVariant(): Promise<string>;
|
|
38
|
+
|
|
39
|
+
// Configuration Setters
|
|
40
|
+
setCMPId(id: number): void;
|
|
41
|
+
setABTestingVariant(variant: string): void;
|
|
42
|
+
changeLanguage(language: string): Promise<void>;
|
|
43
|
+
|
|
44
|
+
// Consent Actions
|
|
45
|
+
acceptAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
46
|
+
acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
47
|
+
denyAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
48
|
+
denyAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
49
|
+
|
|
50
|
+
saveDecisions(decisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
51
|
+
saveDecisionsForTCF(
|
|
52
|
+
tcfDecisions: TCFUserDecisions,
|
|
53
|
+
fromLayer: number,
|
|
54
|
+
saveDecisions: Array<UserDecision>,
|
|
55
|
+
consentType: number
|
|
56
|
+
): Promise<Array<UsercentricsServiceConsent>>;
|
|
57
|
+
saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
58
|
+
|
|
59
|
+
// Analytics
|
|
60
|
+
track(event: number): void;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Try to get TurboModule first, fallback to NativeModule
|
|
64
|
+
const RNUsercentricsModule = TurboModuleRegistry.get<Spec>('RNUsercentricsModule') || NativeModules.RNUsercentricsModule;
|
|
65
|
+
|
|
66
|
+
if (!RNUsercentricsModule) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
'Usercentrics React Native SDK: Native module not found. ' +
|
|
69
|
+
'Make sure the SDK is properly installed and linked. ' +
|
|
70
|
+
'For iOS, run "cd ios && pod install". ' +
|
|
71
|
+
'For Android, make sure autolinking is working correctly.'
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export default RNUsercentricsModule as Spec;
|