@financial-times/cmp-client 6.17.0 → 6.18.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
@@ -860,6 +860,14 @@ function initConsentSyncValidation() {
860
860
  });
861
861
  }
862
862
  }
863
+ function dispatchMetricsEvent(payload = {}) {
864
+ const event = new CustomEvent("ft.clientMetric", {
865
+ bubbles: true,
866
+ cancelable: true,
867
+ detail: payload
868
+ });
869
+ document.body.dispatchEvent(event);
870
+ }
863
871
  async function saveConsent(consentEndpoint, payload) {
864
872
  try {
865
873
  const response = await fetch(consentEndpoint, {
@@ -884,6 +892,7 @@ const dispatchConsentSetEvent = () => {
884
892
  };
885
893
  function consentReadyHandlerFn(props) {
886
894
  return async function consentReadyHandler(legislation, _consentUUID, consentString, consentMeta) {
895
+ var _a, _b;
887
896
  dispatchConsentSetEvent();
888
897
  if (consentMeta.applies && !window._FTConsentReady_) {
889
898
  window._FTConsentReady_ = legislation;
@@ -916,6 +925,18 @@ function consentReadyHandlerFn(props) {
916
925
  consentUpdateBehaviouralAds: parsedConsent.behaviouralAds,
917
926
  consentUpdateCookies: parsedConsent.cookies
918
927
  });
928
+ const userId = props == null ? void 0 : props.userId;
929
+ const propertyId = (_b = (_a = window._sp_) == null ? void 0 : _a.config) == null ? void 0 : _b.propertyId;
930
+ const consentCookieExists = Object.keys(getConsentCookieValue()).length;
931
+ if (consentCookieExists && userId && propertyId) {
932
+ const metricsPayload = {
933
+ namespace: "cmp.consentchange",
934
+ userId,
935
+ propertyId,
936
+ legislation
937
+ };
938
+ dispatchMetricsEvent(metricsPayload);
939
+ }
919
940
  const isUserInitiated = await isUserInitiatedUpdate(legislation);
920
941
  const updateConsentStore = shouldUpdateConsentStore(props);
921
942
  const consentEndpoint = getConsentEndpoint(updateConsentStore, props);
@@ -1097,7 +1118,7 @@ function setupFTConsentCookieAuditStorage() {
1097
1118
  localStorage.setItem("__lastFtc", ftConsentCookieValue);
1098
1119
  });
1099
1120
  }
1100
- const version = "6.17.0";
1121
+ const version = "6.18.1";
1101
1122
  async function initSourcepointCmp(options) {
1102
1123
  const {
1103
1124
  useFTSession = true,
package/dist/index.js CHANGED
@@ -858,6 +858,14 @@ function initConsentSyncValidation() {
858
858
  });
859
859
  }
860
860
  }
861
+ function dispatchMetricsEvent(payload = {}) {
862
+ const event = new CustomEvent("ft.clientMetric", {
863
+ bubbles: true,
864
+ cancelable: true,
865
+ detail: payload
866
+ });
867
+ document.body.dispatchEvent(event);
868
+ }
861
869
  async function saveConsent(consentEndpoint, payload) {
862
870
  try {
863
871
  const response = await fetch(consentEndpoint, {
@@ -882,6 +890,7 @@ const dispatchConsentSetEvent = () => {
882
890
  };
883
891
  function consentReadyHandlerFn(props) {
884
892
  return async function consentReadyHandler(legislation, _consentUUID, consentString, consentMeta) {
893
+ var _a, _b;
885
894
  dispatchConsentSetEvent();
886
895
  if (consentMeta.applies && !window._FTConsentReady_) {
887
896
  window._FTConsentReady_ = legislation;
@@ -914,6 +923,18 @@ function consentReadyHandlerFn(props) {
914
923
  consentUpdateBehaviouralAds: parsedConsent.behaviouralAds,
915
924
  consentUpdateCookies: parsedConsent.cookies
916
925
  });
926
+ const userId = props == null ? void 0 : props.userId;
927
+ const propertyId = (_b = (_a = window._sp_) == null ? void 0 : _a.config) == null ? void 0 : _b.propertyId;
928
+ const consentCookieExists = Object.keys(getConsentCookieValue()).length;
929
+ if (consentCookieExists && userId && propertyId) {
930
+ const metricsPayload = {
931
+ namespace: "cmp.consentchange",
932
+ userId,
933
+ propertyId,
934
+ legislation
935
+ };
936
+ dispatchMetricsEvent(metricsPayload);
937
+ }
917
938
  const isUserInitiated = await isUserInitiatedUpdate(legislation);
918
939
  const updateConsentStore = shouldUpdateConsentStore(props);
919
940
  const consentEndpoint = getConsentEndpoint(updateConsentStore, props);
@@ -1095,7 +1116,7 @@ function setupFTConsentCookieAuditStorage() {
1095
1116
  localStorage.setItem("__lastFtc", ftConsentCookieValue);
1096
1117
  });
1097
1118
  }
1098
- const version = "6.17.0";
1119
+ const version = "6.18.1";
1099
1120
  async function initSourcepointCmp(options) {
1100
1121
  const {
1101
1122
  useFTSession = true,
@@ -1 +1 @@
1
- (function(){"use strict";const V=(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={},j=()=>{const[,t]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return t},x=()=>{const t=h("uuid");if(t)return Promise.resolve({uuid:t});const e=j();return e?(b.uuid||(b.uuid=V(`/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",H="FTPINK",B="FTConsent",G="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk",q=".ft.com",W="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}},$={...u,accountId:1906,baseEndpoint:"https://consent-manager.pwmnet.com",propertyId:33414,_clientOptions:{rootDomain:"pwmnet.com",includeUsNat:!0}},K={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdiintelligence.com",propertyId:34061,_clientOptions:{rootDomain:"fdiintelligence.com",includeUsNat:!0}},J={...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}},X={...u,accountId:1906,baseEndpoint:"https://consent-manager.sustainableviews.com",propertyId:34058,_clientOptions:{rootDomain:"sustainableviews.com",includeUsNat:!0}},Y={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftadviser.com",propertyId:33416,_clientOptions:{rootDomain:"ftadviser.com",includeUsNat:!0}},Q={...u,accountId:1906,baseEndpoint:"https://consent-manager.investorschronicle.co.uk",propertyId:33415,_clientOptions:{rootDomain:"investorschronicle.co.uk",includeUsNat:!0}},Z={...u,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33947,_clientOptions:{rootDomain:"ignitesasia.com"}},tt={...u,accountId:1906,baseEndpoint:"https://cdn.privacy-mgmt.com",propertyId:33946,_clientOptions:{rootDomain:"igniteseurope.com"}},et={...u,accountId:1906,baseEndpoint:"https://consent-manager.mandatewire.com",propertyId:35490,_clientOptions:{rootDomain:"mandatewire.com",includeUsNat:!0}},nt={...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}},ot={...u,accountId:1906,baseEndpoint:"https://consent-manager.financialadviserserviceawards.com",propertyId:38297,_clientOptions:{rootDomain:"financialadviserserviceawards.com",includeUsNat:!0}},st={...u,accountId:1906,baseEndpoint:"https://consent-manager.celebrationofinvestment.co.uk",propertyId:38296,_clientOptions:{rootDomain:"celebrationofinvestment.co.uk",includeUsNat:!0}},at={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalprivatebankingawards.com",propertyId:38295,_clientOptions:{rootDomain:"globalprivatebankingawards.com",includeUsNat:!0}},it={...u,accountId:1906,baseEndpoint:"https://consent-manager.thenextweb.com",propertyId:37672,_clientOptions:{rootDomain:"thenextweb.com"}},ct={...u,accountId:1906,baseEndpoint:"https://consent-manager.invisso.org",propertyId:38851,_clientOptions:{rootDomain:"invisso.org",includeUsNat:!0}},rt={...u,accountId:1906,baseEndpoint:"https://consent-manager.abseast.com",propertyId:38888,_clientOptions:{rootDomain:"abseast.com",includeUsNat:!0}},pt={...u,accountId:1906,baseEndpoint:"https://consent-manager.absasia.org",propertyId:38887,_clientOptions:{rootDomain:"absasia.org",includeUsNat:!0}},ut={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalcoveredbonds.com",propertyId:38886,_clientOptions:{rootDomain:"globalcoveredbonds.com",includeUsNat:!0}},dt={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalborrowers.com",propertyId:38885,_clientOptions:{rootDomain:"globalborrowers.com",includeUsNat:!0}},lt={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalabs.org",propertyId:38884,_clientOptions:{rootDomain:"globalabs.org",includeUsNat:!0}},mt={...u,accountId:1906,baseEndpoint:"https://consent-manager.creditrisk-transfer.com",propertyId:38883,_clientOptions:{rootDomain:"creditrisk-transfer.com",includeUsNat:!0}},ft={...u,accountId:1906,baseEndpoint:"https://consent-manager.significantrisktransfer.com",propertyId:38882,_clientOptions:{rootDomain:"significantrisktransfer.com",includeUsNat:!0}},_t={...u,accountId:1906,baseEndpoint:"https://consent-manager.theceeforum.com",propertyId:38881,_clientOptions:{rootDomain:"theceeforum.com",includeUsNat:!0}},gt={...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}},It={...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}},yt=Object.freeze(Object.defineProperty({__proto__:null,FT_DOTCOM_PROD:y,FT_DOTCOM_TEST:P,INVISSO:ct,INV_ABSASIA:pt,INV_ABSEAST:rt,INV_CEE_FORUM:_t,INV_CREDITRISK_TRANSFER:mt,INV_GLOBAL_ABS:lt,INV_GLOBAL_BORROWERS:dt,INV_GLOBAL_COVERED_BONDS:ut,MM_IGNITES_ASIA:Z,MM_IGNITES_EUROPE:tt,SIGRISK_TRANSFER:ft,SP_BANKING_RR:z,SP_CELEBRATION_OF_INVESTMENT:st,SP_FDI_BENCHMARK:It,SP_FDI_INTELLIGENCE:K,SP_FDI_MARKETS:gt,SP_FTA_SERVICE_AWARDS:ot,SP_FT_ADVISER:Y,SP_FT_LOCATIONS:nt,SP_GLOBAL_PRIVATE_BANKING_AWARDS:at,SP_INVESTORS_CHRONICLE:Q,SP_MANDATE_WIRE:et,SP_PWMNET:$,SP_SUSTAINABLE_VIEWS:X,SP_THE_BANKER:J,TNW:it},Symbol.toStringTag,{value:"Module"}));function T(t,e){const n=document.createElement("script");return n.dataset.cmpScript=t,n.innerHTML=e,n}function bt(t){const e=document.createElement("script");return e.src=t,e}const wt={cmpFrames:"https://consent-manager.ft.com/unified/wrapperMessagingWithoutDetection.js"};function vt(){const t=document.createDocumentFragment();return t.appendChild(bt(wt.cmpFrames)),t}function ht(t,e){const{userId:n,includeUsNat:o}=e;return n&&(t.authId=n),o&&(t.usnat=t.usnat||{}),t}function St(t,e){const{_clientOptions:n,...o}=t,s=ht(o,e);window._sp_={config:s},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(vt())}function Ot(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 Ct(t,e,n,{formOfWordsId:o,cookieDomain:s}){const i=Object.keys(t).reduce((r,c)=>(r[c]={onsite:{status:t[c],lbi:!1,source:S,fow:o}},c==="cookies"&&(r.cookies.userAccept={status:t[c],lbi:!1,source:S,fow:o}),r),{});return e?{setConsentCookie:!0,formOfWordsId:o,consentSource:S,cookieDomain:s,skipDuplicateUpdates:!n,data:i}:{data:i,cookieDomain:s}}const g={CALIFORNIA:"usca",US_NATIONAL:"usnat"},A={[g.CALIFORNIA]:{excludedCategories:{}},[g.US_NATIONAL]:{excludedCategories:{personalisedMarketing:!0}}};function Et(t){const{applicableSections:e,supportedAPIs:n}=t,o=e[0];if(o===-1||typeof o>"u")return;const s=n.find(i=>i.startsWith(`${o}:`));return s==null?void 0:s.split(":")[1]}function Nt(t){const{SaleOptOut:e,SharingOptOut:n,Gpc:o}=t,{excludedCategories:s}=A[g.CALIFORNIA],a=e!==1&&n!==1&&!o,i={};for(const r of w){if(r in s){i[r]=!0;continue}i[r]=a}return i}function kt(t){const{SaleOptOut:e,SharingOptOut:n,TargetedAdvertisingOptOut:o}=t,{excludedCategories:s}=A[g.US_NATIONAL],a=JSON.parse(localStorage.getItem("ft_sp_marketing_optout")||"{}"),i=e!==1&&n!==1&&o!==1,r={};for(const c of w){if(c in s){r[c]=!0;continue}r[c]=i}if(a.usnat)for(const c of w)r[c]=!1;return r}const Pt={[g.CALIFORNIA]:Nt,[g.US_NATIONAL]:kt};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 Tt(){const t=await D(),{parsedSections:e}=t,n=Et(t);if(!n||!e[n])throw new Error("GPP parser was called without an applicable section");const o=e[n],s=Pt[n];if(!s||typeof s!="function")throw new Error(`No parser found for applicable GPP section: ${n}`);return s(o)}function At(t,{purpose:e,vendor:n,specialFeatureOptins:o={}}){const s=k[t],a=(e==null?void 0:e.consents)||{},i=(e==null?void 0:e.legitimateInterests)||{},r=(n==null?void 0:n.consents)||{},c=(n==null?void 0:n.legitimateInterests)||{},p=s.purposes.every(l=>a[l]||i[l]),f=s.iabVendors.every(l=>r[l]||c[l]),d=s.specialFeatures.every(l=>o[l]===!0),_=s.purposes.every(l=>a[l]===!0);return t==="cookies"?_&&f&&d:p&&f&&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 Dt(){const t=await M(),e={};for(const n of w)e[n]=At(n,t);return e}async function Mt(t){const n={gdpr:Dt,usnat:Tt}[t];if(!n)throw new Error("Unable to update user consent. Unsupported consent legislation.");return n()}function Ut(){const e=Object.fromEntries(document.cookie.split("; ").map(o=>o.split("=")))[B];if(!e)return{};const n=decodeURIComponent(e);return Object.fromEntries(n.split(",").map(o=>{const[s,a]=o.split(":");return[s,a==="on"]}))}function Lt(t,e){return Object.keys(t).some(o=>{const s=`${o.toLowerCase()}Onsite`;return t[o]!==e[s]})}function Rt({userId:t,useConsentStore:e}){return!!t&&e===!0}function Ft(t,e){return t?`${e.consentProxyHost}/__consent/consent-record/${H}/${e.userId}?updateFtConsentCookie=true`:`${e.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${e.cookieDomain}`}const U={gdpr:!1,usnat:!1},O=Object.assign({},U);function L(t){O[t]=!0}function Vt(t){return O[t]}function jt(){Object.assign(O,U)}async function xt(t){return Vt(t)?t==="gdpr"?(await M()).eventStatus==="useractioncomplete":t==="usnat"?(await D()).cmpDisplayStatus==="hidden":!1:!1}function Ht(){window.__tcfapi&&window.__tcfapi("addEventListener",2,t=>{t.eventStatus==="cmpuishown"&&L("gdpr")}),window.__gpp&&window.__gpp("addEventListener",({pingData:t})=>{t.cmpDisplayStatus==="visible"&&L("usnat")})}async function Bt(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 Gt=()=>{document.dispatchEvent(new CustomEvent("onCmpConsentReady",{bubbles:!0}))};function qt(t){return async function(n,o,s,a){if(Gt(),a.applies&&!window._FTConsentReady_&&(window._FTConsentReady_=n),t.disableFTCookies||!t.includeUsNat&&n==="usnat"||!a.applies||!s)return;let i;try{i=await Mt(n)}catch(_){console.error(_)}if(!i||!Lt(i,Ut()))return;window.dataLayer=(window==null?void 0:window.dataLayer)||[],window.dataLayer.push({event:"consentUpdate",consentUpdateBehaviouralAds:i.behaviouralAds,consentUpdateCookies:i.cookies});const c=await xt(n),p=Rt(t),f=Ft(p,t),d=Ct(i,p,c,t);await Bt(f,d),c&&jt(),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const C="cookie-message",Wt="manage-cookies";let E=Object.freeze({activeComponent:C,messageId:0,privacyManagerId:0});function $t(t){return typeof t=="object"&&t!==null&&t.constructor===Object&&Object.prototype.toString.call(t)==="[object Object]"}const Kt=()=>({...E}),N=t=>{if(!$t(t)){console.error("Invalid state changes");return}E={...E,...t}},Jt=["adsDisableInternalCMP","pwm.cmp"];function zt(t,e){const n=Xt(t.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var o,s;for(const[a,i]of Object.entries(Qt))(s=(o=window._sp_).addEventListener)==null||s.call(o,a,i({...t,flags:n}))}),Zt({...t,flags:n},e),te()}function Xt(t){const e={};return typeof t=="object"&&Jt.forEach(n=>{Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}),e}function Yt(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=Kt(),{product:a,app:i,flags:r}=t;s.activeComponent===C?o=s.messageId:o=s.privacyManagerId;const c={detail:{component:{id:o,name:s.activeComponent,type:"overlay",subtype:"cmp"},category:"component",action:e,...n&&{trigger_action:n},...a&&{product:a},...i&&{app:i},custom:[{cookie_toggle_flag:r}],url:window.document.location.href||null}};Yt(c)}const Qt={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:C})}};function Zt(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:i="0"}={}}=n;s&&(+i&&N({activeComponent:Wt,privacyManagerId:+i}),!(!a||!o[a])&&v({trackingProps:t,action:"click",triggerAction:o[a]}))},!1)}function te(){document.addEventListener("onCmpConsentSaveCompleted",()=>{const t=document.cookie.match(/FTConsent=([^;]+)/);if(!t)return;const e=t[1];localStorage.setItem("__lastFtc",e)})}const ee="6.17.0";async function ne(t){const{useFTSession:e=!0,consentProxyHost:n=W,cookieDomain:o=q,formOfWordsId:s=G,useConsentStore:a=!0,trackingContext:i={},disableFTCookies:r=!1,includeUsNat:c=!1}=t||{};let{propertyConfig:p=y,userId:f}=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=ee,Ot({includeUsNat:c}),!f&&e)try{const d=await x();f=d==null?void 0:d.uuid}catch(d){console.error(d)}p=oe(p),St(p,{userId:f,includeUsNat:c}),Ht(),window._sp_queue.push(()=>{var d,_;(_=(d=window._sp_)==null?void 0:d.addEventListener)==null||_.call(d,"onConsentReady",qt({userId:f,consentProxyHost:n,cookieDomain:o,formOfWordsId:s,useConsentStore:a,disableFTCookies:r,includeUsNat:c}))}),zt(i,p.baseEndpoint)}function oe(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:i,onClick:r}=o[e],c=document.querySelectorAll(`a[href*="${a}"]`);for(const p of c)(n||t)&&(s.has(p)&&p.removeEventListener("click",s.get(p)),p.innerText=i,p.addEventListener("click",r),s.set(p,r))}function se({_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:c=>{var p;c.preventDefault(),(p=window._sp_.usnat)==null||p.loadPrivacyManagerModal(o)}},ccpa:{text:"Do Not Sell My Personal Information",onClick:c=>{var p;c.preventDefault(),(p=window._sp_.ccpa)==null||p.loadPrivacyManagerModal(n)}},gdpr:{text:"Manage Cookies",onClick:c=>{var p;c.preventDefault(),(p=window._sp_.gdpr)==null||p.loadPrivacyManagerModal(e)}}},i=new Map,r=function(c,p,f,d){R(!1,c,d.applies,a,i,s),d.applies&&window._sp_queue.push(()=>{var _,l;(l=(_=window._sp_).removeEventListener)==null||l.call(_,"onConsentReady",r)})};R(!0,"gdpr",!1,a,i,s),window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var c,p;(p=(c=window._sp_).addEventListener)==null||p.call(c,"onConsentReady",r)})}function ae(t=window,e){var i,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":(i=t._sp_.usnat)==null||i.loadPrivacyManagerModal(s);break;case"gdpr":(r=t._sp_.gdpr)==null||r.loadPrivacyManagerModal(o);break}}function ie(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",()=>ae(window,t))})}function ce(t){return t._clientOptions??{}}const re={"ft.com":ce};function pe(t){return new Promise((e,n)=>{const{rootDomain:o}=t._clientOptions||{};if(!o)return e({});const s=re[o];if(!s||typeof s!="function")return e({...t._clientOptions});const a=()=>{try{e(s(t))}catch(i){n(i)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a):a()})}const ue={...{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}},de=Object.freeze(Object.defineProperty({__proto__:null,INV_GLOBAL_BONDS_SUMMIT:ue},Symbol.toStringTag,{value:"Module"}));function F(t,e){if(!e||Number.isFinite(parseFloat(e)))return!1;const n=t===e,o=t.endsWith(`.${e}`);return n||o}function le(t){if(!t)throw new Error("Invalid hostname provided");const e=Object.values(yt),o=Object.values(de).find(a=>{var r;const i=(r=a==null?void 0:a._clientOptions)==null?void 0:r.subDomain;return i&&F(t,i)});if(o)return o;let s=e.find(a=>{var r;if(a.propertyHref)return!1;const i=(r=a._clientOptions)==null?void 0:r.rootDomain;return i&&F(t,i)});return s??(s=P),s}const me=new URL(window.location.href).hostname,m=le(me);(async()=>{var t,e;try{const n=await pe(m);ne({propertyConfig:m,...n}),(t=m==null?void 0:m._clientOptions)!=null&&t.privacyManagerId&&((e=m==null?void 0:m._clientOptions)!=null&&e.manageCookiesLinkOverride)&&(se(m),ie(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),f=s.purposes.every(l=>a[l]===!0);return t==="cookies"?f&&_&&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 Rt(){const t=await M(),e={};for(const n of w)e[n]=Lt(n,t);return e}async function Ft(t){const n={gdpr:Rt,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 R(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"&&R("gdpr")}),window.__gpp&&window.__gpp("addEventListener",({pingData:t})=>{t.cmpDisplayStatus==="visible"&&R("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 Ft(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),f=xt(t),l=jt(f,t),ye=Pt(c,f,d,t);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.18.1";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,f;(f=(d=window._sp_)==null?void 0:d.addEventListener)==null||f.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 F(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){F(!1,i,d.applies,a,c,s),d.applies&&window._sp_queue.push(()=>{var f,l;(l=(f=window._sp_).removeEventListener)==null||l.call(f,"onConsentReady",r)})};F(!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,m=ge(Ie);(async()=>{var t,e;try{const n=await me(m);ce({propertyConfig:m,...n}),(t=m==null?void 0:m._clientOptions)!=null&&t.privacyManagerId&&((e=m==null?void 0:m._clientOptions)!=null&&e.manageCookiesLinkOverride)&&(re(m),ue(m._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;AAa/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,mBAkErC"}
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,mBAuFrC"}
@@ -0,0 +1,2 @@
1
+ export declare function dispatchMetricsEvent(payload?: {}): void;
2
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/metrics/events.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,OAAO,KAAK,QAQhD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cmp-client",
3
- "version": "6.17.0",
3
+ "version": "6.18.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [
@@ -1,4 +1,4 @@
1
- import { GPP, TCData } from "./types";
1
+ import { GPP, TCData, SPConfig } from "./types";
2
2
 
3
3
  declare global {
4
4
  interface Window {