@osano/osano-cmp-react-native 0.9.0 → 0.11.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.
- package/lib/commonjs/components/Button.js +27 -12
- package/lib/commonjs/components/Button.js.map +1 -1
- package/lib/commonjs/locale/af.json +324 -321
- package/lib/commonjs/locale/ar.json +324 -321
- package/lib/commonjs/locale/bg.json +324 -321
- package/lib/commonjs/locale/ca.json +324 -321
- package/lib/commonjs/locale/cs.json +324 -321
- package/lib/commonjs/locale/da.json +324 -321
- package/lib/commonjs/locale/de-at.json +324 -321
- package/lib/commonjs/locale/de.json +324 -321
- package/lib/commonjs/locale/el.json +324 -321
- package/lib/commonjs/locale/en-au.json +324 -321
- package/lib/commonjs/locale/en-ca.json +324 -321
- package/lib/commonjs/locale/en-gb.json +324 -321
- package/lib/commonjs/locale/en.json +324 -321
- package/lib/commonjs/locale/es-mx.json +324 -321
- package/lib/commonjs/locale/es.json +324 -321
- package/lib/commonjs/locale/et.json +324 -321
- package/lib/commonjs/locale/fa.json +324 -321
- package/lib/commonjs/locale/fi.json +324 -321
- package/lib/commonjs/locale/fr-ca.json +324 -321
- package/lib/commonjs/locale/fr.json +324 -321
- package/lib/commonjs/locale/gd.json +324 -321
- package/lib/commonjs/locale/he.json +324 -321
- package/lib/commonjs/locale/hi.json +324 -321
- package/lib/commonjs/locale/hr.json +324 -321
- package/lib/commonjs/locale/hu.json +324 -321
- package/lib/commonjs/locale/hy.json +324 -321
- package/lib/commonjs/locale/id.json +324 -321
- package/lib/commonjs/locale/is.json +324 -321
- package/lib/commonjs/locale/it.json +324 -321
- package/lib/commonjs/locale/ja.json +324 -321
- package/lib/commonjs/locale/kk.json +324 -321
- package/lib/commonjs/locale/ko.json +324 -321
- package/lib/commonjs/locale/lt.json +324 -321
- package/lib/commonjs/locale/lv.json +324 -321
- package/lib/commonjs/locale/mi.json +324 -321
- package/lib/commonjs/locale/ms.json +324 -321
- package/lib/commonjs/locale/nb.json +324 -321
- package/lib/commonjs/locale/nl-be.json +324 -321
- package/lib/commonjs/locale/nl.json +324 -321
- package/lib/commonjs/locale/nn.json +324 -321
- package/lib/commonjs/locale/no.json +324 -321
- package/lib/commonjs/locale/pl.json +324 -321
- package/lib/commonjs/locale/pt-br.json +324 -321
- package/lib/commonjs/locale/pt.json +324 -321
- package/lib/commonjs/locale/ro.json +324 -321
- package/lib/commonjs/locale/ru.json +324 -321
- package/lib/commonjs/locale/sk.json +324 -321
- package/lib/commonjs/locale/sl.json +324 -321
- package/lib/commonjs/locale/sq.json +324 -321
- package/lib/commonjs/locale/sr.json +324 -321
- package/lib/commonjs/locale/sv.json +324 -321
- package/lib/commonjs/locale/th.json +324 -321
- package/lib/commonjs/locale/tl.json +324 -321
- package/lib/commonjs/locale/tr.json +324 -321
- package/lib/commonjs/locale/uk.json +324 -321
- package/lib/commonjs/locale/vi.json +324 -321
- package/lib/commonjs/locale/zh-hk.json +324 -321
- package/lib/commonjs/locale/zh-tw.json +324 -321
- package/lib/commonjs/locale/zh.json +324 -321
- package/lib/commonjs/locale/zu.json +324 -321
- package/lib/commonjs/views/Dialog/Message.js +2 -2
- package/lib/commonjs/views/Dialog/Message.js.map +1 -1
- package/lib/commonjs/views/Dialog/index.js +1 -0
- package/lib/commonjs/views/Dialog/index.js.map +1 -1
- package/lib/commonjs/views/Drawer/index.js +1 -0
- package/lib/commonjs/views/Drawer/index.js.map +1 -1
- package/lib/module/components/Button.js +27 -12
- package/lib/module/components/Button.js.map +1 -1
- package/lib/module/locale/af.json +324 -321
- package/lib/module/locale/ar.json +324 -321
- package/lib/module/locale/bg.json +324 -321
- package/lib/module/locale/ca.json +324 -321
- package/lib/module/locale/cs.json +324 -321
- package/lib/module/locale/da.json +324 -321
- package/lib/module/locale/de-at.json +324 -321
- package/lib/module/locale/de.json +324 -321
- package/lib/module/locale/el.json +324 -321
- package/lib/module/locale/en-au.json +324 -321
- package/lib/module/locale/en-ca.json +324 -321
- package/lib/module/locale/en-gb.json +324 -321
- package/lib/module/locale/en.json +324 -321
- package/lib/module/locale/es-mx.json +324 -321
- package/lib/module/locale/es.json +324 -321
- package/lib/module/locale/et.json +324 -321
- package/lib/module/locale/fa.json +324 -321
- package/lib/module/locale/fi.json +324 -321
- package/lib/module/locale/fr-ca.json +324 -321
- package/lib/module/locale/fr.json +324 -321
- package/lib/module/locale/gd.json +324 -321
- package/lib/module/locale/he.json +324 -321
- package/lib/module/locale/hi.json +324 -321
- package/lib/module/locale/hr.json +324 -321
- package/lib/module/locale/hu.json +324 -321
- package/lib/module/locale/hy.json +324 -321
- package/lib/module/locale/id.json +324 -321
- package/lib/module/locale/is.json +324 -321
- package/lib/module/locale/it.json +324 -321
- package/lib/module/locale/ja.json +324 -321
- package/lib/module/locale/kk.json +324 -321
- package/lib/module/locale/ko.json +324 -321
- package/lib/module/locale/lt.json +324 -321
- package/lib/module/locale/lv.json +324 -321
- package/lib/module/locale/mi.json +324 -321
- package/lib/module/locale/ms.json +324 -321
- package/lib/module/locale/nb.json +324 -321
- package/lib/module/locale/nl-be.json +324 -321
- package/lib/module/locale/nl.json +324 -321
- package/lib/module/locale/nn.json +324 -321
- package/lib/module/locale/no.json +324 -321
- package/lib/module/locale/pl.json +324 -321
- package/lib/module/locale/pt-br.json +324 -321
- package/lib/module/locale/pt.json +324 -321
- package/lib/module/locale/ro.json +324 -321
- package/lib/module/locale/ru.json +324 -321
- package/lib/module/locale/sk.json +324 -321
- package/lib/module/locale/sl.json +324 -321
- package/lib/module/locale/sq.json +324 -321
- package/lib/module/locale/sr.json +324 -321
- package/lib/module/locale/sv.json +324 -321
- package/lib/module/locale/th.json +324 -321
- package/lib/module/locale/tl.json +324 -321
- package/lib/module/locale/tr.json +324 -321
- package/lib/module/locale/uk.json +324 -321
- package/lib/module/locale/vi.json +324 -321
- package/lib/module/locale/zh-hk.json +324 -321
- package/lib/module/locale/zh-tw.json +324 -321
- package/lib/module/locale/zh.json +324 -321
- package/lib/module/locale/zu.json +324 -321
- package/lib/module/views/Dialog/Message.js +2 -2
- package/lib/module/views/Dialog/Message.js.map +1 -1
- package/lib/module/views/Dialog/index.js +1 -0
- package/lib/module/views/Dialog/index.js.map +1 -1
- package/lib/module/views/Drawer/index.js +1 -0
- package/lib/module/views/Drawer/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/components/Button.d.ts.map +1 -1
- package/lib/typescript/lib/commonjs/views/Dialog/index.d.ts.map +1 -1
- package/lib/typescript/lib/commonjs/views/Drawer/index.d.ts.map +1 -1
- package/lib/typescript/lib/module/components/Button.d.ts.map +1 -1
- package/lib/typescript/lib/module/views/Dialog/index.d.ts.map +1 -1
- package/lib/typescript/lib/module/views/Drawer/index.d.ts.map +1 -1
- package/lib/typescript/src/components/Button.d.ts.map +1 -1
- package/lib/typescript/src/iab/gpp/api.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/api.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/consent.d.ts +24 -0
- package/lib/typescript/src/iab/gpp/consent.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/constants.d.ts +37 -0
- package/lib/typescript/src/iab/gpp/constants.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/AbstractBase64UrlEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/AbstractBase64UrlEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/BooleanEncoder.d.ts +34 -0
- package/lib/typescript/src/iab/gpp/encoders/BooleanEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/CompressedBase64UrlEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/CompressedBase64UrlEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/DatetimeEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/DatetimeEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/EncodableOptimizedFixedRange.d.ts +16 -0
- package/lib/typescript/src/iab/gpp/encoders/EncodableOptimizedFixedRange.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerRangeEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerRangeEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedBitfieldEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedBitfieldEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIdBitMapEncoder.d.ts +6 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIdBitMapEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIntegerEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIntegerEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIntegerListEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIntegerListEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIntegerRangeEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedIntegerRangeEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedStringEncoder.d.ts +26 -0
- package/lib/typescript/src/iab/gpp/encoders/FixedStringEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/TraditionalBase64UrlEncoder.d.ts +28 -0
- package/lib/typescript/src/iab/gpp/encoders/TraditionalBase64UrlEncoder.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/errors.d.ts +19 -0
- package/lib/typescript/src/iab/gpp/encoders/errors.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/index.d.ts +16 -0
- package/lib/typescript/src/iab/gpp/encoders/index.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/encoders/types.d.ts +5 -0
- package/lib/typescript/src/iab/gpp/encoders/types.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/index.d.ts +10 -0
- package/lib/typescript/src/iab/gpp/index.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/reducer.d.ts +6 -0
- package/lib/typescript/src/iab/gpp/reducer.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/selectors.d.ts +6 -0
- package/lib/typescript/src/iab/gpp/selectors.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/types.d.ts +3 -0
- package/lib/typescript/src/iab/gpp/types.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/v1/constants.d.ts +9 -0
- package/lib/typescript/src/iab/gpp/v1/constants.d.ts.map +1 -0
- package/lib/typescript/src/iab/gpp/v1/index.d.ts +19 -0
- package/lib/typescript/src/iab/gpp/v1/index.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/api.d.ts +4 -0
- package/lib/typescript/src/iab/usp/api.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/consent.d.ts +13 -0
- package/lib/typescript/src/iab/usp/consent.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/constants.d.ts +77 -0
- package/lib/typescript/src/iab/usp/constants.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/index.d.ts +10 -0
- package/lib/typescript/src/iab/usp/index.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/reducer.d.ts +13 -0
- package/lib/typescript/src/iab/usp/reducer.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/selectors.d.ts +9 -0
- package/lib/typescript/src/iab/usp/selectors.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/types.d.ts +5 -0
- package/lib/typescript/src/iab/usp/types.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/v1/constants.d.ts +9 -0
- package/lib/typescript/src/iab/usp/v1/constants.d.ts.map +1 -0
- package/lib/typescript/src/iab/usp/v1/index.d.ts +16 -0
- package/lib/typescript/src/iab/usp/v1/index.d.ts.map +1 -0
- package/lib/typescript/src/views/Dialog/Message.d.ts.map +1 -1
- package/lib/typescript/src/views/Dialog/index.d.ts.map +1 -1
- package/lib/typescript/src/views/Drawer/index.d.ts.map +1 -1
- package/package.json +2 -6
- package/src/components/Button.tsx +22 -12
- package/src/iab/gpp/api.js +253 -0
- package/src/iab/gpp/consent.js +114 -0
- package/src/iab/gpp/constants.js +49 -0
- package/src/iab/gpp/encoders/AbstractBase64UrlEncoder.ts +89 -0
- package/src/iab/gpp/encoders/BooleanEncoder.ts +39 -0
- package/src/iab/gpp/encoders/CompressedBase64UrlEncoder.ts +41 -0
- package/src/iab/gpp/encoders/DatetimeEncoder.ts +46 -0
- package/src/iab/gpp/encoders/EncodableOptimizedFixedRange.ts +213 -0
- package/src/iab/gpp/encoders/FibonacciIntegerEncoder.ts +81 -0
- package/src/iab/gpp/encoders/FibonacciIntegerRangeEncoder.ts +122 -0
- package/src/iab/gpp/encoders/FixedBitfieldEncoder.ts +59 -0
- package/src/iab/gpp/encoders/FixedIdBitMapEncoder.ts +30 -0
- package/src/iab/gpp/encoders/FixedIntegerEncoder.ts +61 -0
- package/src/iab/gpp/encoders/FixedIntegerListEncoder.ts +87 -0
- package/src/iab/gpp/encoders/FixedIntegerRangeEncoder.ts +102 -0
- package/src/iab/gpp/encoders/FixedStringEncoder.ts +74 -0
- package/src/iab/gpp/encoders/LICENSE-IABTechLab +176 -0
- package/src/iab/gpp/encoders/TraditionalBase64UrlEncoder.ts +38 -0
- package/src/iab/gpp/encoders/errors.ts +41 -0
- package/src/iab/gpp/encoders/index.ts +15 -0
- package/src/iab/gpp/encoders/types.ts +5 -0
- package/src/iab/gpp/index.js +9 -0
- package/src/iab/gpp/reducer.js +7 -0
- package/src/iab/gpp/selectors.js +21 -0
- package/src/iab/gpp/types.ts +3 -0
- package/src/iab/gpp/v1/constants.js +7 -0
- package/src/iab/gpp/v1/index.js +73 -0
- package/src/iab/usp/api.js +56 -0
- package/src/iab/usp/consent.js +150 -0
- package/src/iab/usp/constants.js +40 -0
- package/src/iab/usp/index.js +9 -0
- package/src/iab/usp/reducer.js +107 -0
- package/src/iab/usp/selectors.js +31 -0
- package/src/iab/usp/types.ts +4 -0
- package/src/iab/usp/v1/constants.js +10 -0
- package/src/iab/usp/v1/index.js +54 -0
- package/src/locale/af.json +324 -321
- package/src/locale/ar.json +324 -321
- package/src/locale/bg.json +324 -321
- package/src/locale/ca.json +324 -321
- package/src/locale/cs.json +324 -321
- package/src/locale/da.json +324 -321
- package/src/locale/de-at.json +324 -321
- package/src/locale/de.json +324 -321
- package/src/locale/el.json +324 -321
- package/src/locale/en-au.json +324 -321
- package/src/locale/en-ca.json +324 -321
- package/src/locale/en-gb.json +324 -321
- package/src/locale/en.json +324 -321
- package/src/locale/es-mx.json +324 -321
- package/src/locale/es.json +324 -321
- package/src/locale/et.json +324 -321
- package/src/locale/fa.json +324 -321
- package/src/locale/fi.json +324 -321
- package/src/locale/fr-ca.json +324 -321
- package/src/locale/fr.json +324 -321
- package/src/locale/gd.json +324 -321
- package/src/locale/he.json +324 -321
- package/src/locale/hi.json +324 -321
- package/src/locale/hr.json +324 -321
- package/src/locale/hu.json +324 -321
- package/src/locale/hy.json +324 -321
- package/src/locale/id.json +324 -321
- package/src/locale/is.json +324 -321
- package/src/locale/it.json +324 -321
- package/src/locale/ja.json +324 -321
- package/src/locale/kk.json +324 -321
- package/src/locale/ko.json +324 -321
- package/src/locale/lt.json +324 -321
- package/src/locale/lv.json +324 -321
- package/src/locale/mi.json +324 -321
- package/src/locale/ms.json +324 -321
- package/src/locale/nb.json +324 -321
- package/src/locale/nl-be.json +324 -321
- package/src/locale/nl.json +324 -321
- package/src/locale/nn.json +324 -321
- package/src/locale/no.json +324 -321
- package/src/locale/pl.json +324 -321
- package/src/locale/pt-br.json +324 -321
- package/src/locale/pt.json +324 -321
- package/src/locale/ro.json +324 -321
- package/src/locale/ru.json +324 -321
- package/src/locale/sk.json +324 -321
- package/src/locale/sl.json +324 -321
- package/src/locale/sq.json +324 -321
- package/src/locale/sr.json +324 -321
- package/src/locale/sv.json +324 -321
- package/src/locale/th.json +324 -321
- package/src/locale/tl.json +324 -321
- package/src/locale/tr.json +324 -321
- package/src/locale/uk.json +324 -321
- package/src/locale/vi.json +324 -321
- package/src/locale/zh-hk.json +324 -321
- package/src/locale/zh-tw.json +324 -321
- package/src/locale/zh.json +324 -321
- package/src/locale/zu.json +324 -321
- package/src/views/Dialog/Message.tsx +2 -1
- package/src/views/Dialog/index.tsx +1 -0
- package/src/views/Drawer/index.tsx +1 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { doesCCPAApply, getConsentString, getStore } from './selectors';
|
|
2
|
+
import { toBoolFromYesNoUn, toYesNoUnFromBool } from './constants';
|
|
3
|
+
|
|
4
|
+
import { merge } from '../../utils';
|
|
5
|
+
|
|
6
|
+
export const makeParseConsentString =
|
|
7
|
+
({ version: providedVersion = 1 } = {}) =>
|
|
8
|
+
uspString => {
|
|
9
|
+
const [version = providedVersion, notified, optOut, signatory] = (
|
|
10
|
+
uspString || ''
|
|
11
|
+
)
|
|
12
|
+
.split('')
|
|
13
|
+
.map((value, index) => {
|
|
14
|
+
if (index === 0) {
|
|
15
|
+
return isNaN(parseInt(value, 10))
|
|
16
|
+
? providedVersion
|
|
17
|
+
: parseInt(value, 10);
|
|
18
|
+
}
|
|
19
|
+
return toBoolFromYesNoUn(value);
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
version,
|
|
23
|
+
notified,
|
|
24
|
+
signatory,
|
|
25
|
+
optOut,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const makeGetField =
|
|
30
|
+
(initOptions = {}) =>
|
|
31
|
+
(state, field) => {
|
|
32
|
+
const [, notified, optOut, signatory] = getConsentString(
|
|
33
|
+
state,
|
|
34
|
+
initOptions,
|
|
35
|
+
).split('');
|
|
36
|
+
// These field names were found in the IAB GPP reference implementation
|
|
37
|
+
// README at
|
|
38
|
+
// https://github.com/IABTechLab/iabgpp-es/tree/42060d7ac2b6d0ee70fc1b5bcd33fc447bf5123c/modules/cmpapi
|
|
39
|
+
switch (field) {
|
|
40
|
+
case 'Version':
|
|
41
|
+
// This is always going to be 1 until the day this framework is
|
|
42
|
+
// removed so it's hardcoded
|
|
43
|
+
return 1;
|
|
44
|
+
case 'Notice':
|
|
45
|
+
return notified;
|
|
46
|
+
case 'OptOutSale':
|
|
47
|
+
return optOut;
|
|
48
|
+
case 'LspaCovered':
|
|
49
|
+
return signatory;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* USPAPI formatConsentString implementation
|
|
55
|
+
* @function
|
|
56
|
+
* @param {Object} data
|
|
57
|
+
* @returns {string} Properly formatted USPData string
|
|
58
|
+
*/
|
|
59
|
+
export const makeFormatConsentString =
|
|
60
|
+
(initOptions = {}) =>
|
|
61
|
+
(data, state) => {
|
|
62
|
+
const {
|
|
63
|
+
version: storeVersion,
|
|
64
|
+
notified: storeNotified,
|
|
65
|
+
optOut: storeOptOut,
|
|
66
|
+
signatory: storeSignatory,
|
|
67
|
+
} = makeParseConsentString(initOptions)(
|
|
68
|
+
getConsentString(state, initOptions),
|
|
69
|
+
);
|
|
70
|
+
const {
|
|
71
|
+
version = storeVersion,
|
|
72
|
+
notified = storeNotified,
|
|
73
|
+
optOut = storeOptOut,
|
|
74
|
+
signatory = storeSignatory,
|
|
75
|
+
} = merge(getStore(state), data);
|
|
76
|
+
const consents = [notified, optOut, signatory];
|
|
77
|
+
/*
|
|
78
|
+
if (version !== storeVersion) {
|
|
79
|
+
// TODO: apply logic for future versions
|
|
80
|
+
}
|
|
81
|
+
*/
|
|
82
|
+
return doesCCPAApply(state)
|
|
83
|
+
? `${parseInt(version.toString(), 10)}${consents
|
|
84
|
+
.map(toYesNoUnFromBool)
|
|
85
|
+
.join('')}`
|
|
86
|
+
: `${parseInt(version.toString(), 10)}---`;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* USPAPI consentFromOptions implementation
|
|
91
|
+
* @function
|
|
92
|
+
* @param {Object} data
|
|
93
|
+
* @returns {import('./constants').USPConsent} Properly formatted USPConsent object
|
|
94
|
+
*/
|
|
95
|
+
export const makeConsentFromOptions = initOptions => (data, state) => {
|
|
96
|
+
const {
|
|
97
|
+
version: storeVersion,
|
|
98
|
+
notified: storeNotified,
|
|
99
|
+
optOut: storeOptOut,
|
|
100
|
+
signatory: storeSignatory,
|
|
101
|
+
} = makeParseConsentString(initOptions)(getConsentString(state, initOptions));
|
|
102
|
+
/*
|
|
103
|
+
if (version !== storeVersion) {
|
|
104
|
+
// TODO: apply logic for future versions
|
|
105
|
+
}
|
|
106
|
+
*/
|
|
107
|
+
// We are going to set defaults if CCPA applies
|
|
108
|
+
const {
|
|
109
|
+
version = storeVersion,
|
|
110
|
+
notified = storeNotified,
|
|
111
|
+
optOut = storeOptOut,
|
|
112
|
+
signatory = storeSignatory,
|
|
113
|
+
} = merge(getStore(state), data);
|
|
114
|
+
return doesCCPAApply(state)
|
|
115
|
+
? {
|
|
116
|
+
version,
|
|
117
|
+
notified,
|
|
118
|
+
signatory,
|
|
119
|
+
optOut,
|
|
120
|
+
}
|
|
121
|
+
: { version };
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* USPAPI getConsentDataObject implementation
|
|
126
|
+
* @function
|
|
127
|
+
* @param {number} version
|
|
128
|
+
* @returns {import('./constants').USPData} Properly formatted USPData object
|
|
129
|
+
*/
|
|
130
|
+
export const getConsentDataObject = initOptions => state => {
|
|
131
|
+
const { version } = initOptions;
|
|
132
|
+
switch (version) {
|
|
133
|
+
// Supported versions
|
|
134
|
+
case 1: {
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
default: {
|
|
139
|
+
throw new Error('Unsupported version');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const consentString = makeFormatConsentString(initOptions)(
|
|
143
|
+
makeConsentFromOptions(initOptions)(undefined, state),
|
|
144
|
+
state,
|
|
145
|
+
);
|
|
146
|
+
return {
|
|
147
|
+
version,
|
|
148
|
+
uspString: consentString,
|
|
149
|
+
};
|
|
150
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* USPData object supplied to the __uspapi callback method
|
|
3
|
+
* @typedef {Object} USPData
|
|
4
|
+
* @property {number} version - indicates the U.S. Privacy spec version
|
|
5
|
+
* @property {(number|string)} uspString - Indicates the privacy application and agreement
|
|
6
|
+
* - String; agreement: “1YNN”, not applicable: “1---”
|
|
7
|
+
* - Number; 1 applies, 0 doesn’t apply, -1 not set
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* USPConsent object used for creating the USPData `uspString`
|
|
12
|
+
* @typedef {Object} USPConsent
|
|
13
|
+
* @property {number} version - indicates the U.S. Privacy spec version
|
|
14
|
+
* @property {(Boolean|undefined)} notified - Indicates that the end user has been notified of consent agreement
|
|
15
|
+
* @property {Boolean} optOut - Indicates that the end user has opted out of data resale
|
|
16
|
+
* @property {(Boolean|undefined)} signatory - Indicates that the provider has opted into the LSPA from IAB
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* USPAPIPostMessageData object
|
|
21
|
+
* @typedef {Object} USPAPIPostMessageData
|
|
22
|
+
* @property {string} command - The command to be executed by the API
|
|
23
|
+
* @property {string} parameter - Optional parameter to be passed to the `command`
|
|
24
|
+
* @property {number} version - The version number that the response should adhere to
|
|
25
|
+
* @property {string} callId - The callback method that should be called with the command result
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* USPAPIPostMessageEvent object supplied to the __uspapiLocator iframe postMessage handler
|
|
30
|
+
* @typedef {Object} USPAPIPostMessageEvent
|
|
31
|
+
* @property {(string|USPAPIPostMessageData)} data - The post message data as object or JSON string
|
|
32
|
+
* @property {string} origin - Indicates the origin of the window making the post
|
|
33
|
+
* @property {Window} source - The window which posted the message
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
export const toYesNoUnFromBool = b => (b === undefined ? '-' : b ? 'Y' : 'N');
|
|
37
|
+
export const toBoolFromYesNoUn = yn =>
|
|
38
|
+
yn === '-' || yn === undefined
|
|
39
|
+
? undefined
|
|
40
|
+
: !!((yn || 'N').toUpperCase() === 'Y');
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { ACCEPT, OPT_OUT, originalWindow } from '../../constants';
|
|
2
|
+
import { getSavedConsent, isGPCSupportEnabled } from '../../redux/selectors';
|
|
3
|
+
|
|
4
|
+
import { types as ActionTypes } from '../../redux/actions';
|
|
5
|
+
import { genericReducer } from '../../redux/helpers';
|
|
6
|
+
import { merge } from '../../utils';
|
|
7
|
+
|
|
8
|
+
export const initialState = {
|
|
9
|
+
iab: {
|
|
10
|
+
usp: {
|
|
11
|
+
ccpaApplies: false,
|
|
12
|
+
notified: undefined,
|
|
13
|
+
signatory: undefined,
|
|
14
|
+
optOut: false,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const updateOptions = (state, options) => {
|
|
20
|
+
const { config } = options || {};
|
|
21
|
+
// Country code is getting string replaced, so we pull it from the original state
|
|
22
|
+
const { config: { jurisdiction: oldJurisdiction } = {} } = state;
|
|
23
|
+
// Use a provided jurisdiction and default to the original
|
|
24
|
+
const { jurisdiction = oldJurisdiction } = config || {};
|
|
25
|
+
const {
|
|
26
|
+
ccpaApplies: providedCCPA = `${jurisdiction || ''}`
|
|
27
|
+
.toLowerCase()
|
|
28
|
+
.substring(0, 2) === 'us',
|
|
29
|
+
} = config || {};
|
|
30
|
+
|
|
31
|
+
const newState = merge(
|
|
32
|
+
{ ...state },
|
|
33
|
+
{
|
|
34
|
+
iab: {
|
|
35
|
+
usp: {
|
|
36
|
+
ccpaApplies: providedCCPA,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
return newState;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const formatOptOut = (state, acceptOrDeny) => {
|
|
46
|
+
return isGPCSupportEnabled(state)
|
|
47
|
+
? !!originalWindow.navigator.globalPrivacyControl
|
|
48
|
+
: acceptOrDeny === ACCEPT || acceptOrDeny === true;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export default genericReducer(initialState, {
|
|
52
|
+
[ActionTypes.init]: updateOptions,
|
|
53
|
+
[ActionTypes.updateConfig]: (state, config) =>
|
|
54
|
+
updateOptions(state, { config }),
|
|
55
|
+
[ActionTypes.setConsent]: (state, { category, acceptOrDeny }) => {
|
|
56
|
+
if (typeof category === 'object' && category[`${OPT_OUT}`]) {
|
|
57
|
+
// Only populate the consent items we are using
|
|
58
|
+
return merge(
|
|
59
|
+
{ ...state },
|
|
60
|
+
{
|
|
61
|
+
iab: { usp: { optOut: formatOptOut(state, category[`${OPT_OUT}`]) } },
|
|
62
|
+
},
|
|
63
|
+
);
|
|
64
|
+
} else if (typeof category === 'string' && category === OPT_OUT) {
|
|
65
|
+
return merge(
|
|
66
|
+
{
|
|
67
|
+
...state,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
iab: { usp: { optOut: formatOptOut(state, acceptOrDeny) } },
|
|
71
|
+
},
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
return state;
|
|
75
|
+
},
|
|
76
|
+
[ActionTypes.revertConsent]: state => {
|
|
77
|
+
const { [OPT_OUT]: optOut } = getSavedConsent(state) || {};
|
|
78
|
+
return merge(
|
|
79
|
+
{
|
|
80
|
+
...state,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
iab: { usp: { optOut: formatOptOut(state, optOut) } },
|
|
84
|
+
},
|
|
85
|
+
);
|
|
86
|
+
},
|
|
87
|
+
[ActionTypes.acceptAllConsent]: state =>
|
|
88
|
+
merge(
|
|
89
|
+
{
|
|
90
|
+
...state,
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
// Must be opposite because accepting is denying optOut
|
|
94
|
+
iab: { usp: { optOut: formatOptOut(state, false) } },
|
|
95
|
+
},
|
|
96
|
+
),
|
|
97
|
+
[ActionTypes.denyAllConsent]: state =>
|
|
98
|
+
merge(
|
|
99
|
+
{
|
|
100
|
+
...state,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
// Must be opposite because denying is accepting optOut
|
|
104
|
+
iab: { usp: { optOut: formatOptOut(state, true) } },
|
|
105
|
+
},
|
|
106
|
+
),
|
|
107
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { get } from '../../utils';
|
|
2
|
+
import { isBrowsingFromUS } from '../../redux/selectors';
|
|
3
|
+
import { toYesNoUnFromBool } from './constants';
|
|
4
|
+
|
|
5
|
+
export const DOMAIN = 'iab.usp';
|
|
6
|
+
|
|
7
|
+
export const getStore = state => get(state, DOMAIN, {});
|
|
8
|
+
export const doesCCPAApply = state =>
|
|
9
|
+
!!get(state, 'iab.usp.ccpaApplies', isBrowsingFromUS(state));
|
|
10
|
+
|
|
11
|
+
export const getConsentString = (
|
|
12
|
+
state,
|
|
13
|
+
{ gppSection, version: providedVersion } = {},
|
|
14
|
+
) => {
|
|
15
|
+
const savedString = get(state, ['iab', 'consentStrings', gppSection]);
|
|
16
|
+
if (savedString) {
|
|
17
|
+
return savedString;
|
|
18
|
+
}
|
|
19
|
+
const { notified, signatory, optOut } = getStore(state);
|
|
20
|
+
const consents = [notified, optOut, signatory];
|
|
21
|
+
const version = isNaN(parseInt(providedVersion, 10))
|
|
22
|
+
? 1
|
|
23
|
+
: parseInt(providedVersion, 10);
|
|
24
|
+
|
|
25
|
+
return doesCCPAApply(state)
|
|
26
|
+
? `${parseInt(version.toString(), 10)}${consents
|
|
27
|
+
.map(toYesNoUnFromBool)
|
|
28
|
+
.join('')}`
|
|
29
|
+
: `${parseInt(version.toString(), 10)}---`;
|
|
30
|
+
};
|
|
31
|
+
export const getOptOut = state => getStore(state).optOut;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const apiName = '__uspapi';
|
|
2
|
+
// gppSection is the key in redux state that stores the consent string.
|
|
3
|
+
export const gppSection = 'uspv1';
|
|
4
|
+
export const iframeName = '__uspapiLocator';
|
|
5
|
+
export const version = 1;
|
|
6
|
+
|
|
7
|
+
export const initOptions = {
|
|
8
|
+
gppSection,
|
|
9
|
+
version,
|
|
10
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ACCEPT, DENY, OPT_OUT } from '../../../constants';
|
|
2
|
+
import { apiName, gppSection, iframeName, initOptions } from './constants';
|
|
3
|
+
import { makeConsentFromOptions, makeFormatConsentString } from '../consent';
|
|
4
|
+
|
|
5
|
+
import { types as ActionTypes } from '../../../redux/actions';
|
|
6
|
+
import { getConsent } from '../../../redux/selectors';
|
|
7
|
+
import makeApi from '../api';
|
|
8
|
+
import postMessageEventHandler from '../../iframe';
|
|
9
|
+
import { setConsentData } from '../../actions';
|
|
10
|
+
|
|
11
|
+
const consentFromOptions = makeConsentFromOptions(initOptions);
|
|
12
|
+
const formatConsentString = makeFormatConsentString(initOptions);
|
|
13
|
+
|
|
14
|
+
function createMiddleware() {
|
|
15
|
+
return store => next => action => {
|
|
16
|
+
const result = next(action);
|
|
17
|
+
const { type } = action;
|
|
18
|
+
const state = store.getState();
|
|
19
|
+
switch (type) {
|
|
20
|
+
case ActionTypes.saveConsent: {
|
|
21
|
+
const { [OPT_OUT]: optOut } = getConsent(state);
|
|
22
|
+
const consentString = formatConsentString(
|
|
23
|
+
consentFromOptions(
|
|
24
|
+
{ optOut: optOut === ACCEPT ? true : false },
|
|
25
|
+
state,
|
|
26
|
+
),
|
|
27
|
+
state,
|
|
28
|
+
);
|
|
29
|
+
store.dispatch(setConsentData(gppSection, consentString));
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
case ActionTypes.clearConsent: {
|
|
33
|
+
const consentString = formatConsentString(
|
|
34
|
+
consentFromOptions({ optOut: DENY }, state),
|
|
35
|
+
state,
|
|
36
|
+
);
|
|
37
|
+
store.dispatch(setConsentData(gppSection, consentString));
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const v1 = {
|
|
46
|
+
api: makeApi(initOptions),
|
|
47
|
+
apiName,
|
|
48
|
+
createMiddleware,
|
|
49
|
+
gppSection,
|
|
50
|
+
iframeName,
|
|
51
|
+
postMessageEventHandler: postMessageEventHandler(apiName, true),
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default v1;
|