@schibsted/sps-sdk 5.1.0 → 5.2.0-CBT-20903.2
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/cjs/actions/iframe.d.ts +6 -0
- package/dist/cjs/actions/iframe.js +48 -0
- package/dist/cjs/actions/iframe.js.map +1 -0
- package/dist/cjs/apiClient.d.ts +4 -4
- package/dist/cjs/apiClient.js +8 -8
- package/dist/cjs/apiClient.js.map +1 -1
- package/dist/cjs/public-scripts-content.d.ts +1 -1
- package/dist/cjs/public-scripts-content.js +1 -1
- package/dist/cjs/sps.d.ts +55 -18
- package/dist/cjs/sps.js +89 -15
- package/dist/cjs/sps.js.map +1 -1
- package/dist/esm/actions/iframe.d.ts +6 -0
- package/dist/esm/actions/iframe.js +44 -0
- package/dist/esm/actions/iframe.js.map +1 -0
- package/dist/esm/apiClient.d.ts +4 -4
- package/dist/esm/apiClient.js +8 -8
- package/dist/esm/apiClient.js.map +1 -1
- package/dist/esm/public-scripts-content.d.ts +1 -1
- package/dist/esm/public-scripts-content.js +1 -1
- package/dist/esm/sps.d.ts +55 -18
- package/dist/esm/sps.js +87 -14
- package/dist/esm/sps.js.map +1 -1
- package/dist/public-scripts/sps-pulse-helpers.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders poster content in an iframe that replaces the children of `element`.
|
|
3
|
+
* The iframe grows to the height of its content, and links navigate the top window.
|
|
4
|
+
* Resolves once the iframe has loaded and its first height is applied.
|
|
5
|
+
*/
|
|
6
|
+
export declare const renderPosterInIframe: (element: HTMLElement, iframeId: string, content: string) => Promise<void>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderPosterInIframe = void 0;
|
|
4
|
+
const resetDocumentSpacing = (doc) => {
|
|
5
|
+
[doc.documentElement, doc.body].forEach((el) => {
|
|
6
|
+
el.style.margin = "0";
|
|
7
|
+
el.style.padding = "0";
|
|
8
|
+
el.style.overflow = "hidden";
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
const navigateTopOnLinkClick = (doc) => {
|
|
12
|
+
doc.addEventListener("click", (event) => {
|
|
13
|
+
const anchor = event.target?.closest("a");
|
|
14
|
+
if (!anchor?.href) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
event.preventDefault();
|
|
18
|
+
// Delay navigation so click tracking inside the poster has time to fire
|
|
19
|
+
setTimeout(() => window.top?.location.assign(anchor.href), 100);
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Renders poster content in an iframe that replaces the children of `element`.
|
|
24
|
+
* The iframe grows to the height of its content, and links navigate the top window.
|
|
25
|
+
* Resolves once the iframe has loaded and its first height is applied.
|
|
26
|
+
*/
|
|
27
|
+
const renderPosterInIframe = (element, iframeId, content) => new Promise((resolve) => {
|
|
28
|
+
const iframe = document.createElement("iframe");
|
|
29
|
+
iframe.id = iframeId;
|
|
30
|
+
iframe.style.border = "0";
|
|
31
|
+
iframe.style.display = "block";
|
|
32
|
+
iframe.style.width = "100%";
|
|
33
|
+
iframe.addEventListener("load", () => {
|
|
34
|
+
const doc = iframe.contentDocument;
|
|
35
|
+
resetDocumentSpacing(doc);
|
|
36
|
+
navigateTopOnLinkClick(doc);
|
|
37
|
+
const updateHeight = () => {
|
|
38
|
+
iframe.style.height = `${doc.body.scrollHeight}px`;
|
|
39
|
+
};
|
|
40
|
+
updateHeight();
|
|
41
|
+
new ResizeObserver(updateHeight).observe(doc.body);
|
|
42
|
+
resolve();
|
|
43
|
+
}, { once: true });
|
|
44
|
+
iframe.srcdoc = content;
|
|
45
|
+
element.replaceChildren(iframe);
|
|
46
|
+
});
|
|
47
|
+
exports.renderPosterInIframe = renderPosterInIframe;
|
|
48
|
+
//# sourceMappingURL=iframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iframe.js","sourceRoot":"","sources":["../../../src/actions/iframe.ts"],"names":[],"mappings":";;;AAAA,MAAM,oBAAoB,GAAG,CAAC,GAAa,EAAQ,EAAE;IACnD,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC7C,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACtB,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QACvB,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,GAAa,EAAQ,EAAE;IACrD,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,MAAM,GAAI,KAAK,CAAC,MAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,wEAAwE;QACxE,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAClC,OAAoB,EACpB,QAAgB,EAChB,OAAe,EACA,EAAE,CACjB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC;IACrB,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,gBAAgB,CACrB,MAAM,EACN,GAAG,EAAE;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,eAAgB,CAAC;QACpC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1B,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAE5B,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC;QACrD,CAAC,CAAC;QACF,YAAY,EAAE,CAAC;QACf,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACF,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;IACxB,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AA7BQ,QAAA,oBAAoB,wBA6B5B"}
|
package/dist/cjs/apiClient.d.ts
CHANGED
|
@@ -119,10 +119,10 @@ export type ApiDecision = {
|
|
|
119
119
|
* @param endpoint - The SPS API base endpoint URL.
|
|
120
120
|
* @param params - Optional query params forwarded to the SPS API for the whole request.
|
|
121
121
|
* @param cookies - Optional cookie string forwarded as the `Cookie` request header.
|
|
122
|
-
* @param
|
|
122
|
+
* @param placementTypes - Optional placement types to include in the result.
|
|
123
123
|
* @returns An object with a `placements` array, or `null` on error.
|
|
124
124
|
*/
|
|
125
|
-
export declare const fetchPlacementsByContext: (publication: string, context: "frontpage" | "article", endpoint: string, params?: SpsParams, cookies?: string,
|
|
125
|
+
export declare const fetchPlacementsByContext: (publication: string, context: "frontpage" | "article", endpoint: string, params?: SpsParams, cookies?: string, placementTypes?: PlacementType[], timeoutMs?: number) => Promise<{
|
|
126
126
|
placements: SPSPosterResponseWithPlacementType[];
|
|
127
127
|
} | null>;
|
|
128
128
|
/**
|
|
@@ -133,9 +133,9 @@ export declare const fetchPlacementsByContext: (publication: string, context: "f
|
|
|
133
133
|
* @param endpoint - The SPS API base endpoint URL.
|
|
134
134
|
* @param params - Optional query params forwarded to the SPS API for the whole request.
|
|
135
135
|
* @param cookies - Optional cookie string forwarded as the `Cookie` request header.
|
|
136
|
-
* @param
|
|
136
|
+
* @param placementTypes - Optional placement types to include in the result.
|
|
137
137
|
* @returns An object with a `placements` array, or `{ placements: [] }` on error.
|
|
138
138
|
*/
|
|
139
|
-
export declare const fetchDecisionsByContext: (publication: string, context: "frontpage" | "article", endpoint: string, params?: SpsParams, cookies?: string,
|
|
139
|
+
export declare const fetchDecisionsByContext: (publication: string, context: "frontpage" | "article", endpoint: string, params?: SpsParams, cookies?: string, placementTypes?: PlacementType[]) => Promise<{
|
|
140
140
|
placements: ApiDecision[];
|
|
141
141
|
}>;
|
package/dist/cjs/apiClient.js
CHANGED
|
@@ -109,14 +109,14 @@ exports.fetchDecision = fetchDecision;
|
|
|
109
109
|
* @param endpoint - The SPS API base endpoint URL.
|
|
110
110
|
* @param params - Optional query params forwarded to the SPS API for the whole request.
|
|
111
111
|
* @param cookies - Optional cookie string forwarded as the `Cookie` request header.
|
|
112
|
-
* @param
|
|
112
|
+
* @param placementTypes - Optional placement types to include in the result.
|
|
113
113
|
* @returns An object with a `placements` array, or `null` on error.
|
|
114
114
|
*/
|
|
115
|
-
const fetchPlacementsByContext = async (publication, context, endpoint, params, cookies,
|
|
115
|
+
const fetchPlacementsByContext = async (publication, context, endpoint, params, cookies, placementTypes, timeoutMs) => {
|
|
116
116
|
try {
|
|
117
117
|
const url = new URL(`${endpoint}/${publication}/placements/${context}`);
|
|
118
|
-
|
|
119
|
-
url.searchParams.append("
|
|
118
|
+
placementTypes?.forEach((placementType) => {
|
|
119
|
+
url.searchParams.append("placementTypes[]", placementType);
|
|
120
120
|
});
|
|
121
121
|
if (params) {
|
|
122
122
|
(0, queryBuilder_1.convertParamsToQueryParams)(params).forEach((value, key) => {
|
|
@@ -149,14 +149,14 @@ exports.fetchPlacementsByContext = fetchPlacementsByContext;
|
|
|
149
149
|
* @param endpoint - The SPS API base endpoint URL.
|
|
150
150
|
* @param params - Optional query params forwarded to the SPS API for the whole request.
|
|
151
151
|
* @param cookies - Optional cookie string forwarded as the `Cookie` request header.
|
|
152
|
-
* @param
|
|
152
|
+
* @param placementTypes - Optional placement types to include in the result.
|
|
153
153
|
* @returns An object with a `placements` array, or `{ placements: [] }` on error.
|
|
154
154
|
*/
|
|
155
|
-
const fetchDecisionsByContext = async (publication, context, endpoint, params, cookies,
|
|
155
|
+
const fetchDecisionsByContext = async (publication, context, endpoint, params, cookies, placementTypes) => {
|
|
156
156
|
try {
|
|
157
157
|
const url = new URL(`${endpoint}/${publication}/placements/${context}/decision`);
|
|
158
|
-
|
|
159
|
-
url.searchParams.append("
|
|
158
|
+
placementTypes?.forEach((placementType) => {
|
|
159
|
+
url.searchParams.append("placementTypes[]", placementType);
|
|
160
160
|
});
|
|
161
161
|
if (params) {
|
|
162
162
|
(0, queryBuilder_1.convertParamsToQueryParams)(params).forEach((value, key) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/apiClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/apiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const PUBLIC_SCRIPTS_CONTENT: {
|
|
2
|
-
readonly "sps-pulse-helpers": "\"use strict\";var SpsPulseHelpersBundle=(()=>{var F=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var se=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of oe(t))!ne.call(e,o)&&o!==r&&F(e,o,{get:()=>t[o],enumerable:!(n=re(t,o))||n.enumerable});return e};var ae=e=>se(F({},\"__esModule\",{value:!0}),e);var de={};var y=\"pulse-tracker-proxy\",ie=`${y}:request`,fe=`${y}:ack`,D=`${y}:invoke`,G=`${y}:return`,L=`${y}:return-error`,q=[\"trackAnonymousViewUIElement\",\"trackEngagementAd\",\"trackEngagementAffiliate\",\"trackEngagementAudio\",\"trackEngagementForm\",\"trackEngagementHealthUIElement\",\"trackEngagementOffer\",\"trackEngagementSchoolUIElement\",\"trackEngagementSportsUIElement\",\"trackEngagementTeaser\",\"trackEngagementTvModule\",\"trackEngagementUIElement\",\"trackEngagementVideo\",\"trackEngagementVideoAd\",\"trackEngagementWidget\",\"trackCompletedHealthAction\",\"trackImpressionAd\",\"trackImpressionAdSlot\",\"trackImpressionAffiliate\",\"trackImpressionForm\",\"trackImpressionHealthUIElement\",\"trackImpressionOffer\",\"trackImpressionPlayer\",\"trackImpressionSchoolUIElement\",\"trackImpressionSportsUIElement\",\"trackImpressionTeaser\",\"trackImpressionUIElement\",\"trackImpressionWidget\",\"trackLoadAd\",\"trackRequestAd\",\"trackLeaveArticle\",\"trackLeaveAudioPage\",\"trackLeaveError\",\"trackLeaveFrontpage\",\"trackLeaveLandingpage\",\"trackLeaveListing\",\"trackLeaveLockedArticle\",\"trackLeaveLockedAudioPage\",\"trackLeaveLockedPage\",\"trackLeaveLockedVideoPage\",\"trackLeavePage\",\"trackLeaveSchoolPage\",\"trackLeaveSportsPage\",\"trackLeaveVideoPage\",\"trackLeaveWeather\",\"trackViewArticle\",\"trackViewAudioPage\",\"trackViewError\",\"trackViewFrontpage\",\"trackViewHealthPage\",\"trackViewLandingpage\",\"trackViewListing\",\"trackViewLockedArticle\",\"trackViewLockedAudioPage\",\"trackViewLockedPage\",\"trackViewLockedVideoPage\",\"trackViewPage\",\"trackViewSchoolPage\",\"trackViewSportsPage\",\"trackViewTitle\",\"trackViewVideoPage\",\"trackViewWeather\",\"trackLegacyViewArticle\",\"trackLegacyViewLoginPoster\",\"trackLegacyViewSalesPoster\",\"trackLegacyViewListing\",\"trackLegacyViewFrontpage\",\"trackLegacyViewPage\",\"trackLegacyViewUIElement\",\"trackLegacyClickUIElement\"];function V(e){return e!==null&&typeof e==\"object\"&&\"type\"in e&&typeof e.type==\"string\"&&e.type.startsWith(y)}function O(e,{target:t,timeout:r,debug:n=()=>{}}){return new Promise((o,c)=>{let a=new MessageChannel,p=r?setTimeout(()=>{a.port1.close(),c(new Error(`Message of type ${e.type} timed out`))},r):void 0,i=s=>{if(n(\"[Pulse Tracker Proxy] Received the response on the MessageChannel\",s),!V(s.data)){n(\"[Pulse Tracker Proxy] Response was not a valid Proxy Message\",s.data);return}s.data.type===L&&(n(\"[Pulse Tracker Proxy] Received an return error response\",s.data.error),clearTimeout(p),a.port1.close(),c(new Error(s.data.error))),n(\"[Pulse Tracker Proxy] Received a valid response\",s.data),clearTimeout(p),a.port1.close(),o(s.data)};a.port1.onmessage=i,n(\"[Pulse Tracker Proxy] Sending message to target window\",e),t.postMessage(e,\"*\",[a.port2])})}var Y=\"2.0.0-rc.19\";function j(e){let t=\"tracker\"in e&&typeof e.tracker==\"object\"?e.tracker:{};return{...e,tracker:{...t,proxyVersion:Y}}}function R(e,t,r){let n=\"provider\"in e&&typeof e.provider==\"object\"?e.provider:{};return{...e,provider:{...n,component:t,componentVersion:r}}}var v=class{constructor(t,r,n,o){this.target=t,this.component=r,this.componentVersion=n,this.debug=o}track(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,n,...o]=t,c=j(n),a=R(c,this.component,this.componentVersion),p=[r,a,...o];return this.invoke({method:\"track\",args:p})}async invoke(t){this.debug(\"[Pulse Tracker Proxy] Invoking remote function\",t);let r=await O({type:D,payload:t},{target:this.target});if(!V(r))throw this.debug(\"[Pulse Tracker Proxy] Invalid response from proxy\",r),new Error(\"Invalid response from proxy\");if(r.type===L)throw this.debug(\"[Pulse Tracker Proxy] Error response from proxy\",r.error),new Error(r.error);if(r.type===G)return this.debug(\"[Pulse Tracker Proxy] Successful response from proxy\",r.payload),r.payload;throw this.debug(\"[Pulse Tracker Proxy] Unhandled response from proxy\",r),new Error(\"Unexpected response from proxy\")}};var ce=Object.fromEntries(q.map(e=>[e,function(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,...n]=t,o=j(r),a=[R(o,this.component,this.componentVersion),...n];return this.invoke({method:e,args:a})}]));function pe(){return class extends v{constructor(e,t,r,n){super(e,t,r,n),n(\"[Pulse TPaaS Proxy] Initialized\"),Object.assign(this,ce)}}}var le=pe();var me=e=>e===\"payment.schibsted.com\"||e.startsWith(\"bestilling.\")||e===\"pay.pre.schibsted.digital\"||e.startsWith(\"test-bestilling.\"),ue=e=>e===\"login.schibsted.com\"||e===\"identity-pre.schibsted.com\",K=e=>{var t;try{let n=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\").hostname;if(ue(n))return\"Login\";if(me(n))return\"Purchase\"}catch{return}};var B=e=>{var t;try{let r=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\"),o=new URLSearchParams(r.search).get(\"code\");return o?o.split(\",\"):[]}catch{return[]}};var A=e=>{var r;let t=(r=e==null?void 0:e.toLowerCase())!=null?r:\"\";if(t.includes(\"meter\"))return\"Meter\";if(t.includes(\"paid\")||t.includes(\"subscription\"))return\"Paid\";if(t.includes(\"login\"))return\"Login\"};function z(e,t,r,n){let{campaign:o,articleType:c,abTestGroup:a,placementType:p,experiment:i,legacy:s,contentName:m,pulseEvents:l}=t,g=400,d=\"\",h=0;function k(P){var b,x,E,U,$;try{let T=P.target,f=(b=T==null?void 0:T.closest)==null?void 0:b.call(T,\"a\");if(!f)return;let S=f.textContent||f.getAttribute(\"href\")||`${p} button`,N=`a|${S}`,W=Date.now();if(N===d&&W-h<g)return;d=N,h=W;let C=K(f),H=C===\"Purchase\"?B(f):[];l.tpaas&&e.trackEngagementOffer({placement:{containerName:\"page\",offerPlacement:p},object:{objectId:n,objectSdrn:r,campaign:o,name:m,offerCodes:H,offerType:A(c)},...i?{experiments:[{experimentSdrn:`${r}:experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a||\"\"}]}:{},engagement:{action:\"Click\",elementName:S},page:{},target:{info:{url:(x=f.getAttribute(\"href\"))!=null?x:\"\"}}}).catch(w),l.legacy&&e.trackLegacyClickUIElement({object:{id:u(S),elementType:\"Button\",name:S,containerName:\"Page\",custom:{...s==null?void 0:s.offerData,offerCodes:H}},...s?{origin:s.pulseOrigin}:{},target:{url:($=(U=(E=f.getAttribute(\"href\"))==null?void 0:E.split(\"?\"))==null?void 0:U[0])!=null?$:\"\"},...C?{intent:C}:{},...i?{experiments:[{id:`experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a}]}:{}}).catch(w)}catch{}}return document.addEventListener(\"click\",k,!0),()=>document.removeEventListener(\"click\",k,!0)}function X(e,t,r,n,o){let{campaign:c,articleType:a,abTestGroup:p,placementType:i,experiment:s,offerCodes:m,legacy:l,contentName:g,pulseEvents:d}=t;d.tpaas&&e.trackImpressionOffer({placement:{foldPosition:o,containerName:\"page\",offerPlacement:i},object:{campaign:c,name:g,objectId:n,objectSdrn:r,offerCodes:m!=null?m:[],offerType:A(a)},...s?{experiments:[{experimentSdrn:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p||\"\"}]}:{},page:{},target:{info:{}}}).catch(w),d.legacy&&e.trackLegacyViewUIElement({object:{id:u(g),elementType:i,name:g,placement:{},custom:{...l==null?void 0:l.offerData,...l==null?void 0:l.custom,offerCodes:m}},...s?{experiments:[{id:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p}]}:{},...l?{origin:l.pulseOrigin}:{}}).catch(w)}async function Q(e,t,r){let{placementType:n,legacy:o,pulseEvents:c}=t,a=window.location.pathname,i=`landingpage-${n===\"campaignpage\"?\"CAMPAIGN\":\"STATIC\"}-${_(a)}`.toLowerCase();c.legacy&&await e.trackLegacyViewPage({object:{pageId:i,name:document.title,\"spt:custom\":{...o==null?void 0:o.offerData,...o==null?void 0:o.custom}},origin:o==null?void 0:o.pulseOrigin}),c.tpaas&&await e.trackViewLandingpage({object:{objectId:i,objectSdrn:r,title:document.title},page:{}},{leaveTracking:{objectElement:\"body\",pageElement:\"body\",objectResizable:!1}})}var M=e=>e===\"campaignpage\"||e===\"staticpage\";var I={name:\"@schibsted/sps-sdk\",version:\"5.0.0\",description:\"SPS SDK for node.js\",packageManager:\"pnpm@10.27.0\",engines:{node:\">=18.0.0\"},repository:{type:\"git\",url:\"https://schibsted.ghe.com/urs-ma/sps-sdk.git\"},publishConfig:{access:\"public\",registry:\"https://registry.npmjs.org/\"},author:\"Schibsted Subscription Product & Tech\",license:\"UNLICENSED\",type:\"module\",main:\"dist/cjs/index.js\",module:\"dist/esm/index.js\",exports:{\".\":{types:\"./dist/esm/index.d.ts\",import:\"./dist/esm/index.js\",require:\"./dist/cjs/index.js\"}},files:[\"dist\"],scripts:{preinstall:\"npx only-allow pnpm\",build:\"npm run build:clean && npm run build:public-scripts && npm run build:esm && npm run build:cjs\",\"build:clean\":\"rm -rf dist/cjs dist/esm\",\"build:esm\":\"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json\",\"build:cjs\":`tsc -p tsconfig.cjs.json && tsc-alias -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json`,\"build:sps-pulse-helpers\":\"tsup --config packages/sps-pulse-helpers/tsup.config.ts\",\"build:pulse-tracker-proxy\":\"tsup --config packages/pulse-tracker-proxy/tsup.config.ts\",\"build:public-scripts\":\"npm run build:sps-pulse-helpers && npm run build:pulse-tracker-proxy && node scripts/generate-public-scripts-content.js\",test:\"node --experimental-vm-modules node_modules/jest/bin/jest.js\",lint:\"eslint .\",\"release:alpha\":\"npm publish --tag alpha\",\"release:beta\":\"npm publish --tag beta\"},devDependencies:{\"@jest/globals\":\"^30.0.0\",\"@schibsted/pulse-tracker-proxy\":\"^2.0.0-rc.19\",\"@semantic-release/changelog\":\"^6.0.3\",\"@semantic-release/git\":\"^10.0.1\",\"@snoam/mono-ma-shared-configs\":\"^1.1.0\",\"@types/jest\":\"30.0.0\",\"@types/node\":\"^24.0.3\",\"conventional-changelog-conventionalcommits\":\"^9.1.0\",eslint:\"^9.29.0\",jest:\"^30.0.0\",\"jest-environment-jsdom\":\"^30.0.2\",\"jest-fixed-jsdom\":\"^0.0.11\",msw:\"^2.13.0\",prettier:\"3.9.4\",\"semantic-release\":\"^25.0.8\",\"ts-jest\":\"^29.4.0\",\"ts-node\":\"^10.9.2\",\"tsc-alias\":\"^1.8.16\",tsup:\"^8.5.1\",typescript:\"^5.9.3\"},peerDependencies:{\"@schibsted/pulse-sdk\":\">=8.0.0-rc.19\"},dependencies:{\"@schibsted/consent-url-utils\":\"^2.0.0\"}};var J=!1,Z=!1,ee=\"script[data-sps-pulse-config='true']\",w=e=>console.error(`[SPS-Pulse-Helpers] Failed to send Pulse event. Events are dropped if the host page runs an older @schibsted/pulse-sdk. SPS SDK ${I.version} requires @schibsted/pulse-sdk ${I.peerDependencies[\"@schibsted/pulse-sdk\"]}.`,e),u=e=>e.toLowerCase().replace(/ /g,\"-\").replace(/[^-a-z:0-9]/g,\"\"),_=e=>{var t,r;return(e==null?void 0:e.replace((r=(t=window.__landingpages)==null?void 0:t.rootUrl)!=null?r:\"\",\"\").replace(/^\\/|\\/$/g,\"\"))||\"\"};async function te(){if(console.log(\"[SPS-Pulse-Helpers] boot initiated\"),J)return;J=!0;let e=null;try{let t=document.querySelector(ee);if(!t){console.warn(`[SPS-Pulse-Helpers] Config script tag not found with selector ${ee}`);return}e=JSON.parse(t.textContent)}catch(t){console.warn(\"[SPS-Pulse-Helpers] Failed to parse config from script tag\",t);return}try{let t=window.getPulseTrackerProxy;if(!t||typeof t!=\"function\"){console.warn(\"[SPS-Pulse-Helpers] PulseTrackerProxy not available\");return}let{placementType:r,publication:n,contentName:o}=e,c=M(r)?_(window.location.pathname):u(o),a=`sdrn:${n}:element:offer:${r}:${c}`,p=crypto==null?void 0:crypto.randomUUID(),i=await t({component:\"SPS-SDK\",componentVersion:I.version});z(i,e,a,p);let s=k=>{Z||(Z=!0,X(i,e,a,p,k))};if(M(r)){await Q(i,e,a),s(\"Above\");return}let m=window.frameElement,l=window.parent.IntersectionObserver;if(!m||!l){console.warn(\"[SPS-Pulse-Helpers] No iframe or IntersectionObserver available. Pulse View event will not be fired.\");return}let g=\"Unknown\",d=!0,h=new l(k=>{var E;let P=k[0],b=(E=P==null?void 0:P.intersectionRatio)!=null?E:0,x=(P==null?void 0:P.isIntersecting)&&b>=1/3;d&&(d=!1,g=x?\"Above\":\"Below\"),x&&(h.disconnect(),s(g))},{root:null,threshold:[0,1/3]});h.observe(m)}catch(t){console.warn(\"[SPS-Pulse-Helpers] boot failed\",t)}}te();return ae(de);})();\n";
|
|
2
|
+
readonly "sps-pulse-helpers": "\"use strict\";var SpsPulseHelpersBundle=(()=>{var F=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var se=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of oe(t))!ne.call(e,o)&&o!==r&&F(e,o,{get:()=>t[o],enumerable:!(n=re(t,o))||n.enumerable});return e};var ae=e=>se(F({},\"__esModule\",{value:!0}),e);var de={};var y=\"pulse-tracker-proxy\",ie=`${y}:request`,fe=`${y}:ack`,D=`${y}:invoke`,G=`${y}:return`,L=`${y}:return-error`,q=[\"trackAnonymousViewUIElement\",\"trackEngagementAd\",\"trackEngagementAffiliate\",\"trackEngagementAudio\",\"trackEngagementForm\",\"trackEngagementHealthUIElement\",\"trackEngagementOffer\",\"trackEngagementSchoolUIElement\",\"trackEngagementSportsUIElement\",\"trackEngagementTeaser\",\"trackEngagementTvModule\",\"trackEngagementUIElement\",\"trackEngagementVideo\",\"trackEngagementVideoAd\",\"trackEngagementWidget\",\"trackCompletedHealthAction\",\"trackImpressionAd\",\"trackImpressionAdSlot\",\"trackImpressionAffiliate\",\"trackImpressionForm\",\"trackImpressionHealthUIElement\",\"trackImpressionOffer\",\"trackImpressionPlayer\",\"trackImpressionSchoolUIElement\",\"trackImpressionSportsUIElement\",\"trackImpressionTeaser\",\"trackImpressionUIElement\",\"trackImpressionWidget\",\"trackLoadAd\",\"trackRequestAd\",\"trackLeaveArticle\",\"trackLeaveAudioPage\",\"trackLeaveError\",\"trackLeaveFrontpage\",\"trackLeaveLandingpage\",\"trackLeaveListing\",\"trackLeaveLockedArticle\",\"trackLeaveLockedAudioPage\",\"trackLeaveLockedPage\",\"trackLeaveLockedVideoPage\",\"trackLeavePage\",\"trackLeaveSchoolPage\",\"trackLeaveSportsPage\",\"trackLeaveVideoPage\",\"trackLeaveWeather\",\"trackViewArticle\",\"trackViewAudioPage\",\"trackViewError\",\"trackViewFrontpage\",\"trackViewHealthPage\",\"trackViewLandingpage\",\"trackViewListing\",\"trackViewLockedArticle\",\"trackViewLockedAudioPage\",\"trackViewLockedPage\",\"trackViewLockedVideoPage\",\"trackViewPage\",\"trackViewSchoolPage\",\"trackViewSportsPage\",\"trackViewTitle\",\"trackViewVideoPage\",\"trackViewWeather\",\"trackLegacyViewArticle\",\"trackLegacyViewLoginPoster\",\"trackLegacyViewSalesPoster\",\"trackLegacyViewListing\",\"trackLegacyViewFrontpage\",\"trackLegacyViewPage\",\"trackLegacyViewUIElement\",\"trackLegacyClickUIElement\"];function V(e){return e!==null&&typeof e==\"object\"&&\"type\"in e&&typeof e.type==\"string\"&&e.type.startsWith(y)}function O(e,{target:t,timeout:r,debug:n=()=>{}}){return new Promise((o,c)=>{let a=new MessageChannel,p=r?setTimeout(()=>{a.port1.close(),c(new Error(`Message of type ${e.type} timed out`))},r):void 0,i=s=>{if(n(\"[Pulse Tracker Proxy] Received the response on the MessageChannel\",s),!V(s.data)){n(\"[Pulse Tracker Proxy] Response was not a valid Proxy Message\",s.data);return}s.data.type===L&&(n(\"[Pulse Tracker Proxy] Received an return error response\",s.data.error),clearTimeout(p),a.port1.close(),c(new Error(s.data.error))),n(\"[Pulse Tracker Proxy] Received a valid response\",s.data),clearTimeout(p),a.port1.close(),o(s.data)};a.port1.onmessage=i,n(\"[Pulse Tracker Proxy] Sending message to target window\",e),t.postMessage(e,\"*\",[a.port2])})}var Y=\"2.0.0-rc.19\";function j(e){let t=\"tracker\"in e&&typeof e.tracker==\"object\"?e.tracker:{};return{...e,tracker:{...t,proxyVersion:Y}}}function R(e,t,r){let n=\"provider\"in e&&typeof e.provider==\"object\"?e.provider:{};return{...e,provider:{...n,component:t,componentVersion:r}}}var v=class{constructor(t,r,n,o){this.target=t,this.component=r,this.componentVersion=n,this.debug=o}track(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,n,...o]=t,c=j(n),a=R(c,this.component,this.componentVersion),p=[r,a,...o];return this.invoke({method:\"track\",args:p})}async invoke(t){this.debug(\"[Pulse Tracker Proxy] Invoking remote function\",t);let r=await O({type:D,payload:t},{target:this.target});if(!V(r))throw this.debug(\"[Pulse Tracker Proxy] Invalid response from proxy\",r),new Error(\"Invalid response from proxy\");if(r.type===L)throw this.debug(\"[Pulse Tracker Proxy] Error response from proxy\",r.error),new Error(r.error);if(r.type===G)return this.debug(\"[Pulse Tracker Proxy] Successful response from proxy\",r.payload),r.payload;throw this.debug(\"[Pulse Tracker Proxy] Unhandled response from proxy\",r),new Error(\"Unexpected response from proxy\")}};var ce=Object.fromEntries(q.map(e=>[e,function(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,...n]=t,o=j(r),a=[R(o,this.component,this.componentVersion),...n];return this.invoke({method:e,args:a})}]));function pe(){return class extends v{constructor(e,t,r,n){super(e,t,r,n),n(\"[Pulse TPaaS Proxy] Initialized\"),Object.assign(this,ce)}}}var le=pe();var me=e=>e===\"payment.schibsted.com\"||e.startsWith(\"bestilling.\")||e===\"pay.pre.schibsted.digital\"||e.startsWith(\"test-bestilling.\"),ue=e=>e===\"login.schibsted.com\"||e===\"identity-pre.schibsted.com\",K=e=>{var t;try{let n=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\").hostname;if(ue(n))return\"Login\";if(me(n))return\"Purchase\"}catch{return}};var B=e=>{var t;try{let r=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\"),o=new URLSearchParams(r.search).get(\"code\");return o?o.split(\",\"):[]}catch{return[]}};var A=e=>{var r;let t=(r=e==null?void 0:e.toLowerCase())!=null?r:\"\";if(t.includes(\"meter\"))return\"Meter\";if(t.includes(\"paid\")||t.includes(\"subscription\"))return\"Paid\";if(t.includes(\"login\"))return\"Login\"};function z(e,t,r,n){let{campaign:o,articleType:c,abTestGroup:a,placementType:p,experiment:i,legacy:s,contentName:m,pulseEvents:l}=t,g=400,d=\"\",h=0;function k(P){var b,x,E,U,$;try{let T=P.target,f=(b=T==null?void 0:T.closest)==null?void 0:b.call(T,\"a\");if(!f)return;let S=f.textContent||f.getAttribute(\"href\")||`${p} button`,N=`a|${S}`,W=Date.now();if(N===d&&W-h<g)return;d=N,h=W;let C=K(f),H=C===\"Purchase\"?B(f):[];l.tpaas&&e.trackEngagementOffer({placement:{containerName:\"page\",offerPlacement:p},object:{objectId:n,objectSdrn:r,campaign:o,name:m,offerCodes:H,offerType:A(c)},...i?{experiments:[{experimentSdrn:`${r}:experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a||\"\"}]}:{},engagement:{action:\"Click\",elementName:S},page:{},target:{info:{url:(x=f.getAttribute(\"href\"))!=null?x:\"\"}}}).catch(w),l.legacy&&e.trackLegacyClickUIElement({object:{id:u(S),elementType:\"Button\",name:S,containerName:\"Page\",custom:{...s==null?void 0:s.offerData,offerCodes:H}},...s?{origin:s.pulseOrigin}:{},target:{url:($=(U=(E=f.getAttribute(\"href\"))==null?void 0:E.split(\"?\"))==null?void 0:U[0])!=null?$:\"\"},...C?{intent:C}:{},...i?{experiments:[{id:`experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a}]}:{}}).catch(w)}catch{}}return document.addEventListener(\"click\",k,!0),()=>document.removeEventListener(\"click\",k,!0)}function X(e,t,r,n,o){let{campaign:c,articleType:a,abTestGroup:p,placementType:i,experiment:s,offerCodes:m,legacy:l,contentName:g,pulseEvents:d}=t;d.tpaas&&e.trackImpressionOffer({placement:{foldPosition:o,containerName:\"page\",offerPlacement:i},object:{campaign:c,name:g,objectId:n,objectSdrn:r,offerCodes:m!=null?m:[],offerType:A(a)},...s?{experiments:[{experimentSdrn:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p||\"\"}]}:{},page:{},target:{info:{}}}).catch(w),d.legacy&&e.trackLegacyViewUIElement({object:{id:u(g),elementType:i,name:g,placement:{},custom:{...l==null?void 0:l.offerData,...l==null?void 0:l.custom,offerCodes:m}},...s?{experiments:[{id:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p}]}:{},...l?{origin:l.pulseOrigin}:{}}).catch(w)}async function Q(e,t,r){let{placementType:n,legacy:o,pulseEvents:c}=t,a=window.location.pathname,i=`landingpage-${n===\"campaignpage\"?\"CAMPAIGN\":\"STATIC\"}-${_(a)}`.toLowerCase();c.legacy&&await e.trackLegacyViewPage({object:{pageId:i,name:document.title,\"spt:custom\":{...o==null?void 0:o.offerData,...o==null?void 0:o.custom}},origin:o==null?void 0:o.pulseOrigin}),c.tpaas&&await e.trackViewLandingpage({object:{objectId:i,objectSdrn:r,title:document.title},page:{}},{leaveTracking:{objectElement:\"body\",pageElement:\"body\",objectResizable:!1}})}var M=e=>e===\"campaignpage\"||e===\"staticpage\";var I={name:\"@schibsted/sps-sdk\",version:\"5.1.0\",description:\"SPS SDK for node.js\",packageManager:\"pnpm@10.27.0\",engines:{node:\">=18.0.0\"},repository:{type:\"git\",url:\"https://schibsted.ghe.com/urs-ma/sps-sdk.git\"},publishConfig:{access:\"public\",registry:\"https://registry.npmjs.org/\"},author:\"Schibsted Subscription Product & Tech\",license:\"UNLICENSED\",type:\"module\",main:\"dist/cjs/index.js\",module:\"dist/esm/index.js\",exports:{\".\":{types:\"./dist/esm/index.d.ts\",import:\"./dist/esm/index.js\",require:\"./dist/cjs/index.js\"}},files:[\"dist\"],scripts:{preinstall:\"npx only-allow pnpm\",build:\"npm run build:clean && npm run build:public-scripts && npm run build:esm && npm run build:cjs\",\"build:clean\":\"rm -rf dist/cjs dist/esm\",\"build:esm\":\"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json\",\"build:cjs\":`tsc -p tsconfig.cjs.json && tsc-alias -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json`,\"build:sps-pulse-helpers\":\"tsup --config packages/sps-pulse-helpers/tsup.config.ts\",\"build:pulse-tracker-proxy\":\"tsup --config packages/pulse-tracker-proxy/tsup.config.ts\",\"build:public-scripts\":\"npm run build:sps-pulse-helpers && npm run build:pulse-tracker-proxy && node scripts/generate-public-scripts-content.js\",test:\"node --experimental-vm-modules node_modules/jest/bin/jest.js\",lint:\"eslint .\",\"release:alpha\":\"npm publish --tag alpha\",\"release:beta\":\"npm publish --tag beta\"},devDependencies:{\"@jest/globals\":\"^30.0.0\",\"@schibsted/pulse-tracker-proxy\":\"^2.0.0-rc.19\",\"@semantic-release/changelog\":\"^6.0.3\",\"@semantic-release/git\":\"^10.0.1\",\"@snoam/mono-ma-shared-configs\":\"^1.1.0\",\"@types/jest\":\"30.0.0\",\"@types/node\":\"^24.0.3\",\"conventional-changelog-conventionalcommits\":\"^9.1.0\",eslint:\"^9.29.0\",jest:\"^30.0.0\",\"jest-environment-jsdom\":\"^30.0.2\",\"jest-fixed-jsdom\":\"^0.0.11\",msw:\"^2.13.0\",prettier:\"3.9.4\",\"semantic-release\":\"^25.0.8\",\"ts-jest\":\"^29.4.0\",\"ts-node\":\"^10.9.2\",\"tsc-alias\":\"^1.8.16\",tsup:\"^8.5.1\",typescript:\"^5.9.3\"},peerDependencies:{\"@schibsted/pulse-sdk\":\">=8.0.0-rc.19\"},dependencies:{\"@schibsted/consent-url-utils\":\"^2.0.0\"}};var J=!1,Z=!1,ee=\"script[data-sps-pulse-config='true']\",w=e=>console.error(`[SPS-Pulse-Helpers] Failed to send Pulse event. Events are dropped if the host page runs an older @schibsted/pulse-sdk. SPS SDK ${I.version} requires @schibsted/pulse-sdk ${I.peerDependencies[\"@schibsted/pulse-sdk\"]}.`,e),u=e=>e.toLowerCase().replace(/ /g,\"-\").replace(/[^-a-z:0-9]/g,\"\"),_=e=>{var t,r;return(e==null?void 0:e.replace((r=(t=window.__landingpages)==null?void 0:t.rootUrl)!=null?r:\"\",\"\").replace(/^\\/|\\/$/g,\"\"))||\"\"};async function te(){if(console.log(\"[SPS-Pulse-Helpers] boot initiated\"),J)return;J=!0;let e=null;try{let t=document.querySelector(ee);if(!t){console.warn(`[SPS-Pulse-Helpers] Config script tag not found with selector ${ee}`);return}e=JSON.parse(t.textContent)}catch(t){console.warn(\"[SPS-Pulse-Helpers] Failed to parse config from script tag\",t);return}try{let t=window.getPulseTrackerProxy;if(!t||typeof t!=\"function\"){console.warn(\"[SPS-Pulse-Helpers] PulseTrackerProxy not available\");return}let{placementType:r,publication:n,contentName:o}=e,c=M(r)?_(window.location.pathname):u(o),a=`sdrn:${n}:element:offer:${r}:${c}`,p=crypto==null?void 0:crypto.randomUUID(),i=await t({component:\"SPS-SDK\",componentVersion:I.version});z(i,e,a,p);let s=k=>{Z||(Z=!0,X(i,e,a,p,k))};if(M(r)){await Q(i,e,a),s(\"Above\");return}let m=window.frameElement,l=window.parent.IntersectionObserver;if(!m||!l){console.warn(\"[SPS-Pulse-Helpers] No iframe or IntersectionObserver available. Pulse View event will not be fired.\");return}let g=\"Unknown\",d=!0,h=new l(k=>{var E;let P=k[0],b=(E=P==null?void 0:P.intersectionRatio)!=null?E:0,x=(P==null?void 0:P.isIntersecting)&&b>=1/3;d&&(d=!1,g=x?\"Above\":\"Below\"),x&&(h.disconnect(),s(g))},{root:null,threshold:[0,1/3]});h.observe(m)}catch(t){console.warn(\"[SPS-Pulse-Helpers] boot failed\",t)}}te();return ae(de);})();\n";
|
|
3
3
|
readonly "pulse-tracker-proxy": "\"use strict\";var PulseTrackerProxyBundle=(()=>{var y=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var O=(e,r,t,o)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let a of v(r))!M.call(e,a)&&a!==t&&y(e,a,{get:()=>r[a],enumerable:!(o=R(r,a))||o.enumerable});return e};var U=e=>O(y({},\"__esModule\",{value:!0}),e);var G={};var k=\"pulse-tracker-proxy\",x=`${k}:request`,H=`${k}:ack`,T=`${k}:invoke`,h=`${k}:return`,l=`${k}:return-error`,f=[\"trackAnonymousViewUIElement\",\"trackEngagementAd\",\"trackEngagementAffiliate\",\"trackEngagementAudio\",\"trackEngagementForm\",\"trackEngagementHealthUIElement\",\"trackEngagementOffer\",\"trackEngagementSchoolUIElement\",\"trackEngagementSportsUIElement\",\"trackEngagementTeaser\",\"trackEngagementTvModule\",\"trackEngagementUIElement\",\"trackEngagementVideo\",\"trackEngagementVideoAd\",\"trackEngagementWidget\",\"trackCompletedHealthAction\",\"trackImpressionAd\",\"trackImpressionAdSlot\",\"trackImpressionAffiliate\",\"trackImpressionForm\",\"trackImpressionHealthUIElement\",\"trackImpressionOffer\",\"trackImpressionPlayer\",\"trackImpressionSchoolUIElement\",\"trackImpressionSportsUIElement\",\"trackImpressionTeaser\",\"trackImpressionUIElement\",\"trackImpressionWidget\",\"trackLoadAd\",\"trackRequestAd\",\"trackLeaveArticle\",\"trackLeaveAudioPage\",\"trackLeaveError\",\"trackLeaveFrontpage\",\"trackLeaveLandingpage\",\"trackLeaveListing\",\"trackLeaveLockedArticle\",\"trackLeaveLockedAudioPage\",\"trackLeaveLockedPage\",\"trackLeaveLockedVideoPage\",\"trackLeavePage\",\"trackLeaveSchoolPage\",\"trackLeaveSportsPage\",\"trackLeaveVideoPage\",\"trackLeaveWeather\",\"trackViewArticle\",\"trackViewAudioPage\",\"trackViewError\",\"trackViewFrontpage\",\"trackViewHealthPage\",\"trackViewLandingpage\",\"trackViewListing\",\"trackViewLockedArticle\",\"trackViewLockedAudioPage\",\"trackViewLockedPage\",\"trackViewLockedVideoPage\",\"trackViewPage\",\"trackViewSchoolPage\",\"trackViewSportsPage\",\"trackViewTitle\",\"trackViewVideoPage\",\"trackViewWeather\",\"trackLegacyViewArticle\",\"trackLegacyViewLoginPoster\",\"trackLegacyViewSalesPoster\",\"trackLegacyViewListing\",\"trackLegacyViewFrontpage\",\"trackLegacyViewPage\",\"trackLegacyViewUIElement\",\"trackLegacyClickUIElement\"];function m(e){return e!==null&&typeof e==\"object\"&&\"type\"in e&&typeof e.type==\"string\"&&e.type.startsWith(k)}function g(e,{target:r,timeout:t,debug:o=()=>{}}){return new Promise((a,i)=>{let c=new MessageChannel,n=t?setTimeout(()=>{c.port1.close(),i(new Error(`Message of type ${e.type} timed out`))},t):void 0,p=s=>{if(o(\"[Pulse Tracker Proxy] Received the response on the MessageChannel\",s),!m(s.data)){o(\"[Pulse Tracker Proxy] Response was not a valid Proxy Message\",s.data);return}s.data.type===l&&(o(\"[Pulse Tracker Proxy] Received an return error response\",s.data.error),clearTimeout(n),c.port1.close(),i(new Error(s.data.error))),o(\"[Pulse Tracker Proxy] Received a valid response\",s.data),clearTimeout(n),c.port1.close(),a(s.data)};c.port1.onmessage=p,o(\"[Pulse Tracker Proxy] Sending message to target window\",e),r.postMessage(e,\"*\",[c.port2])})}var V=\"2.0.0-rc.19\";function u(e){let r=\"tracker\"in e&&typeof e.tracker==\"object\"?e.tracker:{};return{...e,tracker:{...r,proxyVersion:V}}}function w(e,r,t){let o=\"provider\"in e&&typeof e.provider==\"object\"?e.provider:{};return{...e,provider:{...o,component:r,componentVersion:t}}}var d=class{constructor(r,t,o,a){this.target=r,this.component=t,this.componentVersion=o,this.debug=a}track(...r){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",r);let[t,o,...a]=r,i=u(o),c=w(i,this.component,this.componentVersion),n=[t,c,...a];return this.invoke({method:\"track\",args:n})}async invoke(r){this.debug(\"[Pulse Tracker Proxy] Invoking remote function\",r);let t=await g({type:T,payload:r},{target:this.target});if(!m(t))throw this.debug(\"[Pulse Tracker Proxy] Invalid response from proxy\",t),new Error(\"Invalid response from proxy\");if(t.type===l)throw this.debug(\"[Pulse Tracker Proxy] Error response from proxy\",t.error),new Error(t.error);if(t.type===h)return this.debug(\"[Pulse Tracker Proxy] Successful response from proxy\",t.payload),t.payload;throw this.debug(\"[Pulse Tracker Proxy] Unhandled response from proxy\",t),new Error(\"Unexpected response from proxy\")}};var C=Object.fromEntries(f.map(e=>[e,function(...r){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",r);let[t,...o]=r,a=u(t),c=[w(a,this.component,this.componentVersion),...o];return this.invoke({method:e,args:c})}]));function W(){return class extends d{constructor(e,r,t,o){super(e,r,t,o),o(\"[Pulse TPaaS Proxy] Initialized\"),Object.assign(this,C)}}}var A=W();function L({component:e,componentVersion:r,window:t=globalThis.window,target:o=t.parent,timeout:a=5e3,retries:i=3,retryTimeout:c=1e3,debug:n=()=>{}}){if(n(\"[Pulse Tracker Proxy] Trying to establish connection...\",{target:o,timeout:a,retries:i}),!o)return Promise.reject(new Error(\"Target window not provided. Possibly window.parent is not available.\"));let p,s=!1,I=new Promise((P,E)=>{p=setTimeout(()=>{s=!0,n(\"[Pulse Tracker Proxy] Ack timeout. Sorry, target seems to not support the proxy.\"),E(new Error(`Pulse tracker proxy not found within ${a} ms`))},a)}),_=(async()=>{for(let P=0;P<i;P++){if(s)throw n(\"[Pulse Tracker Proxy] Configured timeout has passed before the next attempt\"),new Error(\"Configured timeout has passed before the next attempt.\");try{n(`[Pulse Tracker Proxy] Sending request to target window (attempt: ${P+1})...`),await g({type:x},{target:o,timeout:c})}catch(E){n(`[Pulse Tracker Proxy] Ack Request failed: ${E}`);continue}return clearTimeout(p),n(`[Pulse Tracker Proxy] Ack Request successful (attempt: ${P+1})`),!e||!r?(n(\"[Pulse Tracker Proxy] `component` or `componentVersion` is not set - cannot create pulse tracker.\"),Promise.reject(new Error(\"`component` or `componentVersion` is not set - cannot create pulse tracker.\"))):new A(o,e,r,n)}throw clearTimeout(p),n(\"[Pulse Tracker Proxy] Retries exhausted. Target did not respond. Failing.\"),new Error(\"Failed to establish connection with pulse tracker proxy\")})();return Promise.race([I,_])}var S;window.getPulseTrackerProxy=(S=window.getPulseTrackerProxy)!=null?S:L;return U(G);})();\n";
|
|
4
4
|
};
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PUBLIC_SCRIPTS_CONTENT = void 0;
|
|
4
4
|
// Generated from dist/public-scripts — do not edit manually
|
|
5
5
|
exports.PUBLIC_SCRIPTS_CONTENT = {
|
|
6
|
-
"sps-pulse-helpers": "\"use strict\";var SpsPulseHelpersBundle=(()=>{var F=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var se=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of oe(t))!ne.call(e,o)&&o!==r&&F(e,o,{get:()=>t[o],enumerable:!(n=re(t,o))||n.enumerable});return e};var ae=e=>se(F({},\"__esModule\",{value:!0}),e);var de={};var y=\"pulse-tracker-proxy\",ie=`${y}:request`,fe=`${y}:ack`,D=`${y}:invoke`,G=`${y}:return`,L=`${y}:return-error`,q=[\"trackAnonymousViewUIElement\",\"trackEngagementAd\",\"trackEngagementAffiliate\",\"trackEngagementAudio\",\"trackEngagementForm\",\"trackEngagementHealthUIElement\",\"trackEngagementOffer\",\"trackEngagementSchoolUIElement\",\"trackEngagementSportsUIElement\",\"trackEngagementTeaser\",\"trackEngagementTvModule\",\"trackEngagementUIElement\",\"trackEngagementVideo\",\"trackEngagementVideoAd\",\"trackEngagementWidget\",\"trackCompletedHealthAction\",\"trackImpressionAd\",\"trackImpressionAdSlot\",\"trackImpressionAffiliate\",\"trackImpressionForm\",\"trackImpressionHealthUIElement\",\"trackImpressionOffer\",\"trackImpressionPlayer\",\"trackImpressionSchoolUIElement\",\"trackImpressionSportsUIElement\",\"trackImpressionTeaser\",\"trackImpressionUIElement\",\"trackImpressionWidget\",\"trackLoadAd\",\"trackRequestAd\",\"trackLeaveArticle\",\"trackLeaveAudioPage\",\"trackLeaveError\",\"trackLeaveFrontpage\",\"trackLeaveLandingpage\",\"trackLeaveListing\",\"trackLeaveLockedArticle\",\"trackLeaveLockedAudioPage\",\"trackLeaveLockedPage\",\"trackLeaveLockedVideoPage\",\"trackLeavePage\",\"trackLeaveSchoolPage\",\"trackLeaveSportsPage\",\"trackLeaveVideoPage\",\"trackLeaveWeather\",\"trackViewArticle\",\"trackViewAudioPage\",\"trackViewError\",\"trackViewFrontpage\",\"trackViewHealthPage\",\"trackViewLandingpage\",\"trackViewListing\",\"trackViewLockedArticle\",\"trackViewLockedAudioPage\",\"trackViewLockedPage\",\"trackViewLockedVideoPage\",\"trackViewPage\",\"trackViewSchoolPage\",\"trackViewSportsPage\",\"trackViewTitle\",\"trackViewVideoPage\",\"trackViewWeather\",\"trackLegacyViewArticle\",\"trackLegacyViewLoginPoster\",\"trackLegacyViewSalesPoster\",\"trackLegacyViewListing\",\"trackLegacyViewFrontpage\",\"trackLegacyViewPage\",\"trackLegacyViewUIElement\",\"trackLegacyClickUIElement\"];function V(e){return e!==null&&typeof e==\"object\"&&\"type\"in e&&typeof e.type==\"string\"&&e.type.startsWith(y)}function O(e,{target:t,timeout:r,debug:n=()=>{}}){return new Promise((o,c)=>{let a=new MessageChannel,p=r?setTimeout(()=>{a.port1.close(),c(new Error(`Message of type ${e.type} timed out`))},r):void 0,i=s=>{if(n(\"[Pulse Tracker Proxy] Received the response on the MessageChannel\",s),!V(s.data)){n(\"[Pulse Tracker Proxy] Response was not a valid Proxy Message\",s.data);return}s.data.type===L&&(n(\"[Pulse Tracker Proxy] Received an return error response\",s.data.error),clearTimeout(p),a.port1.close(),c(new Error(s.data.error))),n(\"[Pulse Tracker Proxy] Received a valid response\",s.data),clearTimeout(p),a.port1.close(),o(s.data)};a.port1.onmessage=i,n(\"[Pulse Tracker Proxy] Sending message to target window\",e),t.postMessage(e,\"*\",[a.port2])})}var Y=\"2.0.0-rc.19\";function j(e){let t=\"tracker\"in e&&typeof e.tracker==\"object\"?e.tracker:{};return{...e,tracker:{...t,proxyVersion:Y}}}function R(e,t,r){let n=\"provider\"in e&&typeof e.provider==\"object\"?e.provider:{};return{...e,provider:{...n,component:t,componentVersion:r}}}var v=class{constructor(t,r,n,o){this.target=t,this.component=r,this.componentVersion=n,this.debug=o}track(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,n,...o]=t,c=j(n),a=R(c,this.component,this.componentVersion),p=[r,a,...o];return this.invoke({method:\"track\",args:p})}async invoke(t){this.debug(\"[Pulse Tracker Proxy] Invoking remote function\",t);let r=await O({type:D,payload:t},{target:this.target});if(!V(r))throw this.debug(\"[Pulse Tracker Proxy] Invalid response from proxy\",r),new Error(\"Invalid response from proxy\");if(r.type===L)throw this.debug(\"[Pulse Tracker Proxy] Error response from proxy\",r.error),new Error(r.error);if(r.type===G)return this.debug(\"[Pulse Tracker Proxy] Successful response from proxy\",r.payload),r.payload;throw this.debug(\"[Pulse Tracker Proxy] Unhandled response from proxy\",r),new Error(\"Unexpected response from proxy\")}};var ce=Object.fromEntries(q.map(e=>[e,function(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,...n]=t,o=j(r),a=[R(o,this.component,this.componentVersion),...n];return this.invoke({method:e,args:a})}]));function pe(){return class extends v{constructor(e,t,r,n){super(e,t,r,n),n(\"[Pulse TPaaS Proxy] Initialized\"),Object.assign(this,ce)}}}var le=pe();var me=e=>e===\"payment.schibsted.com\"||e.startsWith(\"bestilling.\")||e===\"pay.pre.schibsted.digital\"||e.startsWith(\"test-bestilling.\"),ue=e=>e===\"login.schibsted.com\"||e===\"identity-pre.schibsted.com\",K=e=>{var t;try{let n=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\").hostname;if(ue(n))return\"Login\";if(me(n))return\"Purchase\"}catch{return}};var B=e=>{var t;try{let r=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\"),o=new URLSearchParams(r.search).get(\"code\");return o?o.split(\",\"):[]}catch{return[]}};var A=e=>{var r;let t=(r=e==null?void 0:e.toLowerCase())!=null?r:\"\";if(t.includes(\"meter\"))return\"Meter\";if(t.includes(\"paid\")||t.includes(\"subscription\"))return\"Paid\";if(t.includes(\"login\"))return\"Login\"};function z(e,t,r,n){let{campaign:o,articleType:c,abTestGroup:a,placementType:p,experiment:i,legacy:s,contentName:m,pulseEvents:l}=t,g=400,d=\"\",h=0;function k(P){var b,x,E,U,$;try{let T=P.target,f=(b=T==null?void 0:T.closest)==null?void 0:b.call(T,\"a\");if(!f)return;let S=f.textContent||f.getAttribute(\"href\")||`${p} button`,N=`a|${S}`,W=Date.now();if(N===d&&W-h<g)return;d=N,h=W;let C=K(f),H=C===\"Purchase\"?B(f):[];l.tpaas&&e.trackEngagementOffer({placement:{containerName:\"page\",offerPlacement:p},object:{objectId:n,objectSdrn:r,campaign:o,name:m,offerCodes:H,offerType:A(c)},...i?{experiments:[{experimentSdrn:`${r}:experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a||\"\"}]}:{},engagement:{action:\"Click\",elementName:S},page:{},target:{info:{url:(x=f.getAttribute(\"href\"))!=null?x:\"\"}}}).catch(w),l.legacy&&e.trackLegacyClickUIElement({object:{id:u(S),elementType:\"Button\",name:S,containerName:\"Page\",custom:{...s==null?void 0:s.offerData,offerCodes:H}},...s?{origin:s.pulseOrigin}:{},target:{url:($=(U=(E=f.getAttribute(\"href\"))==null?void 0:E.split(\"?\"))==null?void 0:U[0])!=null?$:\"\"},...C?{intent:C}:{},...i?{experiments:[{id:`experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a}]}:{}}).catch(w)}catch{}}return document.addEventListener(\"click\",k,!0),()=>document.removeEventListener(\"click\",k,!0)}function X(e,t,r,n,o){let{campaign:c,articleType:a,abTestGroup:p,placementType:i,experiment:s,offerCodes:m,legacy:l,contentName:g,pulseEvents:d}=t;d.tpaas&&e.trackImpressionOffer({placement:{foldPosition:o,containerName:\"page\",offerPlacement:i},object:{campaign:c,name:g,objectId:n,objectSdrn:r,offerCodes:m!=null?m:[],offerType:A(a)},...s?{experiments:[{experimentSdrn:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p||\"\"}]}:{},page:{},target:{info:{}}}).catch(w),d.legacy&&e.trackLegacyViewUIElement({object:{id:u(g),elementType:i,name:g,placement:{},custom:{...l==null?void 0:l.offerData,...l==null?void 0:l.custom,offerCodes:m}},...s?{experiments:[{id:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p}]}:{},...l?{origin:l.pulseOrigin}:{}}).catch(w)}async function Q(e,t,r){let{placementType:n,legacy:o,pulseEvents:c}=t,a=window.location.pathname,i=`landingpage-${n===\"campaignpage\"?\"CAMPAIGN\":\"STATIC\"}-${_(a)}`.toLowerCase();c.legacy&&await e.trackLegacyViewPage({object:{pageId:i,name:document.title,\"spt:custom\":{...o==null?void 0:o.offerData,...o==null?void 0:o.custom}},origin:o==null?void 0:o.pulseOrigin}),c.tpaas&&await e.trackViewLandingpage({object:{objectId:i,objectSdrn:r,title:document.title},page:{}},{leaveTracking:{objectElement:\"body\",pageElement:\"body\",objectResizable:!1}})}var M=e=>e===\"campaignpage\"||e===\"staticpage\";var I={name:\"@schibsted/sps-sdk\",version:\"5.0.0\",description:\"SPS SDK for node.js\",packageManager:\"pnpm@10.27.0\",engines:{node:\">=18.0.0\"},repository:{type:\"git\",url:\"https://schibsted.ghe.com/urs-ma/sps-sdk.git\"},publishConfig:{access:\"public\",registry:\"https://registry.npmjs.org/\"},author:\"Schibsted Subscription Product & Tech\",license:\"UNLICENSED\",type:\"module\",main:\"dist/cjs/index.js\",module:\"dist/esm/index.js\",exports:{\".\":{types:\"./dist/esm/index.d.ts\",import:\"./dist/esm/index.js\",require:\"./dist/cjs/index.js\"}},files:[\"dist\"],scripts:{preinstall:\"npx only-allow pnpm\",build:\"npm run build:clean && npm run build:public-scripts && npm run build:esm && npm run build:cjs\",\"build:clean\":\"rm -rf dist/cjs dist/esm\",\"build:esm\":\"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json\",\"build:cjs\":`tsc -p tsconfig.cjs.json && tsc-alias -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json`,\"build:sps-pulse-helpers\":\"tsup --config packages/sps-pulse-helpers/tsup.config.ts\",\"build:pulse-tracker-proxy\":\"tsup --config packages/pulse-tracker-proxy/tsup.config.ts\",\"build:public-scripts\":\"npm run build:sps-pulse-helpers && npm run build:pulse-tracker-proxy && node scripts/generate-public-scripts-content.js\",test:\"node --experimental-vm-modules node_modules/jest/bin/jest.js\",lint:\"eslint .\",\"release:alpha\":\"npm publish --tag alpha\",\"release:beta\":\"npm publish --tag beta\"},devDependencies:{\"@jest/globals\":\"^30.0.0\",\"@schibsted/pulse-tracker-proxy\":\"^2.0.0-rc.19\",\"@semantic-release/changelog\":\"^6.0.3\",\"@semantic-release/git\":\"^10.0.1\",\"@snoam/mono-ma-shared-configs\":\"^1.1.0\",\"@types/jest\":\"30.0.0\",\"@types/node\":\"^24.0.3\",\"conventional-changelog-conventionalcommits\":\"^9.1.0\",eslint:\"^9.29.0\",jest:\"^30.0.0\",\"jest-environment-jsdom\":\"^30.0.2\",\"jest-fixed-jsdom\":\"^0.0.11\",msw:\"^2.13.0\",prettier:\"3.9.4\",\"semantic-release\":\"^25.0.8\",\"ts-jest\":\"^29.4.0\",\"ts-node\":\"^10.9.2\",\"tsc-alias\":\"^1.8.16\",tsup:\"^8.5.1\",typescript:\"^5.9.3\"},peerDependencies:{\"@schibsted/pulse-sdk\":\">=8.0.0-rc.19\"},dependencies:{\"@schibsted/consent-url-utils\":\"^2.0.0\"}};var J=!1,Z=!1,ee=\"script[data-sps-pulse-config='true']\",w=e=>console.error(`[SPS-Pulse-Helpers] Failed to send Pulse event. Events are dropped if the host page runs an older @schibsted/pulse-sdk. SPS SDK ${I.version} requires @schibsted/pulse-sdk ${I.peerDependencies[\"@schibsted/pulse-sdk\"]}.`,e),u=e=>e.toLowerCase().replace(/ /g,\"-\").replace(/[^-a-z:0-9]/g,\"\"),_=e=>{var t,r;return(e==null?void 0:e.replace((r=(t=window.__landingpages)==null?void 0:t.rootUrl)!=null?r:\"\",\"\").replace(/^\\/|\\/$/g,\"\"))||\"\"};async function te(){if(console.log(\"[SPS-Pulse-Helpers] boot initiated\"),J)return;J=!0;let e=null;try{let t=document.querySelector(ee);if(!t){console.warn(`[SPS-Pulse-Helpers] Config script tag not found with selector ${ee}`);return}e=JSON.parse(t.textContent)}catch(t){console.warn(\"[SPS-Pulse-Helpers] Failed to parse config from script tag\",t);return}try{let t=window.getPulseTrackerProxy;if(!t||typeof t!=\"function\"){console.warn(\"[SPS-Pulse-Helpers] PulseTrackerProxy not available\");return}let{placementType:r,publication:n,contentName:o}=e,c=M(r)?_(window.location.pathname):u(o),a=`sdrn:${n}:element:offer:${r}:${c}`,p=crypto==null?void 0:crypto.randomUUID(),i=await t({component:\"SPS-SDK\",componentVersion:I.version});z(i,e,a,p);let s=k=>{Z||(Z=!0,X(i,e,a,p,k))};if(M(r)){await Q(i,e,a),s(\"Above\");return}let m=window.frameElement,l=window.parent.IntersectionObserver;if(!m||!l){console.warn(\"[SPS-Pulse-Helpers] No iframe or IntersectionObserver available. Pulse View event will not be fired.\");return}let g=\"Unknown\",d=!0,h=new l(k=>{var E;let P=k[0],b=(E=P==null?void 0:P.intersectionRatio)!=null?E:0,x=(P==null?void 0:P.isIntersecting)&&b>=1/3;d&&(d=!1,g=x?\"Above\":\"Below\"),x&&(h.disconnect(),s(g))},{root:null,threshold:[0,1/3]});h.observe(m)}catch(t){console.warn(\"[SPS-Pulse-Helpers] boot failed\",t)}}te();return ae(de);})();\n",
|
|
6
|
+
"sps-pulse-helpers": "\"use strict\";var SpsPulseHelpersBundle=(()=>{var F=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var se=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let o of oe(t))!ne.call(e,o)&&o!==r&&F(e,o,{get:()=>t[o],enumerable:!(n=re(t,o))||n.enumerable});return e};var ae=e=>se(F({},\"__esModule\",{value:!0}),e);var de={};var y=\"pulse-tracker-proxy\",ie=`${y}:request`,fe=`${y}:ack`,D=`${y}:invoke`,G=`${y}:return`,L=`${y}:return-error`,q=[\"trackAnonymousViewUIElement\",\"trackEngagementAd\",\"trackEngagementAffiliate\",\"trackEngagementAudio\",\"trackEngagementForm\",\"trackEngagementHealthUIElement\",\"trackEngagementOffer\",\"trackEngagementSchoolUIElement\",\"trackEngagementSportsUIElement\",\"trackEngagementTeaser\",\"trackEngagementTvModule\",\"trackEngagementUIElement\",\"trackEngagementVideo\",\"trackEngagementVideoAd\",\"trackEngagementWidget\",\"trackCompletedHealthAction\",\"trackImpressionAd\",\"trackImpressionAdSlot\",\"trackImpressionAffiliate\",\"trackImpressionForm\",\"trackImpressionHealthUIElement\",\"trackImpressionOffer\",\"trackImpressionPlayer\",\"trackImpressionSchoolUIElement\",\"trackImpressionSportsUIElement\",\"trackImpressionTeaser\",\"trackImpressionUIElement\",\"trackImpressionWidget\",\"trackLoadAd\",\"trackRequestAd\",\"trackLeaveArticle\",\"trackLeaveAudioPage\",\"trackLeaveError\",\"trackLeaveFrontpage\",\"trackLeaveLandingpage\",\"trackLeaveListing\",\"trackLeaveLockedArticle\",\"trackLeaveLockedAudioPage\",\"trackLeaveLockedPage\",\"trackLeaveLockedVideoPage\",\"trackLeavePage\",\"trackLeaveSchoolPage\",\"trackLeaveSportsPage\",\"trackLeaveVideoPage\",\"trackLeaveWeather\",\"trackViewArticle\",\"trackViewAudioPage\",\"trackViewError\",\"trackViewFrontpage\",\"trackViewHealthPage\",\"trackViewLandingpage\",\"trackViewListing\",\"trackViewLockedArticle\",\"trackViewLockedAudioPage\",\"trackViewLockedPage\",\"trackViewLockedVideoPage\",\"trackViewPage\",\"trackViewSchoolPage\",\"trackViewSportsPage\",\"trackViewTitle\",\"trackViewVideoPage\",\"trackViewWeather\",\"trackLegacyViewArticle\",\"trackLegacyViewLoginPoster\",\"trackLegacyViewSalesPoster\",\"trackLegacyViewListing\",\"trackLegacyViewFrontpage\",\"trackLegacyViewPage\",\"trackLegacyViewUIElement\",\"trackLegacyClickUIElement\"];function V(e){return e!==null&&typeof e==\"object\"&&\"type\"in e&&typeof e.type==\"string\"&&e.type.startsWith(y)}function O(e,{target:t,timeout:r,debug:n=()=>{}}){return new Promise((o,c)=>{let a=new MessageChannel,p=r?setTimeout(()=>{a.port1.close(),c(new Error(`Message of type ${e.type} timed out`))},r):void 0,i=s=>{if(n(\"[Pulse Tracker Proxy] Received the response on the MessageChannel\",s),!V(s.data)){n(\"[Pulse Tracker Proxy] Response was not a valid Proxy Message\",s.data);return}s.data.type===L&&(n(\"[Pulse Tracker Proxy] Received an return error response\",s.data.error),clearTimeout(p),a.port1.close(),c(new Error(s.data.error))),n(\"[Pulse Tracker Proxy] Received a valid response\",s.data),clearTimeout(p),a.port1.close(),o(s.data)};a.port1.onmessage=i,n(\"[Pulse Tracker Proxy] Sending message to target window\",e),t.postMessage(e,\"*\",[a.port2])})}var Y=\"2.0.0-rc.19\";function j(e){let t=\"tracker\"in e&&typeof e.tracker==\"object\"?e.tracker:{};return{...e,tracker:{...t,proxyVersion:Y}}}function R(e,t,r){let n=\"provider\"in e&&typeof e.provider==\"object\"?e.provider:{};return{...e,provider:{...n,component:t,componentVersion:r}}}var v=class{constructor(t,r,n,o){this.target=t,this.component=r,this.componentVersion=n,this.debug=o}track(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,n,...o]=t,c=j(n),a=R(c,this.component,this.componentVersion),p=[r,a,...o];return this.invoke({method:\"track\",args:p})}async invoke(t){this.debug(\"[Pulse Tracker Proxy] Invoking remote function\",t);let r=await O({type:D,payload:t},{target:this.target});if(!V(r))throw this.debug(\"[Pulse Tracker Proxy] Invalid response from proxy\",r),new Error(\"Invalid response from proxy\");if(r.type===L)throw this.debug(\"[Pulse Tracker Proxy] Error response from proxy\",r.error),new Error(r.error);if(r.type===G)return this.debug(\"[Pulse Tracker Proxy] Successful response from proxy\",r.payload),r.payload;throw this.debug(\"[Pulse Tracker Proxy] Unhandled response from proxy\",r),new Error(\"Unexpected response from proxy\")}};var ce=Object.fromEntries(q.map(e=>[e,function(...t){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",t);let[r,...n]=t,o=j(r),a=[R(o,this.component,this.componentVersion),...n];return this.invoke({method:e,args:a})}]));function pe(){return class extends v{constructor(e,t,r,n){super(e,t,r,n),n(\"[Pulse TPaaS Proxy] Initialized\"),Object.assign(this,ce)}}}var le=pe();var me=e=>e===\"payment.schibsted.com\"||e.startsWith(\"bestilling.\")||e===\"pay.pre.schibsted.digital\"||e.startsWith(\"test-bestilling.\"),ue=e=>e===\"login.schibsted.com\"||e===\"identity-pre.schibsted.com\",K=e=>{var t;try{let n=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\").hostname;if(ue(n))return\"Login\";if(me(n))return\"Purchase\"}catch{return}};var B=e=>{var t;try{let r=new URL((t=e.getAttribute(\"href\"))!=null?t:\"\"),o=new URLSearchParams(r.search).get(\"code\");return o?o.split(\",\"):[]}catch{return[]}};var A=e=>{var r;let t=(r=e==null?void 0:e.toLowerCase())!=null?r:\"\";if(t.includes(\"meter\"))return\"Meter\";if(t.includes(\"paid\")||t.includes(\"subscription\"))return\"Paid\";if(t.includes(\"login\"))return\"Login\"};function z(e,t,r,n){let{campaign:o,articleType:c,abTestGroup:a,placementType:p,experiment:i,legacy:s,contentName:m,pulseEvents:l}=t,g=400,d=\"\",h=0;function k(P){var b,x,E,U,$;try{let T=P.target,f=(b=T==null?void 0:T.closest)==null?void 0:b.call(T,\"a\");if(!f)return;let S=f.textContent||f.getAttribute(\"href\")||`${p} button`,N=`a|${S}`,W=Date.now();if(N===d&&W-h<g)return;d=N,h=W;let C=K(f),H=C===\"Purchase\"?B(f):[];l.tpaas&&e.trackEngagementOffer({placement:{containerName:\"page\",offerPlacement:p},object:{objectId:n,objectSdrn:r,campaign:o,name:m,offerCodes:H,offerType:A(c)},...i?{experiments:[{experimentSdrn:`${r}:experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a||\"\"}]}:{},engagement:{action:\"Click\",elementName:S},page:{},target:{info:{url:(x=f.getAttribute(\"href\"))!=null?x:\"\"}}}).catch(w),l.legacy&&e.trackLegacyClickUIElement({object:{id:u(S),elementType:\"Button\",name:S,containerName:\"Page\",custom:{...s==null?void 0:s.offerData,offerCodes:H}},...s?{origin:s.pulseOrigin}:{},target:{url:($=(U=(E=f.getAttribute(\"href\"))==null?void 0:E.split(\"?\"))==null?void 0:U[0])!=null?$:\"\"},...C?{intent:C}:{},...i?{experiments:[{id:`experiment:${u(i)}`,name:i,platform:\"SPS\",variant:a}]}:{}}).catch(w)}catch{}}return document.addEventListener(\"click\",k,!0),()=>document.removeEventListener(\"click\",k,!0)}function X(e,t,r,n,o){let{campaign:c,articleType:a,abTestGroup:p,placementType:i,experiment:s,offerCodes:m,legacy:l,contentName:g,pulseEvents:d}=t;d.tpaas&&e.trackImpressionOffer({placement:{foldPosition:o,containerName:\"page\",offerPlacement:i},object:{campaign:c,name:g,objectId:n,objectSdrn:r,offerCodes:m!=null?m:[],offerType:A(a)},...s?{experiments:[{experimentSdrn:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p||\"\"}]}:{},page:{},target:{info:{}}}).catch(w),d.legacy&&e.trackLegacyViewUIElement({object:{id:u(g),elementType:i,name:g,placement:{},custom:{...l==null?void 0:l.offerData,...l==null?void 0:l.custom,offerCodes:m}},...s?{experiments:[{id:`${r}:experiment:${u(s)}`,name:s,platform:\"SPS\",variant:p}]}:{},...l?{origin:l.pulseOrigin}:{}}).catch(w)}async function Q(e,t,r){let{placementType:n,legacy:o,pulseEvents:c}=t,a=window.location.pathname,i=`landingpage-${n===\"campaignpage\"?\"CAMPAIGN\":\"STATIC\"}-${_(a)}`.toLowerCase();c.legacy&&await e.trackLegacyViewPage({object:{pageId:i,name:document.title,\"spt:custom\":{...o==null?void 0:o.offerData,...o==null?void 0:o.custom}},origin:o==null?void 0:o.pulseOrigin}),c.tpaas&&await e.trackViewLandingpage({object:{objectId:i,objectSdrn:r,title:document.title},page:{}},{leaveTracking:{objectElement:\"body\",pageElement:\"body\",objectResizable:!1}})}var M=e=>e===\"campaignpage\"||e===\"staticpage\";var I={name:\"@schibsted/sps-sdk\",version:\"5.1.0\",description:\"SPS SDK for node.js\",packageManager:\"pnpm@10.27.0\",engines:{node:\">=18.0.0\"},repository:{type:\"git\",url:\"https://schibsted.ghe.com/urs-ma/sps-sdk.git\"},publishConfig:{access:\"public\",registry:\"https://registry.npmjs.org/\"},author:\"Schibsted Subscription Product & Tech\",license:\"UNLICENSED\",type:\"module\",main:\"dist/cjs/index.js\",module:\"dist/esm/index.js\",exports:{\".\":{types:\"./dist/esm/index.d.ts\",import:\"./dist/esm/index.js\",require:\"./dist/cjs/index.js\"}},files:[\"dist\"],scripts:{preinstall:\"npx only-allow pnpm\",build:\"npm run build:clean && npm run build:public-scripts && npm run build:esm && npm run build:cjs\",\"build:clean\":\"rm -rf dist/cjs dist/esm\",\"build:esm\":\"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json\",\"build:cjs\":`tsc -p tsconfig.cjs.json && tsc-alias -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json`,\"build:sps-pulse-helpers\":\"tsup --config packages/sps-pulse-helpers/tsup.config.ts\",\"build:pulse-tracker-proxy\":\"tsup --config packages/pulse-tracker-proxy/tsup.config.ts\",\"build:public-scripts\":\"npm run build:sps-pulse-helpers && npm run build:pulse-tracker-proxy && node scripts/generate-public-scripts-content.js\",test:\"node --experimental-vm-modules node_modules/jest/bin/jest.js\",lint:\"eslint .\",\"release:alpha\":\"npm publish --tag alpha\",\"release:beta\":\"npm publish --tag beta\"},devDependencies:{\"@jest/globals\":\"^30.0.0\",\"@schibsted/pulse-tracker-proxy\":\"^2.0.0-rc.19\",\"@semantic-release/changelog\":\"^6.0.3\",\"@semantic-release/git\":\"^10.0.1\",\"@snoam/mono-ma-shared-configs\":\"^1.1.0\",\"@types/jest\":\"30.0.0\",\"@types/node\":\"^24.0.3\",\"conventional-changelog-conventionalcommits\":\"^9.1.0\",eslint:\"^9.29.0\",jest:\"^30.0.0\",\"jest-environment-jsdom\":\"^30.0.2\",\"jest-fixed-jsdom\":\"^0.0.11\",msw:\"^2.13.0\",prettier:\"3.9.4\",\"semantic-release\":\"^25.0.8\",\"ts-jest\":\"^29.4.0\",\"ts-node\":\"^10.9.2\",\"tsc-alias\":\"^1.8.16\",tsup:\"^8.5.1\",typescript:\"^5.9.3\"},peerDependencies:{\"@schibsted/pulse-sdk\":\">=8.0.0-rc.19\"},dependencies:{\"@schibsted/consent-url-utils\":\"^2.0.0\"}};var J=!1,Z=!1,ee=\"script[data-sps-pulse-config='true']\",w=e=>console.error(`[SPS-Pulse-Helpers] Failed to send Pulse event. Events are dropped if the host page runs an older @schibsted/pulse-sdk. SPS SDK ${I.version} requires @schibsted/pulse-sdk ${I.peerDependencies[\"@schibsted/pulse-sdk\"]}.`,e),u=e=>e.toLowerCase().replace(/ /g,\"-\").replace(/[^-a-z:0-9]/g,\"\"),_=e=>{var t,r;return(e==null?void 0:e.replace((r=(t=window.__landingpages)==null?void 0:t.rootUrl)!=null?r:\"\",\"\").replace(/^\\/|\\/$/g,\"\"))||\"\"};async function te(){if(console.log(\"[SPS-Pulse-Helpers] boot initiated\"),J)return;J=!0;let e=null;try{let t=document.querySelector(ee);if(!t){console.warn(`[SPS-Pulse-Helpers] Config script tag not found with selector ${ee}`);return}e=JSON.parse(t.textContent)}catch(t){console.warn(\"[SPS-Pulse-Helpers] Failed to parse config from script tag\",t);return}try{let t=window.getPulseTrackerProxy;if(!t||typeof t!=\"function\"){console.warn(\"[SPS-Pulse-Helpers] PulseTrackerProxy not available\");return}let{placementType:r,publication:n,contentName:o}=e,c=M(r)?_(window.location.pathname):u(o),a=`sdrn:${n}:element:offer:${r}:${c}`,p=crypto==null?void 0:crypto.randomUUID(),i=await t({component:\"SPS-SDK\",componentVersion:I.version});z(i,e,a,p);let s=k=>{Z||(Z=!0,X(i,e,a,p,k))};if(M(r)){await Q(i,e,a),s(\"Above\");return}let m=window.frameElement,l=window.parent.IntersectionObserver;if(!m||!l){console.warn(\"[SPS-Pulse-Helpers] No iframe or IntersectionObserver available. Pulse View event will not be fired.\");return}let g=\"Unknown\",d=!0,h=new l(k=>{var E;let P=k[0],b=(E=P==null?void 0:P.intersectionRatio)!=null?E:0,x=(P==null?void 0:P.isIntersecting)&&b>=1/3;d&&(d=!1,g=x?\"Above\":\"Below\"),x&&(h.disconnect(),s(g))},{root:null,threshold:[0,1/3]});h.observe(m)}catch(t){console.warn(\"[SPS-Pulse-Helpers] boot failed\",t)}}te();return ae(de);})();\n",
|
|
7
7
|
"pulse-tracker-proxy": "\"use strict\";var PulseTrackerProxyBundle=(()=>{var y=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var O=(e,r,t,o)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let a of v(r))!M.call(e,a)&&a!==t&&y(e,a,{get:()=>r[a],enumerable:!(o=R(r,a))||o.enumerable});return e};var U=e=>O(y({},\"__esModule\",{value:!0}),e);var G={};var k=\"pulse-tracker-proxy\",x=`${k}:request`,H=`${k}:ack`,T=`${k}:invoke`,h=`${k}:return`,l=`${k}:return-error`,f=[\"trackAnonymousViewUIElement\",\"trackEngagementAd\",\"trackEngagementAffiliate\",\"trackEngagementAudio\",\"trackEngagementForm\",\"trackEngagementHealthUIElement\",\"trackEngagementOffer\",\"trackEngagementSchoolUIElement\",\"trackEngagementSportsUIElement\",\"trackEngagementTeaser\",\"trackEngagementTvModule\",\"trackEngagementUIElement\",\"trackEngagementVideo\",\"trackEngagementVideoAd\",\"trackEngagementWidget\",\"trackCompletedHealthAction\",\"trackImpressionAd\",\"trackImpressionAdSlot\",\"trackImpressionAffiliate\",\"trackImpressionForm\",\"trackImpressionHealthUIElement\",\"trackImpressionOffer\",\"trackImpressionPlayer\",\"trackImpressionSchoolUIElement\",\"trackImpressionSportsUIElement\",\"trackImpressionTeaser\",\"trackImpressionUIElement\",\"trackImpressionWidget\",\"trackLoadAd\",\"trackRequestAd\",\"trackLeaveArticle\",\"trackLeaveAudioPage\",\"trackLeaveError\",\"trackLeaveFrontpage\",\"trackLeaveLandingpage\",\"trackLeaveListing\",\"trackLeaveLockedArticle\",\"trackLeaveLockedAudioPage\",\"trackLeaveLockedPage\",\"trackLeaveLockedVideoPage\",\"trackLeavePage\",\"trackLeaveSchoolPage\",\"trackLeaveSportsPage\",\"trackLeaveVideoPage\",\"trackLeaveWeather\",\"trackViewArticle\",\"trackViewAudioPage\",\"trackViewError\",\"trackViewFrontpage\",\"trackViewHealthPage\",\"trackViewLandingpage\",\"trackViewListing\",\"trackViewLockedArticle\",\"trackViewLockedAudioPage\",\"trackViewLockedPage\",\"trackViewLockedVideoPage\",\"trackViewPage\",\"trackViewSchoolPage\",\"trackViewSportsPage\",\"trackViewTitle\",\"trackViewVideoPage\",\"trackViewWeather\",\"trackLegacyViewArticle\",\"trackLegacyViewLoginPoster\",\"trackLegacyViewSalesPoster\",\"trackLegacyViewListing\",\"trackLegacyViewFrontpage\",\"trackLegacyViewPage\",\"trackLegacyViewUIElement\",\"trackLegacyClickUIElement\"];function m(e){return e!==null&&typeof e==\"object\"&&\"type\"in e&&typeof e.type==\"string\"&&e.type.startsWith(k)}function g(e,{target:r,timeout:t,debug:o=()=>{}}){return new Promise((a,i)=>{let c=new MessageChannel,n=t?setTimeout(()=>{c.port1.close(),i(new Error(`Message of type ${e.type} timed out`))},t):void 0,p=s=>{if(o(\"[Pulse Tracker Proxy] Received the response on the MessageChannel\",s),!m(s.data)){o(\"[Pulse Tracker Proxy] Response was not a valid Proxy Message\",s.data);return}s.data.type===l&&(o(\"[Pulse Tracker Proxy] Received an return error response\",s.data.error),clearTimeout(n),c.port1.close(),i(new Error(s.data.error))),o(\"[Pulse Tracker Proxy] Received a valid response\",s.data),clearTimeout(n),c.port1.close(),a(s.data)};c.port1.onmessage=p,o(\"[Pulse Tracker Proxy] Sending message to target window\",e),r.postMessage(e,\"*\",[c.port2])})}var V=\"2.0.0-rc.19\";function u(e){let r=\"tracker\"in e&&typeof e.tracker==\"object\"?e.tracker:{};return{...e,tracker:{...r,proxyVersion:V}}}function w(e,r,t){let o=\"provider\"in e&&typeof e.provider==\"object\"?e.provider:{};return{...e,provider:{...o,component:r,componentVersion:t}}}var d=class{constructor(r,t,o,a){this.target=r,this.component=t,this.componentVersion=o,this.debug=a}track(...r){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",r);let[t,o,...a]=r,i=u(o),c=w(i,this.component,this.componentVersion),n=[t,c,...a];return this.invoke({method:\"track\",args:n})}async invoke(r){this.debug(\"[Pulse Tracker Proxy] Invoking remote function\",r);let t=await g({type:T,payload:r},{target:this.target});if(!m(t))throw this.debug(\"[Pulse Tracker Proxy] Invalid response from proxy\",t),new Error(\"Invalid response from proxy\");if(t.type===l)throw this.debug(\"[Pulse Tracker Proxy] Error response from proxy\",t.error),new Error(t.error);if(t.type===h)return this.debug(\"[Pulse Tracker Proxy] Successful response from proxy\",t.payload),t.payload;throw this.debug(\"[Pulse Tracker Proxy] Unhandled response from proxy\",t),new Error(\"Unexpected response from proxy\")}};var C=Object.fromEntries(f.map(e=>[e,function(...r){this.debug(\"[Pulse Tracker Proxy] Calling `track`\",r);let[t,...o]=r,a=u(t),c=[w(a,this.component,this.componentVersion),...o];return this.invoke({method:e,args:c})}]));function W(){return class extends d{constructor(e,r,t,o){super(e,r,t,o),o(\"[Pulse TPaaS Proxy] Initialized\"),Object.assign(this,C)}}}var A=W();function L({component:e,componentVersion:r,window:t=globalThis.window,target:o=t.parent,timeout:a=5e3,retries:i=3,retryTimeout:c=1e3,debug:n=()=>{}}){if(n(\"[Pulse Tracker Proxy] Trying to establish connection...\",{target:o,timeout:a,retries:i}),!o)return Promise.reject(new Error(\"Target window not provided. Possibly window.parent is not available.\"));let p,s=!1,I=new Promise((P,E)=>{p=setTimeout(()=>{s=!0,n(\"[Pulse Tracker Proxy] Ack timeout. Sorry, target seems to not support the proxy.\"),E(new Error(`Pulse tracker proxy not found within ${a} ms`))},a)}),_=(async()=>{for(let P=0;P<i;P++){if(s)throw n(\"[Pulse Tracker Proxy] Configured timeout has passed before the next attempt\"),new Error(\"Configured timeout has passed before the next attempt.\");try{n(`[Pulse Tracker Proxy] Sending request to target window (attempt: ${P+1})...`),await g({type:x},{target:o,timeout:c})}catch(E){n(`[Pulse Tracker Proxy] Ack Request failed: ${E}`);continue}return clearTimeout(p),n(`[Pulse Tracker Proxy] Ack Request successful (attempt: ${P+1})`),!e||!r?(n(\"[Pulse Tracker Proxy] `component` or `componentVersion` is not set - cannot create pulse tracker.\"),Promise.reject(new Error(\"`component` or `componentVersion` is not set - cannot create pulse tracker.\"))):new A(o,e,r,n)}throw clearTimeout(p),n(\"[Pulse Tracker Proxy] Retries exhausted. Target did not respond. Failing.\"),new Error(\"Failed to establish connection with pulse tracker proxy\")})();return Promise.race([I,_])}var S;window.getPulseTrackerProxy=(S=window.getPulseTrackerProxy)!=null?S:L;return U(G);})();\n"
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=public-scripts-content.js.map
|
package/dist/cjs/sps.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type Environment, type SpsParams, type GetPosterByDecisionParams, type
|
|
|
2
2
|
import { type ContentType, type TrackingData, type TrackingParamsProps } from "./tracking/create-tracking-params.js";
|
|
3
3
|
import { SpsPublication } from "./sps/publication.js";
|
|
4
4
|
import { type SPSPosterResponse } from "./apiClient.js";
|
|
5
|
-
import type { PlacementType, PlacementTypeWithOptionalFallback, PlacementTypeWithRequiredFallback } from "./sps/placement.js";
|
|
5
|
+
import type { PlacementType, PlacementTypeWithOptionalFallback, PlacementTypeWithRequiredFallback, PlacementTypeWithStringContent } from "./sps/placement.js";
|
|
6
6
|
/**
|
|
7
7
|
* The full poster response enriched with segment names, tracking data, and Pulse event objects.
|
|
8
8
|
* Returned by {@link SPS.getPoster} and {@link SPS.getPosterByDecision}.
|
|
@@ -94,25 +94,32 @@ export type SpsRequestOptions<T extends PlacementType> = {
|
|
|
94
94
|
timeoutMs?: number;
|
|
95
95
|
};
|
|
96
96
|
/**
|
|
97
|
-
* Options for {@link SPS.
|
|
97
|
+
* Options for {@link SPS.renderFrontpagePlacements} and {@link SPS.renderArticlePagePlacements}.
|
|
98
98
|
* @typeParam T - The placement type
|
|
99
99
|
* @typeParam P - The params shape sent to SPS for this request
|
|
100
100
|
*/
|
|
101
101
|
export type SpsContextPlacementsOptions<T extends PlacementType, P extends SpsParams = SpsParams> = Omit<SpsRequestOptions<T>, "fallbackPoster" | "showFallbackPosterOnNoContent"> & {
|
|
102
102
|
/** Query params forwarded to the SPS API for the whole request. */
|
|
103
103
|
params?: P;
|
|
104
|
-
/** Placement types to exclude from the priority-ordered result. */
|
|
105
|
-
excludedPlacementTypes?: PlacementType[];
|
|
106
104
|
/**
|
|
107
105
|
* Per-type fallback posters to return when the SPS context API call fails entirely
|
|
108
106
|
* (network error or non-OK response). Each entry is enriched the same way as a real poster.
|
|
109
107
|
*/
|
|
110
108
|
fallbackPosters?: FallbackPostersMap;
|
|
111
109
|
};
|
|
110
|
+
/**
|
|
111
|
+
* Options for {@link renderFrontpagePlacements} and {@link renderArticlePagePlacements}.
|
|
112
|
+
* The SDK sets `context` in `params` and fires TPaaS Pulse events.
|
|
113
|
+
* @typeParam P - The params shape sent to SPS for this request
|
|
114
|
+
*/
|
|
115
|
+
export type RenderPlacementsOptions<P extends SpsParams = SpsParams> = Pick<SpsOptions, "publication" | "environment" | "cookieDomain"> & Omit<SpsContextPlacementsOptions<PlacementType, P>, "params" | "pulseEvents" | "tracking" | "generateLoginUrl"> & {
|
|
116
|
+
/** Query params forwarded to the SPS API for the whole request. `context` is set by the SDK. */
|
|
117
|
+
params?: Omit<P, "context">;
|
|
118
|
+
};
|
|
112
119
|
/**
|
|
113
120
|
* Maps placement types to their fallback poster content.
|
|
114
|
-
* Used by {@link SPS.
|
|
115
|
-
* to
|
|
121
|
+
* Used by {@link SPS.renderFrontpagePlacements} and {@link SPS.renderArticlePagePlacements}
|
|
122
|
+
* to render pre-configured posters when the SPS API call fails entirely.
|
|
116
123
|
*/
|
|
117
124
|
export type FallbackPostersMap = {
|
|
118
125
|
[T in PlacementType]?: SPSPosterResponse<T>;
|
|
@@ -126,8 +133,8 @@ export type SpsContextDecisionsOptions<P extends SpsParams = SpsParams> = {
|
|
|
126
133
|
params?: P;
|
|
127
134
|
/** Pass `req.headers.cookie` when calling server-side. */
|
|
128
135
|
cookies?: string;
|
|
129
|
-
/** Placement types to
|
|
130
|
-
|
|
136
|
+
/** Placement types to include in the priority-ordered result. */
|
|
137
|
+
placementTypes?: PlacementType[];
|
|
131
138
|
};
|
|
132
139
|
/**
|
|
133
140
|
* Variant of {@link SpsRequestOptions} that requires a `fallbackPoster` and forces
|
|
@@ -138,6 +145,14 @@ export type SpsRequestOptionsWithFallback<T extends PlacementType> = SpsRequestO
|
|
|
138
145
|
fallbackPoster: SPSPosterResponse<T>;
|
|
139
146
|
showFallbackPosterOnNoContent: true;
|
|
140
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* A placement type and the host element its poster is rendered in.
|
|
150
|
+
* Used by {@link SPS.renderFrontpagePlacements} and {@link SPS.renderArticlePagePlacements}.
|
|
151
|
+
*/
|
|
152
|
+
export type PlacementElement = {
|
|
153
|
+
placementType: PlacementTypeWithStringContent;
|
|
154
|
+
element: HTMLElement;
|
|
155
|
+
};
|
|
141
156
|
/**
|
|
142
157
|
* Options for the dismiss functionality, enabling a placement to be hidden when
|
|
143
158
|
* an element with `data-dismiss-on-click` is clicked inside the placement.
|
|
@@ -295,6 +310,28 @@ export declare class SPS {
|
|
|
295
310
|
*/
|
|
296
311
|
getPosterByDecision: GetPosterByDecision;
|
|
297
312
|
private enrichPosterResponse;
|
|
313
|
+
/**
|
|
314
|
+
* Fetches priority-ordered placements for the frontpage context and renders each one
|
|
315
|
+
* in an iframe inside its element. Must be called from a browser environment.
|
|
316
|
+
* Also exported as {@link renderFrontpagePlacements}, which needs no SDK instance.
|
|
317
|
+
*
|
|
318
|
+
* @param placements - The placement types to fetch, each with the element to render it in.
|
|
319
|
+
* @param options - The publication and environment to request from, and request options including `params`.
|
|
320
|
+
* @returns The placement types that were rendered.
|
|
321
|
+
*/
|
|
322
|
+
static renderFrontpagePlacements<P extends FrontpageParams = FrontpageParams>(placements: PlacementElement[], options: RenderPlacementsOptions<P>): Promise<PlacementTypeWithStringContent[]>;
|
|
323
|
+
/**
|
|
324
|
+
* Fetches priority-ordered placements for the article page context and renders each one
|
|
325
|
+
* in an iframe inside its element. Must be called from a browser environment.
|
|
326
|
+
* Also exported as {@link renderArticlePagePlacements}, which needs no SDK instance.
|
|
327
|
+
*
|
|
328
|
+
* @param placements - The placement types to fetch, each with the element to render it in.
|
|
329
|
+
* @param options - The publication and environment to request from, and request options including `params`.
|
|
330
|
+
* @returns The placement types that were rendered.
|
|
331
|
+
*/
|
|
332
|
+
static renderArticlePagePlacements<P extends ArticlePageParams = ArticlePageParams>(placements: PlacementElement[], options: RenderPlacementsOptions<P>): Promise<PlacementTypeWithStringContent[]>;
|
|
333
|
+
private static renderContextPlacements;
|
|
334
|
+
private renderPlacements;
|
|
298
335
|
/**
|
|
299
336
|
* Fetches priority-ordered placements (full content) for the frontpage context.
|
|
300
337
|
* Must be called from a browser environment.
|
|
@@ -302,12 +339,11 @@ export declare class SPS {
|
|
|
302
339
|
* Applies the same post-processing as {@link SPS.getPoster}: rewrites login/redirect
|
|
303
340
|
* placeholder variables and appends tracking search params to links.
|
|
304
341
|
*
|
|
305
|
-
* @param
|
|
342
|
+
* @param placementTypes - The placement types to request.
|
|
343
|
+
* @param options - Request options including tracking context, URL rewrite callbacks, and `params`.
|
|
306
344
|
* @returns Array of enriched placements for the frontpage context, fallback posters (if configured) on API failure, or `[]` otherwise.
|
|
307
345
|
*/
|
|
308
|
-
getFrontpagePlacements
|
|
309
|
-
type: PlacementType;
|
|
310
|
-
})[]>;
|
|
346
|
+
private getFrontpagePlacements;
|
|
311
347
|
/**
|
|
312
348
|
* Fetches priority-ordered placements (full content) for the article page context.
|
|
313
349
|
* Must be called from a browser environment.
|
|
@@ -315,12 +351,11 @@ export declare class SPS {
|
|
|
315
351
|
* Applies the same post-processing as {@link SPS.getPoster}: rewrites login/redirect
|
|
316
352
|
* placeholder variables and appends tracking search params to links.
|
|
317
353
|
*
|
|
318
|
-
* @param
|
|
354
|
+
* @param placementTypes - The placement types to request.
|
|
355
|
+
* @param options - Request options including tracking context, URL rewrite callbacks, and `params`.
|
|
319
356
|
* @returns Array of enriched placements for the article page context, fallback posters (if configured) on API failure, or `[]` otherwise.
|
|
320
357
|
*/
|
|
321
|
-
getArticlePagePlacements
|
|
322
|
-
type: PlacementType;
|
|
323
|
-
})[]>;
|
|
358
|
+
private getArticlePagePlacements;
|
|
324
359
|
private enrichContextPlacements;
|
|
325
360
|
private enrichFallbackPosters;
|
|
326
361
|
/**
|
|
@@ -329,7 +364,7 @@ export declare class SPS {
|
|
|
329
364
|
*
|
|
330
365
|
* Returns values compatible with {@link SPS.getPosterByDecision}.
|
|
331
366
|
*
|
|
332
|
-
* @param options - Optional. Pass `cookies: req.headers.cookie` when calling server-side, and/or `params`/`
|
|
367
|
+
* @param options - Optional. Pass `cookies: req.headers.cookie` when calling server-side, and/or `params`/`placementTypes`.
|
|
333
368
|
* @returns Array of decisions for the frontpage context, or `[]` on error.
|
|
334
369
|
*/
|
|
335
370
|
getFrontpageDecisions<P extends FrontpageParams = FrontpageParams>(options?: SpsContextDecisionsOptions<P>): Promise<Decision<PlacementType>[]>;
|
|
@@ -339,9 +374,11 @@ export declare class SPS {
|
|
|
339
374
|
*
|
|
340
375
|
* Returns values compatible with {@link SPS.getPosterByDecision}.
|
|
341
376
|
*
|
|
342
|
-
* @param options - Optional. Pass `cookies: req.headers.cookie` when calling server-side, and/or `params`/`
|
|
377
|
+
* @param options - Optional. Pass `cookies: req.headers.cookie` when calling server-side, and/or `params`/`placementTypes`.
|
|
343
378
|
* @returns Array of decisions for the article page context, or `[]` on error.
|
|
344
379
|
*/
|
|
345
380
|
getArticlePageDecisions<P extends ArticlePageParams = ArticlePageParams>(options?: SpsContextDecisionsOptions<P>): Promise<Decision<PlacementType>[]>;
|
|
346
381
|
}
|
|
382
|
+
export declare const renderFrontpagePlacements: typeof SPS.renderFrontpagePlacements;
|
|
383
|
+
export declare const renderArticlePagePlacements: typeof SPS.renderArticlePagePlacements;
|
|
347
384
|
export {};
|