UNPKG

@adv-ui/boros-tcf

Version:

Adevinta GDPR - Transparency and Consent Framework - API

95 lines (69 loc) 3.05 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserCookieStorage = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inheritsLoose")); var _CookieStorage2 = require("./CookieStorage"); var _constants = require("../../../core/constants"); var BrowserCookieStorage = /*#__PURE__*/function (_CookieStorage) { (0, _inheritsLoose2["default"])(BrowserCookieStorage, _CookieStorage); function BrowserCookieStorage(_ref) { var _this; var window = _ref.window, cookieName = _ref.cookieName; _this = _CookieStorage.call(this) || this; _this._window = window; _this._cookieName = cookieName; return _this; } var _proto = BrowserCookieStorage.prototype; _proto.load = function load() { this._replaceSubdomainCookie(); var cookies = this._getConsentCookies(); return cookies.length ? cookies[0].split('=')[1] : undefined; }; _proto.save = function save(_ref2) { var data = _ref2.data; var domain = this._parseDomain(); var cookieValue = [this._cookieName + "=" + data, "domain=" + domain, "path=" + _constants.VENDOR_CONSENT_COOKIE_DEFAULT_PATH, "max-age=" + _constants.VENDOR_CONSENT_COOKIE_MAX_AGE, "SameSite=" + _constants.VENDOR_CONSENT_COOKIE_SAME_SITE_LOCAL_VALUE].join(';'); this._window.document.cookie = cookieValue; }; _proto._replaceSubdomainCookie = function _replaceSubdomainCookie() { var consentCookies = this._getConsentCookies(); if (!consentCookies.length) { return; } var data = consentCookies[0].split('=')[1]; var host = this._window.location.hostname || ''; var cookieParts = [this._cookieName + "=", "path=" + _constants.VENDOR_CONSENT_COOKIE_DEFAULT_PATH, "domain=" + host, "expires= Thu, 01 Jan 1970 00:00:00 GMT", "SameSite=" + _constants.VENDOR_CONSENT_COOKIE_SAME_SITE_LOCAL_VALUE]; this._window.document.cookie = cookieParts.join(';'); // delete cookie with subdomain var consentCookiesAfterDeletion = this._getConsentCookies(); if (!consentCookiesAfterDeletion.length) { this.save({ data: data }); } }; _proto._getConsentCookies = function _getConsentCookies() { var _this2 = this; var cookies = ("; " + this._window.document.cookie).split(';'); var consentCookies = cookies.filter(function (cookie) { return cookie.includes(_this2._cookieName + "="); }).map(function (cookie) { return cookie.trim(); }); return consentCookies; }; _proto._parseDomain = function _parseDomain() { var host = this._window.location.hostname || ''; var parts = host.split(DOT).reverse().filter(function (_, index) { return index <= 1; }).reverse(); return parts.length === 1 ? parts[0] : "" + DOT + parts.join('.'); }; return BrowserCookieStorage; }(_CookieStorage2.CookieStorage); exports.BrowserCookieStorage = BrowserCookieStorage; var DOT = '.';