prebid.js 8.3.0 → 8.4.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 (203) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/admanBidAdapter.js +1 -1
  7. package/dist/adqueryBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adtrgtmeBidAdapter.js +1 -1
  10. package/dist/adxcgBidAdapter.js +1 -1
  11. package/dist/adyoulikeBidAdapter.js +1 -1
  12. package/dist/ajaBidAdapter.js +1 -1
  13. package/dist/amxBidAdapter.js +1 -1
  14. package/dist/amxIdSystem.js +1 -1
  15. package/dist/appierAnalyticsAdapter.js +1 -1
  16. package/dist/appnexusBidAdapter.js +1 -1
  17. package/dist/asoBidAdapter.js +1 -1
  18. package/dist/axonixBidAdapter.js +1 -1
  19. package/dist/bidglassBidAdapter.js +1 -1
  20. package/dist/big-richmediaBidAdapter.js +1 -1
  21. package/dist/brandmetricsRtdProvider.js +1 -1
  22. package/dist/bridBidAdapter.js +1 -1
  23. package/dist/bridgewellBidAdapter.js +1 -1
  24. package/dist/brightMountainMediaBidAdapter.js +1 -1
  25. package/dist/carodaBidAdapter.js +1 -1
  26. package/dist/chtnwBidAdapter.js +1 -1
  27. package/dist/concertBidAdapter.js +1 -1
  28. package/dist/connectadBidAdapter.js +1 -1
  29. package/dist/consumableBidAdapter.js +1 -1
  30. package/dist/conversantAnalyticsAdapter.js +1 -1
  31. package/dist/conversantBidAdapter.js +1 -1
  32. package/dist/craftBidAdapter.js +1 -1
  33. package/dist/criteoBidAdapter.js +1 -1
  34. package/dist/cwireBidAdapter.js +1 -1
  35. package/dist/dependencies.json +3 -0
  36. package/dist/dspxBidAdapter.js +1 -1
  37. package/dist/eplanningBidAdapter.js +1 -1
  38. package/dist/euidIdSystem.js +1 -1
  39. package/dist/feedadBidAdapter.js +1 -1
  40. package/dist/finativeBidAdapter.js +1 -1
  41. package/dist/freewheel-sspBidAdapter.js +1 -1
  42. package/dist/gdprEnforcement.js +1 -1
  43. package/dist/gmosspBidAdapter.js +1 -1
  44. package/dist/goldbachBidAdapter.js +1 -1
  45. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  46. package/dist/greenbidsRtdProvider.js +1 -1
  47. package/dist/gridBidAdapter.js +1 -1
  48. package/dist/gumgumBidAdapter.js +1 -1
  49. package/dist/h12mediaBidAdapter.js +1 -1
  50. package/dist/hypelabBidAdapter.js +1 -1
  51. package/dist/id5IdSystem.js +1 -1
  52. package/dist/imdsBidAdapter.js +1 -1
  53. package/dist/improvedigitalBidAdapter.js +1 -1
  54. package/dist/insticatorBidAdapter.js +1 -1
  55. package/dist/ixBidAdapter.js +1 -1
  56. package/dist/justpremiumBidAdapter.js +1 -1
  57. package/dist/kargoBidAdapter.js +1 -1
  58. package/dist/konduitAnalyticsAdapter.js +1 -1
  59. package/dist/kueezBidAdapter.js +1 -1
  60. package/dist/kueezRtbBidAdapter.js +1 -1
  61. package/dist/kulturemediaBidAdapter.js +1 -1
  62. package/dist/lassoBidAdapter.js +1 -1
  63. package/dist/lifestreetBidAdapter.js +1 -1
  64. package/dist/logicadBidAdapter.js +1 -1
  65. package/dist/loglyliftBidAdapter.js +1 -1
  66. package/dist/magniteAnalyticsAdapter.js +1 -1
  67. package/dist/malltvAnalyticsAdapter.js +1 -1
  68. package/dist/marsmediaBidAdapter.js +1 -1
  69. package/dist/mediafuseBidAdapter.js +1 -1
  70. package/dist/mediasquareBidAdapter.js +1 -1
  71. package/dist/mgidBidAdapter.js +1 -1
  72. package/dist/minutemediaBidAdapter.js +1 -1
  73. package/dist/minutemediaplusBidAdapter.js +1 -1
  74. package/dist/nexx360BidAdapter.js +1 -1
  75. package/dist/not-for-prod/prebid.js +135 -135
  76. package/dist/oguryBidAdapter.js +1 -1
  77. package/dist/onetagBidAdapter.js +1 -1
  78. package/dist/ooloAnalyticsAdapter.js +1 -1
  79. package/dist/optidigitalBidAdapter.js +1 -1
  80. package/dist/outbrainBidAdapter.js +1 -1
  81. package/dist/parrableIdSystem.js +1 -1
  82. package/dist/pixfutureBidAdapter.js +1 -1
  83. package/dist/prebid-core.js +2 -2
  84. package/dist/publinkIdSystem.js +1 -1
  85. package/dist/pubmaticBidAdapter.js +1 -1
  86. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  87. package/dist/pulsepointBidAdapter.js +1 -1
  88. package/dist/pxyzBidAdapter.js +1 -1
  89. package/dist/quantcastBidAdapter.js +1 -1
  90. package/dist/readpeakBidAdapter.js +1 -1
  91. package/dist/relaidoBidAdapter.js +1 -1
  92. package/dist/retailspotBidAdapter.js +1 -1
  93. package/dist/rhythmoneBidAdapter.js +1 -1
  94. package/dist/riseBidAdapter.js +1 -1
  95. package/dist/rubiconBidAdapter.js +1 -1
  96. package/dist/seedingAllianceBidAdapter.js +1 -1
  97. package/dist/seedtagBidAdapter.js +1 -1
  98. package/dist/sharedIdSystem.js +1 -1
  99. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  100. package/dist/sharethroughBidAdapter.js +1 -1
  101. package/dist/shinezBidAdapter.js +1 -1
  102. package/dist/smaatoBidAdapter.js +1 -1
  103. package/dist/smartadserverBidAdapter.js +1 -1
  104. package/dist/smartxBidAdapter.js +1 -1
  105. package/dist/smilewantedBidAdapter.js +1 -1
  106. package/dist/sonobiBidAdapter.js +1 -1
  107. package/dist/sovrnAnalyticsAdapter.js +1 -1
  108. package/dist/sovrnBidAdapter.js +1 -1
  109. package/dist/sspBCBidAdapter.js +1 -1
  110. package/dist/stroeerCoreBidAdapter.js +1 -1
  111. package/dist/stvBidAdapter.js +1 -1
  112. package/dist/sublimeBidAdapter.js +1 -1
  113. package/dist/targetVideoBidAdapter.js +1 -1
  114. package/dist/teadsBidAdapter.js +1 -1
  115. package/dist/topicsFpdModule.js +1 -1
  116. package/dist/trionBidAdapter.js +1 -1
  117. package/dist/tripleliftBidAdapter.js +1 -1
  118. package/dist/ttdBidAdapter.js +1 -1
  119. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  120. package/dist/uid2IdSystem.js +1 -1
  121. package/dist/underdogmediaBidAdapter.js +1 -1
  122. package/dist/undertoneBidAdapter.js +1 -1
  123. package/dist/userId.js +1 -1
  124. package/dist/vidazooBidAdapter.js +1 -1
  125. package/dist/videobyteBidAdapter.js +1 -1
  126. package/dist/visxBidAdapter.js +1 -1
  127. package/dist/voxBidAdapter.js +1 -1
  128. package/dist/vuukleBidAdapter.js +1 -1
  129. package/dist/widespaceBidAdapter.js +1 -1
  130. package/dist/winrBidAdapter.js +1 -1
  131. package/dist/yahoosspBidAdapter.js +1 -1
  132. package/dist/yandexBidAdapter.js +1 -1
  133. package/dist/yieldmoBidAdapter.js +1 -1
  134. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  135. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  136. package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -2
  137. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  138. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  139. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  140. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  141. package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +1 -1
  142. package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +1 -1
  143. package/integrationExamples/videoModule/videojs/eventListeners.html +1 -1
  144. package/integrationExamples/videoModule/videojs/eventsUI.html +1 -1
  145. package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +1 -1
  146. package/integrationExamples/videoModule/videojs/mediaMetadata.html +1 -1
  147. package/integrationExamples/videoModule/videojs/playlist.html +1 -1
  148. package/modules/33acrossBidAdapter.js +24 -14
  149. package/modules/33acrossIdSystem.js +15 -4
  150. package/modules/adagioBidAdapter.js +0 -1
  151. package/modules/admanBidAdapter.js +4 -0
  152. package/modules/brandmetricsRtdProvider.js +36 -2
  153. package/modules/brandmetricsRtdProvider.md +17 -2
  154. package/modules/gdprEnforcement.js +27 -22
  155. package/modules/gridBidAdapter.js +19 -0
  156. package/modules/ixBidAdapter.js +40 -2
  157. package/modules/kargoBidAdapter.js +4 -0
  158. package/modules/minutemediaBidAdapter.js +17 -2
  159. package/modules/oguryBidAdapter.js +29 -16
  160. package/modules/pubmaticBidAdapter.js +16 -1
  161. package/modules/pulsepointBidAdapter.js +63 -424
  162. package/modules/pulsepointBidAdapter.md +39 -45
  163. package/modules/sharedIdSystem.js +1 -1
  164. package/modules/sovrnBidAdapter.js +5 -1
  165. package/modules/stroeerCoreBidAdapter.js +2 -3
  166. package/modules/teadsBidAdapter.js +2 -0
  167. package/modules/topicsFpdModule.js +4 -1
  168. package/modules/topicsFpdModule.md +4 -0
  169. package/modules/userId/index.js +2 -2
  170. package/modules/vidazooBidAdapter.js +5 -7
  171. package/modules/voxBidAdapter.js +16 -5
  172. package/modules/yahoosspBidAdapter.js +38 -33
  173. package/modules/yahoosspBidAdapter.md +96 -95
  174. package/modules/yandexBidAdapter.js +12 -15
  175. package/package.json +1 -1
  176. package/src/activities/redactor.js +1 -1
  177. package/src/auction.js +24 -2
  178. package/src/constants.json +3 -1
  179. package/src/fpd/sua.js +8 -2
  180. package/test/spec/auctionmanager_spec.js +29 -1
  181. package/test/spec/fpd/enrichment_spec.js +7 -1
  182. package/test/spec/fpd/sua_spec.js +12 -0
  183. package/test/spec/modules/33acrossBidAdapter_spec.js +188 -35
  184. package/test/spec/modules/33acrossIdSystem_spec.js +122 -27
  185. package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
  186. package/test/spec/modules/brandmetricsRtdProvider_spec.js +69 -7
  187. package/test/spec/modules/gdprEnforcement_spec.js +43 -2
  188. package/test/spec/modules/gridBidAdapter_spec.js +42 -0
  189. package/test/spec/modules/ixBidAdapter_spec.js +72 -0
  190. package/test/spec/modules/kargoBidAdapter_spec.js +121 -106
  191. package/test/spec/modules/minutemediaBidAdapter_spec.js +36 -5
  192. package/test/spec/modules/oguryBidAdapter_spec.js +208 -108
  193. package/test/spec/modules/pubmaticBidAdapter_spec.js +119 -0
  194. package/test/spec/modules/pulsepointBidAdapter_spec.js +225 -486
  195. package/test/spec/modules/sovrnBidAdapter_spec.js +24 -4
  196. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +8 -5
  197. package/test/spec/modules/teadsBidAdapter_spec.js +70 -21
  198. package/test/spec/modules/topicsFpdModule_spec.js +10 -4
  199. package/test/spec/modules/vidazooBidAdapter_spec.js +0 -5
  200. package/test/spec/modules/voxBidAdapter_spec.js +93 -0
  201. package/test/spec/modules/yahoosspBidAdapter_spec.js +402 -314
  202. package/test/spec/modules/yandexBidAdapter_spec.js +21 -3
  203. package/integrationExamples/gpt/inskin_example.html +0 -100
@@ -24,18 +24,19 @@ import {
24
24
  import {registerActivityControl} from '../src/activities/rules.js';
25
25
  import {
26
26
  ACTIVITY_ACCESS_DEVICE,
27
- ACTIVITY_ENRICH_EIDS,
27
+ ACTIVITY_ENRICH_EIDS, ACTIVITY_ENRICH_UFPD,
28
28
  ACTIVITY_FETCH_BIDS,
29
29
  ACTIVITY_REPORT_ANALYTICS,
30
- ACTIVITY_SYNC_USER
30
+ ACTIVITY_SYNC_USER, ACTIVITY_TRANSMIT_UFPD
31
31
  } from '../src/activities/activities.js';
32
32
 
33
33
  export const STRICT_STORAGE_ENFORCEMENT = 'strictStorageEnforcement';
34
34
 
35
35
  const TCF2 = {
36
- 'purpose1': {id: 1, name: 'storage'},
37
- 'purpose2': {id: 2, name: 'basicAds'},
38
- 'purpose7': {id: 7, name: 'measurement'}
36
+ purpose1: {id: 1, name: 'storage'},
37
+ purpose2: {id: 2, name: 'basicAds'},
38
+ purpose4: {id: 4, name: 'personalizedAds'},
39
+ purpose7: {id: 7, name: 'measurement'},
39
40
  };
40
41
 
41
42
  /*
@@ -55,6 +56,7 @@ const DEFAULT_RULES = [{
55
56
 
56
57
  export let purpose1Rule;
57
58
  export let purpose2Rule;
59
+ export let purpose4Rule;
58
60
  export let purpose7Rule;
59
61
 
60
62
  export let enforcementRules;
@@ -62,6 +64,7 @@ export let enforcementRules;
62
64
  const storageBlocked = new Set();
63
65
  const biddersBlocked = new Set();
64
66
  const analyticsBlocked = new Set();
67
+ const ufpdBlocked = new Set();
65
68
 
66
69
  let hooksAdded = false;
67
70
  let strictStorageEnforcement = false;
@@ -232,6 +235,8 @@ export const fetchBidsRule = ((rule) => {
232
235
 
233
236
  export const reportAnalyticsRule = gdprRule(7, () => purpose7Rule, analyticsBlocked, (params) => getGvlidFromAnalyticsAdapter(params[ACTIVITY_PARAM_COMPONENT_NAME], params[ACTIVITY_PARAM_ANL_CONFIG]));
234
237
 
238
+ export const ufpdRule = gdprRule(4, () => purpose4Rule, ufpdBlocked);
239
+
235
240
  /**
236
241
  * Compiles the TCF2.0 enforcement results into an object, which is emitted as an event payload to "tcf2Enforcement" event.
237
242
  */
@@ -243,27 +248,20 @@ function emitTCF2FinalResults() {
243
248
  const tcf2FinalResults = {
244
249
  storageBlocked: formatSet(storageBlocked),
245
250
  biddersBlocked: formatSet(biddersBlocked),
246
- analyticsBlocked: formatSet(analyticsBlocked)
251
+ analyticsBlocked: formatSet(analyticsBlocked),
252
+ ufpdBlocked: formatSet(ufpdBlocked),
247
253
  };
248
254
 
249
255
  events.emit(CONSTANTS.EVENTS.TCF2_ENFORCEMENT, tcf2FinalResults);
250
- [storageBlocked, biddersBlocked, analyticsBlocked].forEach(el => el.clear());
256
+ [storageBlocked, biddersBlocked, analyticsBlocked, ufpdBlocked].forEach(el => el.clear());
251
257
  }
252
258
 
253
259
  events.on(CONSTANTS.EVENTS.AUCTION_END, emitTCF2FinalResults);
254
260
 
255
- /*
256
- Set of callback functions used to detect presence of a TCF rule, passed as the second argument to find().
257
- */
258
- const hasPurpose1 = (rule) => {
259
- return rule.purpose === TCF2.purpose1.name;
260
- };
261
- const hasPurpose2 = (rule) => {
262
- return rule.purpose === TCF2.purpose2.name;
263
- };
264
- const hasPurpose7 = (rule) => {
265
- return rule.purpose === TCF2.purpose7.name;
266
- };
261
+ function hasPurpose(purposeNo) {
262
+ const pname = TCF2[`purpose${purposeNo}`].name;
263
+ return (rule) => rule.purpose === pname;
264
+ }
267
265
 
268
266
  /**
269
267
  * A configuration function that initializes some module variables, as well as adds hooks
@@ -279,9 +277,10 @@ export function setEnforcementConfig(config) {
279
277
  }
280
278
  strictStorageEnforcement = !!deepAccess(config, STRICT_STORAGE_ENFORCEMENT);
281
279
 
282
- purpose1Rule = find(enforcementRules, hasPurpose1);
283
- purpose2Rule = find(enforcementRules, hasPurpose2);
284
- purpose7Rule = find(enforcementRules, hasPurpose7);
280
+ purpose1Rule = find(enforcementRules, hasPurpose(1));
281
+ purpose2Rule = find(enforcementRules, hasPurpose(2));
282
+ purpose4Rule = find(enforcementRules, hasPurpose(4))
283
+ purpose7Rule = find(enforcementRules, hasPurpose(7));
285
284
 
286
285
  if (!purpose1Rule) {
287
286
  purpose1Rule = DEFAULT_RULES[0];
@@ -301,6 +300,12 @@ export function setEnforcementConfig(config) {
301
300
  if (purpose2Rule) {
302
301
  RULE_HANDLES.push(registerActivityControl(ACTIVITY_FETCH_BIDS, RULE_NAME, fetchBidsRule));
303
302
  }
303
+ if (purpose4Rule) {
304
+ RULE_HANDLES.push(
305
+ registerActivityControl(ACTIVITY_TRANSMIT_UFPD, RULE_NAME, ufpdRule),
306
+ registerActivityControl(ACTIVITY_ENRICH_UFPD, RULE_NAME, ufpdRule)
307
+ );
308
+ }
304
309
  if (purpose7Rule) {
305
310
  RULE_HANDLES.push(registerActivityControl(ACTIVITY_REPORT_ANALYTICS, RULE_NAME, reportAnalyticsRule));
306
311
  }
@@ -9,6 +9,7 @@ import {
9
9
  isNumber,
10
10
  isStr
11
11
  } from '../src/utils.js';
12
+ import { ajax } from '../src/ajax.js';
12
13
  import { registerBidder } from '../src/adapters/bidderFactory.js';
13
14
  import { Renderer } from '../src/Renderer.js';
14
15
  import { VIDEO, BANNER } from '../src/mediaTypes.js';
@@ -17,6 +18,7 @@ import { getStorageManager } from '../src/storageManager.js';
17
18
 
18
19
  const BIDDER_CODE = 'grid';
19
20
  const ENDPOINT_URL = 'https://grid.bidswitch.net/hbjson';
21
+ const USP_DELETE_DATA_HANDLER = 'https://media.grid.bidswitch.net/uspapi_delete'
20
22
 
21
23
  const SYNC_URL = 'https://x.bidswitch.net/sync?ssp=themediagrid';
22
24
  const TIME_TO_LIVE = 360;
@@ -462,6 +464,23 @@ export const spec = {
462
464
  url: syncUrl + params
463
465
  };
464
466
  }
467
+ },
468
+
469
+ ajaxCall: function(url, cb, data, options) {
470
+ return ajax(url, cb, data, options);
471
+ },
472
+
473
+ onDataDeletionRequest: function(data) {
474
+ const uids = [];
475
+ const aliases = [spec.code, ...spec.aliases.map((alias) => alias.code || alias)];
476
+ data.forEach(({ bids }) => bids && bids.forEach(({ bidder, params }) => {
477
+ if (aliases.includes(bidder) && params && params.uid) {
478
+ uids.push(params.uid);
479
+ }
480
+ }));
481
+ if (uids.length) {
482
+ spec.ajaxCall(USP_DELETE_DATA_HANDLER, () => {}, JSON.stringify({ uids }), {contentType: 'application/json', method: 'POST'});
483
+ }
465
484
  }
466
485
  };
467
486
 
@@ -77,7 +77,8 @@ const SOURCE_RTI_MAPPING = {
77
77
  'pubcid.org': '', // SharedID, pubcid
78
78
  'utiq.com': '', // Utiq
79
79
  'intimatemerger.com': '',
80
- '33across.com': ''
80
+ '33across.com': '',
81
+ 'liveintent.indexexchange.com': '',
81
82
  };
82
83
  const PROVIDERS = [
83
84
  'britepoolid',
@@ -180,6 +181,41 @@ function bidToBannerImp(bid) {
180
181
  return imp;
181
182
  }
182
183
 
184
+ /**
185
+ * Sets imp.displaymanager
186
+ *
187
+ * @param {object} imp
188
+ * @param {object} bid
189
+ */
190
+ function setDisplayManager(imp, bid) {
191
+ if (deepAccess(bid, 'mediaTypes.video.context') === OUTSTREAM) {
192
+ let renderer = deepAccess(bid, 'mediaTypes.video.renderer');
193
+ if (!renderer) {
194
+ renderer = deepAccess(bid, 'renderer');
195
+ }
196
+
197
+ if (deepAccess(bid, 'schain', false)) {
198
+ imp.displaymanager = 'pbjs_wrapper';
199
+ } else if (renderer && typeof (renderer) === 'object') {
200
+ if (renderer.url !== undefined) {
201
+ let domain = '';
202
+ try {
203
+ domain = new URL(renderer.url).hostname
204
+ } catch {
205
+ return;
206
+ }
207
+ if (domain.includes('js-sec.indexww')) {
208
+ imp.displaymanager = 'ix';
209
+ } else {
210
+ imp.displaymanager = renderer.url;
211
+ }
212
+ }
213
+ } else {
214
+ imp.displaymanager = 'ix';
215
+ }
216
+ }
217
+ }
218
+
183
219
  /**
184
220
  * Transform valid bid request config object to video impression object that will be sent to ad server.
185
221
  *
@@ -199,8 +235,10 @@ export function bidToVideoImp(bid) {
199
235
  // populate imp level transactionId
200
236
  imp.ext.tid = deepAccess(bid, 'ortb2Imp.ext.tid');
201
237
 
238
+ setDisplayManager(imp, bid);
239
+
202
240
  // AdUnit-Specific First Party Data
203
- addAdUnitFPD(imp, bid)
241
+ addAdUnitFPD(imp, bid);
204
242
 
205
243
  // copy all video properties to imp object
206
244
  for (const adUnitProperty in videoAdUnitRef) {
@@ -97,6 +97,10 @@ function buildRequests(validBidRequests, bidderRequest) {
97
97
  user: getUserIds(tdidAdapter, bidderRequest.uspConsent, bidderRequest.gdprConsent, firstBidRequest.userIdAsEids, bidderRequest.gppConsent),
98
98
  });
99
99
 
100
+ if (firstBidRequest.schain && firstBidRequest.schain.nodes) {
101
+ krakenParams.schain = firstBidRequest.schain
102
+ }
103
+
100
104
  const reqCount = getRequestCount()
101
105
  if (reqCount != null) {
102
106
  krakenParams.requestCount = reqCount;
@@ -307,6 +307,15 @@ function generateBidParameters(bid, bidderRequest) {
307
307
  bidObject.placementId = placementId;
308
308
  }
309
309
 
310
+ const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
311
+ if (mimes) {
312
+ bidObject.mimes = mimes;
313
+ }
314
+ const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
315
+ if (api) {
316
+ bidObject.api = api;
317
+ }
318
+
310
319
  const sua = deepAccess(bid, `ortb2.device.sua`);
311
320
  if (sua) {
312
321
  bidObject.sua = sua;
@@ -358,6 +367,11 @@ function generateBidParameters(bid, bidderRequest) {
358
367
  bidObject.linearity = linearity;
359
368
  }
360
369
 
370
+ const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
371
+ if (protocols) {
372
+ bidObject.protocols = protocols;
373
+ }
374
+
361
375
  const plcmt = deepAccess(bid, `mediaTypes.video.plcmt`);
362
376
  if (plcmt) {
363
377
  bidObject.plcmt = plcmt;
@@ -398,7 +412,8 @@ function generateGeneralParams(generalObject, bidderRequest) {
398
412
  dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0,
399
413
  device_type: getDeviceType(navigator.userAgent),
400
414
  ua: navigator.userAgent,
401
- session_id: getBidIdParameter('bidderRequestId', generalObject),
415
+ is_wrapper: !!generalBidParams.isWrapper,
416
+ session_id: generalBidParams.sessionId || getBidIdParameter('bidderRequestId', generalObject),
402
417
  tmax: timeout
403
418
  }
404
419
 
@@ -441,7 +456,7 @@ function generateGeneralParams(generalObject, bidderRequest) {
441
456
 
442
457
  if (bidderRequest && bidderRequest.refererInfo) {
443
458
  generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref');
444
- generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || window.location.href
459
+ generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href');
445
460
  }
446
461
 
447
462
  return generalParams
@@ -11,7 +11,7 @@ const DEFAULT_TIMEOUT = 1000;
11
11
  const BID_HOST = 'https://mweb-hb.presage.io/api/header-bidding-request';
12
12
  const TIMEOUT_MONITORING_HOST = 'https://ms-ads-monitoring-events.presage.io';
13
13
  const MS_COOKIE_SYNC_DOMAIN = 'https://ms-cookie-sync.presage.io';
14
- const ADAPTER_VERSION = '1.4.1';
14
+ const ADAPTER_VERSION = '1.5.0';
15
15
 
16
16
  function getClientWidth() {
17
17
  const documentElementClientWidth = window.top.document.documentElement.clientWidth
@@ -46,22 +46,35 @@ function isBidRequestValid(bid) {
46
46
  }
47
47
 
48
48
  function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) {
49
- if (!syncOptions.pixelEnabled) return [];
49
+ const consent = (gdprConsent && gdprConsent.consentString) || '';
50
50
 
51
- return [
52
- {
53
- type: 'image',
54
- url: `${MS_COOKIE_SYNC_DOMAIN}/v1/init-sync/bid-switch?iab_string=${(gdprConsent && gdprConsent.consentString) || ''}&source=prebid`
55
- },
56
- {
57
- type: 'image',
58
- url: `${MS_COOKIE_SYNC_DOMAIN}/ttd/init-sync?iab_string=${(gdprConsent && gdprConsent.consentString) || ''}&source=prebid`
59
- },
60
- {
61
- type: 'image',
62
- url: `${MS_COOKIE_SYNC_DOMAIN}/xandr/init-sync?iab_string=${(gdprConsent && gdprConsent.consentString) || ''}&source=prebid`
63
- }
64
- ]
51
+ if (syncOptions.iframeEnabled) {
52
+ return [
53
+ {
54
+ type: 'iframe',
55
+ url: `${MS_COOKIE_SYNC_DOMAIN}/user-sync.html?gdpr_consent=${consent}&source=prebid`
56
+ }
57
+ ];
58
+ }
59
+
60
+ if (syncOptions.pixelEnabled) {
61
+ return [
62
+ {
63
+ type: 'image',
64
+ url: `${MS_COOKIE_SYNC_DOMAIN}/v1/init-sync/bid-switch?iab_string=${consent}&source=prebid`
65
+ },
66
+ {
67
+ type: 'image',
68
+ url: `${MS_COOKIE_SYNC_DOMAIN}/ttd/init-sync?iab_string=${consent}&source=prebid`
69
+ },
70
+ {
71
+ type: 'image',
72
+ url: `${MS_COOKIE_SYNC_DOMAIN}/xandr/init-sync?iab_string=${consent}&source=prebid`
73
+ }
74
+ ];
75
+ }
76
+
77
+ return [];
65
78
  }
66
79
 
67
80
  function buildRequests(validBidRequests, bidderRequest) {
@@ -1194,6 +1194,15 @@ export const spec = {
1194
1194
  deepSetValue(payload, 'regs.ext.us_privacy', bidderRequest.uspConsent);
1195
1195
  }
1196
1196
 
1197
+ // Attaching GPP Consent Params
1198
+ if (bidderRequest?.gppConsent?.gppString) {
1199
+ deepSetValue(payload, 'regs.gpp', bidderRequest.gppConsent.gppString);
1200
+ deepSetValue(payload, 'regs.gpp_sid', bidderRequest.gppConsent.applicableSections);
1201
+ } else if (bidderRequest?.ortb2?.regs?.gpp) {
1202
+ deepSetValue(payload, 'regs.gpp', bidderRequest.ortb2.regs.gpp);
1203
+ deepSetValue(payload, 'regs.gpp_sid', bidderRequest.ortb2.regs.gpp_sid);
1204
+ }
1205
+
1197
1206
  // coppa compliance
1198
1207
  if (config.getConfig('coppa') === true) {
1199
1208
  deepSetValue(payload, 'regs.coppa', 1);
@@ -1352,7 +1361,7 @@ export const spec = {
1352
1361
  /**
1353
1362
  * Register User Sync.
1354
1363
  */
1355
- getUserSyncs: (syncOptions, responses, gdprConsent, uspConsent) => {
1364
+ getUserSyncs: (syncOptions, responses, gdprConsent, uspConsent, gppConsent) => {
1356
1365
  let syncurl = '' + publisherId;
1357
1366
 
1358
1367
  // Attaching GDPR Consent Params in UserSync url
@@ -1366,6 +1375,12 @@ export const spec = {
1366
1375
  syncurl += '&us_privacy=' + encodeURIComponent(uspConsent);
1367
1376
  }
1368
1377
 
1378
+ // GPP Consent
1379
+ if (gppConsent?.gppString && gppConsent?.applicableSections?.length) {
1380
+ syncurl += '&gpp=' + encodeURIComponent(gppConsent.gppString);
1381
+ syncurl += '&gpp_sid=' + encodeURIComponent(gppConsent?.applicableSections?.join(','));
1382
+ }
1383
+
1369
1384
  // coppa compliance
1370
1385
  if (config.getConfig('coppa') === true) {
1371
1386
  syncurl += '&coppa=1';