@schibsted/advertory 2.51.8 → 2.52.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 (126) hide show
  1. package/core/aftenposten/es/index.css +1 -1
  2. package/core/aftenposten/es/index.d.ts +8 -0
  3. package/core/aftenposten/es/index.js +1 -1
  4. package/core/aftenposten/index.d.ts +8 -0
  5. package/core/aftenposten/index.js +1 -1
  6. package/core/aftonbladet/es/index.css +1 -1
  7. package/core/aftonbladet/es/index.d.ts +8 -0
  8. package/core/aftonbladet/es/index.js +1 -1
  9. package/core/aftonbladet/index.d.ts +8 -0
  10. package/core/aftonbladet/index.js +1 -1
  11. package/core/aftonbladetv2/es/index.css +1 -1
  12. package/core/aftonbladetv2/es/index.d.ts +8 -0
  13. package/core/aftonbladetv2/es/index.js +1 -1
  14. package/core/bt/es/index.css +1 -1
  15. package/core/bt/es/index.d.ts +8 -0
  16. package/core/bt/es/index.js +1 -1
  17. package/core/bt/index.d.ts +8 -0
  18. package/core/bt/index.js +1 -1
  19. package/core/e24/es/index.css +1 -1
  20. package/core/e24/es/index.d.ts +8 -0
  21. package/core/e24/es/index.js +1 -1
  22. package/core/e24/index.d.ts +8 -0
  23. package/core/e24/index.js +1 -1
  24. package/core/e24v2/es/index.css +1 -1
  25. package/core/e24v2/es/index.d.ts +8 -0
  26. package/core/e24v2/es/index.js +1 -1
  27. package/core/fotbollskanalen/es/index.css +1 -1
  28. package/core/fotbollskanalen/es/index.d.ts +8 -0
  29. package/core/fotbollskanalen/es/index.js +1 -1
  30. package/core/fotbollskanalen/index.d.ts +8 -0
  31. package/core/fotbollskanalen/index.js +1 -1
  32. package/core/godare/index.d.ts +8 -0
  33. package/core/godare/index.js +1 -1
  34. package/core/godt/index.d.ts +8 -0
  35. package/core/godt/index.js +1 -1
  36. package/core/klart/index.d.ts +8 -0
  37. package/core/klart/index.js +1 -1
  38. package/core/koket/es/index.d.ts +8 -0
  39. package/core/koket/es/index.js +1 -1
  40. package/core/koket/index.d.ts +8 -0
  41. package/core/koket/index.js +1 -1
  42. package/core/kompakt/index.d.ts +8 -0
  43. package/core/kompakt/index.js +1 -1
  44. package/core/minmote/index.d.ts +8 -0
  45. package/core/minmote/index.js +1 -1
  46. package/core/pent/index.d.ts +8 -0
  47. package/core/pent/index.js +1 -1
  48. package/core/sa/es/index.css +1 -1
  49. package/core/sa/es/index.d.ts +8 -0
  50. package/core/sa/es/index.js +1 -1
  51. package/core/sa/index.d.ts +8 -0
  52. package/core/sa/index.js +1 -1
  53. package/core/svd/es/index.css +1 -1
  54. package/core/svd/es/index.d.ts +8 -0
  55. package/core/svd/es/index.js +1 -1
  56. package/core/svd/index.d.ts +8 -0
  57. package/core/svd/index.js +1 -1
  58. package/core/svdv2/es/index.css +1 -1
  59. package/core/svdv2/es/index.d.ts +8 -0
  60. package/core/svdv2/es/index.js +1 -1
  61. package/core/tek/index.d.ts +8 -0
  62. package/core/tek/index.js +1 -1
  63. package/core/tv4/es/index.css +1 -1
  64. package/core/tv4/es/index.d.ts +8 -0
  65. package/core/tv4/es/index.js +1 -1
  66. package/core/tv4/index.d.ts +8 -0
  67. package/core/tv4/index.js +1 -1
  68. package/core/tvnu/index.d.ts +8 -0
  69. package/core/tvnu/index.js +1 -1
  70. package/core/vg/es/index.css +1 -1
  71. package/core/vg/es/index.d.ts +8 -0
  72. package/core/vg/es/index.js +1 -1
  73. package/core/vg/index.d.ts +8 -0
  74. package/core/vg/index.js +1 -1
  75. package/core/vgv2/es/index.css +1 -1
  76. package/core/vgv2/es/index.d.ts +8 -0
  77. package/core/vgv2/es/index.js +1 -1
  78. package/features/ad-native/index.d.ts +3 -0
  79. package/features/brandmetrics/index.js +1 -1
  80. package/features/dr-edition/es/index.d.ts +3 -0
  81. package/features/dr-edition/es/index.js +1 -1
  82. package/features/dr-edition/index.d.ts +3 -0
  83. package/features/dr-edition/index.js +1 -1
  84. package/features/glimr/index.js +1 -1
  85. package/features/tracker/index.d.ts +361 -5
  86. package/features/tracker/index.js +1 -1
  87. package/package.json +1 -1
  88. package/sites/aftenposten/es/index.css +1 -1
  89. package/sites/aftonbladet/es/index.css +1 -1
  90. package/sites/aftonbladetv2/es/index.css +1 -1
  91. package/sites/bt/es/index.css +1 -1
  92. package/sites/e24/es/index.css +1 -1
  93. package/sites/e24v2/es/index.css +1 -1
  94. package/sites/fotbollskanalen/es/index.css +1 -0
  95. package/sites/fotbollskanalen/es/index.d.ts +18 -1
  96. package/sites/fotbollskanalen/es/index.js +1 -1
  97. package/sites/fotbollskanalen/index.d.ts +18 -1
  98. package/sites/fotbollskanalen/index.js +1 -1
  99. package/sites/koket/es/index.css +1 -0
  100. package/sites/koket/es/index.d.ts +18 -1
  101. package/sites/koket/es/index.js +1 -1
  102. package/sites/koket/index.d.ts +18 -1
  103. package/sites/koket/index.js +1 -1
  104. package/sites/sa/es/index.css +1 -1
  105. package/sites/svd/es/index.css +1 -1
  106. package/sites/svdv2/es/index.css +1 -1
  107. package/sites/tv4/es/index.css +1 -0
  108. package/sites/tv4/es/index.d.ts +18 -1
  109. package/sites/tv4/es/index.js +1 -1
  110. package/sites/tv4/index.d.ts +18 -1
  111. package/sites/tv4/index.js +1 -1
  112. package/sites/vg/es/index.css +1 -1
  113. package/sites/vgv2/es/index.css +1 -1
  114. package/types/core/handlers/tcf/consent.d.ts +3 -0
  115. package/types/core/handlers/tcf/consent.test.d.ts +1 -0
  116. package/types/core/handlers/tcf/schibsted-ad-choices.d.ts +4 -0
  117. package/types/core/interface/config.d.ts +3 -0
  118. package/types/core/interface/tcf.d.ts +5 -0
  119. package/types/features/interface/tracker.d.ts +0 -9
  120. package/types/features/tracker/index.d.ts +3 -2
  121. package/types/sites/fotbollskanalen/formats/index.d.ts +1 -0
  122. package/types/sites/fotbollskanalen/index.d.ts +2 -1
  123. package/types/sites/koket/formats/index.d.ts +1 -0
  124. package/types/sites/koket/index.d.ts +2 -1
  125. package/types/sites/tv4/formats/index.d.ts +1 -0
  126. package/types/sites/tv4/index.d.ts +2 -1
@@ -1,3 +1,17 @@
1
+ type AstAdType = 'banner' | 'video' | 'native' | 'outstream';
2
+ type AstKeywordValue = Array<string> | string | number | Array<number> | undefined;
3
+ type AstKeywords = Record<string, AstKeywordValue> & {
4
+ 'se-generic-adformat'?: Array<string>;
5
+ 'se-generic-targetid'?: Array<string>;
6
+ 'se-sch-supply_type'?: Array<string>;
7
+ 'no-sno-adformat'?: Array<string>;
8
+ 'no-sno-targetid'?: Array<string>;
9
+ 'aa-sch-dynamic-outstream'?: Array<string>;
10
+ };
11
+ interface SafeFrameConfig {
12
+ allowExpansionByPush?: boolean;
13
+ allowExpansionByOverlay?: boolean;
14
+ }
1
15
  interface EidsUserSource {
2
16
  id: string;
3
17
  source: string;
@@ -6,6 +20,29 @@ interface AstUserIds {
6
20
  type: string;
7
21
  eids: Array<EidsUserSource>;
8
22
  }
23
+ interface AstUser {
24
+ externalUid?: string;
25
+ dnt?: boolean;
26
+ userIds?: Array<AstUserIds>;
27
+ }
28
+ interface AstTrackingManagement {
29
+ native?: {
30
+ loadViewabilityScriptAt?: 'adresponse' | 'impression';
31
+ };
32
+ }
33
+ interface AstRenderingManagement {
34
+ sandboxAdIframe: boolean;
35
+ sandboxAttributes: Array<string>;
36
+ }
37
+ interface AstPageOptions {
38
+ keywords: Record<string, AstKeywordValue>;
39
+ enableSafeFrame?: boolean;
40
+ disablePsa?: boolean;
41
+ user?: AstUser;
42
+ member?: number;
43
+ trackingManagement?: AstTrackingManagement;
44
+ renderingManagement?: AstRenderingManagement;
45
+ }
9
46
 
10
47
  declare const Countries: {
11
48
  readonly NO: "no";
@@ -28,15 +65,22 @@ interface TrackerInstance {
28
65
  pageViewId?: string;
29
66
  };
30
67
  }
68
+ interface PulseInstance {
69
+ pulseTracker: TrackerInstance;
70
+ getSDK: () => Promise<TrackerInstance>;
71
+ trackElementView?: (eventInput: unknown) => Promise<void>;
72
+ trackElementClick?: (eventInput: unknown) => Promise<void>;
73
+ trackClickUIElement?: (eventInput: unknown) => Promise<void>;
74
+ trackViewUIElement?: (eventInput: unknown) => Promise<void>;
75
+ }
31
76
  interface Tracker {
32
77
  clientId: string;
33
78
  instance: TrackerInstance;
34
79
  hasherUrl?: string;
35
80
  }
36
- interface XandrPPIDProps {
37
- country: Country;
38
- tracker?: Tracker;
39
- timeout?: number;
81
+ interface Pulse {
82
+ clientId: string;
83
+ instance: PulseInstance;
40
84
  }
41
85
  interface UserIdsObject {
42
86
  userIds: Array<AstUserIds>;
@@ -65,7 +109,319 @@ interface RelevantYieldPPIDConfig {
65
109
  };
66
110
  }
67
111
 
68
- declare const setXandrPPIDs: ({ country, tracker, timeout }: XandrPPIDProps) => Promise<void>;
112
+ declare const DeviceTypes: {
113
+ readonly MOBILE: "mobile";
114
+ readonly TABLET: "tablet";
115
+ readonly DESKTOP: "desktop";
116
+ };
117
+ type DeviceType = (typeof DeviceTypes)[keyof typeof DeviceTypes];
118
+
119
+ declare const PageTypes: {
120
+ readonly FRONT: "front";
121
+ readonly ARTICLE: "article";
122
+ readonly SECTION: "section";
123
+ readonly COLLECTION: "collection";
124
+ readonly OTHER: "other";
125
+ };
126
+ type PageType = (typeof PageTypes)[keyof typeof PageTypes];
127
+
128
+ type MarginPriority = 'high' | 'normal' | 'low';
129
+ interface PrioEntry {
130
+ renderMargin: number;
131
+ refreshMargin: number;
132
+ }
133
+ interface PrioPreloadMarginMap {
134
+ high?: Partial<PrioEntry>;
135
+ normal?: Partial<PrioEntry>;
136
+ low?: Partial<PrioEntry>;
137
+ }
138
+
139
+ type DistributionTypes = 'REALESTATE' | 'REALESTATE_RETARGET' | 'REALESTATE_LEISURE' | 'REALESTATE_LEISURE_RETARGET' | 'REALESTATE_PROJECT' | 'REALESTATE_PROJECT_RETARGET' | 'CAR' | 'JOB';
140
+
141
+ declare const Newsrooms: {
142
+ readonly SVD: "svd";
143
+ readonly VG: "vg";
144
+ readonly GODARE: "godare";
145
+ readonly AFTENPOSTEN: "aftenposten";
146
+ readonly SA: "sa";
147
+ readonly BT: "bt";
148
+ readonly AFTONBLADET: "aftonbladet";
149
+ readonly E24: "e24";
150
+ readonly MINMOTE: "minmote";
151
+ readonly PENT: "pent";
152
+ readonly GODT: "godt";
153
+ readonly TEK: "tekno";
154
+ readonly KLART: "klart";
155
+ readonly TVNU: "tvnu";
156
+ readonly POLARIS: "polaris";
157
+ readonly KOKET: "koket";
158
+ readonly TV4: "tv4";
159
+ readonly FOTBOLLSKANALEN: "fotbollskanalen";
160
+ };
161
+ type Newsroom = (typeof Newsrooms)[keyof typeof Newsrooms];
162
+
163
+ interface SiteConfig {
164
+ publisher: string;
165
+ country: Country;
166
+ astUrl?: string;
167
+ gptUrl?: string;
168
+ testMember?: number;
169
+ pageType: PageType;
170
+ pageOptions: AstPageOptions;
171
+ placements: Placements;
172
+ keywordsConfig?: KeywordsConfig;
173
+ deviceType: DeviceType;
174
+ isMobileApp?: boolean;
175
+ glimr?: GlimrConfig;
176
+ tcf?: TCFConfig;
177
+ prebid?: PrebidConfig;
178
+ tracker?: Tracker;
179
+ pulse?: Pulse;
180
+ finnBlink?: FinnBlinkConfig;
181
+ wallpaper?: WallpaperConfig;
182
+ fullscreenScroll?: FullscreenScrollConfig;
183
+ appearanceConfig: AppearanceConfig;
184
+ queryConfig?: QueryConfig;
185
+ refreshConfig?: RefreshConfig;
186
+ preloadMarginsConfig?: Record<DeviceType, PrioPreloadMarginMap>;
187
+ takeover?: TakeoverConfig;
188
+ brandmetrics?: BrandmetricsConfig;
189
+ gdpr?: GdprConfig;
190
+ norstat?: NorstatConfig;
191
+ siteSpecificConfig?: SiteSpecificConfig;
192
+ sponsorstripe?: SponsorstripeConfig;
193
+ privacyBroker?: PrivacyBrokerConfig;
194
+ drEdition?: DrEditionConfig;
195
+ forwardExternalImpId?: boolean;
196
+ requestSize?: number;
197
+ nativeTrackingConfig?: NativeTrackingConfig;
198
+ sandboxAdIframeEnabled?: boolean;
199
+ pageSectionsSelectors?: PageSectionsSelectors;
200
+ editableConfiguration?: {
201
+ useS3Config?: boolean;
202
+ pageTypeToFetch?: string;
203
+ };
204
+ }
205
+ interface NativeTrackingConfig {
206
+ nativeTrackingEnabled?: boolean;
207
+ fireImpressionsBasedOnAppearanceThreshold?: boolean;
208
+ }
209
+ interface SiteSpecificConfig {
210
+ publisherClassName?: Newsroom;
211
+ fullWidthFormatClassName?: 'netboard' | 'panorama';
212
+ classesToRemoveOnRefresh?: Array<string>;
213
+ }
214
+ interface Placement {
215
+ id: string;
216
+ sizes: Array<Array<number>>;
217
+ allowedFormats: Array<AstAdType>;
218
+ invCode: string;
219
+ keywords: any;
220
+ refresh?: boolean;
221
+ bfCacheRefresh?: boolean;
222
+ priority?: MarginPriority;
223
+ ssa?: boolean;
224
+ threshold?: number;
225
+ finnBlink?: FinnBlinkPlacementConfig;
226
+ nativeCustomProperties?: Array<string>;
227
+ minViewWidth?: number;
228
+ dynamicSizeWidthCheck?: boolean;
229
+ safeframeConfig?: SafeFrameConfig;
230
+ resizeAdParentDiv?: boolean;
231
+ positionConfig?: Array<PositionConfig>;
232
+ drEdition?: DrEditionPlacementConfig;
233
+ isBackfill?: boolean;
234
+ takeoverCookieCapForSharedPlacement?: boolean;
235
+ }
236
+ interface Placements {
237
+ desktop: Array<Placement>;
238
+ tablet: Array<Placement>;
239
+ mobile: Array<Placement>;
240
+ }
241
+ interface AppearanceConfig {
242
+ defaultThreshold: {
243
+ mobile: number;
244
+ tablet: number;
245
+ desktop: number;
246
+ };
247
+ clearProbableDimensionsEnabled?: boolean;
248
+ isDarkModeEnabled?: boolean;
249
+ mainColumnWidth?: number;
250
+ subsectionTheme?: string;
251
+ }
252
+ interface PageSectionsSelectors {
253
+ top?: string;
254
+ left?: string;
255
+ right?: string;
256
+ main?: string;
257
+ mainFirstColumn?: string;
258
+ mainSecondColumn?: string;
259
+ }
260
+ interface KeywordsConfig {
261
+ includeCountingKeywordInTags?: boolean;
262
+ sponsors?: string;
263
+ }
264
+ interface QueryConfig {
265
+ queryByDataDevice?: boolean;
266
+ lazyLoadingV3?: {
267
+ enabled: boolean;
268
+ rootMargin: string;
269
+ };
270
+ placementBatches?: PlacementBatchesConfig;
271
+ }
272
+ interface PositionConfig {
273
+ adPositionIndex: number;
274
+ sizes?: Array<Array<number>>;
275
+ keywords?: AstKeywords;
276
+ }
277
+ type FinnBlinkTheme = 'light' | 'dark';
278
+ interface FinnBlinkConfig {
279
+ enabled?: boolean;
280
+ channel?: string;
281
+ userId?: string;
282
+ uuid?: string;
283
+ identifierUrl?: string;
284
+ theme?: FinnBlinkTheme;
285
+ replacementConfig?: {
286
+ adsToReplace?: Array<Array<string>>;
287
+ sizes?: {
288
+ width: number;
289
+ height: number;
290
+ };
291
+ };
292
+ }
293
+ interface FinnBlinkPlacementConfig {
294
+ enabled: boolean;
295
+ renderOnlyWithAdBlock?: boolean;
296
+ position: string;
297
+ distributionTypes?: Array<DistributionTypes>;
298
+ height?: number;
299
+ limit?: number;
300
+ offset?: number;
301
+ requireImage?: boolean;
302
+ rec?: boolean;
303
+ theme?: FinnBlinkTheme;
304
+ advertoryTheme?: string;
305
+ }
306
+ interface PrebidConfig {
307
+ enabled: boolean;
308
+ url: string;
309
+ id: string;
310
+ externalUidInAuctionEnabled: boolean;
311
+ relevantCbTimeout?: number;
312
+ forwardGlimrTags?: boolean;
313
+ }
314
+ interface TCFConfig {
315
+ enabled: boolean;
316
+ schibstedAdChoicesEnabled?: boolean;
317
+ schibstedConsentToPayEnabled?: boolean;
318
+ schibstedAdChoicesOverrideValue?: string;
319
+ timeout?: number;
320
+ }
321
+ interface GlimrConfig {
322
+ enabled: boolean;
323
+ clientId: string;
324
+ }
325
+ interface WallpaperConfig {
326
+ enabled: boolean;
327
+ options?: WallpaperConfigOptions;
328
+ }
329
+ interface WallpaperConfigOptions {
330
+ appMainContainerSelector?: string;
331
+ wallpaperAnchorSelector?: string;
332
+ }
333
+ interface BrandmetricsConfig {
334
+ enabled: boolean;
335
+ url: string;
336
+ }
337
+ interface GdprConfig {
338
+ url?: string;
339
+ allowHidingAds?: boolean;
340
+ }
341
+ interface FullscreenScrollConfig {
342
+ fadingHeaderEnabled: boolean;
343
+ headerSelectors: Array<string>;
344
+ skyscraperSelectors?: Array<string>;
345
+ headerZIndex: number;
346
+ overlayStyles?: OverlayStyles;
347
+ moveCogwheelToTheLeft?: boolean;
348
+ iosSafeAreaTopFix?: string;
349
+ }
350
+ interface OverlayStyles {
351
+ backgroundColor?: string;
352
+ foregroundColor?: string;
353
+ articlesContainerWidth?: number;
354
+ margin?: string;
355
+ beforeContentValue?: string;
356
+ }
357
+ interface RefreshConfig {
358
+ delayTime?: number;
359
+ scrollRefreshEnabled?: boolean;
360
+ visibilityStateRefreshEnabled?: boolean;
361
+ backForwardNavigationRefreshEnabled?: boolean;
362
+ }
363
+ interface WelcomePageConfig {
364
+ showArrowIcon?: boolean;
365
+ headerElementSelector?: string;
366
+ buttonLabel?: string;
367
+ showCloseButton?: boolean;
368
+ }
369
+ interface SplashConfig {
370
+ themeColors?: ThemeColors;
371
+ buttonLabel: string;
372
+ logotype: Logotype;
373
+ showArrowIcon?: boolean;
374
+ showAnnonsLabel?: boolean;
375
+ }
376
+ interface TakeoverConfig {
377
+ enabled?: boolean;
378
+ splash?: SplashConfig;
379
+ welcomePage?: WelcomePageConfig;
380
+ topscroller?: WelcomePageConfig;
381
+ cookieCapName?: string | null;
382
+ cookieCapTime?: number;
383
+ setCookieCapForNotShownAd?: boolean;
384
+ }
385
+ interface Logotype {
386
+ url: string;
387
+ alt: string;
388
+ }
389
+ interface ThemeColors {
390
+ backgroundColor: string;
391
+ color: string;
392
+ }
393
+ interface NorstatConfig {
394
+ enabled: true;
395
+ }
396
+ interface SponsorstripeConfig {
397
+ toogleEnabled: boolean;
398
+ headerSelector?: string;
399
+ containersSelectors?: Array<string>;
400
+ }
401
+ interface PrivacyBrokerConfig {
402
+ enabled: boolean;
403
+ clientId: string;
404
+ storageKeyPrefix: string;
405
+ }
406
+ interface DrEditionConfig {
407
+ enabled: boolean;
408
+ containerSelector: string;
409
+ wrapperSelector: string;
410
+ fallbackGlobalEditionName?: string;
411
+ videoScriptUrl?: string;
412
+ addPreviewVideo?: (videoElement: HTMLElement) => void;
413
+ }
414
+ interface DrEditionPlacementConfig {
415
+ editionName: string;
416
+ }
417
+ interface DevicePlacementBatches {
418
+ [key: string]: Array<string>;
419
+ }
420
+ type PlacementBatchesConfig = {
421
+ [device in DeviceType]: DevicePlacementBatches;
422
+ };
423
+
424
+ declare const setXandrPPIDs: (siteConfig: SiteConfig) => Promise<void>;
69
425
  declare const getUserIdsObject: (country: Country) => UserIdsObject;
70
426
  declare const getPPIDLoggedInStatus: () => PPIDLoggedInStatusKeywords;
71
427
  declare const getPPIDRelevantYieldConfig: (country: Country) => RelevantYieldPPIDConfig | object;
@@ -1 +1 @@
1
- "use strict";function i(i,e,t,n){return new(t||(t=Promise))(function(s,d){function r(i){try{a(n.next(i))}catch(i){d(i)}}function o(i){try{a(n.throw(i))}catch(i){d(i)}}function a(i){var e;i.done?s(i.value):(e=i.value,e instanceof t?e:new t(function(i){i(e)})).then(r,o)}a((n=n.apply(i,e||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const e={get:(e,t)=>i(void 0,void 0,void 0,function*(){const i=yield fetch(e,t);if(!i.ok)throw new Error(i.statusText);return yield i.json()}),post:(e,t,n)=>i(void 0,void 0,void 0,function*(){const i=JSON.stringify(n),s=yield fetch(e,{method:"POST",headers:t,body:i});if(!s.ok)throw new Error(s.statusText);return yield s.json()})},t=(i,e)=>{const t="[Advertory LOG]: ";location.search.includes("ast_debug=true")&&(e?console.log(t,i,e):console.log(t,i))},n=864e5,s=(()=>{const i=i=>{const e=window.localStorage.getItem(i);if(!e)return null;try{return JSON.parse(e)}catch(i){return t("Error with parsing localStorage data"),null}},e=(i,e)=>{window.localStorage.setItem(i,JSON.stringify(e))};return{get:i,set:e,setWithTimestamp:(i,t,s=n)=>{const d={data:t,expirationTime:(new Date).getTime()+s};e(i,JSON.stringify(d))},getByTimestamp:(e,s=n)=>{const d=i(e);if(!d)return null;if(!s)return d;try{const{expirationTime:i,data:e}=JSON.parse(d);return(new Date).getTime()<=i?e:null}catch(i){return t("Error with parsing localStorage data"),null}}}})(),d={NO:"no",SE:"se"},r="advertory:ppids-cache",o={[d.SE]:`SCH${d.SE.toUpperCase()}-EnvHash`,[d.NO]:`SCH${d.NO.toUpperCase()}-EnvHash`},a={[d.SE]:`SCH${d.SE.toUpperCase()}-UserHash`,[d.NO]:`SCH${d.NO.toUpperCase()}-UserHash`},l={[d.SE]:`sch${d.SE}-envhash-v3`,[d.NO]:`sch${d.NO}-envhash-v3`},p={[d.SE]:`sch${d.SE}-userhash-v3`,[d.NO]:`sch${d.NO}-userhash-v3`},u={[d.SE]:`'sch${d.SE}-iosid-v3'`,[d.NO]:`'sch${d.NO}-iosid-v3'`},c={[d.SE]:`sch${d.SE}-androidid-v3`,[d.NO]:`sch${d.NO}-androidid-v3`},h={[d.SE]:"sdrn:schibsted.com:user",[d.NO]:"sdrn:spid.no:user"};class v{constructor(){this.eids=[]}add(i,e){return i&&this.eids.push({id:i,source:e}),this}buildRyEids(){return this.eids.map(({id:i,source:e})=>({source:e,uids:[{id:i,atype:1,ext:{stype:"ppuid"}}]}))}buildEids(){return[...this.eids]}buildVideoEids(){return this.eids.map(({id:i,source:e})=>`${e},${i}`).join("|")}buildNorstatPath(){const i=this.eids[0];return i?`${i.source}-${i.id}`:""}buildNorstatQuery(i){const e=new URLSearchParams;return this.eids.slice(1).forEach(({id:t,source:n})=>{e.append(i,`${n}-${t}`)}),e}}const I=new class{constructor(){this.ppid1=null,this.ppid2=null}processPPIDs(e){return i(this,arguments,void 0,function*(i,e=1e4){var t,n;const s=yield Promise.race([new Promise(i=>{setTimeout(()=>i({xandr:{ppId1:"",ppId2:""}}),e)}),i.instance.getAdvertisingIdentifiers()]);this.setPPIDs(null===(t=s.xandr)||void 0===t?void 0:t.ppId1,null===(n=s.xandr)||void 0===n?void 0:n.ppId2)})}getPPIDs(){var i,e;return null!==this.ppid1&&null!==this.ppid2||t("PPIDv2s accessed before they have been initialized"),{ppid1:null!==(i=this.ppid1)&&void 0!==i?i:"",ppid2:null!==(e=this.ppid2)&&void 0!==e?e:""}}setPPIDs(i,e){this.ppid1=null!=i?i:"",this.ppid2=null!=e?e:""}},P=new class{constructor(){this.ppid1=null,this.ppid2=null,this.idfv=null,this.anId=null}processPPIDs(e,t){return i(this,void 0,void 0,function*(){var i,n,d,o,a,l,p,u,c,h,v;const I=s.get(r),P=yield this.getNewPPIDs(e,t);if(this.shouldHash(I,P)){const t=null!==(i=e.hasherUrl)&&void 0!==i?i:"https://hasher.schibsted.com/api/v1/hash",s=this.createHasherPayload(P),r=yield this.hashPPIDs(s,t);return r?(this.cachePPIDs(s,r,null===(n=P.idfv)||void 0===n?void 0:n.plain,null===(d=P.anId)||void 0===d?void 0:d.plain),void this.setPPIDs(null!==(o=r.userId)&&void 0!==o?o:"",null!==(a=r.environmentId)&&void 0!==a?a:"",null===(l=P.idfv)||void 0===l?void 0:l.plain,null===(p=P.anId)||void 0===p?void 0:p.plain)):void this.setPPIDs("","")}this.setPPIDs(null!==(u=null==I?void 0:I.userId.hashed)&&void 0!==u?u:"",null!==(c=null==I?void 0:I.environmentId.hashed)&&void 0!==c?c:"",null===(h=null==P?void 0:P.idfv)||void 0===h?void 0:h.plain,null===(v=null==P?void 0:P.anId)||void 0===v?void 0:v.plain)})}getPPIDs(){var i,e;return null!==this.ppid1&&null!==this.ppid2||t("PPIDv3s accessed before they have been initialized"),{ppid1:null!==(i=this.ppid1)&&void 0!==i?i:"",ppid2:null!==(e=this.ppid2)&&void 0!==e?e:"",idfv:this.idfv,anId:this.anId}}setPPIDs(i,e,t,n){this.ppid1=null!=i?i:"",this.ppid2=null!=e?e:"",this.idfv=null!=t?t:null,this.anId=null!=n?n:null}shouldHash(i,e){var t,n;if(!i)return!0;for(const s in i){if((null===(t=i[s])||void 0===t?void 0:t.plain)!==(null===(n=e[s])||void 0===n?void 0:n.plain))return!0}return!1}cachePPIDs(i,e,t,n){const d=Object.assign(Object.assign({clientId:{plain:i.clientId},userId:{plain:i.userId,hashed:e.userId},environmentId:{plain:i.environmentId,hashed:e.environmentId},trackerType:{plain:i.trackerType},trackerVersion:{plain:i.trackerVersion}},t?{idfv:{plain:t}}:{}),n?{anId:{plain:n}}:{});s.set(r,d)}hashPPIDs(n,s){return i(this,void 0,void 0,function*(){try{const i=new Headers({"Content-Type":"application/json"});return yield e.post(s,i,n)}catch(i){return t("Error with hashing PPIDs",i),null}})}getNewPPIDs(e,t){return i(this,arguments,void 0,function*({clientId:e,instance:t},n){const s=yield((e,t)=>i(void 0,void 0,void 0,function*(){const i=yield e.getUserId();return i?`${h[t]}:${i}`:null}))(t,n),d=yield(e=>i(void 0,void 0,void 0,function*(){const i=yield e.getEnvironmentId();return i?`sdrn:schibsted:environment:${i}`:null}))(t),r=window.advertory_idfv,o=window.advertory_anId;return Object.assign(Object.assign({clientId:{plain:e},userId:{plain:s},environmentId:{plain:d},trackerType:{plain:"Advertory"},trackerVersion:{plain:"1.0.0"}},r?{idfv:{plain:r}}:{}),o?{anId:{plain:o}}:{})})}createHasherPayload({clientId:i,trackerType:e,trackerVersion:t,userId:n,environmentId:s}){return{clientId:i.plain,trackerType:e.plain,trackerVersion:t.plain,userId:n.plain,environmentId:s.plain}}};exports.getPPIDLoggedInStatus=()=>{const{ppid1:i,ppid2:e}=I.getPPIDs();return{"aa-sch-schuserhash":i?"1":"0","aa-sch-schenvhash":e?"1":"0"}},exports.getPPIDNorstatString=i=>{const{ppid1:e,ppid2:t}=I.getPPIDs(),{ppid1:n,ppid2:s}=P.getPPIDs(),d=(new v).add(t,o[i]).add(e,a[i]).add(s,l[i]).add(n,p[i]);return`${d.buildNorstatPath()}?${d.buildNorstatQuery("alias").toString()}`},exports.getPPIDRelevantYieldConfig=i=>{const{ppid1:e,ppid2:t}=I.getPPIDs(),{ppid1:n,ppid2:s,idfv:d,anId:r}=P.getPPIDs();if(!t)return{};return{userSync:{userIds:[{name:"pubProvidedId",params:{eids:(new v).add(t,o[i]).add(e,a[i]).add(s,l[i]).add(n,p[i]).add(d,u[i]).add(r,c[i]).buildRyEids()}}]}}},exports.getUserIdsObject=i=>{const{ppid1:e,ppid2:t}=I.getPPIDs(),{ppid1:n,ppid2:s,idfv:d,anId:r}=P.getPPIDs();return{userIds:[{type:"extendedIDs",eids:(new v).add(t,o[i]).add(e,a[i]).add(s,l[i]).add(n,p[i]).add(d,u[i]).add(r,c[i]).buildEids()}]}},exports.getVideoPPIDs=e=>i(void 0,void 0,void 0,function*(){const{ppid1:i,ppid2:t}=I.getPPIDs(),{ppid1:n,ppid2:s}=P.getPPIDs(),d=(new v).add(t,o[e]).add(i,a[e]).add(s,l[e]).add(n,p[e]);return yield new Promise(i=>{i(d.buildVideoEids())})}),exports.setXandrPPIDs=e=>i(void 0,[e],void 0,function*({country:i,tracker:e,timeout:n=1e3}){if(!e)return;(yield Promise.allSettled([I.processPPIDs(e,n),P.processPPIDs(e,i)])).forEach((i,e)=>{if("rejected"===i.status){t(`Cannot fetch PPIDs v${e+2}`,i.reason)}})});
1
+ "use strict";function e(e,n,i,t){return new(i||(i=Promise))(function(s,d){function r(e){try{a(t.next(e))}catch(e){d(e)}}function o(e){try{a(t.throw(e))}catch(e){d(e)}}function a(e){var n;e.done?s(e.value):(n=e.value,n instanceof i?n:new i(function(e){e(n)})).then(r,o)}a((t=t.apply(e,n||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const n={get:(n,i)=>e(void 0,void 0,void 0,function*(){const e=yield fetch(n,i);if(!e.ok)throw new Error(e.statusText);return yield e.json()}),post:(n,i,t)=>e(void 0,void 0,void 0,function*(){const e=JSON.stringify(t),s=yield fetch(n,{method:"POST",headers:i,body:e});if(!s.ok)throw new Error(s.statusText);return yield s.json()})},i=(e,n)=>{const i="[Advertory LOG]: ";location.search.includes("ast_debug=true")&&(n?console.log(i,e,n):console.log(i,e))},t=864e5,s=(()=>{const e=e=>{const n=window.localStorage.getItem(e);if(!n)return null;try{return JSON.parse(n)}catch(e){return i("Error with parsing localStorage data"),null}},n=(e,n)=>{window.localStorage.setItem(e,JSON.stringify(n))};return{get:e,set:n,setWithTimestamp:(e,i,s=t)=>{const d={data:i,expirationTime:(new Date).getTime()+s};n(e,JSON.stringify(d))},getByTimestamp:(n,s=t)=>{const d=e(n);if(!d)return null;if(!s)return d;try{const{expirationTime:e,data:n}=JSON.parse(d);return(new Date).getTime()<=e?n:null}catch(e){return i("Error with parsing localStorage data"),null}}}})(),d={NO:"no",SE:"se"},r="advertory:ppids-cache",o={[d.SE]:`SCH${d.SE.toUpperCase()}-EnvHash`,[d.NO]:`SCH${d.NO.toUpperCase()}-EnvHash`},a={[d.SE]:`SCH${d.SE.toUpperCase()}-UserHash`,[d.NO]:`SCH${d.NO.toUpperCase()}-UserHash`},l={[d.SE]:`sch${d.SE}-envhash-v3`,[d.NO]:`sch${d.NO}-envhash-v3`},c={[d.SE]:`sch${d.SE}-userhash-v3`,[d.NO]:`sch${d.NO}-userhash-v3`},u={[d.SE]:`'sch${d.SE}-iosid-v3'`,[d.NO]:`'sch${d.NO}-iosid-v3'`},p={[d.SE]:`sch${d.SE}-androidid-v3`,[d.NO]:`sch${d.NO}-androidid-v3`},h={[d.SE]:"sdrn:schibsted.com:user",[d.NO]:"sdrn:spid.no:user"};class v{constructor(){this.eids=[]}add(e,n){return e&&this.eids.push({id:e,source:n}),this}buildRyEids(){return this.eids.map(({id:e,source:n})=>({source:n,uids:[{id:e,atype:1,ext:{stype:"ppuid"}}]}))}buildEids(){return[...this.eids]}buildVideoEids(){return this.eids.map(({id:e,source:n})=>`${n},${e}`).join("|")}buildNorstatPath(){const e=this.eids[0];return e?`${e.source}-${e.id}`:""}buildNorstatQuery(e){const n=new URLSearchParams;return this.eids.slice(1).forEach(({id:i,source:t})=>{n.append(e,`${t}-${i}`)}),n}}const P=e=>new Promise(n=>{if(null==e?void 0:e.schibstedAdChoicesOverrideValue)return i(`Schibsted Ad Choices override value is set, returning override value: ${e.schibstedAdChoicesOverrideValue}`),void n(Boolean(Number(e.schibstedAdChoicesOverrideValue)));if(!window._tcf_||!(null==e?void 0:e.enabled))return void n(!1);const t=(()=>{if(!window._tcf_)return null;const e=window._tcf_.getPermissionSync("CMP:advertising");if(null===e)return null;const n=Number(e);return i("Advertising permission value obtained synchronously: ",e),Boolean(n)})();null===t?window._tcf_.getPermission("CMP:advertising",e=>{const t=Number(e);i("Advertising permission value obtained asynchronously: ",e),n(Boolean(t))}):n(t)}),f="cmp:loaded";let g,I=!1;const y=n=>{const t=!!(null==n?void 0:n.enabled),s=(null==n?void 0:n.timeout)||3e3,d=(r="bypass_tcf",new URLSearchParams(window.location.search).get(r));var r;const o=()=>{if(!(null==n?void 0:n.enabled))return!0;if(((e,n)=>e?!!n&&(i("TCF bypass param detected, returning consent: true"),!0):(i("TCF is not enabled, returning consent: true"),!0))(t,d))return!0;if(I)return null;if(!g)throw new Error("[Advertory]: getConsentSync method was called before the tcfManager was available.");const e=g.getConsentedToAllSync();return i(`TCF consented to all is: ${e}`),g.getConsentedToAllSync()};return{initConsentManager:()=>(null==n?void 0:n.enabled)?new Promise((e,n)=>{if(i("Getting TCF consent manager..."),window._tcf_)return i("TCF consent manager is already available"),g=window._tcf_,void e(g);i("TCF consent manager is not available");const t=()=>{i("CMP loaded, resolving consent manager..."),d&&clearTimeout(d),window._tcf_?(g=window._tcf_,e(g)):n(new Error("CMP loaded but window._tcf_ is not defined"))},d=setTimeout(()=>{document.removeEventListener(f,t),I=!0,n(new Error("Timeout waiting for CMP to load"))},s);i("Listening for CMP loaded event..."),document.addEventListener(f,t,{once:!0})}):Promise.resolve(null),getConsentSync:o,getConsentAsync:()=>e(void 0,void 0,void 0,function*(){if(null==n?void 0:n.schibstedAdChoicesEnabled)return i("Schibsted Ad Choices is enabled, getting advertising permissions..."),yield P(n);if(!(null==n?void 0:n.enabled))return!0;const e=o();return null!==e?e:yield new Promise((e,n)=>{try{if(!g)throw new Error("[Advertory]: getConsentAsync method was called before the tcfManager was available.");g.isConsentedToAll(n=>{e(n)})}catch(e){n(e)}})})}},b=new class{constructor(){this.ppid1=null,this.ppid2=null}processPPIDs(n){return e(this,arguments,void 0,function*(e,n=1e4){var i,t;const s=yield Promise.race([new Promise(e=>{setTimeout(()=>e({xandr:{ppId1:"",ppId2:""}}),n)}),e.instance.getAdvertisingIdentifiers()]);this.setPPIDs(null===(i=s.xandr)||void 0===i?void 0:i.ppId1,null===(t=s.xandr)||void 0===t?void 0:t.ppId2)})}getPPIDs(){var e,n;return null!==this.ppid1&&null!==this.ppid2||i("PPIDv2s accessed before they have been initialized"),{ppid1:null!==(e=this.ppid1)&&void 0!==e?e:"",ppid2:null!==(n=this.ppid2)&&void 0!==n?n:""}}setPPIDs(e,n){this.ppid1=null!=e?e:"",this.ppid2=null!=n?n:""}},w=new class{constructor(){this.ppid1=null,this.ppid2=null,this.idfv=null,this.anId=null}processPPIDs(n,i){return e(this,void 0,void 0,function*(){var e,t,d,o,a,l,c,u,p,h,v;const P=s.get(r),f=yield this.getNewPPIDs(n,i);if(this.shouldHash(P,f)){const i=null!==(e=n.hasherUrl)&&void 0!==e?e:"https://hasher.schibsted.com/api/v1/hash",s=this.createHasherPayload(f),r=yield this.hashPPIDs(s,i);return r?(this.cachePPIDs(s,r,null===(t=f.idfv)||void 0===t?void 0:t.plain,null===(d=f.anId)||void 0===d?void 0:d.plain),void this.setPPIDs(null!==(o=r.userId)&&void 0!==o?o:"",null!==(a=r.environmentId)&&void 0!==a?a:"",null===(l=f.idfv)||void 0===l?void 0:l.plain,null===(c=f.anId)||void 0===c?void 0:c.plain)):void this.setPPIDs("","")}this.setPPIDs(null!==(u=null==P?void 0:P.userId.hashed)&&void 0!==u?u:"",null!==(p=null==P?void 0:P.environmentId.hashed)&&void 0!==p?p:"",null===(h=null==f?void 0:f.idfv)||void 0===h?void 0:h.plain,null===(v=null==f?void 0:f.anId)||void 0===v?void 0:v.plain)})}getPPIDs(){var e,n;return null!==this.ppid1&&null!==this.ppid2||i("PPIDv3s accessed before they have been initialized"),{ppid1:null!==(e=this.ppid1)&&void 0!==e?e:"",ppid2:null!==(n=this.ppid2)&&void 0!==n?n:"",idfv:this.idfv,anId:this.anId}}setPPIDs(e,n,i,t){this.ppid1=null!=e?e:"",this.ppid2=null!=n?n:"",this.idfv=null!=i?i:null,this.anId=null!=t?t:null}shouldHash(e,n){var i,t;if(!e)return!0;for(const s in e){if((null===(i=e[s])||void 0===i?void 0:i.plain)!==(null===(t=n[s])||void 0===t?void 0:t.plain))return!0}return!1}cachePPIDs(e,n,i,t){const d=Object.assign(Object.assign({clientId:{plain:e.clientId},userId:{plain:e.userId,hashed:n.userId},environmentId:{plain:e.environmentId,hashed:n.environmentId},trackerType:{plain:e.trackerType},trackerVersion:{plain:e.trackerVersion}},i?{idfv:{plain:i}}:{}),t?{anId:{plain:t}}:{});s.set(r,d)}hashPPIDs(t,s){return e(this,void 0,void 0,function*(){try{const e=new Headers({"Content-Type":"application/json"});return yield n.post(s,e,t)}catch(e){return i("Error with hashing PPIDs",e),null}})}getNewPPIDs(n,i){return e(this,arguments,void 0,function*({clientId:n,instance:i},t){const s=yield((n,i)=>e(void 0,void 0,void 0,function*(){const e=yield n.getUserId();return e?`${h[i]}:${e}`:null}))(i,t),d=yield(n=>e(void 0,void 0,void 0,function*(){const e=yield n.getEnvironmentId();return e?`sdrn:schibsted:environment:${e}`:null}))(i),r=window.advertory_idfv,o=window.advertory_anId;return Object.assign(Object.assign({clientId:{plain:n},userId:{plain:s},environmentId:{plain:d},trackerType:{plain:"Advertory"},trackerVersion:{plain:"1.0.0"}},r?{idfv:{plain:r}}:{}),o?{anId:{plain:o}}:{})})}createHasherPayload({clientId:e,trackerType:n,trackerVersion:i,userId:t,environmentId:s}){return{clientId:e.plain,trackerType:n.plain,trackerVersion:i.plain,userId:t.plain,environmentId:s.plain}}};exports.getPPIDLoggedInStatus=()=>{const{ppid1:e,ppid2:n}=b.getPPIDs();return{"aa-sch-schuserhash":e?"1":"0","aa-sch-schenvhash":n?"1":"0"}},exports.getPPIDNorstatString=e=>{const{ppid1:n,ppid2:i}=b.getPPIDs(),{ppid1:t,ppid2:s}=w.getPPIDs(),d=(new v).add(i,o[e]).add(n,a[e]).add(s,l[e]).add(t,c[e]);return`${d.buildNorstatPath()}?${d.buildNorstatQuery("alias").toString()}`},exports.getPPIDRelevantYieldConfig=e=>{const{ppid1:n,ppid2:i}=b.getPPIDs(),{ppid1:t,ppid2:s,idfv:d,anId:r}=w.getPPIDs();if(!i)return{};return{userSync:{userIds:[{name:"pubProvidedId",params:{eids:(new v).add(i,o[e]).add(n,a[e]).add(s,l[e]).add(t,c[e]).add(d,u[e]).add(r,p[e]).buildRyEids()}}]}}},exports.getUserIdsObject=e=>{const{ppid1:n,ppid2:i}=b.getPPIDs(),{ppid1:t,ppid2:s,idfv:d,anId:r}=w.getPPIDs();return{userIds:[{type:"extendedIDs",eids:(new v).add(i,o[e]).add(n,a[e]).add(s,l[e]).add(t,c[e]).add(d,u[e]).add(r,p[e]).buildEids()}]}},exports.getVideoPPIDs=n=>e(void 0,void 0,void 0,function*(){const{ppid1:e,ppid2:i}=b.getPPIDs(),{ppid1:t,ppid2:s}=w.getPPIDs(),d=(new v).add(i,o[n]).add(e,a[n]).add(s,l[n]).add(t,c[n]);return yield new Promise(e=>{e(d.buildVideoEids())})}),exports.setXandrPPIDs=n=>e(void 0,void 0,void 0,function*(){const{tracker:t,tcf:s,country:d,isMobileApp:r}=n,o=yield((n,t,...s)=>e(void 0,[n,t,...s],void 0,function*(e,n,t="NOT SPECIFIED FEATURE"){if(n)return i(`Mobile app detected, skipping Schibsted Ad Choices consent check and returning true for ${t}`),!0;if(!(null==e?void 0:e.schibstedConsentToPayEnabled))return i(`Schibsted Consent to Pay is not enabled, returning true for ${t}`),!0;if(null==e?void 0:e.schibstedAdChoicesOverrideValue)return i(`Schibsted Ad Choices override value is set, returning override value: ${null==e?void 0:e.schibstedAdChoicesOverrideValue} for ${t}`),Boolean(Number(null==e?void 0:e.schibstedAdChoicesOverrideValue));const{getConsentAsync:s}=y(e);return(yield s())?(i(`Schibsted Ad Choices consent given according to TCF consent manager for ${t}`),!0):(i(`Schibsted Ad Choices consent not given according to TCF consent manager for ${t}`),!1)}))(s,r,"setXandrPPIDs");if(!o)return;if(!t)return;(yield Promise.allSettled([b.processPPIDs(t,null==s?void 0:s.timeout),w.processPPIDs(t,d)])).forEach((e,n)=>{if("rejected"===e.status){i(`Cannot fetch PPIDs v${n+2}`,e.reason)}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schibsted/advertory",
3
- "version": "2.51.8",
3
+ "version": "2.52.0",
4
4
  "scripts": {
5
5
  "build": "node node_modules/rollup/dist/bin/rollup -c rollup-config/default.mjs && npm run post:build",
6
6
  "build:dev": "MODE=dev NODE_OPTIONS=--max-old-space-size=131072 npm run build",