UNPKG

@altack/ngx-onetrust

Version:

OneTrust loader & wrapper for Angular

88 lines 14.2 kB
import { Inject, Injectable } from '@angular/core'; import { ONE_TRUST_CONFIGURATION } from '../one-trust-configuration.token'; import { appliedLocale$, loadOneTrust, OneTrust$ } from '../util/helpers'; import { distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators'; import { fromEventPattern, Subject } from 'rxjs'; import * as i0 from "@angular/core"; export class OneTrustService { constructor(config) { this.config = config; this.scriptsLoaded = false; this.cancelPrev$ = new Subject(); } loadOneTrust(domainScript) { if (this.scriptsLoaded) { console.warn('OneTrust already loaded!'); return; } // tslint:disable-next-line:max-line-length loadOneTrust(domainScript || this.config.domainScript || '', this.config.defaultCountry || '', this.config.documentBasedLanguage || true); this.scriptsLoaded = true; } translateBanner(langAlpha2, force) { this.cancelPrev$.next(); OneTrust$.pipe(takeUntil(this.cancelPrev$)).subscribe((oneTrust) => { langAlpha2 = langAlpha2.toLowerCase(); if (force || langAlpha2.length > 2) { if (appliedLocale$.getValue() !== langAlpha2) { appliedLocale$.next(langAlpha2); oneTrust.changeLanguage(langAlpha2); return; } } // builds a valid xx-YY in order to try to translate the banner using the resulting locale (e.g en-US) const geolocation = oneTrust.getGeolocationData(); if (geolocation && geolocation.country) { const targetLocale = `${langAlpha2}-${geolocation.country}`; if (appliedLocale$.getValue() !== targetLocale) { appliedLocale$.next(targetLocale); oneTrust.changeLanguage(targetLocale); } } }); } oneTrustInstance$() { return OneTrust$; } consentChanged$() { return OneTrust$.pipe(switchMap((oneTrust) => this.fromConsentChanged(oneTrust)), map((groups) => this.cookiesPermissionMap(groups)), distinctUntilChanged((prev, next) => { return this.areMapsEquals(prev, next); })); } oneTrustActiveGroups() { // tslint:disable:no-string-literal return window['OnetrustActiveGroups'].split(',').filter(Boolean); } fromConsentChanged(oneTrustInstance) { return fromEventPattern((handler) => oneTrustInstance.OnConsentChanged(handler)).pipe(map((event) => event.detail), startWith(this.oneTrustActiveGroups())); } cookiesPermissionMap(foundCookies) { const cookiesGroups = new Map(); // maps found cookies to real cookies groups Object.keys(this.config.cookiesGroups).forEach((key) => { // casting is possible because the way the CookiesGroups enum was declared (e.g StrictlyNecessaryCookies = 'StrictlyNecessaryCookies') const cookieValue = this.config.cookiesGroups[key]; if (foundCookies.includes(cookieValue)) { cookiesGroups.set(key, true); } }); return cookiesGroups; } areMapsEquals(prev, next) { // different sizes means something changed if (prev.size !== next.size) { return false; } // check if keys from next are the same as keys from prev return [...next.keys()].every((key) => prev.has(key)); } } OneTrustService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OneTrustService, deps: [{ token: ONE_TRUST_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Injectable }); OneTrustService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OneTrustService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: OneTrustService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [ONE_TRUST_CONFIGURATION] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLXRydXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb25ldHJ1c3Qvc3JjL2xpYi9zZXJ2aWNlcy9vbmUtdHJ1c3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUzRSxPQUFPLEVBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFJN0QsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFBb0QsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFGbEUsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ21DLENBQUM7SUFFOUUsWUFBWSxDQUFDLFlBQXFCO1FBQ2hDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDekMsT0FBTztTQUNSO1FBQ0QsMkNBQTJDO1FBQzNDLFlBQVksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzFJLElBQUksQ0FB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LENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN0QyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhLENBQ2pCLElBQWlDLEVBQ2pDLElBQWlDO1FBRW5DLDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QseURBQXlEO1FBQ3pELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDOzs0R0E3RlUsZUFBZSxrQkFHTix1QkFBdUI7Z0hBSGhDLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBSUksTUFBTTsyQkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ORV9UUlVTVF9DT05GSUdVUkFUSU9OIH0gZnJvbSAnLi4vb25lLXRydXN0LWNvbmZpZ3VyYXRpb24udG9rZW4nO1xuaW1wb3J0IHsgQ29uc2VudEV2ZW50LCBDb29raWVzR3JvdXBzLCBPbmVUcnVzdCwgT25lVHJ1c3RDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2FwcGxpZWRMb2NhbGUkLCBsb2FkT25lVHJ1c3QsIE9uZVRydXN0JH0gZnJvbSAnLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmcm9tRXZlbnRQYXR0ZXJuLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb2RlRXZlbnRIYW5kbGVyIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPbmVUcnVzdFNlcnZpY2Uge1xuICBwcml2YXRlIHNjcmlwdHNMb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjYW5jZWxQcmV2JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoT05FX1RSVVNUX0NPTkZJR1VSQVRJT04pIHB1YmxpYyBjb25maWc6IE9uZVRydXN0Q29uZmlnKSB7fVxuXG4gIGxvYWRPbmVUcnVzdChkb21haW5TY3JpcHQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JpcHRzTG9hZGVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09uZVRydXN0IGFscmVhZHkgbG9hZGVkIScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgbG9hZE9uZVRydXN0KGRvbWFpblNjcmlwdCB8fCB0aGlzLmNvbmZpZy5kb21haW5TY3JpcHQgfHwgJycsIHRoaXMuY29uZmlnLmRlZmF1bHRDb3VudHJ5IHx8ICcnLCB0aGlzLmNvbmZpZy5kb2N1bWVudEJhc2VkTGFuZ3VhZ2UgfHwgdHJ1ZSk7XG4gICAgdGhpcy5zY3JpcHRzTG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUJhbm5lcihsYW5nQWxwaGEyOiBzdHJpbmcsIGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsUHJldiQubmV4dCgpO1xuICAgIE9uZVRydXN0JC5waXBlKHRha2VVbnRpbCh0aGlzLmNhbmNlbFByZXYkKSkuc3Vic2NyaWJlKChvbmVUcnVzdDogT25lVHJ1c3QpID0+IHtcbiAgICAgIGxhbmdBbHBoYTIgPSBsYW5nQWxwaGEyLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoZm9yY2UgfHwgbGFuZ0FscGhhMi5sZW5ndGggPiAyKSB7XG4gICAgICAgIGlmIChhcHBsaWVkTG9jYWxlJC5nZXRWYWx1ZSgpICE9PSBsYW5nQWxwaGEyKSB7XG4gICAgICAgICAgYXBwbGllZExvY2FsZSQubmV4dChsYW5nQWxwaGEyKTtcbiAgICAgICAgICBvbmVUcnVzdC5jaGFuZ2VMYW5ndWFnZShsYW5nQWxwaGEyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGJ1aWxkcyBhIHZhbGlkIHh4LVlZIGluIG9yZGVyIHRvIHRyeSB0byB0cmFuc2xhdGUgdGhlIGJhbm5lciB1c2luZyB0aGUgcmVzdWx0aW5nIGxvY2FsZSAoZS5nIGVuLVVTKVxuICAgICAgY29uc3QgZ2VvbG9jYXRpb24gPSBvbmVUcnVzdC5nZXRHZW9sb2NhdGlvbkRhdGEoKTtcbiAgICAgIGlmIChnZW9sb2NhdGlvbiAmJiBnZW9sb2NhdGlvbi5jb3VudHJ5KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldExvY2FsZSA9IGAke2xhbmdBbHBoYTJ9LSR7Z2VvbG9jYXRpb24uY291bnRyeX1gO1xuICAgICAgICBpZiAoYXBwbGllZExvY2FsZSQuZ2V0VmFsdWUoKSAhPT0gdGFyZ2V0TG9jYWxlKSB7XG4gICAgICAgICAgYXBwbGllZExvY2FsZSQubmV4dCh0YXJnZXRMb2NhbGUpO1xuICAgICAgICAgIG9uZVRydXN0LmNoYW5nZUxhbmd1YWdlKHRhcmdldExvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uZVRydXN0SW5zdGFuY2UkKCk6IE9ic2VydmFibGU8T25lVHJ1c3Q+IHtcbiAgICByZXR1cm4gT25lVHJ1c3QkO1xuICB9XG5cbiAgY29uc2VudENoYW5nZWQkKCk6IE9ic2VydmFibGU8TWFwPENvb2tpZXNHcm91cHMsIGJvb2xlYW4+PiB7XG4gICAgcmV0dXJuIE9uZVRydXN0JC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG9uZVRydXN0OiBPbmVUcnVzdCkgPT4gdGhpcy5mcm9tQ29uc2VudENoYW5nZWQob25lVHJ1c3QpKSxcbiAgICAgICAgbWFwKChncm91cHM6IEFycmF5PHN0cmluZz4pID0+IHRoaXMuY29va2llc1Blcm1pc3Npb25NYXAoZ3JvdXBzKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAgICAgKHByZXY6IE1hcDxDb29raWVzR3JvdXBzLCBib29sZWFuPiwgbmV4dDogTWFwPENvb2tpZXNHcm91cHMsIGJvb2xlYW4+KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZU1hcHNFcXVhbHMocHJldiwgbmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbmVUcnVzdEFjdGl2ZUdyb3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgIHJldHVybiAod2luZG93WydPbmV0cnVzdEFjdGl2ZUdyb3VwcyddIGFzIHN0cmluZykuc3BsaXQoJywnKS5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICBwcml2YXRlIGZyb21Db25zZW50Q2hhbmdlZChvbmVUcnVzdEluc3RhbmNlOiBPbmVUcnVzdCk6IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIGZyb21FdmVudFBhdHRlcm4oXG4gICAgICAgICAgICAoaGFuZGxlcjogTm9kZUV2ZW50SGFuZGxlcikgPT4gb25lVHJ1c3RJbnN0YW5jZS5PbkNvbnNlbnRDaGFuZ2VkKGhhbmRsZXIpIGFzIENvbnNlbnRFdmVudFxuICAgICAgICApIGFzIE9ic2VydmFibGU8Q29uc2VudEV2ZW50PlxuICAgICkucGlwZShcbiAgICAgICAgbWFwKChldmVudDogQ29uc2VudEV2ZW50KSA9PiBldmVudC5kZXRhaWwpLFxuICAgICAgICBzdGFydFdpdGgodGhpcy5vbmVUcnVzdEFjdGl2ZUdyb3VwcygpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvb2tpZXNQZXJtaXNzaW9uTWFwKGZvdW5kQ29va2llczogQXJyYXk8c3RyaW5nPik6IE1hcDxDb29raWVzR3JvdXBzLCBib29sZWFuPiB7XG4gICAgY29uc3QgY29va2llc0dyb3VwcyA9IG5ldyBNYXA8Q29va2llc0dyb3VwcywgYm9vbGVhbj4oKTtcbiAgICAvLyBtYXBzIGZvdW5kIGNvb2tpZXMgdG8gcmVhbCBjb29raWVzIGdyb3Vwc1xuICAgIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmNvb2tpZXNHcm91cHMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBjYXN0aW5nIGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhlIHdheSB0aGUgQ29va2llc0dyb3VwcyBlbnVtIHdhcyBkZWNsYXJlZCAoZS5nIFN0cmljdGx5TmVjZXNzYXJ5Q29va2llcyA9ICdTdHJpY3RseU5lY2Vzc2FyeUNvb2tpZXMnKVxuICAgICAgY29uc3QgY29va2llVmFsdWUgPSB0aGlzLmNvbmZpZy5jb29raWVzR3JvdXBzW2tleSBhcyBDb29raWVzR3JvdXBzXTtcbiAgICAgIGlmIChmb3VuZENvb2tpZXMuaW5jbHVkZXMoY29va2llVmFsdWUpKSB7XG4gICAgICAgIGNvb2tpZXNHcm91cHMuc2V0KGtleSBhcyBDb29raWVzR3JvdXBzLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29va2llc0dyb3VwcztcbiAgfVxuXG4gIHByaXZhdGUgYXJlTWFwc0VxdWFscyhcbiAgICAgIHByZXY6IE1hcDxDb29raWVzR3JvdXBzLCBib29sZWFuPixcbiAgICAgIG5leHQ6IE1hcDxDb29raWVzR3JvdXBzLCBib29sZWFuPlxuICApOiBib29sZWFuIHtcbiAgICAvLyBkaWZmZXJlbnQgc2l6ZXMgbWVhbnMgc29tZXRoaW5nIGNoYW5nZWRcbiAgICBpZiAocHJldi5zaXplICE9PSBuZXh0LnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gY2hlY2sgaWYga2V5cyBmcm9tIG5leHQgYXJlIHRoZSBzYW1lIGFzIGtleXMgZnJvbSBwcmV2XG4gICAgcmV0dXJuIFsuLi5uZXh0LmtleXMoKV0uZXZlcnkoKGtleTogQ29va2llc0dyb3VwcykgPT4gcHJldi5oYXMoa2V5KSk7XG4gIH1cbn1cbiJdfQ==