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
@@ -1,146 +1,303 @@
1
- import {expect} from 'chai';
2
- import {spec} from '../../../modules/krushmediaBidAdapter.js';
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/krushmediaBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
+
6
+ const bidder = 'krushmedia';
4
7
 
5
8
  describe('KrushmediabBidAdapter', function () {
6
- const bid = {
7
- bidId: '23fhj33i987f',
8
- bidder: 'krushmedia',
9
+ const userIdAsEids = [{
10
+ source: 'test.org',
11
+ uids: [{
12
+ id: '01**********',
13
+ atype: 1,
14
+ ext: {
15
+ third: '01***********'
16
+ }
17
+ }]
18
+ }];
19
+ const bids = [
20
+ {
21
+ bidId: getUniqueIdentifierStr(),
22
+ bidder: bidder,
23
+ mediaTypes: {
24
+ [BANNER]: {
25
+ sizes: [[300, 250]]
26
+ }
27
+ },
28
+ params: {
29
+ key: 783
30
+ },
31
+ userIdAsEids
32
+ },
33
+ {
34
+ bidId: getUniqueIdentifierStr(),
35
+ bidder: bidder,
36
+ mediaTypes: {
37
+ [VIDEO]: {
38
+ playerSize: [[300, 300]],
39
+ minduration: 5,
40
+ maxduration: 60
41
+ }
42
+ },
43
+ params: {
44
+ key: 783
45
+ },
46
+ userIdAsEids
47
+ },
48
+ {
49
+ bidId: getUniqueIdentifierStr(),
50
+ bidder: bidder,
51
+ mediaTypes: {
52
+ [NATIVE]: {
53
+ native: {
54
+ title: {
55
+ required: true
56
+ },
57
+ body: {
58
+ required: true
59
+ },
60
+ icon: {
61
+ required: true,
62
+ size: [64, 64]
63
+ }
64
+ }
65
+ }
66
+ },
67
+ params: {
68
+ key: 783
69
+ },
70
+ userIdAsEids
71
+ }
72
+ ];
73
+
74
+ const invalidBid = {
75
+ bidId: getUniqueIdentifierStr(),
76
+ bidder: bidder,
9
77
  mediaTypes: {
10
78
  [BANNER]: {
11
79
  sizes: [[300, 250]]
12
80
  }
13
81
  },
14
82
  params: {
15
- key: 783
83
+
16
84
  }
17
- };
85
+ }
18
86
 
19
87
  const bidderRequest = {
88
+ uspConsent: '1---',
89
+ gdprConsent: {
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
92
+ },
20
93
  refererInfo: {
21
- referer: 'test.com'
22
- }
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
+ }
103
+ },
104
+ timeout: 500
23
105
  };
24
106
 
25
107
  describe('isBidRequestValid', function () {
26
108
  it('Should return true if there are bidId, params and key parameters present', function () {
27
- expect(spec.isBidRequestValid(bid)).to.be.true;
109
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
28
110
  });
29
111
  it('Should return false if at least one of parameters is not present', function () {
30
- delete bid.params.key;
31
- expect(spec.isBidRequestValid(bid)).to.be.false;
112
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
32
113
  });
33
114
  });
34
115
 
35
116
  describe('buildRequests', function () {
36
- let serverRequest = spec.buildRequests([bid], bidderRequest);
117
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
118
+
37
119
  it('Creates a ServerRequest object with method, URL and data', function () {
38
120
  expect(serverRequest).to.exist;
39
121
  expect(serverRequest.method).to.exist;
40
122
  expect(serverRequest.url).to.exist;
41
123
  expect(serverRequest.data).to.exist;
42
124
  });
125
+
43
126
  it('Returns POST method', function () {
44
127
  expect(serverRequest.method).to.equal('POST');
45
128
  });
129
+
46
130
  it('Returns valid URL', function () {
47
131
  expect(serverRequest.url).to.equal('https://ads4.krushmedia.com/?c=rtb&m=hb');
48
132
  });
49
- it('Returns valid data if array of bids is valid', function () {
133
+
134
+ it('Returns general data valid', function () {
50
135
  let data = serverRequest.data;
51
136
  expect(data).to.be.an('object');
52
- expect(data).to.have.all.keys('deviceWidth', 'deviceHeight', 'language', 'secure', 'host', 'page', 'placements');
137
+ expect(data).to.have.all.keys('deviceWidth',
138
+ 'deviceHeight',
139
+ 'language',
140
+ 'secure',
141
+ 'host',
142
+ 'page',
143
+ 'placements',
144
+ 'coppa',
145
+ 'ccpa',
146
+ 'gdpr',
147
+ 'tmax'
148
+ );
53
149
  expect(data.deviceWidth).to.be.a('number');
54
150
  expect(data.deviceHeight).to.be.a('number');
55
151
  expect(data.language).to.be.a('string');
56
152
  expect(data.secure).to.be.within(0, 1);
57
153
  expect(data.host).to.be.a('string');
58
154
  expect(data.page).to.be.a('string');
59
- expect(data.gdpr).to.not.exist;
60
- expect(data.ccpa).to.not.exist;
61
- let placement = data['placements'][0];
62
- expect(placement).to.have.keys('key', 'bidId', 'traffic', 'sizes', 'schain', 'bidFloor');
63
- expect(placement.key).to.equal(783);
64
- expect(placement.bidId).to.equal('23fhj33i987f');
65
- expect(placement.traffic).to.equal(BANNER);
66
- expect(placement.schain).to.be.an('object');
67
- expect(placement.sizes).to.be.an('array');
155
+ expect(data.coppa).to.be.a('number');
156
+ expect(data.gdpr).to.be.a('object');
157
+ expect(data.ccpa).to.be.a('string');
158
+ expect(data.tmax).to.be.a('number');
159
+ expect(data.placements).to.have.lengthOf(3);
68
160
  });
69
161
 
70
- it('Returns valid data for mediatype video', function () {
71
- const playerSize = [300, 300];
72
- bid.mediaTypes = {};
73
- bid.params.traffic = VIDEO;
74
- bid.mediaTypes[VIDEO] = {
75
- playerSize
76
- };
77
- serverRequest = spec.buildRequests([bid], bidderRequest);
78
- let data = serverRequest.data;
79
- expect(data).to.be.an('object');
80
- let placement = data['placements'][0];
81
- expect(placement).to.be.an('object');
82
- expect(placement).to.have.keys('key', 'bidId', 'traffic', 'wPlayer', 'hPlayer', 'schain', 'bidFloor',
83
- 'minduration', 'maxduration', 'mimes', 'protocols', 'startdelay', 'placement', 'plcmt', 'skip',
84
- 'skipafter', 'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity');
85
- expect(placement.traffic).to.equal(VIDEO);
86
- expect(placement.wPlayer).to.equal(playerSize[0]);
87
- expect(placement.hPlayer).to.equal(playerSize[1]);
162
+ it('Returns valid placements', function () {
163
+ const { placements } = serverRequest.data;
164
+
165
+ for (let i = 0, len = placements.length; i < len; i++) {
166
+ const placement = placements[i];
167
+ expect(placement.key).to.be.equal(783);
168
+ expect(placement.traffic).to.be.oneOf([BANNER, VIDEO, NATIVE]);
169
+ expect(placement.bidId).to.be.a('string');
170
+ expect(placement.schain).to.be.an('object');
171
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
172
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
173
+
174
+ if (placement.traffic === BANNER) {
175
+ expect(placement.sizes).to.be.an('array');
176
+ }
177
+ switch (placement.traffic) {
178
+ case BANNER:
179
+ expect(placement.sizes).to.be.an('array');
180
+ break;
181
+ case VIDEO:
182
+ expect(placement.wPlayer).to.be.an('number');
183
+ expect(placement.hPlayer).to.be.an('number');
184
+ expect(placement.minduration).to.be.an('number');
185
+ expect(placement.maxduration).to.be.an('number');
186
+ break;
187
+ case NATIVE:
188
+ expect(placement.native).to.be.an('object');
189
+ break;
190
+ }
191
+ }
88
192
  });
89
193
 
90
- it('Returns valid data for mediatype native', function () {
91
- const native = {
92
- title: {
93
- required: true
94
- },
95
- body: {
96
- required: true
97
- },
98
- icon: {
99
- required: true,
100
- size: [64, 64]
194
+ it('Returns valid endpoints', function () {
195
+ const bids = [
196
+ {
197
+ bidId: getUniqueIdentifierStr(),
198
+ bidder: bidder,
199
+ mediaTypes: {
200
+ [BANNER]: {
201
+ sizes: [[300, 250]]
202
+ }
203
+ },
204
+ params: {
205
+ endpointId: 'testBanner',
206
+ },
207
+ userIdAsEids
101
208
  }
102
- };
209
+ ];
103
210
 
104
- bid.mediaTypes = {};
105
- bid.params.traffic = NATIVE;
106
- bid.mediaTypes[NATIVE] = native;
107
- serverRequest = spec.buildRequests([bid], bidderRequest);
108
- let data = serverRequest.data;
109
- expect(data).to.be.an('object');
110
- let placement = data['placements'][0];
111
- expect(placement).to.be.an('object');
112
- expect(placement).to.have.keys('key', 'bidId', 'traffic', 'native', 'schain', 'bidFloor');
113
- expect(placement.traffic).to.equal(NATIVE);
114
- expect(placement.native).to.equal(native);
211
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
212
+
213
+ const { placements } = serverRequest.data;
214
+ for (let i = 0, len = placements.length; i < len; i++) {
215
+ const placement = placements[i];
216
+ expect(placement.endpointId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
217
+ expect(placement.traffic).to.be.oneOf([BANNER, VIDEO, NATIVE]);
218
+ expect(placement.bidId).to.be.a('string');
219
+ expect(placement.schain).to.be.an('object');
220
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
221
+ expect(placement.type).to.exist.and.to.equal('network');
222
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
223
+
224
+ if (placement.traffic === BANNER) {
225
+ expect(placement.sizes).to.be.an('array');
226
+ }
227
+ switch (placement.traffic) {
228
+ case BANNER:
229
+ expect(placement.sizes).to.be.an('array');
230
+ break;
231
+ case VIDEO:
232
+ expect(placement.wPlayer).to.be.an('number');
233
+ expect(placement.hPlayer).to.be.an('number');
234
+ expect(placement.minduration).to.be.an('number');
235
+ expect(placement.maxduration).to.be.an('number');
236
+ break;
237
+ case NATIVE:
238
+ expect(placement.native).to.be.an('object');
239
+ break;
240
+ }
241
+ }
115
242
  });
116
243
 
117
244
  it('Returns data with gdprConsent and without uspConsent', function () {
118
- bidderRequest.gdprConsent = 'test';
119
- serverRequest = spec.buildRequests([bid], bidderRequest);
245
+ delete bidderRequest.uspConsent;
246
+ serverRequest = spec.buildRequests(bids, bidderRequest);
120
247
  let data = serverRequest.data;
121
248
  expect(data.gdpr).to.exist;
122
- expect(data.gdpr).to.be.a('string');
123
- 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);
124
253
  expect(data.ccpa).to.not.exist;
125
254
  delete bidderRequest.gdprConsent;
126
255
  });
127
256
 
128
257
  it('Returns data with uspConsent and without gdprConsent', function () {
129
- bidderRequest.uspConsent = 'test';
130
- serverRequest = spec.buildRequests([bid], bidderRequest);
258
+ bidderRequest.uspConsent = '1---';
259
+ delete bidderRequest.gdprConsent;
260
+ serverRequest = spec.buildRequests(bids, bidderRequest);
131
261
  let data = serverRequest.data;
132
262
  expect(data.ccpa).to.exist;
133
263
  expect(data.ccpa).to.be.a('string');
134
264
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
135
265
  expect(data.gdpr).to.not.exist;
136
266
  });
267
+ });
268
+
269
+ describe('gpp consent', function () {
270
+ it('bidderRequest.gppConsent', () => {
271
+ bidderRequest.gppConsent = {
272
+ gppString: 'abc123',
273
+ applicableSections: [8]
274
+ };
137
275
 
138
- it('Returns empty data if no valid requests are passed', function () {
139
- serverRequest = spec.buildRequests([]);
276
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
140
277
  let data = serverRequest.data;
141
- expect(data.placements).to.be.an('array').that.is.empty;
142
- });
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
+ })
143
299
  });
300
+
144
301
  describe('interpretResponse', function () {
145
302
  it('Should interpret banner response', function () {
146
303
  const banner = {
@@ -155,7 +312,11 @@ describe('KrushmediabBidAdapter', function () {
155
312
  creativeId: '2',
156
313
  netRevenue: true,
157
314
  currency: 'USD',
158
- dealId: '1'
315
+ dealId: '1',
316
+ meta: {
317
+ advertiserDomains: ['google.com'],
318
+ advertiserId: 1234
319
+ }
159
320
  }]
160
321
  };
161
322
  let bannerResponses = spec.interpretResponse(banner);
@@ -163,15 +324,15 @@ describe('KrushmediabBidAdapter', function () {
163
324
  let dataItem = bannerResponses[0];
164
325
  expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
165
326
  'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
166
- expect(dataItem.requestId).to.equal('23fhj33i987f');
167
- expect(dataItem.cpm).to.equal(0.4);
168
- expect(dataItem.width).to.equal(300);
169
- expect(dataItem.height).to.equal(250);
170
- expect(dataItem.ad).to.equal('Test');
171
- expect(dataItem.ttl).to.equal(120);
172
- expect(dataItem.creativeId).to.equal('2');
327
+ expect(dataItem.requestId).to.equal(banner.body[0].requestId);
328
+ expect(dataItem.cpm).to.equal(banner.body[0].cpm);
329
+ expect(dataItem.width).to.equal(banner.body[0].width);
330
+ expect(dataItem.height).to.equal(banner.body[0].height);
331
+ expect(dataItem.ad).to.equal(banner.body[0].ad);
332
+ expect(dataItem.ttl).to.equal(banner.body[0].ttl);
333
+ expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
173
334
  expect(dataItem.netRevenue).to.be.true;
174
- expect(dataItem.currency).to.equal('USD');
335
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
175
336
  expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
176
337
  });
177
338
  it('Should interpret video response', function () {
@@ -185,7 +346,11 @@ describe('KrushmediabBidAdapter', function () {
185
346
  creativeId: '2',
186
347
  netRevenue: true,
187
348
  currency: 'USD',
188
- dealId: '1'
349
+ dealId: '1',
350
+ meta: {
351
+ advertiserDomains: ['google.com'],
352
+ advertiserId: 1234
353
+ }
189
354
  }]
190
355
  };
191
356
  let videoResponses = spec.interpretResponse(video);
@@ -219,6 +384,10 @@ describe('KrushmediabBidAdapter', function () {
219
384
  creativeId: '2',
220
385
  netRevenue: true,
221
386
  currency: 'USD',
387
+ meta: {
388
+ advertiserDomains: ['google.com'],
389
+ advertiserId: 1234
390
+ }
222
391
  }]
223
392
  };
224
393
  let nativeResponses = spec.interpretResponse(native);
@@ -305,6 +474,7 @@ describe('KrushmediabBidAdapter', function () {
305
474
  expect(serverResponses).to.be.an('array').that.is.empty;
306
475
  });
307
476
  });
477
+
308
478
  describe('getUserSyncs', function() {
309
479
  it('Should return array of objects with proper sync config , include GDPR', function() {
310
480
  const syncData = spec.getUserSyncs({}, {}, {
@@ -314,20 +484,32 @@ describe('KrushmediabBidAdapter', function () {
314
484
  expect(syncData).to.be.an('array').which.is.not.empty;
315
485
  expect(syncData[0]).to.be.an('object')
316
486
  expect(syncData[0].type).to.be.a('string')
317
- expect(syncData[0].type).to.equal('iframe')
487
+ expect(syncData[0].type).to.equal('image')
318
488
  expect(syncData[0].url).to.be.a('string')
319
- expect(syncData[0].url).to.equal('https://cs.krushmedia.com/html?src=pbjs&gdpr=1&gdpr_consent=ALL')
489
+ expect(syncData[0].url).to.equal('https://cs.krushmedia.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
320
490
  });
321
491
  it('Should return array of objects with proper sync config , include CCPA', function() {
322
492
  const syncData = spec.getUserSyncs({}, {}, {}, {
323
- consentString: '1NNN'
493
+ consentString: '1---'
494
+ });
495
+ expect(syncData).to.be.an('array').which.is.not.empty;
496
+ expect(syncData[0]).to.be.an('object')
497
+ expect(syncData[0].type).to.be.a('string')
498
+ expect(syncData[0].type).to.equal('image')
499
+ expect(syncData[0].url).to.be.a('string')
500
+ expect(syncData[0].url).to.equal('https://cs.krushmedia.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
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]
324
506
  });
325
507
  expect(syncData).to.be.an('array').which.is.not.empty;
326
508
  expect(syncData[0]).to.be.an('object')
327
509
  expect(syncData[0].type).to.be.a('string')
328
- expect(syncData[0].type).to.equal('iframe')
510
+ expect(syncData[0].type).to.equal('image')
329
511
  expect(syncData[0].url).to.be.a('string')
330
- expect(syncData[0].url).to.equal('https://cs.krushmedia.com/html?src=pbjs&ccpa_consent=1NNN')
512
+ expect(syncData[0].url).to.equal('https://cs.krushmedia.com/image?pbjs=1&gpp=abc123&gpp_sid=8&coppa=0')
331
513
  });
332
514
  });
333
515
  });
@@ -3,9 +3,19 @@ import { spec } from '../../../modules/loyalBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
4
  import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
5
 
6
- const bidder = 'loyal'
6
+ const bidder = 'loyal';
7
7
 
8
8
  describe('LoyalBidAdapter', 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('LoyalBidAdapter', 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('LoyalBidAdapter', 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('LoyalBidAdapter', function () {
53
65
  }
54
66
  },
55
67
  params: {
56
- placementId: 'testNative',
57
- }
68
+ placementId: 'testNative'
69
+ },
70
+ userIdAsEids
58
71
  }
59
72
  ];
60
73
 
@@ -74,10 +87,19 @@ describe('LoyalBidAdapter', function () {
74
87
  const bidderRequest = {
75
88
  uspConsent: '1---',
76
89
  gdprConsent: {
77
- consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw'
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
78
92
  },
79
93
  refererInfo: {
80
- 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
+ }
81
103
  },
82
104
  timeout: 500
83
105
  };
@@ -147,7 +169,56 @@ describe('LoyalBidAdapter', function () {
147
169
  expect(placement.schain).to.be.an('object');
148
170
  expect(placement.bidfloor).to.exist.and.to.equal(0);
149
171
  expect(placement.type).to.exist.and.to.equal('publisher');
150
- expect(placement.eids).to.exist.and.to.be.an('array');
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);
151
222
 
152
223
  if (placement.adFormat === BANNER) {
153
224
  expect(placement.sizes).to.be.an('array');
@@ -174,6 +245,9 @@ describe('LoyalBidAdapter', function () {
174
245
  let data = serverRequest.data;
175
246
  expect(data.gdpr).to.exist;
176
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);
177
251
  expect(data.ccpa).to.not.exist;
178
252
  delete bidderRequest.gdprConsent;
179
253
  });
@@ -188,12 +262,38 @@ describe('LoyalBidAdapter', function () {
188
262
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
189
263
  expect(data.gdpr).to.not.exist;
190
264
  });
265
+ });
191
266
 
192
- it('Returns empty data if no valid requests are passed', function () {
193
- serverRequest = spec.buildRequests([], bidderRequest);
267
+ describe('gpp consent', function () {
268
+ it('bidderRequest.gppConsent', () => {
269
+ bidderRequest.gppConsent = {
270
+ gppString: 'abc123',
271
+ applicableSections: [8]
272
+ };
273
+
274
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
194
275
  let data = serverRequest.data;
195
- expect(data.placements).to.be.an('array').that.is.empty;
196
- });
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
+ })
197
297
  });
198
298
 
199
299
  describe('interpretResponse', function () {