@schibsted/sps-sdk 3.2.2 → 4.0.0-CBT-18545.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/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/public-script-versions.d.ts +2 -2
- package/dist/cjs/public-script-versions.js +2 -2
- package/dist/cjs/sps/placement.d.ts +15 -0
- package/dist/cjs/sps/rewrite-salesposter-variables.d.ts +36 -3
- package/dist/cjs/sps/rewrite-salesposter-variables.js +14 -3
- package/dist/cjs/sps/rewrite-salesposter-variables.js.map +1 -1
- package/dist/cjs/sps.d.ts +10 -4
- package/dist/cjs/sps.js +18 -27
- package/dist/cjs/sps.js.map +1 -1
- package/dist/cjs/tracking/create-tracking-params.d.ts +2 -2
- package/dist/cjs/tracking/create-tracking-params.js +2 -1
- package/dist/cjs/tracking/create-tracking-params.js.map +1 -1
- package/dist/cjs/utils/intent.d.ts +8 -0
- package/dist/cjs/utils/intent.js +34 -0
- package/dist/cjs/utils/intent.js.map +1 -0
- package/dist/cjs/utils/offerCodes.d.ts +6 -0
- package/dist/cjs/utils/offerCodes.js +21 -0
- package/dist/cjs/utils/offerCodes.js.map +1 -0
- package/dist/cjs/utils/offerType.d.ts +8 -0
- package/dist/cjs/utils/offerType.js +22 -0
- package/dist/cjs/utils/offerType.js.map +1 -0
- package/dist/cjs/utils/pulseProxy.d.ts +43 -12
- package/dist/cjs/utils/pulseProxy.js +6 -10
- package/dist/cjs/utils/pulseProxy.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/public-script-versions.d.ts +2 -2
- package/dist/esm/public-script-versions.js +2 -2
- package/dist/esm/sps/placement.d.ts +15 -0
- package/dist/esm/sps/rewrite-salesposter-variables.d.ts +36 -3
- package/dist/esm/sps/rewrite-salesposter-variables.js +14 -3
- package/dist/esm/sps/rewrite-salesposter-variables.js.map +1 -1
- package/dist/esm/sps.d.ts +10 -4
- package/dist/esm/sps.js +19 -28
- package/dist/esm/sps.js.map +1 -1
- package/dist/esm/tracking/create-tracking-params.d.ts +2 -2
- package/dist/esm/tracking/create-tracking-params.js +2 -1
- package/dist/esm/tracking/create-tracking-params.js.map +1 -1
- package/dist/esm/utils/intent.d.ts +8 -0
- package/dist/esm/utils/intent.js +30 -0
- package/dist/esm/utils/intent.js.map +1 -0
- package/dist/esm/utils/offerCodes.d.ts +6 -0
- package/dist/esm/utils/offerCodes.js +17 -0
- package/dist/esm/utils/offerCodes.js.map +1 -0
- package/dist/esm/utils/offerType.d.ts +8 -0
- package/dist/esm/utils/offerType.js +18 -0
- package/dist/esm/utils/offerType.js.map +1 -0
- package/dist/esm/utils/pulseProxy.d.ts +43 -12
- package/dist/esm/utils/pulseProxy.js +6 -10
- package/dist/esm/utils/pulseProxy.js.map +1 -1
- package/dist/public-scripts/pulse-tracker-proxy.v1.1.0.min.js +1 -0
- package/dist/public-scripts/sps-pulse-helpers.v2.0.0.min.js +1 -0
- package/package.json +2 -2
- package/dist/public-scripts/pulse-tracker-proxy.v1.0.0.min.js +0 -1
- package/dist/public-scripts/sps-pulse-helpers.v1.0.0.min.js +0 -1
package/dist/esm/index.js
CHANGED
|
@@ -5,6 +5,7 @@ export * from "./sps/queryBuilder.js";
|
|
|
5
5
|
export * from "./sps/endpoint.js";
|
|
6
6
|
export * from "./sps/publication.js";
|
|
7
7
|
export * from "./sps/placement.js";
|
|
8
|
+
export * from "./sps/rewrite-salesposter-variables.js";
|
|
8
9
|
export * from "./tracking/create-tracking-params.js";
|
|
9
10
|
export * from "./tracking/tracking-to-pulse-origin.js";
|
|
10
11
|
export * from "./tracking/poster-data-to-pulse-object.js";
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAE5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAE5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qCAAqC,CAAC;AAEpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAErD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,eAAe,GAAG,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Generated from public-script-versions.json — do not edit manually
|
|
2
2
|
export const PUBLIC_SCRIPT_VERSIONS = {
|
|
3
|
-
"sps-pulse-helpers": "
|
|
4
|
-
"pulse-tracker-proxy": "1.
|
|
3
|
+
"sps-pulse-helpers": "2.0.0",
|
|
4
|
+
"pulse-tracker-proxy": "1.1.0"
|
|
5
5
|
};
|
|
6
6
|
//# sourceMappingURL=public-script-versions.js.map
|
|
@@ -12,12 +12,15 @@ export type PlacementTypeWithOptionalFallback = Exclude<keyof PlacementContentMa
|
|
|
12
12
|
* Placement types that do __not__ require any parameters to be passed to SPS.
|
|
13
13
|
*/
|
|
14
14
|
export type PlacementTypeWithOptionalProps = Exclude<keyof PlacementContentMap, "salesposter" | "ip" | "bottombar">;
|
|
15
|
+
export type PlacementTypeWithStringContent = Exclude<keyof PlacementContentMap, "kyststripe" | "benefit" | "coreheader" | "kystbenefit">;
|
|
15
16
|
/**
|
|
16
17
|
* Maps each placement type string to the TypeScript type of its `content` value.
|
|
17
18
|
* HTML placements map to `string`; JSON placements map to their respective object shapes.
|
|
18
19
|
*/
|
|
19
20
|
export type PlacementContentMap = {
|
|
20
21
|
kyststripe: Kyststripe;
|
|
22
|
+
kystbenefit: Record<string, string>;
|
|
23
|
+
benefit: Benefit;
|
|
21
24
|
coreheader: Record<string, string>;
|
|
22
25
|
bottombar: string;
|
|
23
26
|
foldup: string;
|
|
@@ -46,3 +49,15 @@ export type Kyststripe = {
|
|
|
46
49
|
buttonTxtColor: string;
|
|
47
50
|
buttonId: string;
|
|
48
51
|
};
|
|
52
|
+
export type Benefit = {
|
|
53
|
+
disclaimerText: string;
|
|
54
|
+
disclaimerTextColor: string;
|
|
55
|
+
backgroundColor: string;
|
|
56
|
+
buttonText: string;
|
|
57
|
+
buttonColor: string;
|
|
58
|
+
textButtonColor: string;
|
|
59
|
+
headline: string;
|
|
60
|
+
headlineColor: string;
|
|
61
|
+
kicker: string;
|
|
62
|
+
URL: string;
|
|
63
|
+
};
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { JsonContent } from "../sps.js";
|
|
2
|
-
import { type SPSPulseTrackingParams } from "../utils/pulseProxy.js";
|
|
3
2
|
import type { Environment } from "./endpoint.js";
|
|
4
|
-
|
|
3
|
+
import type { SPSPosterResponse } from "../apiClient.js";
|
|
4
|
+
import type { OfferTrackingData } from "../tracking/create-tracking-params.js";
|
|
5
|
+
import type { PulseOrigin } from "../tracking/tracking-to-pulse-origin.js";
|
|
6
|
+
import type { PlacementTypeWithStringContent } from "./placement.js";
|
|
7
|
+
export interface RewritePlaceholderVariablesOptions<T extends PlacementTypeWithStringContent> {
|
|
5
8
|
/**
|
|
6
9
|
* Url that should be used to return to this article after purchase flow
|
|
7
10
|
*/
|
|
@@ -18,12 +21,42 @@ export interface RewritePlaceholderVariablesParams {
|
|
|
18
21
|
* Whether to append the provided `searchParams` to links. Defaults to true.
|
|
19
22
|
*/
|
|
20
23
|
appendSearchParams?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Publication name
|
|
26
|
+
*/
|
|
27
|
+
publication: string;
|
|
28
|
+
/**
|
|
29
|
+
* Environment for loading pulse proxy scripts
|
|
30
|
+
*/
|
|
31
|
+
environment: Environment;
|
|
32
|
+
/**
|
|
33
|
+
* Placement type for the salesposter
|
|
34
|
+
*/
|
|
35
|
+
placementType: T;
|
|
36
|
+
/**
|
|
37
|
+
* Which Pulse event families to fire
|
|
38
|
+
*/
|
|
39
|
+
pulseEvents?: {
|
|
40
|
+
tpaas?: boolean;
|
|
41
|
+
legacy?: boolean;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Pulse origin and offer tracking data for legacy events
|
|
45
|
+
*/
|
|
46
|
+
pulseData?: {
|
|
47
|
+
pulseOrigin: PulseOrigin;
|
|
48
|
+
offerData: OfferTrackingData;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Article type
|
|
52
|
+
*/
|
|
53
|
+
articleType?: string;
|
|
21
54
|
}
|
|
22
55
|
/**
|
|
23
56
|
* Enriches the salesposter html links with the correct parameters
|
|
24
57
|
* @returns StructuredResponse with the updated html
|
|
25
58
|
*/
|
|
26
|
-
export declare const rewritePlaceholderVariables: (
|
|
59
|
+
export declare const rewritePlaceholderVariables: <T extends PlacementTypeWithStringContent>(posterResponse: SPSPosterResponse<T>, { redirectUrl, loginUrl, searchParams, appendSearchParams, publication, environment, placementType, pulseEvents, pulseData, articleType, }: RewritePlaceholderVariablesOptions<T>) => string;
|
|
27
60
|
export declare const rewriteJsonPosterVariables: (content: JsonContent, { searchParams, appendSearchParams, }: {
|
|
28
61
|
searchParams: URLSearchParams;
|
|
29
62
|
appendSearchParams?: boolean;
|
|
@@ -5,7 +5,8 @@ import { getDismissScript } from "../actions/dismiss.js";
|
|
|
5
5
|
* Enriches the salesposter html links with the correct parameters
|
|
6
6
|
* @returns StructuredResponse with the updated html
|
|
7
7
|
*/
|
|
8
|
-
export const rewritePlaceholderVariables = (
|
|
8
|
+
export const rewritePlaceholderVariables = (posterResponse, { redirectUrl, loginUrl, searchParams, appendSearchParams = true, publication, environment, placementType, pulseEvents, pulseData, articleType, }) => {
|
|
9
|
+
const { content, campaign, contentName, experiment } = posterResponse;
|
|
9
10
|
const htmlContent = new DOMParser().parseFromString(content, "text/html");
|
|
10
11
|
const vevJSON = htmlContent.querySelector("script[type='text/vev']");
|
|
11
12
|
const links = htmlContent.querySelectorAll("a");
|
|
@@ -34,8 +35,18 @@ export const rewritePlaceholderVariables = (content, { redirectUrl, loginUrl, se
|
|
|
34
35
|
vevJSON.textContent = vevJSON.textContent.replaceAll(href, updatedHref);
|
|
35
36
|
}
|
|
36
37
|
});
|
|
37
|
-
if (
|
|
38
|
-
injectPulseProxyScripts(htmlContent.head,
|
|
38
|
+
if (pulseEvents) {
|
|
39
|
+
injectPulseProxyScripts(htmlContent.head, {
|
|
40
|
+
publication,
|
|
41
|
+
placementType,
|
|
42
|
+
environment,
|
|
43
|
+
articleType,
|
|
44
|
+
campaign,
|
|
45
|
+
contentName,
|
|
46
|
+
experiment,
|
|
47
|
+
pulseEvents,
|
|
48
|
+
legacy: pulseData,
|
|
49
|
+
});
|
|
39
50
|
}
|
|
40
51
|
const dismissElements = htmlContent.querySelectorAll("[data-dismiss-on-click]");
|
|
41
52
|
if (dismissElements.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewrite-salesposter-variables.js","sourceRoot":"","sources":["../../../src/sps/rewrite-salesposter-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"rewrite-salesposter-variables.js","sourceRoot":"","sources":["../../../src/sps/rewrite-salesposter-variables.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/sps.d.ts
CHANGED
|
@@ -71,8 +71,16 @@ export type SpsRequestOptions<T extends PlacementType> = {
|
|
|
71
71
|
* @defaultValue `true`
|
|
72
72
|
*/
|
|
73
73
|
appendSearchParams?: boolean;
|
|
74
|
-
/**
|
|
75
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Fine-grained control over which Pulse tracking events are fired.
|
|
76
|
+
* When omitted, all pulse tracking is disabled.
|
|
77
|
+
*/
|
|
78
|
+
pulseEvents?: {
|
|
79
|
+
/** Fire modern TPaaS offer events (`trackImpressionOffer` / `trackEngagementOffer`). @defaultValue false */
|
|
80
|
+
tpaas?: boolean;
|
|
81
|
+
/** Fire legacy UI element events (`trackLegacyViewUIElement` / `trackLegacyClickUIElement`). @defaultValue false */
|
|
82
|
+
legacy?: boolean;
|
|
83
|
+
};
|
|
76
84
|
};
|
|
77
85
|
/**
|
|
78
86
|
* Variant of {@link SpsRequestOptions} that requires a `fallbackPoster` and forces
|
|
@@ -173,8 +181,6 @@ export declare class SPS {
|
|
|
173
181
|
endpoint: string;
|
|
174
182
|
/** The active environment this instance targets. */
|
|
175
183
|
environment: Environment;
|
|
176
|
-
/** The CDN base URL for the active environment. */
|
|
177
|
-
cdnUrl: string;
|
|
178
184
|
/**
|
|
179
185
|
* Creates a new SPS SDK instance.
|
|
180
186
|
* @param options - Configuration options including publication, domain and environment.
|
package/dist/esm/sps.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getEndpoint,
|
|
1
|
+
import { getEndpoint, } from "./index.js";
|
|
2
2
|
import { createTrackingParams, } from "./tracking/create-tracking-params.js";
|
|
3
3
|
import { rewritePlaceholderVariables, rewriteJsonPosterVariables, } from "./sps/rewrite-salesposter-variables.js";
|
|
4
4
|
import { SpsPublication } from "./sps/publication.js";
|
|
@@ -15,8 +15,6 @@ export class SPS {
|
|
|
15
15
|
endpoint;
|
|
16
16
|
/** The active environment this instance targets. */
|
|
17
17
|
environment;
|
|
18
|
-
/** The CDN base URL for the active environment. */
|
|
19
|
-
cdnUrl;
|
|
20
18
|
/**
|
|
21
19
|
* Creates a new SPS SDK instance.
|
|
22
20
|
* @param options - Configuration options including publication, domain and environment.
|
|
@@ -25,7 +23,6 @@ export class SPS {
|
|
|
25
23
|
this.environment = environment;
|
|
26
24
|
this.publication = publication;
|
|
27
25
|
this.endpoint = getEndpoint(environment, domain);
|
|
28
|
-
this.cdnUrl = getCdnUrl(environment);
|
|
29
26
|
}
|
|
30
27
|
async validateClientEnvironment() {
|
|
31
28
|
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
@@ -82,24 +79,21 @@ export class SPS {
|
|
|
82
79
|
let content;
|
|
83
80
|
const generateLoginUrl = props.generateLoginUrl;
|
|
84
81
|
const generateRedirectUrl = props.generateRedirectUrl;
|
|
85
|
-
const {
|
|
82
|
+
const { pulseEvents } = props;
|
|
86
83
|
if (typeof posterResponse.content === "string") {
|
|
87
|
-
content = rewritePlaceholderVariables(posterResponse
|
|
84
|
+
content = rewritePlaceholderVariables(posterResponse, {
|
|
88
85
|
loginUrl: (await generateLoginUrl?.(posterResponse)) ?? "",
|
|
89
86
|
redirectUrl: (await generateRedirectUrl?.(posterResponse)) ??
|
|
90
87
|
`${window.location.origin}${window.location.pathname}`,
|
|
91
88
|
searchParams,
|
|
92
89
|
appendSearchParams: props.appendSearchParams ?? true,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
experiment: posterResponse.experiment,
|
|
101
|
-
}
|
|
102
|
-
: undefined);
|
|
90
|
+
publication: this.publication,
|
|
91
|
+
environment: this.environment,
|
|
92
|
+
placementType: placementType,
|
|
93
|
+
pulseEvents,
|
|
94
|
+
pulseData: { pulseOrigin, offerData },
|
|
95
|
+
articleType: props.params?.articleType,
|
|
96
|
+
});
|
|
103
97
|
}
|
|
104
98
|
else {
|
|
105
99
|
content = rewriteJsonPosterVariables(posterResponse.content, {
|
|
@@ -193,24 +187,21 @@ export class SPS {
|
|
|
193
187
|
abTestGroup: poster.posterResponse.abTestGroup || undefined,
|
|
194
188
|
});
|
|
195
189
|
let content = poster.posterResponse.content;
|
|
196
|
-
const {
|
|
190
|
+
const { pulseEvents } = props;
|
|
197
191
|
if (typeof poster.posterResponse.content === "string") {
|
|
198
|
-
content = rewritePlaceholderVariables(poster.posterResponse
|
|
192
|
+
content = rewritePlaceholderVariables(poster.posterResponse, {
|
|
199
193
|
loginUrl: (await props.generateLoginUrl?.(poster.posterResponse)) ?? "",
|
|
200
194
|
redirectUrl: (await props.generateRedirectUrl?.(poster.posterResponse)) ??
|
|
201
195
|
window.location.origin + window.location.pathname,
|
|
202
196
|
searchParams,
|
|
203
197
|
appendSearchParams: props.appendSearchParams ?? true,
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
experiment: poster.posterResponse.experiment,
|
|
212
|
-
}
|
|
213
|
-
: undefined);
|
|
198
|
+
publication: this.publication,
|
|
199
|
+
environment: this.environment,
|
|
200
|
+
placementType: placementType,
|
|
201
|
+
pulseEvents,
|
|
202
|
+
pulseData: { pulseOrigin, offerData },
|
|
203
|
+
articleType,
|
|
204
|
+
});
|
|
214
205
|
}
|
|
215
206
|
else {
|
|
216
207
|
content = rewriteJsonPosterVariables(poster.posterResponse.content, {
|
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,
|
|
1
|
+
{"version":3,"file":"sps.js","sourceRoot":"","sources":["../../src/sps.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { type PulseTracker } from "../utils/pulse.js";
|
|
|
2
2
|
import { type UtmTags } from "../utils/utm.js";
|
|
3
3
|
import { type PulseOrigin } from "./tracking-to-pulse-origin.js";
|
|
4
4
|
import { type PulseObject } from "./poster-data-to-pulse-object.js";
|
|
5
|
-
export type ContentType = "article" | "podcast" | "video" | "
|
|
5
|
+
export type ContentType = "article" | "podcast" | "video" | "other";
|
|
6
6
|
export type DeviceType = "mobile" | "tablet" | "desktop";
|
|
7
7
|
/**
|
|
8
8
|
* Input options for {@link createTrackingParams}.
|
|
@@ -91,7 +91,7 @@ export interface TrackingData {
|
|
|
91
91
|
*/
|
|
92
92
|
export interface OfferTrackingData {
|
|
93
93
|
offer_placement?: string;
|
|
94
|
-
offer_type?:
|
|
94
|
+
offer_type?: "Login" | "Meter" | "Paid";
|
|
95
95
|
offer_campaign?: string;
|
|
96
96
|
offer_test_group?: string;
|
|
97
97
|
offer_cta?: string;
|
|
@@ -6,6 +6,7 @@ import { generateXDomainId } from "../utils/xDomainId.js";
|
|
|
6
6
|
import { trackingToPulseOrigin } from "./tracking-to-pulse-origin.js";
|
|
7
7
|
import { trackingToSearchParams } from "./tracking-to-search-params.js";
|
|
8
8
|
import { posterDataToPulseObject } from "./poster-data-to-pulse-object.js";
|
|
9
|
+
import { getOfferType } from "../utils/offerType.js";
|
|
9
10
|
const NO_DATA = "";
|
|
10
11
|
/**
|
|
11
12
|
* Creates the tracking parameters for use towards purchase flow
|
|
@@ -41,7 +42,7 @@ export async function createTrackingParams(options, posterData) {
|
|
|
41
42
|
};
|
|
42
43
|
const offerData = {
|
|
43
44
|
offer_placement: placementType,
|
|
44
|
-
offer_type: articleType,
|
|
45
|
+
offer_type: getOfferType(articleType),
|
|
45
46
|
offer_campaign: campaign,
|
|
46
47
|
offer_test_group: abTestGroup,
|
|
47
48
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-tracking-params.js","sourceRoot":"","sources":["../../../src/tracking/create-tracking-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAqB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAoB,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAoB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"create-tracking-params.js","sourceRoot":"","sources":["../../../src/tracking/create-tracking-params.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Intent = "Purchase" | "Login";
|
|
2
|
+
/**
|
|
3
|
+
* Determine the intent of a click based on the hostname of the link.
|
|
4
|
+
* @param link the clicked element, expected to be an anchor element with an href attribute. If the href is missing or invalid, the function will return undefined.
|
|
5
|
+
* @returns "Purchase", "Login", or undefined based on the hostname of the link.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getIntent: (link: Element) => Intent | undefined;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const isPurchaseHostname = (hostname) => {
|
|
2
|
+
return (hostname === "payment.schibsted.com" ||
|
|
3
|
+
hostname.startsWith("bestilling.") ||
|
|
4
|
+
hostname === "pay.pre.schibsted.digital" ||
|
|
5
|
+
hostname.startsWith("test-bestilling."));
|
|
6
|
+
};
|
|
7
|
+
const isLoginHostname = (hostname) => {
|
|
8
|
+
return hostname === "login.schibsted.com" || hostname === "identity-pre.schibsted.com";
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Determine the intent of a click based on the hostname of the link.
|
|
12
|
+
* @param link the clicked element, expected to be an anchor element with an href attribute. If the href is missing or invalid, the function will return undefined.
|
|
13
|
+
* @returns "Purchase", "Login", or undefined based on the hostname of the link.
|
|
14
|
+
*/
|
|
15
|
+
export const getIntent = (link) => {
|
|
16
|
+
try {
|
|
17
|
+
const elementUrl = new URL(link.getAttribute("href") ?? "");
|
|
18
|
+
const hostname = elementUrl.hostname;
|
|
19
|
+
if (isLoginHostname(hostname)) {
|
|
20
|
+
return "Login";
|
|
21
|
+
}
|
|
22
|
+
if (isPurchaseHostname(hostname)) {
|
|
23
|
+
return "Purchase";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/utils/intent.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAW,EAAE;IACvD,OAAO,CACL,QAAQ,KAAK,uBAAuB;QACpC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;QAClC,QAAQ,KAAK,2BAA2B;QACxC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAW,EAAE;IACpD,OAAO,QAAQ,KAAK,qBAAqB,IAAI,QAAQ,KAAK,4BAA4B,CAAC;AACzF,CAAC,CAAC;AAIF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAa,EAAsB,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACrC,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts offer codes from the href attribute of a clicked link.
|
|
3
|
+
* @param link the clicked element, expected to be an anchor element with an href attribute. If the href is missing or invalid, the function will return undefined.
|
|
4
|
+
* @returns an array of offer codes or an empty array if no offer codes are found.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getOfferCodes: (link: Element) => string[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts offer codes from the href attribute of a clicked link.
|
|
3
|
+
* @param link the clicked element, expected to be an anchor element with an href attribute. If the href is missing or invalid, the function will return undefined.
|
|
4
|
+
* @returns an array of offer codes or an empty array if no offer codes are found.
|
|
5
|
+
*/
|
|
6
|
+
export const getOfferCodes = (link) => {
|
|
7
|
+
try {
|
|
8
|
+
const elementUrl = new URL(link.getAttribute("href") ?? "");
|
|
9
|
+
const queryParams = new URLSearchParams(elementUrl.search);
|
|
10
|
+
const offerCode = queryParams.get("code");
|
|
11
|
+
return offerCode ? offerCode.split(",") : [];
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=offerCodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offerCodes.js","sourceRoot":"","sources":["../../../src/utils/offerCodes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAa,EAAY,EAAE;IACvD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type OfferType = "Meter" | "Paid" | "Login";
|
|
2
|
+
/**
|
|
3
|
+
* Determines the offer type based on the article type string.
|
|
4
|
+
* @param articleType the article type string passed from the client call, which may contain indicators of the offer type such as "meter" or "paid". If the string is undefined or does not contain any known indicators, the function defaults to "Login".
|
|
5
|
+
* @returns "Meter", "Paid", or "Login" based on the article type string. Undefined if the article type is not provided or does not match any known offer types.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getOfferType: (articleType?: string) => OfferType | undefined;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines the offer type based on the article type string.
|
|
3
|
+
* @param articleType the article type string passed from the client call, which may contain indicators of the offer type such as "meter" or "paid". If the string is undefined or does not contain any known indicators, the function defaults to "Login".
|
|
4
|
+
* @returns "Meter", "Paid", or "Login" based on the article type string. Undefined if the article type is not provided or does not match any known offer types.
|
|
5
|
+
*/
|
|
6
|
+
export const getOfferType = (articleType) => {
|
|
7
|
+
const lower = articleType?.toLowerCase() ?? "";
|
|
8
|
+
if (lower.includes("meter")) {
|
|
9
|
+
return "Meter";
|
|
10
|
+
}
|
|
11
|
+
if (lower.includes("paid") || lower.includes("subscription")) {
|
|
12
|
+
return "Paid";
|
|
13
|
+
}
|
|
14
|
+
if (lower.includes("login")) {
|
|
15
|
+
return "Login";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=offerType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offerType.js","sourceRoot":"","sources":["../../../src/utils/offerType.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAoB,EAAyB,EAAE;IAC1E,MAAM,KAAK,GAAG,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,30 +1,61 @@
|
|
|
1
1
|
import type { PulseOrigin } from "../tracking/tracking-to-pulse-origin.js";
|
|
2
2
|
import type { PlacementType } from "../sps/placement.js";
|
|
3
3
|
import type { OfferTrackingData } from "../tracking/create-tracking-params.js";
|
|
4
|
-
|
|
4
|
+
import { type Environment } from "../sps/endpoint.js";
|
|
5
|
+
export interface PulseConfig {
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
+
* Environment for loading pulse proxy scripts, set by the environment argument when initializing the SPS instance
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
|
+
environment: Environment;
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
+
* Campaign name for the salesposter
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
+
campaign: string;
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
+
* Content name for the salesposter
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
+
contentName: string;
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* Article type
|
|
19
20
|
*/
|
|
20
|
-
|
|
21
|
+
articleType?: string;
|
|
21
22
|
/**
|
|
22
|
-
*
|
|
23
|
+
* A/B test group identifier, if applicable
|
|
23
24
|
*/
|
|
24
|
-
|
|
25
|
+
abTestGroup?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Fields forwarded as-is to legacy tracking functions only
|
|
28
|
+
* */
|
|
29
|
+
legacy?: {
|
|
30
|
+
/**
|
|
31
|
+
* Pulse origin data from tracking data
|
|
32
|
+
*/
|
|
33
|
+
pulseOrigin: PulseOrigin;
|
|
34
|
+
/**
|
|
35
|
+
* TPaaS offer tracking params
|
|
36
|
+
*/
|
|
37
|
+
offerData: OfferTrackingData;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Publication name
|
|
41
|
+
*/
|
|
42
|
+
publication: string;
|
|
43
|
+
/**
|
|
44
|
+
* Placement type for the salesposter
|
|
45
|
+
*/
|
|
46
|
+
placementType: PlacementType;
|
|
25
47
|
/**
|
|
26
48
|
* Experiment identifier from the SPS response
|
|
27
49
|
*/
|
|
28
50
|
experiment?: string | null;
|
|
51
|
+
/**
|
|
52
|
+
* Which Pulse event families to fire. When omitted, all tracking is disabled.
|
|
53
|
+
*/
|
|
54
|
+
pulseEvents?: {
|
|
55
|
+
/** Fire modern TPaaS offer events (`trackImpressionOffer` / `trackEngagementOffer`). */
|
|
56
|
+
tpaas?: boolean;
|
|
57
|
+
/** Fire legacy UI element events (`trackLegacyViewUIElement` / `trackLegacyClickUIElement`). */
|
|
58
|
+
legacy?: boolean;
|
|
59
|
+
};
|
|
29
60
|
}
|
|
30
|
-
export declare const injectPulseProxyScripts: (root: HTMLElement,
|
|
61
|
+
export declare const injectPulseProxyScripts: (root: HTMLElement, config: PulseConfig) => void;
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { PUBLIC_SCRIPT_VERSIONS } from "../public-script-versions.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
2
|
+
import { getCdnUrl } from "../sps/endpoint.js";
|
|
3
|
+
export const injectPulseProxyScripts = (root, config) => {
|
|
4
|
+
const { environment } = config;
|
|
5
|
+
const HELPERS_SRC = `${getCdnUrl(environment)}/public-scripts/sps-pulse-helpers.v${PUBLIC_SCRIPT_VERSIONS["sps-pulse-helpers"]}.min.js`;
|
|
6
|
+
const PROXY_SRC = `${getCdnUrl(environment)}/public-scripts/pulse-tracker-proxy.v${PUBLIC_SCRIPT_VERSIONS["pulse-tracker-proxy"]}.min.js`;
|
|
5
7
|
const configScript = document.createElement("script");
|
|
6
8
|
configScript.type = "application/json";
|
|
7
9
|
configScript.setAttribute("data-sps-pulse-config", "true");
|
|
8
|
-
configScript.textContent = JSON.stringify(
|
|
9
|
-
pulseOrigin,
|
|
10
|
-
publication,
|
|
11
|
-
placementType,
|
|
12
|
-
offerData,
|
|
13
|
-
...(experiment && { experiment }),
|
|
14
|
-
});
|
|
10
|
+
configScript.textContent = JSON.stringify(config);
|
|
15
11
|
const helpersScript = document.createElement("script");
|
|
16
12
|
helpersScript.src = HELPERS_SRC;
|
|
17
13
|
const proxyScript = document.createElement("script");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pulseProxy.js","sourceRoot":"","sources":["../../../src/utils/pulseProxy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"pulseProxy.js","sourceRoot":"","sources":["../../../src/utils/pulseProxy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AA2D9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAiB,EAAE,MAAmB,EAAE,EAAE;IAChF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,sCAAsC,sBAAsB,CAAC,mBAAmB,CAAC,SAAS,CAAC;IACxI,MAAM,SAAS,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,wCAAwC,sBAAsB,CAAC,qBAAqB,CAAC,SAAS,CAAC;IAE1I,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtD,YAAY,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACvC,YAAY,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC3D,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAElD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvD,aAAa,CAAC,GAAG,GAAG,WAAW,CAAC;IAEhC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrD,WAAW,CAAC,GAAG,GAAG,SAAS,CAAC;IAE5B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC/B,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC9B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var PulseTrackerProxyBundle=(()=>{var g=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var O=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of M(r))!I.call(e,a)&&a!==t&&g(e,a,{get:()=>r[a],enumerable:!(o=v(r,a))||o.enumerable});return e};var U=e=>O(g({},"__esModule",{value:!0}),e);var C={};var l="pulse-tracker-proxy",x=`${l}:request`,H=`${l}:ack`,T=`${l}:invoke`,f=`${l}:return`,k=`${l}:return-error`,w=["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 P(e){return e!==null&&typeof e=="object"&&"type"in e&&typeof e.type=="string"&&e.type.startsWith(l)}async function h(e,r,t){return await new Promise((o,a)=>{let s=e.document.createElement("script");s.src=`//sdk.pulse.schibsted.com/versioned/${t}/pulse.min.js`,s.async=!0,s.onload=o,s.onerror=()=>{a(new Error(`Failed to load autotracker script from src: ${s.src}`))},e.document.head.appendChild(s)}),new Promise((o,a)=>{if(!e.pulse){a(new Error("Pulse autotracker did not load correctly!"));return}e.pulse("init",r),e.pulse(s=>{o(s)})})}function d(e,{target:r,timeout:t,debug:o=()=>{}}){return new Promise((a,s)=>{let i=new MessageChannel,n=t?setTimeout(()=>{i.port1.close(),s(new Error(`Message of type ${e.type} timed out`))},t):void 0,p=c=>{if(o("[Pulse Tracker Proxy] Received the response on the MessageChannel",c),!P(c.data)){o("[Pulse Tracker Proxy] Response was not a valid Proxy Message",c.data);return}c.data.type===k&&(o("[Pulse Tracker Proxy] Received an return error response",c.data.error),clearTimeout(n),i.port1.close(),s(new Error(c.data.error))),o("[Pulse Tracker Proxy] Received a valid response",c.data),clearTimeout(n),i.port1.close(),a(c.data)};i.port1.onmessage=p,o("[Pulse Tracker Proxy] Sending message to target window",e),r.postMessage(e,"*",[i.port2])})}var A="2.0.0-rc.5";function y(e){let r="tracker"in e&&typeof e.tracker=="object"?e.tracker:{};return{...e,tracker:{...r,proxyVersion:A}}}var m=class{constructor(r,t){this.target=r,this.debug=t}track(...r){this.debug("[Pulse Tracker Proxy] Calling `track`",r);let[t,o,...a]=r,s=[t,y(o),...a];return this.invoke({method:"track",args:s})}async invoke(r){this.debug("[Pulse Tracker Proxy] Invoking remote function",r);let t=await d({type:T,payload:r},{target:this.target});if(!P(t))throw this.debug("[Pulse Tracker Proxy] Invalid response from proxy",t),new Error("Invalid response from proxy");if(t.type===k)throw this.debug("[Pulse Tracker Proxy] Error response from proxy",t.error),new Error(t.error);if(t.type===f)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 $=Object.fromEntries(w.map(e=>[e,function(...r){this.debug("[Pulse Tracker Proxy] Calling `track`",r);let[t,...o]=r,a=[y(t),...o];return this.invoke({method:e,args:a})}]));function Y(){return class extends m{constructor(e,r){super(e,r),r("[Pulse TPaaS Proxy] Initialized"),Object.assign(this,$)}}}var L=Y();function S({provider:e,autotrackerVersion:r="3",window:t=globalThis.window,target:o=t.parent,timeout:a=5e3,retries:s=3,retryTimeout:i=1e3,debug:n=()=>{}}={}){if(n("[Pulse Tracker Proxy] Checking if `pulseEventHandler` is provided in the current window..."),t.pulseEventHandler)return n(`[Pulse Tracker Proxy] \`pulseEventHandler\` found in the current window. Assuming it is the app webview. Loading autotracker version ${r}...`),e?h(t,e,r):(n("[Pulse Tracker Proxy] `provider` is not set - cannot create pulse tracker."),Promise.reject("`provider` is not set - cannot create pulse tracker."));if(n("[Pulse Tracker Proxy] `pulseEventHandler` not found in the current window - not a mobile app webview."),n("[Pulse Tracker Proxy] Trying to establish connection...",{target:o,timeout:a,retries:s}),!o)return Promise.reject(new Error("Target window not provided. Possibly window.parent is not available."));let p,c=!1,R=new Promise((u,E)=>{p=setTimeout(()=>{c=!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 u=0;u<s;u++){if(c)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: ${u+1})...`),await d({type:x},{target:o,timeout:i})}catch(E){n(`[Pulse Tracker Proxy] Ack Request failed: ${E}`);continue}return clearTimeout(p),n(`[Pulse Tracker Proxy] Ack Request successful (attempt: ${u+1})`),new L(o,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([R,_])}var V;window.getPulseTrackerProxy=(V=window.getPulseTrackerProxy)!=null?V:S;return U(C);})();
|