@usercentrics/react-native-sdk 2.23.2 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +5 -5
  2. package/android/build-legacy.gradle +11 -1
  3. package/android/build.gradle.kts +44 -14
  4. package/android/gradle.properties +2 -0
  5. package/android/settings.gradle.kts +1 -1
  6. package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/RNUsercentricsModuleTest.kt +5 -5
  7. package/android/src/androidTest/java/com/usercentrics/reactnative/fake/FakePromise.kt +73 -0
  8. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsModule.kt +3 -3
  9. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsModuleSpec.kt +1 -1
  10. package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsPackage.kt +51 -0
  11. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/ReactContextProvider.kt +1 -1
  12. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/ReactContextProviderImpl.kt +1 -1
  13. package/android/src/main/java/com/usercentrics/reactnative/UCRNFlag.kt +4 -0
  14. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/api/UsercentricsProxy.kt +2 -2
  15. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/BannerFontExtensions.kt +1 -1
  16. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/BannerSettingsExtensions.kt +1 -1
  17. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/CCPADataExtensions.kt +1 -1
  18. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/ConsentDisclosureSerializer.kt +1 -1
  19. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/ReadableMapExtensions.kt +1 -1
  20. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/TCFDataExtensions.kt +1 -1
  21. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UserDecisionExtensions.kt +1 -1
  22. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UserOptionsExtensions.kt +1 -1
  23. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsCMPDataExtensions.kt +1 -1
  24. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsConsentUserResponseExtensions.kt +1 -1
  25. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsReadyStatusExtensions.kt +1 -1
  26. package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsServiceConsentExtensions.kt +1 -1
  27. package/android/src/main/jni/CMakeLists.txt +85 -0
  28. package/android/src/main/jni/RNUsercentricsModule.cpp +21 -0
  29. package/android/src/main/jni/rn_usercentrics.cpp +22 -0
  30. package/android/src/test/java/com/usercentrics/reactnative/RNUsercentricsModuleTest.kt +159 -0
  31. package/android/src/test/java/com/usercentrics/reactnative/fake/FakePromise.kt +73 -0
  32. package/ios/Extensions/BannerSettings+Dict.swift +1 -0
  33. package/ios/Extensions/UIColor+Extensions.swift +1 -1
  34. package/ios/Extensions/UIImage+UsercentricsLogoDict.swift +1 -0
  35. package/ios/RNUsercentricsModule.swift +1 -0
  36. package/lib/NativeUsercentrics.d.ts +1 -1
  37. package/lib/NativeUsercentrics.js +10 -2
  38. package/lib/NativeUsercentrics.js.map +1 -1
  39. package/lib/fabric/NativeUsercentricsModule.d.ts +30 -0
  40. package/lib/fabric/NativeUsercentricsModule.js +3 -0
  41. package/lib/fabric/NativeUsercentricsModule.js.map +1 -0
  42. package/package.json +108 -96
  43. package/react-native.config.js +15 -0
  44. package/src/NativeUsercentrics.ts +75 -0
  45. package/src/Usercentrics.tsx +145 -0
  46. package/src/__tests__/index.test.ts +476 -0
  47. package/src/__tests__/mocks.ts +402 -0
  48. package/src/fabric/NativeUsercentricsModule.ts +51 -0
  49. package/src/index.tsx +2 -0
  50. package/src/models/AdditionalConsentModeData.tsx +33 -0
  51. package/src/models/BannerSettings.tsx +117 -0
  52. package/src/models/CCPAData.tsx +32 -0
  53. package/src/models/CCPASettings.tsx +49 -0
  54. package/src/models/ConsentDisclosureObject.tsx +47 -0
  55. package/src/models/FirstLayerSettings.tsx +185 -0
  56. package/src/models/GeolocationRuleset.tsx +10 -0
  57. package/src/models/LegalBasisLocalization.tsx +100 -0
  58. package/src/models/NetworkMode.tsx +5 -0
  59. package/src/models/SecondLayerSettings.tsx +12 -0
  60. package/src/models/TCF2Settings.tsx +209 -0
  61. package/src/models/TCFData.tsx +297 -0
  62. package/src/models/TCFDecisionUILayer.tsx +5 -0
  63. package/src/models/TCFUserDecisions.tsx +73 -0
  64. package/src/models/UserDecision.tsx +10 -0
  65. package/src/models/UsercentricsAnalyticsEventType.tsx +15 -0
  66. package/src/models/UsercentricsCMPData.tsx +38 -0
  67. package/src/models/UsercentricsCategory.tsx +26 -0
  68. package/src/models/UsercentricsConsentType.tsx +5 -0
  69. package/src/models/UsercentricsConsentUserResponse.tsx +14 -0
  70. package/src/models/UsercentricsLabels.tsx +276 -0
  71. package/src/models/UsercentricsLocation.tsx +32 -0
  72. package/src/models/UsercentricsLoggerLevel.tsx +7 -0
  73. package/src/models/UsercentricsOptions.tsx +45 -0
  74. package/src/models/UsercentricsReadyStatus.tsx +20 -0
  75. package/src/models/UsercentricsService.tsx +134 -0
  76. package/src/models/UsercentricsServiceConsent.tsx +37 -0
  77. package/src/models/UsercentricsSettings.tsx +177 -0
  78. package/src/models/UsercentricsUserInteraction.tsx +7 -0
  79. package/src/models/UsercentricsVariant.tsx +6 -0
  80. package/src/models/index.tsx +29 -0
  81. package/android/src/androidTest/java/com/usercentrics/reactnativemodule/fake/FakePromise.kt +0 -67
  82. package/android/src/main/java/com/usercentrics/reactnativeusercentrics/RNUsercentricsPackage.kt +0 -22
  83. package/android/src/main/java/com/usercentrics/reactnativeusercentrics/UCRNFlag.kt +0 -4
  84. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/api/FakeUsercentricsProxy.kt +0 -0
  85. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetCMPDataMock.kt +0 -0
  86. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetConsentsMock.kt +0 -0
  87. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetTCFDataMock.kt +0 -0
  88. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetUSPDataMock.kt +0 -0
  89. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetUserSessionDataMock.kt +0 -0
  90. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/ReactContextProviderMock.kt +0 -0
  91. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/SaveDecisionsForTCFMock.kt +0 -0
  92. /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/SaveDecisionsMock.kt +0 -0
@@ -0,0 +1,177 @@
1
+ import {CCPASettings} from "./CCPASettings"
2
+ import {TCF2Settings} from "./TCF2Settings"
3
+ import {UsercentricsLabels} from "./UsercentricsLabels"
4
+
5
+ export class UsercentricsSettings {
6
+ labels: UsercentricsLabels
7
+ version: string
8
+ language: string
9
+ imprintUrl: string
10
+ privacyPolicyUrl: string
11
+ cookiePolicyUrl: string
12
+ firstLayerDescriptionHtml: string
13
+ firstLayerMobileDescriptionHtml: string
14
+ settingsId: string
15
+ bannerMobileDescriptionIsActive: boolean
16
+ enablePoweredBy: boolean
17
+ displayOnlyForEU: boolean
18
+ tcf2Enabled: boolean
19
+ reshowBanner: number
20
+ editableLanguages: [string]
21
+ languagesAvailable: [string]
22
+ showInitialViewForVersionChange: [string]
23
+ ccpa?: CCPASettings
24
+ tcf2?: TCF2Settings
25
+ customization?: string
26
+ firstLayer?: FirstLayer
27
+ secondLayer?: SecondLayer
28
+ variants?: VariantsSettings
29
+ dpsDisplayFormat?: DpsDisplayFormat
30
+ framework?: USAFrameworks
31
+ publishedApps?: [PublishedApp]
32
+ renewConsentsTimestamp?: number
33
+ consentWebhook?: boolean
34
+
35
+ constructor(
36
+ labels: UsercentricsLabels,
37
+ version: string,
38
+ language: string,
39
+ imprintUrl: string,
40
+ privacyPolicyUrl: string,
41
+ cookiePolicyUrl: string,
42
+ firstLayerDescriptionHtml: string,
43
+ firstLayerMobileDescriptionHtml: string,
44
+ settingsId: string,
45
+ bannerMobileDescriptionIsActive: boolean,
46
+ enablePoweredBy: boolean,
47
+ displayOnlyForEU: boolean,
48
+ tcf2Enabled: boolean,
49
+ reshowBanner: number,
50
+ editableLanguages: [string],
51
+ languagesAvailable: [string],
52
+ showInitialViewForVersionChange: [string],
53
+ ccpa?: CCPASettings,
54
+ tcf2?: TCF2Settings,
55
+ customization?: string,
56
+ firstLayer?: FirstLayer,
57
+ secondLayer?: SecondLayer,
58
+ variants?: VariantsSettings,
59
+ dpsDisplayFormat?: DpsDisplayFormat,
60
+ framework?: USAFrameworks,
61
+ publishedApps?: [PublishedApp],
62
+ renewConsentsTimestamp?: number,
63
+ consentWebhook?: boolean,
64
+ ) {
65
+ this.labels = labels
66
+ this.version = version
67
+ this.language = language
68
+ this.imprintUrl = imprintUrl
69
+ this.privacyPolicyUrl = privacyPolicyUrl
70
+ this.cookiePolicyUrl = cookiePolicyUrl
71
+ this.firstLayerDescriptionHtml = firstLayerDescriptionHtml
72
+ this.firstLayerMobileDescriptionHtml = firstLayerMobileDescriptionHtml
73
+ this.settingsId = settingsId
74
+ this.bannerMobileDescriptionIsActive = bannerMobileDescriptionIsActive
75
+ this.enablePoweredBy = enablePoweredBy
76
+ this.displayOnlyForEU = displayOnlyForEU
77
+ this.tcf2Enabled = tcf2Enabled
78
+ this.reshowBanner = reshowBanner
79
+ this.editableLanguages = editableLanguages
80
+ this.languagesAvailable = languagesAvailable
81
+ this.showInitialViewForVersionChange = showInitialViewForVersionChange
82
+ this.ccpa = ccpa
83
+ this.tcf2 = tcf2
84
+ this.customization = customization
85
+ this.firstLayer = firstLayer
86
+ this.secondLayer = secondLayer
87
+ this.variants = variants
88
+ this.dpsDisplayFormat = dpsDisplayFormat
89
+ this.framework = framework
90
+ this.publishedApps = publishedApps
91
+ this.renewConsentsTimestamp = renewConsentsTimestamp
92
+ this.consentWebhook = consentWebhook
93
+ }
94
+ }
95
+
96
+ export class FirstLayer {
97
+ hideButtonDeny?: boolean
98
+
99
+ constructor(
100
+ hideButtonDeny?: boolean,
101
+ ) {
102
+ this.hideButtonDeny = hideButtonDeny
103
+ }
104
+ }
105
+
106
+ export class SecondLayer {
107
+ tabsCategoriesLabel: string
108
+ tabsServicesLabel: string
109
+ hideButtonDeny?: boolean
110
+ hideLanguageSwitch?: boolean
111
+ acceptButtonText?: string
112
+ denyButtonText?: string
113
+
114
+ constructor(
115
+ tabsCategoriesLabel: string,
116
+ tabsServicesLabel: string,
117
+ hideButtonDeny?: boolean,
118
+ hideLanguageSwitch?: boolean,
119
+ acceptButtonText?: string,
120
+ denyButtonText?: string
121
+ ) {
122
+ this.tabsCategoriesLabel = tabsCategoriesLabel
123
+ this.tabsServicesLabel = tabsServicesLabel
124
+ this.hideButtonDeny = hideButtonDeny
125
+ this.hideLanguageSwitch = hideLanguageSwitch
126
+ this.acceptButtonText = acceptButtonText
127
+ this.denyButtonText = denyButtonText
128
+ }
129
+ }
130
+
131
+ export class VariantsSettings {
132
+
133
+ enabled: boolean
134
+ experimentsJson: string
135
+ activateWith: string
136
+
137
+ constructor(
138
+ enabled: boolean,
139
+ experimentsJson: string,
140
+ activateWith: string,
141
+ ) {
142
+ this.enabled = enabled
143
+ this.experimentsJson = experimentsJson
144
+ this.activateWith = activateWith
145
+ }
146
+ }
147
+
148
+ export enum DpsDisplayFormat {
149
+ all = 0,
150
+ short = 1
151
+ }
152
+
153
+ export enum USAFrameworks {
154
+ cpra = 0,
155
+ vcdpa = 1,
156
+ cpa = 2,
157
+ ctdpa = 3,
158
+ ucpa = 4,
159
+ }
160
+
161
+ export class PublishedApp {
162
+ bundleId: string
163
+ platform: PublishedAppPlatform
164
+
165
+ constructor(
166
+ bundleId: string,
167
+ platform: PublishedAppPlatform,
168
+ ) {
169
+ this.bundleId = bundleId
170
+ this.platform = platform
171
+ }
172
+ }
173
+
174
+ export enum PublishedAppPlatform {
175
+ android = 0,
176
+ ios = 1
177
+ }
@@ -0,0 +1,7 @@
1
+ export enum UsercentricsUserInteraction {
2
+
3
+ acceptAll = 0,
4
+ denyAll = 1,
5
+ granular = 2,
6
+ noInteraction = 3
7
+ }
@@ -0,0 +1,6 @@
1
+ export enum UsercentricsVariant {
2
+
3
+ default = 0,
4
+ ccpa = 1,
5
+ tcf = 2
6
+ }
@@ -0,0 +1,29 @@
1
+ export * from './BannerSettings';
2
+ export * from './CCPAData';
3
+ export * from './FirstLayerSettings';
4
+ export * from './NetworkMode';
5
+ export * from './SecondLayerSettings';
6
+ export * from './TCFData';
7
+ export * from './TCFDecisionUILayer';
8
+ export * from './TCFUserDecisions';
9
+ export * from './UsercentricsCMPData';
10
+ export * from './UsercentricsConsentType';
11
+ export * from './UsercentricsConsentUserResponse';
12
+ export * from './UsercentricsLoggerLevel';
13
+ export * from './UsercentricsOptions';
14
+ export * from './UsercentricsReadyStatus';
15
+ export * from './UsercentricsServiceConsent';
16
+ export * from './UsercentricsUserInteraction';
17
+ export * from './UsercentricsVariant';
18
+ export * from './UserDecision';
19
+ export * from './UsercentricsAnalyticsEventType';
20
+ export * from './AdditionalConsentModeData';
21
+ export * from './CCPASettings';
22
+ export * from './ConsentDisclosureObject';
23
+ export * from './TCF2Settings';
24
+ export * from './UsercentricsCategory';
25
+ export * from './UsercentricsLabels';
26
+ export * from './UsercentricsLocation';
27
+ export * from './UsercentricsSettings';
28
+ export * from './GeolocationRuleset';
29
+ export * from './LegalBasisLocalization'
@@ -1,67 +0,0 @@
1
- package com.usercentrics.reactnativemodule.fake
2
-
3
- import com.facebook.react.bridge.Promise
4
- import com.facebook.react.bridge.WritableMap
5
- import java.util.concurrent.CountDownLatch
6
-
7
- internal class FakePromise : Promise {
8
-
9
- var resolveValue: Any? = null
10
- var rejectThrowable: Throwable? = null
11
-
12
- val lock = CountDownLatch(1)
13
-
14
- fun await() {
15
- lock.await()
16
- }
17
-
18
- override fun resolve(value: Any?) {
19
- this.resolveValue = value
20
- lock.countDown()
21
- }
22
-
23
- override fun reject(code: String?, message: String?) {
24
- TODO("Not yet implemented")
25
- }
26
-
27
- override fun reject(code: String?, throwable: Throwable?) {
28
- TODO("Not yet implemented")
29
- }
30
-
31
- override fun reject(code: String?, message: String?, throwable: Throwable?) {
32
- TODO("Not yet implemented")
33
- }
34
-
35
- override fun reject(throwable: Throwable?) {
36
- this.rejectThrowable = throwable
37
- }
38
-
39
- override fun reject(throwable: Throwable?, userInfo: WritableMap?) {
40
- TODO("Not yet implemented")
41
- }
42
-
43
- override fun reject(code: String?, userInfo: WritableMap) {
44
- TODO("Not yet implemented")
45
- }
46
-
47
- override fun reject(code: String?, throwable: Throwable?, userInfo: WritableMap?) {
48
- TODO("Not yet implemented")
49
- }
50
-
51
- override fun reject(code: String?, message: String?, userInfo: WritableMap) {
52
- TODO("Not yet implemented")
53
- }
54
-
55
- override fun reject(
56
- code: String?,
57
- message: String?,
58
- throwable: Throwable?,
59
- userInfo: WritableMap?
60
- ) {
61
- TODO("Not yet implemented")
62
- }
63
-
64
- override fun reject(message: String?) {
65
- TODO("Not yet implemented")
66
- }
67
- }
@@ -1,22 +0,0 @@
1
- package com.usercentrics.reactnativeusercentrics
2
-
3
- import com.facebook.react.ReactPackage
4
- import com.facebook.react.bridge.NativeModule
5
- import com.facebook.react.bridge.ReactApplicationContext
6
- import com.facebook.react.uimanager.ViewManager
7
- import com.facebook.react.turbomodule.core.interfaces.TurboModule
8
- import com.usercentrics.reactnativeusercentrics.api.UsercentricsProxyImpl
9
-
10
- class RNUsercentricsPackage : ReactPackage {
11
-
12
- private val usercentricsProxy = UsercentricsProxyImpl()
13
-
14
- override fun createViewManagers(reactContext: ReactApplicationContext): MutableList<ViewManager<*, *>> {
15
- return mutableListOf()
16
- }
17
-
18
- override fun createNativeModules(reactContext: ReactApplicationContext): MutableList<NativeModule> {
19
- val reactContextProvider = ReactContextProviderImpl(reactContext)
20
- return mutableListOf(RNUsercentricsModule(reactContext, usercentricsProxy, reactContextProvider))
21
- }
22
- }
@@ -1,4 +0,0 @@
1
- package com.usercentrics.reactnativeusercentrics
2
-
3
- @Suppress("unused")
4
- class UCRNFlag