@schibsted/sps-sdk 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/cjs/actions/dismiss.d.ts +6 -0
  2. package/dist/cjs/actions/dismiss.js +102 -0
  3. package/dist/cjs/actions/dismiss.js.map +1 -0
  4. package/dist/cjs/apiClient.d.ts +89 -0
  5. package/dist/cjs/apiClient.js +98 -0
  6. package/dist/cjs/apiClient.js.map +1 -0
  7. package/dist/cjs/index.d.ts +17 -0
  8. package/dist/cjs/index.js +34 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/package.json +1 -0
  11. package/dist/cjs/sps/endpoint.d.ts +7 -0
  12. package/dist/cjs/sps/endpoint.js +42 -0
  13. package/dist/cjs/sps/endpoint.js.map +1 -0
  14. package/dist/cjs/sps/placement.d.ts +62 -0
  15. package/dist/cjs/sps/placement.js +3 -0
  16. package/dist/cjs/sps/placement.js.map +1 -0
  17. package/dist/cjs/sps/publication.d.ts +23 -0
  18. package/dist/cjs/sps/publication.js +28 -0
  19. package/dist/cjs/sps/publication.js.map +1 -0
  20. package/dist/cjs/sps/queryBuilder.d.ts +21 -0
  21. package/dist/cjs/sps/queryBuilder.js +31 -0
  22. package/dist/cjs/sps/queryBuilder.js.map +1 -0
  23. package/dist/cjs/sps/rewrite-salesposter-variables.d.ts +35 -0
  24. package/dist/cjs/sps/rewrite-salesposter-variables.js +112 -0
  25. package/dist/cjs/sps/rewrite-salesposter-variables.js.map +1 -0
  26. package/dist/cjs/sps.d.ts +234 -0
  27. package/dist/cjs/sps.js +237 -0
  28. package/dist/cjs/sps.js.map +1 -0
  29. package/dist/cjs/tracking/create-tracking-params.d.ts +116 -0
  30. package/dist/cjs/tracking/create-tracking-params.js +62 -0
  31. package/dist/cjs/tracking/create-tracking-params.js.map +1 -0
  32. package/dist/cjs/tracking/poster-data-to-pulse-object.d.ts +22 -0
  33. package/dist/cjs/tracking/poster-data-to-pulse-object.js +32 -0
  34. package/dist/cjs/tracking/poster-data-to-pulse-object.js.map +1 -0
  35. package/dist/cjs/tracking/tracking-to-pulse-origin.d.ts +14 -0
  36. package/dist/cjs/tracking/tracking-to-pulse-origin.js +15 -0
  37. package/dist/cjs/tracking/tracking-to-pulse-origin.js.map +1 -0
  38. package/dist/cjs/tracking/tracking-to-search-params.d.ts +10 -0
  39. package/dist/cjs/tracking/tracking-to-search-params.js +26 -0
  40. package/dist/cjs/tracking/tracking-to-search-params.js.map +1 -0
  41. package/dist/cjs/utils/pulse.d.ts +15 -0
  42. package/dist/cjs/utils/pulse.js +27 -0
  43. package/dist/cjs/utils/pulse.js.map +1 -0
  44. package/dist/cjs/utils/pulseProxy.d.ts +30 -0
  45. package/dist/cjs/utils/pulseProxy.js +28 -0
  46. package/dist/cjs/utils/pulseProxy.js.map +1 -0
  47. package/dist/cjs/utils/source.d.ts +9 -0
  48. package/dist/cjs/utils/source.js +113 -0
  49. package/dist/cjs/utils/source.js.map +1 -0
  50. package/dist/cjs/utils/url.d.ts +3 -0
  51. package/dist/cjs/utils/url.js +16 -0
  52. package/dist/cjs/utils/url.js.map +1 -0
  53. package/dist/cjs/utils/utm.d.ts +19 -0
  54. package/dist/cjs/utils/utm.js +30 -0
  55. package/dist/cjs/utils/utm.js.map +1 -0
  56. package/dist/cjs/utils/xDomainId.d.ts +1 -0
  57. package/dist/cjs/utils/xDomainId.js +14 -0
  58. package/dist/cjs/utils/xDomainId.js.map +1 -0
  59. package/dist/esm/actions/dismiss.d.ts +6 -0
  60. package/dist/esm/actions/dismiss.js +96 -0
  61. package/dist/esm/actions/dismiss.js.map +1 -0
  62. package/dist/esm/apiClient.d.ts +89 -0
  63. package/dist/esm/apiClient.js +93 -0
  64. package/dist/esm/apiClient.js.map +1 -0
  65. package/dist/esm/index.d.ts +17 -0
  66. package/dist/esm/index.js +18 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/sps/endpoint.d.ts +7 -0
  69. package/dist/esm/sps/endpoint.js +37 -0
  70. package/dist/esm/sps/endpoint.js.map +1 -0
  71. package/dist/esm/sps/placement.d.ts +62 -0
  72. package/dist/esm/sps/placement.js +2 -0
  73. package/dist/esm/sps/placement.js.map +1 -0
  74. package/dist/esm/sps/publication.d.ts +23 -0
  75. package/dist/esm/sps/publication.js +25 -0
  76. package/dist/esm/sps/publication.js.map +1 -0
  77. package/dist/esm/sps/queryBuilder.d.ts +21 -0
  78. package/dist/esm/sps/queryBuilder.js +26 -0
  79. package/dist/esm/sps/queryBuilder.js.map +1 -0
  80. package/dist/esm/sps/rewrite-salesposter-variables.d.ts +35 -0
  81. package/dist/esm/sps/rewrite-salesposter-variables.js +106 -0
  82. package/dist/esm/sps/rewrite-salesposter-variables.js.map +1 -0
  83. package/dist/esm/sps.d.ts +234 -0
  84. package/dist/esm/sps.js +234 -0
  85. package/dist/esm/sps.js.map +1 -0
  86. package/dist/esm/tracking/create-tracking-params.d.ts +116 -0
  87. package/dist/esm/tracking/create-tracking-params.js +59 -0
  88. package/dist/esm/tracking/create-tracking-params.js.map +1 -0
  89. package/dist/esm/tracking/poster-data-to-pulse-object.d.ts +22 -0
  90. package/dist/esm/tracking/poster-data-to-pulse-object.js +29 -0
  91. package/dist/esm/tracking/poster-data-to-pulse-object.js.map +1 -0
  92. package/dist/esm/tracking/tracking-to-pulse-origin.d.ts +14 -0
  93. package/dist/esm/tracking/tracking-to-pulse-origin.js +12 -0
  94. package/dist/esm/tracking/tracking-to-pulse-origin.js.map +1 -0
  95. package/dist/esm/tracking/tracking-to-search-params.d.ts +10 -0
  96. package/dist/esm/tracking/tracking-to-search-params.js +23 -0
  97. package/dist/esm/tracking/tracking-to-search-params.js.map +1 -0
  98. package/dist/esm/utils/pulse.d.ts +15 -0
  99. package/dist/esm/utils/pulse.js +24 -0
  100. package/dist/esm/utils/pulse.js.map +1 -0
  101. package/dist/esm/utils/pulseProxy.d.ts +30 -0
  102. package/dist/esm/utils/pulseProxy.js +24 -0
  103. package/dist/esm/utils/pulseProxy.js.map +1 -0
  104. package/dist/esm/utils/source.d.ts +9 -0
  105. package/dist/esm/utils/source.js +108 -0
  106. package/dist/esm/utils/source.js.map +1 -0
  107. package/dist/esm/utils/url.d.ts +3 -0
  108. package/dist/esm/utils/url.js +10 -0
  109. package/dist/esm/utils/url.js.map +1 -0
  110. package/dist/esm/utils/utm.d.ts +19 -0
  111. package/dist/esm/utils/utm.js +27 -0
  112. package/dist/esm/utils/utm.js.map +1 -0
  113. package/dist/esm/utils/xDomainId.d.ts +1 -0
  114. package/dist/esm/utils/xDomainId.js +10 -0
  115. package/dist/esm/utils/xDomainId.js.map +1 -0
  116. package/dist/public-scripts/pulse-tracker-proxy.v0.1.0.min.js +1 -0
  117. package/dist/public-scripts/sps-pulse-helpers.v0.2.0.min.js +1 -0
  118. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utm.js","sourceRoot":"","sources":["../../../src/utils/utm.ts"],"names":[],"mappings":";;AA4BA,sCAYC;AA5BD,MAAM,aAAa,GAAsB;IACvC,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,aAAa;IACb,UAAU;IACV,SAAS;CACV,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAW,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const generateXDomainId: () => `${string}-${string}-${string}-${string}-${string}` | undefined;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateXDomainId = void 0;
4
+ const generateXDomainId = () => {
5
+ try {
6
+ return crypto?.randomUUID();
7
+ }
8
+ catch (error) {
9
+ console.error("Salesposter-utils: Error generating xDomainId", error);
10
+ return undefined;
11
+ }
12
+ };
13
+ exports.generateXDomainId = generateXDomainId;
14
+ //# sourceMappingURL=xDomainId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xDomainId.js","sourceRoot":"","sources":["../../../src/utils/xDomainId.ts"],"names":[],"mappings":";;;AAAO,MAAM,iBAAiB,GAAG,GAEnB,EAAE;IACd,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B"}
@@ -0,0 +1,6 @@
1
+ import type { PlacementType } from "../sps/placement.js";
2
+ import type { Environment } from "../sps/endpoint.js";
3
+ import type { DismissTimeOptions } from "../sps.js";
4
+ export declare const isDismissed: (placementType: PlacementType, iframeId: string) => boolean;
5
+ export declare const addDismiss: (placementType: PlacementType, iframeId: string, dismissTime?: DismissTimeOptions) => void;
6
+ export declare const getDismissScript: (publication: string, environment: Environment, placementType: string) => string;
@@ -0,0 +1,96 @@
1
+ import { SpsPublication } from "../sps/publication.js";
2
+ const DISMISS_KEY = "sps-dismiss-click";
3
+ export const isDismissed = (placementType, iframeId) => {
4
+ const dismissKey = `sps-dismissed-${placementType}-${iframeId}`;
5
+ const item = localStorage.getItem(dismissKey);
6
+ if (!item) {
7
+ return false;
8
+ }
9
+ try {
10
+ const data = JSON.parse(item);
11
+ if (data.status === "dismissed" && data.ttl > Date.now()) {
12
+ return true;
13
+ }
14
+ else {
15
+ localStorage.removeItem(dismissKey);
16
+ return false;
17
+ }
18
+ }
19
+ catch (e) {
20
+ console.error("Error parsing dismiss data from localStorage", e);
21
+ localStorage.removeItem(dismissKey);
22
+ return false;
23
+ }
24
+ };
25
+ const dismissListenerKeys = new Set();
26
+ export const addDismiss = (placementType, iframeId, dismissTime) => {
27
+ const key = `${placementType}:${iframeId}`;
28
+ if (dismissListenerKeys.has(key)) {
29
+ return;
30
+ }
31
+ dismissListenerKeys.add(key);
32
+ window.addEventListener("message", function (event) {
33
+ if (event.origin !== window.location.origin) {
34
+ return;
35
+ }
36
+ if (event.data.type === `${DISMISS_KEY}:${placementType}`) {
37
+ const data = {
38
+ ttl: calculateTtl(dismissTime),
39
+ status: "dismissed",
40
+ };
41
+ localStorage.setItem(`sps-dismissed-${placementType}-${iframeId}`, JSON.stringify(data));
42
+ document.getElementById(iframeId)?.remove();
43
+ }
44
+ });
45
+ };
46
+ const calculateTtl = (dismissTime) => {
47
+ const now = Date.now();
48
+ const timeMap = {
49
+ "1day": 24,
50
+ "2days": 48,
51
+ "3days": 72,
52
+ "4days": 96,
53
+ "5days": 120,
54
+ "6days": 144,
55
+ "1week": 7 * 24,
56
+ "2week": 14 * 24,
57
+ "1month": 30 * 24,
58
+ };
59
+ return now + (timeMap[dismissTime ?? 24] || 24) * 60 * 60 * 1000;
60
+ };
61
+ export const getDismissScript = (publication, environment, placementType) => `
62
+ document.addEventListener("click", function (event) {
63
+ if (event.target.attributes["data-dismiss-on-click"] != null) {
64
+ window.parent.postMessage(
65
+ {
66
+ type: "${DISMISS_KEY}:${placementType}",
67
+ },
68
+ "${mapPublicationToDomain(publication, environment)}"
69
+ );
70
+ }
71
+ });
72
+ `;
73
+ const mapPublicationToDomain = (publication, environment) => {
74
+ if (environment !== "production") {
75
+ return "*";
76
+ }
77
+ switch (publication) {
78
+ case SpsPublication.AFTENPOSTEN:
79
+ return "aftenposten.no";
80
+ case SpsPublication.VG:
81
+ return "vg.no";
82
+ case SpsPublication.AB:
83
+ return "aftonbladet.se";
84
+ case SpsPublication.BT:
85
+ return "bt.no";
86
+ case SpsPublication.SVD:
87
+ return "svd.se";
88
+ case SpsPublication.E24:
89
+ return "e24.no";
90
+ case SpsPublication.SA:
91
+ return "aftenbladet.no";
92
+ default:
93
+ return "";
94
+ }
95
+ };
96
+ //# sourceMappingURL=dismiss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismiss.js","sourceRoot":"","sources":["../../../src/actions/dismiss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { type SpsParams, type DefaultGetDecisionParams } from "./sps/queryBuilder.js";
2
+ import type { PlacementContentMap, PlacementType } from "./sps/placement.js";
3
+ /**
4
+ * Internal wrapper returned by the raw SPS fetch, combining the poster response
5
+ * with an optional reason string when a fallback poster is served.
6
+ * @typeParam T - The placement type
7
+ * @property posterResponse - {@link SPSPosterResponse} from SPS API
8
+ * @property failReason - A string describing why a fallback or non-standard response was returned, if applicable.
9
+ */
10
+ export type SPSPosterResponseWithFailReason<T extends PlacementType> = {
11
+ posterResponse: SPSPosterResponse<T>;
12
+ failReason?: string;
13
+ };
14
+ /**
15
+ * The raw poster payload returned by the SPS API.
16
+ * @typeParam T - The placement type
17
+ */
18
+ export type SPSPosterResponse<T extends PlacementType> = {
19
+ /**
20
+ * The placement content, which can be an HTML string or a structured object depending on the placement type.
21
+ */
22
+ content: PlacementContentMap[T];
23
+ /**
24
+ * The campaign identifier for this poster.
25
+ */
26
+ campaign: string;
27
+ /**
28
+ * The active experiment identifier, if any.
29
+ */
30
+ experiment?: string | null;
31
+ /**
32
+ * A human-readable name for the content item.
33
+ */
34
+ contentName: string;
35
+ /**
36
+ * An array of user segment names associated with this poster, if any.
37
+ */
38
+ segmentNames?: string[];
39
+ /**
40
+ * The A/B test group assignment for this poster, if applicable.
41
+ */
42
+ abTestGroup?: string | null;
43
+ /**
44
+ * A string describing why a fallback or non-standard response was returned, if applicable.
45
+ */
46
+ failReason?: string;
47
+ };
48
+ /**
49
+ * Returned by the SPS API when there is no content to display for the given placement.
50
+ */
51
+ export type SPSNoContentResponse = {
52
+ content: null;
53
+ };
54
+ /**
55
+ * Parameters returned by the SPS decision endpoint, used to subsequently fetch
56
+ * poster content via {@link fetchPoster}.
57
+ * @property contentKey - The resolved content key that identifies the poster to render, or `null` when no decision was made.
58
+ * @property segmentNames - Audience segment names resolved during decisioning.
59
+ */
60
+ export type GetPosterByDecisionParams = {
61
+ contentKey: string | null;
62
+ segmentNames?: string[];
63
+ };
64
+ /**
65
+ * Fetches a poster from the SPS API.
66
+ *
67
+ * Returns `null` when the API returns a 404 without a fallback poster configured, or
68
+ * when the API returns no content and `showFallbackPosterOnNoContent` is `false`.
69
+ * Throws when the API returns any other non-OK status and no fallback poster is provided.
70
+ *
71
+ * @param url - Full SPS API endpoint URL for the placement.
72
+ * @param params - Decisioning parameters to pass as query string.
73
+ * @param fallbackPoster - Optional poster to return on API errors or missing content.
74
+ * @param showFallbackPosterOnNoContent - When `true`, returns the fallback poster even on empty content responses.
75
+ * @returns The poster response wrapped in a fail-reason envelope, or `null` when no content is available. {@link SPSPosterResponseWithFailReason<T extends PlacementType>}
76
+ */
77
+ export declare const fetchPoster: <T extends PlacementType, U extends SpsParams>(url: string, params: U, fallbackPoster?: SPSPosterResponse<T>, showFallbackPosterOnNoContent?: boolean) => Promise<SPSPosterResponseWithFailReason<T> | null>;
78
+ /**
79
+ * Fetches a decision from the SPS API.
80
+ * Intended to be called from a server environment where a user JWT token is available.
81
+ *
82
+ * Throws when the API returns a non-OK status.
83
+ *
84
+ * @param url - Full SPS API endpoint URL for the decision endpoint.
85
+ * @param params - Decisioning parameters such as `accessCheck`, `pids`, and `source`.
86
+ * @param userJwtToken - Optional JWT token for the current user, forwarded in the `x-user-jwt` header.
87
+ * @returns The resolved decision parameters including the `contentKey`.
88
+ */
89
+ export declare const fetchDecision: <T extends SpsParams = DefaultGetDecisionParams>(url: string, params: T, userJwtToken?: string) => Promise<GetPosterByDecisionParams>;
@@ -0,0 +1,93 @@
1
+ import { convertParamsToQueryParams, getParamsFromDocument, } from "./sps/queryBuilder.js";
2
+ import { addSearchParams } from "./utils/url.js";
3
+ /**
4
+ * Fetches a poster from the SPS API.
5
+ *
6
+ * Returns `null` when the API returns a 404 without a fallback poster configured, or
7
+ * when the API returns no content and `showFallbackPosterOnNoContent` is `false`.
8
+ * Throws when the API returns any other non-OK status and no fallback poster is provided.
9
+ *
10
+ * @param url - Full SPS API endpoint URL for the placement.
11
+ * @param params - Decisioning parameters to pass as query string.
12
+ * @param fallbackPoster - Optional poster to return on API errors or missing content.
13
+ * @param showFallbackPosterOnNoContent - When `true`, returns the fallback poster even on empty content responses.
14
+ * @returns The poster response wrapped in a fail-reason envelope, or `null` when no content is available. {@link SPSPosterResponseWithFailReason<T extends PlacementType>}
15
+ */
16
+ export const fetchPoster = async (url, params, fallbackPoster, showFallbackPosterOnNoContent = false) => {
17
+ try {
18
+ const paramsFromDocument = getParamsFromDocument();
19
+ const queryParams = convertParamsToQueryParams({
20
+ ...paramsFromDocument,
21
+ ...params,
22
+ });
23
+ const posterResponse = await fetch(addSearchParams(url, queryParams), {
24
+ headers: {
25
+ "Content-Type": "application/json",
26
+ },
27
+ credentials: "include",
28
+ });
29
+ if (!posterResponse.ok) {
30
+ if (posterResponse.status === 404) {
31
+ if (fallbackPoster) {
32
+ return {
33
+ posterResponse: fallbackPoster,
34
+ failReason: "fallbackPoster - show fallback poster on 404 response from SPS",
35
+ };
36
+ }
37
+ return null;
38
+ }
39
+ throw new Error(`Error fetching poster from SPS: ${posterResponse.status} ${posterResponse.statusText}`);
40
+ }
41
+ const parsedResponse = await posterResponse.json();
42
+ if (!parsedResponse.content) {
43
+ if (fallbackPoster && showFallbackPosterOnNoContent) {
44
+ return {
45
+ posterResponse: fallbackPoster,
46
+ failReason: "fallbackPoster - show fallback poster on no Content response",
47
+ };
48
+ }
49
+ return null;
50
+ }
51
+ return {
52
+ posterResponse: parsedResponse,
53
+ };
54
+ }
55
+ catch (error) {
56
+ if (fallbackPoster) {
57
+ console.error(error);
58
+ return {
59
+ posterResponse: fallbackPoster,
60
+ failReason: error instanceof Error ? error.message : String(error),
61
+ };
62
+ }
63
+ throw error;
64
+ }
65
+ };
66
+ /**
67
+ * Fetches a decision from the SPS API.
68
+ * Intended to be called from a server environment where a user JWT token is available.
69
+ *
70
+ * Throws when the API returns a non-OK status.
71
+ *
72
+ * @param url - Full SPS API endpoint URL for the decision endpoint.
73
+ * @param params - Decisioning parameters such as `accessCheck`, `pids`, and `source`.
74
+ * @param userJwtToken - Optional JWT token for the current user, forwarded in the `x-user-jwt` header.
75
+ * @returns The resolved decision parameters including the `contentKey`.
76
+ */
77
+ export const fetchDecision = async (url, params, userJwtToken) => {
78
+ const queryParams = convertParamsToQueryParams({
79
+ ...params,
80
+ });
81
+ const decisionResponse = await fetch(addSearchParams(url, queryParams), {
82
+ headers: {
83
+ "Content-Type": "application/json",
84
+ "x-user-jwt": userJwtToken || "",
85
+ },
86
+ credentials: "include",
87
+ });
88
+ if (!decisionResponse.ok) {
89
+ throw new Error(`Error fetching decision from SPS: ${decisionResponse.status} ${decisionResponse.statusText}`);
90
+ }
91
+ return decisionResponse.json();
92
+ };
93
+ //# sourceMappingURL=apiClient.js.map
@@ -0,0 +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;AAoE9C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,GAAW,EACX,MAAS,EACT,cAAqC,EACrC,6BAA6B,GAAG,KAAK,EACe,EAAE;IACtD,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,0BAA0B,CAAC;YAC7C,GAAG,kBAAkB;YACrB,GAAG,MAAM;SACV,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YACpE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,WAAW,EAAE,SAAS;SACvB,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,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;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,GAAW,EACX,MAAS,EACT,YAAqB,EACe,EAAE;IACtC,MAAM,WAAW,GAAG,0BAA0B,CAAC;QAC7C,GAAG,MAAM;KACV,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;QACtE,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,YAAY,IAAI,EAAE;SACjC;QACD,WAAW,EAAE,SAAS;KACvB,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"}
@@ -0,0 +1,17 @@
1
+ import { SPS } from "./sps.js";
2
+ export * from "./sps.js";
3
+ export * from "./apiClient.js";
4
+ export * from "./sps/queryBuilder.js";
5
+ export * from "./sps/endpoint.js";
6
+ export * from "./sps/publication.js";
7
+ export * from "./sps/placement.js";
8
+ export * from "./tracking/create-tracking-params.js";
9
+ export * from "./tracking/tracking-to-pulse-origin.js";
10
+ export * from "./tracking/poster-data-to-pulse-object.js";
11
+ export * from "./tracking/tracking-to-search-params.js";
12
+ export * from "./utils/pulse.js";
13
+ export * from "./utils/source.js";
14
+ export * from "./utils/url.js";
15
+ export * from "./utils/utm.js";
16
+ export * from "./utils/xDomainId.js";
17
+ export default SPS;
@@ -0,0 +1,18 @@
1
+ import { SPS } from "./sps.js";
2
+ export * from "./sps.js";
3
+ export * from "./apiClient.js";
4
+ export * from "./sps/queryBuilder.js";
5
+ export * from "./sps/endpoint.js";
6
+ export * from "./sps/publication.js";
7
+ export * from "./sps/placement.js";
8
+ export * from "./tracking/create-tracking-params.js";
9
+ export * from "./tracking/tracking-to-pulse-origin.js";
10
+ export * from "./tracking/poster-data-to-pulse-object.js";
11
+ export * from "./tracking/tracking-to-search-params.js";
12
+ export * from "./utils/pulse.js";
13
+ export * from "./utils/source.js";
14
+ export * from "./utils/url.js";
15
+ export * from "./utils/utm.js";
16
+ export * from "./utils/xDomainId.js";
17
+ export default SPS;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAEhC,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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Valid deployment environment identifiers.
3
+ * Controls which SPS API endpoint the SDK targets.
4
+ */
5
+ export type Environment = "production" | "staging" | "production-test" | "staging-test" | "pre-staging" | "development" | "test" | "proxy";
6
+ export declare const getEndpoint: (env: Environment, domain?: string) => string;
7
+ export declare const getCdnUrl: (env: Environment) => string;
@@ -0,0 +1,37 @@
1
+ export const getEndpoint = (env, domain = "schibsted.tech") => {
2
+ switch (env) {
3
+ case "production":
4
+ return `https://cm.${domain}/v3`;
5
+ case "staging":
6
+ return `https://test-cm.${domain}/v3`;
7
+ case "production-test":
8
+ return `https://sps-api.ma.schibsted.digital.no/v3`;
9
+ case "staging-test":
10
+ return `https://sps-api.pre.ma.schibsted.digital/v3`;
11
+ case "pre-staging":
12
+ return "https://sps-api.dev.schibsted.digital/v3";
13
+ case "development":
14
+ return `http://localhost:3001/v3`;
15
+ case "test":
16
+ return "http://msw-mock-endpoint";
17
+ case "proxy":
18
+ return `${window.location.origin}/cm/v3`;
19
+ default:
20
+ throw new Error(`Unknown environment: ${env}`);
21
+ }
22
+ };
23
+ export const getCdnUrl = (env) => {
24
+ switch (env) {
25
+ case "staging":
26
+ case "pre-staging":
27
+ case "test":
28
+ case "proxy":
29
+ case "staging-test":
30
+ return "https://cdn.pre.ma.schibsted.digital";
31
+ case "development":
32
+ return "http://localhost:9000";
33
+ default:
34
+ return "https://cdn.ma.schibsted.digital";
35
+ }
36
+ };
37
+ //# sourceMappingURL=endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../../src/sps/endpoint.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAgB,EAAE,MAAM,GAAG,gBAAgB,EAAU,EAAE;IACjF,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,YAAY;YACf,OAAO,cAAc,MAAM,KAAK,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,mBAAmB,MAAM,KAAK,CAAC;QACxC,KAAK,iBAAiB;YACpB,OAAO,4CAA4C,CAAC;QACtD,KAAK,cAAc;YACjB,OAAO,6CAA6C,CAAC;QACvD,KAAK,aAAa;YAChB,OAAO,0CAA0C,CAAC;QACpD,KAAK,aAAa;YAChB,OAAO,0BAA0B,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,0BAA0B,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC;QAC3C;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAgB,EAAU,EAAE;IACpD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,cAAc;YACjB,OAAO,sCAAsC,CAAC;QAChD,KAAK,aAAa;YAChB,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,kCAAkC,CAAC;IAC9C,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ export type PlacementType = PlacementTypeWithRequiredFallback | PlacementTypeWithOptionalFallback;
2
+ /**
3
+ * Placement types that **require** a `fallbackPoster` because they are critical to the user journey.
4
+ * (e.g. `salesposter` and `ip`).
5
+ */
6
+ export type PlacementTypeWithRequiredFallback = keyof Pick<PlacementContentMap, "salesposter" | "ip">;
7
+ /**
8
+ * Placement types for which a `fallbackPoster` is optional.
9
+ */
10
+ export type PlacementTypeWithOptionalFallback = Exclude<keyof PlacementContentMap, "salesposter" | "ip">;
11
+ /**
12
+ * Placement types that do __not__ require any parameters to be passed to SPS.
13
+ */
14
+ export type PlacementTypeWithOptionalProps = Exclude<keyof PlacementContentMap, "salesposter" | "ip" | "bottombar">;
15
+ /**
16
+ * Maps each placement type string to the TypeScript type of its `content` value.
17
+ * HTML placements map to `string`; JSON placements map to their respective object shapes.
18
+ */
19
+ export type PlacementContentMap = {
20
+ kyststripe: Kyststripe;
21
+ kystbenefit: Record<string, string>;
22
+ benefit: Benefit;
23
+ coreheader: Record<string, string>;
24
+ bottombar: string;
25
+ foldup: string;
26
+ infopage: string;
27
+ infeed: string;
28
+ ip: string;
29
+ override: string;
30
+ pushdown: string;
31
+ receipt: string;
32
+ reklame: string;
33
+ salesposter: string;
34
+ stripe: string;
35
+ takeover: string;
36
+ mypage: string;
37
+ postpurchase: string;
38
+ };
39
+ export type Kyststripe = {
40
+ showBuyAboStripe: boolean;
41
+ desktopText: string;
42
+ mobileText: string;
43
+ buttonText: string;
44
+ buyLink: string;
45
+ backgroundColor: string;
46
+ textColor: string;
47
+ buttonBgColor: string;
48
+ buttonTxtColor: string;
49
+ buttonId: string;
50
+ };
51
+ export type Benefit = {
52
+ disclaimerText: string;
53
+ disclaimerTextColor: string;
54
+ backgroundColor: string;
55
+ buttonText: string;
56
+ buttonColor: string;
57
+ textButtonColor: string;
58
+ headline: string;
59
+ headlineColor: string;
60
+ kicker: string;
61
+ URL: string;
62
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../../src/sps/placement.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Enumeration of supported SPS publications.
3
+ * Pass one of these values as `publication` when constructing an {@link SPS} instance.
4
+ */
5
+ export declare enum SpsPublication {
6
+ AB = "ab",
7
+ ABAPP = "abapp",
8
+ AFTENPOSTEN = "aftenposten",
9
+ APP = "app",
10
+ BEDRIFT = "bedrift",
11
+ BT = "bt",
12
+ CBTTEST = "cbttest",
13
+ DP = "dp",
14
+ E24 = "e24",
15
+ FULLTILGANG = "fulltilgang",
16
+ SA = "sa",
17
+ SUPERPARKETET = "superparketet",
18
+ SVD = "svd",
19
+ VEKTKLUBB = "vektklubb",
20
+ VG = "vg",
21
+ VGTV = "vgtv",
22
+ WELLOBE = "wellobe"
23
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Enumeration of supported SPS publications.
3
+ * Pass one of these values as `publication` when constructing an {@link SPS} instance.
4
+ */
5
+ export var SpsPublication;
6
+ (function (SpsPublication) {
7
+ SpsPublication["AB"] = "ab";
8
+ SpsPublication["ABAPP"] = "abapp";
9
+ SpsPublication["AFTENPOSTEN"] = "aftenposten";
10
+ SpsPublication["APP"] = "app";
11
+ SpsPublication["BEDRIFT"] = "bedrift";
12
+ SpsPublication["BT"] = "bt";
13
+ SpsPublication["CBTTEST"] = "cbttest";
14
+ SpsPublication["DP"] = "dp";
15
+ SpsPublication["E24"] = "e24";
16
+ SpsPublication["FULLTILGANG"] = "fulltilgang";
17
+ SpsPublication["SA"] = "sa";
18
+ SpsPublication["SUPERPARKETET"] = "superparketet";
19
+ SpsPublication["SVD"] = "svd";
20
+ SpsPublication["VEKTKLUBB"] = "vektklubb";
21
+ SpsPublication["VG"] = "vg";
22
+ SpsPublication["VGTV"] = "vgtv";
23
+ SpsPublication["WELLOBE"] = "wellobe";
24
+ })(SpsPublication || (SpsPublication = {}));
25
+ //# sourceMappingURL=publication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication.js","sourceRoot":"","sources":["../../../src/sps/publication.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,cAkBX;AAlBD,WAAY,cAAc;IACxB,2BAAS,CAAA;IACT,iCAAe,CAAA;IACf,6CAA2B,CAAA;IAC3B,6BAAW,CAAA;IACX,qCAAmB,CAAA;IACnB,2BAAS,CAAA;IACT,qCAAmB,CAAA;IACnB,2BAAS,CAAA;IACT,6BAAW,CAAA;IACX,6CAA2B,CAAA;IAC3B,2BAAS,CAAA;IACT,iDAA+B,CAAA;IAC/B,6BAAW,CAAA;IACX,yCAAuB,CAAA;IACvB,2BAAS,CAAA;IACT,+BAAa,CAAA;IACb,qCAAmB,CAAA;AACrB,CAAC,EAlBW,cAAc,KAAd,cAAc,QAkBzB"}
@@ -0,0 +1,21 @@
1
+ export type PropValue = string | number | boolean | undefined | null | string[] | number[] | boolean[];
2
+ /**
3
+ * Generic map of SPS request parameters.
4
+ */
5
+ export type SpsParams = {
6
+ [key: string]: PropValue;
7
+ };
8
+ type AccessCheckValues = "auto" | "closed" | "login";
9
+ /**
10
+ * Required parameters for the SPS decision endpoint.
11
+ * Includes access check values and subscription product IDs.
12
+ */
13
+ export type DefaultGetDecisionParams = {
14
+ accessCheck: AccessCheckValues;
15
+ pids: string;
16
+ source: string;
17
+ requestUrl: string;
18
+ } & SpsParams;
19
+ export declare const convertParamsToQueryParams: (props: SpsParams) => URLSearchParams;
20
+ export declare const getParamsFromDocument: () => SpsParams;
21
+ export {};
@@ -0,0 +1,26 @@
1
+ import { getSourceFromDocument } from "../utils/source.js";
2
+ export const convertParamsToQueryParams = (props) => {
3
+ const queryParams = new URLSearchParams();
4
+ Object.entries(props).forEach(([key, value]) => {
5
+ if (value === undefined || value === null) {
6
+ return;
7
+ }
8
+ if (Array.isArray(value)) {
9
+ value.forEach((v) => {
10
+ queryParams.append(key, String(v));
11
+ });
12
+ return;
13
+ }
14
+ queryParams.append(key, String(value));
15
+ });
16
+ return queryParams;
17
+ };
18
+ export const getParamsFromDocument = () => {
19
+ const source = getSourceFromDocument();
20
+ const requestUrl = window.location.href;
21
+ return {
22
+ source,
23
+ requestUrl,
24
+ };
25
+ };
26
+ //# sourceMappingURL=queryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/sps/queryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAgCxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAgB,EAAmB,EAAE;IAC9E,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;IAE1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClB,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAc,EAAE;IACnD,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC,OAAO;QACL,MAAM;QACN,UAAU;KACX,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { JsonContent } from "../sps.js";
2
+ import { type SPSPulseTrackingParams } from "../utils/pulseProxy.js";
3
+ import type { Environment } from "./endpoint.js";
4
+ export interface RewritePlaceholderVariablesParams {
5
+ /**
6
+ * Url that should be used to return to this article after purchase flow
7
+ */
8
+ redirectUrl?: string;
9
+ /**
10
+ * The parameters that should be added to salesposter links
11
+ */
12
+ searchParams: URLSearchParams;
13
+ /**
14
+ * The fully qualified login url
15
+ */
16
+ loginUrl?: string;
17
+ /**
18
+ * Whether to append the provided `searchParams` to links. Defaults to true.
19
+ */
20
+ appendSearchParams?: boolean;
21
+ }
22
+ /**
23
+ * Enriches the salesposter html links with the correct parameters
24
+ * @returns StructuredResponse with the updated html
25
+ */
26
+ export declare const rewritePlaceholderVariables: (content: string, { redirectUrl, loginUrl, searchParams, appendSearchParams, }: RewritePlaceholderVariablesParams, publication: string, environment: Environment, placementType: string, pulseTrackingParams?: SPSPulseTrackingParams) => string;
27
+ export declare const rewriteJsonPosterVariables: (content: JsonContent, { searchParams, appendSearchParams, }: {
28
+ searchParams: URLSearchParams;
29
+ appendSearchParams?: boolean;
30
+ }) => JsonContent;
31
+ /**
32
+ * Rewrite values of a Record<string, string> that
33
+ * are URL-like, adding all tracking params.
34
+ */
35
+ export declare function appendTrackingParams(jsonContentItem: Record<string, string>, searchParams: URLSearchParams): Record<string, string>;