@atlasauth/js 0.13.0 → 0.15.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/CHANGELOG.md +25 -0
- package/dist/dev-browser.d.ts +30 -0
- package/dist/dev-browser.js +175 -0
- package/dist/dev-browser.js.map +1 -0
- package/dist/fapi.d.ts +20 -9
- package/dist/fapi.js +4 -2
- package/dist/fapi.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/referral-detect.d.ts +90 -0
- package/dist/referral-detect.js +432 -0
- package/dist/referral-detect.js.map +1 -0
- package/dist/referral.d.ts +161 -28
- package/dist/referral.js +341 -39
- package/dist/referral.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Referral sources and consent managers the SDK recognises on the page, so
|
|
4
|
+
* referral capture works with any referral program and any consent manager.
|
|
5
|
+
*
|
|
6
|
+
* Sources: the referral script or cookie a program puts on the merchant's
|
|
7
|
+
* site. Each reader returns `{code, clickId, anonId}` (and `capturedAt` when
|
|
8
|
+
* the source says when): the code is the referrer's, the ids are the
|
|
9
|
+
* visitor's (sent only with consent). The instance lists which sources to read
|
|
10
|
+
* (`browser_sources`), so one program's script never feeds another program's
|
|
11
|
+
* connection. A custom program passes its own reader as `referralSource`.
|
|
12
|
+
*
|
|
13
|
+
* Consent: the first consent manager found on the page decides whether the
|
|
14
|
+
* referral cookie's ids may be read, for the instance's consent category, else
|
|
15
|
+
* its fallback category. The visitor's answer in a consent manager is the
|
|
16
|
+
* source of truth: the app's own decision (`referralConsent`) applies only
|
|
17
|
+
* when no manager is on the page, or when the instance says the app decides
|
|
18
|
+
* (`consent_provider: 'app'`). Common names map onto each manager's own:
|
|
19
|
+
* `marketing` (also advertising / targeting), `statistics` (analytics /
|
|
20
|
+
* performance) and `preferences` (functional / personalization); any other
|
|
21
|
+
* name is looked up as the manager's own category id. IAB TCF v2 managers
|
|
22
|
+
* answer with Purpose 1 (store and access information on a device).
|
|
23
|
+
*
|
|
24
|
+
* Every reader is defensive: a missing, half-loaded or throwing script reads
|
|
25
|
+
* as "nothing here". The ES5 copy in the Atlas API (hosted pages and the Sign
|
|
26
|
+
* in with Atlas button) follows the same rules and is tested against the same
|
|
27
|
+
* fixtures.
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.CONSENT_PROVIDERS = exports.REFERRAL_BROWSER_SOURCES = void 0;
|
|
31
|
+
exports.customReferral = customReferral;
|
|
32
|
+
exports.detectReferralSource = detectReferralSource;
|
|
33
|
+
exports.canonicalCategory = canonicalCategory;
|
|
34
|
+
exports.listenForTcfConsent = listenForTcfConsent;
|
|
35
|
+
exports.resetConsentDetection = resetConsentDetection;
|
|
36
|
+
exports.detectConsent = detectConsent;
|
|
37
|
+
exports.detectConsentProvider = detectConsentProvider;
|
|
38
|
+
const TOKEN = /^[A-Za-z0-9_-]{3,64}$/;
|
|
39
|
+
const isBag = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
40
|
+
const token = (v) => (typeof v === 'string' && TOKEN.test(v.trim()) ? v.trim() : null);
|
|
41
|
+
/** The browser sources the SDK reads, in the order it tries them. */
|
|
42
|
+
exports.REFERRAL_BROWSER_SOURCES = [
|
|
43
|
+
'referally',
|
|
44
|
+
'rewardful',
|
|
45
|
+
'tolt',
|
|
46
|
+
'promotekit',
|
|
47
|
+
'firstpromoter',
|
|
48
|
+
'partnerstack',
|
|
49
|
+
'dub',
|
|
50
|
+
];
|
|
51
|
+
/** The consent managers the SDK reads, in the order `auto` tries them. */
|
|
52
|
+
exports.CONSENT_PROVIDERS = [
|
|
53
|
+
'cookiemunch',
|
|
54
|
+
'onetrust',
|
|
55
|
+
'cookiebot',
|
|
56
|
+
'didomi',
|
|
57
|
+
'usercentrics',
|
|
58
|
+
'osano',
|
|
59
|
+
'cookieyes',
|
|
60
|
+
'complianz',
|
|
61
|
+
'klaro',
|
|
62
|
+
'tcf',
|
|
63
|
+
'consent_mode',
|
|
64
|
+
];
|
|
65
|
+
function prop(o, key) {
|
|
66
|
+
try {
|
|
67
|
+
return o != null && (typeof o === 'object' || typeof o === 'function') ? o[key] : undefined;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function call(fn, self, ...args) {
|
|
74
|
+
try {
|
|
75
|
+
return typeof fn === 'function' ? fn.apply(self, args) : undefined;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function cookie(cookies, name) {
|
|
82
|
+
if (!cookies)
|
|
83
|
+
return null;
|
|
84
|
+
for (const part of cookies.split(';')) {
|
|
85
|
+
const p = part.trim();
|
|
86
|
+
if (p.startsWith(`${name}=`)) {
|
|
87
|
+
const raw = p.slice(name.length + 1);
|
|
88
|
+
try {
|
|
89
|
+
return decodeURIComponent(raw);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return raw;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
function time(v) {
|
|
99
|
+
if (typeof v === 'number' && Number.isFinite(v) && v > 0)
|
|
100
|
+
return new Date(v < 1e12 ? v * 1000 : v).toISOString();
|
|
101
|
+
if (typeof v === 'string' && v && v.length <= 40) {
|
|
102
|
+
if (/^\d{9,13}$/.test(v))
|
|
103
|
+
return time(Number(v));
|
|
104
|
+
const t = Date.parse(v);
|
|
105
|
+
if (Number.isFinite(t))
|
|
106
|
+
return new Date(t).toISOString();
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
function found(source, code, clickId, anonId, at) {
|
|
111
|
+
const out = { source, code: token(code), clickId: token(clickId), anonId: token(anonId) };
|
|
112
|
+
const ts = time(at);
|
|
113
|
+
if (ts)
|
|
114
|
+
out.capturedAt = ts;
|
|
115
|
+
return out.code || out.clickId || out.anonId ? out : null;
|
|
116
|
+
}
|
|
117
|
+
/** Each known source: where its script or cookie keeps the referral. */
|
|
118
|
+
const READERS = {
|
|
119
|
+
// Referally's aff.js: aff.getReferral() → {code, clickId, anonId, ts}.
|
|
120
|
+
referally: ({ win }) => {
|
|
121
|
+
const aff = prop(win, 'aff');
|
|
122
|
+
const r = call(prop(aff, 'getReferral'), aff);
|
|
123
|
+
if (!isBag(r))
|
|
124
|
+
return null;
|
|
125
|
+
return found('referally', r.code, r.clickId ?? r.click_id, r.anonId ?? r.anon_id, r.ts);
|
|
126
|
+
},
|
|
127
|
+
// Rewardful's rw.js: Rewardful.referral (the referral id) and Rewardful.affiliate.token (the link code).
|
|
128
|
+
rewardful: ({ win }) => {
|
|
129
|
+
const rw = prop(win, 'Rewardful');
|
|
130
|
+
return found('rewardful', prop(prop(rw, 'affiliate'), 'token'), prop(rw, 'referral'), null);
|
|
131
|
+
},
|
|
132
|
+
// Tolt's script: window.tolt_referral (the referral id).
|
|
133
|
+
tolt: ({ win }) => found('tolt', null, prop(win, 'tolt_referral'), null),
|
|
134
|
+
// PromoteKit's script: window.promotekit_referral (the referral id).
|
|
135
|
+
promotekit: ({ win }) => found('promotekit', null, prop(win, 'promotekit_referral'), null),
|
|
136
|
+
// FirstPromoter's cookies: _fprom_tid (tracking id) and _fprom_ref (the referral code).
|
|
137
|
+
firstpromoter: ({ cookies }) => found('firstpromoter', cookie(cookies, '_fprom_ref'), cookie(cookies, '_fprom_tid'), null),
|
|
138
|
+
// PartnerStack's cookies: ps_xid (click id) and ps_partner_key (the partner's key).
|
|
139
|
+
partnerstack: ({ cookies }) => found('partnerstack', cookie(cookies, 'ps_partner_key'), cookie(cookies, 'ps_xid'), null),
|
|
140
|
+
// Dub's analytics script cookie: dub_id (click id).
|
|
141
|
+
dub: ({ cookies }) => found('dub', null, cookie(cookies, 'dub_id'), null),
|
|
142
|
+
};
|
|
143
|
+
/** The app's own reader, as a detected referral (source `custom`). Never throws. */
|
|
144
|
+
function customReferral(reader) {
|
|
145
|
+
if (typeof reader !== 'function')
|
|
146
|
+
return null;
|
|
147
|
+
let r;
|
|
148
|
+
try {
|
|
149
|
+
r = reader();
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
if (!isBag(r))
|
|
155
|
+
return null;
|
|
156
|
+
return found('custom', r.code, r.clickId ?? r.click_id, r.anonId ?? r.anon_id, r.capturedAt ?? r.ts);
|
|
157
|
+
}
|
|
158
|
+
/** The first of `sources` with a referral on the page, or null. Unknown ids are skipped. */
|
|
159
|
+
function detectReferralSource(page, sources) {
|
|
160
|
+
for (const id of sources) {
|
|
161
|
+
const read = READERS[id];
|
|
162
|
+
if (!read)
|
|
163
|
+
continue;
|
|
164
|
+
let r = null;
|
|
165
|
+
try {
|
|
166
|
+
r = read(page);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
r = null;
|
|
170
|
+
}
|
|
171
|
+
if (r)
|
|
172
|
+
return r;
|
|
173
|
+
}
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const ALIASES = {
|
|
177
|
+
necessary: 'necessary',
|
|
178
|
+
essential: 'necessary',
|
|
179
|
+
strictly_necessary: 'necessary',
|
|
180
|
+
preferences: 'preferences',
|
|
181
|
+
functional: 'preferences',
|
|
182
|
+
functionality: 'preferences',
|
|
183
|
+
personalization: 'preferences',
|
|
184
|
+
statistics: 'statistics',
|
|
185
|
+
analytics: 'statistics',
|
|
186
|
+
performance: 'statistics',
|
|
187
|
+
marketing: 'marketing',
|
|
188
|
+
advertising: 'marketing',
|
|
189
|
+
advertisement: 'marketing',
|
|
190
|
+
targeting: 'marketing',
|
|
191
|
+
ads: 'marketing',
|
|
192
|
+
};
|
|
193
|
+
/** A consent category's common meaning, if it has one. */
|
|
194
|
+
function canonicalCategory(name) {
|
|
195
|
+
return ALIASES[name.trim().toLowerCase()] ?? null;
|
|
196
|
+
}
|
|
197
|
+
const bool = (v) => (typeof v === 'boolean' ? v : undefined);
|
|
198
|
+
/** Look a category up by its own name, then by its common meaning's native name. */
|
|
199
|
+
function byName(native, lookup) {
|
|
200
|
+
return (_win, category) => {
|
|
201
|
+
const own = lookup(category);
|
|
202
|
+
if (own !== undefined)
|
|
203
|
+
return own;
|
|
204
|
+
const c = canonicalCategory(category);
|
|
205
|
+
const mapped = c ? native[c] : undefined;
|
|
206
|
+
return mapped ? lookup(mapped) : undefined;
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/** The latest IAB TCF data, kept by a listener registered when the SDK loads. */
|
|
210
|
+
let tcfCache = null;
|
|
211
|
+
let tcfListening = false;
|
|
212
|
+
/**
|
|
213
|
+
* Start listening to an IAB TCF v2 manager (`__tcfapi`), so its answer is
|
|
214
|
+
* ready synchronously when a sign-in starts. Safe to call more than once.
|
|
215
|
+
*/
|
|
216
|
+
function listenForTcfConsent(win) {
|
|
217
|
+
const api = prop(win, '__tcfapi');
|
|
218
|
+
if (tcfListening || typeof api !== 'function')
|
|
219
|
+
return;
|
|
220
|
+
tcfListening = true;
|
|
221
|
+
call(api, win, 'addEventListener', 2, (data, ok) => {
|
|
222
|
+
if (ok && isBag(data))
|
|
223
|
+
tcfCache = data;
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/** Forget the cached TCF data (tests). */
|
|
227
|
+
function resetConsentDetection() {
|
|
228
|
+
tcfCache = null;
|
|
229
|
+
tcfListening = false;
|
|
230
|
+
}
|
|
231
|
+
function tcfData(win) {
|
|
232
|
+
if (tcfCache)
|
|
233
|
+
return tcfCache;
|
|
234
|
+
// Most managers answer getTCData synchronously once loaded.
|
|
235
|
+
let data = null;
|
|
236
|
+
call(prop(win, '__tcfapi'), win, 'getTCData', 2, (d, ok) => {
|
|
237
|
+
if (ok && isBag(d))
|
|
238
|
+
data = d;
|
|
239
|
+
});
|
|
240
|
+
return data;
|
|
241
|
+
}
|
|
242
|
+
const STANDARD = { necessary: 'necessary', preferences: 'preferences', statistics: 'statistics', marketing: 'marketing' };
|
|
243
|
+
const has = (list, k) => Array.isArray(list) && list.includes(k);
|
|
244
|
+
const MANAGERS = {
|
|
245
|
+
// Cookie Munch: CookieMunch.consent → {necessary, preferences, statistics, marketing, <custom>…}.
|
|
246
|
+
cookiemunch: {
|
|
247
|
+
present: (w) => isBag(prop(prop(w, 'CookieMunch'), 'consent')),
|
|
248
|
+
ask: (w, category) => {
|
|
249
|
+
const c = prop(prop(w, 'CookieMunch'), 'consent');
|
|
250
|
+
return byName(STANDARD, (k) => bool(prop(c, k)))(w, category);
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
// OneTrust: OnetrustActiveGroups = ",C0001,C0002,…" (the groups consented to).
|
|
254
|
+
onetrust: {
|
|
255
|
+
present: (w) => typeof (prop(w, 'OnetrustActiveGroups') ?? prop(w, 'OptanonActiveGroups')) === 'string',
|
|
256
|
+
ask: (w, category) => {
|
|
257
|
+
const groups = String(prop(w, 'OnetrustActiveGroups') ?? prop(w, 'OptanonActiveGroups') ?? '')
|
|
258
|
+
.split(',')
|
|
259
|
+
.map((g) => g.trim())
|
|
260
|
+
.filter(Boolean);
|
|
261
|
+
// A group id (C0004, or a custom one the page uses) is answered by membership; other names are unknown.
|
|
262
|
+
return byName({ necessary: 'C0001', statistics: 'C0002', preferences: 'C0003', marketing: 'C0004' }, (k) => /^C\d{4}$/.test(k) || groups.includes(k) ? groups.includes(k) : undefined)(w, category);
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
// Cookiebot: Cookiebot.consent → {necessary, preferences, statistics, marketing}. Cookie Munch also
|
|
266
|
+
// publishes a Cookiebot alias, so Cookiebot counts only without Cookie Munch.
|
|
267
|
+
cookiebot: {
|
|
268
|
+
present: (w) => !prop(w, 'CookieMunch') && isBag(prop(prop(w, 'Cookiebot'), 'consent')),
|
|
269
|
+
ask: (w, category) => {
|
|
270
|
+
const c = prop(prop(w, 'Cookiebot'), 'consent');
|
|
271
|
+
return byName(STANDARD, (k) => bool(prop(c, k)))(w, category);
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
// Didomi: Didomi.getUserStatus().purposes.global.{enabled, disabled}. Marketing maps to
|
|
275
|
+
// Purpose 1 ("cookies": store and access information on a device).
|
|
276
|
+
didomi: {
|
|
277
|
+
present: (w) => typeof prop(prop(w, 'Didomi'), 'getUserStatus') === 'function',
|
|
278
|
+
ask: (w, category) => {
|
|
279
|
+
const didomi = prop(w, 'Didomi');
|
|
280
|
+
const global = prop(prop(call(prop(didomi, 'getUserStatus'), didomi), 'purposes'), 'global');
|
|
281
|
+
const enabled = prop(global, 'enabled');
|
|
282
|
+
const disabled = prop(global, 'disabled');
|
|
283
|
+
return byName({ marketing: 'cookies', statistics: 'measure_content_performance' }, (k) => has(enabled, k) ? true : has(disabled, k) ? false : undefined)(w, category);
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
// Usercentrics: UC_UI.getServicesBaseInfo() → [{categorySlug, consent: {status}}]; a category is
|
|
287
|
+
// granted when every service in it is.
|
|
288
|
+
usercentrics: {
|
|
289
|
+
present: (w) => typeof prop(prop(w, 'UC_UI'), 'getServicesBaseInfo') === 'function',
|
|
290
|
+
ask: (w, category) => {
|
|
291
|
+
const uc = prop(w, 'UC_UI');
|
|
292
|
+
const services = call(prop(uc, 'getServicesBaseInfo'), uc);
|
|
293
|
+
if (!Array.isArray(services))
|
|
294
|
+
return undefined;
|
|
295
|
+
return byName({ necessary: 'essential', preferences: 'functional', statistics: 'functional', marketing: 'marketing' }, (slug) => {
|
|
296
|
+
const inCategory = services.filter((s) => prop(s, 'categorySlug') === slug);
|
|
297
|
+
return inCategory.length ? inCategory.every((s) => prop(prop(s, 'consent'), 'status') === true) : undefined;
|
|
298
|
+
})(w, category);
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
// Osano: Osano.cm.getConsent() → {MARKETING: 'ACCEPT' | 'DENY', ANALYTICS, PERSONALIZATION, ESSENTIAL}.
|
|
302
|
+
osano: {
|
|
303
|
+
present: (w) => typeof prop(prop(prop(w, 'Osano'), 'cm'), 'getConsent') === 'function',
|
|
304
|
+
ask: (w, category) => {
|
|
305
|
+
const cm = prop(prop(w, 'Osano'), 'cm');
|
|
306
|
+
const consent = call(prop(cm, 'getConsent'), cm);
|
|
307
|
+
return byName({ necessary: 'ESSENTIAL', preferences: 'PERSONALIZATION', statistics: 'ANALYTICS', marketing: 'MARKETING' }, (k) => {
|
|
308
|
+
const v = prop(consent, k) ?? prop(consent, k.toUpperCase());
|
|
309
|
+
return v === 'ACCEPT' ? true : v === 'DENY' ? false : undefined;
|
|
310
|
+
})(w, category);
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
// CookieYes: getCkyConsent().categories → {necessary, functional, analytics, performance, advertisement}.
|
|
314
|
+
cookieyes: {
|
|
315
|
+
present: (w) => typeof prop(w, 'getCkyConsent') === 'function',
|
|
316
|
+
ask: (w, category) => {
|
|
317
|
+
const categories = prop(call(prop(w, 'getCkyConsent'), w), 'categories');
|
|
318
|
+
return byName({ necessary: 'necessary', preferences: 'functional', statistics: 'analytics', marketing: 'advertisement' }, (k) => bool(prop(categories, k)))(w, category);
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
// Complianz: cmplz_has_consent(category) → boolean.
|
|
322
|
+
complianz: {
|
|
323
|
+
present: (w) => typeof prop(w, 'cmplz_has_consent') === 'function',
|
|
324
|
+
ask: (w, category) => byName({ necessary: 'functional', preferences: 'preferences', statistics: 'statistics', marketing: 'marketing' }, (k) => bool(call(prop(w, 'cmplz_has_consent'), w, k)))(w, category),
|
|
325
|
+
},
|
|
326
|
+
// Klaro: klaro.getManager().consents → {service: boolean}; the category names a service.
|
|
327
|
+
klaro: {
|
|
328
|
+
present: (w) => typeof prop(prop(w, 'klaro'), 'getManager') === 'function',
|
|
329
|
+
ask: (w, category) => {
|
|
330
|
+
const klaro = prop(w, 'klaro');
|
|
331
|
+
const consents = prop(call(prop(klaro, 'getManager'), klaro), 'consents');
|
|
332
|
+
return bool(prop(consents, category));
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
// IAB TCF v2: Purpose 1 (store and access information on a device) governs the cookie; where
|
|
336
|
+
// GDPR doesn't apply, no consent is needed.
|
|
337
|
+
tcf: {
|
|
338
|
+
present: (w) => typeof prop(w, '__tcfapi') === 'function',
|
|
339
|
+
ask: (w) => {
|
|
340
|
+
const data = tcfData(w);
|
|
341
|
+
if (!data)
|
|
342
|
+
return undefined;
|
|
343
|
+
if (data.gdprApplies === false)
|
|
344
|
+
return true;
|
|
345
|
+
return bool(prop(prop(prop(data, 'purpose'), 'consents'), '1')) ?? false;
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
// Google Consent Mode: ad_storage / analytics_storage / functionality_storage, updated else default.
|
|
349
|
+
consent_mode: {
|
|
350
|
+
present: (w) => isBag(prop(prop(prop(w, 'google_tag_data'), 'ics'), 'entries')),
|
|
351
|
+
ask: (w, category) => {
|
|
352
|
+
const entries = prop(prop(prop(w, 'google_tag_data'), 'ics'), 'entries');
|
|
353
|
+
return byName({ preferences: 'functionality_storage', statistics: 'analytics_storage', marketing: 'ad_storage' }, (k) => {
|
|
354
|
+
const e = prop(entries, k);
|
|
355
|
+
return bool(prop(e, 'update')) ?? bool(prop(e, 'default'));
|
|
356
|
+
})(w, category);
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
function appDecision(appConsent) {
|
|
361
|
+
let d = appConsent;
|
|
362
|
+
if (typeof appConsent === 'function') {
|
|
363
|
+
try {
|
|
364
|
+
d = appConsent();
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
d = undefined;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (d === 'granted' || d === true)
|
|
371
|
+
return true;
|
|
372
|
+
if (d === 'denied' || d === false)
|
|
373
|
+
return false;
|
|
374
|
+
return undefined;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Whether the referral cookie's ids may be read, and who decided. A consent
|
|
378
|
+
* manager on the page decides (`provider`: `auto` tries each in order, a
|
|
379
|
+
* manager id asks only that one); a manager that doesn't know either category
|
|
380
|
+
* answers no. With no manager, or `provider: 'app'`, the app's definite answer
|
|
381
|
+
* decides; else no.
|
|
382
|
+
*/
|
|
383
|
+
function detectConsent(win, categories, options = {}) {
|
|
384
|
+
const provider = options.provider || 'auto';
|
|
385
|
+
const fromApp = () => {
|
|
386
|
+
const app = appDecision(options.appConsent);
|
|
387
|
+
return app === undefined ? { granted: false, by: 'none' } : { granted: app, by: 'app' };
|
|
388
|
+
};
|
|
389
|
+
if (provider === 'app')
|
|
390
|
+
return fromApp();
|
|
391
|
+
const ids = provider === 'auto' ? exports.CONSENT_PROVIDERS : [provider];
|
|
392
|
+
const names = categories.filter((c) => typeof c === 'string' && c.trim().length > 0);
|
|
393
|
+
for (const id of ids) {
|
|
394
|
+
const m = MANAGERS[id];
|
|
395
|
+
let present = false;
|
|
396
|
+
try {
|
|
397
|
+
present = !!m && m.present(win);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
present = false;
|
|
401
|
+
}
|
|
402
|
+
if (!m || !present)
|
|
403
|
+
continue;
|
|
404
|
+
for (const name of names) {
|
|
405
|
+
let v;
|
|
406
|
+
try {
|
|
407
|
+
v = m.ask(win, name);
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
v = undefined;
|
|
411
|
+
}
|
|
412
|
+
if (v !== undefined)
|
|
413
|
+
return { granted: v, by: id };
|
|
414
|
+
}
|
|
415
|
+
return { granted: false, by: id };
|
|
416
|
+
}
|
|
417
|
+
return fromApp();
|
|
418
|
+
}
|
|
419
|
+
/** Which consent manager is on the page (`auto` order), or null. For diagnostics. */
|
|
420
|
+
function detectConsentProvider(win) {
|
|
421
|
+
for (const id of exports.CONSENT_PROVIDERS) {
|
|
422
|
+
try {
|
|
423
|
+
if (MANAGERS[id].present(win))
|
|
424
|
+
return id;
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
// keep looking
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=referral-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referral-detect.js","sourceRoot":"","sources":["../src/referral-detect.ts"],"names":[],"mappings":"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"}
|