@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.
@@ -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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"}