@osano/osano-cmp-react-native 0.19.0 → 0.19.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 -0
- package/lib/commonjs/ConsentManager.js +23 -0
- package/lib/commonjs/ConsentManager.js.map +1 -1
- package/lib/commonjs/components/Button.js +7 -2
- package/lib/commonjs/components/Button.js.map +1 -1
- package/lib/commonjs/iab/tcf/iab-storage-utils.js +53 -49
- package/lib/commonjs/iab/tcf/iab-storage-utils.js.map +1 -1
- package/lib/commonjs/iab/tcf/middleware.js +20 -23
- package/lib/commonjs/iab/tcf/middleware.js.map +1 -1
- package/lib/commonjs/iab/tcf/reducer.js +0 -22
- package/lib/commonjs/iab/tcf/reducer.js.map +1 -1
- package/lib/commonjs/index.js +16 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/reducer.js +5 -1
- package/lib/commonjs/reducer.js.map +1 -1
- package/lib/commonjs/services/consent.js +182 -81
- package/lib/commonjs/services/consent.js.map +1 -1
- package/lib/commonjs/utils/Translator.js +25 -20
- package/lib/commonjs/utils/Translator.js.map +1 -1
- package/lib/module/ConsentManager.js +23 -0
- package/lib/module/ConsentManager.js.map +1 -1
- package/lib/module/components/Button.js +7 -2
- package/lib/module/components/Button.js.map +1 -1
- package/lib/module/iab/tcf/iab-storage-utils.js +53 -49
- package/lib/module/iab/tcf/iab-storage-utils.js.map +1 -1
- package/lib/module/iab/tcf/middleware.js +22 -25
- package/lib/module/iab/tcf/middleware.js.map +1 -1
- package/lib/module/iab/tcf/reducer.js +1 -23
- package/lib/module/iab/tcf/reducer.js.map +1 -1
- package/lib/module/index.js +17 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/reducer.js +5 -1
- package/lib/module/reducer.js.map +1 -1
- package/lib/module/services/consent.js +178 -79
- package/lib/module/services/consent.js.map +1 -1
- package/lib/module/utils/Translator.js +25 -20
- package/lib/module/utils/Translator.js.map +1 -1
- package/lib/typescript/src/ConsentManager.d.ts +11 -1
- package/lib/typescript/src/ConsentManager.d.ts.map +1 -1
- package/lib/typescript/src/components/Button.d.ts.map +1 -1
- package/lib/typescript/src/iab/tcf/iab-storage-utils.d.ts +7 -7
- package/lib/typescript/src/iab/tcf/iab-storage-utils.d.ts.map +1 -1
- package/lib/typescript/src/iab/tcf/middleware.d.ts.map +1 -1
- package/lib/typescript/src/iab/tcf/reducer.d.ts +1 -0
- package/lib/typescript/src/iab/tcf/reducer.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/reducer.d.ts.map +1 -1
- package/lib/typescript/src/services/consent.d.ts +28 -0
- package/lib/typescript/src/services/consent.d.ts.map +1 -1
- package/lib/typescript/src/utils/Translator.d.ts +2 -0
- package/lib/typescript/src/utils/Translator.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/ConsentManager.ts +24 -1
- package/src/components/Button.tsx +10 -2
- package/src/iab/tcf/iab-storage-utils.ts +101 -56
- package/src/iab/tcf/middleware.ts +36 -32
- package/src/iab/tcf/reducer.ts +2 -29
- package/src/index.tsx +15 -1
- package/src/reducer.ts +4 -0
- package/src/services/consent.ts +223 -90
- package/src/types/consent-config.d.ts +5 -1
- package/src/types/store.d.ts +5 -0
- package/src/utils/Translator.ts +35 -25
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { CLEAR_CONSENT, RELOAD,
|
|
3
|
+
import { CLEAR_CONSENT, RELOAD, SET_CONFIG } from '../../actions';
|
|
4
4
|
import { SET_CONSENT, SET_PURPOSE_CONSENT, SET_SPECIAL_FEATURE_CONSENT, SET_VENDOR_CONSENT, UPDATE_PURPOSE_LIST } from './actions';
|
|
5
5
|
import { getUpdatedVendorDisclosures, getVendorListVersion, getVendors } from './selectors';
|
|
6
6
|
import { updatePurposeOptOuts, updateSpecialFeatureOptIns, updateVendorOptOuts } from './helpers';
|
|
7
|
-
import { Platform } from 'react-native';
|
|
8
|
-
import { setStorage } from '../../native/OsanoCmp';
|
|
9
7
|
export const initialState = {
|
|
10
8
|
iab: {
|
|
11
9
|
consentStrings: {},
|
|
@@ -70,7 +68,6 @@ const updateOptions = (state, options) => {
|
|
|
70
68
|
export default function makeReducer(initOptions) {
|
|
71
69
|
const {
|
|
72
70
|
createConsentPayload,
|
|
73
|
-
gppSection,
|
|
74
71
|
version
|
|
75
72
|
} = initOptions;
|
|
76
73
|
return (state, action) => {
|
|
@@ -123,25 +120,6 @@ export default function makeReducer(initOptions) {
|
|
|
123
120
|
}
|
|
124
121
|
};
|
|
125
122
|
}
|
|
126
|
-
case SAVE_BEGIN:
|
|
127
|
-
{
|
|
128
|
-
const config = state.config;
|
|
129
|
-
if (config?.configId && config.iabEnabled) {
|
|
130
|
-
const consentPayload = createConsentPayload(state);
|
|
131
|
-
switch (Platform.OS) {
|
|
132
|
-
case 'ios':
|
|
133
|
-
case 'android':
|
|
134
|
-
setStorage(`${gppSection}_${config.configId}`, JSON.stringify(consentPayload));
|
|
135
|
-
break;
|
|
136
|
-
default:
|
|
137
|
-
try {
|
|
138
|
-
window.localStorage.setItem(`${gppSection}_${config.configId}`, JSON.stringify(consentPayload));
|
|
139
|
-
} catch {}
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return state;
|
|
144
|
-
}
|
|
145
123
|
case CLEAR_CONSENT:
|
|
146
124
|
{
|
|
147
125
|
const consentPayload = createConsentPayload();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CLEAR_CONSENT","RELOAD","
|
|
1
|
+
{"version":3,"names":["CLEAR_CONSENT","RELOAD","SET_CONFIG","SET_CONSENT","SET_PURPOSE_CONSENT","SET_SPECIAL_FEATURE_CONSENT","SET_VENDOR_CONSENT","UPDATE_PURPOSE_LIST","getUpdatedVendorDisclosures","getVendorListVersion","getVendors","updatePurposeOptOuts","updateSpecialFeatureOptIns","updateVendorOptOuts","initialState","iab","consentStrings","tcf","v2","purposeOptouts","specialFeatureOptins","stacks","vendorListError","vendorListLoading","vendorListLoaded","vendorListVersion","vendors","vendorOptouts","vendorDisclosures","processPurposeList","_purposeList","_language","updateOptions","state","options","initOptions","config","version","makeReducer","createConsentPayload","action","type","payload","customerId","configId","consentConfig","consentPayload","specialFeatureId","acceptOrDeny","purposeId","vendorId","purposeList","language"],"sourceRoot":"../../../../src","sources":["iab/tcf/reducer.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { memo, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import { Platform, UIManager } from 'react-native';
|
|
5
|
-
import { CLEAR_CONSENT, reload, setConfig, setLocale, showDialog, showDrawer } from './actions';
|
|
5
|
+
import { CLEAR_CONSENT, SAVE_BEGIN, reload, setConfig, setLocale, showDialog, showDrawer } from './actions';
|
|
6
6
|
import { init, reducer } from './reducer';
|
|
7
7
|
import { ConsentManager } from './ConsentManager';
|
|
8
8
|
import { ConsentUiBuilder } from './ConsentUiBuilder';
|
|
@@ -76,7 +76,14 @@ export const Osano = /*#__PURE__*/memo(props => {
|
|
|
76
76
|
doNotSellCategories: consentManager.current.config.doNotSellCategories
|
|
77
77
|
}));
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
dispatch({
|
|
80
|
+
type: SAVE_BEGIN,
|
|
81
|
+
payload: consentedCategories
|
|
82
|
+
});
|
|
83
|
+
return recordConsent(consentManager.current, consentedCategories).then(recordedConsent => {
|
|
84
|
+
consentManager.current.triggerGoogleConsentUpdate(recordedConsent);
|
|
85
|
+
return recordedConsent;
|
|
86
|
+
});
|
|
80
87
|
}, []);
|
|
81
88
|
const handleClearConsent = useCallback(() => {
|
|
82
89
|
dispatch({
|
|
@@ -149,6 +156,7 @@ export const Osano = /*#__PURE__*/memo(props => {
|
|
|
149
156
|
onLangLoadFailure
|
|
150
157
|
}).then(reloadProps => {
|
|
151
158
|
// We need to reset the state when the configId or customerId changes
|
|
159
|
+
const consentInvalidated = consentManager.current.consentInvalidated;
|
|
152
160
|
dispatch(reload({
|
|
153
161
|
// Pass config so init-time opt-out normalization runs on the
|
|
154
162
|
// stored consent even in headless consumers, where SET_CONFIG's
|
|
@@ -156,8 +164,14 @@ export const Osano = /*#__PURE__*/memo(props => {
|
|
|
156
164
|
config: consentManager.current.config,
|
|
157
165
|
configId: reloadProps.configId,
|
|
158
166
|
customerId: reloadProps.customerId,
|
|
159
|
-
consent: reloadProps.consent
|
|
167
|
+
consent: reloadProps.consent,
|
|
168
|
+
// Signals the IAB TCF middleware to wipe (not rehydrate) the
|
|
169
|
+
// stored TC string on this RELOAD; see its RELOAD handler.
|
|
170
|
+
consentInvalidated
|
|
160
171
|
}));
|
|
172
|
+
if (consentManager.current.consentPromptRequired) {
|
|
173
|
+
dispatch(showDialog());
|
|
174
|
+
}
|
|
161
175
|
return reloadProps;
|
|
162
176
|
}).catch(() => {
|
|
163
177
|
// TODO: Handle error
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useCallback","useEffect","useMemo","useRef","Platform","UIManager","CLEAR_CONSENT","reload","setConfig","setLocale","showDialog","showDrawer","init","reducer","ConsentManager","ConsentUiBuilder","ConsentCategory","formatConsentArray","makeConsentFromCategories","normalizeDoNotSellConsent","OsanoPublicContext","usePrevious","useThunkReducer","addIabReducers","getConsent","recordConsent","osanoLogger","OsanoLogger","jsx","_jsx","jsxs","_jsxs","OsanoContext","GoogleConsentModeMapper","OS","setLayoutAnimationEnabledExperimental","Osano","props","configId","customerId","hideUI","hideDisclosures","onConfigLoadFailure","onConfigLoadSuccess","onLangLoadFailure","onLangLoadSuccess","onGoogleConsentUpdate","overrides","extUsrData","setLoggingEnabled","flavor","iabEnabled","consentManager","setEnabled","_state","store","current","middleware","bind","addMiddleware","dispatch","getState","removeMiddleware","handleGetConsent","category","hasConsent","consent","ESSENTIAL","handleRecordConsent","consentedCategories","undefined","categories","Array","isArray","enableDoNotSell","config","doNotSellCategories","
|
|
1
|
+
{"version":3,"names":["React","memo","useCallback","useEffect","useMemo","useRef","Platform","UIManager","CLEAR_CONSENT","SAVE_BEGIN","reload","setConfig","setLocale","showDialog","showDrawer","init","reducer","ConsentManager","ConsentUiBuilder","ConsentCategory","formatConsentArray","makeConsentFromCategories","normalizeDoNotSellConsent","OsanoPublicContext","usePrevious","useThunkReducer","addIabReducers","getConsent","recordConsent","osanoLogger","OsanoLogger","jsx","_jsx","jsxs","_jsxs","OsanoContext","GoogleConsentModeMapper","OS","setLayoutAnimationEnabledExperimental","Osano","props","configId","customerId","hideUI","hideDisclosures","onConfigLoadFailure","onConfigLoadSuccess","onLangLoadFailure","onLangLoadSuccess","onGoogleConsentUpdate","overrides","extUsrData","setLoggingEnabled","flavor","iabEnabled","consentManager","setEnabled","_state","store","current","middleware","bind","addMiddleware","dispatch","getState","removeMiddleware","handleGetConsent","category","hasConsent","consent","ESSENTIAL","handleRecordConsent","consentedCategories","undefined","categories","Array","isArray","enableDoNotSell","config","doNotSellCategories","type","payload","then","recordedConsent","triggerGoogleConsentUpdate","handleClearConsent","retryWithBackoff","callback","retries","delay","attempt","loaded","Error","error","Promise","resolve","setTimeout","handleShowDialog","handleShowDrawer","handleSetLocale","value","translator","load","handleGetDeviceId","deviceId","handleGetJurisdiction","jurisdiction","handleSetConsentExpirationTestingMode","expirationSeconds","setConsentExpirationTestingMode","context","locale","getDeviceId","getJurisdiction","clearConsent","showBanner","isReady","reloadProps","consentInvalidated","consentPromptRequired","catch","setGoogleConsentModeCallback","iabLoaded","iabChanged","frameworks","tcfController","push","versions","length","Provider","children","cmp","prev","next","nextFlavor","nextIabEnabled"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/reducer.js
CHANGED
|
@@ -96,7 +96,11 @@ export function reducer(state, action) {
|
|
|
96
96
|
consent,
|
|
97
97
|
savedConsent: {
|
|
98
98
|
...consent
|
|
99
|
-
}
|
|
99
|
+
},
|
|
100
|
+
// The user just re-consented, so the invalidation is resolved. Clear
|
|
101
|
+
// the marker so a later SET_CONFIG rehydrates this freshly-saved TCF
|
|
102
|
+
// payload instead of wiping it (the IAB middleware wipes while set).
|
|
103
|
+
consentInvalidated: false
|
|
100
104
|
};
|
|
101
105
|
}
|
|
102
106
|
case CLEAR_CONSENT:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CLEAR_CONSENT","CLOSE","FETCH_DISCLOSURES_BEGIN","FETCH_DISCLOSURES_FAILURE","FETCH_DISCLOSURES_SUCCESS","GO_BACK","RELOAD","REVERT_CONSENT","SAVE_BEGIN","SET_ALL_CONSENT","SET_CONFIG","SET_LOCALE","SHOW_DIALOG","SHOW_DRAWER","SHOW_IAB_DISCLOSURES","SHOW_IAB_VENDORS","TOGGLE_CATEGORY","ConsentCategory","initialState","makeConsentFromCategories","OsanoCategories","doNotSellSideEffects","normalizeDoNotSellConsent","getFinalOptOutValue","getPriorConsent","isAnalyticsAlwaysAllowed","shouldUseGPCOptOut","init","initialArgs","consent","reloadProps","consentRecord","Array","isArray","enableDoNotSell","config","doNotSellCategories","savedConsent","setAllConsent","acceptOrDeny","state","isAccepted","category","useGPC","newConsent","reducer","action","type","payload","customerId","configId","consentConfig","locale","consentedCategories","optOutStatus","OPT_OUT","ANALYTICS","consentTimestamp","previousConsent","next","value","undefined","key","current","newValue","forcedOff","forced","dialogOpen","stack","scrollToType","id","scrollToId","length","slice","disclosures","loading","fetched","indexOf","filter","cat","results","currentlyFetched","Object","values","disclosuresByCategory","reduce","categories","disclosure","classification","categoryName","categoryDisclosures","push","newResults","entries","validCategories","lookup","name","uuid","sort","a","b","localeCompare","index","list"],"sourceRoot":"../../src","sources":["reducer.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["CLEAR_CONSENT","CLOSE","FETCH_DISCLOSURES_BEGIN","FETCH_DISCLOSURES_FAILURE","FETCH_DISCLOSURES_SUCCESS","GO_BACK","RELOAD","REVERT_CONSENT","SAVE_BEGIN","SET_ALL_CONSENT","SET_CONFIG","SET_LOCALE","SHOW_DIALOG","SHOW_DRAWER","SHOW_IAB_DISCLOSURES","SHOW_IAB_VENDORS","TOGGLE_CATEGORY","ConsentCategory","initialState","makeConsentFromCategories","OsanoCategories","doNotSellSideEffects","normalizeDoNotSellConsent","getFinalOptOutValue","getPriorConsent","isAnalyticsAlwaysAllowed","shouldUseGPCOptOut","init","initialArgs","consent","reloadProps","consentRecord","Array","isArray","enableDoNotSell","config","doNotSellCategories","savedConsent","setAllConsent","acceptOrDeny","state","isAccepted","category","useGPC","newConsent","reducer","action","type","payload","customerId","configId","consentConfig","locale","consentedCategories","consentInvalidated","optOutStatus","OPT_OUT","ANALYTICS","consentTimestamp","previousConsent","next","value","undefined","key","current","newValue","forcedOff","forced","dialogOpen","stack","scrollToType","id","scrollToId","length","slice","disclosures","loading","fetched","indexOf","filter","cat","results","currentlyFetched","Object","values","disclosuresByCategory","reduce","categories","disclosure","classification","categoryName","categoryDisclosures","push","newResults","entries","validCategories","lookup","name","uuid","sort","a","b","localeCompare","index","list"],"sourceRoot":"../../src","sources":["reducer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,10 +20,10 @@ const {
|
|
|
20
20
|
} = env;
|
|
21
21
|
const IS_OFFICIAL_SAMPLE = NativeModules?.OsanoCmpSdk?.IS_OFFICIAL_SAMPLE;
|
|
22
22
|
const CONSENTING_PLATFORM_TAG = IS_OFFICIAL_SAMPLE ? `${Platform.OS}.sample-react-native` : `${Platform.OS}.react-native`;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
23
|
+
|
|
24
|
+
// Local-testing hook only — any key set here clobbers the fetched config
|
|
25
|
+
// (including the x-osano-* headers), so it must ship empty.
|
|
26
|
+
const overrideConfig = {};
|
|
27
27
|
function createConsentRecordPayload(cmp, consent) {
|
|
28
28
|
const consentedCategories = consent ?? cmp.consent ?? [];
|
|
29
29
|
const hashedExtUsrData = hashExtUsrData(cmp.customerId, cmp.configId, cmp.extUsrData || undefined);
|
|
@@ -45,6 +45,27 @@ const STORAGE_KEY = 'osano_consentmanager';
|
|
|
45
45
|
// to it so existing installs keep their recorded date until the next write.
|
|
46
46
|
const lastConsentDateKey = (configId, userSuffix) => `${STORAGE_KEY}_last_recorded_consent_date_${configId}${userSuffix}`;
|
|
47
47
|
const legacyLastConsentDateKey = userSuffix => `${STORAGE_KEY}_last_recorded_consent_date${userSuffix}`;
|
|
48
|
+
const parseStoredTimestamp = json => {
|
|
49
|
+
if (!json) {
|
|
50
|
+
return '';
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
return JSON.parse(json);
|
|
54
|
+
} catch {
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const retrieveTimestampForSuffix = async (configId, userSuffix) => {
|
|
59
|
+
try {
|
|
60
|
+
const scoped = parseStoredTimestamp(await getStorage(lastConsentDateKey(configId, userSuffix)));
|
|
61
|
+
if (scoped) {
|
|
62
|
+
return scoped;
|
|
63
|
+
}
|
|
64
|
+
return parseStoredTimestamp(await getStorage(legacyLastConsentDateKey(userSuffix)));
|
|
65
|
+
} catch {
|
|
66
|
+
return '';
|
|
67
|
+
}
|
|
68
|
+
};
|
|
48
69
|
function consentRecordedRemotely(configId, success, hashedExtUsrData) {
|
|
49
70
|
const userSuffix = hashedExtUsrData ? `_${hashedExtUsrData}` : '';
|
|
50
71
|
if (success) {
|
|
@@ -108,41 +129,36 @@ export const migrateConsentStorage = async cmp => {
|
|
|
108
129
|
if (!hashedExtUsrData) {
|
|
109
130
|
return null;
|
|
110
131
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (oldConsent) {
|
|
120
|
-
let consent = JSON.parse(oldConsent);
|
|
121
|
-
if (consent.length > 0) {
|
|
122
|
-
consent = formatConsentArray(normalizeDoNotSellConsent(makeConsentFromCategories(consent), {
|
|
123
|
-
enableDoNotSell: cmp.config.enableDoNotSell,
|
|
124
|
-
doNotSellCategories: cmp.config.doNotSellCategories
|
|
125
|
-
}));
|
|
126
|
-
// Store with new user-specific key
|
|
127
|
-
storeConsent(cmp, consent).then(() => {
|
|
128
|
-
// Clean up old storage
|
|
129
|
-
clearStorage(oldKey);
|
|
130
|
-
clearStorage(oldTimestampKey);
|
|
131
|
-
resolve(consent);
|
|
132
|
-
});
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
resolve(null); // No old consent found
|
|
137
|
-
}).catch(() => {
|
|
138
|
-
resolve(null); // Old key not found
|
|
139
|
-
});
|
|
140
|
-
break;
|
|
141
|
-
default:
|
|
142
|
-
resolve(null);
|
|
143
|
-
break;
|
|
132
|
+
if (Platform.OS !== 'ios' && Platform.OS !== 'android') {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const oldKey = `${STORAGE_KEY}_${cmp.configId}`;
|
|
136
|
+
try {
|
|
137
|
+
const oldConsent = await getStorage(oldKey);
|
|
138
|
+
if (!oldConsent) {
|
|
139
|
+
return null;
|
|
144
140
|
}
|
|
145
|
-
|
|
141
|
+
let consent = JSON.parse(oldConsent);
|
|
142
|
+
if (consent.length === 0) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
consent = formatConsentArray(normalizeDoNotSellConsent(makeConsentFromCategories(consent), {
|
|
146
|
+
enableDoNotSell: cmp.config.enableDoNotSell,
|
|
147
|
+
doNotSellCategories: cmp.config.doNotSellCategories
|
|
148
|
+
}));
|
|
149
|
+
const sourceTimestamp = await retrieveTimestampForSuffix(cmp.configId, '');
|
|
150
|
+
const parsedSourceTimestamp = new Date(sourceTimestamp);
|
|
151
|
+
const migrationTimestamp = Number.isNaN(parsedSourceTimestamp.getTime()) ? new Date(0) : parsedSourceTimestamp;
|
|
152
|
+
await storeConsent(cmp, consent, undefined, migrationTimestamp);
|
|
153
|
+
await Promise.all([oldKey, lastConsentDateKey(cmp.configId, ''), legacyLastConsentDateKey('')].map(async key => {
|
|
154
|
+
try {
|
|
155
|
+
await clearStorage(key);
|
|
156
|
+
} catch {}
|
|
157
|
+
}));
|
|
158
|
+
return consent;
|
|
159
|
+
} catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
146
162
|
};
|
|
147
163
|
|
|
148
164
|
// The consent to fall back to when a visitor has no stored consent yet. Flavor 7
|
|
@@ -174,6 +190,16 @@ const clearToFirstLoadDefault = async cmp => {
|
|
|
174
190
|
cmp.consent = seed;
|
|
175
191
|
return seed;
|
|
176
192
|
};
|
|
193
|
+
const retrieveStoredConsent = async cmp => {
|
|
194
|
+
const hashedExtUsrData = hashExtUsrData(cmp.customerId, cmp.configId, cmp.extUsrData);
|
|
195
|
+
const userSuffix = hashedExtUsrData ? `_${hashedExtUsrData}` : '';
|
|
196
|
+
try {
|
|
197
|
+
const stored = await getStorage(`${STORAGE_KEY}_${cmp.configId}${userSuffix}`);
|
|
198
|
+
return stored ? JSON.parse(stored) : null;
|
|
199
|
+
} catch {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
177
203
|
|
|
178
204
|
// After an expired/invalid record, settle on a persisted essential-only state.
|
|
179
205
|
// Persisting (rather than only clearing the payload with clearConsent) keeps a
|
|
@@ -182,15 +208,39 @@ const clearToFirstLoadDefault = async cmp => {
|
|
|
182
208
|
// because a later load may resolve no expiration window (testing off, offline
|
|
183
209
|
// with no mappings cache, or a country with no interval), in which case empty
|
|
184
210
|
// storage would otherwise re-seed the first-load default.
|
|
185
|
-
const settleEssentialOnly =
|
|
211
|
+
const settleEssentialOnly = (cmp, consentDate) => {
|
|
212
|
+
const categories = [ConsentCategory.ESSENTIAL];
|
|
213
|
+
if (cmp.config?.isDoNotSellVisible && (cmp.config.enableDoNotSellDefault || cmp.consent?.includes(ConsentCategory.OPT_OUT))) {
|
|
214
|
+
categories.push(ConsentCategory.OPT_OUT);
|
|
215
|
+
}
|
|
216
|
+
return storeConsent(cmp, categories, undefined, consentDate);
|
|
217
|
+
};
|
|
218
|
+
const markConsentInvalidated = cmp => {
|
|
219
|
+
cmp.consentInvalidated = true;
|
|
220
|
+
cmp.consentPromptRequired = true;
|
|
221
|
+
};
|
|
186
222
|
const retrieveConsent = async cmp => {
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
// essential-only
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
|
|
193
|
-
|
|
223
|
+
// Invalidate stored consent for either independent reason — the record
|
|
224
|
+
// predates the forceReconsent stamp, or it aged past its expiration window —
|
|
225
|
+
// and settle on essential-only. Only read the timestamp when there is a stamp
|
|
226
|
+
// or window to evaluate, so a no-signal load skips the read as the previous
|
|
227
|
+
// expiry-only path did. `consentInvalidated` (read in index.tsx) drives the
|
|
228
|
+
// auto re-prompt; it is set only for a previously recorded consent, never on
|
|
229
|
+
// the first-run path.
|
|
230
|
+
const forceSeconds = effectiveForceReconsentSeconds(cmp);
|
|
231
|
+
const expirationSeconds = await effectiveExpirationSeconds(cmp);
|
|
232
|
+
if (forceSeconds !== null || expirationSeconds !== null) {
|
|
233
|
+
const timestamp = await retrieveLastConsentTimestamp(cmp);
|
|
234
|
+
const expired = isTimestampExpired(timestamp, expirationSeconds);
|
|
235
|
+
const forced = predatesForceReconsent(cmp, timestamp);
|
|
236
|
+
if (expired || forced) {
|
|
237
|
+
const storedConsent = await retrieveStoredConsent(cmp);
|
|
238
|
+
if (storedConsent?.length) {
|
|
239
|
+
cmp.consent = storedConsent;
|
|
240
|
+
markConsentInvalidated(cmp);
|
|
241
|
+
return settleEssentialOnly(cmp, timestamp);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
194
244
|
}
|
|
195
245
|
return new Promise(resolve => {
|
|
196
246
|
const resConsent = consentJson => {
|
|
@@ -216,7 +266,15 @@ const retrieveConsent = async cmp => {
|
|
|
216
266
|
// Try migration if new key not found
|
|
217
267
|
const migratedConsent = await migrateConsentStorage(cmp);
|
|
218
268
|
if (migratedConsent) {
|
|
219
|
-
|
|
269
|
+
const timestamp = await retrieveLastConsentTimestamp(cmp);
|
|
270
|
+
const expired = isTimestampExpired(timestamp, expirationSeconds);
|
|
271
|
+
const forced = predatesForceReconsent(cmp, timestamp);
|
|
272
|
+
if (expired || forced) {
|
|
273
|
+
markConsentInvalidated(cmp);
|
|
274
|
+
resolve(await settleEssentialOnly(cmp, timestamp));
|
|
275
|
+
} else {
|
|
276
|
+
resolve(migratedConsent);
|
|
277
|
+
}
|
|
220
278
|
} else {
|
|
221
279
|
// No consent found, seed the first-load default
|
|
222
280
|
clearToFirstLoadDefault(cmp).then(resolve);
|
|
@@ -235,29 +293,7 @@ const retrieveConsent = async cmp => {
|
|
|
235
293
|
const retrieveLastConsentTimestamp = async cmp => {
|
|
236
294
|
const hashedExtUsrData = hashExtUsrData(cmp.customerId, cmp.configId, cmp.extUsrData);
|
|
237
295
|
const userSuffix = hashedExtUsrData ? `_${hashedExtUsrData}` : '';
|
|
238
|
-
|
|
239
|
-
if (!json) {
|
|
240
|
-
return '';
|
|
241
|
-
}
|
|
242
|
-
try {
|
|
243
|
-
return JSON.parse(json);
|
|
244
|
-
} catch {
|
|
245
|
-
return '';
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
try {
|
|
249
|
-
const scoped = parse(await getStorage(lastConsentDateKey(cmp.configId, userSuffix)));
|
|
250
|
-
if (scoped) {
|
|
251
|
-
return scoped;
|
|
252
|
-
}
|
|
253
|
-
// Fall back to the legacy un-scoped key for installs written before the
|
|
254
|
-
// timestamp was scoped by configId.
|
|
255
|
-
return parse(await getStorage(legacyLastConsentDateKey(userSuffix)));
|
|
256
|
-
} catch {
|
|
257
|
-
// Fail closed: a storage rejection resolves to no timestamp instead of
|
|
258
|
-
// hanging the consent load.
|
|
259
|
-
return '';
|
|
260
|
-
}
|
|
296
|
+
return retrieveTimestampForSuffix(cmp.configId, userSuffix);
|
|
261
297
|
};
|
|
262
298
|
|
|
263
299
|
/**
|
|
@@ -296,6 +332,62 @@ const isTimestampExpired = (timestamp, seconds) => {
|
|
|
296
332
|
return Date.now() - consentedAtMs > seconds * 1000;
|
|
297
333
|
};
|
|
298
334
|
|
|
335
|
+
/**
|
|
336
|
+
* Resolves the effective `forceReconsent` signal in whole seconds, validating
|
|
337
|
+
* before trusting it. The raw field ships over the network and is human-edited,
|
|
338
|
+
* so treat any malformed value as "no signal" (null) rather than invalidating
|
|
339
|
+
* every consent:
|
|
340
|
+
*
|
|
341
|
+
* - absent / null → null (no signal)
|
|
342
|
+
* - <= 0 → null (guards zero and negatives)
|
|
343
|
+
* - in the future → null (clock skew, or a value mistakenly stamped in
|
|
344
|
+
* milliseconds, which reads as ~1000× "now" ⇒ future)
|
|
345
|
+
*
|
|
346
|
+
* Failing toward *not* invalidating means the worst a bad value causes is a
|
|
347
|
+
* missed prompt, never a permanent lockout.
|
|
348
|
+
*/
|
|
349
|
+
export const effectiveForceReconsentSeconds = cmp => {
|
|
350
|
+
const raw = cmp.config?.forceReconsent;
|
|
351
|
+
if (raw == null) {
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
const seconds = typeof raw === 'number' ? raw : typeof raw === 'string' && raw.trim() !== '' ? Number(raw) : Number.NaN;
|
|
355
|
+
if (!Number.isFinite(seconds) || seconds <= 0) {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
if (seconds > Math.floor(Date.now() / 1000)) {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
return seconds;
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* True when a consent record predates the server's `forceReconsent` stamp.
|
|
366
|
+
* `timestamp` is the recorded-consent instant (stored as an ISO/ms string).
|
|
367
|
+
*
|
|
368
|
+
* Unit alignment is the subtle part: the signal is in SECONDS and the timestamp
|
|
369
|
+
* is in MILLISECONDS, so the signal is scaled up (`* 1000`). The boundary is
|
|
370
|
+
* strict `<` — consent recorded exactly at the stamp instant stays valid.
|
|
371
|
+
*
|
|
372
|
+
* A missing/unparseable timestamp fails closed (returns false), so first-run
|
|
373
|
+
* (no timestamp) is not wrongly invalidated. `storeConsent` always co-stamps,
|
|
374
|
+
* so a consented-but-timestampless record is unreachable here anyway.
|
|
375
|
+
*/
|
|
376
|
+
export const predatesForceReconsent = (cmp, timestamp) => {
|
|
377
|
+
const forceSeconds = effectiveForceReconsentSeconds(cmp);
|
|
378
|
+
if (forceSeconds === null) {
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
if (!timestamp) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
const consentedAtMs = new Date(timestamp).getTime();
|
|
385
|
+
if (Number.isNaN(consentedAtMs)) {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
return consentedAtMs < forceSeconds * 1000;
|
|
389
|
+
};
|
|
390
|
+
|
|
299
391
|
/**
|
|
300
392
|
* Returns true when the locally stored consent has aged past its expiration
|
|
301
393
|
* window (see {@link effectiveExpirationSeconds}).
|
|
@@ -309,6 +401,8 @@ export const isConsentExpired = async cmp => {
|
|
|
309
401
|
return isTimestampExpired(timestamp, seconds);
|
|
310
402
|
};
|
|
311
403
|
export const recordConsent = (cmp, consent) => {
|
|
404
|
+
cmp.consentInvalidated = false;
|
|
405
|
+
cmp.consentPromptRequired = false;
|
|
312
406
|
const payload = createConsentRecordPayload(cmp, consent);
|
|
313
407
|
return API.post(`${CONSENT_URI}/record`, payload, {
|
|
314
408
|
referrer: cmp.consentingDomain
|
|
@@ -373,18 +467,21 @@ export const fetchConsent = async cmp => {
|
|
|
373
467
|
|
|
374
468
|
// Evaluate the remote record against the server's own timestamp (when the
|
|
375
469
|
// visitor actually consented), not "now", so an already-expired remote
|
|
376
|
-
// record is never restored and re-dated as fresh.
|
|
470
|
+
// record is never restored and re-dated as fresh. A record that predates
|
|
471
|
+
// the server's forceReconsent stamp is stale for the same reason — applying
|
|
472
|
+
// it would silently re-grant the very consent the signal invalidated.
|
|
377
473
|
const seconds = await effectiveExpirationSeconds(cmp);
|
|
378
|
-
const
|
|
474
|
+
const remoteForced = predatesForceReconsent(cmp, lastConsentTimestamp);
|
|
475
|
+
const remoteStale = isTimestampExpired(lastConsentTimestamp, seconds) || remoteForced;
|
|
379
476
|
|
|
380
477
|
// If extUsrData is not null and not empty, always use remote consent (cross-device consent enabled)
|
|
381
478
|
if (extUsrData && extUsrData.trim() !== '') {
|
|
382
|
-
if (
|
|
383
|
-
// The authoritative remote record
|
|
384
|
-
// essential-only
|
|
385
|
-
//
|
|
386
|
-
|
|
387
|
-
return settleEssentialOnly(cmp);
|
|
479
|
+
if (remoteStale) {
|
|
480
|
+
// The authoritative remote record is stale (expired or predates the
|
|
481
|
+
// stamp); settle essential-only and flag the invalidation rather than
|
|
482
|
+
// restoring it.
|
|
483
|
+
markConsentInvalidated(cmp);
|
|
484
|
+
return settleEssentialOnly(cmp, lastConsentTimestamp);
|
|
388
485
|
}
|
|
389
486
|
const remoteConsentCategories = formatConsentArray(normalizeDoNotSellConsent(makeConsentFromCategories(consented.map(category => ConsentCategory[category])), {
|
|
390
487
|
enableDoNotSell: cmp.config.enableDoNotSell,
|
|
@@ -392,13 +489,14 @@ export const fetchConsent = async cmp => {
|
|
|
392
489
|
}));
|
|
393
490
|
// Preserve the server timestamp so restoring can't re-date the record.
|
|
394
491
|
await storeConsent(cmp, remoteConsentCategories, true, lastConsentTimestamp);
|
|
492
|
+
cmp.consentPromptRequired = false;
|
|
395
493
|
return remoteConsentCategories;
|
|
396
494
|
}
|
|
397
495
|
|
|
398
496
|
// Otherwise, validate timestamps (cross-device consent not enabled)
|
|
399
497
|
const internalTimestamp = await retrieveLastConsentTimestamp(cmp);
|
|
400
498
|
try {
|
|
401
|
-
if (!
|
|
499
|
+
if (!remoteStale && (new Date(lastConsentTimestamp) > new Date(internalTimestamp) || internalTimestamp === '')) {
|
|
402
500
|
// Remote consent is newer, unexpired, or we haven't recorded any
|
|
403
501
|
// consent yet. Store it, preserving the server timestamp.
|
|
404
502
|
const remoteConsentCategories = formatConsentArray(normalizeDoNotSellConsent(makeConsentFromCategories(consented), {
|
|
@@ -406,6 +504,7 @@ export const fetchConsent = async cmp => {
|
|
|
406
504
|
doNotSellCategories: cmp.config.doNotSellCategories
|
|
407
505
|
}));
|
|
408
506
|
await storeConsent(cmp, remoteConsentCategories, true, lastConsentTimestamp);
|
|
507
|
+
cmp.consentPromptRequired = false;
|
|
409
508
|
return remoteConsentCategories;
|
|
410
509
|
}
|
|
411
510
|
} catch {
|