@usercentrics/react-native-sdk 2.24.0 → 2.24.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.
@@ -1,4 +1,4 @@
1
- def usercentrics_version = "2.24.0"
1
+ def usercentrics_version = "2.24.2"
2
2
  version usercentrics_version
3
3
 
4
4
  buildscript {
@@ -1,4 +1,4 @@
1
- val usercentricsVersion = "2.24.0"
1
+ val usercentricsVersion = "2.24.2"
2
2
  val reactNativeVersion = "+"
3
3
 
4
4
  fun BooleanProperty(name: String): Boolean {
@@ -517,7 +517,7 @@ class RNUsercentricsModuleTest {
517
517
  val usercentricsSDK = mockk<UsercentricsSDK>()
518
518
  every {
519
519
  usercentricsSDK.denyAllForTCF(
520
- any(), any()
520
+ any(), any(), any()
521
521
  )
522
522
  }.returns(GetConsentsMock.fakeWithData)
523
523
 
@@ -527,11 +527,12 @@ class RNUsercentricsModuleTest {
527
527
  RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
528
528
 
529
529
  val promise = FakePromise()
530
- module.denyAllForTCF(0, 0, promise)
530
+ val emptyArray = JavaOnlyArray()
531
+ module.denyAllForTCF(0, 0, emptyArray, promise)
531
532
 
532
533
  verify(exactly = 1) {
533
534
  usercentricsSDK.denyAllForTCF(
534
- TCFDecisionUILayer.FIRST_LAYER, UsercentricsConsentType.EXPLICIT
535
+ TCFDecisionUILayer.FIRST_LAYER, UsercentricsConsentType.EXPLICIT, null
535
536
  )
536
537
  }
537
538
 
@@ -149,10 +149,10 @@ internal class RNUsercentricsModule(
149
149
  }
150
150
 
151
151
  @ReactMethod
152
- override fun denyAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
152
+ override fun denyAllForTCF(fromLayer: Int, consentType: Int, unsavedPurposeLIDecisions: ReadableArray, promise: Promise) {
153
153
  promise.resolve(
154
154
  usercentricsProxy.instance.denyAllForTCF(
155
- TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
155
+ TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType], unsavedPurposeLIDecisions.deserializePurposeLIDecisionsMap()
156
156
  ).toWritableArray()
157
157
  )
158
158
  }
@@ -73,7 +73,7 @@ abstract class RNUsercentricsModuleSpec internal constructor(context: ReactAppli
73
73
  abstract fun denyAll(consentType: Int, promise: Promise)
74
74
 
75
75
  @ReactMethod
76
- abstract fun denyAllForTCF(fromLayer: Int, consentType: Int, promise: Promise)
76
+ abstract fun denyAllForTCF(fromLayer: Int, consentType: Int, unsavedPurposeLIDecisions: ReadableArray, promise: Promise)
77
77
 
78
78
  @ReactMethod
79
79
  abstract fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise)
@@ -25,6 +25,19 @@ internal fun ReadableArray.deserializeUserDecision(): List<UserDecision> {
25
25
  return decisionList
26
26
  }
27
27
 
28
+ internal fun ReadableArray.deserializePurposeLIDecisionsMap(): Map<Int, Boolean>? {
29
+ if (size() == 0) return null
30
+ val map = mutableMapOf<Int, Boolean>()
31
+ for (i in 0 until size()) {
32
+ getMap(i)?.let { readableMap ->
33
+ val id = readableMap.getInt("id")
34
+ val consent = readableMap.getBooleanOrNull("legitimateInterestConsent") ?: false
35
+ map[id] = consent
36
+ }
37
+ }
38
+ return map
39
+ }
40
+
28
41
  internal fun ReadableMap.deserializeTCFUserDecisions(): TCFUserDecisions {
29
42
  val purposes = getArray("purposes")?.let { purpose ->
30
43
  val list = mutableListOf<TCFUserDecisionOnPurpose>()
@@ -1,8 +1,9 @@
1
1
  cmake_minimum_required(VERSION 3.13)
2
+ project(rn_usercentrics)
2
3
  set(CMAKE_VERBOSE_MAKEFILE ON)
3
4
 
4
5
  # Set library name
5
- set(LIB_TARGET_NAME react_codegen_RNUsercentricsModule)
6
+ set(LIB_TARGET_NAME rn_usercentrics)
6
7
 
7
8
  # Add compile options
8
9
  add_compile_options(
@@ -32,54 +33,44 @@ target_include_directories(
32
33
  .
33
34
  )
34
35
 
36
+ # Find ReactAndroid package first (required for version detection)
37
+ find_package(ReactAndroid REQUIRED CONFIG)
38
+
35
39
  # Link libraries based on React Native version
36
- if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
40
+ if(DEFINED ReactAndroid_VERSION_MINOR AND ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
37
41
  target_link_libraries(
38
42
  ${LIB_TARGET_NAME}
39
43
  ReactAndroid::reactnative
40
44
  ReactAndroid::jsi
41
- fbjni::fbjni
45
+ ReactAndroid::fbjni
46
+ android
47
+ log
42
48
  )
43
49
  else()
50
+ # Fallback for older RN versions or when version is not available
44
51
  target_link_libraries(
45
52
  ${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
53
+ ReactAndroid::reactnative
54
+ ReactAndroid::jsi
55
+ android
56
+ log
62
57
  )
63
58
  endif()
64
59
 
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()
60
+ # Compile options - use standard approach for compatibility
61
+ target_compile_options(
62
+ ${LIB_TARGET_NAME}
63
+ PRIVATE
64
+ -DLOG_TAG=\"ReactNative\"
65
+ -fexceptions
66
+ -frtti
67
+ -std=c++20
68
+ -Wall
69
+ )
79
70
 
80
71
  # Additional include directories
81
72
  target_include_directories(
82
- ${CMAKE_PROJECT_NAME}
83
- PUBLIC
73
+ ${LIB_TARGET_NAME}
74
+ PRIVATE
84
75
  ${CMAKE_CURRENT_SOURCE_DIR}
85
76
  )
@@ -33,7 +33,7 @@ public extension UsercentricsOptions {
33
33
  options.networkMode = NetworkMode.initialize(from: networkModeValue)
34
34
  }
35
35
 
36
- if let consentMediationValue = dictionary["networkMode"] as? Bool {
36
+ if let consentMediationValue = dictionary["consentMediation"] as? Bool {
37
37
  options.consentMediation = consentMediationValue
38
38
  }
39
39
 
@@ -28,7 +28,7 @@ public protocol UsercentricsManager {
28
28
  func acceptAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
29
29
  func acceptAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
30
30
 
31
- func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
31
+ func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent]
32
32
  func denyAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
33
33
 
34
34
  func saveDecisionsForTCF(tcfDecisions: TCFUserDecisions,
@@ -112,8 +112,8 @@ final class UsercentricsManagerImplementation: UsercentricsManager {
112
112
  return UsercentricsCore.shared.acceptAll(consentType: consentType)
113
113
  }
114
114
 
115
- func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent] {
116
- return UsercentricsCore.shared.denyAllForTCF(fromLayer: fromLayer, consentType: consentType)
115
+ func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent] {
116
+ return UsercentricsCore.shared.denyAllForTCF(fromLayer: fromLayer, consentType: consentType, unsavedPurposeLIDecisions: unsavedPurposeLIDecisions)
117
117
  }
118
118
 
119
119
  func denyAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent] {
@@ -71,6 +71,7 @@ RCT_EXTERN_METHOD(acceptAll:(NSInteger *)consentType
71
71
 
72
72
  RCT_EXTERN_METHOD(denyAllForTCF:(NSInteger *)fromLayer
73
73
  consentType:(NSInteger)consentType
74
+ unsavedPurposeLIDecisions:(NSArray)unsavedPurposeLIDecisions
74
75
  resolve:(RCTPromiseResolveBlock)resolve
75
76
  reject:(RCTPromiseRejectBlock)reject)
76
77
 
@@ -157,9 +157,20 @@ class RNUsercentricsModule: NSObject {
157
157
 
158
158
  @objc func denyAllForTCF(_ fromLayer: Int,
159
159
  consentType: Int,
160
+ unsavedPurposeLIDecisions: [NSDictionary],
160
161
  resolve: @escaping RCTPromiseResolveBlock,
161
162
  reject: @escaping RCTPromiseRejectBlock) -> Void {
162
- let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: fromLayer), consentType: .initialize(from: consentType))
163
+ var decisions: [KotlinInt: KotlinBoolean]? = nil
164
+ if !unsavedPurposeLIDecisions.isEmpty {
165
+ decisions = [:]
166
+ for dict in unsavedPurposeLIDecisions {
167
+ if let id = dict["id"] as? Int,
168
+ let consent = dict["legitimateInterestConsent"] as? Bool {
169
+ decisions?[KotlinInt(int: Int32(id))] = KotlinBoolean(bool: consent)
170
+ }
171
+ }
172
+ }
173
+ let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: fromLayer), consentType: .initialize(from: consentType), unsavedPurposeLIDecisions: decisions)
163
174
  resolve(services.toListOfDictionary())
164
175
  }
165
176
 
@@ -74,6 +74,7 @@ NS_ASSUME_NONNULL_BEGIN
74
74
 
75
75
  - (void)denyAllForTCF:(NSInteger)fromLayer
76
76
  consentType:(NSInteger)consentType
77
+ unsavedPurposeLIDecisions:(NSArray<NSDictionary *> *)unsavedPurposeLIDecisions
77
78
  resolve:(RCTPromiseResolveBlock)resolve
78
79
  reject:(RCTPromiseRejectBlock)reject;
79
80
 
@@ -1,5 +1,5 @@
1
1
  import { TurboModule } from 'react-native';
2
- import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, UserDecision, TCFUserDecisions } from './models';
2
+ import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, UserDecision, TCFUserDecisions, TCFUserDecisionOnPurpose } from './models';
3
3
  export interface Spec extends TurboModule {
4
4
  configure(options: UsercentricsOptions): void;
5
5
  isReady(): Promise<UsercentricsReadyStatus>;
@@ -21,7 +21,7 @@ export interface Spec extends TurboModule {
21
21
  acceptAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
22
22
  acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
23
23
  denyAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
24
- denyAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
24
+ denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<TCFUserDecisionOnPurpose>): Promise<Array<UsercentricsServiceConsent>>;
25
25
  saveDecisions(decisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
26
26
  saveDecisionsForTCF(tcfDecisions: TCFUserDecisions, fromLayer: number, saveDecisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
27
27
  saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AA+D/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"}
@@ -1,4 +1,4 @@
1
- import { AdditionalConsentModeData, BannerSettings, CCPAData, TCFData, TCFDecisionUILayer, TCFUserDecisions, UsercentricsAnalyticsEventType, UsercentricsCMPData, UsercentricsConsentType, UsercentricsConsentUserResponse, UsercentricsOptions, UsercentricsReadyStatus, UsercentricsServiceConsent, UserDecision } from './models';
1
+ import { AdditionalConsentModeData, BannerSettings, CCPAData, TCFData, TCFDecisionUILayer, TCFUserDecisionOnPurpose, TCFUserDecisions, UsercentricsAnalyticsEventType, UsercentricsCMPData, UsercentricsConsentType, UsercentricsConsentUserResponse, UsercentricsOptions, UsercentricsReadyStatus, UsercentricsServiceConsent, UserDecision } from './models';
2
2
  export declare const Usercentrics: {
3
3
  configure: (options: UsercentricsOptions) => void;
4
4
  status: () => Promise<UsercentricsReadyStatus>;
@@ -17,7 +17,7 @@ export declare const Usercentrics: {
17
17
  acceptAll: (consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
18
18
  acceptAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
19
19
  denyAll: (consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
20
- denyAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
20
+ denyAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions?: TCFUserDecisionOnPurpose[]) => Promise<Array<UsercentricsServiceConsent>>;
21
21
  saveDecisions: (decisions: UserDecision[], consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
22
22
  saveDecisionsForTCF: (tcfDecisions: TCFUserDecisions, fromLayer: TCFDecisionUILayer, decisions: UserDecision[], consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
23
23
  saveOptOutForCCPA: (isOptedOut: boolean, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
@@ -69,9 +69,9 @@ export const Usercentrics = {
69
69
  await RNUsercentricsModule.isReady();
70
70
  return RNUsercentricsModule.denyAll(consentType);
71
71
  },
72
- denyAllForTCF: async (fromLayer, consentType) => {
72
+ denyAllForTCF: async (fromLayer, consentType, unsavedPurposeLIDecisions = []) => {
73
73
  await RNUsercentricsModule.isReady();
74
- return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType);
74
+ return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions);
75
75
  },
76
76
  saveDecisions: async (decisions, consentType) => {
77
77
  await RNUsercentricsModule.isReady();
@@ -1 +1 @@
1
- {"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface Spec extends TurboModule {
20
20
  acceptAll(consentType: number): Promise<Array<Object>>;
21
21
  acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
22
22
  denyAll(consentType: number): Promise<Array<Object>>;
23
- denyAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
23
+ denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<Object>): Promise<Array<Object>>;
24
24
  saveDecisions(decisions: Array<Object>, consentType: number): Promise<Array<Object>>;
25
25
  saveDecisionsForTCF(tcfDecisions: Object, fromLayer: number, saveDecisions: Array<Object>, consentType: number): Promise<Array<Object>>;
26
26
  saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<Object>>;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@usercentrics/react-native-sdk",
3
- "version": "2.24.0",
3
+ "version": "2.24.2",
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.24.0",
10
+ "iosPackageVersion": "2.24.2",
11
11
  "license": "SEE LICENSE IN LICENSE",
12
12
  "files": [
13
13
  "android",
@@ -46,7 +46,6 @@
46
46
  },
47
47
  "devDependencies": {
48
48
  "@babel/core": "^7.25.10",
49
- "@babel/runtime": "^7.25.3",
50
49
  "@react-native-community/cli": "^18.0.0",
51
50
  "@react-native-community/cli-platform-android": "18.0.0",
52
51
  "@react-native-community/cli-platform-ios": "18.0.0",
@@ -92,14 +91,7 @@
92
91
  "bugs": {
93
92
  "url": "https://github.com/Usercentrics/react-native-sdk/issues"
94
93
  },
95
- "dependencies": {
96
- "hermes-engine": "^0.11.0",
97
- "install": "^0.13.0",
98
- "npm": "^11.6.0",
99
- "react-native-safe-area-context": "^5.6.1",
100
- "react-native-screens": "^4.16.0",
101
- "react-native-webview": "^13.16.0"
102
- },
94
+ "dependencies": {},
103
95
  "codegenConfig": {
104
96
  "name": "RNUsercentricsModule",
105
97
  "type": "all",
@@ -21,22 +21,56 @@ Pod::Spec.new do |s|
21
21
  s.dependency 'React-NativeModulesApple'
22
22
  s.dependency 'UsercentricsUI', "#{package['iosPackageVersion']}"
23
23
 
24
- s.pod_target_xcconfig = {
24
+ # Base C++ configuration
25
+ # Note: RCT_NEW_ARCH_ENABLED is inherited from parent project build settings
26
+ # This ensures compatibility with Expo's prebuild process
27
+ base_cpp_flags = {
25
28
  'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20',
26
29
  'CLANG_CXX_LIBRARY' => 'libc++',
27
- 'OTHER_CPLUSPLUSFLAGS' => '-std=c++20 -stdlib=libc++',
28
- 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/React-Core" "$(PODS_ROOT)/React-NativeModulesApple" "$(PODS_ROOT)/ReactCommon" "$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon"',
29
- 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) RCT_NEW_ARCH_ENABLED=0',
30
+ 'OTHER_CPLUSPLUSFLAGS' => '-std=c++20 -stdlib=libc++ $(inherited)',
30
31
  'CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER' => 'NO',
31
32
  'CLANG_WARN_DOCUMENTATION_COMMENTS' => 'NO',
32
- 'GCC_WARN_INHIBIT_ALL_WARNINGS' => 'YES'
33
+ 'GCC_WARN_INHIBIT_ALL_WARNINGS' => 'YES',
34
+ 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
35
+ 'DEFINES_MODULE' => 'YES',
36
+ # Ensure C++ standard library headers are accessible
37
+ 'USE_HEADERMAP' => 'YES',
38
+ 'ALWAYS_SEARCH_USER_PATHS' => 'NO'
33
39
  }
34
40
 
41
+ # Header search paths - include React Native and C++ standard library paths
42
+ header_search_paths = [
43
+ '$(PODS_ROOT)/React-Core',
44
+ '$(PODS_ROOT)/React-NativeModulesApple',
45
+ '$(PODS_ROOT)/ReactCommon',
46
+ '$(PODS_CONFIGURATION_BUILD_DIR)/ReactCommon',
47
+ '$(PODS_TARGET_SRCROOT)',
48
+ '$(PODS_ROOT)/Headers/Public',
49
+ '$(PODS_ROOT)/Headers/Public/React-Core',
50
+ '$(PODS_ROOT)/Headers/Public/ReactCommon'
51
+ ]
52
+
53
+ # Add new architecture paths if available (will be resolved at build time)
54
+ header_search_paths += [
55
+ '$(PODS_ROOT)/Headers/Public/React-Fabric',
56
+ '$(PODS_ROOT)/Headers/Public/React-Codegen',
57
+ '$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers',
58
+ '$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers'
59
+ ]
60
+
61
+ base_cpp_flags['HEADER_SEARCH_PATHS'] = header_search_paths.map { |path| "\"#{path}\"" }.join(' ')
62
+
63
+ # Preprocessor definitions - inherit RCT_NEW_ARCH_ENABLED from parent project
64
+ # This allows Expo/React Native to control the new architecture flag
65
+ base_cpp_flags['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited)'
66
+
67
+ s.pod_target_xcconfig = base_cpp_flags
68
+
35
69
  s.user_target_xcconfig = {
36
70
  'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20',
37
71
  'CLANG_CXX_LIBRARY' => 'libc++',
38
- 'OTHER_CPLUSPLUSFLAGS' => '-std=c++20 -stdlib=libc++',
39
- 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) RCT_NEW_ARCH_ENABLED=0',
72
+ 'OTHER_CPLUSPLUSFLAGS' => '-std=c++20 -stdlib=libc++ $(inherited)',
73
+ 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited)',
40
74
  'CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER' => 'NO',
41
75
  'CLANG_WARN_DOCUMENTATION_COMMENTS' => 'NO',
42
76
  'GCC_WARN_INHIBIT_ALL_WARNINGS' => 'YES'
@@ -11,6 +11,7 @@ import type {
11
11
  CCPAData,
12
12
  UserDecision,
13
13
  TCFUserDecisions,
14
+ TCFUserDecisionOnPurpose,
14
15
  } from './models';
15
16
 
16
17
  export interface Spec extends TurboModule {
@@ -45,7 +46,7 @@ export interface Spec extends TurboModule {
45
46
  acceptAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
46
47
  acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
47
48
  denyAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
48
- denyAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
49
+ denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<TCFUserDecisionOnPurpose>): Promise<Array<UsercentricsServiceConsent>>;
49
50
 
50
51
  saveDecisions(decisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
51
52
  saveDecisionsForTCF(
@@ -5,6 +5,7 @@ import {
5
5
  CCPAData,
6
6
  TCFData,
7
7
  TCFDecisionUILayer,
8
+ TCFUserDecisionOnPurpose,
8
9
  TCFUserDecisions,
9
10
  UsercentricsAnalyticsEventType,
10
11
  UsercentricsCMPData,
@@ -105,9 +106,9 @@ export const Usercentrics = {
105
106
  return RNUsercentricsModule.denyAll(consentType);
106
107
  },
107
108
 
108
- denyAllForTCF: async (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType): Promise<Array<UsercentricsServiceConsent>> => {
109
+ denyAllForTCF: async (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: TCFUserDecisionOnPurpose[] = []): Promise<Array<UsercentricsServiceConsent>> => {
109
110
  await RNUsercentricsModule.isReady();
110
- return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType);
111
+ return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions);
111
112
  },
112
113
 
113
114
  saveDecisions: async (decisions: UserDecision[], consentType: UsercentricsConsentType): Promise<Array<UsercentricsServiceConsent>> => {
@@ -33,7 +33,7 @@ export interface Spec extends TurboModule {
33
33
  acceptAll(consentType: number): Promise<Array<Object>>;
34
34
  acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
35
35
  denyAll(consentType: number): Promise<Array<Object>>;
36
- denyAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
36
+ denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<Object>): Promise<Array<Object>>;
37
37
 
38
38
  saveDecisions(decisions: Array<Object>, consentType: number): Promise<Array<Object>>;
39
39
  saveDecisionsForTCF(