prebid.js 9.0.0 → 9.2.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 (307) hide show
  1. package/.nvmrc +1 -1
  2. package/browsers.json +3 -3
  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/acuityadsBidAdapter.js +1 -1
  8. package/dist/adagioAnalyticsAdapter.js +1 -1
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adagioRtdProvider.js +1 -1
  11. package/dist/adagioUtils.js +1 -0
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/admanBidAdapter.js +1 -1
  14. package/dist/adpod.js +1 -1
  15. package/dist/adprimeBidAdapter.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/adxcgBidAdapter.js +1 -1
  21. package/dist/adyoulikeBidAdapter.js +1 -1
  22. package/dist/agmaAnalyticsAdapter.js +1 -1
  23. package/dist/ajaBidAdapter.js +1 -1
  24. package/dist/amxBidAdapter.js +1 -1
  25. package/dist/amxIdSystem.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/appnexusUtils.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/autoplayDetection.js +1 -1
  31. package/dist/axisBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/beyondmediaBidAdapter.js +1 -1
  34. package/dist/bidglassBidAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bliinkBidAdapter.js +1 -1
  37. package/dist/boldwinBidAdapter.js +1 -1
  38. package/dist/bridBidAdapter.js +1 -1
  39. package/dist/bridgewellBidAdapter.js +1 -1
  40. package/dist/brightMountainMediaBidAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/chunk-core.js +1 -1
  44. package/dist/compassBidAdapter.js +1 -1
  45. package/dist/concertBidAdapter.js +1 -1
  46. package/dist/connectadBidAdapter.js +1 -1
  47. package/dist/consumableBidAdapter.js +1 -1
  48. package/dist/contentexchangeBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/cwireBidAdapter.js +1 -1
  54. package/dist/dailymotionBidAdapter.js +1 -1
  55. package/dist/dependencies.json +83 -4
  56. package/dist/dspxBidAdapter.js +1 -1
  57. package/dist/dxkultureBidAdapter.js +1 -1
  58. package/dist/e_volutionBidAdapter.js +1 -1
  59. package/dist/emtvBidAdapter.js +1 -1
  60. package/dist/eplanningBidAdapter.js +1 -1
  61. package/dist/euidIdSystem.js +1 -1
  62. package/dist/exadsBidAdapter.js +1 -1
  63. package/dist/feedadBidAdapter.js +1 -1
  64. package/dist/finativeBidAdapter.js +1 -1
  65. package/dist/freewheel-sspBidAdapter.js +1 -1
  66. package/dist/globalsunBidAdapter.js +1 -1
  67. package/dist/gmosspBidAdapter.js +1 -1
  68. package/dist/goldbachBidAdapter.js +1 -1
  69. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  70. package/dist/greenbidsRtdProvider.js +1 -1
  71. package/dist/gridBidAdapter.js +1 -1
  72. package/dist/gumgumBidAdapter.js +1 -1
  73. package/dist/h12mediaBidAdapter.js +1 -1
  74. package/dist/hypelabBidAdapter.js +1 -1
  75. package/dist/id5IdSystem.js +1 -1
  76. package/dist/illuminBidAdapter.js +1 -1
  77. package/dist/imdsBidAdapter.js +1 -1
  78. package/dist/improvedigitalBidAdapter.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/iqzoneBidAdapter.js +1 -1
  81. package/dist/ixBidAdapter.js +1 -1
  82. package/dist/jixieBidAdapter.js +1 -1
  83. package/dist/justpremiumBidAdapter.js +1 -1
  84. package/dist/kargoBidAdapter.js +1 -1
  85. package/dist/kimberliteBidAdapter.js +1 -1
  86. package/dist/kiviadsBidAdapter.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/krushmediaBidAdapter.js +1 -1
  89. package/dist/kueezBidAdapter.js +1 -1
  90. package/dist/kueezRtbBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/liveIntentIdSystem.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/loyalBidAdapter.js +1 -1
  97. package/dist/luceadBidAdapter.js +1 -1
  98. package/dist/lunamediahbBidAdapter.js +1 -1
  99. package/dist/magniteAnalyticsAdapter.js +1 -1
  100. package/dist/malltvAnalyticsAdapter.js +1 -1
  101. package/dist/marsmediaBidAdapter.js +1 -1
  102. package/dist/mathildeadsBidAdapter.js +1 -1
  103. package/dist/mediafuseBidAdapter.js +1 -1
  104. package/dist/mediasquareBidAdapter.js +1 -1
  105. package/dist/mgidBidAdapter.js +1 -1
  106. package/dist/mgidXBidAdapter.js +1 -1
  107. package/dist/minutemediaBidAdapter.js +1 -1
  108. package/dist/missenaBidAdapter.js +1 -1
  109. package/dist/mobfoxpbBidAdapter.js +1 -1
  110. package/dist/mobianRtdProvider.js +1 -0
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/nobidAnalyticsAdapter.js +1 -1
  113. package/dist/nobidBidAdapter.js +1 -1
  114. package/dist/not-for-prod/prebid.js +190 -186
  115. package/dist/oguryBidAdapter.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/openwebBidAdapter.js +1 -1
  119. package/dist/openxBidAdapter.js +1 -1
  120. package/dist/optidigitalBidAdapter.js +1 -1
  121. package/dist/ortbConverter.js +1 -1
  122. package/dist/outbrainBidAdapter.js +1 -1
  123. package/dist/ozoneBidAdapter.js +1 -1
  124. package/dist/paapi.js +1 -1
  125. package/dist/pgamsspBidAdapter.js +1 -1
  126. package/dist/pixfutureBidAdapter.js +1 -1
  127. package/dist/playdigoBidAdapter.js +1 -1
  128. package/dist/prebidServerBidAdapter.js +1 -1
  129. package/dist/pubCircleBidAdapter.js +1 -1
  130. package/dist/publinkIdSystem.js +1 -1
  131. package/dist/publirBidAdapter.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  135. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/qtBidAdapter.js +1 -1
  138. package/dist/quantcastBidAdapter.js +1 -1
  139. package/dist/raynRtdProvider.js +1 -1
  140. package/dist/readpeakBidAdapter.js +1 -1
  141. package/dist/relaidoBidAdapter.js +1 -1
  142. package/dist/retailspotBidAdapter.js +1 -1
  143. package/dist/rhythmoneBidAdapter.js +1 -1
  144. package/dist/richaudienceBidAdapter.js +1 -0
  145. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  146. package/dist/riseBidAdapter.js +1 -1
  147. package/dist/rubiconBidAdapter.js +1 -1
  148. package/dist/seedingAllianceBidAdapter.js +1 -1
  149. package/dist/seedtagBidAdapter.js +1 -1
  150. package/dist/setupadBidAdapter.js +1 -1
  151. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  152. package/dist/sharethroughBidAdapter.js +1 -1
  153. package/dist/shinezBidAdapter.js +1 -1
  154. package/dist/shinezRtbBidAdapter.js +1 -1
  155. package/dist/smaatoBidAdapter.js +1 -1
  156. package/dist/smartadserverBidAdapter.js +1 -1
  157. package/dist/smartxBidAdapter.js +1 -1
  158. package/dist/smartytechBidAdapter.js +1 -1
  159. package/dist/smilewantedBidAdapter.js +1 -1
  160. package/dist/sonobiBidAdapter.js +1 -1
  161. package/dist/sovrnBidAdapter.js +1 -1
  162. package/dist/sspBCBidAdapter.js +1 -1
  163. package/dist/stnBidAdapter.js +1 -1
  164. package/dist/stvBidAdapter.js +1 -1
  165. package/dist/sublimeBidAdapter.js +1 -1
  166. package/dist/taboolaBidAdapter.js +1 -1
  167. package/dist/tagorasBidAdapter.js +1 -1
  168. package/dist/targetVideoBidAdapter.js +1 -1
  169. package/dist/teadsBidAdapter.js +1 -1
  170. package/dist/teqblazeUtils.js +1 -0
  171. package/dist/themoneytizerBidAdapter.js +1 -1
  172. package/dist/topicsFpdModule.js +1 -1
  173. package/dist/trionBidAdapter.js +1 -1
  174. package/dist/tripleliftBidAdapter.js +1 -1
  175. package/dist/ttdBidAdapter.js +1 -1
  176. package/dist/twistDigitalBidAdapter.js +1 -1
  177. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  178. package/dist/uid2IdSystem.js +1 -1
  179. package/dist/underdogmediaBidAdapter.js +1 -1
  180. package/dist/undertoneBidAdapter.js +1 -1
  181. package/dist/unrulyBidAdapter.js +1 -1
  182. package/dist/vidazooBidAdapter.js +1 -1
  183. package/dist/videobyteBidAdapter.js +1 -1
  184. package/dist/visiblemeasuresBidAdapter.js +1 -1
  185. package/dist/visxBidAdapter.js +1 -1
  186. package/dist/vuukleBidAdapter.js +1 -1
  187. package/dist/widespaceBidAdapter.js +1 -1
  188. package/dist/winrBidAdapter.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yieldmoBidAdapter.js +1 -1
  191. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  192. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  193. package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
  194. package/libraries/adagioUtils/adagioUtils.js +35 -0
  195. package/libraries/appnexusUtils/anUtils.js +1 -0
  196. package/libraries/autoplayDetection/autoplay.js +8 -1
  197. package/libraries/ortbConverter/converter.js +1 -1
  198. package/libraries/teqblazeUtils/bidderUtils.js +253 -0
  199. package/modules/.submodules.json +1 -0
  200. package/modules/acuityadsBidAdapter.js +5 -203
  201. package/modules/adagioBidAdapter.js +1 -17
  202. package/modules/adagioRtdProvider.js +41 -51
  203. package/modules/adagioRtdProvider.md +1 -0
  204. package/modules/admanBidAdapter.js +31 -188
  205. package/modules/adprimeBidAdapter.js +28 -165
  206. package/modules/axisBidAdapter.js +33 -165
  207. package/modules/beyondmediaBidAdapter.js +5 -189
  208. package/modules/bliinkBidAdapter.js +3 -31
  209. package/modules/boldwinBidAdapter.js +21 -159
  210. package/modules/ceeIdSystem.js +1 -1
  211. package/modules/compassBidAdapter.js +5 -198
  212. package/modules/contentexchangeBidAdapter.js +5 -200
  213. package/modules/conversantBidAdapter.js +1 -0
  214. package/modules/dailymotionBidAdapter.js +1 -1
  215. package/modules/e_volutionBidAdapter.js +4 -186
  216. package/modules/emtvBidAdapter.js +5 -198
  217. package/modules/globalsunBidAdapter.js +5 -199
  218. package/modules/id5IdSystem.js +31 -2
  219. package/modules/id5IdSystem.md +67 -2
  220. package/modules/iqzoneBidAdapter.js +5 -224
  221. package/modules/kiviadsBidAdapter.js +5 -199
  222. package/modules/krushmediaBidAdapter.js +25 -143
  223. package/modules/loyalBidAdapter.js +4 -178
  224. package/modules/lunamediahbBidAdapter.js +5 -118
  225. package/modules/mathildeadsBidAdapter.js +5 -198
  226. package/modules/mgidXBidAdapter.js +14 -209
  227. package/modules/mobfoxpbBidAdapter.js +4 -135
  228. package/modules/mobianRtdProvider.js +52 -0
  229. package/modules/mobianRtdProvider.md +11 -0
  230. package/modules/nobidAnalyticsAdapter.js +2 -3
  231. package/modules/novatiqIdSystem.md +2 -3
  232. package/modules/ozoneBidAdapter.js +117 -58
  233. package/modules/paapi.js +2 -1
  234. package/modules/pgamsspBidAdapter.js +5 -240
  235. package/modules/playdigoBidAdapter.js +4 -186
  236. package/modules/prebidServerBidAdapter/index.js +9 -2
  237. package/modules/pubCircleBidAdapter.js +5 -218
  238. package/modules/pubmaticAnalyticsAdapter.js +21 -8
  239. package/modules/pubxaiAnalyticsAdapter.js +1 -5
  240. package/modules/qtBidAdapter.js +5 -224
  241. package/modules/raynRtdProvider.js +36 -3
  242. package/modules/richaudienceBidAdapter.js +375 -0
  243. package/modules/richaudienceBidAdapter.md +1 -1
  244. package/modules/seedtagBidAdapter.js +1 -0
  245. package/modules/setupadBidAdapter.js +76 -153
  246. package/modules/setupadBidAdapter.md +1 -1
  247. package/modules/smaatoBidAdapter.js +17 -6
  248. package/modules/smartytechBidAdapter.js +7 -2
  249. package/modules/topicsFpdModule.js +1 -1
  250. package/modules/uid2IdSystem.js +0 -1
  251. package/modules/uid2IdSystem_shared.js +0 -1
  252. package/modules/visiblemeasuresBidAdapter.js +5 -199
  253. package/modules/zeta_global_sspAnalyticsAdapter.js +8 -4
  254. package/package.json +1 -1
  255. package/src/auction.js +5 -63
  256. package/src/utils/focusTimeout.js +41 -0
  257. package/src/utils/ttlCollection.js +2 -1
  258. package/src/utils.js +42 -0
  259. package/src/videoCache.js +72 -0
  260. package/test/mocks/videoCacheStub.js +1 -1
  261. package/test/spec/auctionmanager_spec.js +16 -1
  262. package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
  263. package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
  264. package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
  265. package/test/spec/modules/admanBidAdapter_spec.js +370 -247
  266. package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
  267. package/test/spec/modules/axisBidAdapter_spec.js +78 -14
  268. package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
  269. package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
  270. package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
  271. package/test/spec/modules/compassBidAdapter_spec.js +130 -16
  272. package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
  273. package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
  274. package/test/spec/modules/dailymotionBidAdapter_spec.js +3 -3
  275. package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
  276. package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
  277. package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
  278. package/test/spec/modules/id5IdSystem_spec.js +79 -3
  279. package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
  280. package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
  281. package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
  282. package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
  283. package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
  284. package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
  285. package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
  286. package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
  287. package/test/spec/modules/mobianRtdProvider_spec.js +107 -0
  288. package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
  289. package/test/spec/modules/paapi_spec.js +5 -5
  290. package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
  291. package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
  292. package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
  293. package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
  294. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
  295. package/test/spec/modules/qtBidAdapter_spec.js +15 -3
  296. package/test/spec/modules/raynRtdProvider_spec.js +25 -0
  297. package/test/spec/modules/richaudienceBidAdapter_spec.js +1304 -0
  298. package/test/spec/modules/seedtagBidAdapter_spec.js +2 -0
  299. package/test/spec/modules/setupadBidAdapter_spec.js +139 -97
  300. package/test/spec/modules/smaatoBidAdapter_spec.js +27 -0
  301. package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
  302. package/test/spec/modules/topicsFpdModule_spec.js +43 -59
  303. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
  304. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +4 -0
  305. package/test/spec/ortbConverter/converter_spec.js +7 -3
  306. package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
  307. package/test/spec/videoCache_spec.js +56 -53
@@ -3,11 +3,21 @@ import { spec } from '../../../modules/visiblemeasuresBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
4
  import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
5
 
6
- const bidder = 'visiblemeasures'
6
+ const bidder = 'visiblemeasures';
7
7
  const adUrl = 'https://us-e.visiblemeasures.com/pbjs';
8
8
  const syncUrl = 'https://cs.visiblemeasures.com';
9
9
 
10
10
  describe('VisibleMeasuresBidAdapter', function () {
11
+ const userIdAsEids = [{
12
+ source: 'test.org',
13
+ uids: [{
14
+ id: '01**********',
15
+ atype: 1,
16
+ ext: {
17
+ third: '01***********'
18
+ }
19
+ }]
20
+ }];
11
21
  const bids = [
12
22
  {
13
23
  bidId: getUniqueIdentifierStr(),
@@ -18,8 +28,9 @@ describe('VisibleMeasuresBidAdapter', function () {
18
28
  }
19
29
  },
20
30
  params: {
21
- placementId: 'testBanner',
22
- }
31
+ placementId: 'testBanner'
32
+ },
33
+ userIdAsEids
23
34
  },
24
35
  {
25
36
  bidId: getUniqueIdentifierStr(),
@@ -32,8 +43,9 @@ describe('VisibleMeasuresBidAdapter', function () {
32
43
  }
33
44
  },
34
45
  params: {
35
- placementId: 'testVideo',
36
- }
46
+ placementId: 'testVideo'
47
+ },
48
+ userIdAsEids
37
49
  },
38
50
  {
39
51
  bidId: getUniqueIdentifierStr(),
@@ -55,8 +67,9 @@ describe('VisibleMeasuresBidAdapter', function () {
55
67
  }
56
68
  },
57
69
  params: {
58
- placementId: 'testNative',
59
- }
70
+ placementId: 'testNative'
71
+ },
72
+ userIdAsEids
60
73
  }
61
74
  ];
62
75
 
@@ -75,9 +88,20 @@ describe('VisibleMeasuresBidAdapter', function () {
75
88
 
76
89
  const bidderRequest = {
77
90
  uspConsent: '1---',
78
- gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ gdprConsent: {
92
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
93
+ vendorData: {}
94
+ },
79
95
  refererInfo: {
80
- referer: 'https://test.com'
96
+ referer: 'https://test.com',
97
+ page: 'https://test.com'
98
+ },
99
+ ortb2: {
100
+ device: {
101
+ w: 1512,
102
+ h: 982,
103
+ language: 'en-UK'
104
+ }
81
105
  },
82
106
  timeout: 500
83
107
  };
@@ -131,7 +155,7 @@ describe('VisibleMeasuresBidAdapter', function () {
131
155
  expect(data.host).to.be.a('string');
132
156
  expect(data.page).to.be.a('string');
133
157
  expect(data.coppa).to.be.a('number');
134
- expect(data.gdpr).to.be.a('string');
158
+ expect(data.gdpr).to.be.a('object');
135
159
  expect(data.ccpa).to.be.a('string');
136
160
  expect(data.tmax).to.be.a('number');
137
161
  expect(data.placements).to.have.lengthOf(3);
@@ -147,6 +171,56 @@ describe('VisibleMeasuresBidAdapter', function () {
147
171
  expect(placement.schain).to.be.an('object');
148
172
  expect(placement.bidfloor).to.exist.and.to.equal(0);
149
173
  expect(placement.type).to.exist.and.to.equal('publisher');
174
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
175
+
176
+ if (placement.adFormat === BANNER) {
177
+ expect(placement.sizes).to.be.an('array');
178
+ }
179
+ switch (placement.adFormat) {
180
+ case BANNER:
181
+ expect(placement.sizes).to.be.an('array');
182
+ break;
183
+ case VIDEO:
184
+ expect(placement.playerSize).to.be.an('array');
185
+ expect(placement.minduration).to.be.an('number');
186
+ expect(placement.maxduration).to.be.an('number');
187
+ break;
188
+ case NATIVE:
189
+ expect(placement.native).to.be.an('object');
190
+ break;
191
+ }
192
+ }
193
+ });
194
+
195
+ it('Returns valid endpoints', function () {
196
+ const bids = [
197
+ {
198
+ bidId: getUniqueIdentifierStr(),
199
+ bidder: bidder,
200
+ mediaTypes: {
201
+ [BANNER]: {
202
+ sizes: [[300, 250]]
203
+ }
204
+ },
205
+ params: {
206
+ endpointId: 'testBanner',
207
+ },
208
+ userIdAsEids
209
+ }
210
+ ];
211
+
212
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
213
+
214
+ const { placements } = serverRequest.data;
215
+ for (let i = 0, len = placements.length; i < len; i++) {
216
+ const placement = placements[i];
217
+ expect(placement.endpointId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
218
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
219
+ expect(placement.bidId).to.be.a('string');
220
+ expect(placement.schain).to.be.an('object');
221
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
222
+ expect(placement.type).to.exist.and.to.equal('network');
223
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
150
224
 
151
225
  if (placement.adFormat === BANNER) {
152
226
  expect(placement.sizes).to.be.an('array');
@@ -172,8 +246,10 @@ describe('VisibleMeasuresBidAdapter', function () {
172
246
  serverRequest = spec.buildRequests(bids, bidderRequest);
173
247
  let data = serverRequest.data;
174
248
  expect(data.gdpr).to.exist;
175
- expect(data.gdpr).to.be.a('string');
176
- expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
249
+ expect(data.gdpr).to.be.a('object');
250
+ expect(data.gdpr).to.have.property('consentString');
251
+ expect(data.gdpr).to.not.have.property('vendorData');
252
+ expect(data.gdpr.consentString).to.equal(bidderRequest.gdprConsent.consentString);
177
253
  expect(data.ccpa).to.not.exist;
178
254
  delete bidderRequest.gdprConsent;
179
255
  });
@@ -188,12 +264,38 @@ describe('VisibleMeasuresBidAdapter', function () {
188
264
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
189
265
  expect(data.gdpr).to.not.exist;
190
266
  });
267
+ });
268
+
269
+ describe('gpp consent', function () {
270
+ it('bidderRequest.gppConsent', () => {
271
+ bidderRequest.gppConsent = {
272
+ gppString: 'abc123',
273
+ applicableSections: [8]
274
+ };
191
275
 
192
- it('Returns empty data if no valid requests are passed', function () {
193
- serverRequest = spec.buildRequests([], bidderRequest);
276
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
194
277
  let data = serverRequest.data;
195
- expect(data.placements).to.be.an('array').that.is.empty;
196
- });
278
+ expect(data).to.be.an('object');
279
+ expect(data).to.have.property('gpp');
280
+ expect(data).to.have.property('gpp_sid');
281
+
282
+ delete bidderRequest.gppConsent;
283
+ })
284
+
285
+ it('bidderRequest.ortb2.regs.gpp', () => {
286
+ bidderRequest.ortb2 = bidderRequest.ortb2 || {};
287
+ bidderRequest.ortb2.regs = bidderRequest.ortb2.regs || {};
288
+ bidderRequest.ortb2.regs.gpp = 'abc123';
289
+ bidderRequest.ortb2.regs.gpp_sid = [8];
290
+
291
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
292
+ let data = serverRequest.data;
293
+ expect(data).to.be.an('object');
294
+ expect(data).to.have.property('gpp');
295
+ expect(data).to.have.property('gpp_sid');
296
+
297
+ bidderRequest.ortb2;
298
+ })
197
299
  });
198
300
 
199
301
  describe('interpretResponse', function () {
@@ -397,5 +499,17 @@ describe('VisibleMeasuresBidAdapter', function () {
397
499
  expect(syncData[0].url).to.be.a('string')
398
500
  expect(syncData[0].url).to.equal(`${syncUrl}/image?pbjs=1&ccpa_consent=1---&coppa=0`)
399
501
  });
502
+ it('Should return array of objects with proper sync config , include GPP', function() {
503
+ const syncData = spec.getUserSyncs({}, {}, {}, {}, {
504
+ gppString: 'abc123',
505
+ applicableSections: [8]
506
+ });
507
+ expect(syncData).to.be.an('array').which.is.not.empty;
508
+ expect(syncData[0]).to.be.an('object')
509
+ expect(syncData[0].type).to.be.a('string')
510
+ expect(syncData[0].type).to.equal('image')
511
+ expect(syncData[0].url).to.be.a('string')
512
+ expect(syncData[0].url).to.equal(`${syncUrl}/image?pbjs=1&gpp=abc123&gpp_sid=8&coppa=0`);
513
+ });
400
514
  });
401
515
  });
@@ -412,6 +412,7 @@ describe('Zeta Global SSP Analytics Adapter', function () {
412
412
  domain: 'test-zeta-ssp.net:63342',
413
413
  page: 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html',
414
414
  bids: [{
415
+ adUnitCode: '/19968336/header-bid-tag-0',
415
416
  bidId: '206be9a13236af',
416
417
  auctionId: '75e394d9',
417
418
  bidder: 'zeta_global_ssp',
@@ -426,6 +427,7 @@ describe('Zeta Global SSP Analytics Adapter', function () {
426
427
  domain: 'test-zeta-ssp.net:63342',
427
428
  page: 'http://test-zeta-ssp.net:63342/zeta-ssp/ssp/_dev/examples/page_banner.html',
428
429
  bids: [{
430
+ adUnitCode: '/19968336/header-bid-tag-0',
429
431
  bidId: '41badc0e164c758',
430
432
  auctionId: '75e394d9',
431
433
  bidder: 'appnexus',
@@ -437,6 +439,7 @@ describe('Zeta Global SSP Analytics Adapter', function () {
437
439
  }]
438
440
  }],
439
441
  bidsReceived: [{
442
+ adUnitCode: '/19968336/header-bid-tag-0',
440
443
  adId: '5759bb3ef7be1e8',
441
444
  requestId: '206be9a13236af',
442
445
  creativeId: '456456456',
@@ -459,6 +462,7 @@ describe('Zeta Global SSP Analytics Adapter', function () {
459
462
  expect(auctionSucceeded.domain).to.eql('test-zeta-ssp.net');
460
463
  expect(auctionSucceeded.page).to.eql('test-zeta-ssp.net/zeta-ssp/ssp/_dev/examples/page_banner.html');
461
464
  expect(auctionSucceeded.bid).to.be.deep.equal({
465
+ adUnitCode: '/19968336/header-bid-tag-0',
462
466
  adId: '5759bb3ef7be1e8',
463
467
  requestId: '206be9a13236af',
464
468
  auctionId: '75e394d9',
@@ -80,6 +80,7 @@ describe('pbjs-ortb converter', () => {
80
80
  if (context.reqContext?.ctx) {
81
81
  bidResponse.reqCtx = context.reqContext?.ctx;
82
82
  }
83
+ bidResponse.seatbid = context.seatbid;
83
84
  }
84
85
  }
85
86
  },
@@ -116,13 +117,16 @@ describe('pbjs-ortb converter', () => {
116
117
  const response = cvt.fromORTB({request, response: MOCK_ORTB_RESPONSE});
117
118
  expect(response.bids).to.eql([{
118
119
  impid: 'imp0',
119
- bidId: 111
120
+ bidId: 111,
121
+ seatbid: MOCK_ORTB_RESPONSE.seatbid[0]
120
122
  }, {
121
123
  impid: 'imp1',
122
- bidId: 112
124
+ bidId: 112,
125
+ seatbid: MOCK_ORTB_RESPONSE.seatbid[0]
123
126
  }, {
124
127
  impid: 'imp1',
125
- bidId: 112
128
+ bidId: 112,
129
+ seatbid: MOCK_ORTB_RESPONSE.seatbid[1]
126
130
  }]);
127
131
  expect(response.marker).to.be.true;
128
132
  });
@@ -0,0 +1,60 @@
1
+ import setFocusTimeout from '../../../../src/utils/focusTimeout';
2
+
3
+ export const setDocumentHidden = (hidden) => {
4
+ Object.defineProperty(document, 'hidden', {
5
+ configurable: true,
6
+ get: () => hidden,
7
+ });
8
+ document.dispatchEvent(new Event('visibilitychange'));
9
+ };
10
+
11
+ describe('focusTimeout', () => {
12
+ let clock;
13
+
14
+ beforeEach(() => {
15
+ clock = sinon.useFakeTimers();
16
+ });
17
+
18
+ afterEach(() => {
19
+ clock.restore();
20
+ })
21
+
22
+ it('should invoke callback when page is visible', () => {
23
+ let callback = sinon.stub();
24
+ setFocusTimeout(callback, 2000);
25
+ clock.tick(2000);
26
+ expect(callback.called).to.be.true;
27
+ });
28
+
29
+ it('should not invoke callback if page was hidden', () => {
30
+ let callback = sinon.stub();
31
+ setFocusTimeout(callback, 2000);
32
+ setDocumentHidden(true);
33
+ clock.tick(3000);
34
+ expect(callback.called).to.be.false;
35
+ });
36
+
37
+ it('should defer callback execution when page is hidden', () => {
38
+ let callback = sinon.stub();
39
+ setFocusTimeout(callback, 4000);
40
+ clock.tick(2000);
41
+ setDocumentHidden(true);
42
+ clock.tick(2000);
43
+ setDocumentHidden(false);
44
+ expect(callback.called).to.be.false;
45
+ clock.tick(2000);
46
+ expect(callback.called).to.be.true;
47
+ });
48
+
49
+ it('should return updated timerId after page was showed again', () => {
50
+ let callback = sinon.stub();
51
+ const getCurrentTimerId = setFocusTimeout(callback, 4000);
52
+ const oldTimerId = getCurrentTimerId();
53
+ clock.tick(2000);
54
+ setDocumentHidden(true);
55
+ clock.tick(2000);
56
+ setDocumentHidden(false);
57
+ const newTimerId = getCurrentTimerId();
58
+ expect(oldTimerId).to.not.equal(newTimerId);
59
+ });
60
+ });
@@ -1,39 +1,13 @@
1
1
  import chai from 'chai';
2
- import {getCacheUrl, store} from 'src/videoCache.js';
2
+ import {batchingCache, getCacheUrl, store, _internal, storeBatch} from 'src/videoCache.js';
3
3
  import {config} from 'src/config.js';
4
4
  import {server} from 'test/mocks/xhr.js';
5
5
  import {auctionManager} from '../../src/auctionManager.js';
6
6
  import {AuctionIndex} from '../../src/auctionIndex.js';
7
- import {batchingCache} from '../../src/auction.js';
7
+ import * as utils from 'src/utils.js';
8
8
 
9
9
  const should = chai.should();
10
10
 
11
- function getMockBid(bidder, auctionId, bidderRequestId) {
12
- return {
13
- 'bidder': bidder,
14
- 'params': {
15
- 'placementId': '10433394',
16
- 'member': 123,
17
- 'keywords': {
18
- 'foo': ['bar', 'baz'],
19
- 'fizz': ['buzz']
20
- }
21
- },
22
- 'bid_id': '12345abc',
23
- 'adUnitCode': 'div-gpt-ad-1460505748561-0',
24
- 'mediaTypes': {
25
- 'banner': {
26
- 'sizes': [[300, 250]]
27
- }
28
- },
29
- 'transactionId': '4ef956ad-fd83-406d-bd35-e4bb786ab86c',
30
- 'sizes': [300, 250],
31
- 'bidId': '123',
32
- 'bidderRequestId': bidderRequestId,
33
- 'auctionId': auctionId
34
- };
35
- }
36
-
37
11
  describe('The video cache', function () {
38
12
  function assertError(callbackSpy) {
39
13
  callbackSpy.calledOnce.should.equal(true);
@@ -126,9 +100,7 @@ describe('The video cache', function () {
126
100
  <Ad>
127
101
  <Wrapper>
128
102
  <AdSystem>prebid.org wrapper</AdSystem>
129
- <VASTAdTagURI><![CDATA[my-mock-url.com]]></VASTAdTagURI>
130
-
131
- <Creatives></Creatives>
103
+ <VASTAdTagURI><![CDATA[my-mock-url.com]]></VASTAdTagURI>\n \n <Creatives></Creatives>
132
104
  </Wrapper>
133
105
  </Ad>
134
106
  </VAST>`;
@@ -335,34 +307,36 @@ describe('The video cache', function () {
335
307
  JSON.parse(request.requestBody).should.deep.equal(payload);
336
308
  });
337
309
 
338
- it('should wait the duration of the batchTimeout and pass the correct batchSize if batched requests are enabled in the config', () => {
339
- const mockAfterBidAdded = function() {};
340
- let callback = null;
341
- let mockTimeout = sinon.stub().callsFake((cb) => { callback = cb });
310
+ if (FEATURES.VIDEO) {
311
+ it('should wait the duration of the batchTimeout and pass the correct batchSize if batched requests are enabled in the config', () => {
312
+ const mockAfterBidAdded = function() {};
313
+ let callback = null;
314
+ let mockTimeout = sinon.stub().callsFake((cb) => { callback = cb });
342
315
 
343
- config.setConfig({
344
- cache: {
345
- url: 'https://prebid.adnxs.com/pbc/v1/cache',
346
- batchSize: 3,
347
- batchTimeout: 20
348
- }
349
- });
316
+ config.setConfig({
317
+ cache: {
318
+ url: 'https://prebid.adnxs.com/pbc/v1/cache',
319
+ batchSize: 3,
320
+ batchTimeout: 20
321
+ }
322
+ });
350
323
 
351
- let stubCache = sinon.stub();
352
- const batchAndStore = batchingCache(mockTimeout, stubCache);
353
- for (let i = 0; i < 3; i++) {
354
- batchAndStore({}, {}, mockAfterBidAdded);
355
- }
324
+ let stubCache = sinon.stub();
325
+ const batchAndStore = batchingCache(mockTimeout, stubCache);
326
+ for (let i = 0; i < 3; i++) {
327
+ batchAndStore({}, {}, mockAfterBidAdded);
328
+ }
356
329
 
357
- sinon.assert.calledOnce(mockTimeout);
358
- sinon.assert.calledWith(mockTimeout, sinon.match.any, 20);
330
+ sinon.assert.calledOnce(mockTimeout);
331
+ sinon.assert.calledWith(mockTimeout, sinon.match.any, 20);
359
332
 
360
- const expectedBatch = [{ afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }, { afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }, { afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }];
333
+ const expectedBatch = [{ afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }, { afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }, { afterBidAdded: mockAfterBidAdded, auctionInstance: { }, bidResponse: { } }];
361
334
 
362
- callback();
335
+ callback();
363
336
 
364
- sinon.assert.calledWith(stubCache, expectedBatch);
365
- });
337
+ sinon.assert.calledWith(stubCache, expectedBatch);
338
+ });
339
+ }
366
340
 
367
341
  function assertRequestMade(bid, expectedValue) {
368
342
  store([bid], function () { });
@@ -393,6 +367,35 @@ describe('The video cache', function () {
393
367
  return callback;
394
368
  }
395
369
  });
370
+
371
+ describe('storeBatch', () => {
372
+ let sandbox;
373
+ let err, cacheIds
374
+ beforeEach(() => {
375
+ err = null;
376
+ cacheIds = [];
377
+ sandbox = sinon.createSandbox();
378
+ sandbox.stub(utils, 'logError');
379
+ sandbox.stub(_internal, 'store').callsFake((_, cb) => cb(err, cacheIds));
380
+ });
381
+ afterEach(() => {
382
+ sandbox.restore();
383
+ })
384
+ it('should log an error when store replies with an error', () => {
385
+ err = new Error('err');
386
+ storeBatch([]);
387
+ sinon.assert.called(utils.logError);
388
+ });
389
+ it('should not process returned uuids if they do not match the batch size', () => {
390
+ const el = {auctionInstance: {}, bidResponse: {}, afterBidAdded: sinon.stub()}
391
+ const batch = [el, el];
392
+ cacheIds = [{uuid: 'mock-id'}]
393
+ storeBatch(batch);
394
+ expect(el.bidResponse.videoCacheKey).to.not.exist;
395
+ sinon.assert.notCalled(batch[0].afterBidAdded);
396
+ sinon.assert.called(utils.logError);
397
+ })
398
+ })
396
399
  });
397
400
 
398
401
  describe('The getCache function', function () {