@schibsted/sps-sdk 4.2.0 → 4.2.1-CBT-18833.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/apiClient.d.ts +4 -2
- package/dist/cjs/apiClient.js +9 -2
- package/dist/cjs/apiClient.js.map +1 -1
- package/dist/cjs/sps.d.ts +4 -2
- package/dist/cjs/sps.js +8 -5
- package/dist/cjs/sps.js.map +1 -1
- package/dist/esm/apiClient.d.ts +4 -2
- package/dist/esm/apiClient.js +9 -2
- package/dist/esm/apiClient.js.map +1 -1
- package/dist/esm/sps.d.ts +4 -2
- package/dist/esm/sps.js +8 -5
- package/dist/esm/sps.js.map +1 -1
- package/dist/public-scripts/sps-pulse-helpers.v2.0.1.min.js +1 -1
- package/package.json +1 -1
package/dist/cjs/apiClient.d.ts
CHANGED
|
@@ -80,9 +80,10 @@ export type GetPosterByDecisionParams = {
|
|
|
80
80
|
* @param params - Decisioning parameters to pass as query string.
|
|
81
81
|
* @param fallbackPoster - Optional poster to return on API errors or missing content.
|
|
82
82
|
* @param showFallbackPosterOnNoContent - When `true`, returns the fallback poster even on empty content responses.
|
|
83
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch. Abort errors are always re-thrown, even when a fallback poster is provided.
|
|
83
84
|
* @returns The poster response wrapped in a fail-reason envelope, or `null` when no content is available. {@link SPSPosterResponseWithFailReason<T extends PlacementType>}
|
|
84
85
|
*/
|
|
85
|
-
export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>(url: string, params: U, fallbackPoster?: SPSPosterResponse<T>, showFallbackPosterOnNoContent?: boolean) => Promise<SPSPosterResponseWithFailReason<T> | null>;
|
|
86
|
+
export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>(url: string, params: U, fallbackPoster?: SPSPosterResponse<T>, showFallbackPosterOnNoContent?: boolean, signal?: AbortSignal) => Promise<SPSPosterResponseWithFailReason<T> | null>;
|
|
86
87
|
/**
|
|
87
88
|
* Fetches a decision from the SPS API.
|
|
88
89
|
* Intended to be called from a server environment where a user JWT token is available.
|
|
@@ -93,6 +94,7 @@ export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>
|
|
|
93
94
|
* @param params - Decisioning parameters such as `accessCheck`, `pids`, and `source`.
|
|
94
95
|
* @param userJwtToken - Optional JWT token for the current user, forwarded in the `x-user-jwt` header.
|
|
95
96
|
* @param cookie - Optional cookie string to forward in the `Cookie` header.
|
|
97
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch.
|
|
96
98
|
* @returns The resolved decision parameters including the `contentKey`.
|
|
97
99
|
*/
|
|
98
|
-
export declare const fetchDecision: <T extends SpsParams = DefaultGetDecisionParams>(url: string, params: T, userJwtToken?: string, cookie?: string) => Promise<GetPosterByDecisionParams>;
|
|
100
|
+
export declare const fetchDecision: <T extends SpsParams = DefaultGetDecisionParams>(url: string, params: T, userJwtToken?: string, cookie?: string, signal?: AbortSignal) => Promise<GetPosterByDecisionParams>;
|
package/dist/cjs/apiClient.js
CHANGED
|
@@ -14,9 +14,10 @@ const url_1 = require("./utils/url.js");
|
|
|
14
14
|
* @param params - Decisioning parameters to pass as query string.
|
|
15
15
|
* @param fallbackPoster - Optional poster to return on API errors or missing content.
|
|
16
16
|
* @param showFallbackPosterOnNoContent - When `true`, returns the fallback poster even on empty content responses.
|
|
17
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch. Abort errors are always re-thrown, even when a fallback poster is provided.
|
|
17
18
|
* @returns The poster response wrapped in a fail-reason envelope, or `null` when no content is available. {@link SPSPosterResponseWithFailReason<T extends PlacementType>}
|
|
18
19
|
*/
|
|
19
|
-
const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoContent = false) => {
|
|
20
|
+
const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoContent = false, signal) => {
|
|
20
21
|
try {
|
|
21
22
|
const paramsFromDocument = (0, queryBuilder_1.getParamsFromDocument)();
|
|
22
23
|
const queryParams = (0, queryBuilder_1.convertParamsToQueryParams)({
|
|
@@ -25,6 +26,7 @@ const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoCo
|
|
|
25
26
|
});
|
|
26
27
|
const posterResponse = await fetch((0, url_1.addSearchParams)(url, queryParams), {
|
|
27
28
|
credentials: "include",
|
|
29
|
+
signal,
|
|
28
30
|
});
|
|
29
31
|
if (!posterResponse.ok) {
|
|
30
32
|
if (posterResponse.status === 404) {
|
|
@@ -53,6 +55,9 @@ const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoCo
|
|
|
53
55
|
};
|
|
54
56
|
}
|
|
55
57
|
catch (error) {
|
|
58
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
56
61
|
if (fallbackPoster) {
|
|
57
62
|
console.error(error);
|
|
58
63
|
return {
|
|
@@ -74,9 +79,10 @@ exports.fetchPoster = fetchPoster;
|
|
|
74
79
|
* @param params - Decisioning parameters such as `accessCheck`, `pids`, and `source`.
|
|
75
80
|
* @param userJwtToken - Optional JWT token for the current user, forwarded in the `x-user-jwt` header.
|
|
76
81
|
* @param cookie - Optional cookie string to forward in the `Cookie` header.
|
|
82
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch.
|
|
77
83
|
* @returns The resolved decision parameters including the `contentKey`.
|
|
78
84
|
*/
|
|
79
|
-
const fetchDecision = async (url, params, userJwtToken, cookie) => {
|
|
85
|
+
const fetchDecision = async (url, params, userJwtToken, cookie, signal) => {
|
|
80
86
|
const queryParams = (0, queryBuilder_1.convertParamsToQueryParams)({
|
|
81
87
|
...params,
|
|
82
88
|
});
|
|
@@ -86,6 +92,7 @@ const fetchDecision = async (url, params, userJwtToken, cookie) => {
|
|
|
86
92
|
...(cookie && { Cookie: cookie }),
|
|
87
93
|
},
|
|
88
94
|
credentials: "include",
|
|
95
|
+
signal,
|
|
89
96
|
});
|
|
90
97
|
if (!decisionResponse.ok) {
|
|
91
98
|
throw new Error(`Error fetching decision from SPS: ${decisionResponse.status} ${decisionResponse.statusText}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/apiClient.ts"],"names":[],"mappings":";;;AAAA,qDAK4B;AAC5B,qCAA8C;AA4E9C
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/apiClient.ts"],"names":[],"mappings":";;;AAAA,qDAK4B;AAC5B,qCAA8C;AA4E9C;;;;;;;;;;;;;GAaG;AACI,MAAM,WAAW,GAAG,KAAK,EAC9B,GAAW,EACX,MAAS,EACT,cAAqC,EACrC,6BAA6B,GAAG,KAAK,EACrC,MAAoB,EACgC,EAAE;IACtD,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,IAAA,oCAAqB,GAAE,CAAC;QACnD,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC;YAC7C,GAAG,kBAAkB;YACrB,GAAG,MAAM;SACV,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,IAAA,qBAAe,EAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YACpE,WAAW,EAAE,SAAS;YACtB,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACvB,IAAI,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAClC,IAAI,cAAc,EAAE,CAAC;oBACnB,OAAO;wBACL,cAAc,EAAE,cAAc;wBAC9B,UAAU,EAAE,gEAAgE;qBAC7E,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mCAAmC,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,CACxF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAgD,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAEhG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,cAAc,IAAI,6BAA6B,EAAE,CAAC;gBACpD,OAAO;oBACL,cAAc,EAAE,cAAc;oBAC9B,UAAU,EAAE,8DAA8D;iBAC3E,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,cAAc,EAAE,cAAsC;SACvD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;gBACL,cAAc,EAAE,cAAc;gBAC9B,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACnE,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AA7DW,QAAA,WAAW,eA6DtB;AAEF;;;;;;;;;;;;GAYG;AACI,MAAM,aAAa,GAAG,KAAK,EAChC,GAAW,EACX,MAAS,EACT,YAAqB,EACrB,MAAe,EACf,MAAoB,EACgB,EAAE;IACtC,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC;QAC7C,GAAG,MAAM;KACV,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,IAAA,qBAAe,EAAC,GAAG,EAAE,WAAW,CAAC,EAAE;QACtE,OAAO,EAAE;YACP,YAAY,EAAE,YAAY,IAAI,EAAE;YAChC,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;SAClC;QACD,WAAW,EAAE,SAAS;QACtB,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,qCAAqC,gBAAgB,CAAC,MAAM,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC,CAAC;AA1BW,QAAA,aAAa,iBA0BxB"}
|
package/dist/cjs/sps.d.ts
CHANGED
|
@@ -66,6 +66,8 @@ export type SpsRequestOptions<T extends PlacementType> = {
|
|
|
66
66
|
fallbackPoster?: SPSPosterResponse<T>;
|
|
67
67
|
/** When `true`, renders the `fallbackPoster` even when SPS returns no content. */
|
|
68
68
|
showFallbackPosterOnNoContent?: boolean;
|
|
69
|
+
/** Optional `AbortSignal` to cancel the fetch. */
|
|
70
|
+
signal?: AbortSignal;
|
|
69
71
|
/**
|
|
70
72
|
* Whether to append tracking search params to links inside the poster content.
|
|
71
73
|
* @defaultValue `true`
|
|
@@ -135,8 +137,8 @@ interface GetPoster {
|
|
|
135
137
|
<T extends PlacementTypeWithOptionalProps, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props?: GetPosterProps<T, U> & SpsRequestOptions<T>, dismiss?: DismissOptions): Promise<Poster<T> | null>;
|
|
136
138
|
}
|
|
137
139
|
interface GetDecision {
|
|
138
|
-
<T extends PlacementType, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string): Promise<Decision<T> | null>;
|
|
139
|
-
<T extends PlacementTypeWithOptionalProps, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props?: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string): Promise<Decision<T> | null>;
|
|
140
|
+
<T extends PlacementType, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string, signal?: AbortSignal): Promise<Decision<T> | null>;
|
|
141
|
+
<T extends PlacementTypeWithOptionalProps, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props?: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string, signal?: AbortSignal): Promise<Decision<T> | null>;
|
|
140
142
|
}
|
|
141
143
|
type ParamsFor<T extends PlacementType> = T extends keyof PlacementTypeToParamsMap ? PlacementTypeToParamsMap[T] : SpsParams;
|
|
142
144
|
type GetPosterProps<T extends PlacementType, U extends ParamsFor<T> = ParamsFor<T>> = T extends keyof PlacementTypeToParamsMap ? {
|
package/dist/cjs/sps.js
CHANGED
|
@@ -56,7 +56,7 @@ class SPS {
|
|
|
56
56
|
if (dismissOptions && (0, dismiss_1.isDismissed)(placementType, dismissOptions.elementId)) {
|
|
57
57
|
return null;
|
|
58
58
|
}
|
|
59
|
-
const poster = await (0, apiClient_1.fetchPoster)(`${this.endpoint}/${this.publication}/${placementType}`, props.params || {}, props.fallbackPoster);
|
|
59
|
+
const poster = await (0, apiClient_1.fetchPoster)(`${this.endpoint}/${this.publication}/${placementType}`, props.params || {}, props.fallbackPoster, props.showFallbackPosterOnNoContent, props.signal);
|
|
60
60
|
if (!poster) {
|
|
61
61
|
return null;
|
|
62
62
|
}
|
|
@@ -131,17 +131,20 @@ class SPS {
|
|
|
131
131
|
* @param cookie - Optional cookie string from the incoming server request, forwarded to SPS.
|
|
132
132
|
* @returns A {@link Decision} object containing the resolved `contentKey`.
|
|
133
133
|
*/
|
|
134
|
-
getDecision = async (placementType, props = {}, userJwtToken, cookie) => {
|
|
134
|
+
getDecision = async (placementType, props = {}, userJwtToken, cookie, signal) => {
|
|
135
135
|
this.validateServerEnvironment();
|
|
136
136
|
try {
|
|
137
|
-
const decisionResponse = await (0, apiClient_1.fetchDecision)(`${this.endpoint}/${this.publication}/${placementType}/decision`, props.params || {}, userJwtToken, cookie);
|
|
137
|
+
const decisionResponse = await (0, apiClient_1.fetchDecision)(`${this.endpoint}/${this.publication}/${placementType}/decision`, props.params || {}, userJwtToken, cookie, signal);
|
|
138
138
|
return {
|
|
139
139
|
...decisionResponse,
|
|
140
140
|
placementType,
|
|
141
141
|
articleType: props.params?.articleType || props.params?.posterType,
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
|
-
catch {
|
|
144
|
+
catch (error) {
|
|
145
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
145
148
|
return {
|
|
146
149
|
contentKey: "sps:not-working",
|
|
147
150
|
placementType,
|
|
@@ -172,7 +175,7 @@ class SPS {
|
|
|
172
175
|
if (dismissOptions && (0, dismiss_1.isDismissed)(placementType, dismissOptions.elementId)) {
|
|
173
176
|
return null;
|
|
174
177
|
}
|
|
175
|
-
const poster = await (0, apiClient_1.fetchPoster)(`${this.endpoint}/poster/${encodeURIComponent(contentKey)}`, {}, props.fallbackPoster);
|
|
178
|
+
const poster = await (0, apiClient_1.fetchPoster)(`${this.endpoint}/poster/${encodeURIComponent(contentKey)}`, {}, props.fallbackPoster, props.showFallbackPosterOnNoContent, props.signal);
|
|
176
179
|
if (!poster) {
|
|
177
180
|
return null;
|
|
178
181
|
}
|
package/dist/cjs/sps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sps.js","sourceRoot":"","sources":["../../src/sps.ts"],"names":[],"mappings":";;;AAAA,wBASW;AACX,8EAK2C;AAC3C,uFAG6C;AAE7C,2CAAiF;AAOjF,+CAA4D;
|
|
1
|
+
{"version":3,"file":"sps.js","sourceRoot":"","sources":["../../src/sps.ts"],"names":[],"mappings":";;;AAAA,wBASW;AACX,8EAK2C;AAC3C,uFAG6C;AAE7C,2CAAiF;AAOjF,+CAA4D;AA2N5D;;;GAGG;AACH,MAAa,GAAG;IACd,2DAA2D;IAC3D,WAAW,CAAS;IACpB,8CAA8C;IAC9C,QAAQ,CAAS;IACjB,oDAAoD;IACpD,WAAW,CAAc;IAEzB;;;OAGG;IACH,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,EAAE,WAAW,GAAG,YAAY,EAAc;QAC5F,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAA,cAAW,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,SAAS,GAAc,KAAK,EACjC,aAAgB,EAChB,QAA0D,EAAE,EAC5D,cAA+B,EACX,EAAE;QACtB,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEvC,IAAI,cAAc,IAAI,IAAA,qBAAW,EAAC,aAAa,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAW,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAW,EAC9B,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,EAAE,EACvD,KAAK,CAAC,MAAM,IAAI,EAAE,EAClB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,6BAA6B,EACnC,KAAK,CAAC,MAAM,CACb,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAW,CAAC;QACrB,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,cAAsC,CAAC;QAErE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,GACvE,MAAM,IAAA,6CAAoB,EACxB;YACE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;YAC1C,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,IAAI,SAAS;YACrD,MAAM;YACN,QAAQ;YACR,GAAG,KAAK,CAAC,QAAQ;SAClB,EACD;YACE,aAAa;YACb,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,WAAW,EACR,KAAK,CAAC,MAAM,EAAE,UAAqB;gBACnC,KAAK,CAAC,MAAM,EAAE,WAAsB;gBACrC,SAAS;YACX,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAiB;YACxC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAgB;YACpC,UAAU,EAAE,MAAM,EAAE,UAAU;YAC9B,WAAW,EAAE,cAAc,CAAC,WAAW,IAAI,SAAS;SACrD,CACF,CAAC;QAEJ,IAAI,OAAO,CAAC;QAEZ,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAChD,MAAM,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAEtD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;QAE9B,IAAI,OAAO,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,GAAG,IAAA,2DAA2B,EACnC,cAAmE,EACnE;gBACE,QAAQ,EAAE,CAAC,MAAM,gBAAgB,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;gBAC1D,WAAW,EACT,CAAC,MAAM,mBAAmB,EAAE,CAAC,cAAc,CAAC,CAAC;oBAC7C,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACxD,YAAY;gBACZ,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;gBACpD,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,aAAa,EAAE,aAA+C;gBAC9D,WAAW;gBACX,SAAS,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;gBACrC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAqB;aACjD,CACwB,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAA,0DAA0B,EAAC,cAAc,CAAC,OAAsB,EAAE;gBAC1E,YAAY;gBACZ,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;aACrD,CAA2B,CAAC;QAC/B,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAA,oBAAU,EACR,aAAa,EACb,cAAc,CAAC,SAAS,EACxB,cAAc,CAAC,YAAY,IAAI,KAAK,EACpC,cAAc,CAAC,SAAS,IAAI,IAAI,CACjC,CAAC,CAAC,iBAAiB;QACtB,CAAC;QAED,OAAO;YACL,GAAG,cAAc;YACjB,YAAY,EAAE,cAAc,CAAC,YAAY,IAAI,EAAE;YAC/C,OAAO;YACP,YAAY;YACZ,WAAW;YACX,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;OAeG;IACI,WAAW,GAAgB,KAAK,EACrC,aAAgB,EAChB,QAAmC,EAAE,EACrC,YAAqB,EACrB,MAAe,EACf,MAAoB,EACE,EAAE;QACxB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,gBAAgB,GAA8B,MAAM,IAAA,yBAAa,EACrE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,WAAW,EAChE,KAAK,CAAC,MAAM,IAAI,EAAE,EAClB,YAAY,EACZ,MAAM,EACN,MAAM,CACP,CAAC;YAEF,OAAO;gBACL,GAAG,gBAAgB;gBACnB,aAAa;gBACb,WAAW,EAAG,KAAK,CAAC,MAAM,EAAE,WAAsB,IAAK,KAAK,CAAC,MAAM,EAAE,UAAqB;aAC3F,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO;gBACL,UAAU,EAAE,iBAAiB;gBAC7B,aAAa;gBACb,WAAW,EAAG,KAAK,CAAC,MAAM,EAAE,WAAsB,IAAK,KAAK,CAAC,MAAM,EAAE,UAAqB;aAC3F,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF;;;;;;;;;;;;;;OAcG;IACI,mBAAmB,GAAwB,KAAK,EACrD,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAe,EACrE,QAA8B,EAAE,EAChC,cAA+B,EAC/B,EAAE;QACF,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAW,CAAC;QACrB,CAAC;QAED,IAAI,cAAc,IAAI,IAAA,qBAAW,EAAC,aAAa,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAW,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAW,EAC9B,GAAG,IAAI,CAAC,QAAQ,WAAW,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAC3D,EAAE,EACF,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,6BAA6B,EACnC,KAAK,CAAC,MAAM,CACb,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAW,CAAC;QACrB,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,GACvE,MAAM,IAAA,6CAAoB,EACxB;YACE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;YAC1C,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,IAAI,SAAS;YACrD,GAAG,KAAK,CAAC,QAAQ;YACjB,MAAM;YACN,QAAQ;SACT,EACD;YACE,aAAa;YACb,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ;YACxC,UAAU,EAAE,MAAM,EAAE,UAAU;YAC9B,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,IAAI,SAAS;SAC5D,CACF,CAAC;QAEJ,IAAI,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;QAE5C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;QAE9B,IAAI,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,GAAG,IAAA,2DAA2B,EACnC,MAAM,CAAC,cAAmE,EAC1E;gBACE,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;gBACvE,WAAW,EACT,CAAC,MAAM,KAAK,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAC1D,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ;gBACnD,YAAY;gBACZ,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;gBACpD,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,aAAa,EAAE,aAA+C;gBAC9D,WAAW;gBACX,SAAS,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;gBACrC,WAAW;aACZ,CAC2C,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAA,0DAA0B,EAAC,MAAM,CAAC,cAAc,CAAC,OAAsB,EAAE;gBACjF,YAAY;gBACZ,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;aACrD,CAA8C,CAAC;QAClD,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,IAAA,oBAAU,EACR,aAAa,EACb,cAAc,CAAC,SAAS,EACxB,MAAM,CAAC,cAAc,CAAC,YAAY,IAAI,KAAK,EAAE,gBAAgB;YAC7D,MAAM,CAAC,cAAc,CAAC,SAAS,IAAI,IAAI,CACxC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,MAAM,CAAC,cAAc;YACxB,YAAY;YACZ,OAAO;YACP,YAAY;YACZ,WAAW;YACX,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC;CACH;AA9SD,kBA8SC"}
|
package/dist/esm/apiClient.d.ts
CHANGED
|
@@ -80,9 +80,10 @@ export type GetPosterByDecisionParams = {
|
|
|
80
80
|
* @param params - Decisioning parameters to pass as query string.
|
|
81
81
|
* @param fallbackPoster - Optional poster to return on API errors or missing content.
|
|
82
82
|
* @param showFallbackPosterOnNoContent - When `true`, returns the fallback poster even on empty content responses.
|
|
83
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch. Abort errors are always re-thrown, even when a fallback poster is provided.
|
|
83
84
|
* @returns The poster response wrapped in a fail-reason envelope, or `null` when no content is available. {@link SPSPosterResponseWithFailReason<T extends PlacementType>}
|
|
84
85
|
*/
|
|
85
|
-
export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>(url: string, params: U, fallbackPoster?: SPSPosterResponse<T>, showFallbackPosterOnNoContent?: boolean) => Promise<SPSPosterResponseWithFailReason<T> | null>;
|
|
86
|
+
export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>(url: string, params: U, fallbackPoster?: SPSPosterResponse<T>, showFallbackPosterOnNoContent?: boolean, signal?: AbortSignal) => Promise<SPSPosterResponseWithFailReason<T> | null>;
|
|
86
87
|
/**
|
|
87
88
|
* Fetches a decision from the SPS API.
|
|
88
89
|
* Intended to be called from a server environment where a user JWT token is available.
|
|
@@ -93,6 +94,7 @@ export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>
|
|
|
93
94
|
* @param params - Decisioning parameters such as `accessCheck`, `pids`, and `source`.
|
|
94
95
|
* @param userJwtToken - Optional JWT token for the current user, forwarded in the `x-user-jwt` header.
|
|
95
96
|
* @param cookie - Optional cookie string to forward in the `Cookie` header.
|
|
97
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch.
|
|
96
98
|
* @returns The resolved decision parameters including the `contentKey`.
|
|
97
99
|
*/
|
|
98
|
-
export declare const fetchDecision: <T extends SpsParams = DefaultGetDecisionParams>(url: string, params: T, userJwtToken?: string, cookie?: string) => Promise<GetPosterByDecisionParams>;
|
|
100
|
+
export declare const fetchDecision: <T extends SpsParams = DefaultGetDecisionParams>(url: string, params: T, userJwtToken?: string, cookie?: string, signal?: AbortSignal) => Promise<GetPosterByDecisionParams>;
|
package/dist/esm/apiClient.js
CHANGED
|
@@ -11,9 +11,10 @@ import { addSearchParams } from "./utils/url.js";
|
|
|
11
11
|
* @param params - Decisioning parameters to pass as query string.
|
|
12
12
|
* @param fallbackPoster - Optional poster to return on API errors or missing content.
|
|
13
13
|
* @param showFallbackPosterOnNoContent - When `true`, returns the fallback poster even on empty content responses.
|
|
14
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch. Abort errors are always re-thrown, even when a fallback poster is provided.
|
|
14
15
|
* @returns The poster response wrapped in a fail-reason envelope, or `null` when no content is available. {@link SPSPosterResponseWithFailReason<T extends PlacementType>}
|
|
15
16
|
*/
|
|
16
|
-
export const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoContent = false) => {
|
|
17
|
+
export const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoContent = false, signal) => {
|
|
17
18
|
try {
|
|
18
19
|
const paramsFromDocument = getParamsFromDocument();
|
|
19
20
|
const queryParams = convertParamsToQueryParams({
|
|
@@ -22,6 +23,7 @@ export const fetchPoster = async (url, params, fallbackPoster, showFallbackPoste
|
|
|
22
23
|
});
|
|
23
24
|
const posterResponse = await fetch(addSearchParams(url, queryParams), {
|
|
24
25
|
credentials: "include",
|
|
26
|
+
signal,
|
|
25
27
|
});
|
|
26
28
|
if (!posterResponse.ok) {
|
|
27
29
|
if (posterResponse.status === 404) {
|
|
@@ -50,6 +52,9 @@ export const fetchPoster = async (url, params, fallbackPoster, showFallbackPoste
|
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
54
|
catch (error) {
|
|
55
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
53
58
|
if (fallbackPoster) {
|
|
54
59
|
console.error(error);
|
|
55
60
|
return {
|
|
@@ -70,9 +75,10 @@ export const fetchPoster = async (url, params, fallbackPoster, showFallbackPoste
|
|
|
70
75
|
* @param params - Decisioning parameters such as `accessCheck`, `pids`, and `source`.
|
|
71
76
|
* @param userJwtToken - Optional JWT token for the current user, forwarded in the `x-user-jwt` header.
|
|
72
77
|
* @param cookie - Optional cookie string to forward in the `Cookie` header.
|
|
78
|
+
* @param signal - Optional `AbortSignal` to cancel the fetch.
|
|
73
79
|
* @returns The resolved decision parameters including the `contentKey`.
|
|
74
80
|
*/
|
|
75
|
-
export const fetchDecision = async (url, params, userJwtToken, cookie) => {
|
|
81
|
+
export const fetchDecision = async (url, params, userJwtToken, cookie, signal) => {
|
|
76
82
|
const queryParams = convertParamsToQueryParams({
|
|
77
83
|
...params,
|
|
78
84
|
});
|
|
@@ -82,6 +88,7 @@ export const fetchDecision = async (url, params, userJwtToken, cookie) => {
|
|
|
82
88
|
...(cookie && { Cookie: cookie }),
|
|
83
89
|
},
|
|
84
90
|
credentials: "include",
|
|
91
|
+
signal,
|
|
85
92
|
});
|
|
86
93
|
if (!decisionResponse.ok) {
|
|
87
94
|
throw new Error(`Error fetching decision from SPS: ${decisionResponse.status} ${decisionResponse.statusText}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4E9C
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/apiClient.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/sps.d.ts
CHANGED
|
@@ -66,6 +66,8 @@ export type SpsRequestOptions<T extends PlacementType> = {
|
|
|
66
66
|
fallbackPoster?: SPSPosterResponse<T>;
|
|
67
67
|
/** When `true`, renders the `fallbackPoster` even when SPS returns no content. */
|
|
68
68
|
showFallbackPosterOnNoContent?: boolean;
|
|
69
|
+
/** Optional `AbortSignal` to cancel the fetch. */
|
|
70
|
+
signal?: AbortSignal;
|
|
69
71
|
/**
|
|
70
72
|
* Whether to append tracking search params to links inside the poster content.
|
|
71
73
|
* @defaultValue `true`
|
|
@@ -135,8 +137,8 @@ interface GetPoster {
|
|
|
135
137
|
<T extends PlacementTypeWithOptionalProps, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props?: GetPosterProps<T, U> & SpsRequestOptions<T>, dismiss?: DismissOptions): Promise<Poster<T> | null>;
|
|
136
138
|
}
|
|
137
139
|
interface GetDecision {
|
|
138
|
-
<T extends PlacementType, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string): Promise<Decision<T> | null>;
|
|
139
|
-
<T extends PlacementTypeWithOptionalProps, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props?: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string): Promise<Decision<T> | null>;
|
|
140
|
+
<T extends PlacementType, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string, signal?: AbortSignal): Promise<Decision<T> | null>;
|
|
141
|
+
<T extends PlacementTypeWithOptionalProps, U extends ParamsFor<T> = ParamsFor<T>>(placementType: T, props?: GetPosterProps<T, U>, userJwtToken?: string, cookie?: string, signal?: AbortSignal): Promise<Decision<T> | null>;
|
|
140
142
|
}
|
|
141
143
|
type ParamsFor<T extends PlacementType> = T extends keyof PlacementTypeToParamsMap ? PlacementTypeToParamsMap[T] : SpsParams;
|
|
142
144
|
type GetPosterProps<T extends PlacementType, U extends ParamsFor<T> = ParamsFor<T>> = T extends keyof PlacementTypeToParamsMap ? {
|
package/dist/esm/sps.js
CHANGED
|
@@ -54,7 +54,7 @@ export class SPS {
|
|
|
54
54
|
if (dismissOptions && isDismissed(placementType, dismissOptions.elementId)) {
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
|
-
const poster = await fetchPoster(`${this.endpoint}/${this.publication}/${placementType}`, props.params || {}, props.fallbackPoster);
|
|
57
|
+
const poster = await fetchPoster(`${this.endpoint}/${this.publication}/${placementType}`, props.params || {}, props.fallbackPoster, props.showFallbackPosterOnNoContent, props.signal);
|
|
58
58
|
if (!poster) {
|
|
59
59
|
return null;
|
|
60
60
|
}
|
|
@@ -129,17 +129,20 @@ export class SPS {
|
|
|
129
129
|
* @param cookie - Optional cookie string from the incoming server request, forwarded to SPS.
|
|
130
130
|
* @returns A {@link Decision} object containing the resolved `contentKey`.
|
|
131
131
|
*/
|
|
132
|
-
getDecision = async (placementType, props = {}, userJwtToken, cookie) => {
|
|
132
|
+
getDecision = async (placementType, props = {}, userJwtToken, cookie, signal) => {
|
|
133
133
|
this.validateServerEnvironment();
|
|
134
134
|
try {
|
|
135
|
-
const decisionResponse = await fetchDecision(`${this.endpoint}/${this.publication}/${placementType}/decision`, props.params || {}, userJwtToken, cookie);
|
|
135
|
+
const decisionResponse = await fetchDecision(`${this.endpoint}/${this.publication}/${placementType}/decision`, props.params || {}, userJwtToken, cookie, signal);
|
|
136
136
|
return {
|
|
137
137
|
...decisionResponse,
|
|
138
138
|
placementType,
|
|
139
139
|
articleType: props.params?.articleType || props.params?.posterType,
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
|
-
catch {
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
143
146
|
return {
|
|
144
147
|
contentKey: "sps:not-working",
|
|
145
148
|
placementType,
|
|
@@ -170,7 +173,7 @@ export class SPS {
|
|
|
170
173
|
if (dismissOptions && isDismissed(placementType, dismissOptions.elementId)) {
|
|
171
174
|
return null;
|
|
172
175
|
}
|
|
173
|
-
const poster = await fetchPoster(`${this.endpoint}/poster/${encodeURIComponent(contentKey)}`, {}, props.fallbackPoster);
|
|
176
|
+
const poster = await fetchPoster(`${this.endpoint}/poster/${encodeURIComponent(contentKey)}`, {}, props.fallbackPoster, props.showFallbackPosterOnNoContent, props.signal);
|
|
174
177
|
if (!poster) {
|
|
175
178
|
return null;
|
|
176
179
|
}
|
package/dist/esm/sps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sps.js","sourceRoot":"","sources":["../../src/sps.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,GAOZ,MAAM,GAAG,CAAC;AACX,OAAO,EACL,oBAAoB,GAIrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAA0B,MAAM,aAAa,CAAC;AAOjF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sps.js","sourceRoot":"","sources":["../../src/sps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var SpsPulseHelpersBundle=(()=>{var V=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var re=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ee(t))!te.call(e,o)&&o!==r&&V(e,o,{get:()=>t[o],enumerable:!(n=Z(t,o))||n.enumerable});return e};var ne=e=>re(V({},"__esModule",{value:!0}),e);var ue={};var y="pulse-tracker-proxy",se=`${y}:request`,de=`${y}:ack`,M=`${y}:invoke`,N=`${y}:return`,R=`${y}:return-error`,G=["trackAnonymousViewUIElement","trackEngagementAudio","trackEngagementForm","trackEngagementHealthUIElement","trackEngagementOffer","trackEngagementTeaser","trackEngagementUIElement","trackEngagementVideo","trackEngagementVideoAd","trackEngagementWidget","trackCompletedHealthAction","trackImpressionForm","trackImpressionHealthUIElement","trackImpressionOffer","trackImpressionPlayer","trackImpressionTeaser","trackImpressionUIElement","trackImpressionWidget","trackLeaveArticle","trackLeaveAudioPage","trackLeaveError","trackLeaveFrontpage","trackLeaveLandingpage","trackLeaveListing","trackLeaveLockedArticle","trackLeaveLockedAudioPage","trackLeaveLockedVideoPage","trackLeavePage","trackLeaveVideoPage","trackLeaveWeather","trackViewArticle","trackViewAudioPage","trackViewError","trackViewFrontpage","trackViewHealthPage","trackViewLandingpage","trackViewListing","trackViewLockedArticle","trackViewLockedAudioPage","trackViewLockedVideoPage","trackViewPage","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
|
|
1
|
+
"use strict";var SpsPulseHelpersBundle=(()=>{var V=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var re=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ee(t))!te.call(e,o)&&o!==r&&V(e,o,{get:()=>t[o],enumerable:!(n=Z(t,o))||n.enumerable});return e};var ne=e=>re(V({},"__esModule",{value:!0}),e);var ue={};var y="pulse-tracker-proxy",se=`${y}:request`,de=`${y}:ack`,M=`${y}:invoke`,N=`${y}:return`,R=`${y}:return-error`,G=["trackAnonymousViewUIElement","trackEngagementAudio","trackEngagementForm","trackEngagementHealthUIElement","trackEngagementOffer","trackEngagementTeaser","trackEngagementUIElement","trackEngagementVideo","trackEngagementVideoAd","trackEngagementWidget","trackCompletedHealthAction","trackImpressionForm","trackImpressionHealthUIElement","trackImpressionOffer","trackImpressionPlayer","trackImpressionTeaser","trackImpressionUIElement","trackImpressionWidget","trackLeaveArticle","trackLeaveAudioPage","trackLeaveError","trackLeaveFrontpage","trackLeaveLandingpage","trackLeaveListing","trackLeaveLockedArticle","trackLeaveLockedAudioPage","trackLeaveLockedVideoPage","trackLeavePage","trackLeaveVideoPage","trackLeaveWeather","trackViewArticle","trackViewAudioPage","trackViewError","trackViewFrontpage","trackViewHealthPage","trackViewLandingpage","trackViewListing","trackViewLockedArticle","trackViewLockedAudioPage","trackViewLockedVideoPage","trackViewPage","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 C(e,{target:t,timeout:r,debug:n=()=>{}}){return new Promise((o,a)=>{let i=new MessageChannel,p=r?setTimeout(()=>{i.port1.close(),a(new Error(`Message of type ${e.type} timed out`))},r):void 0,c=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===R&&(n("[Pulse Tracker Proxy] Received an return error response",s.data.error),clearTimeout(p),i.port1.close(),a(new Error(s.data.error))),n("[Pulse Tracker Proxy] Received a valid response",s.data),clearTimeout(p),i.port1.close(),o(s.data)};i.port1.onmessage=c,n("[Pulse Tracker Proxy] Sending message to target window",e),t.postMessage(e,"*",[i.port2])})}var W="2.0.0-rc.5";function L(e){let t="tracker"in e&&typeof e.tracker=="object"?e.tracker:{};return{...e,tracker:{...t,proxyVersion:W}}}var O=class{constructor(t,r){this.target=t,this.debug=r}track(...t){this.debug("[Pulse Tracker Proxy] Calling `track`",t);let[r,n,...o]=t,a=[r,L(n),...o];return this.invoke({method:"track",args:a})}async invoke(t){this.debug("[Pulse Tracker Proxy] Invoking remote function",t);let r=await C({type:M,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===R)throw this.debug("[Pulse Tracker Proxy] Error response from proxy",r.error),new Error(r.error);if(r.type===N)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 oe=Object.fromEntries(G.map(e=>[e,function(...t){this.debug("[Pulse Tracker Proxy] Calling `track`",t);let[r,...n]=t,o=[L(r),...n];return this.invoke({method:e,args:o})}]));function ae(){return class extends O{constructor(e,t){super(e,t),t("[Pulse TPaaS Proxy] Initialized"),Object.assign(this,oe)}}}var ie=ae();var ce=e=>e==="payment.schibsted.com"||e.startsWith("bestilling.")||e==="pay.pre.schibsted.digital"||e.startsWith("test-bestilling."),pe=e=>e==="login.schibsted.com"||e==="identity-pre.schibsted.com",j=e=>{var t;try{let n=new URL((t=e.getAttribute("href"))!=null?t:"").hostname;if(pe(n))return"Login";if(ce(n))return"Purchase"}catch{return}};var q=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 w=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 B(e,t,r,n){let{campaign:o,articleType:a,abTestGroup:i,placementType:p,experiment:c,legacy:s,contentName:l,pulseEvents:m}=t,d=400,T="",h=0;function f(g){var b,k,x,$,A;try{let S=g.target,P=(b=S==null?void 0:S.closest)==null?void 0:b.call(S,"a");if(!P)return;let E=P.textContent||P.getAttribute("href")||`${p} button`,I=`a|${E}`,F=Date.now();if(I===T&&F-h<d)return;T=I,h=F;let D=j(P),X=D==="Purchase"?q(P):[];m.tpaas&&e.trackEngagementOffer({object:{objectId:n,objectSdrn:r,campaign:o,containerName:"page",name:l,offerPlacement:p,offerCodes:X,offerType:w(a)},...c?{experiments:[{experimentSdrn:`${r}:experiment:${u(c)}`,name:c,platform:"SPS",variant:i||""}]}:{},engagement:{action:"Click",elementName:E},page:{},provider:{stage:"Test",component:"SPS"},target:{info:{url:(k=P.getAttribute("href"))!=null?k:""}}}),m.legacy&&e.trackLegacyClickUIElement({object:{id:u(E),elementType:"Button",name:E,containerName:"Page",custom:{...s==null?void 0:s.offerData}},...s?{origin:s.pulseOrigin}:{},target:{url:(A=($=(x=P.getAttribute("href"))==null?void 0:x.split("?"))==null?void 0:$[0])!=null?A:""},...D?{intent:D}:{},...c?{experiments:[{id:`experiment:${u(c)}`,name:c,platform:"SPS",variant:i}]}:{}})}catch{}}return document.addEventListener("click",f,!0),()=>document.removeEventListener("click",f,!0)}function H(e,t,r,n,o){let{campaign:a,articleType:i,abTestGroup:p,placementType:c,experiment:s,legacy:l,contentName:m,pulseEvents:d}=t;d.tpaas&&e.trackImpressionOffer({object:{campaign:a,containerName:"page",foldPosition:o,name:m,objectId:n,objectSdrn:r,offerPlacement:c,offerCodes:[],offerType:w(i)},...s?{experiments:[{experimentSdrn:`${r}:experiment:${u(s)}`,name:s,platform:"SPS",variant:p||""}]}:{},page:{},provider:{stage:"Test",component:"SPS"},target:{info:{}}}),d.legacy&&e.trackLegacyViewUIElement({object:{id:u(m),elementType:c,name:m,placement:{},custom:{...l==null?void 0:l.offerData,...l==null?void 0:l.custom}},...s?{experiments:[{id:`${r}:experiment:${u(s)}`,name:s,platform:"SPS",variant:p}]}:{},...l?{origin:l.pulseOrigin}:{}})}async function K(e,t,r,n){let{placementType:o,legacy:a,pulseEvents:i}=t,p=window.location.pathname,c=o==="campaignpage"?"CAMPAIGN":"STATIC";i.legacy&&await e.trackLegacyViewPage({object:{pageId:`landingpage-${c}-${_(p)}`.toLowerCase(),name:document.title,"spt:custom":{...a==null?void 0:a.offerData,...a==null?void 0:a.custom}},origin:a==null?void 0:a.pulseOrigin}),i.tpaas&&await e.trackViewLandingpage({object:{objectId:n,objectSdrn:r,title:document.title},page:{},provider:{stage:"Test"}},{leaveTracking:!1})}var U=e=>e==="campaignpage"||e==="staticpage";var J=!1,Y=!1,Q="script[data-sps-pulse-config='true']",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 z(){if(console.log("[SPS-Pulse-Helpers] boot initiated"),J)return;J=!0;let e=null;try{let t=document.querySelector(Q);if(!t){console.warn(`[SPS-Pulse-Helpers] Config script tag not found with selector ${Q}`);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,a=U(r)?_(window.location.pathname):u(o),i=`sdrn:${n}:element:offer:${r}:${a}`,p=crypto==null?void 0:crypto.randomUUID(),c=await t({});B(c,e,i,p);let s=f=>{Y||(Y=!0,H(c,e,i,p,f))};if(U(r)){await K(c,e,i,p),s("Above");return}let l=window.frameElement,m=window.parent.IntersectionObserver;if(!l||!m){console.warn("[SPS-Pulse-Helpers] No iframe or IntersectionObserver available. Pulse View event will not be fired.");return}let d="Unknown",T=!0,h=new m(f=>{var x;let g=f[0],b=(x=g==null?void 0:g.intersectionRatio)!=null?x:0,k=(g==null?void 0:g.isIntersecting)&&b>=1/3;T&&(T=!1,d=k?"Above":"Below"),k&&(h.disconnect(),s(d))},{root:null,threshold:[0,1/3]});h.observe(l)}catch(t){console.warn("[SPS-Pulse-Helpers] boot failed",t)}}z();return ne(ue);})();
|