cm-sdk-react-native-v3 3.6.0 → 3.6.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.
- package/README.md +2 -13
- package/android/build.gradle +1 -14
- package/android/src/main/java/com/cmsdkreactnativev3/CmSdkReactNativeV3Module.kt +78 -52
- package/android/src/main/java/com/cmsdkreactnativev3/CmSdkReactNativeV3Package.kt +6 -29
- package/ios/CmSdkReactNativeV3.mm +33 -32
- package/ios/CmSdkReactNativeV3.swift +162 -50
- package/lib/commonjs/NativeCmSdkReactNativeV3.js +32 -2
- package/lib/commonjs/NativeCmSdkReactNativeV3.js.map +1 -1
- package/lib/commonjs/index.js +138 -7
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/NativeCmSdkReactNativeV3.js +32 -2
- package/lib/module/NativeCmSdkReactNativeV3.js.map +1 -1
- package/lib/module/index.js +114 -7
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/NativeCmSdkReactNativeV3.d.ts +48 -10
- package/lib/typescript/commonjs/src/NativeCmSdkReactNativeV3.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +14 -4
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/NativeCmSdkReactNativeV3.d.ts +48 -10
- package/lib/typescript/module/src/NativeCmSdkReactNativeV3.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +14 -4
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +4 -7
- package/react-native-cm-sdk-react-native-v3.podspec +1 -24
- package/src/NativeCmSdkReactNativeV3.ts +51 -13
- package/src/index.tsx +148 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Foundation
|
|
2
|
+
import UIKit
|
|
2
3
|
import cm_sdk_ios_v3
|
|
3
4
|
import React
|
|
4
5
|
|
|
@@ -48,7 +49,7 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
override func supportedEvents() -> [String]! {
|
|
51
|
-
return ["didReceiveConsent", "didShowConsentLayer", "didCloseConsentLayer", "didReceiveError", "onClickLink"]
|
|
52
|
+
return ["didReceiveConsent", "didShowConsentLayer", "didCloseConsentLayer", "didReceiveError", "onClickLink", "didChangeATTStatus"]
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
override func startObserving() {
|
|
@@ -91,6 +92,7 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
91
92
|
@objc public func didCloseConsentLayer() {
|
|
92
93
|
if isConsentLayerShown {
|
|
93
94
|
isConsentLayerShown = false
|
|
95
|
+
shouldHandleLinkClicks = false
|
|
94
96
|
sendEventIfListening(name: "didCloseConsentLayer", body: nil)
|
|
95
97
|
} else {
|
|
96
98
|
print("CmSdkReactNativeV3: Ignoring didCloseConsentLayer - consent layer was not shown")
|
|
@@ -103,22 +105,132 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
103
105
|
|
|
104
106
|
// MARK: - Configuration methods
|
|
105
107
|
|
|
106
|
-
@objc(setWebViewConfig:
|
|
108
|
+
@objc(setWebViewConfig:resolve:reject:)
|
|
107
109
|
func setWebViewConfig(_ config: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
runOnMainThread {
|
|
111
|
+
let cornerRadius = CGFloat(config["cornerRadius"] as? Double ?? 5)
|
|
112
|
+
let respectsSafeArea = config["respectsSafeArea"] as? Bool ?? true
|
|
113
|
+
let allowsOrientationChanges = config["allowsOrientationChanges"] as? Bool ?? true
|
|
114
|
+
|
|
115
|
+
let position = self.mapPosition(config: config, respectsSafeArea: respectsSafeArea)
|
|
116
|
+
let backgroundStyle = self.mapBackgroundStyle(config: config)
|
|
117
|
+
|
|
118
|
+
let uiConfig = ConsentLayerUIConfig(
|
|
119
|
+
position: position,
|
|
120
|
+
backgroundStyle: backgroundStyle,
|
|
121
|
+
cornerRadius: cornerRadius,
|
|
122
|
+
respectsSafeArea: respectsSafeArea,
|
|
123
|
+
allowsOrientationChanges: allowsOrientationChanges
|
|
124
|
+
)
|
|
125
|
+
|
|
116
126
|
self.cmpManager.setWebViewConfig(uiConfig)
|
|
117
127
|
resolve(nil)
|
|
118
128
|
}
|
|
119
129
|
}
|
|
120
130
|
|
|
121
|
-
|
|
131
|
+
private func mapPosition(config: [String: Any], respectsSafeArea: Bool) -> Position {
|
|
132
|
+
if let positionValue = config["position"] as? String, positionValue == "custom",
|
|
133
|
+
let rectValue = config["customRect"] as? [String: Any],
|
|
134
|
+
let rect = rectFromDictionary(rectValue, respectsSafeArea: respectsSafeArea) {
|
|
135
|
+
return .custom(rect)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let insets = currentSafeAreaInsets()
|
|
139
|
+
let screenBounds = UIScreen.main.bounds
|
|
140
|
+
let usableHeight = screenBounds.height - (respectsSafeArea ? (insets.top + insets.bottom) : 0)
|
|
141
|
+
let halfHeight = usableHeight / 2
|
|
142
|
+
|
|
143
|
+
guard let positionValue = config["position"] as? String else {
|
|
144
|
+
return .fullScreen
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
switch positionValue {
|
|
148
|
+
case "halfScreenTop":
|
|
149
|
+
let originY = respectsSafeArea ? insets.top : 0
|
|
150
|
+
return .custom(CGRect(x: 0, y: originY, width: screenBounds.width, height: halfHeight))
|
|
151
|
+
case "halfScreenBottom":
|
|
152
|
+
let originY = (respectsSafeArea ? insets.top : 0) + halfHeight
|
|
153
|
+
return .custom(CGRect(x: 0, y: originY, width: screenBounds.width, height: halfHeight))
|
|
154
|
+
default:
|
|
155
|
+
return .fullScreen
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private func mapBackgroundStyle(config: [String: Any]) -> BackgroundStyle {
|
|
160
|
+
guard let backgroundConfig = config["backgroundStyle"] as? [String: Any],
|
|
161
|
+
let type = backgroundConfig["type"] as? String else {
|
|
162
|
+
return .dimmed(.black, 0.5)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
switch type {
|
|
166
|
+
case "dimmed":
|
|
167
|
+
let colorInput = backgroundConfig["color"] ?? "black"
|
|
168
|
+
let color = RCTConvert.uiColor(colorInput) ?? .black
|
|
169
|
+
let opacity = CGFloat(backgroundConfig["opacity"] as? Double ?? 0.5)
|
|
170
|
+
return .dimmed(color, opacity)
|
|
171
|
+
case "color":
|
|
172
|
+
let colorInput = backgroundConfig["color"] ?? "black"
|
|
173
|
+
let color = RCTConvert.uiColor(colorInput) ?? .black
|
|
174
|
+
return .color(color)
|
|
175
|
+
case "blur":
|
|
176
|
+
let styleString = backgroundConfig["blurEffectStyle"] as? String ?? "dark"
|
|
177
|
+
let blurStyle: UIBlurEffect.Style
|
|
178
|
+
switch styleString {
|
|
179
|
+
case "extraLight": blurStyle = .extraLight
|
|
180
|
+
case "light": blurStyle = .light
|
|
181
|
+
default: blurStyle = .dark
|
|
182
|
+
}
|
|
183
|
+
return .blur(blurStyle)
|
|
184
|
+
case "none":
|
|
185
|
+
return .none
|
|
186
|
+
default:
|
|
187
|
+
return .dimmed(.black, 0.5)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private func rectFromDictionary(_ dict: [String: Any], respectsSafeArea: Bool) -> CGRect? {
|
|
192
|
+
guard
|
|
193
|
+
let x = dict["x"] as? Double,
|
|
194
|
+
let y = dict["y"] as? Double,
|
|
195
|
+
let width = dict["width"] as? Double,
|
|
196
|
+
let height = dict["height"] as? Double
|
|
197
|
+
else {
|
|
198
|
+
return nil
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
let insets = respectsSafeArea ? currentSafeAreaInsets() : .zero
|
|
202
|
+
return CGRect(
|
|
203
|
+
x: CGFloat(x) + insets.left,
|
|
204
|
+
y: CGFloat(y) + insets.top,
|
|
205
|
+
width: CGFloat(width) - (insets.left + insets.right),
|
|
206
|
+
height: CGFloat(height) - (insets.top + insets.bottom)
|
|
207
|
+
)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private func currentSafeAreaInsets() -> UIEdgeInsets {
|
|
211
|
+
var insets: UIEdgeInsets = .zero
|
|
212
|
+
let work = {
|
|
213
|
+
if #available(iOS 13.0, *) {
|
|
214
|
+
let windowScene = UIApplication.shared.connectedScenes
|
|
215
|
+
.compactMap { $0 as? UIWindowScene }
|
|
216
|
+
.first { $0.activationState == .foregroundActive }
|
|
217
|
+
let window = windowScene?.windows.first { $0.isKeyWindow }
|
|
218
|
+
insets = window?.safeAreaInsets ?? .zero
|
|
219
|
+
} else {
|
|
220
|
+
insets = UIApplication.shared.keyWindow?.safeAreaInsets ?? .zero
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if Thread.isMainThread {
|
|
225
|
+
work()
|
|
226
|
+
} else {
|
|
227
|
+
DispatchQueue.main.sync { work() }
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return insets
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@objc(setUrlConfig:resolve:reject:)
|
|
122
234
|
func setUrlConfig(_ config: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
123
235
|
runOnMainThread { [self] in
|
|
124
236
|
do {
|
|
@@ -128,9 +240,10 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
128
240
|
let appName = config["appName"] as? String else {
|
|
129
241
|
throw NSError(domain: "CmSdkReactNativeV3", code: 0, userInfo: [NSLocalizedDescriptionKey: "Invalid config parameters"])
|
|
130
242
|
}
|
|
243
|
+
let noHash = config["noHash"] as? Bool ?? false
|
|
131
244
|
print("ID: \(id) - Domain: \(domain)")
|
|
132
245
|
|
|
133
|
-
let urlConfig = UrlConfig(id: id, domain: domain, language: language, appName: appName)
|
|
246
|
+
let urlConfig = UrlConfig(id: id, domain: domain, language: language, appName: appName, jsonConfig: nil, noHash: noHash)
|
|
134
247
|
print("urlConfig = \(urlConfig)")
|
|
135
248
|
self.cmpManager.setUrlConfig(urlConfig)
|
|
136
249
|
resolve(nil)
|
|
@@ -142,49 +255,45 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
142
255
|
|
|
143
256
|
// MARK: - New methods
|
|
144
257
|
|
|
145
|
-
@objc(setATTStatus:
|
|
258
|
+
@objc(setATTStatus:resolve:reject:)
|
|
146
259
|
func setATTStatus(_ status: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
147
260
|
cmpManager.setATTStatus(status.intValue)
|
|
148
261
|
resolve(nil)
|
|
149
262
|
}
|
|
150
263
|
|
|
151
|
-
@objc(getUserStatus:
|
|
264
|
+
@objc(getUserStatus:reject:)
|
|
152
265
|
func getUserStatus(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
resolve(response)
|
|
164
|
-
} catch {
|
|
165
|
-
reject("ERROR", "Failed to get user status: \(error.localizedDescription)", error)
|
|
166
|
-
}
|
|
266
|
+
let status = cmpManager.getUserStatus()
|
|
267
|
+
let response: [String: Any] = [
|
|
268
|
+
"status": status.status,
|
|
269
|
+
"vendors": status.vendors,
|
|
270
|
+
"purposes": status.purposes,
|
|
271
|
+
"tcf": status.tcf,
|
|
272
|
+
"addtlConsent": status.addtlConsent,
|
|
273
|
+
"regulation": status.regulation
|
|
274
|
+
]
|
|
275
|
+
resolve(response)
|
|
167
276
|
}
|
|
168
277
|
|
|
169
|
-
@objc(getStatusForPurpose:
|
|
278
|
+
@objc(getStatusForPurpose:resolve:reject:)
|
|
170
279
|
func getStatusForPurpose(_ purposeId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
171
280
|
let status = cmpManager.getStatusForPurpose(id: purposeId)
|
|
172
281
|
resolve(status.rawValue)
|
|
173
282
|
}
|
|
174
283
|
|
|
175
|
-
@objc(getStatusForVendor:
|
|
284
|
+
@objc(getStatusForVendor:resolve:reject:)
|
|
176
285
|
func getStatusForVendor(_ vendorId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
177
286
|
let status = cmpManager.getStatusForVendor(id: vendorId)
|
|
178
287
|
resolve(status.rawValue)
|
|
179
288
|
}
|
|
180
289
|
|
|
181
|
-
@objc(getGoogleConsentModeStatus:
|
|
290
|
+
@objc(getGoogleConsentModeStatus:reject:)
|
|
182
291
|
func getGoogleConsentModeStatus(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
183
292
|
let status = cmpManager.getGoogleConsentModeStatus()
|
|
184
293
|
resolve(status)
|
|
185
294
|
}
|
|
186
295
|
|
|
187
|
-
@objc(checkAndOpen:
|
|
296
|
+
@objc(checkAndOpen:resolve:reject:)
|
|
188
297
|
func checkAndOpen(_ jumpToSettings: Bool, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
189
298
|
cmpManager.checkAndOpen(jumpToSettings: jumpToSettings) { error in
|
|
190
299
|
if let error = error {
|
|
@@ -195,7 +304,7 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
195
304
|
}
|
|
196
305
|
}
|
|
197
306
|
|
|
198
|
-
@objc(forceOpen:
|
|
307
|
+
@objc(forceOpen:resolve:reject:)
|
|
199
308
|
func forceOpen(_ jumpToSettings: Bool, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
200
309
|
cmpManager.forceOpen(jumpToSettings: jumpToSettings) { error in
|
|
201
310
|
if let error = error {
|
|
@@ -206,41 +315,41 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
206
315
|
}
|
|
207
316
|
}
|
|
208
317
|
|
|
209
|
-
@objc(exportCMPInfo:
|
|
318
|
+
@objc(exportCMPInfo:reject:)
|
|
210
319
|
func exportCMPInfo(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
211
320
|
let info = self.cmpManager.exportCMPInfo()
|
|
212
321
|
resolve(info)
|
|
213
322
|
}
|
|
214
323
|
|
|
215
|
-
@objc(acceptVendors:
|
|
324
|
+
@objc(acceptVendors:resolve:reject:)
|
|
216
325
|
func acceptVendors(_ vendors: [String], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
217
326
|
self.cmpManager.acceptVendors(vendors) { success in
|
|
218
327
|
resolve(success)
|
|
219
328
|
}
|
|
220
329
|
}
|
|
221
330
|
|
|
222
|
-
@objc(rejectVendors:
|
|
331
|
+
@objc(rejectVendors:resolve:reject:)
|
|
223
332
|
func rejectVendors(_ vendors: [String], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
224
333
|
self.cmpManager.rejectVendors(vendors) { success in
|
|
225
334
|
resolve(success)
|
|
226
335
|
}
|
|
227
336
|
}
|
|
228
337
|
|
|
229
|
-
@objc(acceptPurposes:updatePurpose:
|
|
338
|
+
@objc(acceptPurposes:updatePurpose:resolve:reject:)
|
|
230
339
|
func acceptPurposes(_ purposes: [String], updatePurpose: Bool, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
231
340
|
self.cmpManager.acceptPurposes(purposes, updatePurpose: updatePurpose) { success in
|
|
232
341
|
resolve(success)
|
|
233
342
|
}
|
|
234
343
|
}
|
|
235
344
|
|
|
236
|
-
@objc(rejectPurposes:updateVendor:
|
|
345
|
+
@objc(rejectPurposes:updateVendor:resolve:reject:)
|
|
237
346
|
func rejectPurposes(_ purposes: [String], updateVendor: Bool, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
238
347
|
self.cmpManager.rejectPurposes(purposes, updateVendor: updateVendor) { success in
|
|
239
348
|
resolve(success)
|
|
240
349
|
}
|
|
241
350
|
}
|
|
242
351
|
|
|
243
|
-
@objc(rejectAll:
|
|
352
|
+
@objc(rejectAll:reject:)
|
|
244
353
|
func rejectAll(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
245
354
|
self.cmpManager.rejectAll { error in
|
|
246
355
|
if let error = error {
|
|
@@ -251,7 +360,7 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
251
360
|
}
|
|
252
361
|
}
|
|
253
362
|
|
|
254
|
-
@objc(acceptAll:
|
|
363
|
+
@objc(acceptAll:reject:)
|
|
255
364
|
func acceptAll(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
256
365
|
self.cmpManager.acceptAll { error in
|
|
257
366
|
if let error = error {
|
|
@@ -262,7 +371,7 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
262
371
|
}
|
|
263
372
|
}
|
|
264
373
|
|
|
265
|
-
@objc(importCMPInfo:
|
|
374
|
+
@objc(importCMPInfo:resolve:reject:)
|
|
266
375
|
func importCMPInfo(_ cmpString: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
267
376
|
self.cmpManager.importCMPInfo(cmpString) { error in
|
|
268
377
|
if let error = error {
|
|
@@ -273,17 +382,20 @@ class CmSdkReactNativeV3: RCTEventEmitter, CMPManagerDelegate {
|
|
|
273
382
|
}
|
|
274
383
|
}
|
|
275
384
|
|
|
276
|
-
@objc(resetConsentManagementData:
|
|
385
|
+
@objc(resetConsentManagementData:reject:)
|
|
277
386
|
func resetConsentManagementData(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
278
387
|
self.cmpManager.resetConsentManagementData(completion: { success in resolve(success)})
|
|
279
|
-
resolve(nil)
|
|
280
388
|
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
#if RCT_NEW_ARCH_ENABLED
|
|
284
|
-
import CmSdkReactNativeV3Spec
|
|
285
389
|
|
|
286
|
-
|
|
287
|
-
|
|
390
|
+
// MARK: - Event emitter methods
|
|
391
|
+
|
|
392
|
+
@objc(addListener:)
|
|
393
|
+
override func addListener(_ eventName: String) {
|
|
394
|
+
super.addListener(eventName)
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
@objc(removeListeners:)
|
|
398
|
+
override func removeListeners(_ count: Double) {
|
|
399
|
+
super.removeListeners(Double(Int(count)))
|
|
400
|
+
}
|
|
288
401
|
}
|
|
289
|
-
#endif
|
|
@@ -3,9 +3,39 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.default = exports.WebViewPosition = exports.BlurEffectStyle = exports.BackgroundStyleType = exports.ATTStatus = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
// Event payload types for better TypeScript support
|
|
9
9
|
// Additional type definitions for better TypeScript support
|
|
10
|
-
|
|
10
|
+
let WebViewPosition = exports.WebViewPosition = /*#__PURE__*/function (WebViewPosition) {
|
|
11
|
+
WebViewPosition["FullScreen"] = "fullScreen";
|
|
12
|
+
WebViewPosition["HalfScreenTop"] = "halfScreenTop";
|
|
13
|
+
WebViewPosition["HalfScreenBottom"] = "halfScreenBottom";
|
|
14
|
+
WebViewPosition["Custom"] = "custom";
|
|
15
|
+
return WebViewPosition;
|
|
16
|
+
}({});
|
|
17
|
+
let BackgroundStyleType = exports.BackgroundStyleType = /*#__PURE__*/function (BackgroundStyleType) {
|
|
18
|
+
BackgroundStyleType["Dimmed"] = "dimmed";
|
|
19
|
+
BackgroundStyleType["Color"] = "color";
|
|
20
|
+
BackgroundStyleType["Blur"] = "blur";
|
|
21
|
+
BackgroundStyleType["None"] = "none";
|
|
22
|
+
return BackgroundStyleType;
|
|
23
|
+
}({});
|
|
24
|
+
let BlurEffectStyle = exports.BlurEffectStyle = /*#__PURE__*/function (BlurEffectStyle) {
|
|
25
|
+
BlurEffectStyle["Light"] = "light";
|
|
26
|
+
BlurEffectStyle["Dark"] = "dark";
|
|
27
|
+
BlurEffectStyle["ExtraLight"] = "extraLight";
|
|
28
|
+
return BlurEffectStyle;
|
|
29
|
+
}({});
|
|
30
|
+
let ATTStatus = exports.ATTStatus = /*#__PURE__*/function (ATTStatus) {
|
|
31
|
+
ATTStatus[ATTStatus["NotDetermined"] = 0] = "NotDetermined";
|
|
32
|
+
ATTStatus[ATTStatus["Restricted"] = 1] = "Restricted";
|
|
33
|
+
ATTStatus[ATTStatus["Denied"] = 2] = "Denied";
|
|
34
|
+
ATTStatus[ATTStatus["Authorized"] = 3] = "Authorized";
|
|
35
|
+
return ATTStatus;
|
|
36
|
+
}({});
|
|
37
|
+
const {
|
|
38
|
+
CmSdkReactNativeV3
|
|
39
|
+
} = _reactNative.NativeModules;
|
|
40
|
+
var _default = exports.default = CmSdkReactNativeV3;
|
|
11
41
|
//# sourceMappingURL=NativeCmSdkReactNativeV3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","WebViewPosition","exports","BackgroundStyleType","BlurEffectStyle","ATTStatus","CmSdkReactNativeV3","NativeModules","_default","default"],"sourceRoot":"../../src","sources":["NativeCmSdkReactNativeV3.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AAoBA;AAAA,IASYC,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAcfE,mBAAmB,GAAAD,OAAA,CAAAC,mBAAA,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA;AAAA,IAOnBC,eAAe,GAAAF,OAAA,CAAAE,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAMfC,SAAS,GAAAH,OAAA,CAAAG,SAAA,0BAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAqErB,MAAM;EAAEC;AAAmB,CAAC,GAAGC,0BAAa;AAAC,IAAAC,QAAA,GAAAN,OAAA,CAAAO,OAAA,GAE9BH,kBAAkB","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,21 +3,46 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "ATTStatus", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _NativeCmSdkReactNativeV.ATTStatus;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
exports.BackgroundStyle = void 0;
|
|
13
|
+
Object.defineProperty(exports, "BackgroundStyleType", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _NativeCmSdkReactNativeV.BackgroundStyleType;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "BlurEffectStyle", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () {
|
|
22
|
+
return _NativeCmSdkReactNativeV.BlurEffectStyle;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "WebViewPosition", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return _NativeCmSdkReactNativeV.WebViewPosition;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
6
31
|
exports.setWebViewConfig = exports.setUrlConfig = exports.setATTStatus = exports.resetConsentManagementData = exports.rejectVendors = exports.rejectPurposes = exports.rejectAll = exports.importCMPInfo = exports.getUserStatus = exports.getStatusForVendor = exports.getStatusForPurpose = exports.getGoogleConsentModeStatus = exports.forceOpen = exports.exportCMPInfo = exports.default = exports.checkAndOpen = exports.addShowConsentLayerListener = exports.addErrorListener = exports.addConsentListener = exports.addCloseConsentLayerListener = exports.addClickLinkListener = exports.addATTStatusChangeListener = exports.acceptVendors = exports.acceptPurposes = exports.acceptAll = void 0;
|
|
7
32
|
var _reactNative = require("react-native");
|
|
8
|
-
var _NativeCmSdkReactNativeV =
|
|
9
|
-
function
|
|
33
|
+
var _NativeCmSdkReactNativeV = _interopRequireWildcard(require("./NativeCmSdkReactNativeV3.js"));
|
|
34
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
35
|
+
// Re-export enums/constants for consumers
|
|
36
|
+
|
|
10
37
|
const LINKING_ERROR = `The package 'react-native-cm-sdk-react-native-v3' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
|
|
11
38
|
ios: "- You have run 'pod install'\n",
|
|
12
39
|
default: ''
|
|
13
40
|
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
14
|
-
|
|
15
|
-
// Use TurboModule if available (New Architecture), fallback to legacy NativeModules
|
|
16
|
-
const CmSdkReactNativeV3 = _NativeCmSdkReactNativeV.default ?? (_reactNative.NativeModules.CmSdkReactNativeV3 ? _reactNative.NativeModules.CmSdkReactNativeV3 : new Proxy({}, {
|
|
41
|
+
const CmSdkReactNativeV3 = _NativeCmSdkReactNativeV.default ?? _reactNative.NativeModules.CmSdkReactNativeV3 ?? new Proxy({}, {
|
|
17
42
|
get() {
|
|
18
43
|
throw new Error(LINKING_ERROR);
|
|
19
44
|
}
|
|
20
|
-
})
|
|
45
|
+
});
|
|
21
46
|
const eventEmitter = new _reactNative.NativeEventEmitter(CmSdkReactNativeV3);
|
|
22
47
|
const addConsentListener = callback => {
|
|
23
48
|
return eventEmitter.addListener('didReceiveConsent', event => {
|
|
@@ -56,10 +81,15 @@ const setUrlConfig = config => {
|
|
|
56
81
|
};
|
|
57
82
|
exports.setUrlConfig = setUrlConfig;
|
|
58
83
|
const setWebViewConfig = config => {
|
|
59
|
-
|
|
84
|
+
const normalized = normalizeWebViewConfig(config);
|
|
85
|
+
return CmSdkReactNativeV3.setWebViewConfig(normalized);
|
|
60
86
|
};
|
|
61
87
|
exports.setWebViewConfig = setWebViewConfig;
|
|
62
88
|
const setATTStatus = status => {
|
|
89
|
+
const allowed = new Set([_NativeCmSdkReactNativeV.ATTStatus.NotDetermined, _NativeCmSdkReactNativeV.ATTStatus.Restricted, _NativeCmSdkReactNativeV.ATTStatus.Denied, _NativeCmSdkReactNativeV.ATTStatus.Authorized]);
|
|
90
|
+
if (!allowed.has(status)) {
|
|
91
|
+
throw new Error(`[cm-sdk-react-native-v3] Invalid ATT status ${status}. Use ATTStatus enum (0–3 from Apple's ATTrackingManagerAuthorizationStatus).`);
|
|
92
|
+
}
|
|
63
93
|
return CmSdkReactNativeV3.setATTStatus(status);
|
|
64
94
|
};
|
|
65
95
|
|
|
@@ -78,7 +108,87 @@ exports.forceOpen = forceOpen;
|
|
|
78
108
|
const getUserStatus = () => {
|
|
79
109
|
return CmSdkReactNativeV3.getUserStatus();
|
|
80
110
|
};
|
|
111
|
+
|
|
112
|
+
// Helpers
|
|
81
113
|
exports.getUserStatus = getUserStatus;
|
|
114
|
+
const normalizeWebViewConfig = config => {
|
|
115
|
+
const position = config.position ?? _NativeCmSdkReactNativeV.WebViewPosition.FullScreen;
|
|
116
|
+
const allowedPositions = [_NativeCmSdkReactNativeV.WebViewPosition.FullScreen, _NativeCmSdkReactNativeV.WebViewPosition.HalfScreenTop, _NativeCmSdkReactNativeV.WebViewPosition.HalfScreenBottom, _NativeCmSdkReactNativeV.WebViewPosition.Custom];
|
|
117
|
+
if (!allowedPositions.includes(position)) {
|
|
118
|
+
throw new Error(`Invalid WebView position: ${position}`);
|
|
119
|
+
}
|
|
120
|
+
if (position === _NativeCmSdkReactNativeV.WebViewPosition.Custom) {
|
|
121
|
+
if (!config.customRect) {
|
|
122
|
+
throw new Error('customRect is required when position is "custom"');
|
|
123
|
+
}
|
|
124
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
125
|
+
console.warn('[cm-sdk-react-native-v3] Android native SDK currently ignores customRect/position "custom"; it will fall back to full screen.');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const backgroundStyle = (() => {
|
|
129
|
+
if (!config.backgroundStyle) {
|
|
130
|
+
return {
|
|
131
|
+
type: _NativeCmSdkReactNativeV.BackgroundStyleType.Dimmed,
|
|
132
|
+
color: normalizeColor('black'),
|
|
133
|
+
opacity: 0.5
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
const {
|
|
137
|
+
type
|
|
138
|
+
} = config.backgroundStyle;
|
|
139
|
+
switch (type) {
|
|
140
|
+
case _NativeCmSdkReactNativeV.BackgroundStyleType.Dimmed:
|
|
141
|
+
return {
|
|
142
|
+
type,
|
|
143
|
+
color: normalizeColor(config.backgroundStyle.color ?? 'black'),
|
|
144
|
+
opacity: config.backgroundStyle.opacity ?? 0.5
|
|
145
|
+
};
|
|
146
|
+
case _NativeCmSdkReactNativeV.BackgroundStyleType.Color:
|
|
147
|
+
if (!config.backgroundStyle.color) throw new Error('color is required for backgroundStyle "color"');
|
|
148
|
+
return {
|
|
149
|
+
type,
|
|
150
|
+
color: normalizeColor(config.backgroundStyle.color)
|
|
151
|
+
};
|
|
152
|
+
case _NativeCmSdkReactNativeV.BackgroundStyleType.Blur:
|
|
153
|
+
{
|
|
154
|
+
const blurStyle = config.backgroundStyle.blurEffectStyle ?? (_reactNative.Platform.OS === 'ios' ? _NativeCmSdkReactNativeV.BlurEffectStyle.Dark : _NativeCmSdkReactNativeV.BlurEffectStyle.Dark);
|
|
155
|
+
if (blurStyle !== _NativeCmSdkReactNativeV.BlurEffectStyle.Dark && blurStyle !== _NativeCmSdkReactNativeV.BlurEffectStyle.Light && blurStyle !== _NativeCmSdkReactNativeV.BlurEffectStyle.ExtraLight) {
|
|
156
|
+
throw new Error(`Invalid blurEffectStyle: ${blurStyle}`);
|
|
157
|
+
}
|
|
158
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
159
|
+
console.warn('[cm-sdk-react-native-v3] Android native SDK currently ignores blur backgrounds; using dimmed.');
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
type,
|
|
163
|
+
blurEffectStyle: blurStyle
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
case _NativeCmSdkReactNativeV.BackgroundStyleType.None:
|
|
167
|
+
return {
|
|
168
|
+
type
|
|
169
|
+
};
|
|
170
|
+
default:
|
|
171
|
+
throw new Error(`Invalid backgroundStyle type: ${config.backgroundStyle.type}`);
|
|
172
|
+
}
|
|
173
|
+
})();
|
|
174
|
+
if (_reactNative.Platform.OS === 'android' && config.backgroundStyle) {
|
|
175
|
+
console.warn('[cm-sdk-react-native-v3] Android native SDK currently ignores backgroundStyle overrides; it always uses a dimmed background.');
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
position,
|
|
179
|
+
customRect: config.customRect,
|
|
180
|
+
cornerRadius: config.cornerRadius ?? 5,
|
|
181
|
+
respectsSafeArea: config.respectsSafeArea ?? true,
|
|
182
|
+
allowsOrientationChanges: config.allowsOrientationChanges ?? true,
|
|
183
|
+
backgroundStyle
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
const normalizeColor = color => {
|
|
187
|
+
if (color === undefined) return undefined;
|
|
188
|
+
const processed = (0, _reactNative.processColor)(color);
|
|
189
|
+
if (processed == null) throw new Error(`Invalid color value: ${color}`);
|
|
190
|
+
return processed;
|
|
191
|
+
};
|
|
82
192
|
const getStatusForPurpose = purposeId => {
|
|
83
193
|
return CmSdkReactNativeV3.getStatusForPurpose(purposeId);
|
|
84
194
|
};
|
|
@@ -131,5 +241,26 @@ const acceptAll = () => {
|
|
|
131
241
|
|
|
132
242
|
// Re-export types for consumer convenience
|
|
133
243
|
exports.acceptAll = acceptAll;
|
|
244
|
+
/**
|
|
245
|
+
* Helper factory to build strongly-typed background styles.
|
|
246
|
+
*/
|
|
247
|
+
const BackgroundStyle = exports.BackgroundStyle = {
|
|
248
|
+
dimmed: (color, opacity) => ({
|
|
249
|
+
type: _NativeCmSdkReactNativeV.BackgroundStyleType.Dimmed,
|
|
250
|
+
color,
|
|
251
|
+
opacity
|
|
252
|
+
}),
|
|
253
|
+
color: color => ({
|
|
254
|
+
type: _NativeCmSdkReactNativeV.BackgroundStyleType.Color,
|
|
255
|
+
color
|
|
256
|
+
}),
|
|
257
|
+
blur: (blurEffectStyle = _NativeCmSdkReactNativeV.BlurEffectStyle.Dark) => ({
|
|
258
|
+
type: _NativeCmSdkReactNativeV.BackgroundStyleType.Blur,
|
|
259
|
+
blurEffectStyle
|
|
260
|
+
}),
|
|
261
|
+
none: () => ({
|
|
262
|
+
type: _NativeCmSdkReactNativeV.BackgroundStyleType.None
|
|
263
|
+
})
|
|
264
|
+
};
|
|
134
265
|
var _default = exports.default = CmSdkReactNativeV3;
|
|
135
266
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_NativeCmSdkReactNativeV","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeCmSdkReactNativeV","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LINKING_ERROR","Platform","select","ios","CmSdkReactNativeV3","NativeCmSdkReactNativeV3","NativeModules","Proxy","Error","eventEmitter","NativeEventEmitter","addConsentListener","callback","addListener","event","consent","jsonObject","exports","addShowConsentLayerListener","addCloseConsentLayerListener","addErrorListener","error","addClickLinkListener","url","addATTStatusChangeListener","setUrlConfig","config","setWebViewConfig","normalized","normalizeWebViewConfig","setATTStatus","status","allowed","Set","ATTStatus","NotDetermined","Restricted","Denied","Authorized","checkAndOpen","jumpToSettings","forceOpen","getUserStatus","position","WebViewPosition","FullScreen","allowedPositions","HalfScreenTop","HalfScreenBottom","Custom","includes","customRect","OS","console","warn","backgroundStyle","type","BackgroundStyleType","Dimmed","color","normalizeColor","opacity","Color","Blur","blurStyle","blurEffectStyle","BlurEffectStyle","Dark","Light","ExtraLight","None","cornerRadius","respectsSafeArea","allowsOrientationChanges","undefined","processed","processColor","getStatusForPurpose","purposeId","getStatusForVendor","vendorId","getGoogleConsentModeStatus","exportCMPInfo","importCMPInfo","cmpString","resetConsentManagementData","acceptVendors","vendors","rejectVendors","acceptPurposes","purposes","updatePurpose","rejectPurposes","updateVendor","rejectAll","acceptAll","BackgroundStyle","dimmed","blur","none","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|