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,148 +1,268 @@
1
- import {expect} from 'chai';
2
- import {spec} from '../../../modules/mobfoxpbBidAdapter.js';
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/mobfoxpbBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
+
6
+ const bidder = 'mobfoxpb';
4
7
 
5
8
  describe('MobfoxHBBidAdapter', function () {
6
- const bid = {
7
- bidId: '23fhj33i987f',
8
- bidder: 'mobfoxpb',
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
+ placementId: 'testBanner'
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
+ placementId: 'testVideo'
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
+ placementId: 'testNative'
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
- placementId: 783,
16
- traffic: BANNER
83
+
17
84
  }
18
- };
85
+ }
19
86
 
20
87
  const bidderRequest = {
88
+ uspConsent: '1---',
89
+ gdprConsent: {
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
92
+ },
21
93
  refererInfo: {
22
- referer: 'test.com'
94
+ referer: 'https://test.com',
95
+ page: 'https://test.com'
23
96
  },
24
- ortb2: {}
97
+ ortb2: {
98
+ device: {
99
+ w: 1512,
100
+ h: 982,
101
+ language: 'en-UK'
102
+ }
103
+ },
104
+ timeout: 500
25
105
  };
26
106
 
27
107
  describe('isBidRequestValid', function () {
28
108
  it('Should return true if there are bidId, params and key parameters present', function () {
29
- expect(spec.isBidRequestValid(bid)).to.be.true;
109
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
30
110
  });
31
111
  it('Should return false if at least one of parameters is not present', function () {
32
- delete bid.params.placementId;
33
- expect(spec.isBidRequestValid(bid)).to.be.false;
112
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
34
113
  });
35
114
  });
36
115
 
37
116
  describe('buildRequests', function () {
38
- let serverRequest = spec.buildRequests([bid], bidderRequest);
117
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
118
+
39
119
  it('Creates a ServerRequest object with method, URL and data', function () {
40
120
  expect(serverRequest).to.exist;
41
121
  expect(serverRequest.method).to.exist;
42
122
  expect(serverRequest.url).to.exist;
43
123
  expect(serverRequest.data).to.exist;
44
124
  });
125
+
45
126
  it('Returns POST method', function () {
46
127
  expect(serverRequest.method).to.equal('POST');
47
128
  });
129
+
48
130
  it('Returns valid URL', function () {
49
131
  expect(serverRequest.url).to.equal('https://bes.mobfox.com/pbjs');
50
132
  });
51
- it('Returns valid data if array of bids is valid', function () {
133
+
134
+ it('Returns general data valid', function () {
52
135
  let data = serverRequest.data;
53
136
  expect(data).to.be.an('object');
54
- 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
+ );
55
149
  expect(data.deviceWidth).to.be.a('number');
56
150
  expect(data.deviceHeight).to.be.a('number');
57
151
  expect(data.language).to.be.a('string');
58
152
  expect(data.secure).to.be.within(0, 1);
59
153
  expect(data.host).to.be.a('string');
60
154
  expect(data.page).to.be.a('string');
61
- expect(data.gdpr).to.not.exist;
62
- expect(data.ccpa).to.not.exist;
63
- let placement = data['placements'][0];
64
- expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'sizes', 'schain', 'bidfloor');
65
- expect(placement.placementId).to.equal(783);
66
- expect(placement.bidId).to.equal('23fhj33i987f');
67
- expect(placement.traffic).to.equal(BANNER);
68
- expect(placement.schain).to.be.an('object');
69
- expect(placement.sizes).to.be.an('array');
70
- expect(placement.bidfloor).to.equal(0);
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);
71
160
  });
72
161
 
73
- it('Returns valid data for mediatype video', function () {
74
- const playerSize = [300, 300];
75
- bid.mediaTypes = {};
76
- bid.params.traffic = VIDEO;
77
- bid.mediaTypes[VIDEO] = {
78
- playerSize
79
- };
80
- serverRequest = spec.buildRequests([bid], bidderRequest);
81
- let data = serverRequest.data;
82
- expect(data).to.be.an('object');
83
- let placement = data['placements'][0];
84
- expect(placement).to.be.an('object');
85
- expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'playerSize', 'wPlayer', 'hPlayer', 'schain', 'bidfloor',
86
- 'minduration', 'maxduration', 'mimes', 'protocols', 'startdelay', 'placement', 'plcmt',
87
- 'skip', 'skipafter', 'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity');
88
- expect(placement.traffic).to.equal(VIDEO);
89
- expect(placement.wPlayer).to.equal(playerSize[0]);
90
- 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.placementId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
168
+ expect(placement.adFormat).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.type).to.exist.and.to.equal('publisher');
173
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
174
+
175
+ if (placement.adFormat === BANNER) {
176
+ expect(placement.sizes).to.be.an('array');
177
+ }
178
+ switch (placement.adFormat) {
179
+ case BANNER:
180
+ expect(placement.sizes).to.be.an('array');
181
+ break;
182
+ case VIDEO:
183
+ expect(placement.playerSize).to.be.an('array');
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
+ }
91
192
  });
92
193
 
93
- it('Returns valid data for mediatype native', function () {
94
- const native = {
95
- title: {
96
- required: true
97
- },
98
- body: {
99
- required: true
100
- },
101
- icon: {
102
- required: true,
103
- 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
104
208
  }
105
- };
209
+ ];
106
210
 
107
- bid.mediaTypes = {};
108
- bid.params.traffic = NATIVE;
109
- bid.mediaTypes[NATIVE] = native;
110
- serverRequest = spec.buildRequests([bid], bidderRequest);
111
- let data = serverRequest.data;
112
- expect(data).to.be.an('object');
113
- let placement = data['placements'][0];
114
- expect(placement).to.be.an('object');
115
- expect(placement).to.have.keys('placementId', 'bidId', 'traffic', 'native', 'schain', 'bidfloor');
116
- expect(placement.traffic).to.equal(NATIVE);
117
- 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.adFormat).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.adFormat === 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.playerSize).to.be.an('array');
233
+ expect(placement.minduration).to.be.an('number');
234
+ expect(placement.maxduration).to.be.an('number');
235
+ break;
236
+ case NATIVE:
237
+ expect(placement.native).to.be.an('object');
238
+ break;
239
+ }
240
+ }
118
241
  });
119
242
 
120
243
  it('Returns data with gdprConsent and without uspConsent', function () {
121
- bidderRequest.gdprConsent = 'test';
122
- serverRequest = spec.buildRequests([bid], bidderRequest);
244
+ delete bidderRequest.uspConsent;
245
+ serverRequest = spec.buildRequests(bids, bidderRequest);
123
246
  let data = serverRequest.data;
124
247
  expect(data.gdpr).to.exist;
125
- expect(data.gdpr).to.be.a('string');
126
- expect(data.gdpr).to.equal(bidderRequest.gdprConsent);
248
+ expect(data.gdpr).to.be.a('object');
249
+ expect(data.gdpr).to.have.property('consentString');
250
+ expect(data.gdpr).to.not.have.property('vendorData');
251
+ expect(data.gdpr.consentString).to.equal(bidderRequest.gdprConsent.consentString);
127
252
  expect(data.ccpa).to.not.exist;
128
253
  delete bidderRequest.gdprConsent;
129
254
  });
130
255
 
131
256
  it('Returns data with uspConsent and without gdprConsent', function () {
132
- bidderRequest.uspConsent = 'test';
133
- serverRequest = spec.buildRequests([bid], bidderRequest);
257
+ bidderRequest.uspConsent = '1---';
258
+ delete bidderRequest.gdprConsent;
259
+ serverRequest = spec.buildRequests(bids, bidderRequest);
134
260
  let data = serverRequest.data;
135
261
  expect(data.ccpa).to.exist;
136
262
  expect(data.ccpa).to.be.a('string');
137
263
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
138
264
  expect(data.gdpr).to.not.exist;
139
265
  });
140
-
141
- it('Returns empty data if no valid requests are passed', function () {
142
- serverRequest = spec.buildRequests([]);
143
- let data = serverRequest.data;
144
- expect(data.placements).to.be.an('array').that.is.empty;
145
- });
146
266
  });
147
267
 
148
268
  describe('gpp consent', function () {
@@ -152,7 +272,7 @@ describe('MobfoxHBBidAdapter', function () {
152
272
  applicableSections: [8]
153
273
  };
154
274
 
155
- let serverRequest = spec.buildRequests([bid], bidderRequest);
275
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
156
276
  let data = serverRequest.data;
157
277
  expect(data).to.be.an('object');
158
278
  expect(data).to.have.property('gpp');
@@ -162,15 +282,18 @@ describe('MobfoxHBBidAdapter', function () {
162
282
  })
163
283
 
164
284
  it('bidderRequest.ortb2.regs.gpp', () => {
285
+ bidderRequest.ortb2 = bidderRequest.ortb2 || {};
165
286
  bidderRequest.ortb2.regs = bidderRequest.ortb2.regs || {};
166
287
  bidderRequest.ortb2.regs.gpp = 'abc123';
167
288
  bidderRequest.ortb2.regs.gpp_sid = [8];
168
289
 
169
- let serverRequest = spec.buildRequests([bid], bidderRequest);
290
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
170
291
  let data = serverRequest.data;
171
292
  expect(data).to.be.an('object');
172
293
  expect(data).to.have.property('gpp');
173
294
  expect(data).to.have.property('gpp_sid');
295
+
296
+ bidderRequest.ortb2;
174
297
  })
175
298
  });
176
299
 
@@ -188,7 +311,11 @@ describe('MobfoxHBBidAdapter', function () {
188
311
  creativeId: '2',
189
312
  netRevenue: true,
190
313
  currency: 'USD',
191
- dealId: '1'
314
+ dealId: '1',
315
+ meta: {
316
+ advertiserDomains: ['google.com'],
317
+ advertiserId: 1234
318
+ }
192
319
  }]
193
320
  };
194
321
  let bannerResponses = spec.interpretResponse(banner);
@@ -196,15 +323,16 @@ describe('MobfoxHBBidAdapter', function () {
196
323
  let dataItem = bannerResponses[0];
197
324
  expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
198
325
  'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
199
- expect(dataItem.requestId).to.equal('23fhj33i987f');
200
- expect(dataItem.cpm).to.equal(0.4);
201
- expect(dataItem.width).to.equal(300);
202
- expect(dataItem.height).to.equal(250);
203
- expect(dataItem.ad).to.equal('Test');
204
- expect(dataItem.ttl).to.equal(120);
205
- expect(dataItem.creativeId).to.equal('2');
326
+ expect(dataItem.requestId).to.equal(banner.body[0].requestId);
327
+ expect(dataItem.cpm).to.equal(banner.body[0].cpm);
328
+ expect(dataItem.width).to.equal(banner.body[0].width);
329
+ expect(dataItem.height).to.equal(banner.body[0].height);
330
+ expect(dataItem.ad).to.equal(banner.body[0].ad);
331
+ expect(dataItem.ttl).to.equal(banner.body[0].ttl);
332
+ expect(dataItem.creativeId).to.equal(banner.body[0].creativeId);
206
333
  expect(dataItem.netRevenue).to.be.true;
207
- expect(dataItem.currency).to.equal('USD');
334
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
335
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
208
336
  });
209
337
  it('Should interpret video response', function () {
210
338
  const video = {
@@ -217,7 +345,11 @@ describe('MobfoxHBBidAdapter', function () {
217
345
  creativeId: '2',
218
346
  netRevenue: true,
219
347
  currency: 'USD',
220
- dealId: '1'
348
+ dealId: '1',
349
+ meta: {
350
+ advertiserDomains: ['google.com'],
351
+ advertiserId: 1234
352
+ }
221
353
  }]
222
354
  };
223
355
  let videoResponses = spec.interpretResponse(video);
@@ -233,6 +365,7 @@ describe('MobfoxHBBidAdapter', function () {
233
365
  expect(dataItem.creativeId).to.equal('2');
234
366
  expect(dataItem.netRevenue).to.be.true;
235
367
  expect(dataItem.currency).to.equal('USD');
368
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
236
369
  });
237
370
  it('Should interpret native response', function () {
238
371
  const native = {
@@ -250,6 +383,10 @@ describe('MobfoxHBBidAdapter', function () {
250
383
  creativeId: '2',
251
384
  netRevenue: true,
252
385
  currency: 'USD',
386
+ meta: {
387
+ advertiserDomains: ['google.com'],
388
+ advertiserId: 1234
389
+ }
253
390
  }]
254
391
  };
255
392
  let nativeResponses = spec.interpretResponse(native);
@@ -269,6 +406,7 @@ describe('MobfoxHBBidAdapter', function () {
269
406
  expect(dataItem.creativeId).to.equal('2');
270
407
  expect(dataItem.netRevenue).to.be.true;
271
408
  expect(dataItem.currency).to.equal('USD');
409
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
272
410
  });
273
411
  it('Should return an empty array if invalid banner response is passed', function () {
274
412
  const invBanner = {
@@ -0,0 +1,107 @@
1
+ import { expect } from 'chai';
2
+ import sinon from 'sinon';
3
+ import { mobianBrandSafetySubmodule, MOBIAN_URL } from 'modules/mobianRtdProvider.js';
4
+ import * as ajax from 'src/ajax.js';
5
+
6
+ describe('Mobian RTD Submodule', function () {
7
+ let ajaxStub;
8
+ let bidReqConfig;
9
+
10
+ beforeEach(function () {
11
+ bidReqConfig = {
12
+ ortb2Fragments: {
13
+ global: {
14
+ site: {
15
+ ext: {
16
+ data: {}
17
+ }
18
+ }
19
+ }
20
+ }
21
+ };
22
+ });
23
+
24
+ afterEach(function () {
25
+ ajaxStub.restore();
26
+ });
27
+
28
+ it('should return no_risk when server responds with garm_no_risk', function () {
29
+ ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
30
+ callbacks.success({
31
+ garm_no_risk: true,
32
+ garm_low_risk: false,
33
+ garm_medium_risk: false,
34
+ garm_high_risk: false
35
+ });
36
+ });
37
+
38
+ return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
39
+ expect(risk).to.have.property('mobianGarmRisk');
40
+ expect(risk['mobianGarmRisk']).to.equal('no_risk');
41
+ expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
42
+ });
43
+ });
44
+
45
+ it('should return low_risk when server responds with garm_no_risk', function () {
46
+ ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
47
+ callbacks.success({
48
+ garm_no_risk: false,
49
+ garm_low_risk: true,
50
+ garm_medium_risk: false,
51
+ garm_high_risk: false
52
+ });
53
+ });
54
+
55
+ return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
56
+ expect(risk).to.have.property('mobianGarmRisk');
57
+ expect(risk['mobianGarmRisk']).to.equal('low_risk');
58
+ expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
59
+ });
60
+ });
61
+
62
+ it('should return medium_risk when server responds with garm_medium_risk', function () {
63
+ ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
64
+ callbacks.success({
65
+ garm_no_risk: false,
66
+ garm_low_risk: false,
67
+ garm_medium_risk: true,
68
+ garm_high_risk: false
69
+ });
70
+ });
71
+
72
+ return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
73
+ expect(risk).to.have.property('mobianGarmRisk');
74
+ expect(risk['mobianGarmRisk']).to.equal('medium_risk');
75
+ expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
76
+ });
77
+ });
78
+
79
+ it('should return high_risk when server responds with garm_high_risk', function () {
80
+ ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
81
+ callbacks.success({
82
+ garm_no_risk: false,
83
+ garm_low_risk: false,
84
+ garm_medium_risk: false,
85
+ garm_high_risk: true
86
+ });
87
+ });
88
+
89
+ return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
90
+ expect(risk).to.have.property('mobianGarmRisk');
91
+ expect(risk['mobianGarmRisk']).to.equal('high_risk');
92
+ expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
93
+ });
94
+ });
95
+
96
+ it('should return unknown when server response is not of the expected shape', function () {
97
+ ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
98
+ callbacks.success('unexpected output not even of the right type');
99
+ });
100
+
101
+ return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
102
+ expect(risk).to.have.property('mobianGarmRisk');
103
+ expect(risk['mobianGarmRisk']).to.equal('unknown');
104
+ expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
105
+ });
106
+ });
107
+ });