@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.
Files changed (317) hide show
  1. package/lib/commonjs/components/Button.js +27 -12
  2. package/lib/commonjs/components/Button.js.map +1 -1
  3. package/lib/commonjs/locale/af.json +324 -321
  4. package/lib/commonjs/locale/ar.json +324 -321
  5. package/lib/commonjs/locale/bg.json +324 -321
  6. package/lib/commonjs/locale/ca.json +324 -321
  7. package/lib/commonjs/locale/cs.json +324 -321
  8. package/lib/commonjs/locale/da.json +324 -321
  9. package/lib/commonjs/locale/de-at.json +324 -321
  10. package/lib/commonjs/locale/de.json +324 -321
  11. package/lib/commonjs/locale/el.json +324 -321
  12. package/lib/commonjs/locale/en-au.json +324 -321
  13. package/lib/commonjs/locale/en-ca.json +324 -321
  14. package/lib/commonjs/locale/en-gb.json +324 -321
  15. package/lib/commonjs/locale/en.json +324 -321
  16. package/lib/commonjs/locale/es-mx.json +324 -321
  17. package/lib/commonjs/locale/es.json +324 -321
  18. package/lib/commonjs/locale/et.json +324 -321
  19. package/lib/commonjs/locale/fa.json +324 -321
  20. package/lib/commonjs/locale/fi.json +324 -321
  21. package/lib/commonjs/locale/fr-ca.json +324 -321
  22. package/lib/commonjs/locale/fr.json +324 -321
  23. package/lib/commonjs/locale/gd.json +324 -321
  24. package/lib/commonjs/locale/he.json +324 -321
  25. package/lib/commonjs/locale/hi.json +324 -321
  26. package/lib/commonjs/locale/hr.json +324 -321
  27. package/lib/commonjs/locale/hu.json +324 -321
  28. package/lib/commonjs/locale/hy.json +324 -321
  29. package/lib/commonjs/locale/id.json +324 -321
  30. package/lib/commonjs/locale/is.json +324 -321
  31. package/lib/commonjs/locale/it.json +324 -321
  32. package/lib/commonjs/locale/ja.json +324 -321
  33. package/lib/commonjs/locale/kk.json +324 -321
  34. package/lib/commonjs/locale/ko.json +324 -321
  35. package/lib/commonjs/locale/lt.json +324 -321
  36. package/lib/commonjs/locale/lv.json +324 -321
  37. package/lib/commonjs/locale/mi.json +324 -321
  38. package/lib/commonjs/locale/ms.json +324 -321
  39. package/lib/commonjs/locale/nb.json +324 -321
  40. package/lib/commonjs/locale/nl-be.json +324 -321
  41. package/lib/commonjs/locale/nl.json +324 -321
  42. package/lib/commonjs/locale/nn.json +324 -321
  43. package/lib/commonjs/locale/no.json +324 -321
  44. package/lib/commonjs/locale/pl.json +324 -321
  45. package/lib/commonjs/locale/pt-br.json +324 -321
  46. package/lib/commonjs/locale/pt.json +324 -321
  47. package/lib/commonjs/locale/ro.json +324 -321
  48. package/lib/commonjs/locale/ru.json +324 -321
  49. package/lib/commonjs/locale/sk.json +324 -321
  50. package/lib/commonjs/locale/sl.json +324 -321
  51. package/lib/commonjs/locale/sq.json +324 -321
  52. package/lib/commonjs/locale/sr.json +324 -321
  53. package/lib/commonjs/locale/sv.json +324 -321
  54. package/lib/commonjs/locale/th.json +324 -321
  55. package/lib/commonjs/locale/tl.json +324 -321
  56. package/lib/commonjs/locale/tr.json +324 -321
  57. package/lib/commonjs/locale/uk.json +324 -321
  58. package/lib/commonjs/locale/vi.json +324 -321
  59. package/lib/commonjs/locale/zh-hk.json +324 -321
  60. package/lib/commonjs/locale/zh-tw.json +324 -321
  61. package/lib/commonjs/locale/zh.json +324 -321
  62. package/lib/commonjs/locale/zu.json +324 -321
  63. package/lib/commonjs/views/Dialog/Message.js +2 -2
  64. package/lib/commonjs/views/Dialog/Message.js.map +1 -1
  65. package/lib/commonjs/views/Dialog/index.js +1 -0
  66. package/lib/commonjs/views/Dialog/index.js.map +1 -1
  67. package/lib/commonjs/views/Drawer/index.js +1 -0
  68. package/lib/commonjs/views/Drawer/index.js.map +1 -1
  69. package/lib/module/components/Button.js +27 -12
  70. package/lib/module/components/Button.js.map +1 -1
  71. package/lib/module/locale/af.json +324 -321
  72. package/lib/module/locale/ar.json +324 -321
  73. package/lib/module/locale/bg.json +324 -321
  74. package/lib/module/locale/ca.json +324 -321
  75. package/lib/module/locale/cs.json +324 -321
  76. package/lib/module/locale/da.json +324 -321
  77. package/lib/module/locale/de-at.json +324 -321
  78. package/lib/module/locale/de.json +324 -321
  79. package/lib/module/locale/el.json +324 -321
  80. package/lib/module/locale/en-au.json +324 -321
  81. package/lib/module/locale/en-ca.json +324 -321
  82. package/lib/module/locale/en-gb.json +324 -321
  83. package/lib/module/locale/en.json +324 -321
  84. package/lib/module/locale/es-mx.json +324 -321
  85. package/lib/module/locale/es.json +324 -321
  86. package/lib/module/locale/et.json +324 -321
  87. package/lib/module/locale/fa.json +324 -321
  88. package/lib/module/locale/fi.json +324 -321
  89. package/lib/module/locale/fr-ca.json +324 -321
  90. package/lib/module/locale/fr.json +324 -321
  91. package/lib/module/locale/gd.json +324 -321
  92. package/lib/module/locale/he.json +324 -321
  93. package/lib/module/locale/hi.json +324 -321
  94. package/lib/module/locale/hr.json +324 -321
  95. package/lib/module/locale/hu.json +324 -321
  96. package/lib/module/locale/hy.json +324 -321
  97. package/lib/module/locale/id.json +324 -321
  98. package/lib/module/locale/is.json +324 -321
  99. package/lib/module/locale/it.json +324 -321
  100. package/lib/module/locale/ja.json +324 -321
  101. package/lib/module/locale/kk.json +324 -321
  102. package/lib/module/locale/ko.json +324 -321
  103. package/lib/module/locale/lt.json +324 -321
  104. package/lib/module/locale/lv.json +324 -321
  105. package/lib/module/locale/mi.json +324 -321
  106. package/lib/module/locale/ms.json +324 -321
  107. package/lib/module/locale/nb.json +324 -321
  108. package/lib/module/locale/nl-be.json +324 -321
  109. package/lib/module/locale/nl.json +324 -321
  110. package/lib/module/locale/nn.json +324 -321
  111. package/lib/module/locale/no.json +324 -321
  112. package/lib/module/locale/pl.json +324 -321
  113. package/lib/module/locale/pt-br.json +324 -321
  114. package/lib/module/locale/pt.json +324 -321
  115. package/lib/module/locale/ro.json +324 -321
  116. package/lib/module/locale/ru.json +324 -321
  117. package/lib/module/locale/sk.json +324 -321
  118. package/lib/module/locale/sl.json +324 -321
  119. package/lib/module/locale/sq.json +324 -321
  120. package/lib/module/locale/sr.json +324 -321
  121. package/lib/module/locale/sv.json +324 -321
  122. package/lib/module/locale/th.json +324 -321
  123. package/lib/module/locale/tl.json +324 -321
  124. package/lib/module/locale/tr.json +324 -321
  125. package/lib/module/locale/uk.json +324 -321
  126. package/lib/module/locale/vi.json +324 -321
  127. package/lib/module/locale/zh-hk.json +324 -321
  128. package/lib/module/locale/zh-tw.json +324 -321
  129. package/lib/module/locale/zh.json +324 -321
  130. package/lib/module/locale/zu.json +324 -321
  131. package/lib/module/views/Dialog/Message.js +2 -2
  132. package/lib/module/views/Dialog/Message.js.map +1 -1
  133. package/lib/module/views/Dialog/index.js +1 -0
  134. package/lib/module/views/Dialog/index.js.map +1 -1
  135. package/lib/module/views/Drawer/index.js +1 -0
  136. package/lib/module/views/Drawer/index.js.map +1 -1
  137. package/lib/typescript/lib/commonjs/components/Button.d.ts.map +1 -1
  138. package/lib/typescript/lib/commonjs/views/Dialog/index.d.ts.map +1 -1
  139. package/lib/typescript/lib/commonjs/views/Drawer/index.d.ts.map +1 -1
  140. package/lib/typescript/lib/module/components/Button.d.ts.map +1 -1
  141. package/lib/typescript/lib/module/views/Dialog/index.d.ts.map +1 -1
  142. package/lib/typescript/lib/module/views/Drawer/index.d.ts.map +1 -1
  143. package/lib/typescript/src/components/Button.d.ts.map +1 -1
  144. package/lib/typescript/src/iab/gpp/api.d.ts +28 -0
  145. package/lib/typescript/src/iab/gpp/api.d.ts.map +1 -0
  146. package/lib/typescript/src/iab/gpp/consent.d.ts +24 -0
  147. package/lib/typescript/src/iab/gpp/consent.d.ts.map +1 -0
  148. package/lib/typescript/src/iab/gpp/constants.d.ts +37 -0
  149. package/lib/typescript/src/iab/gpp/constants.d.ts.map +1 -0
  150. package/lib/typescript/src/iab/gpp/encoders/AbstractBase64UrlEncoder.d.ts +28 -0
  151. package/lib/typescript/src/iab/gpp/encoders/AbstractBase64UrlEncoder.d.ts.map +1 -0
  152. package/lib/typescript/src/iab/gpp/encoders/BooleanEncoder.d.ts +34 -0
  153. package/lib/typescript/src/iab/gpp/encoders/BooleanEncoder.d.ts.map +1 -0
  154. package/lib/typescript/src/iab/gpp/encoders/CompressedBase64UrlEncoder.d.ts +28 -0
  155. package/lib/typescript/src/iab/gpp/encoders/CompressedBase64UrlEncoder.d.ts.map +1 -0
  156. package/lib/typescript/src/iab/gpp/encoders/DatetimeEncoder.d.ts +28 -0
  157. package/lib/typescript/src/iab/gpp/encoders/DatetimeEncoder.d.ts.map +1 -0
  158. package/lib/typescript/src/iab/gpp/encoders/EncodableOptimizedFixedRange.d.ts +16 -0
  159. package/lib/typescript/src/iab/gpp/encoders/EncodableOptimizedFixedRange.d.ts.map +1 -0
  160. package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerEncoder.d.ts +28 -0
  161. package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerEncoder.d.ts.map +1 -0
  162. package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerRangeEncoder.d.ts +28 -0
  163. package/lib/typescript/src/iab/gpp/encoders/FibonacciIntegerRangeEncoder.d.ts.map +1 -0
  164. package/lib/typescript/src/iab/gpp/encoders/FixedBitfieldEncoder.d.ts +28 -0
  165. package/lib/typescript/src/iab/gpp/encoders/FixedBitfieldEncoder.d.ts.map +1 -0
  166. package/lib/typescript/src/iab/gpp/encoders/FixedIdBitMapEncoder.d.ts +6 -0
  167. package/lib/typescript/src/iab/gpp/encoders/FixedIdBitMapEncoder.d.ts.map +1 -0
  168. package/lib/typescript/src/iab/gpp/encoders/FixedIntegerEncoder.d.ts +28 -0
  169. package/lib/typescript/src/iab/gpp/encoders/FixedIntegerEncoder.d.ts.map +1 -0
  170. package/lib/typescript/src/iab/gpp/encoders/FixedIntegerListEncoder.d.ts +28 -0
  171. package/lib/typescript/src/iab/gpp/encoders/FixedIntegerListEncoder.d.ts.map +1 -0
  172. package/lib/typescript/src/iab/gpp/encoders/FixedIntegerRangeEncoder.d.ts +28 -0
  173. package/lib/typescript/src/iab/gpp/encoders/FixedIntegerRangeEncoder.d.ts.map +1 -0
  174. package/lib/typescript/src/iab/gpp/encoders/FixedStringEncoder.d.ts +26 -0
  175. package/lib/typescript/src/iab/gpp/encoders/FixedStringEncoder.d.ts.map +1 -0
  176. package/lib/typescript/src/iab/gpp/encoders/TraditionalBase64UrlEncoder.d.ts +28 -0
  177. package/lib/typescript/src/iab/gpp/encoders/TraditionalBase64UrlEncoder.d.ts.map +1 -0
  178. package/lib/typescript/src/iab/gpp/encoders/errors.d.ts +19 -0
  179. package/lib/typescript/src/iab/gpp/encoders/errors.d.ts.map +1 -0
  180. package/lib/typescript/src/iab/gpp/encoders/index.d.ts +16 -0
  181. package/lib/typescript/src/iab/gpp/encoders/index.d.ts.map +1 -0
  182. package/lib/typescript/src/iab/gpp/encoders/types.d.ts +5 -0
  183. package/lib/typescript/src/iab/gpp/encoders/types.d.ts.map +1 -0
  184. package/lib/typescript/src/iab/gpp/index.d.ts +10 -0
  185. package/lib/typescript/src/iab/gpp/index.d.ts.map +1 -0
  186. package/lib/typescript/src/iab/gpp/reducer.d.ts +6 -0
  187. package/lib/typescript/src/iab/gpp/reducer.d.ts.map +1 -0
  188. package/lib/typescript/src/iab/gpp/selectors.d.ts +6 -0
  189. package/lib/typescript/src/iab/gpp/selectors.d.ts.map +1 -0
  190. package/lib/typescript/src/iab/gpp/types.d.ts +3 -0
  191. package/lib/typescript/src/iab/gpp/types.d.ts.map +1 -0
  192. package/lib/typescript/src/iab/gpp/v1/constants.d.ts +9 -0
  193. package/lib/typescript/src/iab/gpp/v1/constants.d.ts.map +1 -0
  194. package/lib/typescript/src/iab/gpp/v1/index.d.ts +19 -0
  195. package/lib/typescript/src/iab/gpp/v1/index.d.ts.map +1 -0
  196. package/lib/typescript/src/iab/usp/api.d.ts +4 -0
  197. package/lib/typescript/src/iab/usp/api.d.ts.map +1 -0
  198. package/lib/typescript/src/iab/usp/consent.d.ts +13 -0
  199. package/lib/typescript/src/iab/usp/consent.d.ts.map +1 -0
  200. package/lib/typescript/src/iab/usp/constants.d.ts +77 -0
  201. package/lib/typescript/src/iab/usp/constants.d.ts.map +1 -0
  202. package/lib/typescript/src/iab/usp/index.d.ts +10 -0
  203. package/lib/typescript/src/iab/usp/index.d.ts.map +1 -0
  204. package/lib/typescript/src/iab/usp/reducer.d.ts +13 -0
  205. package/lib/typescript/src/iab/usp/reducer.d.ts.map +1 -0
  206. package/lib/typescript/src/iab/usp/selectors.d.ts +9 -0
  207. package/lib/typescript/src/iab/usp/selectors.d.ts.map +1 -0
  208. package/lib/typescript/src/iab/usp/types.d.ts +5 -0
  209. package/lib/typescript/src/iab/usp/types.d.ts.map +1 -0
  210. package/lib/typescript/src/iab/usp/v1/constants.d.ts +9 -0
  211. package/lib/typescript/src/iab/usp/v1/constants.d.ts.map +1 -0
  212. package/lib/typescript/src/iab/usp/v1/index.d.ts +16 -0
  213. package/lib/typescript/src/iab/usp/v1/index.d.ts.map +1 -0
  214. package/lib/typescript/src/views/Dialog/Message.d.ts.map +1 -1
  215. package/lib/typescript/src/views/Dialog/index.d.ts.map +1 -1
  216. package/lib/typescript/src/views/Drawer/index.d.ts.map +1 -1
  217. package/package.json +2 -6
  218. package/src/components/Button.tsx +22 -12
  219. package/src/iab/gpp/api.js +253 -0
  220. package/src/iab/gpp/consent.js +114 -0
  221. package/src/iab/gpp/constants.js +49 -0
  222. package/src/iab/gpp/encoders/AbstractBase64UrlEncoder.ts +89 -0
  223. package/src/iab/gpp/encoders/BooleanEncoder.ts +39 -0
  224. package/src/iab/gpp/encoders/CompressedBase64UrlEncoder.ts +41 -0
  225. package/src/iab/gpp/encoders/DatetimeEncoder.ts +46 -0
  226. package/src/iab/gpp/encoders/EncodableOptimizedFixedRange.ts +213 -0
  227. package/src/iab/gpp/encoders/FibonacciIntegerEncoder.ts +81 -0
  228. package/src/iab/gpp/encoders/FibonacciIntegerRangeEncoder.ts +122 -0
  229. package/src/iab/gpp/encoders/FixedBitfieldEncoder.ts +59 -0
  230. package/src/iab/gpp/encoders/FixedIdBitMapEncoder.ts +30 -0
  231. package/src/iab/gpp/encoders/FixedIntegerEncoder.ts +61 -0
  232. package/src/iab/gpp/encoders/FixedIntegerListEncoder.ts +87 -0
  233. package/src/iab/gpp/encoders/FixedIntegerRangeEncoder.ts +102 -0
  234. package/src/iab/gpp/encoders/FixedStringEncoder.ts +74 -0
  235. package/src/iab/gpp/encoders/LICENSE-IABTechLab +176 -0
  236. package/src/iab/gpp/encoders/TraditionalBase64UrlEncoder.ts +38 -0
  237. package/src/iab/gpp/encoders/errors.ts +41 -0
  238. package/src/iab/gpp/encoders/index.ts +15 -0
  239. package/src/iab/gpp/encoders/types.ts +5 -0
  240. package/src/iab/gpp/index.js +9 -0
  241. package/src/iab/gpp/reducer.js +7 -0
  242. package/src/iab/gpp/selectors.js +21 -0
  243. package/src/iab/gpp/types.ts +3 -0
  244. package/src/iab/gpp/v1/constants.js +7 -0
  245. package/src/iab/gpp/v1/index.js +73 -0
  246. package/src/iab/usp/api.js +56 -0
  247. package/src/iab/usp/consent.js +150 -0
  248. package/src/iab/usp/constants.js +40 -0
  249. package/src/iab/usp/index.js +9 -0
  250. package/src/iab/usp/reducer.js +107 -0
  251. package/src/iab/usp/selectors.js +31 -0
  252. package/src/iab/usp/types.ts +4 -0
  253. package/src/iab/usp/v1/constants.js +10 -0
  254. package/src/iab/usp/v1/index.js +54 -0
  255. package/src/locale/af.json +324 -321
  256. package/src/locale/ar.json +324 -321
  257. package/src/locale/bg.json +324 -321
  258. package/src/locale/ca.json +324 -321
  259. package/src/locale/cs.json +324 -321
  260. package/src/locale/da.json +324 -321
  261. package/src/locale/de-at.json +324 -321
  262. package/src/locale/de.json +324 -321
  263. package/src/locale/el.json +324 -321
  264. package/src/locale/en-au.json +324 -321
  265. package/src/locale/en-ca.json +324 -321
  266. package/src/locale/en-gb.json +324 -321
  267. package/src/locale/en.json +324 -321
  268. package/src/locale/es-mx.json +324 -321
  269. package/src/locale/es.json +324 -321
  270. package/src/locale/et.json +324 -321
  271. package/src/locale/fa.json +324 -321
  272. package/src/locale/fi.json +324 -321
  273. package/src/locale/fr-ca.json +324 -321
  274. package/src/locale/fr.json +324 -321
  275. package/src/locale/gd.json +324 -321
  276. package/src/locale/he.json +324 -321
  277. package/src/locale/hi.json +324 -321
  278. package/src/locale/hr.json +324 -321
  279. package/src/locale/hu.json +324 -321
  280. package/src/locale/hy.json +324 -321
  281. package/src/locale/id.json +324 -321
  282. package/src/locale/is.json +324 -321
  283. package/src/locale/it.json +324 -321
  284. package/src/locale/ja.json +324 -321
  285. package/src/locale/kk.json +324 -321
  286. package/src/locale/ko.json +324 -321
  287. package/src/locale/lt.json +324 -321
  288. package/src/locale/lv.json +324 -321
  289. package/src/locale/mi.json +324 -321
  290. package/src/locale/ms.json +324 -321
  291. package/src/locale/nb.json +324 -321
  292. package/src/locale/nl-be.json +324 -321
  293. package/src/locale/nl.json +324 -321
  294. package/src/locale/nn.json +324 -321
  295. package/src/locale/no.json +324 -321
  296. package/src/locale/pl.json +324 -321
  297. package/src/locale/pt-br.json +324 -321
  298. package/src/locale/pt.json +324 -321
  299. package/src/locale/ro.json +324 -321
  300. package/src/locale/ru.json +324 -321
  301. package/src/locale/sk.json +324 -321
  302. package/src/locale/sl.json +324 -321
  303. package/src/locale/sq.json +324 -321
  304. package/src/locale/sr.json +324 -321
  305. package/src/locale/sv.json +324 -321
  306. package/src/locale/th.json +324 -321
  307. package/src/locale/tl.json +324 -321
  308. package/src/locale/tr.json +324 -321
  309. package/src/locale/uk.json +324 -321
  310. package/src/locale/vi.json +324 -321
  311. package/src/locale/zh-hk.json +324 -321
  312. package/src/locale/zh-tw.json +324 -321
  313. package/src/locale/zh.json +324 -321
  314. package/src/locale/zu.json +324 -321
  315. package/src/views/Dialog/Message.tsx +2 -1
  316. package/src/views/Dialog/index.tsx +1 -0
  317. 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,9 @@
1
+ import reducer from './reducer';
2
+ import v1_0 from './v1';
3
+
4
+ export default {
5
+ reducer,
6
+ versions: {
7
+ v1_0,
8
+ },
9
+ };
@@ -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,4 @@
1
+ export type Usp = {
2
+ enabled: boolean;
3
+ ccpaApplies: boolean;
4
+ };
@@ -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;