@adv-ui/boros-tcf
Version:
Adevinta GDPR - Transparency and Consent Framework - API
95 lines (69 loc) • 3.05 kB
JavaScript
;
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 = '.';