@financial-times/cmp-client 5.9.1 → 6.0.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 +47 -12
- package/dist/index.js +47 -12
- package/dist/scripts/cmp-static.js +2 -2
- package/dist/src/html/cmp-manage-cookies-link.d.ts +1 -5
- package/dist/src/html/cmp-manage-cookies-link.d.ts.map +1 -1
- package/dist/src/lib/constants.d.ts +2 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/properties.d.ts +40 -0
- package/dist/src/lib/properties.d.ts.map +1 -1
- package/dist/src/tracking/state.d.ts.map +1 -1
- package/dist/src/utils/url.d.ts +36 -0
- package/dist/src/utils/url.d.ts.map +1 -1
- package/package.json +6 -7
package/dist/index.cjs
CHANGED
|
@@ -175,6 +175,42 @@ const SP_FT_LOCATIONS = {
|
|
|
175
175
|
consentProxyHost: "https://consent.ftlocations.com"
|
|
176
176
|
}
|
|
177
177
|
};
|
|
178
|
+
const SP_FTA_SERVICE_AWARDS = {
|
|
179
|
+
...defaults,
|
|
180
|
+
accountId: 1906,
|
|
181
|
+
baseEndpoint: "https://consent-manager.financialadviserserviceawards.com",
|
|
182
|
+
propertyId: 38297,
|
|
183
|
+
_clientOptions: {
|
|
184
|
+
rootDomain: "financialadviserserviceawards.com"
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const SP_CELEBRATION_OF_INVESTMENT = {
|
|
188
|
+
...defaults,
|
|
189
|
+
accountId: 1906,
|
|
190
|
+
baseEndpoint: "https://consent-manager.celebrationofinvestment.co.uk",
|
|
191
|
+
propertyId: 38296,
|
|
192
|
+
_clientOptions: {
|
|
193
|
+
rootDomain: "celebrationofinvestment.co.uk"
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
const SP_GLOBAL_PRIVATE_BANKING_AWARDS = {
|
|
197
|
+
...defaults,
|
|
198
|
+
accountId: 1906,
|
|
199
|
+
baseEndpoint: "https://consent-manager.globalprivatebankingawards.com",
|
|
200
|
+
propertyId: 38295,
|
|
201
|
+
_clientOptions: {
|
|
202
|
+
rootDomain: "globalprivatebankingawards.com"
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const TNW = {
|
|
206
|
+
...defaults,
|
|
207
|
+
accountId: 1906,
|
|
208
|
+
baseEndpoint: "https://consent-manager.thenextweb.com",
|
|
209
|
+
propertyId: 37672,
|
|
210
|
+
_clientOptions: {
|
|
211
|
+
rootDomain: "thenextweb.com"
|
|
212
|
+
}
|
|
213
|
+
};
|
|
178
214
|
const properties = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
179
215
|
__proto__: null,
|
|
180
216
|
FT_DOTCOM_PROD,
|
|
@@ -182,14 +218,18 @@ const properties = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
|
|
|
182
218
|
MM_IGNITES_ASIA,
|
|
183
219
|
MM_IGNITES_EUROPE,
|
|
184
220
|
SP_BANKING_RR,
|
|
221
|
+
SP_CELEBRATION_OF_INVESTMENT,
|
|
185
222
|
SP_FDI_INTELLIGENCE,
|
|
223
|
+
SP_FTA_SERVICE_AWARDS,
|
|
186
224
|
SP_FT_ADVISER,
|
|
187
225
|
SP_FT_LOCATIONS,
|
|
226
|
+
SP_GLOBAL_PRIVATE_BANKING_AWARDS,
|
|
188
227
|
SP_INVESTORS_CHRONICLE,
|
|
189
228
|
SP_MANDATE_WIRE,
|
|
190
229
|
SP_PWMNET,
|
|
191
230
|
SP_SUSTAINABLE_VIEWS,
|
|
192
|
-
SP_THE_BANKER
|
|
231
|
+
SP_THE_BANKER,
|
|
232
|
+
TNW
|
|
193
233
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
194
234
|
function findAndUpdateLinks(fallback, regionId, regionApplies, regionConfig, linkMap, manageCookiesLinkOverride) {
|
|
195
235
|
const { text, onClick } = regionConfig[regionId];
|
|
@@ -586,8 +626,7 @@ function getConsentCookieValue() {
|
|
|
586
626
|
document.cookie.split("; ").map((cookie) => cookie.split("="))
|
|
587
627
|
);
|
|
588
628
|
const encodedValue = cookies[CONSENT_COOKIE_NAME];
|
|
589
|
-
if (!encodedValue)
|
|
590
|
-
return {};
|
|
629
|
+
if (!encodedValue) return {};
|
|
591
630
|
const decodedValue = decodeURIComponent(encodedValue);
|
|
592
631
|
return Object.fromEntries(
|
|
593
632
|
decodedValue.split(",").map((consent) => {
|
|
@@ -757,8 +796,7 @@ function extractRelevantFlags(flags) {
|
|
|
757
796
|
return output;
|
|
758
797
|
}
|
|
759
798
|
function track(payload) {
|
|
760
|
-
if (!payload)
|
|
761
|
-
return;
|
|
799
|
+
if (!payload) return;
|
|
762
800
|
const rootEl = document.body;
|
|
763
801
|
const event = new CustomEvent("oTracking.event", {
|
|
764
802
|
bubbles: true,
|
|
@@ -850,24 +888,21 @@ function setupPmTracking(trackingProps, cmpBaseEndpoint) {
|
|
|
850
888
|
window.addEventListener(
|
|
851
889
|
"message",
|
|
852
890
|
function(event) {
|
|
853
|
-
if (event.origin !== cmpBaseEndpoint)
|
|
854
|
-
return;
|
|
891
|
+
if (event.origin !== cmpBaseEndpoint) return;
|
|
855
892
|
const actionTypeMap = {
|
|
856
893
|
1: "save_and_close",
|
|
857
894
|
11: "accept_all",
|
|
858
895
|
13: "reject_all"
|
|
859
896
|
};
|
|
860
897
|
const { data: { fromPM, actionType, messageId = "0" } = {} } = event;
|
|
861
|
-
if (!fromPM)
|
|
862
|
-
return;
|
|
898
|
+
if (!fromPM) return;
|
|
863
899
|
if (+messageId) {
|
|
864
900
|
setState({
|
|
865
901
|
activeComponent: PRIVACY_MANAGER,
|
|
866
902
|
privacyManagerId: +messageId
|
|
867
903
|
});
|
|
868
904
|
}
|
|
869
|
-
if (!actionType || !actionTypeMap[actionType])
|
|
870
|
-
return;
|
|
905
|
+
if (!actionType || !actionTypeMap[actionType]) return;
|
|
871
906
|
dispatchComponentEvent({
|
|
872
907
|
trackingProps,
|
|
873
908
|
action: "click",
|
|
@@ -877,7 +912,7 @@ function setupPmTracking(trackingProps, cmpBaseEndpoint) {
|
|
|
877
912
|
false
|
|
878
913
|
);
|
|
879
914
|
}
|
|
880
|
-
const version = "
|
|
915
|
+
const version = "6.0.0";
|
|
881
916
|
async function initSourcepointCmp(options) {
|
|
882
917
|
const {
|
|
883
918
|
useFTSession = true,
|
package/dist/index.js
CHANGED
|
@@ -173,6 +173,42 @@ const SP_FT_LOCATIONS = {
|
|
|
173
173
|
consentProxyHost: "https://consent.ftlocations.com"
|
|
174
174
|
}
|
|
175
175
|
};
|
|
176
|
+
const SP_FTA_SERVICE_AWARDS = {
|
|
177
|
+
...defaults,
|
|
178
|
+
accountId: 1906,
|
|
179
|
+
baseEndpoint: "https://consent-manager.financialadviserserviceawards.com",
|
|
180
|
+
propertyId: 38297,
|
|
181
|
+
_clientOptions: {
|
|
182
|
+
rootDomain: "financialadviserserviceawards.com"
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const SP_CELEBRATION_OF_INVESTMENT = {
|
|
186
|
+
...defaults,
|
|
187
|
+
accountId: 1906,
|
|
188
|
+
baseEndpoint: "https://consent-manager.celebrationofinvestment.co.uk",
|
|
189
|
+
propertyId: 38296,
|
|
190
|
+
_clientOptions: {
|
|
191
|
+
rootDomain: "celebrationofinvestment.co.uk"
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const SP_GLOBAL_PRIVATE_BANKING_AWARDS = {
|
|
195
|
+
...defaults,
|
|
196
|
+
accountId: 1906,
|
|
197
|
+
baseEndpoint: "https://consent-manager.globalprivatebankingawards.com",
|
|
198
|
+
propertyId: 38295,
|
|
199
|
+
_clientOptions: {
|
|
200
|
+
rootDomain: "globalprivatebankingawards.com"
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
const TNW = {
|
|
204
|
+
...defaults,
|
|
205
|
+
accountId: 1906,
|
|
206
|
+
baseEndpoint: "https://consent-manager.thenextweb.com",
|
|
207
|
+
propertyId: 37672,
|
|
208
|
+
_clientOptions: {
|
|
209
|
+
rootDomain: "thenextweb.com"
|
|
210
|
+
}
|
|
211
|
+
};
|
|
176
212
|
const properties = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
177
213
|
__proto__: null,
|
|
178
214
|
FT_DOTCOM_PROD,
|
|
@@ -180,14 +216,18 @@ const properties = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
|
|
|
180
216
|
MM_IGNITES_ASIA,
|
|
181
217
|
MM_IGNITES_EUROPE,
|
|
182
218
|
SP_BANKING_RR,
|
|
219
|
+
SP_CELEBRATION_OF_INVESTMENT,
|
|
183
220
|
SP_FDI_INTELLIGENCE,
|
|
221
|
+
SP_FTA_SERVICE_AWARDS,
|
|
184
222
|
SP_FT_ADVISER,
|
|
185
223
|
SP_FT_LOCATIONS,
|
|
224
|
+
SP_GLOBAL_PRIVATE_BANKING_AWARDS,
|
|
186
225
|
SP_INVESTORS_CHRONICLE,
|
|
187
226
|
SP_MANDATE_WIRE,
|
|
188
227
|
SP_PWMNET,
|
|
189
228
|
SP_SUSTAINABLE_VIEWS,
|
|
190
|
-
SP_THE_BANKER
|
|
229
|
+
SP_THE_BANKER,
|
|
230
|
+
TNW
|
|
191
231
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
192
232
|
function findAndUpdateLinks(fallback, regionId, regionApplies, regionConfig, linkMap, manageCookiesLinkOverride) {
|
|
193
233
|
const { text, onClick } = regionConfig[regionId];
|
|
@@ -584,8 +624,7 @@ function getConsentCookieValue() {
|
|
|
584
624
|
document.cookie.split("; ").map((cookie) => cookie.split("="))
|
|
585
625
|
);
|
|
586
626
|
const encodedValue = cookies[CONSENT_COOKIE_NAME];
|
|
587
|
-
if (!encodedValue)
|
|
588
|
-
return {};
|
|
627
|
+
if (!encodedValue) return {};
|
|
589
628
|
const decodedValue = decodeURIComponent(encodedValue);
|
|
590
629
|
return Object.fromEntries(
|
|
591
630
|
decodedValue.split(",").map((consent) => {
|
|
@@ -755,8 +794,7 @@ function extractRelevantFlags(flags) {
|
|
|
755
794
|
return output;
|
|
756
795
|
}
|
|
757
796
|
function track(payload) {
|
|
758
|
-
if (!payload)
|
|
759
|
-
return;
|
|
797
|
+
if (!payload) return;
|
|
760
798
|
const rootEl = document.body;
|
|
761
799
|
const event = new CustomEvent("oTracking.event", {
|
|
762
800
|
bubbles: true,
|
|
@@ -848,24 +886,21 @@ function setupPmTracking(trackingProps, cmpBaseEndpoint) {
|
|
|
848
886
|
window.addEventListener(
|
|
849
887
|
"message",
|
|
850
888
|
function(event) {
|
|
851
|
-
if (event.origin !== cmpBaseEndpoint)
|
|
852
|
-
return;
|
|
889
|
+
if (event.origin !== cmpBaseEndpoint) return;
|
|
853
890
|
const actionTypeMap = {
|
|
854
891
|
1: "save_and_close",
|
|
855
892
|
11: "accept_all",
|
|
856
893
|
13: "reject_all"
|
|
857
894
|
};
|
|
858
895
|
const { data: { fromPM, actionType, messageId = "0" } = {} } = event;
|
|
859
|
-
if (!fromPM)
|
|
860
|
-
return;
|
|
896
|
+
if (!fromPM) return;
|
|
861
897
|
if (+messageId) {
|
|
862
898
|
setState({
|
|
863
899
|
activeComponent: PRIVACY_MANAGER,
|
|
864
900
|
privacyManagerId: +messageId
|
|
865
901
|
});
|
|
866
902
|
}
|
|
867
|
-
if (!actionType || !actionTypeMap[actionType])
|
|
868
|
-
return;
|
|
903
|
+
if (!actionType || !actionTypeMap[actionType]) return;
|
|
869
904
|
dispatchComponentEvent({
|
|
870
905
|
trackingProps,
|
|
871
906
|
action: "click",
|
|
@@ -875,7 +910,7 @@ function setupPmTracking(trackingProps, cmpBaseEndpoint) {
|
|
|
875
910
|
false
|
|
876
911
|
);
|
|
877
912
|
}
|
|
878
|
-
const version = "
|
|
913
|
+
const version = "6.0.0";
|
|
879
914
|
async function initSourcepointCmp(options) {
|
|
880
915
|
const {
|
|
881
916
|
useFTSession = true,
|
|
@@ -1,2 +1,2 @@
|
|
|
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 _={};const S=(t,e)=>{if(typeof t=="object"){_=t;return}if(typeof t=="string"&&typeof e=="string"){_[t]=e;return}if(typeof t=="string"&&typeof e>"u")return _[t]||null;if(typeof t>"u"&&typeof e>"u")return _;throw new Error("Invalid arguments")};S.clear=()=>{_={}};const y={},x=()=>{const[,t]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return t},j=()=>{const t=S("uuid");if(t)return Promise.resolve({uuid:t});const e=x();return e?(y.uuid||(y.uuid=V(`/sessions/s/${e}`).then(({uuid:n}={})=>(delete y.uuid,n&&S("uuid",n),{uuid:n}))),y.uuid):Promise.resolve({uuid:void 0})},T="sourcepoint-cmp",H="FTPINK",q="FTConsent",G="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk"
|
|
2
|
-
`};function at(t){const e=document.createDocumentFragment();return e.appendChild(N("tcf",A.tcfStub)),t.includeUsNat&&e.appendChild(N("gpp",A.gppStub)),e.appendChild(st(it.cmpFrames)),e}function rt(t,e){const{userId:n,includeUsNat:o}=e;return n&&(t.authId=n),o&&(t.usnat=t.usnat||{}),t}function ct(t,e){const{_clientOptions:n,...o}=t,s=rt(o,e);window._sp_={config:s},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(at(e))}function pt(t,e,n,{formOfWordsId:o,cookieDomain:s}){const r=Object.keys(t).reduce((c,a)=>(c[a]={onsite:{status:t[a],lbi:!1,source:T,fow:o}},c),{});return e?{setConsentCookie:!0,formOfWordsId:o,consentSource:T,cookieDomain:s,skipDuplicateUpdates:!n,data:r}:{data:r,cookieDomain:s}}const m={CALIFORNIA:"uscav1",US_NATIONAL:"usnat"},D={[m.CALIFORNIA]:{excludedCategories:{personalisedMarketing:!0}},[m.US_NATIONAL]:{excludedCategories:{personalisedMarketing:!0}}};function ut(t){const{applicableSections:e,supportedAPIs:n}=t,o=e[0];if(o===-1||typeof o>"u")return;const s=n.find(r=>r.startsWith(`${o}:`));return s==null?void 0:s.split(":")[1]}function dt(t){const{SaleOptOut:e,SharingOptOut:n,Gpc:o}=t,{excludedCategories:s}=D[m.CALIFORNIA],i=e!==1&&n!==1&&!o,r={};for(const c of v){if(c in s){r[c]=!0;continue}r[c]=i}return r}function lt(t){const{SaleOptOut:e,SharingOptOut:n,TargetedAdvertisingOptOut:o}=t,{excludedCategories:s}=D[m.US_NATIONAL],i=JSON.parse(localStorage.getItem("ft_sp_marketing_optout")||"{}"),r=e!==1&&n!==1&&o!==1,c={};for(const a of v){if(a in s){c[a]=!0;continue}c[a]=r}if(i.usnat)for(const a of v)c[a]=!1;return c}const ft={[m.CALIFORNIA]:dt,[m.US_NATIONAL]:lt};async function M(){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 gt(){const t=await M(),{parsedSections:e}=t,n=ut(t);if(!n||!e[n])throw new Error("GPP parser was called without an applicable section");const o=e[n],s=ft[n];if(!s||typeof s!="function")throw new Error(`No parser found for applicable GPP section: ${n}`);return s(o)}function mt(t,{purpose:e,vendor:n,specialFeatureOptins:o}){const s=k[t],i=s.purposes.every(a=>(e==null?void 0:e.consents[a])||(e==null?void 0:e.legitimateInterests[a])),r=s.iabVendors.every(a=>(n==null?void 0:n.consents[a])||(n==null?void 0:n.legitimateInterests[a])),c=s.specialFeatures.every(a=>(o==null?void 0:o[a])===!0);return i&&r&&c}async function L(){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 _t(){const t=await L(),e={};for(const n of v)e[n]=mt(n,t);return e}async function yt(t){const n={gdpr:_t,usnat:gt}[t];if(!n)throw new Error("Unable to update user consent. Unsupported consent legislation.");return n()}function vt(){const e=Object.fromEntries(document.cookie.split("; ").map(o=>o.split("=")))[q];if(!e)return{};const n=decodeURIComponent(e);return Object.fromEntries(n.split(",").map(o=>{const[s,i]=o.split(":");return[s,i==="on"]}))}function wt(t,e){return Object.keys(t).some(o=>{const s=`${o.toLowerCase()}Onsite`;return t[o]!==e[s]})}function It({userId:t,useConsentStore:e}){return!!t&&e===!0}function Ct(t,e){return t?`${e.consentProxyHost}/__consent/consent-record/${H}/${e.userId}?updateFtConsentCookie=true`:`${e.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${e.cookieDomain}`}const F={gdpr:!1,usnat:!1},b=Object.assign({},F);function R(t){b[t]=!0}function St(t){return b[t]}function bt(){Object.assign(b,F)}async function ht(t){return St(t)?t==="gdpr"?(await L()).eventStatus==="useractioncomplete":t==="usnat"?(await M()).cmpDisplayStatus==="hidden":!1:!1}function Ot(){window.__tcfapi&&window.__tcfapi("addEventListener",2,t=>{t.eventStatus==="cmpuishown"&&R("gdpr")}),window.__gpp&&window.__gpp("addEventListener",({pingData:t})=>{t.cmpDisplayStatus==="visible"&&R("usnat")})}async function Et(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)}}const Tt=()=>{document.dispatchEvent(new CustomEvent("onCmpConsentReady",{bubbles:!0}))};function kt(t){return async function(n,o,s,i){if(Tt(),t.disableFTCookies||!t.includeUsNat&&n==="usnat")return;const r=i.applies?n:"gdpr";if(r!==n||!s)return;let c;try{c=await yt(r)}catch(C){console.error(C)}if(!c||!wt(c,vt()))return;const p=await ht(r),f=It(t),u=Ct(f,t),g=pt(c,f,p,t);await Et(u,g),p&&bt(),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const h="cookie-message",Pt="manage-cookies";let O=Object.freeze({activeComponent:h,messageId:0,privacyManagerId:0});function Nt(t){return typeof t=="object"&&t!==null&&t.constructor===Object&&Object.prototype.toString.call(t)==="[object Object]"}const At=()=>({...O}),E=t=>{if(!Nt(t)){console.error("Invalid state changes");return}O={...O,...t}},Dt=["adsDisableInternalCMP","pwm.cmp","messageSlotBottom"];function Mt(t,e){const n=Lt(t.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var o,s;for(const[i,r]of Object.entries(Rt))(s=(o=window._sp_).addEventListener)==null||s.call(o,i,r({...t,flags:n}))}),Ut({...t,flags:n},e)}function Lt(t){const e={};return typeof t=="object"&&Dt.forEach(n=>{Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}),e}function Ft(t){if(!t)return;const e=document.body,n=new CustomEvent("oTracking.event",{bubbles:!0,cancelable:!0,detail:t.detail});e.dispatchEvent(n)}function I({trackingProps:t,action:e,triggerAction:n}){let o;const s=At(),{product:i,app:r,flags:c}=t;s.activeComponent===h?o=s.messageId:o=s.privacyManagerId;const a={detail:{component:{id:o,name:s.activeComponent,type:"overlay",subtype:"cmp"},category:"component",action:e,...n&&{trigger_action:n},...i&&{product:i},...r&&{app:r},custom:[{cookie_toggle_flag:c}],url:window.document.location.href||null}};Ft(a)}const Rt={onMessageChoiceSelect:t=>(e,n,o)=>{const i={11:"accept_all",12:"manage_cookies",13:"reject_all"}[o];i&&I({trackingProps:t,action:"click",triggerAction:i})},onMessageReady:t=>()=>{I({trackingProps:t,action:"view"})},onMessageReceiveData:()=>(t,e)=>{const{messageId:n}=e;n&&E({messageId:n})},onError:t=>(e,n)=>{I({trackingProps:t,action:"error",triggerAction:n})},onPMCancel:()=>()=>{E({activeComponent:h})}};function Ut(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:i,messageId:r="0"}={}}=n;s&&(+r&&E({activeComponent:Pt,privacyManagerId:+r}),!(!i||!o[i])&&I({trackingProps:t,action:"click",triggerAction:o[i]}))},!1)}const Vt="5.9.1";async function xt(t){const{useFTSession:e=!0,consentProxyHost:n=W,cookieDomain:o=$,formOfWordsId:s=G,useConsentStore:i=!0,trackingContext:r={},disableFTCookies:c=!1,includeUsNat:a=!1}=t||{};let{propertyConfig:p=w,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=Vt,!f&&e)try{const u=await j();f=u==null?void 0:u.uuid}catch(u){console.error(u)}p=jt(p),ct(p,{userId:f,includeUsNat:a}),Ot(),window._sp_queue.push(()=>{var u,g;(g=(u=window._sp_)==null?void 0:u.addEventListener)==null||g.call(u,"onConsentReady",kt({userId:f,consentProxyHost:n,cookieDomain:o,formOfWordsId:s,useConsentStore:i,disableFTCookies:c,includeUsNat:a}))}),Mt(r,p.baseEndpoint)}function jt(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 U(t,e,n,o,s,i){const{text:r,onClick:c}=o[e],a=document.querySelectorAll(`a[href*="${i}"]`);for(const p of a)(n||t)&&(s.has(p)&&p.removeEventListener("click",s.get(p)),p.innerText=r,p.addEventListener("click",c),s.set(p,c))}function Ht({_clientOptions:t}=w){const{privacyManagerId:e,ccpaPrivacyManagerId:n,usnatPrivacyManagerId:o,manageCookiesLinkOverride:s}=t??w._clientOptions,i={usnat:{text:"Do Not Sell My Personal Information",onClick:a=>{var p;a.preventDefault(),(p=window._sp_.usnat)==null||p.loadPrivacyManagerModal(o)}},ccpa:{text:"Do Not Sell My Personal Information",onClick:a=>{var p;a.preventDefault(),(p=window._sp_.ccpa)==null||p.loadPrivacyManagerModal(n)}},gdpr:{text:"Manage Cookies",onClick:a=>{var p;a.preventDefault(),(p=window._sp_.gdpr)==null||p.loadPrivacyManagerModal(e)}}},r=new Map,c=function(a,p,f,u){U(!1,a,u.applies,i,r,s),u.applies&&window._sp_queue.push(()=>{var g,C;(C=(g=window._sp_).removeEventListener)==null||C.call(g,"onConsentReady",c)})};U(!0,"gdpr",!1,i,r,s),window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var a,p;(p=(a=window._sp_).addEventListener)==null||p.call(a,"onConsentReady",c)})}function qt(t){return t._clientOptions??{}}const Gt={"ft.com":qt};function $t(t){return new Promise((e,n)=>{const{rootDomain:o}=t._clientOptions||{};if(!o)return e({});const s=Gt[o];if(!s||typeof s!="function")return e({...t._clientOptions});const i=()=>{try{e(s(t))}catch(r){n(r)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i):i()})}function Wt(t,e){if(!e||Number.isFinite(parseFloat(e))||!t.endsWith(e))return!1;const n=t.indexOf(e),o=t[n-1];return o==="."||o===void 0}function Kt(t){if(!t)throw new Error("Invalid hostname provided");let n=Object.values(ot).find(o=>{var i;if(o.propertyHref)return!1;const s=(i=o._clientOptions)==null?void 0:i.rootDomain;return s&&Wt(t,s)});return n??(n=P),n}const Jt=new URL(window.location.href).hostname,l=Kt(Jt);(async()=>{var t,e;try{const n=await $t(l);xt({propertyConfig:l,...n}),(t=l==null?void 0:l._clientOptions)!=null&&t.privacyManagerId&&((e=l==null?void 0:l._clientOptions)!=null&&e.manageCookiesLinkOverride)&&Ht(l)}catch(n){console.error("Error: CMP package configure + initialise Sourcepoint failed.",n)}})()})();
|
|
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 _={};const S=(t,e)=>{if(typeof t=="object"){_=t;return}if(typeof t=="string"&&typeof e=="string"){_[t]=e;return}if(typeof t=="string"&&typeof e>"u")return _[t]||null;if(typeof t>"u"&&typeof e>"u")return _;throw new Error("Invalid arguments")};S.clear=()=>{_={}};const y={},x=()=>{const[,t]=/FTSession_s=([^;]+)/.exec(document.cookie)||[];return t},j=()=>{const t=S("uuid");if(t)return Promise.resolve({uuid:t});const e=x();return e?(y.uuid||(y.uuid=V(`/sessions/s/${e}`).then(({uuid:n}={})=>(delete y.uuid,n&&S("uuid",n),{uuid:n}))),y.uuid):Promise.resolve({uuid:void 0})},T="sourcepoint-cmp",H="FTPINK",q="FTConsent",G="sourcepointCmp/VngD.XycZut.595cp9fWdp5XYP9vlFvk",W=".ft.com",$="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],iabVendors:[],customVendors:[],specialFeatures:[]},personalisedMarketing:{purposes:[2,7,8,9,10],iabVendors:[],customVendors:[],specialFeatures:[]}},v=Object.keys(k),u={joinHref:!0,gdpr:{}},N={...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}},w={...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}},K={...u,accountId:1906,baseEndpoint:"https://consent-manager.pwmnet.com",propertyId:33414,_clientOptions:{rootDomain:"pwmnet.com"}},B={...u,accountId:1906,baseEndpoint:"https://consent-manager.fdiintelligence.com",propertyId:34061,_clientOptions:{rootDomain:"fdiintelligence.com"}},J={...u,accountId:1906,baseEndpoint:"https://consent-manager.thebanker.com",propertyId:34060,_clientOptions:{rootDomain:"thebanker.com"}},X={...u,accountId:1906,baseEndpoint:"https://consent-manager.bankingriskandregulation.com",propertyId:34059,_clientOptions:{rootDomain:"bankingriskandregulation.com"}},Y={...u,accountId:1906,baseEndpoint:"https://consent-manager.sustainableviews.com",propertyId:34058,_clientOptions:{rootDomain:"sustainableviews.com"}},z={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftadviser.com",propertyId:33416,_clientOptions:{rootDomain:"ftadviser.com"}},Z={...u,accountId:1906,baseEndpoint:"https://consent-manager.investorschronicle.co.uk",propertyId:33415,_clientOptions:{rootDomain:"investorschronicle.co.uk"}},Q={...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"}},nt={...u,accountId:1906,baseEndpoint:"https://consent-manager.ftlocations.com",propertyId:37407,_clientOptions:{rootDomain:"ftlocations.com",cookieDomain:".ftlocations.com",consentProxyHost:"https://consent.ftlocations.com"}},ot={...u,accountId:1906,baseEndpoint:"https://consent-manager.financialadviserserviceawards.com",propertyId:38297,_clientOptions:{rootDomain:"financialadviserserviceawards.com"}},st={...u,accountId:1906,baseEndpoint:"https://consent-manager.celebrationofinvestment.co.uk",propertyId:38296,_clientOptions:{rootDomain:"celebrationofinvestment.co.uk"}},at={...u,accountId:1906,baseEndpoint:"https://consent-manager.globalprivatebankingawards.com",propertyId:38295,_clientOptions:{rootDomain:"globalprivatebankingawards.com"}},it={...u,accountId:1906,baseEndpoint:"https://consent-manager.thenextweb.com",propertyId:37672,_clientOptions:{rootDomain:"thenextweb.com"}},rt=Object.freeze(Object.defineProperty({__proto__:null,FT_DOTCOM_PROD:w,FT_DOTCOM_TEST:N,MM_IGNITES_ASIA:Q,MM_IGNITES_EUROPE:tt,SP_BANKING_RR:X,SP_CELEBRATION_OF_INVESTMENT:st,SP_FDI_INTELLIGENCE:B,SP_FTA_SERVICE_AWARDS:ot,SP_FT_ADVISER:z,SP_FT_LOCATIONS:nt,SP_GLOBAL_PRIVATE_BANKING_AWARDS:at,SP_INVESTORS_CHRONICLE:Z,SP_MANDATE_WIRE:et,SP_PWMNET:K,SP_SUSTAINABLE_VIEWS:Y,SP_THE_BANKER:J,TNW:it},Symbol.toStringTag,{value:"Module"}));function P(t,e){const n=document.createElement("script");return n.dataset.cmpScript=t,n.innerHTML=e,n}function ct(t){const e=document.createElement("script");return e.src=t,e}const pt={cmpFrames:"https://consent-manager.ft.com/unified/wrapperMessagingWithoutDetection.js"},A={tcfStub:'"use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",r.title = "__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;"setGdprApplies"===n[0]?n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}();',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:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],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:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],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:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],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"));
|
|
2
|
+
`};function ut(t){const e=document.createDocumentFragment();return e.appendChild(P("tcf",A.tcfStub)),t.includeUsNat&&e.appendChild(P("gpp",A.gppStub)),e.appendChild(ct(pt.cmpFrames)),e}function dt(t,e){const{userId:n,includeUsNat:o}=e;return n&&(t.authId=n),o&&(t.usnat=t.usnat||{}),t}function lt(t,e){const{_clientOptions:n,...o}=t,s=dt(o,e);window._sp_={config:s},window._sp_queue??(window._sp_queue=[]),document.head.appendChild(ut(e))}function ft(t,e,n,{formOfWordsId:o,cookieDomain:s}){const r=Object.keys(t).reduce((c,i)=>(c[i]={onsite:{status:t[i],lbi:!1,source:T,fow:o}},c),{});return e?{setConsentCookie:!0,formOfWordsId:o,consentSource:T,cookieDomain:s,skipDuplicateUpdates:!n,data:r}:{data:r,cookieDomain:s}}const m={CALIFORNIA:"uscav1",US_NATIONAL:"usnat"},D={[m.CALIFORNIA]:{excludedCategories:{personalisedMarketing:!0}},[m.US_NATIONAL]:{excludedCategories:{personalisedMarketing:!0}}};function gt(t){const{applicableSections:e,supportedAPIs:n}=t,o=e[0];if(o===-1||typeof o>"u")return;const s=n.find(r=>r.startsWith(`${o}:`));return s==null?void 0:s.split(":")[1]}function mt(t){const{SaleOptOut:e,SharingOptOut:n,Gpc:o}=t,{excludedCategories:s}=D[m.CALIFORNIA],a=e!==1&&n!==1&&!o,r={};for(const c of v){if(c in s){r[c]=!0;continue}r[c]=a}return r}function _t(t){const{SaleOptOut:e,SharingOptOut:n,TargetedAdvertisingOptOut:o}=t,{excludedCategories:s}=D[m.US_NATIONAL],a=JSON.parse(localStorage.getItem("ft_sp_marketing_optout")||"{}"),r=e!==1&&n!==1&&o!==1,c={};for(const i of v){if(i in s){c[i]=!0;continue}c[i]=r}if(a.usnat)for(const i of v)c[i]=!1;return c}const yt={[m.CALIFORNIA]:mt,[m.US_NATIONAL]:_t};async function M(){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 vt(){const t=await M(),{parsedSections:e}=t,n=gt(t);if(!n||!e[n])throw new Error("GPP parser was called without an applicable section");const o=e[n],s=yt[n];if(!s||typeof s!="function")throw new Error(`No parser found for applicable GPP section: ${n}`);return s(o)}function wt(t,{purpose:e,vendor:n,specialFeatureOptins:o}){const s=k[t],a=s.purposes.every(i=>(e==null?void 0:e.consents[i])||(e==null?void 0:e.legitimateInterests[i])),r=s.iabVendors.every(i=>(n==null?void 0:n.consents[i])||(n==null?void 0:n.legitimateInterests[i])),c=s.specialFeatures.every(i=>(o==null?void 0:o[i])===!0);return a&&r&&c}async function L(){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 It(){const t=await L(),e={};for(const n of v)e[n]=wt(n,t);return e}async function bt(t){const n={gdpr:It,usnat:vt}[t];if(!n)throw new Error("Unable to update user consent. Unsupported consent legislation.");return n()}function St(){const e=Object.fromEntries(document.cookie.split("; ").map(o=>o.split("=")))[q];if(!e)return{};const n=decodeURIComponent(e);return Object.fromEntries(n.split(",").map(o=>{const[s,a]=o.split(":");return[s,a==="on"]}))}function Ct(t,e){return Object.keys(t).some(o=>{const s=`${o.toLowerCase()}Onsite`;return t[o]!==e[s]})}function ht({userId:t,useConsentStore:e}){return!!t&&e===!0}function Ot(t,e){return t?`${e.consentProxyHost}/__consent/consent-record/${H}/${e.userId}?updateFtConsentCookie=true`:`${e.consentProxyHost}/__consent/consent-record-cookie?cookieDomain=${e.cookieDomain}`}const F={gdpr:!1,usnat:!1},C=Object.assign({},F);function R(t){C[t]=!0}function Et(t){return C[t]}function Tt(){Object.assign(C,F)}async function kt(t){return Et(t)?t==="gdpr"?(await L()).eventStatus==="useractioncomplete":t==="usnat"?(await M()).cmpDisplayStatus==="hidden":!1:!1}function Nt(){window.__tcfapi&&window.__tcfapi("addEventListener",2,t=>{t.eventStatus==="cmpuishown"&&R("gdpr")}),window.__gpp&&window.__gpp("addEventListener",({pingData:t})=>{t.cmpDisplayStatus==="visible"&&R("usnat")})}async function Pt(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)}}const At=()=>{document.dispatchEvent(new CustomEvent("onCmpConsentReady",{bubbles:!0}))};function Dt(t){return async function(n,o,s,a){if(At(),t.disableFTCookies||!t.includeUsNat&&n==="usnat")return;const r=a.applies?n:"gdpr";if(r!==n||!s)return;let c;try{c=await bt(r)}catch(b){console.error(b)}if(!c||!Ct(c,St()))return;const p=await kt(r),f=ht(t),d=Ot(f,t),g=ft(c,f,p,t);await Pt(d,g),p&&Tt(),document.dispatchEvent(new CustomEvent("oCookieMessage.act",{bubbles:!0}))}}const h="cookie-message",Mt="manage-cookies";let O=Object.freeze({activeComponent:h,messageId:0,privacyManagerId:0});function Lt(t){return typeof t=="object"&&t!==null&&t.constructor===Object&&Object.prototype.toString.call(t)==="[object Object]"}const Ft=()=>({...O}),E=t=>{if(!Lt(t)){console.error("Invalid state changes");return}O={...O,...t}},Rt=["adsDisableInternalCMP","pwm.cmp","messageSlotBottom"];function Ut(t,e){const n=Vt(t.flags);window._sp_queue=window._sp_queue??[],window._sp_queue.push(()=>{var o,s;for(const[a,r]of Object.entries(jt))(s=(o=window._sp_).addEventListener)==null||s.call(o,a,r({...t,flags:n}))}),Ht({...t,flags:n},e)}function Vt(t){const e={};return typeof t=="object"&&Rt.forEach(n=>{Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}),e}function xt(t){if(!t)return;const e=document.body,n=new CustomEvent("oTracking.event",{bubbles:!0,cancelable:!0,detail:t.detail});e.dispatchEvent(n)}function I({trackingProps:t,action:e,triggerAction:n}){let o;const s=Ft(),{product:a,app:r,flags:c}=t;s.activeComponent===h?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},...r&&{app:r},custom:[{cookie_toggle_flag:c}],url:window.document.location.href||null}};xt(i)}const jt={onMessageChoiceSelect:t=>(e,n,o)=>{const a={11:"accept_all",12:"manage_cookies",13:"reject_all"}[o];a&&I({trackingProps:t,action:"click",triggerAction:a})},onMessageReady:t=>()=>{I({trackingProps:t,action:"view"})},onMessageReceiveData:()=>(t,e)=>{const{messageId:n}=e;n&&E({messageId:n})},onError:t=>(e,n)=>{I({trackingProps:t,action:"error",triggerAction:n})},onPMCancel:()=>()=>{E({activeComponent:h})}};function Ht(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:r="0"}={}}=n;s&&(+r&&E({activeComponent:Mt,privacyManagerId:+r}),!(!a||!o[a])&&I({trackingProps:t,action:"click",triggerAction:o[a]}))},!1)}const qt="6.0.0";async function Gt(t){const{useFTSession:e=!0,consentProxyHost:n=$,cookieDomain:o=W,formOfWordsId:s=G,useConsentStore:a=!0,trackingContext:r={},disableFTCookies:c=!1,includeUsNat:i=!1}=t||{};let{propertyConfig:p=w,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=qt,!f&&e)try{const d=await j();f=d==null?void 0:d.uuid}catch(d){console.error(d)}p=Wt(p),lt(p,{userId:f,includeUsNat:i}),Nt(),window._sp_queue.push(()=>{var d,g;(g=(d=window._sp_)==null?void 0:d.addEventListener)==null||g.call(d,"onConsentReady",Dt({userId:f,consentProxyHost:n,cookieDomain:o,formOfWordsId:s,useConsentStore:a,disableFTCookies:c,includeUsNat:i}))}),Ut(r,p.baseEndpoint)}function Wt(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 U(t,e,n,o,s,a){const{text:r,onClick:c}=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=r,p.addEventListener("click",c),s.set(p,c))}function $t({_clientOptions:t}=w){const{privacyManagerId:e,ccpaPrivacyManagerId:n,usnatPrivacyManagerId:o,manageCookiesLinkOverride:s}=t??w._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)}}},r=new Map,c=function(i,p,f,d){U(!1,i,d.applies,a,r,s),d.applies&&window._sp_queue.push(()=>{var g,b;(b=(g=window._sp_).removeEventListener)==null||b.call(g,"onConsentReady",c)})};U(!0,"gdpr",!1,a,r,s),window._sp_queue??(window._sp_queue=[]),window._sp_queue.push(()=>{var i,p;(p=(i=window._sp_).addEventListener)==null||p.call(i,"onConsentReady",c)})}function Kt(t){return t._clientOptions??{}}const Bt={"ft.com":Kt};function Jt(t){return new Promise((e,n)=>{const{rootDomain:o}=t._clientOptions||{};if(!o)return e({});const s=Bt[o];if(!s||typeof s!="function")return e({...t._clientOptions});const a=()=>{try{e(s(t))}catch(r){n(r)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a):a()})}function Xt(t,e){if(!e||Number.isFinite(parseFloat(e))||!t.endsWith(e))return!1;const n=t.indexOf(e),o=t[n-1];return o==="."||o===void 0}function Yt(t){if(!t)throw new Error("Invalid hostname provided");let n=Object.values(rt).find(o=>{var a;if(o.propertyHref)return!1;const s=(a=o._clientOptions)==null?void 0:a.rootDomain;return s&&Xt(t,s)});return n??(n=N),n}const zt=new URL(window.location.href).hostname,l=Yt(zt);(async()=>{var t,e;try{const n=await Jt(l);Gt({propertyConfig:l,...n}),(t=l==null?void 0:l._clientOptions)!=null&&t.privacyManagerId&&((e=l==null?void 0:l._clientOptions)!=null&&e.manageCookiesLinkOverride)&&$t(l)}catch(n){console.error("Error: CMP package configure + initialise Sourcepoint failed.",n)}})()})();
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import type { SPConfig, regionConfig } from "../../typings/types";
|
|
2
|
-
declare function findAndUpdateLinks(fallback: boolean, regionId: string, regionApplies: boolean, regionConfig: regionConfig, linkMap: Map<HTMLElement, (this: HTMLElement, ev: MouseEvent) => void>, manageCookiesLinkOverride?: string): void;
|
|
2
|
+
export declare function findAndUpdateLinks(fallback: boolean, regionId: string, regionApplies: boolean, regionConfig: regionConfig, linkMap: Map<HTMLElement, (this: HTMLElement, ev: MouseEvent) => void>, manageCookiesLinkOverride?: string): void;
|
|
3
3
|
export declare function interceptManageCookiesLinks({ _clientOptions }?: SPConfig): void;
|
|
4
|
-
export declare const exportedForTesting: {
|
|
5
|
-
findAndUpdateLinks: typeof findAndUpdateLinks;
|
|
6
|
-
};
|
|
7
|
-
export {};
|
|
8
4
|
//# sourceMappingURL=cmp-manage-cookies-link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmp-manage-cookies-link.d.ts","sourceRoot":"","sources":["../../../src/html/cmp-manage-cookies-link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIlE,
|
|
1
|
+
{"version":3,"file":"cmp-manage-cookies-link.d.ts","sourceRoot":"","sources":["../../../src/html/cmp-manage-cookies-link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIlE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC,EACtE,yBAAyB,CAAC,EAAE,MAAM,QAenC;AAED,wBAAgB,2BAA2B,CAAC,EAAE,cAAc,EAAE,GAAE,QAAyB,QA+DxF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IabCustomCategoryName } from "../../typings/types.d.ts";
|
|
1
2
|
export declare const SOURCEPOINT_CONSENT_SOURCE = "sourcepoint-cmp";
|
|
2
3
|
export declare const SOURCEPOINT_FOW_SCOPE = "FTPINK";
|
|
3
4
|
export declare const CONSENT_COOKIE_NAME = "FTConsent";
|
|
@@ -36,5 +37,5 @@ export declare const iabCustomCategories: {
|
|
|
36
37
|
readonly specialFeatures: readonly [];
|
|
37
38
|
};
|
|
38
39
|
};
|
|
39
|
-
export declare const iabCategoryNames:
|
|
40
|
+
export declare const iabCategoryNames: IabCustomCategoryName[];
|
|
40
41
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAC5D,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,eAAO,MAAM,kBAAkB,oDAAoD,CAAC;AACpF,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BtB,CAAC;AAEX,eAAO,MAAM,gBAAgB,EAAuC,qBAAqB,EAAE,CAAC"}
|
|
@@ -143,4 +143,44 @@ export declare const SP_FT_LOCATIONS: {
|
|
|
143
143
|
joinHref: boolean;
|
|
144
144
|
gdpr: {};
|
|
145
145
|
};
|
|
146
|
+
export declare const SP_FTA_SERVICE_AWARDS: {
|
|
147
|
+
accountId: number;
|
|
148
|
+
baseEndpoint: string;
|
|
149
|
+
propertyId: number;
|
|
150
|
+
_clientOptions: {
|
|
151
|
+
rootDomain: string;
|
|
152
|
+
};
|
|
153
|
+
joinHref: boolean;
|
|
154
|
+
gdpr: {};
|
|
155
|
+
};
|
|
156
|
+
export declare const SP_CELEBRATION_OF_INVESTMENT: {
|
|
157
|
+
accountId: number;
|
|
158
|
+
baseEndpoint: string;
|
|
159
|
+
propertyId: number;
|
|
160
|
+
_clientOptions: {
|
|
161
|
+
rootDomain: string;
|
|
162
|
+
};
|
|
163
|
+
joinHref: boolean;
|
|
164
|
+
gdpr: {};
|
|
165
|
+
};
|
|
166
|
+
export declare const SP_GLOBAL_PRIVATE_BANKING_AWARDS: {
|
|
167
|
+
accountId: number;
|
|
168
|
+
baseEndpoint: string;
|
|
169
|
+
propertyId: number;
|
|
170
|
+
_clientOptions: {
|
|
171
|
+
rootDomain: string;
|
|
172
|
+
};
|
|
173
|
+
joinHref: boolean;
|
|
174
|
+
gdpr: {};
|
|
175
|
+
};
|
|
176
|
+
export declare const TNW: {
|
|
177
|
+
accountId: number;
|
|
178
|
+
baseEndpoint: string;
|
|
179
|
+
propertyId: number;
|
|
180
|
+
_clientOptions: {
|
|
181
|
+
rootDomain: string;
|
|
182
|
+
};
|
|
183
|
+
joinHref: boolean;
|
|
184
|
+
gdpr: {};
|
|
185
|
+
};
|
|
146
186
|
//# sourceMappingURL=properties.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/lib/properties.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;CAW1B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAa1B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;CAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;CAQhC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;CAQlC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;CAQ3B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;CAQ7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;CAQ3B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;CAU3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/lib/properties.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;CAW1B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAa1B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;CAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;CAQhC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;CAQzB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;CAQlC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;CAQ3B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;CAQ7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;CAQ3B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;CAU3B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;CAQjC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;CAQxC,CAAC;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;CAQ5C,CAAC;AAEF,eAAO,MAAM,GAAG;;;;;;;;;CAQf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/tracking/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjE,eAAO,MAAM,aAAa;;;;EAIxB,CAAC;AAIH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAOzD;AAGD,eAAO,MAAM,QAAQ;;qBAvBF,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/tracking/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjE,eAAO,MAAM,aAAa;;;;EAIxB,CAAC;AAIH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAOzD;AAGD,eAAO,MAAM,QAAQ;;qBAvBF,OAAO,cAAc,GAAG,OAAO,eAAe;eACpD,MAAM;sBACC,MAAM;CAqByB,CAAC;AAEpD,eAAO,MAAM,QAAQ,aAAc,OAAO,SAOzC,CAAC"}
|
package/dist/src/utils/url.d.ts
CHANGED
|
@@ -136,5 +136,41 @@ export declare function getPropertyConfigByHostname(hostname: string): {
|
|
|
136
136
|
};
|
|
137
137
|
joinHref: boolean;
|
|
138
138
|
gdpr: {};
|
|
139
|
+
} | {
|
|
140
|
+
accountId: number;
|
|
141
|
+
baseEndpoint: string;
|
|
142
|
+
propertyId: number;
|
|
143
|
+
_clientOptions: {
|
|
144
|
+
rootDomain: string;
|
|
145
|
+
};
|
|
146
|
+
joinHref: boolean;
|
|
147
|
+
gdpr: {};
|
|
148
|
+
} | {
|
|
149
|
+
accountId: number;
|
|
150
|
+
baseEndpoint: string;
|
|
151
|
+
propertyId: number;
|
|
152
|
+
_clientOptions: {
|
|
153
|
+
rootDomain: string;
|
|
154
|
+
};
|
|
155
|
+
joinHref: boolean;
|
|
156
|
+
gdpr: {};
|
|
157
|
+
} | {
|
|
158
|
+
accountId: number;
|
|
159
|
+
baseEndpoint: string;
|
|
160
|
+
propertyId: number;
|
|
161
|
+
_clientOptions: {
|
|
162
|
+
rootDomain: string;
|
|
163
|
+
};
|
|
164
|
+
joinHref: boolean;
|
|
165
|
+
gdpr: {};
|
|
166
|
+
} | {
|
|
167
|
+
accountId: number;
|
|
168
|
+
baseEndpoint: string;
|
|
169
|
+
propertyId: number;
|
|
170
|
+
_clientOptions: {
|
|
171
|
+
rootDomain: string;
|
|
172
|
+
};
|
|
173
|
+
joinHref: boolean;
|
|
174
|
+
gdpr: {};
|
|
139
175
|
};
|
|
140
176
|
//# sourceMappingURL=url.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAWtE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAWtE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB3D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@financial-times/cmp-client",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -20,12 +20,10 @@
|
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/uuid": "^9.0.8",
|
|
23
|
-
"eslint": "^8.56.0",
|
|
24
23
|
"npm-run-all": "^4.1.5",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"vitest": "^1.2.2"
|
|
24
|
+
"typescript": "^5.7.3",
|
|
25
|
+
"vite": "^6.1.1",
|
|
26
|
+
"vitest": "^3.0.6"
|
|
29
27
|
},
|
|
30
28
|
"scripts": {
|
|
31
29
|
"lint": "eslint ./src ./typings --ext .ts",
|
|
@@ -33,10 +31,11 @@
|
|
|
33
31
|
"checks:unit": "npm t -- --run",
|
|
34
32
|
"checks:types": "tsc",
|
|
35
33
|
"checks": "run-s checks:*",
|
|
34
|
+
"build:clean": "rm -rf ./dist",
|
|
36
35
|
"build:lib": "vite build --config vite.config.lib.ts",
|
|
37
36
|
"build:static": "vite build --config vite.config.static.ts",
|
|
38
37
|
"build:types": "tsc",
|
|
39
|
-
"build": "
|
|
38
|
+
"build": "run-s build:*",
|
|
40
39
|
"test": "vitest"
|
|
41
40
|
}
|
|
42
41
|
}
|