all files / src/onetrust/ index.js

12.5% Statements 3/24
0% Branches 0/12
0% Functions 0/7
12.5% Lines 3/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105                                                                                                                                                                                                           
import { communicationService } from '../shared/communication';
import { loadScript } from '../shared/utils';
 
const ONE_TRUST_DOMAIN_ID = {
    'fanatical.com': '0ab0e172-dc9c-44b9-8a58-c80d9ba4fae0-test',
    'futhead.com': '82c642a4-d3a9-4a78-a310-21a7b49ab17b-test',
    'gamespot.com' : '73588546-b116-4dbc-ab64-9db97e11fc0d-test',
    'metacritic.com': '50e16f1d-a929-4cc0-80a7-3c5c303eea6a-test',
    'muthead.com': 'fb34a16e-696d-4748-af9f-96f3b9e2b4da-test',
    'tvguide.com' : 'ffc22311-f4da-4e03-a1ad-32aecd522c5b-test',
    'fandom.com': 'dea70a1b-c82d-4fe0-86ff-5e164b0a6022',
    'sandbox.fandom.com': 'dea70a1b-c82d-4fe0-86ff-5e164b0a6022-test',
}
 
const ONE_TRUST_LIBRARIES = [
    {
        url: 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js',
        options: {
            type: 'text/javascript',
        }
    }, {
        url: 'https://cdn.cookielaw.org/opt-out/otCCPAiab.js',
        options: {
            charSet: 'UTF-8',
            type: 'text/javascript',
            'ccpa-opt-out-ids': 'C0004',
            'ccpa-opt-out-geo': 'ca',
            'ccpa-opt-out-lspa': true
        }
    }, {
        url: 'https://cdn.cookielaw.org/consent/tcf.stub.js',
        options: {
            charSet: 'UTF-8',
            type: 'text/javascript',
        }
    }
]
 
class OneTrustWrapper {
    ALLOW_TRACKING_GROUP = 'C0004';
    FANDOM_DOMAIN = 'fandom.com';
    optInInstances;
    optInManager;
 
    initialize(optInInstances, options) {
        this.optInManager = new OptInManager(
            window.location.hostname,
            options.cookieName,
            options.cookieExpiration,
            options.cookieRejectExpiration,
            options.queryParamName,
        );
        this.loadOneTrustScripts();
        this.optInInstances = optInInstances;
        window.OptanonWrapper = this.OptanonWrapper.bind(this);
    }
 
    getDomainId() {
        const domainParts = location.hostname.split('.');
        const domainPartsCount = domainParts.length;
 
        let completeDomain = [domainParts[domainPartsCount - 2], domainParts[domainPartsCount - 1]].join('.');
        if (completeDomain === this.FANDOM_DOMAIN && location.hostname.includes('sandbox')) {
            completeDomain = 'sandbox.' + completeDomain;
        }
 
        return ONE_TRUST_DOMAIN_ID[completeDomain] || ONE_TRUST_DOMAIN_ID["fandom.com"];
    }
 
    loadOneTrustScripts(){
        ONE_TRUST_LIBRARIES.forEach((library) => {
            loadScript(library.url, {...library.options,
                'data-domain-script': this.getDomainId()
            });
        })
    }
 
    OptanonWrapper() {
        const consentBoxClosed = document.cookie.indexOf('OptanonAlertBoxClosed');
        if (consentBoxClosed !== -1) {
            this.setTrackingOptInCookies();
            this.dispatchConsentsSetAction();
        }
    }
 
    setTrackingOptInCookies() {
        if (window.OptanonActiveGroups && window.OptanonActiveGroups.includes(this.ALLOW_TRACKING_GROUP)) {
            this.optInManager.setTrackingAccepted();
        } else {
            this.optInManager.setTrackingRejected();
        }
    }
 
    dispatchConsentsSetAction() {
        const consentsSetAction = '[AdEngine OptIn] set opt in';
        communicationService.dispatch({
            type: consentsSetAction,
            ...this.optInInstances.gdpr.getConsent(),
            ...this.optInInstances.ccpa.getSignal(),
        });
    }
}
 
export const oneTrust = new OneTrustWrapper();