@financial-times/cmp-client 4.1.0 → 4.2.0-beta.1

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.
package/dist/index.cjs CHANGED
@@ -66,6 +66,8 @@ const FT_DOTCOM_PROD = {
66
66
  propertyId: 31642,
67
67
  _clientOptions: {
68
68
  privacyManagerId: 827767,
69
+ usnatPrivacyManagerId: 944881,
70
+ ccpaPrivacyManagerId: 944882,
69
71
  manageCookiesLinkOverride: "ft.com/preferences/manage-cookies",
70
72
  rootDomain: "ft.com"
71
73
  }
@@ -175,40 +177,75 @@ const properties = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
175
177
  SP_SUSTAINABLE_VIEWS,
176
178
  SP_THE_BANKER
177
179
  }, Symbol.toStringTag, { value: "Module" }));
178
- const onDomReady = new Promise((resolve) => {
179
- if (typeof document === "undefined")
180
- return resolve();
181
- const isReady = () => ["interactive", "complete"].includes(document.readyState);
182
- function onStateChange() {
183
- if (isReady()) {
184
- document.removeEventListener("readystatechange", onStateChange);
185
- resolve();
186
- }
187
- }
188
- if (isReady())
189
- return resolve();
190
- document.addEventListener("readystatechange", onStateChange);
191
- });
192
- function findAndUpdateLinks(_clientOptions, loadPrivacyManagerModal) {
193
- const { privacyManagerId, manageCookiesLinkOverride } = _clientOptions ?? {};
194
- if (!privacyManagerId || !manageCookiesLinkOverride) {
195
- return console.warn("_clientOptions is missing privacyManagerId or manageCookiesLinkOverride");
196
- }
180
+ function findAndUpdateLinks(fallback, regionId, regionApplies, regionConfig, linkMap, manageCookiesLinkOverride) {
181
+ const { text, onClick } = regionConfig[regionId];
197
182
  const anchors = document.querySelectorAll(`a[href*="${manageCookiesLinkOverride}"]`);
198
183
  for (const anchor of anchors) {
199
- anchor.addEventListener("click", (event) => {
200
- event.preventDefault();
201
- loadPrivacyManagerModal == null ? void 0 : loadPrivacyManagerModal(+privacyManagerId);
202
- });
184
+ if (regionApplies || fallback) {
185
+ if (linkMap.has(anchor)) {
186
+ anchor.removeEventListener("click", linkMap.get(anchor));
187
+ }
188
+ anchor.innerText = text;
189
+ anchor.addEventListener("click", onClick);
190
+ linkMap.set(anchor, onClick);
191
+ }
203
192
  }
204
193
  }
205
194
  function interceptManageCookiesLinks({ _clientOptions } = FT_DOTCOM_PROD) {
206
- onDomReady.then(() => {
207
- window._sp_queue ?? (window._sp_queue = []);
208
- window._sp_queue.push(() => {
209
- var _a, _b;
210
- findAndUpdateLinks(_clientOptions, (_b = (_a = window._sp_) == null ? void 0 : _a.gdpr) == null ? void 0 : _b.loadPrivacyManagerModal);
211
- });
195
+ const {
196
+ privacyManagerId,
197
+ ccpaPrivacyManagerId,
198
+ usnatPrivacyManagerId,
199
+ manageCookiesLinkOverride
200
+ } = _clientOptions ?? FT_DOTCOM_PROD._clientOptions;
201
+ const regionConfig = {
202
+ usnat: {
203
+ text: "Do not sell my data",
204
+ onClick: (e) => {
205
+ var _a;
206
+ e.preventDefault();
207
+ (_a = window._sp_["usnat"]) == null ? void 0 : _a.loadPrivacyManagerModal(usnatPrivacyManagerId);
208
+ }
209
+ },
210
+ ccpa: {
211
+ text: "Do not sell my data",
212
+ onClick: (e) => {
213
+ var _a;
214
+ e.preventDefault();
215
+ (_a = window._sp_["ccpa"]) == null ? void 0 : _a.loadPrivacyManagerModal(ccpaPrivacyManagerId);
216
+ }
217
+ },
218
+ gdpr: {
219
+ text: "Manage cookies",
220
+ onClick: (e) => {
221
+ var _a;
222
+ e.preventDefault();
223
+ (_a = window._sp_["gdpr"]) == null ? void 0 : _a.loadPrivacyManagerModal(privacyManagerId);
224
+ }
225
+ }
226
+ };
227
+ const linkMap = /* @__PURE__ */ new Map();
228
+ const onConsentReadyHandler = function(message_type, _uuid, _string, info) {
229
+ console.log("handler called");
230
+ findAndUpdateLinks(
231
+ false,
232
+ message_type,
233
+ info.applies,
234
+ regionConfig,
235
+ linkMap,
236
+ manageCookiesLinkOverride
237
+ );
238
+ if (info.applies) {
239
+ window._sp_queue.push(() => {
240
+ var _a, _b;
241
+ (_b = (_a = window._sp_).removeEventListener) == null ? void 0 : _b.call(_a, "onConsentReady", onConsentReadyHandler);
242
+ });
243
+ }
244
+ };
245
+ findAndUpdateLinks(true, "gdpr", false, regionConfig, linkMap, manageCookiesLinkOverride);
246
+ window._sp_queue.push(() => {
247
+ var _a, _b;
248
+ (_b = (_a = window._sp_).addEventListener) == null ? void 0 : _b.call(_a, "onConsentReady", onConsentReadyHandler);
212
249
  });
213
250
  }
214
251
  const request = (url, { credentials = "omit" } = {}) => {
@@ -650,7 +687,7 @@ function setupPmTracking(trackingProps, cmpBaseEndpoint) {
650
687
  false
651
688
  );
652
689
  }
653
- const version = "4.1.0";
690
+ const version = "4.2.0-beta.1";
654
691
  async function initSourcepointCmp({
655
692
  propertyConfig = FT_DOTCOM_PROD,
656
693
  userId,
package/dist/index.js CHANGED
@@ -64,6 +64,8 @@ const FT_DOTCOM_PROD = {
64
64
  propertyId: 31642,
65
65
  _clientOptions: {
66
66
  privacyManagerId: 827767,
67
+ usnatPrivacyManagerId: 944881,
68
+ ccpaPrivacyManagerId: 944882,
67
69
  manageCookiesLinkOverride: "ft.com/preferences/manage-cookies",
68
70
  rootDomain: "ft.com"
69
71
  }
@@ -173,40 +175,75 @@ const properties = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
173
175
  SP_SUSTAINABLE_VIEWS,
174
176
  SP_THE_BANKER
175
177
  }, Symbol.toStringTag, { value: "Module" }));
176
- const onDomReady = new Promise((resolve) => {
177
- if (typeof document === "undefined")
178
- return resolve();
179
- const isReady = () => ["interactive", "complete"].includes(document.readyState);
180
- function onStateChange() {
181
- if (isReady()) {
182
- document.removeEventListener("readystatechange", onStateChange);
183
- resolve();
184
- }
185
- }
186
- if (isReady())
187
- return resolve();
188
- document.addEventListener("readystatechange", onStateChange);
189
- });
190
- function findAndUpdateLinks(_clientOptions, loadPrivacyManagerModal) {
191
- const { privacyManagerId, manageCookiesLinkOverride } = _clientOptions ?? {};
192
- if (!privacyManagerId || !manageCookiesLinkOverride) {
193
- return console.warn("_clientOptions is missing privacyManagerId or manageCookiesLinkOverride");
194
- }
178
+ function findAndUpdateLinks(fallback, regionId, regionApplies, regionConfig, linkMap, manageCookiesLinkOverride) {
179
+ const { text, onClick } = regionConfig[regionId];
195
180
  const anchors = document.querySelectorAll(`a[href*="${manageCookiesLinkOverride}"]`);
196
181
  for (const anchor of anchors) {
197
- anchor.addEventListener("click", (event) => {
198
- event.preventDefault();
199
- loadPrivacyManagerModal == null ? void 0 : loadPrivacyManagerModal(+privacyManagerId);
200
- });
182
+ if (regionApplies || fallback) {
183
+ if (linkMap.has(anchor)) {
184
+ anchor.removeEventListener("click", linkMap.get(anchor));
185
+ }
186
+ anchor.innerText = text;
187
+ anchor.addEventListener("click", onClick);
188
+ linkMap.set(anchor, onClick);
189
+ }
201
190
  }
202
191
  }
203
192
  function interceptManageCookiesLinks({ _clientOptions } = FT_DOTCOM_PROD) {
204
- onDomReady.then(() => {
205
- window._sp_queue ?? (window._sp_queue = []);
206
- window._sp_queue.push(() => {
207
- var _a, _b;
208
- findAndUpdateLinks(_clientOptions, (_b = (_a = window._sp_) == null ? void 0 : _a.gdpr) == null ? void 0 : _b.loadPrivacyManagerModal);
209
- });
193
+ const {
194
+ privacyManagerId,
195
+ ccpaPrivacyManagerId,
196
+ usnatPrivacyManagerId,
197
+ manageCookiesLinkOverride
198
+ } = _clientOptions ?? FT_DOTCOM_PROD._clientOptions;
199
+ const regionConfig = {
200
+ usnat: {
201
+ text: "Do not sell my data",
202
+ onClick: (e) => {
203
+ var _a;
204
+ e.preventDefault();
205
+ (_a = window._sp_["usnat"]) == null ? void 0 : _a.loadPrivacyManagerModal(usnatPrivacyManagerId);
206
+ }
207
+ },
208
+ ccpa: {
209
+ text: "Do not sell my data",
210
+ onClick: (e) => {
211
+ var _a;
212
+ e.preventDefault();
213
+ (_a = window._sp_["ccpa"]) == null ? void 0 : _a.loadPrivacyManagerModal(ccpaPrivacyManagerId);
214
+ }
215
+ },
216
+ gdpr: {
217
+ text: "Manage cookies",
218
+ onClick: (e) => {
219
+ var _a;
220
+ e.preventDefault();
221
+ (_a = window._sp_["gdpr"]) == null ? void 0 : _a.loadPrivacyManagerModal(privacyManagerId);
222
+ }
223
+ }
224
+ };
225
+ const linkMap = /* @__PURE__ */ new Map();
226
+ const onConsentReadyHandler = function(message_type, _uuid, _string, info) {
227
+ console.log("handler called");
228
+ findAndUpdateLinks(
229
+ false,
230
+ message_type,
231
+ info.applies,
232
+ regionConfig,
233
+ linkMap,
234
+ manageCookiesLinkOverride
235
+ );
236
+ if (info.applies) {
237
+ window._sp_queue.push(() => {
238
+ var _a, _b;
239
+ (_b = (_a = window._sp_).removeEventListener) == null ? void 0 : _b.call(_a, "onConsentReady", onConsentReadyHandler);
240
+ });
241
+ }
242
+ };
243
+ findAndUpdateLinks(true, "gdpr", false, regionConfig, linkMap, manageCookiesLinkOverride);
244
+ window._sp_queue.push(() => {
245
+ var _a, _b;
246
+ (_b = (_a = window._sp_).addEventListener) == null ? void 0 : _b.call(_a, "onConsentReady", onConsentReadyHandler);
210
247
  });
211
248
  }
212
249
  const request = (url, { credentials = "omit" } = {}) => {
@@ -648,7 +685,7 @@ function setupPmTracking(trackingProps, cmpBaseEndpoint) {
648
685
  false
649
686
  );
650
687
  }
651
- const version = "4.1.0";
688
+ const version = "4.2.0-beta.1";
652
689
  async function initSourcepointCmp({
653
690
  propertyConfig = FT_DOTCOM_PROD,
654
691
  userId,
@@ -1 +1 @@
1
- (function(){"use strict";var T,k;const N=(e,{credentials:t="omit"}={})=>fetch(`https://session-next.ft.com${e}`,{credentials:t,useCorsProxy:!0}).then(n=>n.ok?n.json():n.text().then(o=>{throw new Error(`Next session responded with "${o}" (${n.status})`)})).catch(n=>{document.body.dispatchEvent(new CustomEvent("oErrors.log",{bubbles:!0,detail:{error:n,info:{component:"next-session-client"}}}))});let l={};const g=(e,t)=>{if(typeof e=="object"){l=e;return}if(typeof e=="string"&&typeof t=="string"){l[e]=t;return}if(typeof e=="string"&&typeof t>"u")return l[e]||null;if(typeof e>"u"&&typeof t>"u")return l;throw new Error("Invalid arguments")};g.clear=()=>{l={}};const f={},P=()=>{const[,e]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return e},L=()=>{const e=g("uuid");if(e)return Promise.resolve({uuid:e});const t=P();return t?(f.uuid||(f.uuid=N(`/sessions/s/${t}`).then(({uuid:n}={})=>(delete f.uuid,n&&g("uuid",n),{uuid:n}))),f.uuid):Promise.resolve({uuid:void 0})},I="sourcepoint-cmp",M="FTPINK",A="FTConsent",D="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk",R=".ft.com",F="https://consent.ft.com",v={permutiveAds:{purposes:[2,4,8,9],iabVendors:[361],customVendors:[],specialFeatures:[]},demographicAds:{purposes:[7,9,10],iabVendors:[],customVendors:[],specialFeatures:[]},behaviouralAds:{purposes:[2,4,8,9],iabVendors:[],customVendors:[],specialFeatures:[]},programmaticAds:{purposes:[2],iabVendors:[],customVendors:[],specialFeatures:[]},personalisedMarketing:{purposes:[2,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]}},E=Object.keys(v),i={joinHref:!0,gdpr:{},ccpa:{}},w={...i,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyHref:"https://local.ft.com",_clientOptions:{privacyManagerId:827767,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies"}},y={...i,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyId:31642,_clientOptions:{privacyManagerId:827767,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies",rootDomain:"ft.com"}},V={...i,accountId:1906,baseEndpoint:"https://consent-manager.pwmnet.com",propertyId:33414,_clientOptions:{rootDomain:"pwmnet.com"}},j={...i,accountId:1906,baseEndpoint:"https://consent-manager.fdiintelligence.com",propertyId:34061,_clientOptions:{rootDomain:"fdiintelligence.com"}},H={...i,accountId:1906,baseEndpoint:"https://consent-manager.thebanker.com",propertyId:34060,_clientOptions:{rootDomain:"thebanker.com"}},U={...i,accountId:1906,baseEndpoint:"https://consent-manager.bankingriskandregulation.com",propertyId:34059,_clientOptions:{rootDomain:"bankingriskandregulation.com"}},x={...i,accountId:1906,baseEndpoint:"https://consent-manager.sustainableviews.com",propertyId:34058,_clientOptions:{rootDomain:"sustainableviews.com"}},q={...i,accountId:1906,baseEndpoint:"https://consent-manager.ftadviser.com",propertyId:33416,_clientOptions:{rootDomain:"ftadviser.com"}},$={...i,accountId:1906,baseEndpoint:"https://consent-manager.investorschronicle.co.uk",propertyId:33415,_clientOptions:{rootDomain:"investorschronicle.co.uk"}},G={...i,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33947,_clientOptions:{rootDomain:"ignitesasia.com"}},W={...i,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33946,_clientOptions:{rootDomain:"igniteseurope.com"}},K={...i,accountId:1906,baseEndpoint:"https://consent-manager.mandatewire.com",propertyId:35490,_clientOptions:{rootDomain:"mandatewire.com"}},B=Object.freeze(Object.defineProperty({__proto__:null,FT_DOTCOM_PROD:y,FT_DOTCOM_TEST:w,MM_IGNITES_ASIA:G,MM_IGNITES_EUROPE:W,SP_BANKING_RR:U,SP_FDI_INTELLIGENCE:j,SP_FT_ADVISER:q,SP_INVESTORS_CHRONICLE:$,SP_MANDATE_WIRE:K,SP_PWMNET:V,SP_SUSTAINABLE_VIEWS:x,SP_THE_BANKER:H},Symbol.toStringTag,{value:"Module"}));function O(e,t){const n=document.createElement("script");return n.dataset.cmpScript=e,n.innerHTML=t,n}function J(e){const t=document.createElement("script");return t.src=e,t}const X={cmpFrames:"https://consent-manager.ft.com/unified/wrapperMessagingWithoutDetection.js"},S={tcfStub:'"use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",r.title = "__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;"setGdprApplies"===n[0]?n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}();',uspStub:'"use strict";(function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; e.title = "__uspapiLocator";a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();'};function Y(){const e=document.createDocumentFragment();return e.appendChild(O("tcf",S.tcfStub)),e.appendChild(O("usp",S.uspStub)),e.appendChild(J(X.cmpFrames)),e}function z(e){const{_clientOptions:t,...n}=e;window._sp_={config:n},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(Y())}function Z(e,t,{formOfWordsId:n,cookieDomain:o}){const c=Object.keys(e).reduce((r,p)=>(r[p]={onsite:{status:e[p],lbi:!1,source:I,fow:n}},r),{});return t?{setConsentCookie:!0,formOfWordsId:n,consentSource:I,cookieDomain:o,data:c}:{data:c,cookieDomain:o}}function Q(e,{purpose:t,vendor:n,specialFeatureOptins:o}){const s=v[e],c=s.purposes.every(u=>(t==null?void 0:t.consents[u])||(t==null?void 0:t.legitimateInterests[u])),r=s.iabVendors.every(u=>(n==null?void 0:n.consents[u])||(n==null?void 0:n.legitimateInterests[u])),p=s.specialFeatures.every(u=>(o==null?void 0:o[u])===!0);return c&&r&&p}function ee(e){const t=(e==null?void 0:e[2])==="N",n={};for(const o of E)n[o]=t;return n}async function te(){const e=await new Promise((n,o)=>{var s;try{(s=window.__tcfapi)==null||s.call(window,"addEventListener",2,n)}catch(c){o(c)}}),t={};for(const n of E)t[n]=Q(n,e);return t}async function ne(e,t){return e==="ccpa"?ee(t):await te()}function oe(){const t=Object.fromEntries(document.cookie.split("; ").map(o=>o.split("=")))[A];if(!t)return{};const n=decodeURIComponent(t);return Object.fromEntries(n.split(",").map(o=>{const[s,c]=o.split(":");return[s,c==="on"]}))}function se(e,t){return Object.keys(e).some(o=>{const s=`${o.toLowerCase()}Onsite`;return e[o]!==t[s]})}function ce({userId:e,useConsentStore:t}){return!!e&&t===!0}function re(e,t){return e?`${t.consentProxyHost}/__consent/consent-record/${M}/${t.userId}`:`${t.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${t.cookieDomain}`}async function ae(e,t){try{const n=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),credentials:"include"});n.ok||console.error("Unable to save consent preferences",n.status)}catch(n){console.error("An error occurred while saving consent",n)}}function ie(e){return async function(n,o,s,c){if(e.disableFTCookies)return;const r=c.applies?n:"gdpr";if(r!==n||!s)return;const p=await ne(r,s);if(!se(p,oe()))return;const a=ce(e),_=re(a,e),Se=Z(p,a,e);await ae(_,Se),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const b="cookie-message",ue="manage-cookies";let h=Object.freeze({activeComponent:b,messageId:0,privacyManagerId:0});function pe(e){return typeof e=="object"&&e!==null&&e.constructor===Object&&Object.prototype.toString.call(e)==="[object Object]"}const de=()=>({...h}),C=e=>{if(!pe(e)){console.error("Invalid state changes");return}h={...h,...e}},le=["adsDisableInternalCMP","pwm.cmp","messageSlotBottom"];function fe(e,t){const n=me(e.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var o,s;for(const[c,r]of Object.entries(ge))(s=(o=window._sp_).addEventListener)==null||s.call(o,c,r({...e,flags:n}))}),ye({...e,flags:n},t)}function me(e){const t={};return typeof e=="object"&&le.forEach(n=>{Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])}),t}function _e(e){if(!e)return;const t=document.body,n=new CustomEvent("oTracking.event",{bubbles:!0,cancelable:!0,detail:e.detail});t.dispatchEvent(n)}function m({trackingProps:e,action:t,triggerAction:n}){let o;const s=de(),{product:c,app:r,flags:p}=e;s.activeComponent===b?o=s.messageId:o=s.privacyManagerId;const u={detail:{component:{id:o,name:s.activeComponent,type:"overlay",subtype:"cmp"},category:"component",action:t,...n&&{trigger_action:n},...c&&{product:c},...r&&{app:r},custom:[{cookie_toggle_flag:p}],url:window.document.location.href||null}};_e(u)}const ge={onMessageChoiceSelect:e=>(t,n,o)=>{const c={11:"accept_all",12:"manage_cookies",13:"reject_all"}[o];c&&m({trackingProps:e,action:"click",triggerAction:c})},onMessageReady:e=>()=>{m({trackingProps:e,action:"view"})},onMessageReceiveData:()=>(e,t)=>{const{messageId:n}=t;n&&C({messageId:n})},onError:e=>(t,n)=>{m({trackingProps:e,action:"error",triggerAction:n})},onPMCancel:()=>()=>{C({activeComponent:b})}};function ye(e,t){window.addEventListener("message",function(n){if(n.origin!==t)return;const o={1:"save_and_close",11:"accept_all",13:"reject_all"},{data:{fromPM:s,actionType:c,messageId:r="0"}={}}=n;s&&(+r&&C({activeComponent:ue,privacyManagerId:+r}),!(!c||!o[c])&&m({trackingProps:e,action:"click",triggerAction:o[c]}))},!1)}const be="4.1.0";async function he({propertyConfig:e=y,userId:t,useFTSession:n=!0,consentProxyHost:o=F,cookieDomain:s=R,formOfWordsId:c=D,useConsentStore:r=!0,trackingContext:p={},disableFTCookies:u=!1}={}){if(typeof window>"u"){console.error("The CMP client can only be initialised in a browser context");return}if(window.FT_CMP_CLIENT_VERSION=be,!t&&n)try{const a=await L();t=a==null?void 0:a.uuid}catch(a){console.error(a)}if(!(e!=null&&e.accountId))throw new Error("Please pass a valid property config");t&&(e.authId=t),e.events&&(console.warn("[cmp-client] Passing an events map in the config is not supported and will be ignored. Please use window._sp_.addEventListener() to listen for events"),delete e.events),z(e),window._sp_queue.push(()=>{var a,_;(_=(a=window._sp_)==null?void 0:a.addEventListener)==null||_.call(a,"onConsentReady",ie({userId:t,consentProxyHost:o,cookieDomain:s,formOfWordsId:c,useConsentStore:r,disableFTCookies:u}))}),fe(p,e.baseEndpoint)}const Ce=new Promise(e=>{if(typeof document>"u")return e();const t=()=>["interactive","complete"].includes(document.readyState);function n(){t()&&(document.removeEventListener("readystatechange",n),e())}if(t())return e();document.addEventListener("readystatechange",n)});function Ie(e,t){const{privacyManagerId:n,manageCookiesLinkOverride:o}=e??{};if(!n||!o)return console.warn("_clientOptions is missing privacyManagerId or manageCookiesLinkOverride");const s=document.querySelectorAll(`a[href*="${o}"]`);for(const c of s)c.addEventListener("click",r=>{r.preventDefault(),t==null||t(+n)})}function ve({_clientOptions:e}=y){Ce.then(()=>{window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var t,n;Ie(e,(n=(t=window._sp_)==null?void 0:t.gdpr)==null?void 0:n.loadPrivacyManagerModal)})})}function Ee(e,t){if(!t||Number.isFinite(parseFloat(t))||!e.endsWith(t))return!1;const n=e.indexOf(t),o=e[n-1];return o==="."||o===void 0}function we(e){if(!e)throw new Error("Invalid hostname provided");let n=Object.values(B).find(o=>{var c;const s=(c=o._clientOptions)==null?void 0:c.rootDomain;return s&&Ee(e,s)});return n??(n=w),n}const Oe=new URL(window.location.href).hostname,d=we(Oe);he({propertyConfig:d}),(T=d==null?void 0:d._clientOptions)!=null&&T.privacyManagerId&&((k=d==null?void 0:d._clientOptions)!=null&&k.manageCookiesLinkOverride)&&ve(d)})();
1
+ (function(){"use strict";var M,P;const D=(e,{credentials:t="omit"}={})=>fetch(`https://session-next.ft.com${e}`,{credentials:t,useCorsProxy:!0}).then(n=>n.ok?n.json():n.text().then(o=>{throw new Error(`Next session responded with "${o}" (${n.status})`)})).catch(n=>{document.body.dispatchEvent(new CustomEvent("oErrors.log",{bubbles:!0,detail:{error:n,info:{component:"next-session-client"}}}))});let l={};const v=(e,t)=>{if(typeof e=="object"){l=e;return}if(typeof e=="string"&&typeof t=="string"){l[e]=t;return}if(typeof e=="string"&&typeof t>"u")return l[e]||null;if(typeof e>"u"&&typeof t>"u")return l;throw new Error("Invalid arguments")};v.clear=()=>{l={}};const m={},A=()=>{const[,e]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return e},R=()=>{const e=v("uuid");if(e)return Promise.resolve({uuid:e});const t=A();return t?(m.uuid||(m.uuid=D(`/sessions/s/${t}`).then(({uuid:n}={})=>(delete m.uuid,n&&v("uuid",n),{uuid:n}))),m.uuid):Promise.resolve({uuid:void 0})},I="sourcepoint-cmp",F="FTPINK",V="FTConsent",j="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk",H=".ft.com",x="https://consent.ft.com",w={permutiveAds:{purposes:[2,4,8,9],iabVendors:[361],customVendors:[],specialFeatures:[]},demographicAds:{purposes:[7,9,10],iabVendors:[],customVendors:[],specialFeatures:[]},behaviouralAds:{purposes:[2,4,8,9],iabVendors:[],customVendors:[],specialFeatures:[]},programmaticAds:{purposes:[2],iabVendors:[],customVendors:[],specialFeatures:[]},personalisedMarketing:{purposes:[2,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]}},E=Object.keys(w),d={joinHref:!0,gdpr:{},ccpa:{}},O={...d,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyHref:"https://local.ft.com",_clientOptions:{privacyManagerId:827767,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies"}},_={...d,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyId:31642,_clientOptions:{privacyManagerId:827767,usnatPrivacyManagerId:944881,ccpaPrivacyManagerId:944882,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies",rootDomain:"ft.com"}},U={...d,accountId:1906,baseEndpoint:"https://consent-manager.pwmnet.com",propertyId:33414,_clientOptions:{rootDomain:"pwmnet.com"}},q={...d,accountId:1906,baseEndpoint:"https://consent-manager.fdiintelligence.com",propertyId:34061,_clientOptions:{rootDomain:"fdiintelligence.com"}},$={...d,accountId:1906,baseEndpoint:"https://consent-manager.thebanker.com",propertyId:34060,_clientOptions:{rootDomain:"thebanker.com"}},G={...d,accountId:1906,baseEndpoint:"https://consent-manager.bankingriskandregulation.com",propertyId:34059,_clientOptions:{rootDomain:"bankingriskandregulation.com"}},W={...d,accountId:1906,baseEndpoint:"https://consent-manager.sustainableviews.com",propertyId:34058,_clientOptions:{rootDomain:"sustainableviews.com"}},K={...d,accountId:1906,baseEndpoint:"https://consent-manager.ftadviser.com",propertyId:33416,_clientOptions:{rootDomain:"ftadviser.com"}},B={...d,accountId:1906,baseEndpoint:"https://consent-manager.investorschronicle.co.uk",propertyId:33415,_clientOptions:{rootDomain:"investorschronicle.co.uk"}},J={...d,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33947,_clientOptions:{rootDomain:"ignitesasia.com"}},X={...d,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33946,_clientOptions:{rootDomain:"igniteseurope.com"}},Y={...d,accountId:1906,baseEndpoint:"https://consent-manager.mandatewire.com",propertyId:35490,_clientOptions:{rootDomain:"mandatewire.com"}},z=Object.freeze(Object.defineProperty({__proto__:null,FT_DOTCOM_PROD:_,FT_DOTCOM_TEST:O,MM_IGNITES_ASIA:J,MM_IGNITES_EUROPE:X,SP_BANKING_RR:G,SP_FDI_INTELLIGENCE:q,SP_FT_ADVISER:K,SP_INVESTORS_CHRONICLE:B,SP_MANDATE_WIRE:Y,SP_PWMNET:U,SP_SUSTAINABLE_VIEWS:W,SP_THE_BANKER:$},Symbol.toStringTag,{value:"Module"}));function S(e,t){const n=document.createElement("script");return n.dataset.cmpScript=e,n.innerHTML=t,n}function Z(e){const t=document.createElement("script");return t.src=e,t}const Q={cmpFrames:"https://consent-manager.ft.com/unified/wrapperMessagingWithoutDetection.js"},k={tcfStub:'"use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",r.title = "__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;"setGdprApplies"===n[0]?n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}();',uspStub:'"use strict";(function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; e.title = "__uspapiLocator";a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();'};function ee(){const e=document.createDocumentFragment();return e.appendChild(S("tcf",k.tcfStub)),e.appendChild(S("usp",k.uspStub)),e.appendChild(Z(Q.cmpFrames)),e}function te(e){const{_clientOptions:t,...n}=e;window._sp_={config:n},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(ee())}function ne(e,t,{formOfWordsId:n,cookieDomain:o}){const a=Object.keys(e).reduce((i,u)=>(i[u]={onsite:{status:e[u],lbi:!1,source:I,fow:n}},i),{});return t?{setConsentCookie:!0,formOfWordsId:n,consentSource:I,cookieDomain:o,data:a}:{data:a,cookieDomain:o}}function oe(e,{purpose:t,vendor:n,specialFeatureOptins:o}){const s=w[e],a=s.purposes.every(r=>(t==null?void 0:t.consents[r])||(t==null?void 0:t.legitimateInterests[r])),i=s.iabVendors.every(r=>(n==null?void 0:n.consents[r])||(n==null?void 0:n.legitimateInterests[r])),u=s.specialFeatures.every(r=>(o==null?void 0:o[r])===!0);return a&&i&&u}function se(e){const t=(e==null?void 0:e[2])==="N",n={};for(const o of E)n[o]=t;return n}async function ce(){const e=await new Promise((n,o)=>{var s;try{(s=window.__tcfapi)==null||s.call(window,"addEventListener",2,n)}catch(a){o(a)}}),t={};for(const n of E)t[n]=oe(n,e);return t}async function ae(e,t){return e==="ccpa"?se(t):await ce()}function re(){const t=Object.fromEntries(document.cookie.split("; ").map(o=>o.split("=")))[V];if(!t)return{};const n=decodeURIComponent(t);return Object.fromEntries(n.split(",").map(o=>{const[s,a]=o.split(":");return[s,a==="on"]}))}function ie(e,t){return Object.keys(e).some(o=>{const s=`${o.toLowerCase()}Onsite`;return e[o]!==t[s]})}function ue({userId:e,useConsentStore:t}){return!!e&&t===!0}function de(e,t){return e?`${t.consentProxyHost}/__consent/consent-record/${F}/${t.userId}`:`${t.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${t.cookieDomain}`}async function pe(e,t){try{const n=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),credentials:"include"});n.ok||console.error("Unable to save consent preferences",n.status)}catch(n){console.error("An error occurred while saving consent",n)}}function le(e){return async function(n,o,s,a){if(e.disableFTCookies)return;const i=a.applies?n:"gdpr";if(i!==n||!s)return;const u=await ae(i,s);if(!ie(u,re()))return;const c=ue(e),f=de(c,e),y=ne(u,c,e);await pe(f,y),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const C="cookie-message",fe="manage-cookies";let b=Object.freeze({activeComponent:C,messageId:0,privacyManagerId:0});function me(e){return typeof e=="object"&&e!==null&&e.constructor===Object&&Object.prototype.toString.call(e)==="[object Object]"}const _e=()=>({...b}),h=e=>{if(!me(e)){console.error("Invalid state changes");return}b={...b,...e}},ge=["adsDisableInternalCMP","pwm.cmp","messageSlotBottom"];function ye(e,t){const n=ve(e.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var o,s;for(const[a,i]of Object.entries(be))(s=(o=window._sp_).addEventListener)==null||s.call(o,a,i({...e,flags:n}))}),he({...e,flags:n},t)}function ve(e){const t={};return typeof e=="object"&&ge.forEach(n=>{Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])}),t}function Ce(e){if(!e)return;const t=document.body,n=new CustomEvent("oTracking.event",{bubbles:!0,cancelable:!0,detail:e.detail});t.dispatchEvent(n)}function g({trackingProps:e,action:t,triggerAction:n}){let o;const s=_e(),{product:a,app:i,flags:u}=e;s.activeComponent===C?o=s.messageId:o=s.privacyManagerId;const r={detail:{component:{id:o,name:s.activeComponent,type:"overlay",subtype:"cmp"},category:"component",action:t,...n&&{trigger_action:n},...a&&{product:a},...i&&{app:i},custom:[{cookie_toggle_flag:u}],url:window.document.location.href||null}};Ce(r)}const be={onMessageChoiceSelect:e=>(t,n,o)=>{const a={11:"accept_all",12:"manage_cookies",13:"reject_all"}[o];a&&g({trackingProps:e,action:"click",triggerAction:a})},onMessageReady:e=>()=>{g({trackingProps:e,action:"view"})},onMessageReceiveData:()=>(e,t)=>{const{messageId:n}=t;n&&h({messageId:n})},onError:e=>(t,n)=>{g({trackingProps:e,action:"error",triggerAction:n})},onPMCancel:()=>()=>{h({activeComponent:C})}};function he(e,t){window.addEventListener("message",function(n){if(n.origin!==t)return;const o={1:"save_and_close",11:"accept_all",13:"reject_all"},{data:{fromPM:s,actionType:a,messageId:i="0"}={}}=n;s&&(+i&&h({activeComponent:fe,privacyManagerId:+i}),!(!a||!o[a])&&g({trackingProps:e,action:"click",triggerAction:o[a]}))},!1)}const Ie="4.2.0-beta.1";async function we({propertyConfig:e=_,userId:t,useFTSession:n=!0,consentProxyHost:o=x,cookieDomain:s=H,formOfWordsId:a=j,useConsentStore:i=!0,trackingContext:u={},disableFTCookies:r=!1}={}){if(typeof window>"u"){console.error("The CMP client can only be initialised in a browser context");return}if(window.FT_CMP_CLIENT_VERSION=Ie,!t&&n)try{const c=await R();t=c==null?void 0:c.uuid}catch(c){console.error(c)}if(!(e!=null&&e.accountId))throw new Error("Please pass a valid property config");t&&(e.authId=t),e.events&&(console.warn("[cmp-client] Passing an events map in the config is not supported and will be ignored. Please use window._sp_.addEventListener() to listen for events"),delete e.events),te(e),window._sp_queue.push(()=>{var c,f;(f=(c=window._sp_)==null?void 0:c.addEventListener)==null||f.call(c,"onConsentReady",le({userId:t,consentProxyHost:o,cookieDomain:s,formOfWordsId:a,useConsentStore:i,disableFTCookies:r}))}),ye(u,e.baseEndpoint)}function T(e,t,n,o,s,a){const{text:i,onClick:u}=o[t],r=document.querySelectorAll(`a[href*="${a}"]`);for(const c of r)(n||e)&&(s.has(c)&&c.removeEventListener("click",s.get(c)),c.innerText=i,c.addEventListener("click",u),s.set(c,u))}function Ee({_clientOptions:e}=_){const{privacyManagerId:t,ccpaPrivacyManagerId:n,usnatPrivacyManagerId:o,manageCookiesLinkOverride:s}=e??_._clientOptions,a={usnat:{text:"Do not sell my data",onClick:r=>{var c;r.preventDefault(),(c=window._sp_.usnat)==null||c.loadPrivacyManagerModal(o)}},ccpa:{text:"Do not sell my data",onClick:r=>{var c;r.preventDefault(),(c=window._sp_.ccpa)==null||c.loadPrivacyManagerModal(n)}},gdpr:{text:"Manage cookies",onClick:r=>{var c;r.preventDefault(),(c=window._sp_.gdpr)==null||c.loadPrivacyManagerModal(t)}}},i=new Map,u=function(r,c,f,y){console.log("handler called"),T(!1,r,y.applies,a,i,s),y.applies&&window._sp_queue.push(()=>{var N,L;(L=(N=window._sp_).removeEventListener)==null||L.call(N,"onConsentReady",u)})};T(!0,"gdpr",!1,a,i,s),window._sp_queue.push(()=>{var r,c;(c=(r=window._sp_).addEventListener)==null||c.call(r,"onConsentReady",u)})}function Oe(e,t){if(!t||Number.isFinite(parseFloat(t))||!e.endsWith(t))return!1;const n=e.indexOf(t),o=e[n-1];return o==="."||o===void 0}function Se(e){if(!e)throw new Error("Invalid hostname provided");let n=Object.values(z).find(o=>{var a;const s=(a=o._clientOptions)==null?void 0:a.rootDomain;return s&&Oe(e,s)});return n??(n=O),n}const ke=new URL(window.location.href).hostname,p=Se(ke);we({propertyConfig:p}),(M=p==null?void 0:p._clientOptions)!=null&&M.privacyManagerId&&((P=p==null?void 0:p._clientOptions)!=null&&P.manageCookiesLinkOverride)&&Ee(p)})();
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cmp-manage-cookies-links.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmp-manage-cookies-links.test.d.ts","sourceRoot":"","sources":["../../../../src/html/__tests__/cmp-manage-cookies-links.test.ts"],"names":[],"mappings":""}
@@ -1,11 +1,8 @@
1
- import type { SPConfig } from "../../typings/types";
2
- /**
3
- * Uses the `manageCookiesLinkOverride` property from SPConfig
4
- * as a querySelectorALL to match anchor-tag elements by href attribute.
5
- * Adds a "click" eventListener to the anchor-tag(s)
6
- * prevents default and call Sourcepoint loadPrivacyManagerModal function.
7
-
8
- * @returns Returns true if the link was updated, false if not
9
- */
1
+ import type { SPConfig, regionConfig } from "../../typings/types";
2
+ declare function findAndUpdateLinks(fallback: boolean, regionId: string, regionApplies: boolean, regionConfig: regionConfig, linkMap: Map<HTMLElement, (this: HTMLElement, ev: MouseEvent) => void>, manageCookiesLinkOverride?: string): void;
10
3
  export declare function interceptManageCookiesLinks({ _clientOptions }?: SPConfig): void;
4
+ export declare const exportedForTesting: {
5
+ findAndUpdateLinks: typeof findAndUpdateLinks;
6
+ };
7
+ export {};
11
8
  //# sourceMappingURL=cmp-manage-cookies-link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cmp-manage-cookies-link.d.ts","sourceRoot":"","sources":["../../../src/html/cmp-manage-cookies-link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,qBAAqB,CAAC;AAuC3E;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,cAAc,EAAE,GAAE,QAAyB,QAOxF"}
1
+ {"version":3,"file":"cmp-manage-cookies-link.d.ts","sourceRoot":"","sources":["../../../src/html/cmp-manage-cookies-link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIlE,iBAAS,kBAAkB,CACzB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC,EACtE,yBAAyB,CAAC,EAAE,MAAM,QAenC;AAED,wBAAgB,2BAA2B,CAAC,EAAE,cAAc,EAAE,GAAE,QAAyB,QA+DxF;AAED,eAAO,MAAM,kBAAkB;;CAE9B,CAAC"}
@@ -21,6 +21,8 @@ export declare const FT_DOTCOM_PROD: {
21
21
  propertyId: number;
22
22
  _clientOptions: {
23
23
  privacyManagerId: number;
24
+ usnatPrivacyManagerId: number;
25
+ ccpaPrivacyManagerId: number;
24
26
  manageCookiesLinkOverride: string;
25
27
  rootDomain: string;
26
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/lib/properties.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;CAS1B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;CAU1B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;CAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;CAQhC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;CAQlC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAQ3B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;CAQ7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAQ3B,CAAC"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/lib/properties.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;CAS1B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAY1B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;CAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;CAQhC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;CAQlC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAQ3B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;CAQ7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAQ3B,CAAC"}
@@ -26,6 +26,8 @@ export declare function getPropertyConfigByHostname(hostname: string): {
26
26
  propertyId: number;
27
27
  _clientOptions: {
28
28
  privacyManagerId: number;
29
+ usnatPrivacyManagerId: number;
30
+ ccpaPrivacyManagerId: number;
29
31
  manageCookiesLinkOverride: string;
30
32
  rootDomain: string;
31
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAWtE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa3D"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAWtE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa3D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cmp-client",
3
- "version": "4.1.0",
3
+ "version": "4.2.0-beta.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [
@@ -8,7 +8,10 @@ declare global {
8
8
  _sp_: {
9
9
  config: SPConfig;
10
10
  addEventListener?: (e: string, callback: SPEventCallback) => void;
11
+ removeEventListener?: (e: string, callback: SPEventCallback) => void;
11
12
  gdpr?: { loadPrivacyManagerModal: (id: number | undefined) => void };
13
+ ccpa?: { loadPrivacyManagerModal: (id: number | undefined) => void };
14
+ usnat?: { loadPrivacyManagerModal: (id: number | undefined) => void };
12
15
  };
13
16
  _sp_queue: (() => void)[];
14
17
  __tcfapi: (key: string, n: number, callback: (resp: TCData) => void) => void;
@@ -8,6 +8,8 @@ export type SPEventId = keyof SPLifecycleEvents;
8
8
 
9
9
  export type SPConfigClientOptions = {
10
10
  privacyManagerId?: number;
11
+ usnatPrivacyManagerId?: number;
12
+ ccpaPrivacyManagerId?: number;
11
13
  manageCookiesLinkOverride?: string;
12
14
  rootDomain?: string;
13
15
  };
@@ -17,6 +19,7 @@ export interface SPConfig {
17
19
  baseEndpoint: string;
18
20
  gdpr: Record<string, unknown>;
19
21
  ccpa: Record<string, unknown>;
22
+ usnat?: Record<string, unknown>;
20
23
  propertyHref?: string;
21
24
  propertyId?: number;
22
25
  joinHref?: boolean;
@@ -185,3 +188,16 @@ export type TCData = {
185
188
  restrictions: Record<string, Record<string, 0 | 1 | 2>>;
186
189
  };
187
190
  };
191
+
192
+ export interface LinkOnClickFunction {
193
+ (e: MouseEvent): void;
194
+ }
195
+
196
+ export interface PrivacyManagerRegionId {
197
+ text: string;
198
+ onClick: LinkOnClickFunction;
199
+ }
200
+
201
+ export interface regionConfig {
202
+ [key: string]: PrivacyManagerRegionId;
203
+ }