prebid.js 9.2.0 → 9.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 (279) hide show
  1. package/creative/constants.js +2 -1
  2. package/creative/crossDomain.js +16 -4
  3. package/dist/33acrossAnalyticsAdapter.js +1 -1
  4. package/dist/33acrossBidAdapter.js +1 -1
  5. package/dist/33acrossIdSystem.js +1 -1
  6. package/dist/BTBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -1
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adfBidAdapter.js +1 -1
  13. package/dist/adgenerationBidAdapter.js +1 -1
  14. package/dist/adlooxRtdProvider.js +1 -1
  15. package/dist/adnuntiusBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgAnalyticsAdapter.js +1 -1
  21. package/dist/adxcgBidAdapter.js +1 -1
  22. package/dist/adyoulikeBidAdapter.js +1 -1
  23. package/dist/agmaAnalyticsAdapter.js +1 -1
  24. package/dist/ajaBidAdapter.js +1 -1
  25. package/dist/amxBidAdapter.js +1 -1
  26. package/dist/amxIdSystem.js +1 -1
  27. package/dist/appierAnalyticsAdapter.js +1 -1
  28. package/dist/appnexusBidAdapter.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/bidglassBidAdapter.js +1 -1
  32. package/dist/big-richmediaBidAdapter.js +1 -1
  33. package/dist/bridBidAdapter.js +1 -1
  34. package/dist/bridgewellBidAdapter.js +1 -1
  35. package/dist/brightMountainMediaBidAdapter.js +1 -1
  36. package/dist/carodaBidAdapter.js +1 -1
  37. package/dist/chtnwBidAdapter.js +1 -1
  38. package/dist/chunk-core.js +1 -1
  39. package/dist/codefuelBidAdapter.js +1 -1
  40. package/dist/concertBidAdapter.js +1 -1
  41. package/dist/connectadBidAdapter.js +1 -1
  42. package/dist/consentManagement.js +1 -0
  43. package/dist/consentManagementGpp.js +1 -1
  44. package/dist/consentManagementTcf.js +1 -1
  45. package/dist/consumableBidAdapter.js +1 -1
  46. package/dist/conversantAnalyticsAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/copper6sspBidAdapter.js +1 -0
  49. package/dist/cpmstarBidAdapter.js +1 -1
  50. package/dist/craftBidAdapter.js +1 -1
  51. package/dist/criteoBidAdapter.js +1 -1
  52. package/dist/cwireBidAdapter.js +1 -1
  53. package/dist/dailymotionBidAdapter.js +1 -1
  54. package/dist/deltaprojectsBidAdapter.js +1 -1
  55. package/dist/dependencies.json +51 -13
  56. package/dist/dianomiBidAdapter.js +1 -1
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/dxkultureBidAdapter.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/euidIdSystem.js +1 -1
  61. package/dist/exadsBidAdapter.js +1 -1
  62. package/dist/feedadBidAdapter.js +1 -1
  63. package/dist/finativeBidAdapter.js +1 -1
  64. package/dist/freewheel-sspBidAdapter.js +1 -1
  65. package/dist/gmosspBidAdapter.js +1 -1
  66. package/dist/goldbachBidAdapter.js +1 -1
  67. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  68. package/dist/greenbidsRtdProvider.js +1 -1
  69. package/dist/gridBidAdapter.js +1 -1
  70. package/dist/gumgumBidAdapter.js +1 -1
  71. package/dist/h12mediaBidAdapter.js +1 -1
  72. package/dist/hypelabBidAdapter.js +1 -1
  73. package/dist/id5AnalyticsAdapter.js +1 -1
  74. package/dist/id5IdSystem.js +1 -1
  75. package/dist/illuminBidAdapter.js +1 -1
  76. package/dist/imdsBidAdapter.js +1 -1
  77. package/dist/improvedigitalBidAdapter.js +1 -1
  78. package/dist/insticatorBidAdapter.js +1 -1
  79. package/dist/intentIqIdSystem.js +1 -1
  80. package/dist/ixBidAdapter.js +1 -1
  81. package/dist/jixieBidAdapter.js +1 -1
  82. package/dist/justpremiumBidAdapter.js +1 -1
  83. package/dist/kargoBidAdapter.js +1 -1
  84. package/dist/kimberliteBidAdapter.js +1 -1
  85. package/dist/konduitAnalyticsAdapter.js +1 -1
  86. package/dist/kueezBidAdapter.js +1 -1
  87. package/dist/kueezRtbBidAdapter.js +1 -1
  88. package/dist/lassoBidAdapter.js +1 -1
  89. package/dist/lifestreetBidAdapter.js +1 -1
  90. package/dist/liveIntentIdSystem.js +1 -1
  91. package/dist/logicadBidAdapter.js +1 -1
  92. package/dist/loglyliftBidAdapter.js +1 -1
  93. package/dist/luceadBidAdapter.js +1 -1
  94. package/dist/luponmediaBidAdapter.js +1 -1
  95. package/dist/mabidderBidAdapter.js +1 -1
  96. package/dist/magniteAnalyticsAdapter.js +1 -1
  97. package/dist/malltvAnalyticsAdapter.js +1 -1
  98. package/dist/marsmediaBidAdapter.js +1 -1
  99. package/dist/mediafuseBidAdapter.js +1 -1
  100. package/dist/medianetAnalyticsAdapter.js +1 -1
  101. package/dist/medianetBidAdapter.js +1 -1
  102. package/dist/mediasquareBidAdapter.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/missenaBidAdapter.js +1 -1
  106. package/dist/nexx360BidAdapter.js +1 -1
  107. package/dist/nobidAnalyticsAdapter.js +1 -1
  108. package/dist/nobidBidAdapter.js +1 -1
  109. package/dist/not-for-prod/prebid.js +184 -178
  110. package/dist/oguryBidAdapter.js +1 -1
  111. package/dist/onetagBidAdapter.js +1 -1
  112. package/dist/ooloAnalyticsAdapter.js +1 -1
  113. package/dist/openwebBidAdapter.js +1 -1
  114. package/dist/openxBidAdapter.js +1 -1
  115. package/dist/optidigitalBidAdapter.js +1 -1
  116. package/dist/orakiBidAdapter.js +1 -0
  117. package/dist/orbidderBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/ozoneBidAdapter.js +1 -1
  120. package/dist/pairIdSystem.js +1 -1
  121. package/dist/pixfutureBidAdapter.js +1 -1
  122. package/dist/prebidServerBidAdapter.js +1 -1
  123. package/dist/processResponse.js +1 -0
  124. package/dist/publinkIdSystem.js +1 -1
  125. package/dist/publirBidAdapter.js +1 -1
  126. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  127. package/dist/pubmaticBidAdapter.js +1 -1
  128. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  129. package/dist/pxyzBidAdapter.js +1 -1
  130. package/dist/quantcastBidAdapter.js +1 -1
  131. package/dist/readpeakBidAdapter.js +1 -1
  132. package/dist/relaidoBidAdapter.js +1 -1
  133. package/dist/retailspotBidAdapter.js +1 -1
  134. package/dist/rhythmoneBidAdapter.js +1 -1
  135. package/dist/riseBidAdapter.js +1 -1
  136. package/dist/rubiconBidAdapter.js +1 -1
  137. package/dist/seedingAllianceBidAdapter.js +1 -1
  138. package/dist/seedtagBidAdapter.js +1 -1
  139. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  140. package/dist/sharethroughBidAdapter.js +1 -1
  141. package/dist/shinezBidAdapter.js +1 -1
  142. package/dist/shinezRtbBidAdapter.js +1 -1
  143. package/dist/smaatoBidAdapter.js +1 -1
  144. package/dist/smartadserverBidAdapter.js +1 -1
  145. package/dist/smartxBidAdapter.js +1 -1
  146. package/dist/smartyadsBidAdapter.js +1 -1
  147. package/dist/smartyadsUtils.js +1 -0
  148. package/dist/smilewantedBidAdapter.js +1 -1
  149. package/dist/snigelBidAdapter.js +1 -1
  150. package/dist/sonobiBidAdapter.js +1 -1
  151. package/dist/sovrnBidAdapter.js +1 -1
  152. package/dist/sspBCBidAdapter.js +1 -1
  153. package/dist/stnBidAdapter.js +1 -1
  154. package/dist/stvBidAdapter.js +1 -1
  155. package/dist/sublimeBidAdapter.js +1 -1
  156. package/dist/taboolaBidAdapter.js +1 -1
  157. package/dist/tagorasBidAdapter.js +1 -1
  158. package/dist/tappxBidAdapter.js +1 -1
  159. package/dist/targetVideoBidAdapter.js +1 -1
  160. package/dist/teadsBidAdapter.js +1 -1
  161. package/dist/terceptAnalyticsAdapter.js +1 -1
  162. package/dist/themoneytizerBidAdapter.js +1 -1
  163. package/dist/trionBidAdapter.js +1 -1
  164. package/dist/tripleliftBidAdapter.js +1 -1
  165. package/dist/ttdBidAdapter.js +1 -1
  166. package/dist/twistDigitalBidAdapter.js +1 -1
  167. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  168. package/dist/uid2IdSystem.js +1 -1
  169. package/dist/underdogmediaBidAdapter.js +1 -1
  170. package/dist/undertoneBidAdapter.js +1 -1
  171. package/dist/unrulyBidAdapter.js +1 -1
  172. package/dist/userId.js +1 -1
  173. package/dist/viantOrtbBidAdapter.js +1 -1
  174. package/dist/vidazooBidAdapter.js +1 -1
  175. package/dist/vidazooUtils.js +1 -0
  176. package/dist/videobyteBidAdapter.js +1 -1
  177. package/dist/visxBidAdapter.js +1 -1
  178. package/dist/vuukleBidAdapter.js +1 -1
  179. package/dist/widespaceBidAdapter.js +1 -1
  180. package/dist/winrBidAdapter.js +1 -1
  181. package/dist/yahooAdsBidAdapter.js +1 -1
  182. package/dist/yieldmoBidAdapter.js +1 -1
  183. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  184. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  185. package/dist/zeta_global_sspBidAdapter.js +1 -1
  186. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  187. package/libraries/consentManagement/cmUtils.js +38 -0
  188. package/libraries/processResponse/index.js +12 -0
  189. package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
  190. package/libraries/vidazooUtils/bidderUtils.js +480 -0
  191. package/libraries/vidazooUtils/constants.js +7 -0
  192. package/modules/adagioRtdProvider.js +9 -7
  193. package/modules/addefendBidAdapter.js +1 -2
  194. package/modules/adfBidAdapter.js +1 -10
  195. package/modules/adlooxRtdProvider.js +1 -1
  196. package/modules/adnuntiusBidAdapter.js +1 -0
  197. package/modules/adxcgAnalyticsAdapter.js +1 -2
  198. package/modules/carodaBidAdapter.js +3 -8
  199. package/modules/codefuelBidAdapter.js +1 -10
  200. package/modules/consentManagementGpp.js +2 -38
  201. package/modules/consentManagementTcf.js +7 -38
  202. package/modules/conversantAnalyticsAdapter.js +1 -2
  203. package/modules/copper6sspBidAdapter.js +19 -0
  204. package/modules/copper6sspBidAdapter.md +79 -0
  205. package/modules/cpmstarBidAdapter.js +52 -36
  206. package/modules/cpmstarBidAdapter.md +1 -4
  207. package/modules/criteoBidAdapter.js +10 -3
  208. package/modules/dailymotionBidAdapter.js +1 -1
  209. package/modules/deltaprojectsBidAdapter.js +2 -11
  210. package/modules/dianomiBidAdapter.js +1 -9
  211. package/modules/finativeBidAdapter.js +1 -10
  212. package/modules/gridBidAdapter.js +2 -12
  213. package/modules/id5AnalyticsAdapter.js +1 -2
  214. package/modules/illuminBidAdapter.js +9 -304
  215. package/modules/intentIqIdSystem.js +408 -50
  216. package/modules/intentIqIdSystem.md +92 -0
  217. package/modules/kueezRtbBidAdapter.js +17 -312
  218. package/modules/liveIntentIdSystem.js +2 -2
  219. package/modules/luponmediaBidAdapter.js +4 -10
  220. package/modules/mabidderBidAdapter.js +1 -2
  221. package/modules/medianetAnalyticsAdapter.js +1 -2
  222. package/modules/medianetBidAdapter.js +1 -1
  223. package/modules/mgidBidAdapter.js +1 -10
  224. package/modules/orakiBidAdapter.js +19 -0
  225. package/modules/orakiBidAdapter.md +79 -0
  226. package/modules/orbidderBidAdapter.js +4 -2
  227. package/modules/outbrainBidAdapter.js +8 -43
  228. package/modules/ozoneBidAdapter.js +9 -7
  229. package/modules/pairIdSystem.js +27 -10
  230. package/modules/pixfutureBidAdapter.js +1 -2
  231. package/modules/prebidServerBidAdapter/index.js +1 -1
  232. package/modules/seedtagBidAdapter.js +4 -0
  233. package/modules/shinezRtbBidAdapter.js +12 -304
  234. package/modules/smartadserverBidAdapter.js +3 -0
  235. package/modules/smartyadsBidAdapter.js +6 -110
  236. package/modules/snigelBidAdapter.js +1 -2
  237. package/modules/tagorasBidAdapter.js +13 -316
  238. package/modules/tappxBidAdapter.js +1 -2
  239. package/modules/terceptAnalyticsAdapter.js +1 -2
  240. package/modules/twistDigitalBidAdapter.js +9 -433
  241. package/modules/userId/index.js +31 -21
  242. package/modules/viantOrtbBidAdapter.js +20 -0
  243. package/modules/vidazooBidAdapter.js +26 -468
  244. package/modules/visxBidAdapter.js +27 -29
  245. package/modules/yahooAdsBidAdapter.js +4 -1
  246. package/modules/yuktamediaAnalyticsAdapter.js +1 -2
  247. package/modules/zeta_global_sspBidAdapter.js +2 -2
  248. package/package.json +1 -1
  249. package/src/adRendering.js +25 -2
  250. package/src/constants.js +2 -0
  251. package/src/prebid.js +2 -1
  252. package/src/utils.js +19 -1
  253. package/test/spec/creative/crossDomainCreative_spec.js +38 -2
  254. package/test/spec/fpd/gdpr_spec.js +24 -2
  255. package/test/spec/libraries/processResponse_spec.js +60 -0
  256. package/test/spec/modules/adagioRtdProvider_spec.js +12 -0
  257. package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
  258. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
  259. package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
  260. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  261. package/test/spec/modules/dailymotionBidAdapter_spec.js +18 -14
  262. package/test/spec/modules/illuminBidAdapter_spec.js +26 -13
  263. package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
  264. package/test/spec/modules/kueezRtbBidAdapter_spec.js +26 -15
  265. package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
  266. package/test/spec/modules/outbrainBidAdapter_spec.js +32 -1
  267. package/test/spec/modules/seedtagBidAdapter_spec.js +27 -0
  268. package/test/spec/modules/shinezRtbBidAdapter_spec.js +26 -14
  269. package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
  270. package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
  271. package/test/spec/modules/tagorasBidAdapter_spec.js +26 -15
  272. package/test/spec/modules/twistDigitalBidAdapter_spec.js +19 -22
  273. package/test/spec/modules/userId_spec.js +86 -47
  274. package/test/spec/modules/viantOrtbBidAdapter_spec.js +87 -6
  275. package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
  276. package/test/spec/modules/visxBidAdapter_spec.js +180 -0
  277. package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
  278. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +11 -0
  279. package/test/spec/unit/pbjs_api_spec.js +6 -1
@@ -1,6 +1,15 @@
1
- import {createIframe, deepAccess, inIframe, insertElement, logError, logWarn, replaceMacros} from './utils.js';
1
+ import {
2
+ createIframe,
3
+ createInvisibleIframe,
4
+ deepAccess,
5
+ inIframe,
6
+ insertElement,
7
+ logError,
8
+ logWarn,
9
+ replaceMacros
10
+ } from './utils.js';
2
11
  import * as events from './events.js';
3
- import { AD_RENDER_FAILED_REASON, BID_STATUS, EVENTS, MESSAGES } from './constants.js';
12
+ import {AD_RENDER_FAILED_REASON, BID_STATUS, EVENTS, MESSAGES, PB_LOCATOR} from './constants.js';
4
13
  import {config} from './config.js';
5
14
  import {executeRenderer, isRendererRequired} from './Renderer.js';
6
15
  import {VIDEO} from './mediaTypes.js';
@@ -235,3 +244,17 @@ export function renderAdDirect(doc, adId, options) {
235
244
  fail(EXCEPTION, e.message);
236
245
  }
237
246
  }
247
+
248
+ /**
249
+ * Insert an invisible, named iframe that can be used by creatives to locate the window Prebid is running in
250
+ * (by looking for one that has `.frames[PB_LOCATOR]` defined).
251
+ * This is necessary because in some situations creatives may be rendered inside nested iframes - Prebid is not necessarily
252
+ * in the immediate parent window.
253
+ */
254
+ export function insertLocatorFrame() {
255
+ if (!window.frames[PB_LOCATOR]) {
256
+ const frame = createInvisibleIframe();
257
+ frame.name = PB_LOCATOR;
258
+ document.body.appendChild(frame);
259
+ }
260
+ }
package/src/constants.js CHANGED
@@ -193,3 +193,5 @@ export const MESSAGES = {
193
193
  NATIVE: 'Prebid Native',
194
194
  EVENT: 'Prebid Event'
195
195
  };
196
+
197
+ export const PB_LOCATOR = '__pb_locator__';
package/src/prebid.js CHANGED
@@ -39,7 +39,7 @@ import {newMetrics, useMetrics} from './utils/perfMetrics.js';
39
39
  import {defer, GreedyPromise} from './utils/promise.js';
40
40
  import {enrichFPD} from './fpd/enrichment.js';
41
41
  import {allConsent} from './consentHandler.js';
42
- import {renderAdDirect} from './adRendering.js';
42
+ import {insertLocatorFrame, renderAdDirect} from './adRendering.js';
43
43
  import {getHighestCpm} from './utils/reducers.js';
44
44
  import {fillVideoDefaults} from './video.js';
45
45
 
@@ -976,6 +976,7 @@ function processQueue(queue) {
976
976
  * @alias module:pbjs.processQueue
977
977
  */
978
978
  pbjsInstance.processQueue = function () {
979
+ insertLocatorFrame();
979
980
  hook.ready();
980
981
  processQueue(pbjsInstance.que);
981
982
  processQueue(pbjsInstance.cmd);
package/src/utils.js CHANGED
@@ -4,8 +4,9 @@ import {includes} from './polyfill.js';
4
4
  import { EVENTS, S2S } from './constants.js';
5
5
  import {GreedyPromise} from './utils/promise.js';
6
6
  import {getGlobal} from './prebidGlobal.js';
7
+ import { default as deepAccess } from 'dlv/index.js';
7
8
 
8
- export { default as deepAccess } from 'dlv/index.js';
9
+ export { deepAccess };
9
10
  export { dset as deepSetValue } from 'dset';
10
11
 
11
12
  var tStr = 'String';
@@ -1231,3 +1232,20 @@ export function hasNonSerializableProperty(obj, checkedObjects = new Set()) {
1231
1232
  }
1232
1233
  return false;
1233
1234
  }
1235
+
1236
+ /**
1237
+ * Returns the value of a nested property in an array of objects.
1238
+ *
1239
+ * @param {Array} collection - Array of objects.
1240
+ * @param {String} key - Key of nested property.
1241
+ * @returns {any, undefined} - Value of nested property.
1242
+ */
1243
+ export function setOnAny(collection, key) {
1244
+ for (let i = 0, result; i < collection.length; i++) {
1245
+ result = deepAccess(collection[i], key);
1246
+ if (result) {
1247
+ return result;
1248
+ }
1249
+ }
1250
+ return undefined;
1251
+ }
@@ -9,12 +9,18 @@ import {
9
9
 
10
10
  describe('cross-domain creative', () => {
11
11
  const ORIGIN = 'https://example.com';
12
- let win, renderAd, messages, mkIframe;
12
+ let win, top, renderAd, messages, mkIframe;
13
13
 
14
14
  beforeEach(() => {
15
15
  messages = [];
16
16
  mkIframe = sinon.stub();
17
+ top = {
18
+ frames: {}
19
+ };
20
+ top.top = top;
17
21
  win = {
22
+ top,
23
+ frames: {},
18
24
  document: {
19
25
  body: {
20
26
  appendChild: sinon.stub(),
@@ -30,12 +36,14 @@ describe('cross-domain creative', () => {
30
36
  })
31
37
  },
32
38
  parent: {
39
+ parent: top,
40
+ frames: {'__pb_locator__': {}},
33
41
  postMessage: sinon.stub().callsFake((payload, targetOrigin, transfer) => {
34
42
  messages.push({payload: JSON.parse(payload), targetOrigin, transfer});
35
43
  })
36
44
  }
37
45
  };
38
- renderAd = renderer(win);
46
+ renderAd = (...args) => renderer(win)(...args);
39
47
  })
40
48
 
41
49
  function waitFor(predicate, timeout = 1000) {
@@ -64,6 +72,34 @@ describe('cross-domain creative', () => {
64
72
  expect(messages[0].targetOrigin).to.eql('https://domain.com:123')
65
73
  });
66
74
 
75
+ it('posts to first parent if no __pb_locator__ can be found', () => {
76
+ delete win.parent.frames['__pb_locator__'];
77
+ renderAd({pubUrl: 'https://www.example.com'});
78
+ expect(messages.length).to.eql(1);
79
+ })
80
+
81
+ describe('when there are multiple ancestors', () => {
82
+ let target;
83
+ beforeEach(() => {
84
+ target = win.parent;
85
+ win.parent = {
86
+ top,
87
+ frames: {},
88
+ parent: {
89
+ ...target,
90
+ parent: {
91
+ frames: {'__pb_locator__': {}},
92
+ top
93
+ }
94
+ }
95
+ }
96
+ })
97
+ it('posts message to the first ancestor with __pb_locator__ child', () => {
98
+ renderAd({pubUrl: 'https://www.example.com'});
99
+ expect(messages.length).to.eql(1);
100
+ });
101
+ })
102
+
67
103
  it('generates request message with adId and clickUrl', () => {
68
104
  renderAd({adId: '123', clickUrl: 'https://click-url.com', pubUrl: ORIGIN});
69
105
  expect(messages[0].payload).to.eql({
@@ -1,5 +1,7 @@
1
1
  import {gdprDataHandler} from '../../../src/adapterManager.js';
2
2
  import {enrichFPDHook} from '../../../modules/consentManagementTcf.js';
3
+ import {config} from 'src/config.js';
4
+ import 'src/prebid.js';
3
5
 
4
6
  describe('GDPR FPD enrichment', () => {
5
7
  let sandbox, consent;
@@ -12,9 +14,9 @@ describe('GDPR FPD enrichment', () => {
12
14
  sandbox.restore();
13
15
  })
14
16
 
15
- function callHook() {
17
+ function callHook(ortb2 = {}) {
16
18
  let result;
17
- enrichFPDHook((res) => { result = res }, Promise.resolve({}));
19
+ enrichFPDHook((res) => { result = res }, Promise.resolve(ortb2));
18
20
  return result;
19
21
  }
20
22
 
@@ -44,4 +46,24 @@ describe('GDPR FPD enrichment', () => {
44
46
  })
45
47
  })
46
48
  });
49
+
50
+ describe('dsa', () => {
51
+ describe('when dsaPlaform is set', () => {
52
+ beforeEach(() => {
53
+ config.setConfig({
54
+ consentManagement: {
55
+ gdpr: {
56
+ dsaPlatform: true
57
+ }
58
+ }
59
+ });
60
+ });
61
+
62
+ it('sets dsarequired', () => {
63
+ return callHook().then(ortb2 => {
64
+ expect(ortb2.regs.ext.dsa.dsarequired).to.equal(3);
65
+ });
66
+ });
67
+ });
68
+ });
47
69
  });
@@ -0,0 +1,60 @@
1
+ import { getBidFromResponse } from '../../../libraries/processResponse/index.js';
2
+ import {expect} from 'chai/index.js';
3
+
4
+ describe('processResponse', function () {
5
+ const respItem = {
6
+ 'bid': [
7
+ {
8
+ 'price': 0.504,
9
+ 'ext': {
10
+ 'visx': {
11
+ 'events': {
12
+ 'runtime': '//t.visx.net/track/status/RFTFjZflStSUyuXuyT2IKOZMVPUIiPkzebpPWYwKvNkE_IybYfFxk2P5feBnt9LhiR7291KTG11JjrnyHyhVKfolH_VRCmGppbnHXHfHJ9AgNqjhFB_yTg3m18wGO9k4LOddGAg3mk8qc5zYEIzNsPFnZzos1EkHh5WNs0EjrBpwCgTERUqM3PJD_Zy60nMDA-LCuq-Z4JNBGC_GHx4LwvwXipQsjdGHS-HkqHHf9sES45OlRrW4wMf69dsmey1gvwqFAhJwii2lzo9wfOohLCMRa3Vxd-zvzx-uw71maWOyKnJXWiP6c5xkyrfV4gukNYaDUgrHc0mA0yhqyiHxe8KzEl32rxQXJRCg4FoJcJ1g9jmpZQBnIh2QrKm5iC159elwzwf31_v3Uw97Zpek8j0CCLa8FjxSjvXm1Mq8x4jcwlt0ngfWU6WwyyKwX_GMbKWuAL_nrfxSvs1hZCb4eunEFyXb2lN2olWo8ezMEzZ8YRxF_mx0hDB3NXyV0Tb4b6KXQq7tvxV-1rKPRt7DySRTbLPht0hO3mjTHxutfihnuL6ROEr372gSAiDodnbdCq_lPsCsUSEpG7DmN-4In10uSp2MemjfbqI6tllOCO-j6Pm9mhdl_rT4anHmRG2DG_dLsfD7pLaAsgf2zl2bpawhxxLVjTxikoWjNKAvr_GNh4adHGj5EHbqaBaHovB573Yk-koHkyBNrebeiy-1-Knc28MWOpFi9XKjNsXx756jAXLx2H098ptaXF3mFiuT2Iv6sTVjqOI/{STATUS_CODE}'
13
+ }
14
+ },
15
+ 'prebid': {
16
+ 'events': {
17
+ 'pending': '//t.visx.net/track/pending/RFTFjZflStSUyuXuyT2IKOZMVPUIiPkzebpPWYwKvNkE_IybYfFxk2P5feBnt9LhiR7291KTG11JjrnyHyhVKfolH_VRCmGppbnHXHfHJ9AgNqjhFB_yTg3m18wGO9k4LOddGAg3mk8qc5zYEIzNsPFnZzos1EkHh5WNs0EjrBpwCgTERUqM3PJD_Zy60nMDA-LCuq-Z4JNBGC_GHx4LwvwXipQsjdGHS-HkqHHf9sES45OlRrW4wMf69dsmey1gvwqFAhJwii2lzo9wfOohLCMRa3Vxd-zvzx-uw71maWOyKnJXWiP6c5xkyrfV4gukNYaDUgrHc0mA0yhqyiHxe8KzEl32rxQXJRCg4FoJcJ1g9jmpZQBnIh2QrKm5iC159elwzwf31_v3Uw97Zpek8j0CCLa8FjxSjvXm1Mq8x4jcwlt0ngfWU6WwyyKwX_GMbKWuAL_nrfxSvs1hZCb4eunEFyXb2lN2olWo8ezMEzZ8YRxF_mx0hDB3NXyV0Tb4b6KXQq7tvxV-1rKPRt7DySRTbLPht0hO3mjTHxutfihnuL6ROEr372gSAiDodnbdCq_lPsCsUSEpG7DmN-4In10uSp2MemjfbqI6tllOCO-j6Pm9mhdl_rT4anHmRG2DG_dLsfD7pLaAsgf2zl2bpawhxxLVjTxikoWjNKAvr_GNh4adHGj5EHbqaBaHovB573Yk-koHkyBNrebeiy-1-Knc28MWOpFi9XKjNsXx756jAXLx2H098ptaXF3mFiuT2Iv6sTVjqOI/',
18
+ 'win': '//t.visx.net/track/win/RFTFjZflStSUyuXuyT2IKOZMVPUIiPkzebpPWYwKvNkE_IybYfFxk2P5feBnt9LhiR7291KTG11JjrnyHyhVKfolH_VRCmGppbnHXHfHJ9AgNqjhFB_yTg3m18wGO9k4LOddGAg3mk8qc5zYEIzNsPFnZzos1EkHh5WNs0EjrBpwCgTERUqM3PJD_Zy60nMDA-LCuq-Z4JNBGC_GHx4LwvwXipQsjdGHS-HkqHHf9sES45OlRrW4wMf69dsmey1gvwqFAhJwii2lzo9wfOohLCMRa3Vxd-zvzx-uw71maWOyKnJXWiP6c5xkyrfV4gukNYaDUgrHc0mA0yhqyiHxe8KzEl32rxQXJRCg4FoJcJ1g9jmpZQBnIh2QrKm5iC159elwzwf31_v3Uw97Zpek8j0CCLa8FjxSjvXm1Mq8x4jcwlt0ngfWU6WwyyKwX_GMbKWuAL_nrfxSvs1hZCb4eunEFyXb2lN2olWo8ezMEzZ8YRxF_mx0hDB3NXyV0Tb4b6KXQq7tvxV-1rKPRt7DySRTbLPht0hO3mjTHxutfihnuL6ROEr372gSAiDodnbdCq_lPsCsUSEpG7DmN-4In10uSp2MemjfbqI6tllOCO-j6Pm9mhdl_rT4anHmRG2DG_dLsfD7pLaAsgf2zl2bpawhxxLVjTxikoWjNKAvr_GNh4adHGj5EHbqaBaHovB573Yk-koHkyBNrebeiy-1-Knc28MWOpFi9XKjNsXx756jAXLx2H098ptaXF3mFiuT2Iv6sTVjqOI/',
19
+ 'bid_timeout': '//t.visx.net/track/bid_timeout/RFTFjZflStSUyuXuyT2IKOZMVPUIiPkzebpPWYwKvNkE_IybYfFxk2P5feBnt9LhiR7291KTG11JjrnyHyhVKfolH_VRCmGppbnHXHfHJ9AgNqjhFB_yTg3m18wGO9k4LOddGAg3mk8qc5zYEIzNsPFnZzos1EkHh5WNs0EjrBpwCgTERUqM3PJD_Zy60nMDA-LCuq-Z4JNBGC_GHx4LwvwXipQsjdGHS-HkqHHf9sES45OlRrW4wMf69dsmey1gvwqFAhJwii2lzo9wfOohLCMRa3Vxd-zvzx-uw71maWOyKnJXWiP6c5xkyrfV4gukNYaDUgrHc0mA0yhqyiHxe8KzEl32rxQXJRCg4FoJcJ1g9jmpZQBnIh2QrKm5iC159elwzwf31_v3Uw97Zpek8j0CCLa8FjxSjvXm1Mq8x4jcwlt0ngfWU6WwyyKwX_GMbKWuAL_nrfxSvs1hZCb4eunEFyXb2lN2olWo8ezMEzZ8YRxF_mx0hDB3NXyV0Tb4b6KXQq7tvxV-1rKPRt7DySRTbLPht0hO3mjTHxutfihnuL6ROEr372gSAiDodnbdCq_lPsCsUSEpG7DmN-4In10uSp2MemjfbqI6tllOCO-j6Pm9mhdl_rT4anHmRG2DG_dLsfD7pLaAsgf2zl2bpawhxxLVjTxikoWjNKAvr_GNh4adHGj5EHbqaBaHovB573Yk-koHkyBNrebeiy-1-Knc28MWOpFi9XKjNsXx756jAXLx2H098ptaXF3mFiuT2Iv6sTVjqOI/',
20
+ 'runtime': '//t.visx.net/track/status/RFTFjZflStSUyuXuyT2IKOZMVPUIiPkzebpPWYwKvNkE_IybYfFxk2P5feBnt9LhiR7291KTG11JjrnyHyhVKfolH_VRCmGppbnHXHfHJ9AgNqjhFB_yTg3m18wGO9k4LOddGAg3mk8qc5zYEIzNsPFnZzos1EkHh5WNs0EjrBpwCgTERUqM3PJD_Zy60nMDA-LCuq-Z4JNBGC_GHx4LwvwXipQsjdGHS-HkqHHf9sES45OlRrW4wMf69dsmey1gvwqFAhJwii2lzo9wfOohLCMRa3Vxd-zvzx-uw71maWOyKnJXWiP6c5xkyrfV4gukNYaDUgrHc0mA0yhqyiHxe8KzEl32rxQXJRCg4FoJcJ1g9jmpZQBnIh2QrKm5iC159elwzwf31_v3Uw97Zpek8j0CCLa8FjxSjvXm1Mq8x4jcwlt0ngfWU6WwyyKwX_GMbKWuAL_nrfxSvs1hZCb4eunEFyXb2lN2olWo8ezMEzZ8YRxF_mx0hDB3NXyV0Tb4b6KXQq7tvxV-1rKPRt7DySRTbLPht0hO3mjTHxutfihnuL6ROEr372gSAiDodnbdCq_lPsCsUSEpG7DmN-4In10uSp2MemjfbqI6tllOCO-j6Pm9mhdl_rT4anHmRG2DG_dLsfD7pLaAsgf2zl2bpawhxxLVjTxikoWjNKAvr_GNh4adHGj5EHbqaBaHovB573Yk-koHkyBNrebeiy-1-Knc28MWOpFi9XKjNsXx756jAXLx2H098ptaXF3mFiuT2Iv6sTVjqOI/{STATUS_CODE}'
21
+ },
22
+ 'meta': {
23
+ 'mediaType': 'banner'
24
+ }
25
+ }
26
+ },
27
+ 'impid': '2b642c27bdcf8f',
28
+ 'auid': 929004,
29
+ 'h': 250,
30
+ 'cur': 'EUR',
31
+ 'adomain': [
32
+ ''
33
+ ],
34
+ 'w': 300,
35
+ 'id': '9b6c7e04-0a09-4add-8ba9-0c8b98304de3'
36
+ }
37
+ ],
38
+ 'seat': '1429601'
39
+ };
40
+ const LOG_ERROR_MESS = {
41
+ 'noAuid': 'Bid from response has no auid parameter - ',
42
+ 'noAdm': 'Bid from response has no adm parameter - ',
43
+ 'noBid': 'Array of bid objects is empty',
44
+ 'noImpId': 'Bid from response has no impid parameter - ',
45
+ 'noPlacementCode': 'Can\'t find in requested bids the bid with auid - ',
46
+ 'emptyUids': 'Uids should not be empty',
47
+ 'emptySeatbid': 'Seatbid array from response has an empty item',
48
+ 'emptyResponse': 'Response is empty',
49
+ 'hasEmptySeatbidArray': 'Response has empty seatbid array',
50
+ 'hasNoArrayOfBids': 'Seatbid from response has no array of bid objects - ',
51
+ 'notAllowedCurrency': 'Currency is not supported - ',
52
+ 'currencyMismatch': 'Currency from the request is not match currency from the response - ',
53
+ 'onlyVideoInstream': 'Only video instream supported',
54
+ 'videoMissing': 'Bid request videoType property is missing - '
55
+ };
56
+ it('returns bid when respItem and LOG_ERROR_MESS is passed', function () {
57
+ let response = getBidFromResponse(respItem, LOG_ERROR_MESS);
58
+ expect(response).not.include.any.keys('emptyResponse', 'hasNoArrayOfBids', 'emptySeatbid');
59
+ });
60
+ });
@@ -436,6 +436,18 @@ describe('Adagio Rtd Provider', function () {
436
436
  expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
437
437
  expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.not.exist;
438
438
  });
439
+
440
+ it('ensure we create the `ortb2Imp` object if it does not exist', function() {
441
+ const configCopy = utils.deepClone(config);
442
+ configCopy.params.placementSource = PLACEMENT_SOURCES.ADUNITCODE;
443
+
444
+ const bidRequest = utils.deepClone(bidReqConfig);
445
+ delete bidRequest.adUnits[0].ortb2Imp;
446
+
447
+ adagioRtdSubmodule.getBidRequestData(bidRequest, cb, configCopy);
448
+ expect(bidRequest.adUnits[0]).to.have.property('ortb2Imp');
449
+ expect(bidRequest.adUnits[0].ortb2Imp.ext.data.placement).to.equal('div-gpt-ad-1460505748561-0');
450
+ });
439
451
  });
440
452
  });
441
453
 
@@ -876,14 +876,15 @@ describe('adnuntiusBidAdapter', function () {
876
876
  config.setBidderConfig({
877
877
  bidders: ['adnuntius'],
878
878
  config: {
879
- useCookie: false
879
+ useCookie: false,
880
+ advertiserTransparency: true
880
881
  }
881
882
  });
882
883
 
883
884
  const request = config.runWithBidder('adnuntius', () => spec.buildRequests(bidderRequests, {}));
884
885
  expect(request.length).to.equal(1);
885
886
  expect(request[0]).to.have.property('url')
886
- expect(request[0].url).to.equal(ENDPOINT_URL_NOCOOKIE);
887
+ expect(request[0].url).to.equal(ENDPOINT_URL_NOCOOKIE + '&advertiserTransparency=true');
887
888
  });
888
889
  });
889
890
 
@@ -981,7 +982,9 @@ describe('adnuntiusBidAdapter', function () {
981
982
  config.setBidderConfig({
982
983
  bidders: ['adnuntius'],
983
984
  config: {
984
- maxDeals: 2
985
+ maxDeals: 2,
986
+ useCookie: 'ignore-this',
987
+ advertiserTransparency: 'ignore-this-as-well'
985
988
  }
986
989
  });
987
990
 
@@ -14,7 +14,7 @@ describe('Conversant analytics adapter tests', function() {
14
14
  let clock; // clock stub from sinon to mock our cache cleanup interval
15
15
  let logInfoStub;
16
16
 
17
- const PREBID_VERSION = '1.2';
17
+ const PREBID_VERSION = '$prebid.version$';
18
18
  const SITE_ID = 108060;
19
19
 
20
20
  let requests;