@usercentrics/react-native-sdk 2.25.0 → 2.26.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/android/build-legacy.gradle +1 -1
- package/android/build.gradle.kts +1 -1
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt +102 -2
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +19 -1
- package/android/src/main/java/com/usercentrics/reactnative/extensions/BannerSettingsExtensions.kt +2 -1
- package/android/src/main/java/com/usercentrics/reactnative/extensions/GppDataExtensions.kt +83 -0
- package/android/src/main/java/com/usercentrics/reactnative/extensions/UserDecisionExtensions.kt +2 -1
- package/android/src/main/java/com/usercentrics/reactnative/extensions/UsercentricsCMPDataExtensions.kt +44 -2
- package/android/src/test/java/com/usercentrics/reactnative/extensions/NullabilityTest.kt +189 -0
- package/ios/Extensions/GppData+Dict.swift +45 -0
- package/ios/Extensions/GppSectionChangePayload+Dict.swift +10 -0
- package/ios/Extensions/UIImage+UsercentricsLogoDict.swift +31 -6
- package/ios/Extensions/UsercentricsCMPData+Dict.swift +6 -2
- package/ios/Manager/UsercentricsManager.swift +28 -3
- package/ios/RNUsercentricsModule+TurboModule.mm +34 -0
- package/ios/RNUsercentricsModule.mm +11 -7
- package/ios/RNUsercentricsModule.swift +72 -21
- package/ios/RNUsercentricsModuleSpec.h +13 -0
- package/lib/NativeUsercentrics.d.ts +8 -2
- package/lib/NativeUsercentrics.js.map +1 -1
- package/lib/Usercentrics.d.ts +8 -2
- package/lib/Usercentrics.js +23 -3
- package/lib/Usercentrics.js.map +1 -1
- package/lib/fabric/NativeUsercentricsModule.d.ts +7 -1
- package/lib/fabric/NativeUsercentricsModule.js.map +1 -1
- package/lib/models/CCPASettings.d.ts +3 -1
- package/lib/models/CCPASettings.js +3 -1
- package/lib/models/CCPASettings.js.map +1 -1
- package/lib/models/GppData.d.ts +6 -0
- package/lib/models/GppData.js +8 -0
- package/lib/models/GppData.js.map +1 -0
- package/lib/models/GppSectionChangePayload.d.ts +4 -0
- package/lib/models/GppSectionChangePayload.js +6 -0
- package/lib/models/GppSectionChangePayload.js.map +1 -0
- package/lib/models/TCF2Settings.d.ts +2 -2
- package/lib/models/TCF2Settings.js +2 -2
- package/lib/models/TCF2Settings.js.map +1 -1
- package/lib/models/UsercentricsSettings.d.ts +3 -1
- package/lib/models/UsercentricsSettings.js +3 -1
- package/lib/models/UsercentricsSettings.js.map +1 -1
- package/lib/models/index.d.ts +2 -0
- package/lib/models/index.js +2 -0
- package/lib/models/index.js.map +1 -1
- package/package.json +2 -2
- package/react-native-usercentrics.podspec +6 -12
- package/src/NativeUsercentrics.ts +10 -1
- package/src/Usercentrics.tsx +31 -3
- package/src/__tests__/index.test.ts +66 -1
- package/src/__tests__/mocks.ts +17 -1
- package/src/fabric/NativeUsercentricsModule.ts +8 -1
- package/src/models/CCPASettings.tsx +7 -1
- package/src/models/GppData.tsx +15 -0
- package/src/models/GppSectionChangePayload.tsx +7 -0
- package/src/models/TCF2Settings.tsx +3 -3
- package/src/models/UsercentricsSettings.tsx +6 -0
- package/src/models/index.tsx +2 -0
|
@@ -3,13 +3,38 @@ import UIKit
|
|
|
3
3
|
|
|
4
4
|
extension UIImage {
|
|
5
5
|
convenience init?(from dictionary: NSDictionary?) {
|
|
6
|
-
guard
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
guard let dictionary = dictionary else { return nil }
|
|
7
|
+
|
|
8
|
+
if let logoPath = dictionary["logoPath"] as? String, !logoPath.isEmpty,
|
|
9
|
+
let image = Self.image(fromLogoPath: logoPath),
|
|
10
|
+
let cgImage = image.cgImage {
|
|
11
|
+
self.init(cgImage: cgImage, scale: image.scale, orientation: image.imageOrientation)
|
|
12
|
+
return
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if let logoName = dictionary["logoName"] as? String, !logoName.isEmpty {
|
|
16
|
+
self.init(named: logoName)
|
|
17
|
+
return
|
|
11
18
|
}
|
|
12
19
|
|
|
13
|
-
|
|
20
|
+
return nil
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private static func image(fromLogoPath logoPath: String) -> UIImage? {
|
|
24
|
+
if logoPath.hasPrefix("file://") {
|
|
25
|
+
let path = logoPath.replacingOccurrences(of: "file://", with: "")
|
|
26
|
+
if let image = UIImage(contentsOfFile: path) { return image }
|
|
27
|
+
}
|
|
28
|
+
else if logoPath.hasPrefix("/") {
|
|
29
|
+
if let image = UIImage(contentsOfFile: logoPath) { return image }
|
|
30
|
+
}
|
|
31
|
+
else if logoPath.hasPrefix("http://") || logoPath.hasPrefix("https://"),
|
|
32
|
+
let url = URL(string: logoPath),
|
|
33
|
+
let data = try? Data(contentsOf: url),
|
|
34
|
+
let image = UIImage(data: data) {
|
|
35
|
+
return image
|
|
36
|
+
}
|
|
37
|
+
if let image = UIImage(named: logoPath) { return image }
|
|
38
|
+
return nil
|
|
14
39
|
}
|
|
15
40
|
}
|
|
@@ -45,6 +45,8 @@ extension UsercentricsSettings {
|
|
|
45
45
|
"publishedApps": (self.publishedApps?.map { $0.toDictionary() } ?? nil) as Any,
|
|
46
46
|
"renewConsentsTimestamp": self.renewConsentsTimestamp as Any,
|
|
47
47
|
"consentWebhook": self.consentWebhook as Any,
|
|
48
|
+
"gppSignalingEnabled": self.gppSignalingEnabled,
|
|
49
|
+
"gpcSignalHonoured": self.gpcSignalHonoured,
|
|
48
50
|
]
|
|
49
51
|
}
|
|
50
52
|
}
|
|
@@ -164,6 +166,8 @@ extension CCPASettings {
|
|
|
164
166
|
"secondLayerDescription" : self.secondLayerDescription as Any,
|
|
165
167
|
"secondLayerHideLanguageSwitch" : self.secondLayerHideLanguageSwitch,
|
|
166
168
|
"btnMoreInfo" : self.btnMoreInfo as Any,
|
|
169
|
+
"mspaCoveredTransaction" : self.mspaCoveredTransaction,
|
|
170
|
+
"mspaMode" : self.mspaMode?.ordinal as Any,
|
|
167
171
|
]
|
|
168
172
|
}
|
|
169
173
|
}
|
|
@@ -208,7 +212,6 @@ extension TCF2Settings {
|
|
|
208
212
|
"disabledSpecialFeatures" : self.disabledSpecialFeatures,
|
|
209
213
|
"firstLayerShowDescriptions" : self.firstLayerShowDescriptions,
|
|
210
214
|
"hideNonIabOnFirstLayer" : self.hideNonIabOnFirstLayer,
|
|
211
|
-
"resurfacePeriodEnded" : self.resurfacePeriodEnded,
|
|
212
215
|
"resurfacePurposeChanged" : self.resurfacePurposeChanged,
|
|
213
216
|
"resurfaceVendorAdded" : self.resurfaceVendorAdded,
|
|
214
217
|
"firstLayerDescription" : self.firstLayerDescription as Any,
|
|
@@ -231,7 +234,8 @@ extension TCF2Settings {
|
|
|
231
234
|
"scope": self.scope.ordinal,
|
|
232
235
|
"changedPurposes": self.changedPurposes?.toDictionary() as Any,
|
|
233
236
|
"acmV2Enabled": self.acmV2Enabled,
|
|
234
|
-
"selectedATPIds": self.selectedATPIds
|
|
237
|
+
"selectedATPIds": self.selectedATPIds,
|
|
238
|
+
"resurfacePeriod": self.resurfacePeriod,
|
|
235
239
|
]
|
|
236
240
|
}
|
|
237
241
|
}
|
|
@@ -19,16 +19,21 @@ public protocol UsercentricsManager {
|
|
|
19
19
|
func getCMPData() -> UsercentricsCMPData
|
|
20
20
|
func getUserSessionData() -> String
|
|
21
21
|
func getUSPData() -> CCPAData
|
|
22
|
+
func getGPPData() -> GppData
|
|
23
|
+
func getGPPString() -> String?
|
|
24
|
+
func setGPPConsent(sectionName: String, fieldName: String, value: Any)
|
|
22
25
|
func getTCFData(callback: @escaping (TCFData) -> Void)
|
|
23
26
|
func getABTestingVariant() -> String?
|
|
27
|
+
func getDpsMetadata(templateId: String) -> [String: Any]?
|
|
24
28
|
func getAdditionalConsentModeData() -> AdditionalConsentModeData
|
|
29
|
+
func onGppSectionChange(callback: @escaping (GppSectionChangePayload) -> Void) -> UsercentricsDisposableEvent<GppSectionChangePayload>
|
|
25
30
|
|
|
26
31
|
func changeLanguage(language: String, onSuccess: @escaping (() -> Void), onFailure: @escaping ((Error) -> Void))
|
|
27
32
|
|
|
28
33
|
func acceptAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
|
|
29
34
|
func acceptAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
|
|
30
35
|
|
|
31
|
-
func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent]
|
|
36
|
+
func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?, unsavedVendorLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent]
|
|
32
37
|
func denyAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
|
|
33
38
|
|
|
34
39
|
func saveDecisionsForTCF(tcfDecisions: TCFUserDecisions,
|
|
@@ -92,10 +97,30 @@ final class UsercentricsManagerImplementation: UsercentricsManager {
|
|
|
92
97
|
return UsercentricsCore.shared.getUSPData()
|
|
93
98
|
}
|
|
94
99
|
|
|
100
|
+
func getGPPData() -> GppData {
|
|
101
|
+
return UsercentricsCore.shared.getGPPData()
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
func getGPPString() -> String? {
|
|
105
|
+
return UsercentricsCore.shared.getGPPString()
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func setGPPConsent(sectionName: String, fieldName: String, value: Any) {
|
|
109
|
+
UsercentricsCore.shared.setGPPConsent(sectionName: sectionName, fieldName: fieldName, value: value)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
func onGppSectionChange(callback: @escaping (GppSectionChangePayload) -> Void) -> UsercentricsDisposableEvent<GppSectionChangePayload> {
|
|
113
|
+
return UsercentricsEvent.shared.onGppSectionChange(callback: callback)
|
|
114
|
+
}
|
|
115
|
+
|
|
95
116
|
func getTCFData(callback: @escaping (TCFData) -> Void) {
|
|
96
117
|
UsercentricsCore.shared.getTCFData(callback: callback)
|
|
97
118
|
}
|
|
98
119
|
|
|
120
|
+
func getDpsMetadata(templateId: String) -> [String: Any]? {
|
|
121
|
+
return UsercentricsCore.shared.getDpsMetadata(templateId: templateId)
|
|
122
|
+
}
|
|
123
|
+
|
|
99
124
|
func getAdditionalConsentModeData() -> AdditionalConsentModeData {
|
|
100
125
|
return UsercentricsCore.shared.getAdditionalConsentModeData()
|
|
101
126
|
}
|
|
@@ -112,8 +137,8 @@ final class UsercentricsManagerImplementation: UsercentricsManager {
|
|
|
112
137
|
return UsercentricsCore.shared.acceptAll(consentType: consentType)
|
|
113
138
|
}
|
|
114
139
|
|
|
115
|
-
func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent] {
|
|
116
|
-
return UsercentricsCore.shared.denyAllForTCF(fromLayer: fromLayer, consentType: consentType, unsavedPurposeLIDecisions: unsavedPurposeLIDecisions)
|
|
140
|
+
func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?, unsavedVendorLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent] {
|
|
141
|
+
return UsercentricsCore.shared.denyAllForTCF(fromLayer: fromLayer, consentType: consentType, unsavedPurposeLIDecisions: unsavedPurposeLIDecisions, unsavedVendorLIDecisions: unsavedVendorLIDecisions)
|
|
117
142
|
}
|
|
118
143
|
|
|
119
144
|
func denyAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent] {
|
|
@@ -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
|
|
@@ -10,10 +10,6 @@
|
|
|
10
10
|
@interface RCT_EXTERN_MODULE(RNUsercentricsModule, NSObject)
|
|
11
11
|
RCT_EXTERN_METHOD(configure:(NSDictionary *)dict)
|
|
12
12
|
|
|
13
|
-
RCT_EXTERN_METHOD(showCMP:(NSDictionary *)dict
|
|
14
|
-
resolve:(RCTPromiseResolveBlock)resolve
|
|
15
|
-
reject:(RCTPromiseRejectBlock)reject)
|
|
16
|
-
|
|
17
13
|
RCT_EXTERN_METHOD(showFirstLayer:(NSDictionary *)dict
|
|
18
14
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
19
15
|
reject:(RCTPromiseRejectBlock)reject)
|
|
@@ -29,9 +25,6 @@ RCT_EXTERN_METHOD(restoreUserSession:(NSString *)controllerId
|
|
|
29
25
|
RCT_EXTERN_METHOD(isReady:(RCTPromiseResolveBlock)resolve
|
|
30
26
|
reject:(RCTPromiseRejectBlock)reject)
|
|
31
27
|
|
|
32
|
-
RCT_EXTERN_METHOD(getTCFString:(RCTPromiseResolveBlock)resolve
|
|
33
|
-
reject:(RCTPromiseRejectBlock)reject)
|
|
34
|
-
|
|
35
28
|
RCT_EXTERN_METHOD(getControllerId:(RCTPromiseResolveBlock)resolve
|
|
36
29
|
reject:(RCTPromiseRejectBlock)reject)
|
|
37
30
|
|
|
@@ -50,6 +43,12 @@ RCT_EXTERN_METHOD(getUserSessionData:(RCTPromiseResolveBlock)resolve
|
|
|
50
43
|
RCT_EXTERN_METHOD(getUSPData:(RCTPromiseResolveBlock)resolve
|
|
51
44
|
reject:(RCTPromiseRejectBlock)reject)
|
|
52
45
|
|
|
46
|
+
RCT_EXTERN_METHOD(getGPPData:(RCTPromiseResolveBlock)resolve
|
|
47
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
48
|
+
|
|
49
|
+
RCT_EXTERN_METHOD(getGPPString:(RCTPromiseResolveBlock)resolve
|
|
50
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
51
|
+
|
|
53
52
|
RCT_EXTERN_METHOD(getTCFData:(RCTPromiseResolveBlock)resolve
|
|
54
53
|
reject:(RCTPromiseRejectBlock)reject)
|
|
55
54
|
|
|
@@ -72,6 +71,7 @@ RCT_EXTERN_METHOD(acceptAll:(double)consentType
|
|
|
72
71
|
RCT_EXTERN_METHOD(denyAllForTCF:(double)fromLayer
|
|
73
72
|
consentType:(double)consentType
|
|
74
73
|
unsavedPurposeLIDecisions:(NSArray)unsavedPurposeLIDecisions
|
|
74
|
+
unsavedVendorLIDecisions:(NSArray)unsavedVendorLIDecisions
|
|
75
75
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
76
76
|
reject:(RCTPromiseRejectBlock)reject)
|
|
77
77
|
|
|
@@ -100,6 +100,10 @@ RCT_EXTERN_METHOD(setCMPId:(double)id)
|
|
|
100
100
|
|
|
101
101
|
RCT_EXTERN_METHOD(setABTestingVariant:(NSString *)variant)
|
|
102
102
|
|
|
103
|
+
RCT_EXTERN_METHOD(setGPPConsent:(NSString *)sectionName
|
|
104
|
+
fieldName:(NSString *)fieldName
|
|
105
|
+
value:(NSDictionary *)value)
|
|
106
|
+
|
|
103
107
|
RCT_EXTERN_METHOD(track:(double)event)
|
|
104
108
|
|
|
105
109
|
RCT_EXTERN_METHOD(clearUserSession:(RCTPromiseResolveBlock)resolve
|
|
@@ -5,28 +5,47 @@ import UIKit
|
|
|
5
5
|
import React
|
|
6
6
|
|
|
7
7
|
#if RCT_NEW_ARCH_ENABLED
|
|
8
|
-
#if canImport(
|
|
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
|
|
|
17
19
|
@objc(RNUsercentricsModule)
|
|
18
|
-
class RNUsercentricsModule:
|
|
20
|
+
class RNUsercentricsModule: RCTEventEmitter {
|
|
19
21
|
|
|
20
22
|
var usercentricsManager: UsercentricsManager = UsercentricsManagerImplementation()
|
|
21
23
|
var queue: DispatchQueueManager = DispatchQueue.main
|
|
24
|
+
private var gppSectionChangeSubscription: UsercentricsDisposableEvent<GppSectionChangePayload>?
|
|
22
25
|
|
|
23
|
-
@objc static func moduleName() -> String! {
|
|
26
|
+
@objc override static func moduleName() -> String! {
|
|
24
27
|
return "RNUsercentricsModule"
|
|
25
28
|
}
|
|
26
29
|
|
|
27
|
-
@objc static func requiresMainQueueSetup() -> Bool {
|
|
30
|
+
@objc override static func requiresMainQueueSetup() -> Bool {
|
|
28
31
|
return true
|
|
29
32
|
}
|
|
33
|
+
|
|
34
|
+
override func supportedEvents() -> [String]! {
|
|
35
|
+
return [Self.onGppSectionChangeEvent]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override func startObserving() {
|
|
39
|
+
guard gppSectionChangeSubscription == nil else { return }
|
|
40
|
+
gppSectionChangeSubscription = usercentricsManager.onGppSectionChange { [weak self] payload in
|
|
41
|
+
self?.sendEvent(withName: Self.onGppSectionChangeEvent, body: payload.toDictionary())
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
override func stopObserving() {
|
|
46
|
+
gppSectionChangeSubscription?.dispose()
|
|
47
|
+
gppSectionChangeSubscription = nil
|
|
48
|
+
}
|
|
30
49
|
|
|
31
50
|
@objc func configure(_ dict: NSDictionary) -> Void {
|
|
32
51
|
queue.async { [weak self] in
|
|
@@ -123,10 +142,28 @@ class RNUsercentricsModule: NSObject {
|
|
|
123
142
|
resolve(usercentricsManager.getUSPData().toDictionary())
|
|
124
143
|
}
|
|
125
144
|
|
|
145
|
+
@objc func getGPPData(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
146
|
+
resolve(usercentricsManager.getGPPData().toDictionary())
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@objc func getGPPString(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
150
|
+
resolve(usercentricsManager.getGPPString())
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@objc func setGPPConsent(_ sectionName: String, fieldName: String, value: NSDictionary) -> Void {
|
|
154
|
+
let unwrapped = value["value"] ?? NSNull()
|
|
155
|
+
usercentricsManager.setGPPConsent(sectionName: sectionName, fieldName: fieldName, value: unwrapped)
|
|
156
|
+
}
|
|
157
|
+
|
|
126
158
|
@objc func getABTestingVariant(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
127
159
|
resolve(usercentricsManager.getABTestingVariant())
|
|
128
160
|
}
|
|
129
161
|
|
|
162
|
+
@objc func getDpsMetadata(_ templateId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
163
|
+
let metadata = usercentricsManager.getDpsMetadata(templateId: templateId)
|
|
164
|
+
resolve(metadata as NSDictionary?)
|
|
165
|
+
}
|
|
166
|
+
|
|
130
167
|
@objc func getAdditionalConsentModeData(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
131
168
|
resolve(usercentricsManager.getAdditionalConsentModeData().toDictionary())
|
|
132
169
|
}
|
|
@@ -158,20 +195,26 @@ class RNUsercentricsModule: NSObject {
|
|
|
158
195
|
@objc func denyAllForTCF(_ fromLayer: Double,
|
|
159
196
|
consentType: Double,
|
|
160
197
|
unsavedPurposeLIDecisions: [NSDictionary],
|
|
198
|
+
unsavedVendorLIDecisions: [NSDictionary],
|
|
161
199
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
162
200
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
201
|
+
let services = usercentricsManager.denyAllForTCF(
|
|
202
|
+
fromLayer: .initialize(from: Int(fromLayer)),
|
|
203
|
+
consentType: .initialize(from: Int(consentType)),
|
|
204
|
+
unsavedPurposeLIDecisions: extractLIDecisionsMap(unsavedPurposeLIDecisions),
|
|
205
|
+
unsavedVendorLIDecisions: extractLIDecisionsMap(unsavedVendorLIDecisions)
|
|
206
|
+
)
|
|
207
|
+
resolve(services.toListOfDictionary())
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private func extractLIDecisionsMap(_ decisions: [NSDictionary]) -> [KotlinInt: KotlinBoolean]? {
|
|
211
|
+
guard !decisions.isEmpty else { return nil }
|
|
212
|
+
return decisions.reduce(into: [:]) { result, dict in
|
|
213
|
+
if let id = dict["id"] as? Int,
|
|
214
|
+
let consent = dict["legitimateInterestConsent"] as? Bool {
|
|
215
|
+
result[KotlinInt(int: Int32(id))] = KotlinBoolean(bool: consent)
|
|
171
216
|
}
|
|
172
217
|
}
|
|
173
|
-
let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: Int(fromLayer)), consentType: .initialize(from: Int(consentType)), unsavedPurposeLIDecisions: decisions)
|
|
174
|
-
resolve(services.toListOfDictionary())
|
|
175
218
|
}
|
|
176
219
|
|
|
177
220
|
@objc func denyAll(_ consentType: Double,
|
|
@@ -225,17 +268,25 @@ class RNUsercentricsModule: NSObject {
|
|
|
225
268
|
reject("usercentrics_reactNative_clearUserSession_error", error.localizedDescription, error)
|
|
226
269
|
}
|
|
227
270
|
}
|
|
271
|
+
|
|
272
|
+
private static let onGppSectionChangeEvent = "onGppSectionChange"
|
|
228
273
|
}
|
|
229
274
|
|
|
230
275
|
// MARK: - RCTBridgeModule & TurboModule Conformance
|
|
231
276
|
#if RCT_NEW_ARCH_ENABLED
|
|
232
|
-
|
|
277
|
+
#if canImport(React_Codegen)
|
|
278
|
+
// RN 0.78: codegen-generated protocol
|
|
279
|
+
extension RNUsercentricsModule: NativeUsercentricsModuleSpec {
|
|
233
280
|
func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
|
|
234
281
|
return self
|
|
235
282
|
}
|
|
236
283
|
}
|
|
237
|
-
#
|
|
238
|
-
|
|
239
|
-
|
|
284
|
+
#elseif canImport(RNUsercentricsModuleSpec)
|
|
285
|
+
// RN ≤ 0.77
|
|
286
|
+
extension RNUsercentricsModule: NativeUsercentricsSpec {
|
|
287
|
+
func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
|
|
288
|
+
return self
|
|
289
|
+
}
|
|
240
290
|
}
|
|
241
291
|
#endif
|
|
292
|
+
#endif
|
|
@@ -36,6 +36,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
36
36
|
- (void)getCMPData:(RCTPromiseResolveBlock)resolve
|
|
37
37
|
reject:(RCTPromiseRejectBlock)reject;
|
|
38
38
|
|
|
39
|
+
- (void)getDpsMetadata:(NSString *)templateId
|
|
40
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
41
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
42
|
+
|
|
39
43
|
- (void)getAdditionalConsentModeData:(RCTPromiseResolveBlock)resolve
|
|
40
44
|
reject:(RCTPromiseRejectBlock)reject;
|
|
41
45
|
|
|
@@ -48,12 +52,21 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
48
52
|
- (void)getUSPData:(RCTPromiseResolveBlock)resolve
|
|
49
53
|
reject:(RCTPromiseRejectBlock)reject;
|
|
50
54
|
|
|
55
|
+
- (void)getGPPData:(RCTPromiseResolveBlock)resolve
|
|
56
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
57
|
+
|
|
58
|
+
- (void)getGPPString:(RCTPromiseResolveBlock)resolve
|
|
59
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
60
|
+
|
|
51
61
|
- (void)getABTestingVariant:(RCTPromiseResolveBlock)resolve
|
|
52
62
|
reject:(RCTPromiseRejectBlock)reject;
|
|
53
63
|
|
|
54
64
|
// Configuration Setters
|
|
55
65
|
- (void)setCMPId:(double)cmpId;
|
|
56
66
|
- (void)setABTestingVariant:(NSString *)variant;
|
|
67
|
+
- (void)setGPPConsent:(NSString *)sectionName
|
|
68
|
+
fieldName:(NSString *)fieldName
|
|
69
|
+
value:(NSDictionary *)value;
|
|
57
70
|
- (void)changeLanguage:(NSString *)language
|
|
58
71
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
59
72
|
reject:(RCTPromiseRejectBlock)reject;
|
|
@@ -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, TCFUserDecisionOnPurpose } from './models';
|
|
2
|
+
import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, GppData, UserDecision, TCFUserDecisions, TCFUserDecisionOnPurpose, TCFUserDecisionOnVendor } from './models';
|
|
3
3
|
export interface Spec extends TurboModule {
|
|
4
4
|
configure(options: UsercentricsOptions): void;
|
|
5
5
|
isReady(): Promise<UsercentricsReadyStatus>;
|
|
@@ -14,18 +14,24 @@ export interface Spec extends TurboModule {
|
|
|
14
14
|
getTCFData(): Promise<TCFData>;
|
|
15
15
|
getUserSessionData(): Promise<string>;
|
|
16
16
|
getUSPData(): Promise<CCPAData>;
|
|
17
|
+
getGPPData(): Promise<GppData>;
|
|
18
|
+
getGPPString(): Promise<string | null>;
|
|
17
19
|
getABTestingVariant(): Promise<string>;
|
|
20
|
+
getDpsMetadata(templateId: string): Promise<Record<string, unknown> | null>;
|
|
18
21
|
setCMPId(id: number): void;
|
|
19
22
|
setABTestingVariant(variant: string): void;
|
|
23
|
+
setGPPConsent(sectionName: string, fieldName: string, value: Object): void;
|
|
20
24
|
changeLanguage(language: string): Promise<void>;
|
|
21
25
|
acceptAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
22
26
|
acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
23
27
|
denyAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
24
|
-
denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<TCFUserDecisionOnPurpose>): Promise<Array<UsercentricsServiceConsent>>;
|
|
28
|
+
denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<TCFUserDecisionOnPurpose>, unsavedVendorLIDecisions: Array<TCFUserDecisionOnVendor>): Promise<Array<UsercentricsServiceConsent>>;
|
|
25
29
|
saveDecisions(decisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
26
30
|
saveDecisionsForTCF(tcfDecisions: TCFUserDecisions, fromLayer: number, saveDecisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
27
31
|
saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
|
|
28
32
|
track(event: number): void;
|
|
33
|
+
addListener(eventName: string): void;
|
|
34
|
+
removeListeners(count: number): void;
|
|
29
35
|
}
|
|
30
36
|
declare const _default: Spec;
|
|
31
37
|
export default _default;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAwE/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"}
|
package/lib/Usercentrics.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmitterSubscription } from 'react-native';
|
|
2
|
+
import { AdditionalConsentModeData, BannerSettings, CCPAData, GppData, GppSectionChangePayload, TCFData, TCFDecisionUILayer, TCFUserDecisionOnPurpose, TCFUserDecisionOnVendor, TCFUserDecisions, UsercentricsAnalyticsEventType, UsercentricsCMPData, UsercentricsConsentType, UsercentricsConsentUserResponse, UsercentricsOptions, UsercentricsReadyStatus, UsercentricsServiceConsent, UserDecision } from './models';
|
|
2
3
|
export declare const Usercentrics: {
|
|
3
4
|
configure: (options: UsercentricsOptions) => void;
|
|
4
5
|
status: () => Promise<UsercentricsReadyStatus>;
|
|
@@ -11,18 +12,23 @@ export declare const Usercentrics: {
|
|
|
11
12
|
getCMPData: () => Promise<UsercentricsCMPData>;
|
|
12
13
|
getUserSessionData: () => Promise<string>;
|
|
13
14
|
getCCPAData: () => Promise<CCPAData>;
|
|
15
|
+
getGPPData: () => Promise<GppData>;
|
|
16
|
+
getGPPString: () => Promise<string | null>;
|
|
14
17
|
getTCFData: () => Promise<TCFData>;
|
|
15
18
|
getAdditionalConsentModeData: () => Promise<AdditionalConsentModeData>;
|
|
19
|
+
getDpsMetadata: (templateId: string) => Promise<Record<string, unknown> | null>;
|
|
16
20
|
changeLanguage: (language: string) => Promise<void>;
|
|
17
21
|
acceptAll: (consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
|
|
18
22
|
acceptAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
|
|
19
23
|
denyAll: (consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
|
|
20
|
-
denyAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions?: TCFUserDecisionOnPurpose[]) => Promise<Array<UsercentricsServiceConsent>>;
|
|
24
|
+
denyAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions?: TCFUserDecisionOnPurpose[], unsavedVendorLIDecisions?: TCFUserDecisionOnVendor[]) => Promise<Array<UsercentricsServiceConsent>>;
|
|
21
25
|
saveDecisions: (decisions: UserDecision[], consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
|
|
22
26
|
saveDecisionsForTCF: (tcfDecisions: TCFUserDecisions, fromLayer: TCFDecisionUILayer, decisions: UserDecision[], consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
|
|
23
27
|
saveOptOutForCCPA: (isOptedOut: boolean, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
|
|
24
28
|
setCMPId: (id: number) => void;
|
|
25
29
|
setABTestingVariant: (variant: string) => void;
|
|
30
|
+
setGPPConsent: (sectionName: string, fieldName: string, value: unknown) => Promise<void>;
|
|
26
31
|
track: (event: UsercentricsAnalyticsEventType) => Promise<void>;
|
|
27
32
|
clearUserSession: () => Promise<UsercentricsReadyStatus>;
|
|
33
|
+
onGppSectionChange: (callback: (payload: GppSectionChangePayload) => void) => EmitterSubscription;
|
|
28
34
|
};
|
package/lib/Usercentrics.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { NativeModules } from 'react-native';
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
2
2
|
import NativeUsercentrics from './NativeUsercentrics';
|
|
3
3
|
// Use TurboModule when available, fallback to legacy bridge
|
|
4
4
|
const RNUsercentricsModule = NativeUsercentrics || NativeModules.RNUsercentricsModule;
|
|
5
|
+
const eventEmitter = new NativeEventEmitter(RNUsercentricsModule);
|
|
5
6
|
export const Usercentrics = {
|
|
6
7
|
configure: (options) => {
|
|
7
8
|
RNUsercentricsModule.configure(options);
|
|
@@ -45,6 +46,14 @@ export const Usercentrics = {
|
|
|
45
46
|
await RNUsercentricsModule.isReady();
|
|
46
47
|
return RNUsercentricsModule.getUSPData();
|
|
47
48
|
},
|
|
49
|
+
getGPPData: async () => {
|
|
50
|
+
await RNUsercentricsModule.isReady();
|
|
51
|
+
return RNUsercentricsModule.getGPPData();
|
|
52
|
+
},
|
|
53
|
+
getGPPString: async () => {
|
|
54
|
+
await RNUsercentricsModule.isReady();
|
|
55
|
+
return RNUsercentricsModule.getGPPString();
|
|
56
|
+
},
|
|
48
57
|
getTCFData: async () => {
|
|
49
58
|
await RNUsercentricsModule.isReady();
|
|
50
59
|
return RNUsercentricsModule.getTCFData();
|
|
@@ -53,6 +62,10 @@ export const Usercentrics = {
|
|
|
53
62
|
await RNUsercentricsModule.isReady();
|
|
54
63
|
return RNUsercentricsModule.getAdditionalConsentModeData();
|
|
55
64
|
},
|
|
65
|
+
getDpsMetadata: async (templateId) => {
|
|
66
|
+
await RNUsercentricsModule.isReady();
|
|
67
|
+
return RNUsercentricsModule.getDpsMetadata(templateId);
|
|
68
|
+
},
|
|
56
69
|
changeLanguage: async (language) => {
|
|
57
70
|
await RNUsercentricsModule.isReady();
|
|
58
71
|
return RNUsercentricsModule.changeLanguage(language);
|
|
@@ -69,9 +82,9 @@ export const Usercentrics = {
|
|
|
69
82
|
await RNUsercentricsModule.isReady();
|
|
70
83
|
return RNUsercentricsModule.denyAll(consentType);
|
|
71
84
|
},
|
|
72
|
-
denyAllForTCF: async (fromLayer, consentType, unsavedPurposeLIDecisions = []) => {
|
|
85
|
+
denyAllForTCF: async (fromLayer, consentType, unsavedPurposeLIDecisions = [], unsavedVendorLIDecisions = []) => {
|
|
73
86
|
await RNUsercentricsModule.isReady();
|
|
74
|
-
return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions);
|
|
87
|
+
return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions, unsavedVendorLIDecisions);
|
|
75
88
|
},
|
|
76
89
|
saveDecisions: async (decisions, consentType) => {
|
|
77
90
|
await RNUsercentricsModule.isReady();
|
|
@@ -91,6 +104,10 @@ export const Usercentrics = {
|
|
|
91
104
|
setABTestingVariant: (variant) => {
|
|
92
105
|
RNUsercentricsModule.setABTestingVariant(variant);
|
|
93
106
|
},
|
|
107
|
+
setGPPConsent: async (sectionName, fieldName, value) => {
|
|
108
|
+
await RNUsercentricsModule.isReady();
|
|
109
|
+
RNUsercentricsModule.setGPPConsent(sectionName, fieldName, { value });
|
|
110
|
+
},
|
|
94
111
|
track: async (event) => {
|
|
95
112
|
await RNUsercentricsModule.isReady();
|
|
96
113
|
RNUsercentricsModule.track(event);
|
|
@@ -99,5 +116,8 @@ export const Usercentrics = {
|
|
|
99
116
|
await RNUsercentricsModule.isReady();
|
|
100
117
|
return RNUsercentricsModule.clearUserSession();
|
|
101
118
|
},
|
|
119
|
+
onGppSectionChange: (callback) => {
|
|
120
|
+
return eventEmitter.addListener("onGppSectionChange", callback);
|
|
121
|
+
},
|
|
102
122
|
};
|
|
103
123
|
//# sourceMappingURL=Usercentrics.js.map
|
package/lib/Usercentrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,kBAAkB,EAAE,aAAa,EAAW,MAAM,cAAc,CAAC;AAqB9F,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,4DAA4D;AAC5D,MAAM,oBAAoB,GAAG,kBAAkB,IAAI,aAAa,CAAC,oBAAoB,CAAC;AACtF,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG;IAExB,SAAS,EAAE,CAAC,OAA4B,EAAE,EAAE;QACxC,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,EAAE,GAAqC,EAAE;QAC3C,OAAO,oBAAoB,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,cAAc,EAAE,KAAK,EAAE,OAAwB,EAA4C,EAAE;QACzF,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,eAAe,EAAE,KAAK,EAAE,OAAwB,EAA4C,EAAE;QAC1F,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB,EAAE,KAAK,EAAE,YAAoB,EAAoC,EAAE;QACjF,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,eAAe,EAAE,KAAK,IAAqB,EAAE;QACzC,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,eAAe,EAAE,CAAC;IAClD,CAAC;IAED,mBAAmB,EAAE,KAAK,IAA4B,EAAE;QACpD,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,CAAC;IACtD,CAAC;IAED,WAAW,EAAE,KAAK,IAAgD,EAAE;QAChE,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,WAAW,EAAE,CAAC;IAC9C,CAAC;IAED,UAAU,EAAE,KAAK,IAAkC,EAAE;QACjD,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,kBAAkB,EAAE,KAAK,IAAqB,EAAE;QAC5C,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;IACrD,CAAC;IAED,WAAW,EAAE,KAAK,IAAuB,EAAE;QACvC,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,UAAU,EAAE,KAAK,IAAsB,EAAE;QACrC,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,YAAY,EAAE,KAAK,IAA4B,EAAE;QAC7C,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,YAAY,EAAE,CAAC;IAC/C,CAAC;IAED,UAAU,EAAE,KAAK,IAAsB,EAAE;QACrC,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,4BAA4B,EAAE,KAAK,IAAwC,EAAE;QACzE,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,4BAA4B,EAAE,CAAC;IAC/D,CAAC;IAED,cAAc,EAAE,KAAK,EAAE,UAAkB,EAA2C,EAAE;QAClF,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc,EAAE,KAAK,EAAE,QAAgB,EAAiB,EAAE;QACtD,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,EAAE,KAAK,EAAE,WAAoC,EAA8C,EAAE;QAClG,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,eAAe,EAAE,KAAK,EAAE,SAA6B,EAAE,WAAoC,EAA8C,EAAE;QACvI,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAoC,EAA8C,EAAE;QAChG,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,SAA6B,EAAE,WAAoC,EAAE,4BAAwD,EAAE,EAAE,2BAAsD,EAAE,EAA8C,EAAE;QAC3P,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE,wBAAwB,CAAC,CAAC;IAC3H,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,SAAyB,EAAE,WAAoC,EAA8C,EAAE;QACjI,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtE,CAAC;IAED,mBAAmB,EAAE,KAAK,EAAE,YAA8B,EAAE,SAA6B,EAAE,SAAyB,EAAE,WAAoC,EAA8C,EAAE;QACtM,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrG,CAAC;IAED,iBAAiB,EAAE,KAAK,EAAE,UAAmB,EAAE,WAAoC,EAA8C,EAAE;QAC/H,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IAED,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE;QACrB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,mBAAmB,EAAE,CAAC,OAAe,EAAE,EAAE;QACrC,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,WAAmB,EAAE,SAAiB,EAAE,KAAc,EAAE,EAAE;QAC5E,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,oBAAoB,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK,EAAY,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,EAAE,KAAK,EAAE,KAAqC,EAAE,EAAE;QACnD,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,gBAAgB,EAAE,KAAK,IAAsC,EAAE;QAC3D,MAAM,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC;IAED,kBAAkB,EAAE,CAAC,QAAoD,EAAuB,EAAE;QAC9F,OAAO,YAAY,CAAC,WAAW,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;CACJ,CAAA"}
|
|
@@ -13,18 +13,24 @@ export interface Spec extends TurboModule {
|
|
|
13
13
|
getTCFData(): Promise<Object>;
|
|
14
14
|
getUserSessionData(): Promise<string>;
|
|
15
15
|
getUSPData(): Promise<Object>;
|
|
16
|
+
getGPPData(): Promise<Object>;
|
|
17
|
+
getGPPString(): Promise<string | null>;
|
|
16
18
|
getABTestingVariant(): Promise<string>;
|
|
19
|
+
getDpsMetadata(templateId: string): Promise<Object | null>;
|
|
17
20
|
setCMPId(id: number): void;
|
|
18
21
|
setABTestingVariant(variant: string): void;
|
|
22
|
+
setGPPConsent(sectionName: string, fieldName: string, value: Object): void;
|
|
19
23
|
changeLanguage(language: string): Promise<void>;
|
|
20
24
|
acceptAll(consentType: number): Promise<Array<Object>>;
|
|
21
25
|
acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
|
|
22
26
|
denyAll(consentType: number): Promise<Array<Object>>;
|
|
23
|
-
denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<Object>): Promise<Array<Object>>;
|
|
27
|
+
denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<Object>, unsavedVendorLIDecisions: Array<Object>): Promise<Array<Object>>;
|
|
24
28
|
saveDecisions(decisions: Array<Object>, consentType: number): Promise<Array<Object>>;
|
|
25
29
|
saveDecisionsForTCF(tcfDecisions: Object, fromLayer: number, saveDecisions: Array<Object>, consentType: number): Promise<Array<Object>>;
|
|
26
30
|
saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<Object>>;
|
|
27
31
|
track(event: number): void;
|
|
32
|
+
addListener(eventName: string): void;
|
|
33
|
+
removeListeners(count: number): void;
|
|
28
34
|
}
|
|
29
35
|
declare const _default: Spec | null;
|
|
30
36
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAwDnD,eAAe,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -13,5 +13,7 @@ export declare class CCPASettings {
|
|
|
13
13
|
secondLayerDescription: string;
|
|
14
14
|
secondLayerHideLanguageSwitch: boolean;
|
|
15
15
|
btnMoreInfo: string;
|
|
16
|
-
|
|
16
|
+
mspaCoveredTransaction?: boolean;
|
|
17
|
+
mspaMode?: number;
|
|
18
|
+
constructor(optOutNoticeLabel: string, btnSave: string, firstLayerTitle: string, isActive: boolean, showOnPageLoad: boolean, reshowAfterDays: number, iabAgreementExists: boolean, appFirstLayerDescription: string, firstLayerMobileDescriptionIsActive: boolean, firstLayerMobileDescription: string, secondLayerTitle: string, secondLayerDescription: string, secondLayerHideLanguageSwitch: boolean, btnMoreInfo: string, mspaCoveredTransaction?: boolean, mspaMode?: number);
|
|
17
19
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export class CCPASettings {
|
|
2
|
-
constructor(optOutNoticeLabel, btnSave, firstLayerTitle, isActive, showOnPageLoad, reshowAfterDays, iabAgreementExists, appFirstLayerDescription, firstLayerMobileDescriptionIsActive, firstLayerMobileDescription, secondLayerTitle, secondLayerDescription, secondLayerHideLanguageSwitch, btnMoreInfo) {
|
|
2
|
+
constructor(optOutNoticeLabel, btnSave, firstLayerTitle, isActive, showOnPageLoad, reshowAfterDays, iabAgreementExists, appFirstLayerDescription, firstLayerMobileDescriptionIsActive, firstLayerMobileDescription, secondLayerTitle, secondLayerDescription, secondLayerHideLanguageSwitch, btnMoreInfo, mspaCoveredTransaction, mspaMode) {
|
|
3
3
|
this.optOutNoticeLabel = optOutNoticeLabel;
|
|
4
4
|
this.btnSave = btnSave;
|
|
5
5
|
this.firstLayerTitle = firstLayerTitle;
|
|
@@ -14,6 +14,8 @@ export class CCPASettings {
|
|
|
14
14
|
this.secondLayerDescription = secondLayerDescription;
|
|
15
15
|
this.secondLayerHideLanguageSwitch = secondLayerHideLanguageSwitch;
|
|
16
16
|
this.btnMoreInfo = btnMoreInfo;
|
|
17
|
+
this.mspaCoveredTransaction = mspaCoveredTransaction;
|
|
18
|
+
this.mspaMode = mspaMode;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=CCPASettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CCPASettings.js","sourceRoot":"","sources":["../../src/models/CCPASettings.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"CCPASettings.js","sourceRoot":"","sources":["../../src/models/CCPASettings.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAmBrB,YACI,iBAAyB,EACzB,OAAe,EACf,eAAuB,EACvB,QAAiB,EACjB,cAAuB,EACvB,eAAuB,EACvB,kBAA2B,EAC3B,wBAAgC,EAChC,mCAA4C,EAC5C,2BAAmC,EACnC,gBAAwB,EACxB,sBAA8B,EAC9B,6BAAsC,EACtC,WAAmB,EACnB,sBAAgC,EAChC,QAAiB;QAEjB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAA;QACxD,IAAI,CAAC,mCAAmC,GAAG,mCAAmC,CAAA;QAC9E,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAA;QAC9D,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAA;QAClE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;CACJ"}
|