@usercentrics/react-native-sdk 2.24.4 → 2.25.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.
@@ -1,4 +1,4 @@
1
- def usercentrics_version = "2.24.4"
1
+ def usercentrics_version = "2.25.1"
2
2
  version usercentrics_version
3
3
 
4
4
  buildscript {
@@ -1,4 +1,4 @@
1
- val usercentricsVersion = "2.24.4"
1
+ val usercentricsVersion = "2.25.1"
2
2
  val reactNativeVersion = "+"
3
3
 
4
4
  fun BooleanProperty(name: String): Boolean {
@@ -11,6 +11,7 @@ val isHermesEnabled = BooleanProperty("hermesEnabled")
11
11
  plugins {
12
12
  id("com.android.library")
13
13
  id("kotlin-android")
14
+ id("org.jetbrains.kotlinx.kover") version "0.9.1"
14
15
  }
15
16
 
16
17
  if (isNewArchitectureEnabled) {
@@ -37,6 +38,11 @@ android {
37
38
 
38
39
  }
39
40
 
41
+ buildTypes {
42
+ getByName("debug") {
43
+ }
44
+ }
45
+
40
46
  compileOptions {
41
47
  sourceCompatibility = JavaVersion.VERSION_17
42
48
  targetCompatibility = JavaVersion.VERSION_17
@@ -88,7 +88,8 @@ internal object GetCMPDataMock {
88
88
  domain = "domain",
89
89
  description = "description",
90
90
  )
91
- )
91
+ ),
92
+ sdks = listOf()
92
93
  ),
93
94
  isHidden = false,
94
95
  )
@@ -628,17 +629,20 @@ internal object GetCMPDataMock {
628
629
  "isDeactivated" to false,
629
630
  "disableLegalBasis" to false,
630
631
  "technologyUsed" to listOf("Cookies", "Pixel Tags"),
631
- "deviceStorage" to listOf(
632
- mapOf(
633
- "identifier" to "identifier",
634
- "type" to 2,
635
- "name" to "name",
636
- "maxAgeSeconds" to 123123L,
637
- "cookieRefresh" to true,
638
- "purposes" to listOf(1, 2, 3),
639
- "domain" to "domain",
640
- "description" to "description",
641
- )
632
+ "deviceStorage" to mapOf(
633
+ "disclosures" to listOf(
634
+ mapOf(
635
+ "identifier" to "identifier",
636
+ "type" to 2,
637
+ "name" to "name",
638
+ "maxAgeSeconds" to 123123L,
639
+ "cookieRefresh" to true,
640
+ "purposes" to listOf(1, 2, 3),
641
+ "domain" to "domain",
642
+ "description" to "description",
643
+ )
644
+ ),
645
+ "sdks" to emptyList<Map<String, Any>>()
642
646
  ),
643
647
  "isHidden" to false,
644
648
  )
@@ -95,8 +95,8 @@ internal class RNUsercentricsModule(
95
95
  }
96
96
 
97
97
  @ReactMethod
98
- override fun setCMPId(id: Int) {
99
- usercentricsProxy.instance.setCMPId(id)
98
+ override fun setCMPId(id: Double) {
99
+ usercentricsProxy.instance.setCMPId(id.toInt())
100
100
  }
101
101
 
102
102
  @ReactMethod
@@ -131,37 +131,37 @@ internal class RNUsercentricsModule(
131
131
  }
132
132
 
133
133
  @ReactMethod
134
- override fun acceptAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
134
+ override fun acceptAllForTCF(fromLayer: Double, consentType: Double, promise: Promise) {
135
135
  promise.resolve(
136
136
  usercentricsProxy.instance.acceptAllForTCF(
137
- TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
137
+ TCFDecisionUILayer.values()[fromLayer.toInt()], UsercentricsConsentType.values()[consentType.toInt()]
138
138
  ).toWritableArray()
139
139
  )
140
140
  }
141
141
 
142
142
  @ReactMethod
143
- override fun acceptAll(consentType: Int, promise: Promise) {
143
+ override fun acceptAll(consentType: Double, promise: Promise) {
144
144
  promise.resolve(
145
145
  usercentricsProxy.instance.acceptAll(
146
- UsercentricsConsentType.values()[consentType]
146
+ UsercentricsConsentType.values()[consentType.toInt()]
147
147
  ).toWritableArray()
148
148
  )
149
149
  }
150
150
 
151
151
  @ReactMethod
152
- override fun denyAllForTCF(fromLayer: Int, consentType: Int, unsavedPurposeLIDecisions: ReadableArray, promise: Promise) {
152
+ override fun denyAllForTCF(fromLayer: Double, consentType: Double, unsavedPurposeLIDecisions: ReadableArray, promise: Promise) {
153
153
  promise.resolve(
154
154
  usercentricsProxy.instance.denyAllForTCF(
155
- TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType], unsavedPurposeLIDecisions.deserializePurposeLIDecisionsMap()
155
+ TCFDecisionUILayer.values()[fromLayer.toInt()], UsercentricsConsentType.values()[consentType.toInt()], unsavedPurposeLIDecisions.deserializePurposeLIDecisionsMap()
156
156
  ).toWritableArray()
157
157
  )
158
158
  }
159
159
 
160
160
  @ReactMethod
161
- override fun denyAll(consentType: Int, promise: Promise) {
161
+ override fun denyAll(consentType: Double, promise: Promise) {
162
162
  promise.resolve(
163
163
  usercentricsProxy.instance.denyAll(
164
- UsercentricsConsentType.values()[consentType]
164
+ UsercentricsConsentType.values()[consentType.toInt()]
165
165
  ).toWritableArray()
166
166
  )
167
167
  }
@@ -169,42 +169,42 @@ internal class RNUsercentricsModule(
169
169
  @ReactMethod
170
170
  override fun saveDecisionsForTCF(
171
171
  tcfDecisions: ReadableMap,
172
- fromLayer: Int,
172
+ fromLayer: Double,
173
173
  saveDecisions: ReadableArray,
174
- consentType: Int,
174
+ consentType: Double,
175
175
  promise: Promise
176
176
  ) {
177
177
  promise.resolve(
178
178
  usercentricsProxy.instance.saveDecisionsForTCF(
179
179
  tcfDecisions.deserializeTCFUserDecisions(),
180
- TCFDecisionUILayer.values()[fromLayer],
180
+ TCFDecisionUILayer.values()[fromLayer.toInt()],
181
181
  saveDecisions.deserializeUserDecision(),
182
- UsercentricsConsentType.values()[consentType]
182
+ UsercentricsConsentType.values()[consentType.toInt()]
183
183
  ).toWritableArray()
184
184
  )
185
185
  }
186
186
 
187
187
  @ReactMethod
188
- override fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise) {
188
+ override fun saveDecisions(decisions: ReadableArray, consentType: Double, promise: Promise) {
189
189
  promise.resolve(
190
190
  usercentricsProxy.instance.saveDecisions(
191
- decisions.deserializeUserDecision(), UsercentricsConsentType.values()[consentType]
191
+ decisions.deserializeUserDecision(), UsercentricsConsentType.values()[consentType.toInt()]
192
192
  ).toWritableArray()
193
193
  )
194
194
  }
195
195
 
196
196
  @ReactMethod
197
- override fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Int, promise: Promise) {
197
+ override fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Double, promise: Promise) {
198
198
  promise.resolve(
199
199
  usercentricsProxy.instance.saveOptOutForCCPA(
200
- isOptedOut, UsercentricsConsentType.values()[consentType]
200
+ isOptedOut, UsercentricsConsentType.values()[consentType.toInt()]
201
201
  ).toWritableArray()
202
202
  )
203
203
  }
204
204
 
205
205
  @ReactMethod
206
- override fun track(event: Int) {
207
- usercentricsProxy.instance.track(UsercentricsAnalyticsEventType.values()[event])
206
+ override fun track(event: Double) {
207
+ usercentricsProxy.instance.track(UsercentricsAnalyticsEventType.values()[event.toInt()])
208
208
  }
209
209
 
210
210
  @ReactMethod
@@ -55,7 +55,7 @@ abstract class RNUsercentricsModuleSpec internal constructor(context: ReactAppli
55
55
  abstract fun getABTestingVariant(promise: Promise)
56
56
 
57
57
  @ReactMethod
58
- abstract fun setCMPId(id: Int)
58
+ abstract fun setCMPId(id: Double)
59
59
 
60
60
  @ReactMethod
61
61
  abstract fun setABTestingVariant(variant: String)
@@ -64,34 +64,34 @@ abstract class RNUsercentricsModuleSpec internal constructor(context: ReactAppli
64
64
  abstract fun changeLanguage(language: String, promise: Promise)
65
65
 
66
66
  @ReactMethod
67
- abstract fun acceptAll(consentType: Int, promise: Promise)
67
+ abstract fun acceptAll(consentType: Double, promise: Promise)
68
68
 
69
69
  @ReactMethod
70
- abstract fun acceptAllForTCF(fromLayer: Int, consentType: Int, promise: Promise)
70
+ abstract fun acceptAllForTCF(fromLayer: Double, consentType: Double, promise: Promise)
71
71
 
72
72
  @ReactMethod
73
- abstract fun denyAll(consentType: Int, promise: Promise)
73
+ abstract fun denyAll(consentType: Double, promise: Promise)
74
74
 
75
75
  @ReactMethod
76
- abstract fun denyAllForTCF(fromLayer: Int, consentType: Int, unsavedPurposeLIDecisions: ReadableArray, promise: Promise)
76
+ abstract fun denyAllForTCF(fromLayer: Double, consentType: Double, unsavedPurposeLIDecisions: ReadableArray, promise: Promise)
77
77
 
78
78
  @ReactMethod
79
- abstract fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise)
79
+ abstract fun saveDecisions(decisions: ReadableArray, consentType: Double, promise: Promise)
80
80
 
81
81
  @ReactMethod
82
82
  abstract fun saveDecisionsForTCF(
83
83
  tcfDecisions: ReadableMap,
84
- fromLayer: Int,
84
+ fromLayer: Double,
85
85
  saveDecisions: ReadableArray,
86
- consentType: Int,
86
+ consentType: Double,
87
87
  promise: Promise
88
88
  )
89
89
 
90
90
  @ReactMethod
91
- abstract fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Int, promise: Promise)
91
+ abstract fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Double, promise: Promise)
92
92
 
93
93
  @ReactMethod
94
- abstract fun track(event: Int)
94
+ abstract fun track(event: Double)
95
95
 
96
96
  companion object {
97
97
  const val NAME = "RNUsercentricsModule"
@@ -2,12 +2,23 @@ package com.usercentrics.reactnative.extensions
2
2
 
3
3
  import com.usercentrics.sdk.v2.settings.data.ConsentDisclosure
4
4
  import com.usercentrics.sdk.v2.settings.data.ConsentDisclosureObject
5
+ import com.usercentrics.sdk.v2.settings.data.ConsentDisclosureSDK
5
6
 
6
7
  internal fun ConsentDisclosureObject?.serialize(): Any? {
7
8
  if (this == null) {
8
9
  return null
9
10
  }
10
- return disclosures.map { it.serialize() }
11
+ return mapOf(
12
+ "disclosures" to disclosures.map { it.serialize() },
13
+ "sdks" to sdks.map { it.serialize() }
14
+ )
15
+ }
16
+
17
+ private fun ConsentDisclosureSDK.serialize(): Map<String, Any> {
18
+ return mapOf(
19
+ "name" to name,
20
+ "use" to use
21
+ )
11
22
  }
12
23
 
13
24
  internal fun ConsentDisclosure.serialize(): Any {
@@ -364,7 +364,10 @@ extension UsercentricsService {
364
364
 
365
365
  extension ConsentDisclosureObject {
366
366
  func toDictionary() -> Any {
367
- return self.disclosures.map { $0.toDictionary() }
367
+ return [
368
+ "disclosures": self.disclosures.map { $0.toDictionary() },
369
+ "sdks": self.sdks.map { ["name": $0.name, "use": $0.use] }
370
+ ]
368
371
  }
369
372
  }
370
373
 
@@ -0,0 +1,34 @@
1
+ //
2
+ // RNUsercentricsModule+TurboModule.mm
3
+ // getTurboModule: implementation for RN 0.78+ (New Architecture).
4
+ // RCTTurboModule protocol requires C++ return type (shared_ptr<TurboModule>), hence Obj-C++.
5
+ //
6
+
7
+ #import <React/RCTBridgeModule.h>
8
+
9
+ #if RCT_NEW_ARCH_ENABLED
10
+
11
+ #import <ReactCommon/RCTTurboModule.h>
12
+
13
+ // Header generated by the app's codegen (ReactCodegen pod; path may vary by RN version)
14
+ #if __has_include(<ReactCodegen/RNUsercentricsModule/RNUsercentricsModule.h>)
15
+ #import <ReactCodegen/RNUsercentricsModule/RNUsercentricsModule.h>
16
+ #else
17
+ #import "RNUsercentricsModule/RNUsercentricsModule.h"
18
+ #endif
19
+
20
+ // RNUsercentricsModule is defined in Swift (RNUsercentricsModule.swift).
21
+ // Minimal declaration so the compiler accepts the category; the real implementation is in Swift.
22
+ @interface RNUsercentricsModule : NSObject
23
+ @end
24
+
25
+ @implementation RNUsercentricsModule (TurboModule)
26
+
27
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
28
+ (const facebook::react::ObjCTurboModule::InitParams &)params {
29
+ return std::make_shared<facebook::react::NativeUsercentricsModuleSpecJSI>(params);
30
+ }
31
+
32
+ @end
33
+
34
+ #endif // RCT_NEW_ARCH_ENABLED
@@ -60,47 +60,47 @@ RCT_EXTERN_METHOD(changeLanguage:(NSString *)language
60
60
  resolve:(RCTPromiseResolveBlock)resolve
61
61
  reject:(RCTPromiseRejectBlock)reject)
62
62
 
63
- RCT_EXTERN_METHOD(acceptAllForTCF:(NSInteger *)fromLayer
64
- consentType:(NSInteger)consentType
63
+ RCT_EXTERN_METHOD(acceptAllForTCF:(double)fromLayer
64
+ consentType:(double)consentType
65
65
  resolve:(RCTPromiseResolveBlock)resolve
66
66
  reject:(RCTPromiseRejectBlock)reject)
67
67
 
68
- RCT_EXTERN_METHOD(acceptAll:(NSInteger *)consentType
68
+ RCT_EXTERN_METHOD(acceptAll:(double)consentType
69
69
  resolve:(RCTPromiseResolveBlock)resolve
70
70
  reject:(RCTPromiseRejectBlock)reject)
71
71
 
72
- RCT_EXTERN_METHOD(denyAllForTCF:(NSInteger *)fromLayer
73
- consentType:(NSInteger)consentType
72
+ RCT_EXTERN_METHOD(denyAllForTCF:(double)fromLayer
73
+ consentType:(double)consentType
74
74
  unsavedPurposeLIDecisions:(NSArray)unsavedPurposeLIDecisions
75
75
  resolve:(RCTPromiseResolveBlock)resolve
76
76
  reject:(RCTPromiseRejectBlock)reject)
77
77
 
78
- RCT_EXTERN_METHOD(denyAll:(NSInteger *)consentType
78
+ RCT_EXTERN_METHOD(denyAll:(double)consentType
79
79
  resolve:(RCTPromiseResolveBlock)resolve
80
80
  reject:(RCTPromiseRejectBlock)reject)
81
81
 
82
82
  RCT_EXTERN_METHOD(saveDecisionsForTCF:(NSDictionary *)tcfDecisions
83
- fromLayer:(NSInteger)fromLayer
83
+ fromLayer:(double)fromLayer
84
84
  serviceDecisions:(NSArray)serviceDecisions
85
- consentType:(NSInteger)consentType
85
+ consentType:(double)consentType
86
86
  resolve:(RCTPromiseResolveBlock)resolve
87
87
  reject:(RCTPromiseRejectBlock)reject)
88
88
 
89
89
  RCT_EXTERN_METHOD(saveDecisions:(NSArray)serviceDecisions
90
- consentType:(NSInteger)consentType
90
+ consentType:(double)consentType
91
91
  resolve:(RCTPromiseResolveBlock)resolve
92
92
  reject:(RCTPromiseRejectBlock)reject)
93
93
 
94
94
  RCT_EXTERN_METHOD(saveOptOutForCCPA:(BOOL *)isOptedOut
95
- consentType:(NSInteger)consentType
95
+ consentType:(double)consentType
96
96
  resolve:(RCTPromiseResolveBlock)resolve
97
97
  reject:(RCTPromiseRejectBlock)reject)
98
98
 
99
- RCT_EXTERN_METHOD(setCMPId:(NSInteger *)id)
99
+ RCT_EXTERN_METHOD(setCMPId:(double)id)
100
100
 
101
101
  RCT_EXTERN_METHOD(setABTestingVariant:(NSString *)variant)
102
102
 
103
- RCT_EXTERN_METHOD(track:(NSInteger *)event)
103
+ RCT_EXTERN_METHOD(track:(double)event)
104
104
 
105
105
  RCT_EXTERN_METHOD(clearUserSession:(RCTPromiseResolveBlock)resolve
106
106
  reject:(RCTPromiseRejectBlock)reject)
@@ -5,12 +5,14 @@ import UIKit
5
5
  import React
6
6
 
7
7
  #if RCT_NEW_ARCH_ENABLED
8
- #if canImport(RNUsercentricsModuleSpec)
8
+ #if canImport(ReactCodegen)
9
+ // RN ≥ 0.79: getTurboModule: implemented in RNUsercentricsModule+TurboModule.mm (do not import ReactCodegen in Swift — C++ module)
10
+ #elseif canImport(React_Codegen)
11
+ // RN 0.78
12
+ import React_Codegen
13
+ #elseif canImport(RNUsercentricsModuleSpec)
9
14
  // RN ≤ 0.77
10
15
  import RNUsercentricsModuleSpec
11
- #else
12
- // RN ≥ 0.78
13
- import React_Codegen
14
16
  #endif
15
17
  #endif
16
18
 
@@ -81,7 +83,7 @@ class RNUsercentricsModule: NSObject {
81
83
  }
82
84
  }
83
85
 
84
- @objc func setCMPId(_ id: Int) -> Void {
86
+ @objc func setCMPId(_ id: Double) -> Void {
85
87
  usercentricsManager.setCMPId(id: Int32(id))
86
88
  }
87
89
 
@@ -139,24 +141,24 @@ class RNUsercentricsModule: NSObject {
139
141
  }
140
142
  }
141
143
 
142
- @objc func acceptAllForTCF(_ fromLayer: Int,
143
- consentType: Int,
144
+ @objc func acceptAllForTCF(_ fromLayer: Double,
145
+ consentType: Double,
144
146
  resolve: @escaping RCTPromiseResolveBlock,
145
147
  reject: @escaping RCTPromiseRejectBlock) -> Void {
146
- let services = usercentricsManager.acceptAllForTCF(fromLayer: TCFDecisionUILayer.initialize(from: fromLayer),
147
- consentType: UsercentricsConsentType.initialize(from: consentType))
148
+ let services = usercentricsManager.acceptAllForTCF(fromLayer: TCFDecisionUILayer.initialize(from: Int(fromLayer)),
149
+ consentType: UsercentricsConsentType.initialize(from: Int(consentType)))
148
150
  resolve(services.toListOfDictionary())
149
151
  }
150
152
 
151
- @objc func acceptAll(_ consentType: Int,
153
+ @objc func acceptAll(_ consentType: Double,
152
154
  resolve: @escaping RCTPromiseResolveBlock,
153
155
  reject: @escaping RCTPromiseRejectBlock) -> Void {
154
- let services = usercentricsManager.acceptAll(consentType: UsercentricsConsentType.initialize(from: consentType))
156
+ let services = usercentricsManager.acceptAll(consentType: UsercentricsConsentType.initialize(from: Int(consentType)))
155
157
  resolve(services.toListOfDictionary())
156
158
  }
157
159
 
158
- @objc func denyAllForTCF(_ fromLayer: Int,
159
- consentType: Int,
160
+ @objc func denyAllForTCF(_ fromLayer: Double,
161
+ consentType: Double,
160
162
  unsavedPurposeLIDecisions: [NSDictionary],
161
163
  resolve: @escaping RCTPromiseResolveBlock,
162
164
  reject: @escaping RCTPromiseRejectBlock) -> Void {
@@ -170,51 +172,51 @@ class RNUsercentricsModule: NSObject {
170
172
  }
171
173
  }
172
174
  }
173
- let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: fromLayer), consentType: .initialize(from: consentType), unsavedPurposeLIDecisions: decisions)
175
+ let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: Int(fromLayer)), consentType: .initialize(from: Int(consentType)), unsavedPurposeLIDecisions: decisions)
174
176
  resolve(services.toListOfDictionary())
175
177
  }
176
178
 
177
- @objc func denyAll(_ consentType: Int,
179
+ @objc func denyAll(_ consentType: Double,
178
180
  resolve: @escaping RCTPromiseResolveBlock,
179
181
  reject: @escaping RCTPromiseRejectBlock) -> Void {
180
- let services = usercentricsManager.denyAll(consentType: .initialize(from: consentType))
182
+ let services = usercentricsManager.denyAll(consentType: .initialize(from: Int(consentType)))
181
183
  resolve(services.toListOfDictionary())
182
184
  }
183
185
 
184
186
  @objc func saveDecisionsForTCF(_ tcfDecisions: NSDictionary,
185
- fromLayer: Int,
187
+ fromLayer: Double,
186
188
  serviceDecisions: [NSDictionary],
187
- consentType: Int,
189
+ consentType: Double,
188
190
  resolve: @escaping RCTPromiseResolveBlock,
189
191
  reject: @escaping RCTPromiseRejectBlock) -> Void {
190
192
 
191
193
  let services = usercentricsManager.saveDecisionsForTCF(
192
194
  tcfDecisions: TCFUserDecisions(from: tcfDecisions),
193
- fromLayer: .initialize(from: fromLayer),
195
+ fromLayer: .initialize(from: Int(fromLayer)),
194
196
  serviceDecisions: serviceDecisions.compactMap { UserDecision(from: $0) },
195
- consentType: .initialize(from: consentType))
197
+ consentType: .initialize(from: Int(consentType)))
196
198
  resolve(services.toListOfDictionary())
197
199
 
198
200
  }
199
201
 
200
202
  @objc func saveDecisions(_ decisions: [NSDictionary],
201
- consentType: Int,
203
+ consentType: Double,
202
204
  resolve: @escaping RCTPromiseResolveBlock,
203
205
  reject: @escaping RCTPromiseRejectBlock) -> Void {
204
- let services = usercentricsManager.saveDecisions(decisions: decisions.compactMap { UserDecision.init(from: $0) }, consentType: .initialize(from: consentType))
206
+ let services = usercentricsManager.saveDecisions(decisions: decisions.compactMap { UserDecision.init(from: $0) }, consentType: .initialize(from: Int(consentType)))
205
207
  resolve(services.toListOfDictionary())
206
208
  }
207
209
 
208
210
  @objc func saveOptOutForCCPA(_ isOptedOut: Bool,
209
- consentType: Int,
211
+ consentType: Double,
210
212
  resolve: @escaping RCTPromiseResolveBlock,
211
213
  reject: @escaping RCTPromiseRejectBlock) -> Void {
212
- let services = usercentricsManager.saveOptOutForCCPA(isOptedOut: isOptedOut, consentType: .initialize(from: consentType))
214
+ let services = usercentricsManager.saveOptOutForCCPA(isOptedOut: isOptedOut, consentType: .initialize(from: Int(consentType)))
213
215
  resolve(services.toListOfDictionary())
214
216
  }
215
217
 
216
- @objc func track(_ event: Int) -> Void {
217
- guard let usercentricsAnalyticsEventType = UsercentricsAnalyticsEventType.initialize(from: event) else { return }
218
+ @objc func track(_ event: Double) -> Void {
219
+ guard let usercentricsAnalyticsEventType = UsercentricsAnalyticsEventType.initialize(from: Int(event)) else { return }
218
220
  usercentricsManager.track(event: usercentricsAnalyticsEventType)
219
221
  }
220
222
 
@@ -229,13 +231,21 @@ class RNUsercentricsModule: NSObject {
229
231
 
230
232
  // MARK: - RCTBridgeModule & TurboModule Conformance
231
233
  #if RCT_NEW_ARCH_ENABLED
234
+ #if canImport(React_Codegen)
235
+ // RN 0.78: codegen-generated protocol
236
+ extension RNUsercentricsModule: NativeUsercentricsModuleSpec {
237
+ func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
238
+ return self
239
+ }
240
+ }
241
+ #elseif canImport(RNUsercentricsModuleSpec)
242
+ // RN ≤ 0.77
232
243
  extension RNUsercentricsModule: NativeUsercentricsSpec {
233
244
  func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
234
245
  return self
235
246
  }
236
247
  }
248
+ #endif
237
249
  #else
238
- extension RNUsercentricsModule: RCTBridgeModule {
239
-
240
- }
250
+ extension RNUsercentricsModule: RCTBridgeModule {}
241
251
  #endif
@@ -52,51 +52,51 @@ NS_ASSUME_NONNULL_BEGIN
52
52
  reject:(RCTPromiseRejectBlock)reject;
53
53
 
54
54
  // Configuration Setters
55
- - (void)setCMPId:(NSInteger)cmpId;
55
+ - (void)setCMPId:(double)cmpId;
56
56
  - (void)setABTestingVariant:(NSString *)variant;
57
57
  - (void)changeLanguage:(NSString *)language
58
58
  resolve:(RCTPromiseResolveBlock)resolve
59
59
  reject:(RCTPromiseRejectBlock)reject;
60
60
 
61
61
  // Consent Actions
62
- - (void)acceptAll:(NSInteger)consentType
62
+ - (void)acceptAll:(double)consentType
63
63
  resolve:(RCTPromiseResolveBlock)resolve
64
64
  reject:(RCTPromiseRejectBlock)reject;
65
65
 
66
- - (void)acceptAllForTCF:(NSInteger)fromLayer
67
- consentType:(NSInteger)consentType
66
+ - (void)acceptAllForTCF:(double)fromLayer
67
+ consentType:(double)consentType
68
68
  resolve:(RCTPromiseResolveBlock)resolve
69
69
  reject:(RCTPromiseRejectBlock)reject;
70
70
 
71
- - (void)denyAll:(NSInteger)consentType
71
+ - (void)denyAll:(double)consentType
72
72
  resolve:(RCTPromiseResolveBlock)resolve
73
73
  reject:(RCTPromiseRejectBlock)reject;
74
74
 
75
- - (void)denyAllForTCF:(NSInteger)fromLayer
76
- consentType:(NSInteger)consentType
75
+ - (void)denyAllForTCF:(double)fromLayer
76
+ consentType:(double)consentType
77
77
  unsavedPurposeLIDecisions:(NSArray<NSDictionary *> *)unsavedPurposeLIDecisions
78
78
  resolve:(RCTPromiseResolveBlock)resolve
79
79
  reject:(RCTPromiseRejectBlock)reject;
80
80
 
81
81
  - (void)saveDecisions:(NSArray<NSDictionary *> *)decisions
82
- consentType:(NSInteger)consentType
82
+ consentType:(double)consentType
83
83
  resolve:(RCTPromiseResolveBlock)resolve
84
84
  reject:(RCTPromiseRejectBlock)reject;
85
85
 
86
86
  - (void)saveDecisionsForTCF:(NSDictionary *)tcfDecisions
87
- fromLayer:(NSInteger)fromLayer
87
+ fromLayer:(double)fromLayer
88
88
  saveDecisions:(NSArray<NSDictionary *> *)saveDecisions
89
- consentType:(NSInteger)consentType
89
+ consentType:(double)consentType
90
90
  resolve:(RCTPromiseResolveBlock)resolve
91
91
  reject:(RCTPromiseRejectBlock)reject;
92
92
 
93
93
  - (void)saveOptOutForCCPA:(BOOL)isOptedOut
94
- consentType:(NSInteger)consentType
94
+ consentType:(double)consentType
95
95
  resolve:(RCTPromiseResolveBlock)resolve
96
96
  reject:(RCTPromiseRejectBlock)reject;
97
97
 
98
98
  // Analytics
99
- - (void)track:(NSInteger)event;
99
+ - (void)track:(double)event;
100
100
 
101
101
  @end
102
102
 
@@ -1,6 +1,12 @@
1
+ export declare class ConsentDisclosureSDK {
2
+ name: string;
3
+ use: string;
4
+ constructor(name: string, use: string);
5
+ }
1
6
  export declare class ConsentDisclosureObject {
2
7
  disclosures: [ConsentDisclosure];
3
- constructor(disclosures: [ConsentDisclosure]);
8
+ sdks: ConsentDisclosureSDK[];
9
+ constructor(disclosures: [ConsentDisclosure], sdks?: ConsentDisclosureSDK[]);
4
10
  }
5
11
  export declare class ConsentDisclosure {
6
12
  identifier?: string;
@@ -1,6 +1,13 @@
1
+ export class ConsentDisclosureSDK {
2
+ constructor(name, use) {
3
+ this.name = name;
4
+ this.use = use;
5
+ }
6
+ }
1
7
  export class ConsentDisclosureObject {
2
- constructor(disclosures) {
8
+ constructor(disclosures, sdks) {
3
9
  this.disclosures = disclosures;
10
+ this.sdks = sdks !== null && sdks !== void 0 ? sdks : [];
4
11
  }
5
12
  }
6
13
  export class ConsentDisclosure {
@@ -1 +1 @@
1
- {"version":3,"file":"ConsentDisclosureObject.js","sourceRoot":"","sources":["../../src/models/ConsentDisclosureObject.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAAuB;IAIhC,YAAY,WAAgC;QACxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;CACJ;AAED,MAAM,OAAO,iBAAiB;IAW1B,YACI,aAAsB,EACtB,QAAkB,EAClB,UAAmB,EACnB,IAA4B,EAC5B,IAAa,EACb,aAAsB,EACtB,MAAe,EACf,WAAoB;QAEpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;CACJ;AAED,MAAM,CAAN,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAE7B,qEAAU,CAAA;IACV,+DAAO,CAAA;IACP,+DAAO,CAAA;AACX,CAAC,EALW,qBAAqB,KAArB,qBAAqB,QAKhC"}
1
+ {"version":3,"file":"ConsentDisclosureObject.js","sourceRoot":"","sources":["../../src/models/ConsentDisclosureObject.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;IAI7B,YAAY,IAAY,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;CACJ;AAED,MAAM,OAAO,uBAAuB;IAKhC,YAAY,WAAgC,EAAE,IAA6B;QACvE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAA;IAC1B,CAAC;CACJ;AAED,MAAM,OAAO,iBAAiB;IAW1B,YACI,aAAsB,EACtB,QAAkB,EAClB,UAAmB,EACnB,IAA4B,EAC5B,IAAa,EACb,aAAsB,EACtB,MAAe,EACf,WAAoB;QAEpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;CACJ;AAED,MAAM,CAAN,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAE7B,qEAAU,CAAA;IACV,+DAAO,CAAA;IACP,+DAAO,CAAA;AACX,CAAC,EALW,qBAAqB,KAArB,qBAAqB,QAKhC"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@usercentrics/react-native-sdk",
3
- "version": "2.24.4",
3
+ "version": "2.25.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.24.4",
10
+ "iosPackageVersion": "2.25.1",
11
11
  "license": "SEE LICENSE IN LICENSE",
12
12
  "files": [
13
13
  "android",
@@ -78,6 +78,16 @@
78
78
  "jsx",
79
79
  "json",
80
80
  "node"
81
+ ],
82
+ "collectCoverage": true,
83
+ "collectCoverageFrom": [
84
+ "src/**/*.{ts,tsx}",
85
+ "!src/**/*.d.ts"
86
+ ],
87
+ "coverageDirectory": "coverage",
88
+ "coverageReporters": [
89
+ "text",
90
+ "lcov"
81
91
  ]
82
92
  },
83
93
  "directories": {
@@ -12,7 +12,6 @@ Pod::Spec.new do |s|
12
12
  s.homepage = package['homepage']
13
13
  s.platform = :ios, "11.0"
14
14
 
15
- # Use apenas o path local para desenvolvimento
16
15
  s.source = { :path => '.' }
17
16
 
18
17
  s.source_files = 'ios/**/*.{h,m,mm,swift}'
@@ -21,9 +20,12 @@ Pod::Spec.new do |s|
21
20
  s.dependency 'React-NativeModulesApple'
22
21
  s.dependency 'UsercentricsUI', "#{package['iosPackageVersion']}"
23
22
 
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
23
+ # Required for TurboModules RN 0.78+: injects codegen dependencies (ReactCodegen, etc.)
24
+ if defined?(install_modules_dependencies)
25
+ install_modules_dependencies(s)
26
+ end
27
+
28
+ # C++ configuration (compatible with Expo prebuild and New Architecture)
27
29
  base_cpp_flags = {
28
30
  'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20',
29
31
  'CLANG_CXX_LIBRARY' => 'libc++',
@@ -50,14 +52,6 @@ Pod::Spec.new do |s|
50
52
  '$(PODS_ROOT)/Headers/Public/ReactCommon'
51
53
  ]
52
54
 
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
55
  base_cpp_flags['HEADER_SEARCH_PATHS'] = header_search_paths.map { |path| "\"#{path}\"" }.join(' ')
62
56
 
63
57
  # Preprocessor definitions - inherit RCT_NEW_ARCH_ENABLED from parent project
@@ -268,7 +268,8 @@ const disclosure: ConsentDisclosure = {
268
268
  }
269
269
 
270
270
  const consentDisclosureObject: ConsentDisclosureObject = {
271
- disclosures: [disclosure]
271
+ disclosures: [disclosure],
272
+ sdks: [],
272
273
  }
273
274
 
274
275
  const ucService: UsercentricsService = {
@@ -1,9 +1,21 @@
1
+ export class ConsentDisclosureSDK {
2
+ name: string
3
+ use: string
4
+
5
+ constructor(name: string, use: string) {
6
+ this.name = name
7
+ this.use = use
8
+ }
9
+ }
10
+
1
11
  export class ConsentDisclosureObject {
2
12
 
3
13
  disclosures: [ConsentDisclosure]
14
+ sdks: ConsentDisclosureSDK[]
4
15
 
5
- constructor(disclosures: [ConsentDisclosure]) {
16
+ constructor(disclosures: [ConsentDisclosure], sdks?: ConsentDisclosureSDK[]) {
6
17
  this.disclosures = disclosures
18
+ this.sdks = sdks ?? []
7
19
  }
8
20
  }
9
21