@financial-times/cmp-client 6.18.2 → 6.19.0

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
@@ -800,19 +800,6 @@ function getConsentCookieValue() {
800
800
  })
801
801
  );
802
802
  }
803
- function whatConsentHasChanged(parsedConsent, previousConsent) {
804
- const categories = Object.keys(parsedConsent);
805
- const response = [];
806
- categories.forEach((category) => {
807
- const adaptedCategoryName = `${category.toLowerCase()}Onsite`;
808
- if (parsedConsent[category] !== previousConsent[adaptedCategoryName]) {
809
- response.push(
810
- `${category}:${parsedConsent[category]}:${previousConsent[adaptedCategoryName]}`
811
- );
812
- }
813
- });
814
- return response.join(",");
815
- }
816
803
  function hasConsentChanged(parsedConsent, previousConsent) {
817
804
  const categories = Object.keys(parsedConsent);
818
805
  return categories.some((category) => {
@@ -942,10 +929,9 @@ function consentReadyHandlerFn(props) {
942
929
  const propertyId = (_b = (_a = window._sp_) == null ? void 0 : _a.config) == null ? void 0 : _b.propertyId;
943
930
  const consentCookieExists = Object.keys(getConsentCookieValue()).length;
944
931
  if (consentCookieExists && userId && propertyId) {
945
- const whatChanged = whatConsentHasChanged(parsedConsent, getConsentCookieValue());
946
932
  const metricsPayload = {
947
933
  namespace: "cmp.consentchange",
948
- userId: `${userId}+${whatChanged}`,
934
+ userId,
949
935
  propertyId,
950
936
  legislation
951
937
  };
@@ -955,6 +941,9 @@ function consentReadyHandlerFn(props) {
955
941
  const updateConsentStore = shouldUpdateConsentStore(props);
956
942
  const consentEndpoint = getConsentEndpoint(updateConsentStore, props);
957
943
  const payload = getConsentPayload(parsedConsent, updateConsentStore, isUserInitiated, props);
944
+ if (updateConsentStore) {
945
+ document.cookie = "FTConsent=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.ft.com;";
946
+ }
958
947
  await saveConsent(consentEndpoint, payload);
959
948
  if (isUserInitiated) {
960
949
  completeWaitingForUser();
@@ -1132,7 +1121,7 @@ function setupFTConsentCookieAuditStorage() {
1132
1121
  localStorage.setItem("__lastFtc", ftConsentCookieValue);
1133
1122
  });
1134
1123
  }
1135
- const version = "6.18.2";
1124
+ const version = "6.19.0";
1136
1125
  async function initSourcepointCmp(options) {
1137
1126
  const {
1138
1127
  useFTSession = true,
package/dist/index.js CHANGED
@@ -798,19 +798,6 @@ function getConsentCookieValue() {
798
798
  })
799
799
  );
800
800
  }
801
- function whatConsentHasChanged(parsedConsent, previousConsent) {
802
- const categories = Object.keys(parsedConsent);
803
- const response = [];
804
- categories.forEach((category) => {
805
- const adaptedCategoryName = `${category.toLowerCase()}Onsite`;
806
- if (parsedConsent[category] !== previousConsent[adaptedCategoryName]) {
807
- response.push(
808
- `${category}:${parsedConsent[category]}:${previousConsent[adaptedCategoryName]}`
809
- );
810
- }
811
- });
812
- return response.join(",");
813
- }
814
801
  function hasConsentChanged(parsedConsent, previousConsent) {
815
802
  const categories = Object.keys(parsedConsent);
816
803
  return categories.some((category) => {
@@ -940,10 +927,9 @@ function consentReadyHandlerFn(props) {
940
927
  const propertyId = (_b = (_a = window._sp_) == null ? void 0 : _a.config) == null ? void 0 : _b.propertyId;
941
928
  const consentCookieExists = Object.keys(getConsentCookieValue()).length;
942
929
  if (consentCookieExists && userId && propertyId) {
943
- const whatChanged = whatConsentHasChanged(parsedConsent, getConsentCookieValue());
944
930
  const metricsPayload = {
945
931
  namespace: "cmp.consentchange",
946
- userId: `${userId}+${whatChanged}`,
932
+ userId,
947
933
  propertyId,
948
934
  legislation
949
935
  };
@@ -953,6 +939,9 @@ function consentReadyHandlerFn(props) {
953
939
  const updateConsentStore = shouldUpdateConsentStore(props);
954
940
  const consentEndpoint = getConsentEndpoint(updateConsentStore, props);
955
941
  const payload = getConsentPayload(parsedConsent, updateConsentStore, isUserInitiated, props);
942
+ if (updateConsentStore) {
943
+ document.cookie = "FTConsent=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.ft.com;";
944
+ }
956
945
  await saveConsent(consentEndpoint, payload);
957
946
  if (isUserInitiated) {
958
947
  completeWaitingForUser();
@@ -1130,7 +1119,7 @@ function setupFTConsentCookieAuditStorage() {
1130
1119
  localStorage.setItem("__lastFtc", ftConsentCookieValue);
1131
1120
  });
1132
1121
  }
1133
- const version = "6.18.2";
1122
+ const version = "6.19.0";
1134
1123
  async function initSourcepointCmp(options) {
1135
1124
  const {
1136
1125
  useFTSession = true,
@@ -1 +1 @@
1
- (function(){"use strict";const $=(t,{credentials:e="omit"}={})=>fetch(`https://session-next.ft.com${t}`,{credentials:e,useCorsProxy:!0}).then(n=>n.ok?n.json():n.text().then(s=>{throw new Error(`Next session responded with "${s}" (${n.status})`)})).catch(n=>{document.body.dispatchEvent(new CustomEvent("oErrors.log",{bubbles:!0,detail:{error:n,info:{component:"next-session-client"}}}))});let I={};const v=(t,e)=>{if(typeof t=="object"){I=t;return}if(typeof t=="string"&&typeof e=="string"){I[t]=e;return}if(typeof t=="string"&&typeof e>"u")return I[t]||null;if(typeof t>"u"&&typeof e>"u")return I;throw new Error("Invalid arguments")};v.clear=()=>{I={}};const y={},B=()=>{const[,t]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return t},G=()=>{const t=v("uuid");if(t)return Promise.resolve({uuid:t});const e=B();return e?(y.uuid||(y.uuid=$(`/sessions/s/${e}`).then(({uuid:n}={})=>(delete y.uuid,n&&v("uuid",n),{uuid:n}))),y.uuid):Promise.resolve({uuid:void 0})},S="sourcepoint-cmp",q="FTPINK",W="FTConsent",K="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk",J=".ft.com",z="https://consent.ft.com",T={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,4,8,9],iabVendors:[],customVendors:[],specialFeatures:[]},personalisedMarketing:{purposes:[2,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]},cookies:{purposes:[1,2,3,4,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]}},w=Object.keys(T),u={joinHref:!0,gdpr:{}},A={...u,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyHref:"https://local.ft.com",_clientOptions:{privacyManagerId:827767,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies",rootDomain:"ft.com",includeUsNat:!0}},b={...u,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyId:31642,_clientOptions:{privacyManagerId:827767,usnatPrivacyManagerId:1143274,ccpaPrivacyManagerId:944882,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies",rootDomain:"ft.com",includeUsNat:!0}},X={...u,accountId:1906,baseEndpoint:"https://consent-manager.pwmnet.com",propertyId:33414,_clientOptions:{rootDomain:"pwmnet.com",includeUsNat:!0}},Y={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdiintelligence.com",propertyId:34061,_clientOptions:{rootDomain:"fdiintelligence.com",includeUsNat:!0}},Q={...u,accountId:1906,baseEndpoint:"https://consent-manager.thebanker.com",propertyId:34060,_clientOptions:{rootDomain:"thebanker.com",includeUsNat:!0}},Z={...u,accountId:1906,baseEndpoint:"https://consent-manager.bankingriskandregulation.com",propertyId:34059,_clientOptions:{rootDomain:"bankingriskandregulation.com",includeUsNat:!0}},tt={...u,accountId:1906,baseEndpoint:"https://consent-manager.sustainableviews.com",propertyId:34058,_clientOptions:{rootDomain:"sustainableviews.com",includeUsNat:!0}},et={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftadviser.com",propertyId:33416,_clientOptions:{rootDomain:"ftadviser.com",includeUsNat:!0}},nt={...u,accountId:1906,baseEndpoint:"https://consent-manager.investorschronicle.co.uk",propertyId:33415,_clientOptions:{rootDomain:"investorschronicle.co.uk",includeUsNat:!0}},ot={...u,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33947,_clientOptions:{rootDomain:"ignitesasia.com"}},st={...u,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33946,_clientOptions:{rootDomain:"igniteseurope.com"}},at={...u,accountId:1906,baseEndpoint:"https://consent-manager.mandatewire.com",propertyId:35490,_clientOptions:{rootDomain:"mandatewire.com",includeUsNat:!0}},ct={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftlocations.com",propertyId:37407,_clientOptions:{rootDomain:"ftlocations.com",cookieDomain:".ftlocations.com",consentProxyHost:"https://consent.ftlocations.com",includeUsNat:!0}},it={...u,accountId:1906,baseEndpoint:"https://consent-manager.financialadviserserviceawards.com",propertyId:38297,_clientOptions:{rootDomain:"financialadviserserviceawards.com",includeUsNat:!0}},rt={...u,accountId:1906,baseEndpoint:"https://consent-manager.celebrationofinvestment.co.uk",propertyId:38296,_clientOptions:{rootDomain:"celebrationofinvestment.co.uk",includeUsNat:!0}},pt={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalprivatebankingawards.com",propertyId:38295,_clientOptions:{rootDomain:"globalprivatebankingawards.com",includeUsNat:!0}},ut={...u,accountId:1906,baseEndpoint:"https://consent-manager.thenextweb.com",propertyId:37672,_clientOptions:{rootDomain:"thenextweb.com"}},dt={...u,accountId:1906,baseEndpoint:"https://consent-manager.invisso.org",propertyId:38851,_clientOptions:{rootDomain:"invisso.org",includeUsNat:!0}},lt={...u,accountId:1906,baseEndpoint:"https://consent-manager.abseast.com",propertyId:38888,_clientOptions:{rootDomain:"abseast.com",includeUsNat:!0}},mt={...u,accountId:1906,baseEndpoint:"https://consent-manager.absasia.org",propertyId:38887,_clientOptions:{rootDomain:"absasia.org",includeUsNat:!0}},ft={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalcoveredbonds.com",propertyId:38886,_clientOptions:{rootDomain:"globalcoveredbonds.com",includeUsNat:!0}},_t={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalborrowers.com",propertyId:38885,_clientOptions:{rootDomain:"globalborrowers.com",includeUsNat:!0}},gt={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalabs.org",propertyId:38884,_clientOptions:{rootDomain:"globalabs.org",includeUsNat:!0}},It={...u,accountId:1906,baseEndpoint:"https://consent-manager.creditrisk-transfer.com",propertyId:38883,_clientOptions:{rootDomain:"creditrisk-transfer.com",includeUsNat:!0}},bt={...u,accountId:1906,baseEndpoint:"https://consent-manager.significantrisktransfer.com",propertyId:38882,_clientOptions:{rootDomain:"significantrisktransfer.com",includeUsNat:!0}},yt={...u,accountId:1906,baseEndpoint:"https://consent-manager.theceeforum.com",propertyId:38881,_clientOptions:{rootDomain:"theceeforum.com",includeUsNat:!0}},wt={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdimarkets.com",propertyId:40508,_clientOptions:{rootDomain:"fdimarkets.com",cookieDomain:".fdimarkets.com",consentProxyHost:"https://consent.fdimarkets.com",includeUsNat:!0}},ht={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdibenchmark.com",propertyId:40509,_clientOptions:{rootDomain:"fdibenchmark.com",cookieDomain:".fdibenchmark.com",consentProxyHost:"https://consent.fdibenchmark.com",includeUsNat:!0}},vt=Object.freeze(Object.defineProperty({__proto__:null,FT_DOTCOM_PROD:b,FT_DOTCOM_TEST:A,INVISSO:dt,INV_ABSASIA:mt,INV_ABSEAST:lt,INV_CEE_FORUM:yt,INV_CREDITRISK_TRANSFER:It,INV_GLOBAL_ABS:gt,INV_GLOBAL_BORROWERS:_t,INV_GLOBAL_COVERED_BONDS:ft,MM_IGNITES_ASIA:ot,MM_IGNITES_EUROPE:st,SIGRISK_TRANSFER:bt,SP_BANKING_RR:Z,SP_CELEBRATION_OF_INVESTMENT:rt,SP_FDI_BENCHMARK:ht,SP_FDI_INTELLIGENCE:Y,SP_FDI_MARKETS:wt,SP_FTA_SERVICE_AWARDS:it,SP_FT_ADVISER:et,SP_FT_LOCATIONS:ct,SP_GLOBAL_PRIVATE_BANKING_AWARDS:pt,SP_INVESTORS_CHRONICLE:nt,SP_MANDATE_WIRE:at,SP_PWMNET:X,SP_SUSTAINABLE_VIEWS:tt,SP_THE_BANKER:Q,TNW:ut},Symbol.toStringTag,{value:"Module"}));function D(t,e){const n=document.createElement("script");return n.dataset.cmpScript=t,n.innerHTML=e,n}function St(t){const e=document.createElement("script");return e.src=t,e}const Ct={cmpFrames:"https://consent-manager.ft.com/unified/wrapperMessagingWithoutDetection.js"};function Ot(){const t=document.createDocumentFragment();return t.appendChild(St(Ct.cmpFrames)),t}function Et(t,e){const{userId:n,includeUsNat:s}=e;return n&&(t.authId=n),s&&(t.usnat=t.usnat||{}),t}function Nt(t,e){const{_clientOptions:n,...s}=t,o=Et(s,e);window._sp_={config:o},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(Ot())}function kt(t){const e={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",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()}();',gppStub:'window.__gpp_addFrame=function(e){if(!window.frames[e])if(document.body){var t=document.createElement("iframe");t.style.cssText="display:none",t.name=e,document.body.appendChild(t)}else window.setTimeout(window.__gpp_addFrame,10,e)},window.__gpp_stub=function(){var e=arguments;if(__gpp.queue=__gpp.queue||[],__gpp.events=__gpp.events||[],!e.length||1==e.length&&"queue"==e[0])return __gpp.queue;if(1==e.length&&"events"==e[0])return __gpp.events;var t=e[0],p=e.length>1?e[1]:null,s=e.length>2?e[2]:null;if("ping"===t)p({gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}},!0);else if("addEventListener"===t){"lastId"in __gpp||(__gpp.lastId=0),__gpp.lastId++;var n=__gpp.lastId;__gpp.events.push({id:n,callback:p,parameter:s}),p({eventName:"listenerRegistered",listenerId:n,data:!0,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else if("removeEventListener"===t){for(var a=!1,i=0;i<__gpp.events.length;i++)if(__gpp.events[i].id==s){__gpp.events.splice(i,1),a=!0;break}p({eventName:"listenerRemoved",listenerId:s,data:a,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else"hasSection"===t?p(!1,!0):"getSection"===t||"getField"===t?p(null,!0):__gpp.queue.push([].slice.apply(e))},window.__gpp_msghandler=function(e){var t="string"==typeof e.data;try{var p=t?JSON.parse(e.data):e.data}catch(e){p=null}if("object"==typeof p&&null!==p&&"__gppCall"in p){var s=p.__gppCall;window.__gpp(s.command,(function(p,n){var a={__gppReturn:{returnValue:p,success:n,callId:s.callId}};e.source.postMessage(t?JSON.stringify(a):a,"*")}),"parameter"in s?s.parameter:null,"version"in s?s.version:"1.1")}},"__gpp"in window&&"function"==typeof window.__gpp||(window.__gpp=window.__gpp_stub,window.addEventListener("message",window.__gpp_msghandler,!1),window.__gpp_addFrame("__gppLocator"));'},n=document.createDocumentFragment();n.appendChild(D("tcf",e.tcfStub)),t.includeUsNat&&n.appendChild(D("gpp",e.gppStub)),document.head.appendChild(n)}function Pt(t,e,n,{formOfWordsId:s,cookieDomain:o}){const c=Object.keys(t).reduce((r,i)=>(r[i]={onsite:{status:t[i],lbi:!1,source:S,fow:s}},i==="cookies"&&(r.cookies.userAccept={status:t[i],lbi:!1,source:S,fow:s}),r),{});return e?{setConsentCookie:!0,formOfWordsId:s,consentSource:S,cookieDomain:o,skipDuplicateUpdates:!n,data:c}:{data:c,cookieDomain:o}}const g={CALIFORNIA:"usca",US_NATIONAL:"usnat"},M={[g.CALIFORNIA]:{excludedCategories:{}},[g.US_NATIONAL]:{excludedCategories:{personalisedMarketing:!0}}};function Tt(t){const{applicableSections:e,supportedAPIs:n}=t,s=e[0];if(s===-1||typeof s>"u")return;const o=n.find(c=>c.startsWith(`${s}:`));return o==null?void 0:o.split(":")[1]}function At(t){const{SaleOptOut:e,SharingOptOut:n,Gpc:s}=t,{excludedCategories:o}=M[g.CALIFORNIA],a=e!==1&&n!==1&&!s,c={};for(const r of w){if(r in o){c[r]=!0;continue}c[r]=a}return c}function Dt(t){const{SaleOptOut:e,SharingOptOut:n,TargetedAdvertisingOptOut:s}=t,{excludedCategories:o}=M[g.US_NATIONAL],a=JSON.parse(localStorage.getItem("ft_sp_marketing_optout")||"{}"),c=e!==1&&n!==1&&s!==1,r={};for(const i of w){if(i in o){r[i]=!0;continue}r[i]=c}if(a.usnat)for(const i of w)r[i]=!1;return r}const Mt={[g.CALIFORNIA]:At,[g.US_NATIONAL]:Dt};async function L(){return new Promise((t,e)=>{try{window.__gpp?window.__gpp("ping",t):e(new Error("GPP API is not available on page"))}catch(n){e(n)}})}async function Lt(){const t=await L(),{parsedSections:e}=t,n=Tt(t);if(!n||!e[n])throw new Error("GPP parser was called without an applicable section");const s=e[n],o=Mt[n];if(!o||typeof o!="function")throw new Error(`No parser found for applicable GPP section: ${n}`);return o(s)}function Ut(t,{purpose:e,vendor:n,specialFeatureOptins:s={}}){const o=T[t],a=(e==null?void 0:e.consents)||{},c=(e==null?void 0:e.legitimateInterests)||{},r=(n==null?void 0:n.consents)||{},i=(n==null?void 0:n.legitimateInterests)||{},p=o.purposes.every(l=>a[l]||c[l]),_=o.iabVendors.every(l=>r[l]||i[l]),d=o.specialFeatures.every(l=>s[l]===!0),f=o.purposes.every(l=>a[l]===!0);return t==="cookies"?f&&_&&d:p&&_&&d}async function U(){return new Promise((t,e)=>{try{window.__tcfapi?window.__tcfapi("addEventListener",2,t):e(new Error("TCF API is not available on page"))}catch(n){e(n)}})}async function Rt(){const t=await U(),e={};for(const n of w)e[n]=Ut(n,t);return e}async function Ft(t){const n={gdpr:Rt,usnat:Lt}[t];if(!n)throw new Error("Unable to update user consent. Unsupported consent legislation.");return n()}function C(){const e=Object.fromEntries(document.cookie.split("; ").map(s=>s.split("=")))[W];if(!e)return{};const n=decodeURIComponent(e);return Object.fromEntries(n.split(",").map(s=>{const[o,a]=s.split(":");return[o,a==="on"]}))}function Vt(t,e){const n=Object.keys(t),s=[];return n.forEach(o=>{const a=`${o.toLowerCase()}Onsite`;t[o]!==e[a]&&s.push(`${o}:${t[o]}:${e[a]}`)}),s.join(",")}function jt(t,e){return Object.keys(t).some(s=>{const o=`${s.toLowerCase()}Onsite`;return t[s]!==e[o]})}function xt({userId:t,useConsentStore:e}){return!!t&&e===!0}function Ht(t,e){return t?`${e.consentProxyHost}/__consent/consent-record/${q}/${e.userId}?updateFtConsentCookie=true`:`${e.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${e.cookieDomain}`}const R={gdpr:!1,usnat:!1},O=Object.assign({},R);function F(t){O[t]=!0}function $t(t){return O[t]}function Bt(){Object.assign(O,R)}async function Gt(t){return $t(t)?t==="gdpr"?(await U()).eventStatus==="useractioncomplete":t==="usnat"?(await L()).cmpDisplayStatus==="hidden":!1:!1}function qt(){window.__tcfapi&&window.__tcfapi("addEventListener",2,t=>{t.eventStatus==="cmpuishown"&&F("gdpr")}),window.__gpp&&window.__gpp("addEventListener",({pingData:t})=>{t.cmpDisplayStatus==="visible"&&F("usnat")})}function Wt(t={}){const e=new CustomEvent("ft.clientMetric",{bubbles:!0,cancelable:!0,detail:t});document.body.dispatchEvent(e)}async function Kt(t,e){try{const n=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),credentials:"include"});n.ok||console.error("Unable to save consent preferences",n.status)}catch(n){console.error("An error occurred while saving consent",n)}finally{document.dispatchEvent(new CustomEvent("onCmpConsentSaveCompleted",{bubbles:!0}))}}const Jt=()=>{document.dispatchEvent(new CustomEvent("onCmpConsentReady",{bubbles:!0}))};function zt(t){return async function(n,s,o,a){var x,H;if(Jt(),a.applies&&!window._FTConsentReady_&&(window._FTConsentReady_=n),t.disableFTCookies||!t.includeUsNat&&n==="usnat"||!a.applies||!o)return;let c;try{c=await Ft(n)}catch(P){console.error(P)}if(!c||!jt(c,C()))return;window.dataLayer=(window==null?void 0:window.dataLayer)||[],window.dataLayer.push({event:"consentUpdate",consentUpdateBehaviouralAds:c.behaviouralAds,consentUpdateCookies:c.cookies});const i=t==null?void 0:t.userId,p=(H=(x=window._sp_)==null?void 0:x.config)==null?void 0:H.propertyId;if(Object.keys(C()).length&&i&&p){const P=Vt(c,C()),we={namespace:"cmp.consentchange",userId:`${i}+${P}`,propertyId:p,legislation:n};Wt(we)}const d=await Gt(n),f=xt(t),l=Ht(f,t),ye=Pt(c,f,d,t);await Kt(l,ye),d&&Bt(),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const E="cookie-message",Xt="manage-cookies";let N=Object.freeze({activeComponent:E,messageId:0,privacyManagerId:0});function Yt(t){return typeof t=="object"&&t!==null&&t.constructor===Object&&Object.prototype.toString.call(t)==="[object Object]"}const Qt=()=>({...N}),k=t=>{if(!Yt(t)){console.error("Invalid state changes");return}N={...N,...t}},Zt=["adsDisableInternalCMP","pwm.cmp"];function te(t,e){const n=ee(t.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var s,o;for(const[a,c]of Object.entries(oe))(o=(s=window._sp_).addEventListener)==null||o.call(s,a,c({...t,flags:n}))}),se({...t,flags:n},e),ae()}function ee(t){const e={};return typeof t=="object"&&Zt.forEach(n=>{Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}),e}function ne(t){if(!t)return;const e=document.body,n=new CustomEvent("oTracking.event",{bubbles:!0,cancelable:!0,detail:t.detail});e.dispatchEvent(n)}function h({trackingProps:t,action:e,triggerAction:n}){let s;const o=Qt(),{product:a,app:c,flags:r}=t;o.activeComponent===E?s=o.messageId:s=o.privacyManagerId;const i={detail:{component:{id:s,name:o.activeComponent,type:"overlay",subtype:"cmp"},category:"component",action:e,...n&&{trigger_action:n},...a&&{product:a},...c&&{app:c},custom:[{cookie_toggle_flag:r}],url:window.document.location.href||null}};ne(i)}const oe={onMessageChoiceSelect:t=>(e,n,s)=>{const a={11:"accept_all",12:"manage_cookies",13:"reject_all"}[s];a&&h({trackingProps:t,action:"click",triggerAction:a})},onMessageReady:t=>()=>{h({trackingProps:t,action:"view"})},onMessageReceiveData:()=>(t,e)=>{const{messageId:n}=e;n&&k({messageId:n})},onError:t=>(e,n)=>{h({trackingProps:t,action:"error",triggerAction:n})},onPMCancel:()=>()=>{k({activeComponent:E})}};function se(t,e){window.addEventListener("message",function(n){if(n.origin!==e)return;const s={1:"save_and_close",11:"accept_all",13:"reject_all"},{data:{fromPM:o,actionType:a,messageId:c="0"}={}}=n;o&&(+c&&k({activeComponent:Xt,privacyManagerId:+c}),!(!a||!s[a])&&h({trackingProps:t,action:"click",triggerAction:s[a]}))},!1)}function ae(){document.addEventListener("onCmpConsentSaveCompleted",()=>{const t=document.cookie.match(/FTConsent=([^;]+)/);if(!t)return;const e=t[1];localStorage.setItem("__lastFtc",e)})}const ce="6.18.2";async function ie(t){const{useFTSession:e=!0,consentProxyHost:n=z,cookieDomain:s=J,formOfWordsId:o=K,useConsentStore:a=!0,trackingContext:c={},disableFTCookies:r=!1,includeUsNat:i=!1}=t||{};let{propertyConfig:p=b,userId:_}=t||{};if(typeof window>"u"){console.error("The CMP client can only be initialised in a browser context");return}if(window.FT_CMP_CLIENT_VERSION=ce,kt({includeUsNat:i}),!_&&e)try{const d=await G();_=d==null?void 0:d.uuid}catch(d){console.error(d)}p=re(p),Nt(p,{userId:_,includeUsNat:i}),qt(),window._sp_queue.push(()=>{var d,f;(f=(d=window._sp_)==null?void 0:d.addEventListener)==null||f.call(d,"onConsentReady",zt({userId:_,consentProxyHost:n,cookieDomain:s,formOfWordsId:o,useConsentStore:a,disableFTCookies:r,includeUsNat:i}))}),te(c,p.baseEndpoint)}function re(t){if(!(t!=null&&t.accountId))throw new Error("Please pass a valid property config");return t.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 t.events),t}function V(t,e,n,s,o,a){const{text:c,onClick:r}=s[e],i=document.querySelectorAll(`a[href*="${a}"]`);for(const p of i)(n||t)&&(o.has(p)&&p.removeEventListener("click",o.get(p)),p.innerText=c,p.addEventListener("click",r),o.set(p,r))}function pe({_clientOptions:t}=b){const{privacyManagerId:e,ccpaPrivacyManagerId:n,usnatPrivacyManagerId:s,manageCookiesLinkOverride:o}=t??b._clientOptions,a={usnat:{text:"Do Not Sell My Personal Information",onClick:i=>{var p;i.preventDefault(),(p=window._sp_.usnat)==null||p.loadPrivacyManagerModal(s)}},ccpa:{text:"Do Not Sell My Personal Information",onClick:i=>{var p;i.preventDefault(),(p=window._sp_.ccpa)==null||p.loadPrivacyManagerModal(n)}},gdpr:{text:"Manage Cookies",onClick:i=>{var p;i.preventDefault(),(p=window._sp_.gdpr)==null||p.loadPrivacyManagerModal(e)}}},c=new Map,r=function(i,p,_,d){V(!1,i,d.applies,a,c,o),d.applies&&window._sp_queue.push(()=>{var f,l;(l=(f=window._sp_).removeEventListener)==null||l.call(f,"onConsentReady",r)})};V(!0,"gdpr",!1,a,c,o),window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var i,p;(p=(i=window._sp_).addEventListener)==null||p.call(i,"onConsentReady",r)})}function ue(t=window,e){var c,r;const n="_cmp_open_pm_";if(!t._sp_)return;const{privacyManagerId:s,usnatPrivacyManagerId:o}=e??b._clientOptions,a=new URLSearchParams(t.location.search);if(a.has(n))switch(a.get(n)||""){case"usnat":(c=t._sp_.usnat)==null||c.loadPrivacyManagerModal(o);break;case"gdpr":(r=t._sp_.gdpr)==null||r.loadPrivacyManagerModal(s);break}}function de(t){window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var e,n;(n=(e=window._sp_)==null?void 0:e.addEventListener)==null||n.call(e,"onSPReady",()=>ue(window,t))})}function le(t){return t._clientOptions??{}}const me={"ft.com":le};function fe(t){return new Promise((e,n)=>{const{rootDomain:s}=t._clientOptions||{};if(!s)return e({});const o=me[s];if(!o||typeof o!="function")return e({...t._clientOptions});const a=()=>{try{e(o(t))}catch(c){n(c)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a):a()})}const _e={...{joinHref:!0,gdpr:{}},accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyId:41863,propertyHref:"https://globalbondsummit.live.ft.com",_clientOptions:{subDomain:"globalbondsummit.live.ft.com",includeUsNat:!0}},ge=Object.freeze(Object.defineProperty({__proto__:null,INV_GLOBAL_BONDS_SUMMIT:_e},Symbol.toStringTag,{value:"Module"}));function j(t,e){if(!e||Number.isFinite(parseFloat(e)))return!1;const n=t===e,s=t.endsWith(`.${e}`);return n||s}function Ie(t){if(!t)throw new Error("Invalid hostname provided");const e=Object.values(vt),s=Object.values(ge).find(a=>{var r;const c=(r=a==null?void 0:a._clientOptions)==null?void 0:r.subDomain;return c&&j(t,c)});if(s)return s;let o=e.find(a=>{var r;if(a.propertyHref)return!1;const c=(r=a._clientOptions)==null?void 0:r.rootDomain;return c&&j(t,c)});return o??(o=A),o}const be=new URL(window.location.href).hostname,m=Ie(be);(async()=>{var t,e;try{const n=await fe(m);ie({propertyConfig:m,...n}),(t=m==null?void 0:m._clientOptions)!=null&&t.privacyManagerId&&((e=m==null?void 0:m._clientOptions)!=null&&e.manageCookiesLinkOverride)&&(pe(m),de(m._clientOptions))}catch(n){console.error("Error: CMP package configure + initialise Sourcepoint failed.",n)}})()})();
1
+ (function(){"use strict";const B=(t,{credentials:e="omit"}={})=>fetch(`https://session-next.ft.com${t}`,{credentials:e,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 I={};const h=(t,e)=>{if(typeof t=="object"){I=t;return}if(typeof t=="string"&&typeof e=="string"){I[t]=e;return}if(typeof t=="string"&&typeof e>"u")return I[t]||null;if(typeof t>"u"&&typeof e>"u")return I;throw new Error("Invalid arguments")};h.clear=()=>{I={}};const b={},G=()=>{const[,t]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return t},q=()=>{const t=h("uuid");if(t)return Promise.resolve({uuid:t});const e=G();return e?(b.uuid||(b.uuid=B(`/sessions/s/${e}`).then(({uuid:n}={})=>(delete b.uuid,n&&h("uuid",n),{uuid:n}))),b.uuid):Promise.resolve({uuid:void 0})},S="sourcepoint-cmp",W="FTPINK",$="FTConsent",K="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk",J=".ft.com",z="https://consent.ft.com",k={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,4,8,9],iabVendors:[],customVendors:[],specialFeatures:[]},personalisedMarketing:{purposes:[2,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]},cookies:{purposes:[1,2,3,4,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]}},w=Object.keys(k),u={joinHref:!0,gdpr:{}},P={...u,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyHref:"https://local.ft.com",_clientOptions:{privacyManagerId:827767,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies",rootDomain:"ft.com",includeUsNat:!0}},y={...u,accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyId:31642,_clientOptions:{privacyManagerId:827767,usnatPrivacyManagerId:1143274,ccpaPrivacyManagerId:944882,manageCookiesLinkOverride:"ft.com/preferences/manage-cookies",rootDomain:"ft.com",includeUsNat:!0}},X={...u,accountId:1906,baseEndpoint:"https://consent-manager.pwmnet.com",propertyId:33414,_clientOptions:{rootDomain:"pwmnet.com",includeUsNat:!0}},Y={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdiintelligence.com",propertyId:34061,_clientOptions:{rootDomain:"fdiintelligence.com",includeUsNat:!0}},Q={...u,accountId:1906,baseEndpoint:"https://consent-manager.thebanker.com",propertyId:34060,_clientOptions:{rootDomain:"thebanker.com",includeUsNat:!0}},Z={...u,accountId:1906,baseEndpoint:"https://consent-manager.bankingriskandregulation.com",propertyId:34059,_clientOptions:{rootDomain:"bankingriskandregulation.com",includeUsNat:!0}},tt={...u,accountId:1906,baseEndpoint:"https://consent-manager.sustainableviews.com",propertyId:34058,_clientOptions:{rootDomain:"sustainableviews.com",includeUsNat:!0}},et={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftadviser.com",propertyId:33416,_clientOptions:{rootDomain:"ftadviser.com",includeUsNat:!0}},nt={...u,accountId:1906,baseEndpoint:"https://consent-manager.investorschronicle.co.uk",propertyId:33415,_clientOptions:{rootDomain:"investorschronicle.co.uk",includeUsNat:!0}},ot={...u,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33947,_clientOptions:{rootDomain:"ignitesasia.com"}},st={...u,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33946,_clientOptions:{rootDomain:"igniteseurope.com"}},at={...u,accountId:1906,baseEndpoint:"https://consent-manager.mandatewire.com",propertyId:35490,_clientOptions:{rootDomain:"mandatewire.com",includeUsNat:!0}},ct={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftlocations.com",propertyId:37407,_clientOptions:{rootDomain:"ftlocations.com",cookieDomain:".ftlocations.com",consentProxyHost:"https://consent.ftlocations.com",includeUsNat:!0}},it={...u,accountId:1906,baseEndpoint:"https://consent-manager.financialadviserserviceawards.com",propertyId:38297,_clientOptions:{rootDomain:"financialadviserserviceawards.com",includeUsNat:!0}},rt={...u,accountId:1906,baseEndpoint:"https://consent-manager.celebrationofinvestment.co.uk",propertyId:38296,_clientOptions:{rootDomain:"celebrationofinvestment.co.uk",includeUsNat:!0}},pt={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalprivatebankingawards.com",propertyId:38295,_clientOptions:{rootDomain:"globalprivatebankingawards.com",includeUsNat:!0}},ut={...u,accountId:1906,baseEndpoint:"https://consent-manager.thenextweb.com",propertyId:37672,_clientOptions:{rootDomain:"thenextweb.com"}},dt={...u,accountId:1906,baseEndpoint:"https://consent-manager.invisso.org",propertyId:38851,_clientOptions:{rootDomain:"invisso.org",includeUsNat:!0}},lt={...u,accountId:1906,baseEndpoint:"https://consent-manager.abseast.com",propertyId:38888,_clientOptions:{rootDomain:"abseast.com",includeUsNat:!0}},mt={...u,accountId:1906,baseEndpoint:"https://consent-manager.absasia.org",propertyId:38887,_clientOptions:{rootDomain:"absasia.org",includeUsNat:!0}},ft={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalcoveredbonds.com",propertyId:38886,_clientOptions:{rootDomain:"globalcoveredbonds.com",includeUsNat:!0}},_t={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalborrowers.com",propertyId:38885,_clientOptions:{rootDomain:"globalborrowers.com",includeUsNat:!0}},gt={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalabs.org",propertyId:38884,_clientOptions:{rootDomain:"globalabs.org",includeUsNat:!0}},It={...u,accountId:1906,baseEndpoint:"https://consent-manager.creditrisk-transfer.com",propertyId:38883,_clientOptions:{rootDomain:"creditrisk-transfer.com",includeUsNat:!0}},yt={...u,accountId:1906,baseEndpoint:"https://consent-manager.significantrisktransfer.com",propertyId:38882,_clientOptions:{rootDomain:"significantrisktransfer.com",includeUsNat:!0}},bt={...u,accountId:1906,baseEndpoint:"https://consent-manager.theceeforum.com",propertyId:38881,_clientOptions:{rootDomain:"theceeforum.com",includeUsNat:!0}},wt={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdimarkets.com",propertyId:40508,_clientOptions:{rootDomain:"fdimarkets.com",cookieDomain:".fdimarkets.com",consentProxyHost:"https://consent.fdimarkets.com",includeUsNat:!0}},vt={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdibenchmark.com",propertyId:40509,_clientOptions:{rootDomain:"fdibenchmark.com",cookieDomain:".fdibenchmark.com",consentProxyHost:"https://consent.fdibenchmark.com",includeUsNat:!0}},ht=Object.freeze(Object.defineProperty({__proto__:null,FT_DOTCOM_PROD:y,FT_DOTCOM_TEST:P,INVISSO:dt,INV_ABSASIA:mt,INV_ABSEAST:lt,INV_CEE_FORUM:bt,INV_CREDITRISK_TRANSFER:It,INV_GLOBAL_ABS:gt,INV_GLOBAL_BORROWERS:_t,INV_GLOBAL_COVERED_BONDS:ft,MM_IGNITES_ASIA:ot,MM_IGNITES_EUROPE:st,SIGRISK_TRANSFER:yt,SP_BANKING_RR:Z,SP_CELEBRATION_OF_INVESTMENT:rt,SP_FDI_BENCHMARK:vt,SP_FDI_INTELLIGENCE:Y,SP_FDI_MARKETS:wt,SP_FTA_SERVICE_AWARDS:it,SP_FT_ADVISER:et,SP_FT_LOCATIONS:ct,SP_GLOBAL_PRIVATE_BANKING_AWARDS:pt,SP_INVESTORS_CHRONICLE:nt,SP_MANDATE_WIRE:at,SP_PWMNET:X,SP_SUSTAINABLE_VIEWS:tt,SP_THE_BANKER:Q,TNW:ut},Symbol.toStringTag,{value:"Module"}));function T(t,e){const n=document.createElement("script");return n.dataset.cmpScript=t,n.innerHTML=e,n}function St(t){const e=document.createElement("script");return e.src=t,e}const Ct={cmpFrames:"https://consent-manager.ft.com/unified/wrapperMessagingWithoutDetection.js"};function Ot(){const t=document.createDocumentFragment();return t.appendChild(St(Ct.cmpFrames)),t}function Et(t,e){const{userId:n,includeUsNat:o}=e;return n&&(t.authId=n),o&&(t.usnat=t.usnat||{}),t}function Nt(t,e){const{_clientOptions:n,...o}=t,s=Et(o,e);window._sp_={config:s},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(Ot())}function kt(t){const e={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",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()}();',gppStub:'window.__gpp_addFrame=function(e){if(!window.frames[e])if(document.body){var t=document.createElement("iframe");t.style.cssText="display:none",t.name=e,document.body.appendChild(t)}else window.setTimeout(window.__gpp_addFrame,10,e)},window.__gpp_stub=function(){var e=arguments;if(__gpp.queue=__gpp.queue||[],__gpp.events=__gpp.events||[],!e.length||1==e.length&&"queue"==e[0])return __gpp.queue;if(1==e.length&&"events"==e[0])return __gpp.events;var t=e[0],p=e.length>1?e[1]:null,s=e.length>2?e[2]:null;if("ping"===t)p({gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}},!0);else if("addEventListener"===t){"lastId"in __gpp||(__gpp.lastId=0),__gpp.lastId++;var n=__gpp.lastId;__gpp.events.push({id:n,callback:p,parameter:s}),p({eventName:"listenerRegistered",listenerId:n,data:!0,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else if("removeEventListener"===t){for(var a=!1,i=0;i<__gpp.events.length;i++)if(__gpp.events[i].id==s){__gpp.events.splice(i,1),a=!0;break}p({eventName:"listenerRemoved",listenerId:s,data:a,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else"hasSection"===t?p(!1,!0):"getSection"===t||"getField"===t?p(null,!0):__gpp.queue.push([].slice.apply(e))},window.__gpp_msghandler=function(e){var t="string"==typeof e.data;try{var p=t?JSON.parse(e.data):e.data}catch(e){p=null}if("object"==typeof p&&null!==p&&"__gppCall"in p){var s=p.__gppCall;window.__gpp(s.command,(function(p,n){var a={__gppReturn:{returnValue:p,success:n,callId:s.callId}};e.source.postMessage(t?JSON.stringify(a):a,"*")}),"parameter"in s?s.parameter:null,"version"in s?s.version:"1.1")}},"__gpp"in window&&"function"==typeof window.__gpp||(window.__gpp=window.__gpp_stub,window.addEventListener("message",window.__gpp_msghandler,!1),window.__gpp_addFrame("__gppLocator"));'},n=document.createDocumentFragment();n.appendChild(T("tcf",e.tcfStub)),t.includeUsNat&&n.appendChild(T("gpp",e.gppStub)),document.head.appendChild(n)}function Pt(t,e,n,{formOfWordsId:o,cookieDomain:s}){const c=Object.keys(t).reduce((r,i)=>(r[i]={onsite:{status:t[i],lbi:!1,source:S,fow:o}},i==="cookies"&&(r.cookies.userAccept={status:t[i],lbi:!1,source:S,fow:o}),r),{});return e?{setConsentCookie:!0,formOfWordsId:o,consentSource:S,cookieDomain:s,skipDuplicateUpdates:!n,data:c}:{data:c,cookieDomain:s}}const g={CALIFORNIA:"usca",US_NATIONAL:"usnat"},A={[g.CALIFORNIA]:{excludedCategories:{}},[g.US_NATIONAL]:{excludedCategories:{personalisedMarketing:!0}}};function Tt(t){const{applicableSections:e,supportedAPIs:n}=t,o=e[0];if(o===-1||typeof o>"u")return;const s=n.find(c=>c.startsWith(`${o}:`));return s==null?void 0:s.split(":")[1]}function At(t){const{SaleOptOut:e,SharingOptOut:n,Gpc:o}=t,{excludedCategories:s}=A[g.CALIFORNIA],a=e!==1&&n!==1&&!o,c={};for(const r of w){if(r in s){c[r]=!0;continue}c[r]=a}return c}function Dt(t){const{SaleOptOut:e,SharingOptOut:n,TargetedAdvertisingOptOut:o}=t,{excludedCategories:s}=A[g.US_NATIONAL],a=JSON.parse(localStorage.getItem("ft_sp_marketing_optout")||"{}"),c=e!==1&&n!==1&&o!==1,r={};for(const i of w){if(i in s){r[i]=!0;continue}r[i]=c}if(a.usnat)for(const i of w)r[i]=!1;return r}const Mt={[g.CALIFORNIA]:At,[g.US_NATIONAL]:Dt};async function D(){return new Promise((t,e)=>{try{window.__gpp?window.__gpp("ping",t):e(new Error("GPP API is not available on page"))}catch(n){e(n)}})}async function Ut(){const t=await D(),{parsedSections:e}=t,n=Tt(t);if(!n||!e[n])throw new Error("GPP parser was called without an applicable section");const o=e[n],s=Mt[n];if(!s||typeof s!="function")throw new Error(`No parser found for applicable GPP section: ${n}`);return s(o)}function Lt(t,{purpose:e,vendor:n,specialFeatureOptins:o={}}){const s=k[t],a=(e==null?void 0:e.consents)||{},c=(e==null?void 0:e.legitimateInterests)||{},r=(n==null?void 0:n.consents)||{},i=(n==null?void 0:n.legitimateInterests)||{},p=s.purposes.every(l=>a[l]||c[l]),_=s.iabVendors.every(l=>r[l]||i[l]),d=s.specialFeatures.every(l=>o[l]===!0),m=s.purposes.every(l=>a[l]===!0);return t==="cookies"?m&&_&&d:p&&_&&d}async function M(){return new Promise((t,e)=>{try{window.__tcfapi?window.__tcfapi("addEventListener",2,t):e(new Error("TCF API is not available on page"))}catch(n){e(n)}})}async function Ft(){const t=await M(),e={};for(const n of w)e[n]=Lt(n,t);return e}async function Rt(t){const n={gdpr:Ft,usnat:Ut}[t];if(!n)throw new Error("Unable to update user consent. Unsupported consent legislation.");return n()}function U(){const e=Object.fromEntries(document.cookie.split("; ").map(o=>o.split("=")))[$];if(!e)return{};const n=decodeURIComponent(e);return Object.fromEntries(n.split(",").map(o=>{const[s,a]=o.split(":");return[s,a==="on"]}))}function Vt(t,e){return Object.keys(t).some(o=>{const s=`${o.toLowerCase()}Onsite`;return t[o]!==e[s]})}function xt({userId:t,useConsentStore:e}){return!!t&&e===!0}function jt(t,e){return t?`${e.consentProxyHost}/__consent/consent-record/${W}/${e.userId}?updateFtConsentCookie=true`:`${e.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${e.cookieDomain}`}const L={gdpr:!1,usnat:!1},C=Object.assign({},L);function F(t){C[t]=!0}function Ht(t){return C[t]}function Bt(){Object.assign(C,L)}async function Gt(t){return Ht(t)?t==="gdpr"?(await M()).eventStatus==="useractioncomplete":t==="usnat"?(await D()).cmpDisplayStatus==="hidden":!1:!1}function qt(){window.__tcfapi&&window.__tcfapi("addEventListener",2,t=>{t.eventStatus==="cmpuishown"&&F("gdpr")}),window.__gpp&&window.__gpp("addEventListener",({pingData:t})=>{t.cmpDisplayStatus==="visible"&&F("usnat")})}function Wt(t={}){const e=new CustomEvent("ft.clientMetric",{bubbles:!0,cancelable:!0,detail:t});document.body.dispatchEvent(e)}async function $t(t,e){try{const n=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),credentials:"include"});n.ok||console.error("Unable to save consent preferences",n.status)}catch(n){console.error("An error occurred while saving consent",n)}finally{document.dispatchEvent(new CustomEvent("onCmpConsentSaveCompleted",{bubbles:!0}))}}const Kt=()=>{document.dispatchEvent(new CustomEvent("onCmpConsentReady",{bubbles:!0}))};function Jt(t){return async function(n,o,s,a){var x,j;if(Kt(),a.applies&&!window._FTConsentReady_&&(window._FTConsentReady_=n),t.disableFTCookies||!t.includeUsNat&&n==="usnat"||!a.applies||!s)return;let c;try{c=await Rt(n)}catch(H){console.error(H)}if(!c||!Vt(c,U()))return;window.dataLayer=(window==null?void 0:window.dataLayer)||[],window.dataLayer.push({event:"consentUpdate",consentUpdateBehaviouralAds:c.behaviouralAds,consentUpdateCookies:c.cookies});const i=t==null?void 0:t.userId,p=(j=(x=window._sp_)==null?void 0:x.config)==null?void 0:j.propertyId;Object.keys(U()).length&&i&&p&&Wt({namespace:"cmp.consentchange",userId:i,propertyId:p,legislation:n});const d=await Gt(n),m=xt(t),l=jt(m,t),ye=Pt(c,m,d,t);m&&(document.cookie="FTConsent=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.ft.com;"),await $t(l,ye),d&&Bt(),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const O="cookie-message",zt="manage-cookies";let E=Object.freeze({activeComponent:O,messageId:0,privacyManagerId:0});function Xt(t){return typeof t=="object"&&t!==null&&t.constructor===Object&&Object.prototype.toString.call(t)==="[object Object]"}const Yt=()=>({...E}),N=t=>{if(!Xt(t)){console.error("Invalid state changes");return}E={...E,...t}},Qt=["adsDisableInternalCMP","pwm.cmp"];function Zt(t,e){const n=te(t.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var o,s;for(const[a,c]of Object.entries(ne))(s=(o=window._sp_).addEventListener)==null||s.call(o,a,c({...t,flags:n}))}),oe({...t,flags:n},e),se()}function te(t){const e={};return typeof t=="object"&&Qt.forEach(n=>{Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}),e}function ee(t){if(!t)return;const e=document.body,n=new CustomEvent("oTracking.event",{bubbles:!0,cancelable:!0,detail:t.detail});e.dispatchEvent(n)}function v({trackingProps:t,action:e,triggerAction:n}){let o;const s=Yt(),{product:a,app:c,flags:r}=t;s.activeComponent===O?o=s.messageId:o=s.privacyManagerId;const i={detail:{component:{id:o,name:s.activeComponent,type:"overlay",subtype:"cmp"},category:"component",action:e,...n&&{trigger_action:n},...a&&{product:a},...c&&{app:c},custom:[{cookie_toggle_flag:r}],url:window.document.location.href||null}};ee(i)}const ne={onMessageChoiceSelect:t=>(e,n,o)=>{const a={11:"accept_all",12:"manage_cookies",13:"reject_all"}[o];a&&v({trackingProps:t,action:"click",triggerAction:a})},onMessageReady:t=>()=>{v({trackingProps:t,action:"view"})},onMessageReceiveData:()=>(t,e)=>{const{messageId:n}=e;n&&N({messageId:n})},onError:t=>(e,n)=>{v({trackingProps:t,action:"error",triggerAction:n})},onPMCancel:()=>()=>{N({activeComponent:O})}};function oe(t,e){window.addEventListener("message",function(n){if(n.origin!==e)return;const o={1:"save_and_close",11:"accept_all",13:"reject_all"},{data:{fromPM:s,actionType:a,messageId:c="0"}={}}=n;s&&(+c&&N({activeComponent:zt,privacyManagerId:+c}),!(!a||!o[a])&&v({trackingProps:t,action:"click",triggerAction:o[a]}))},!1)}function se(){document.addEventListener("onCmpConsentSaveCompleted",()=>{const t=document.cookie.match(/FTConsent=([^;]+)/);if(!t)return;const e=t[1];localStorage.setItem("__lastFtc",e)})}const ae="6.19.0";async function ce(t){const{useFTSession:e=!0,consentProxyHost:n=z,cookieDomain:o=J,formOfWordsId:s=K,useConsentStore:a=!0,trackingContext:c={},disableFTCookies:r=!1,includeUsNat:i=!1}=t||{};let{propertyConfig:p=y,userId:_}=t||{};if(typeof window>"u"){console.error("The CMP client can only be initialised in a browser context");return}if(window.FT_CMP_CLIENT_VERSION=ae,kt({includeUsNat:i}),!_&&e)try{const d=await q();_=d==null?void 0:d.uuid}catch(d){console.error(d)}p=ie(p),Nt(p,{userId:_,includeUsNat:i}),qt(),window._sp_queue.push(()=>{var d,m;(m=(d=window._sp_)==null?void 0:d.addEventListener)==null||m.call(d,"onConsentReady",Jt({userId:_,consentProxyHost:n,cookieDomain:o,formOfWordsId:s,useConsentStore:a,disableFTCookies:r,includeUsNat:i}))}),Zt(c,p.baseEndpoint)}function ie(t){if(!(t!=null&&t.accountId))throw new Error("Please pass a valid property config");return t.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 t.events),t}function R(t,e,n,o,s,a){const{text:c,onClick:r}=o[e],i=document.querySelectorAll(`a[href*="${a}"]`);for(const p of i)(n||t)&&(s.has(p)&&p.removeEventListener("click",s.get(p)),p.innerText=c,p.addEventListener("click",r),s.set(p,r))}function re({_clientOptions:t}=y){const{privacyManagerId:e,ccpaPrivacyManagerId:n,usnatPrivacyManagerId:o,manageCookiesLinkOverride:s}=t??y._clientOptions,a={usnat:{text:"Do Not Sell My Personal Information",onClick:i=>{var p;i.preventDefault(),(p=window._sp_.usnat)==null||p.loadPrivacyManagerModal(o)}},ccpa:{text:"Do Not Sell My Personal Information",onClick:i=>{var p;i.preventDefault(),(p=window._sp_.ccpa)==null||p.loadPrivacyManagerModal(n)}},gdpr:{text:"Manage Cookies",onClick:i=>{var p;i.preventDefault(),(p=window._sp_.gdpr)==null||p.loadPrivacyManagerModal(e)}}},c=new Map,r=function(i,p,_,d){R(!1,i,d.applies,a,c,s),d.applies&&window._sp_queue.push(()=>{var m,l;(l=(m=window._sp_).removeEventListener)==null||l.call(m,"onConsentReady",r)})};R(!0,"gdpr",!1,a,c,s),window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var i,p;(p=(i=window._sp_).addEventListener)==null||p.call(i,"onConsentReady",r)})}function pe(t=window,e){var c,r;const n="_cmp_open_pm_";if(!t._sp_)return;const{privacyManagerId:o,usnatPrivacyManagerId:s}=e??y._clientOptions,a=new URLSearchParams(t.location.search);if(a.has(n))switch(a.get(n)||""){case"usnat":(c=t._sp_.usnat)==null||c.loadPrivacyManagerModal(s);break;case"gdpr":(r=t._sp_.gdpr)==null||r.loadPrivacyManagerModal(o);break}}function ue(t){window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var e,n;(n=(e=window._sp_)==null?void 0:e.addEventListener)==null||n.call(e,"onSPReady",()=>pe(window,t))})}function de(t){return t._clientOptions??{}}const le={"ft.com":de};function me(t){return new Promise((e,n)=>{const{rootDomain:o}=t._clientOptions||{};if(!o)return e({});const s=le[o];if(!s||typeof s!="function")return e({...t._clientOptions});const a=()=>{try{e(s(t))}catch(c){n(c)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a):a()})}const fe={...{joinHref:!0,gdpr:{}},accountId:1906,baseEndpoint:"https://consent-manager.ft.com",propertyId:41863,propertyHref:"https://globalbondsummit.live.ft.com",_clientOptions:{subDomain:"globalbondsummit.live.ft.com",includeUsNat:!0}},_e=Object.freeze(Object.defineProperty({__proto__:null,INV_GLOBAL_BONDS_SUMMIT:fe},Symbol.toStringTag,{value:"Module"}));function V(t,e){if(!e||Number.isFinite(parseFloat(e)))return!1;const n=t===e,o=t.endsWith(`.${e}`);return n||o}function ge(t){if(!t)throw new Error("Invalid hostname provided");const e=Object.values(ht),o=Object.values(_e).find(a=>{var r;const c=(r=a==null?void 0:a._clientOptions)==null?void 0:r.subDomain;return c&&V(t,c)});if(o)return o;let s=e.find(a=>{var r;if(a.propertyHref)return!1;const c=(r=a._clientOptions)==null?void 0:r.rootDomain;return c&&V(t,c)});return s??(s=P),s}const Ie=new URL(window.location.href).hostname,f=ge(Ie);(async()=>{var t,e;try{const n=await me(f);ce({propertyConfig:f,...n}),(t=f==null?void 0:f._clientOptions)!=null&&t.privacyManagerId&&((e=f==null?void 0:f._clientOptions)!=null&&e.manageCookiesLinkOverride)&&(re(f),ue(f._clientOptions))}catch(n){console.error("Error: CMP package configure + initialise Sourcepoint failed.",n)}})()})();
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/consent-ready/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAe/E,wBAAsB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBAwB1F;AAMD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,iBAE7C,WAAW,gBACV,MAAM,iBACL,MAAM,eACR;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,mBAyFrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/consent-ready/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAc/E,wBAAsB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBAwB1F;AAMD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,iBAE7C,WAAW,gBACV,MAAM,iBACL,MAAM,eACR;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,mBAmGrC"}
@@ -1,6 +1,5 @@
1
1
  import type { ConsentReadyProps, ParsedConsentState } from "../../../typings/types";
2
2
  export declare function getConsentCookieValue(): Record<string, boolean>;
3
- export declare function whatConsentHasChanged(parsedConsent: ParsedConsentState, previousConsent: Record<string, boolean>): string;
4
3
  export declare function hasConsentChanged(parsedConsent: ParsedConsentState, previousConsent: Record<string, boolean>): boolean;
5
4
  export declare function shouldUpdateConsentStore({ userId, useConsentStore }: ConsentReadyProps): boolean;
6
5
  export declare function getConsentEndpoint(updateConsentStore: boolean, props: ConsentReadyProps): string;
@@ -1 +1 @@
1
- {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../../src/consent-ready/utils/consent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAIhC,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc/D;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,kBAAkB,EACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,MAAM,CAgBR;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,kBAAkB,EACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,iBAAiB,WAEtF;AAED,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,UAMvF"}
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../../src/consent-ready/utils/consent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAIhC,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc/D;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,kBAAkB,EACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,iBAAiB,WAEtF;AAED,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,UAMvF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cmp-client",
3
- "version": "6.18.2",
3
+ "version": "6.19.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [