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
@@ -8,6 +8,16 @@ const adUrl = 'https://us-east-ep.engagemedia.tv/pbjs';
8
8
  const syncUrl = 'https://cs.engagemedia.tv';
9
9
 
10
10
  describe('EMTVBidAdapter', 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('EMTVBidAdapter', 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('EMTVBidAdapter', 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('EMTVBidAdapter', 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,10 +88,22 @@ describe('EMTVBidAdapter', 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'
81
- }
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
+ }
105
+ },
106
+ timeout: 500
82
107
  };
83
108
 
84
109
  describe('isBidRequestValid', function () {
@@ -130,7 +155,7 @@ describe('EMTVBidAdapter', function () {
130
155
  expect(data.host).to.be.a('string');
131
156
  expect(data.page).to.be.a('string');
132
157
  expect(data.coppa).to.be.a('number');
133
- expect(data.gdpr).to.be.a('string');
158
+ expect(data.gdpr).to.be.a('object');
134
159
  expect(data.ccpa).to.be.a('string');
135
160
  expect(data.tmax).to.be.a('number');
136
161
  expect(data.placements).to.have.lengthOf(3);
@@ -146,6 +171,56 @@ describe('EMTVBidAdapter', function () {
146
171
  expect(placement.schain).to.be.an('object');
147
172
  expect(placement.bidfloor).to.exist.and.to.equal(0);
148
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);
149
224
 
150
225
  if (placement.adFormat === BANNER) {
151
226
  expect(placement.sizes).to.be.an('array');
@@ -171,8 +246,10 @@ describe('EMTVBidAdapter', function () {
171
246
  serverRequest = spec.buildRequests(bids, bidderRequest);
172
247
  let data = serverRequest.data;
173
248
  expect(data.gdpr).to.exist;
174
- expect(data.gdpr).to.be.a('string');
175
- 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);
176
253
  expect(data.ccpa).to.not.exist;
177
254
  delete bidderRequest.gdprConsent;
178
255
  });
@@ -187,12 +264,38 @@ describe('EMTVBidAdapter', function () {
187
264
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
188
265
  expect(data.gdpr).to.not.exist;
189
266
  });
267
+ });
268
+
269
+ describe('gpp consent', function () {
270
+ it('bidderRequest.gppConsent', () => {
271
+ bidderRequest.gppConsent = {
272
+ gppString: 'abc123',
273
+ applicableSections: [8]
274
+ };
190
275
 
191
- it('Returns empty data if no valid requests are passed', function () {
192
- serverRequest = spec.buildRequests([], bidderRequest);
276
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
193
277
  let data = serverRequest.data;
194
- expect(data.placements).to.be.an('array').that.is.empty;
195
- });
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
+ })
196
299
  });
197
300
 
198
301
  describe('interpretResponse', function () {
@@ -396,5 +499,17 @@ describe('EMTVBidAdapter', function () {
396
499
  expect(syncData[0].url).to.be.a('string')
397
500
  expect(syncData[0].url).to.equal(`${syncUrl}/image?pbjs=1&ccpa_consent=1---&coppa=0`)
398
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
+ });
399
514
  });
400
515
  });
@@ -3,9 +3,19 @@ import { spec } from '../../../modules/globalsunBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
4
  import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
5
 
6
- const bidder = 'globalsun'
6
+ const bidder = 'globalsun';
7
7
 
8
8
  describe('GlobalsunBidAdapter', function () {
9
+ const userIdAsEids = [{
10
+ source: 'test.org',
11
+ uids: [{
12
+ id: '01**********',
13
+ atype: 1,
14
+ ext: {
15
+ third: '01***********'
16
+ }
17
+ }]
18
+ }];
9
19
  const bids = [
10
20
  {
11
21
  bidId: getUniqueIdentifierStr(),
@@ -16,8 +26,9 @@ describe('GlobalsunBidAdapter', function () {
16
26
  }
17
27
  },
18
28
  params: {
19
- placementId: 'testBanner',
20
- }
29
+ placementId: 'testBanner'
30
+ },
31
+ userIdAsEids
21
32
  },
22
33
  {
23
34
  bidId: getUniqueIdentifierStr(),
@@ -30,8 +41,9 @@ describe('GlobalsunBidAdapter', function () {
30
41
  }
31
42
  },
32
43
  params: {
33
- placementId: 'testVideo',
34
- }
44
+ placementId: 'testVideo'
45
+ },
46
+ userIdAsEids
35
47
  },
36
48
  {
37
49
  bidId: getUniqueIdentifierStr(),
@@ -53,8 +65,9 @@ describe('GlobalsunBidAdapter', function () {
53
65
  }
54
66
  },
55
67
  params: {
56
- placementId: 'testNative',
57
- }
68
+ placementId: 'testNative'
69
+ },
70
+ userIdAsEids
58
71
  }
59
72
  ];
60
73
 
@@ -73,9 +86,20 @@ describe('GlobalsunBidAdapter', function () {
73
86
 
74
87
  const bidderRequest = {
75
88
  uspConsent: '1---',
76
- gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
89
+ gdprConsent: {
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
92
+ },
77
93
  refererInfo: {
78
- referer: 'https://test.com'
94
+ referer: 'https://test.com',
95
+ page: 'https://test.com'
96
+ },
97
+ ortb2: {
98
+ device: {
99
+ w: 1512,
100
+ h: 982,
101
+ language: 'en-UK'
102
+ }
79
103
  },
80
104
  timeout: 500
81
105
  };
@@ -129,7 +153,7 @@ describe('GlobalsunBidAdapter', function () {
129
153
  expect(data.host).to.be.a('string');
130
154
  expect(data.page).to.be.a('string');
131
155
  expect(data.coppa).to.be.a('number');
132
- expect(data.gdpr).to.be.a('string');
156
+ expect(data.gdpr).to.be.a('object');
133
157
  expect(data.ccpa).to.be.a('string');
134
158
  expect(data.tmax).to.be.a('number');
135
159
  expect(data.placements).to.have.lengthOf(3);
@@ -145,6 +169,56 @@ describe('GlobalsunBidAdapter', function () {
145
169
  expect(placement.schain).to.be.an('object');
146
170
  expect(placement.bidfloor).to.exist.and.to.equal(0);
147
171
  expect(placement.type).to.exist.and.to.equal('publisher');
172
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
173
+
174
+ if (placement.adFormat === BANNER) {
175
+ expect(placement.sizes).to.be.an('array');
176
+ }
177
+ switch (placement.adFormat) {
178
+ case BANNER:
179
+ expect(placement.sizes).to.be.an('array');
180
+ break;
181
+ case VIDEO:
182
+ expect(placement.playerSize).to.be.an('array');
183
+ expect(placement.minduration).to.be.an('number');
184
+ expect(placement.maxduration).to.be.an('number');
185
+ break;
186
+ case NATIVE:
187
+ expect(placement.native).to.be.an('object');
188
+ break;
189
+ }
190
+ }
191
+ });
192
+
193
+ it('Returns valid endpoints', function () {
194
+ const bids = [
195
+ {
196
+ bidId: getUniqueIdentifierStr(),
197
+ bidder: bidder,
198
+ mediaTypes: {
199
+ [BANNER]: {
200
+ sizes: [[300, 250]]
201
+ }
202
+ },
203
+ params: {
204
+ endpointId: 'testBanner',
205
+ },
206
+ userIdAsEids
207
+ }
208
+ ];
209
+
210
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
211
+
212
+ const { placements } = serverRequest.data;
213
+ for (let i = 0, len = placements.length; i < len; i++) {
214
+ const placement = placements[i];
215
+ expect(placement.endpointId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
216
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
217
+ expect(placement.bidId).to.be.a('string');
218
+ expect(placement.schain).to.be.an('object');
219
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
220
+ expect(placement.type).to.exist.and.to.equal('network');
221
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
148
222
 
149
223
  if (placement.adFormat === BANNER) {
150
224
  expect(placement.sizes).to.be.an('array');
@@ -170,8 +244,10 @@ describe('GlobalsunBidAdapter', function () {
170
244
  serverRequest = spec.buildRequests(bids, bidderRequest);
171
245
  let data = serverRequest.data;
172
246
  expect(data.gdpr).to.exist;
173
- expect(data.gdpr).to.be.a('string');
174
- expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
247
+ expect(data.gdpr).to.be.a('object');
248
+ expect(data.gdpr).to.have.property('consentString');
249
+ expect(data.gdpr).to.not.have.property('vendorData');
250
+ expect(data.gdpr.consentString).to.equal(bidderRequest.gdprConsent.consentString);
175
251
  expect(data.ccpa).to.not.exist;
176
252
  delete bidderRequest.gdprConsent;
177
253
  });
@@ -186,12 +262,38 @@ describe('GlobalsunBidAdapter', function () {
186
262
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
187
263
  expect(data.gdpr).to.not.exist;
188
264
  });
265
+ });
266
+
267
+ describe('gpp consent', function () {
268
+ it('bidderRequest.gppConsent', () => {
269
+ bidderRequest.gppConsent = {
270
+ gppString: 'abc123',
271
+ applicableSections: [8]
272
+ };
189
273
 
190
- it('Returns empty data if no valid requests are passed', function () {
191
- serverRequest = spec.buildRequests([], bidderRequest);
274
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
192
275
  let data = serverRequest.data;
193
- expect(data.placements).to.be.an('array').that.is.empty;
194
- });
276
+ expect(data).to.be.an('object');
277
+ expect(data).to.have.property('gpp');
278
+ expect(data).to.have.property('gpp_sid');
279
+
280
+ delete bidderRequest.gppConsent;
281
+ })
282
+
283
+ it('bidderRequest.ortb2.regs.gpp', () => {
284
+ bidderRequest.ortb2 = bidderRequest.ortb2 || {};
285
+ bidderRequest.ortb2.regs = bidderRequest.ortb2.regs || {};
286
+ bidderRequest.ortb2.regs.gpp = 'abc123';
287
+ bidderRequest.ortb2.regs.gpp_sid = [8];
288
+
289
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
290
+ let data = serverRequest.data;
291
+ expect(data).to.be.an('object');
292
+ expect(data).to.have.property('gpp');
293
+ expect(data).to.have.property('gpp_sid');
294
+
295
+ bidderRequest.ortb2;
296
+ })
195
297
  });
196
298
 
197
299
  describe('interpretResponse', function () {
@@ -395,5 +497,17 @@ describe('GlobalsunBidAdapter', function () {
395
497
  expect(syncData[0].url).to.be.a('string')
396
498
  expect(syncData[0].url).to.equal('https://cs.globalsun.io/image?pbjs=1&ccpa_consent=1---&coppa=0')
397
499
  });
500
+ it('Should return array of objects with proper sync config , include GPP', function() {
501
+ const syncData = spec.getUserSyncs({}, {}, {}, {}, {
502
+ gppString: 'abc123',
503
+ applicableSections: [8]
504
+ });
505
+ expect(syncData).to.be.an('array').which.is.not.empty;
506
+ expect(syncData[0]).to.be.an('object')
507
+ expect(syncData[0].type).to.be.a('string')
508
+ expect(syncData[0].type).to.equal('image')
509
+ expect(syncData[0].url).to.be.a('string')
510
+ expect(syncData[0].url).to.equal('https://cs.globalsun.io/image?pbjs=1&gpp=abc123&gpp_sid=8&coppa=0')
511
+ });
398
512
  });
399
513
  });
@@ -26,6 +26,7 @@ describe('ID5 ID System', function () {
26
26
  const ID5_MODULE_NAME = 'id5Id';
27
27
  const ID5_EIDS_NAME = ID5_MODULE_NAME.toLowerCase();
28
28
  const ID5_SOURCE = 'id5-sync.com';
29
+ const TRUE_LINK_SOURCE = 'true-link-id5-sync.com';
29
30
  const ID5_TEST_PARTNER_ID = 173;
30
31
  const ID5_ENDPOINT = `https://id5-sync.com/g/v2/${ID5_TEST_PARTNER_ID}.json`;
31
32
  const ID5_API_CONFIG_URL = `https://id5-sync.com/api/config/prebid`;
@@ -48,10 +49,8 @@ describe('ID5 ID System', function () {
48
49
  const EUID_STORED_ID = 'EUID_1';
49
50
  const EUID_SOURCE = 'uidapi.com';
50
51
  const ID5_STORED_OBJ_WITH_EUID = {
51
- 'universal_uid': ID5_STORED_ID,
52
- 'signature': ID5_STORED_SIGNATURE,
52
+ ...ID5_STORED_OBJ,
53
53
  'ext': {
54
- 'linkType': ID5_STORED_LINK_TYPE,
55
54
  'euid': {
56
55
  'source': EUID_SOURCE,
57
56
  'uids': [{
@@ -61,6 +60,11 @@ describe('ID5 ID System', function () {
61
60
  }
62
61
  }
63
62
  };
63
+ const TRUE_LINK_STORED_ID = 'TRUE_LINK_1';
64
+ const ID5_STORED_OBJ_WITH_TRUE_LINK = {
65
+ ...ID5_STORED_OBJ,
66
+ publisherTrueLinkId: TRUE_LINK_STORED_ID
67
+ };
64
68
  const ID5_RESPONSE_ID = 'newid5id';
65
69
  const ID5_RESPONSE_SIGNATURE = 'abcdef';
66
70
  const ID5_RESPONSE_LINK_TYPE = 2;
@@ -148,6 +152,16 @@ describe('ID5 ID System', function () {
148
152
  });
149
153
  }
150
154
 
155
+ function wrapAsyncExpects(done, expectsFn) {
156
+ return function () {
157
+ try {
158
+ expectsFn();
159
+ } catch (err) {
160
+ done(err);
161
+ }
162
+ }
163
+ }
164
+
151
165
  class XhrServerMock {
152
166
  currentRequestIdx = 0;
153
167
  server;
@@ -837,6 +851,38 @@ describe('ID5 ID System', function () {
837
851
  id5System.id5IdSubmodule.getId(getId5FetchConfig());
838
852
  });
839
853
  });
854
+
855
+ it('should pass true link info to ID5 server even when true link is not booted', function () {
856
+ let xhrServerMock = new XhrServerMock(server);
857
+ let submoduleResponse = callSubmoduleGetId(getId5FetchConfig(), undefined, ID5_STORED_OBJ);
858
+
859
+ return xhrServerMock.expectFetchRequest()
860
+ .then(fetchRequest => {
861
+ let requestBody = JSON.parse(fetchRequest.requestBody);
862
+ expect(requestBody.true_link).is.deep.equal({booted: false});
863
+ fetchRequest.respond(200, responseHeader, JSON.stringify(ID5_JSON_RESPONSE));
864
+ return submoduleResponse;
865
+ });
866
+ });
867
+
868
+ it('should pass full true link info to ID5 server when true link is booted', function () {
869
+ let xhrServerMock = new XhrServerMock(server);
870
+ let trueLinkResponse = {booted: true, redirected: true, id: 'TRUE_LINK_ID'};
871
+ window.id5Bootstrap = {
872
+ getTrueLinkInfo: function () {
873
+ return trueLinkResponse;
874
+ }
875
+ };
876
+ let submoduleResponse = callSubmoduleGetId(getId5FetchConfig(), undefined, ID5_STORED_OBJ);
877
+
878
+ return xhrServerMock.expectFetchRequest()
879
+ .then(fetchRequest => {
880
+ let requestBody = JSON.parse(fetchRequest.requestBody);
881
+ expect(requestBody.true_link).is.deep.equal(trueLinkResponse);
882
+ fetchRequest.respond(200, responseHeader, JSON.stringify(ID5_JSON_RESPONSE));
883
+ return submoduleResponse;
884
+ });
885
+ });
840
886
  });
841
887
 
842
888
  describe('Local storage', () => {
@@ -950,6 +996,31 @@ describe('ID5 ID System', function () {
950
996
  }, {adUnits});
951
997
  });
952
998
 
999
+ it('should add stored TRUE_LINK_ID from cache to bids', function (done) {
1000
+ id5System.storeInLocalStorage(id5System.ID5_STORAGE_NAME, JSON.stringify(ID5_STORED_OBJ_WITH_TRUE_LINK), 1);
1001
+
1002
+ init(config);
1003
+ setSubmoduleRegistry([id5System.id5IdSubmodule]);
1004
+ config.setConfig(getFetchLocalStorageConfig());
1005
+
1006
+ requestBidsHook(wrapAsyncExpects(done, function () {
1007
+ adUnits.forEach(unit => {
1008
+ unit.bids.forEach(bid => {
1009
+ expect(bid).to.have.deep.nested.property(`userId.trueLinkId`);
1010
+ expect(bid.userId.trueLinkId.uid).is.equal(TRUE_LINK_STORED_ID);
1011
+ expect(bid.userIdAsEids[1]).is.deep.equal({
1012
+ source: TRUE_LINK_SOURCE,
1013
+ uids: [{
1014
+ id: TRUE_LINK_STORED_ID,
1015
+ atype: 1,
1016
+ }]
1017
+ });
1018
+ });
1019
+ });
1020
+ done();
1021
+ }), {adUnits});
1022
+ });
1023
+
953
1024
  it('should add config value ID to bids', function (done) {
954
1025
  init(config);
955
1026
  setSubmoduleRegistry([id5System.id5IdSubmodule]);
@@ -1056,6 +1127,11 @@ describe('ID5 ID System', function () {
1056
1127
  'ext': {'provider': ID5_SOURCE}
1057
1128
  });
1058
1129
  });
1130
+ it('should decode trueLinkId from a stored object with trueLinkId', function () {
1131
+ expect(id5System.id5IdSubmodule.decode(ID5_STORED_OBJ_WITH_TRUE_LINK, getId5FetchConfig()).trueLinkId).is.deep.equal({
1132
+ 'uid': TRUE_LINK_STORED_ID
1133
+ });
1134
+ });
1059
1135
  });
1060
1136
 
1061
1137
  describe('A/B Testing', function () {
@@ -3,7 +3,7 @@ import { spec } from '../../../modules/iqzoneBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
4
  import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
5
 
6
- const bidder = 'iqzone'
6
+ const bidder = 'iqzone';
7
7
 
8
8
  describe('IQZoneBidAdapter', function () {
9
9
  const userIdAsEids = [{
@@ -26,7 +26,7 @@ describe('IQZoneBidAdapter', function () {
26
26
  }
27
27
  },
28
28
  params: {
29
- placementId: 'testBanner',
29
+ placementId: 'testBanner'
30
30
  },
31
31
  userIdAsEids
32
32
  },
@@ -41,7 +41,7 @@ describe('IQZoneBidAdapter', function () {
41
41
  }
42
42
  },
43
43
  params: {
44
- placementId: 'testVideo',
44
+ placementId: 'testVideo'
45
45
  },
46
46
  userIdAsEids
47
47
  },
@@ -65,7 +65,7 @@ describe('IQZoneBidAdapter', function () {
65
65
  }
66
66
  },
67
67
  params: {
68
- placementId: 'testNative',
68
+ placementId: 'testNative'
69
69
  },
70
70
  userIdAsEids
71
71
  }
@@ -87,10 +87,19 @@ describe('IQZoneBidAdapter', function () {
87
87
  const bidderRequest = {
88
88
  uspConsent: '1---',
89
89
  gdprConsent: {
90
- consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw'
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
91
92
  },
92
93
  refererInfo: {
93
- referer: 'https://test.com'
94
+ referer: 'https://test.com',
95
+ page: 'https://test.com'
96
+ },
97
+ ortb2: {
98
+ device: {
99
+ w: 1512,
100
+ h: 982,
101
+ language: 'en-UK'
102
+ }
94
103
  },
95
104
  timeout: 500
96
105
  };
@@ -181,12 +190,63 @@ describe('IQZoneBidAdapter', function () {
181
190
  }
182
191
  });
183
192
 
193
+ it('Returns valid endpoints', function () {
194
+ const bids = [
195
+ {
196
+ bidId: getUniqueIdentifierStr(),
197
+ bidder: bidder,
198
+ mediaTypes: {
199
+ [BANNER]: {
200
+ sizes: [[300, 250]]
201
+ }
202
+ },
203
+ params: {
204
+ endpointId: 'testBanner',
205
+ },
206
+ userIdAsEids
207
+ }
208
+ ];
209
+
210
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
211
+
212
+ const { placements } = serverRequest.data;
213
+ for (let i = 0, len = placements.length; i < len; i++) {
214
+ const placement = placements[i];
215
+ expect(placement.endpointId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
216
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
217
+ expect(placement.bidId).to.be.a('string');
218
+ expect(placement.schain).to.be.an('object');
219
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
220
+ expect(placement.type).to.exist.and.to.equal('network');
221
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
222
+
223
+ if (placement.adFormat === BANNER) {
224
+ expect(placement.sizes).to.be.an('array');
225
+ }
226
+ switch (placement.adFormat) {
227
+ case BANNER:
228
+ expect(placement.sizes).to.be.an('array');
229
+ break;
230
+ case VIDEO:
231
+ expect(placement.playerSize).to.be.an('array');
232
+ expect(placement.minduration).to.be.an('number');
233
+ expect(placement.maxduration).to.be.an('number');
234
+ break;
235
+ case NATIVE:
236
+ expect(placement.native).to.be.an('object');
237
+ break;
238
+ }
239
+ }
240
+ });
241
+
184
242
  it('Returns data with gdprConsent and without uspConsent', function () {
185
243
  delete bidderRequest.uspConsent;
186
244
  serverRequest = spec.buildRequests(bids, bidderRequest);
187
245
  let data = serverRequest.data;
188
246
  expect(data.gdpr).to.exist;
189
247
  expect(data.gdpr).to.be.a('object');
248
+ expect(data.gdpr).to.have.property('consentString');
249
+ expect(data.gdpr).to.not.have.property('vendorData');
190
250
  expect(data.gdpr.consentString).to.equal(bidderRequest.gdprConsent.consentString);
191
251
  expect(data.ccpa).to.not.exist;
192
252
  delete bidderRequest.gdprConsent;
@@ -202,12 +262,6 @@ describe('IQZoneBidAdapter', function () {
202
262
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
203
263
  expect(data.gdpr).to.not.exist;
204
264
  });
205
-
206
- it('Returns empty data if no valid requests are passed', function () {
207
- serverRequest = spec.buildRequests([], bidderRequest);
208
- let data = serverRequest.data;
209
- expect(data.placements).to.be.an('array').that.is.empty;
210
- });
211
265
  });
212
266
 
213
267
  describe('gpp consent', function () {