prebid.js 9.2.0 → 9.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/creative/constants.js +2 -1
  2. package/creative/crossDomain.js +16 -4
  3. package/dist/33acrossAnalyticsAdapter.js +1 -1
  4. package/dist/33acrossBidAdapter.js +1 -1
  5. package/dist/33acrossIdSystem.js +1 -1
  6. package/dist/BTBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -1
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adfBidAdapter.js +1 -1
  13. package/dist/adgenerationBidAdapter.js +1 -1
  14. package/dist/adlooxRtdProvider.js +1 -1
  15. package/dist/adnuntiusBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgAnalyticsAdapter.js +1 -1
  21. package/dist/adxcgBidAdapter.js +1 -1
  22. package/dist/adyoulikeBidAdapter.js +1 -1
  23. package/dist/agmaAnalyticsAdapter.js +1 -1
  24. package/dist/ajaBidAdapter.js +1 -1
  25. package/dist/amxBidAdapter.js +1 -1
  26. package/dist/amxIdSystem.js +1 -1
  27. package/dist/appierAnalyticsAdapter.js +1 -1
  28. package/dist/appnexusBidAdapter.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/bidglassBidAdapter.js +1 -1
  32. package/dist/big-richmediaBidAdapter.js +1 -1
  33. package/dist/bridBidAdapter.js +1 -1
  34. package/dist/bridgewellBidAdapter.js +1 -1
  35. package/dist/brightMountainMediaBidAdapter.js +1 -1
  36. package/dist/carodaBidAdapter.js +1 -1
  37. package/dist/chtnwBidAdapter.js +1 -1
  38. package/dist/chunk-core.js +1 -1
  39. package/dist/codefuelBidAdapter.js +1 -1
  40. package/dist/concertBidAdapter.js +1 -1
  41. package/dist/connectadBidAdapter.js +1 -1
  42. package/dist/consentManagement.js +1 -0
  43. package/dist/consentManagementGpp.js +1 -1
  44. package/dist/consentManagementTcf.js +1 -1
  45. package/dist/consumableBidAdapter.js +1 -1
  46. package/dist/conversantAnalyticsAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/copper6sspBidAdapter.js +1 -0
  49. package/dist/cpmstarBidAdapter.js +1 -1
  50. package/dist/craftBidAdapter.js +1 -1
  51. package/dist/criteoBidAdapter.js +1 -1
  52. package/dist/cwireBidAdapter.js +1 -1
  53. package/dist/dailymotionBidAdapter.js +1 -1
  54. package/dist/deltaprojectsBidAdapter.js +1 -1
  55. package/dist/dependencies.json +51 -13
  56. package/dist/dianomiBidAdapter.js +1 -1
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/dxkultureBidAdapter.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/euidIdSystem.js +1 -1
  61. package/dist/exadsBidAdapter.js +1 -1
  62. package/dist/feedadBidAdapter.js +1 -1
  63. package/dist/finativeBidAdapter.js +1 -1
  64. package/dist/freewheel-sspBidAdapter.js +1 -1
  65. package/dist/gmosspBidAdapter.js +1 -1
  66. package/dist/goldbachBidAdapter.js +1 -1
  67. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  68. package/dist/greenbidsRtdProvider.js +1 -1
  69. package/dist/gridBidAdapter.js +1 -1
  70. package/dist/gumgumBidAdapter.js +1 -1
  71. package/dist/h12mediaBidAdapter.js +1 -1
  72. package/dist/hypelabBidAdapter.js +1 -1
  73. package/dist/id5AnalyticsAdapter.js +1 -1
  74. package/dist/id5IdSystem.js +1 -1
  75. package/dist/illuminBidAdapter.js +1 -1
  76. package/dist/imdsBidAdapter.js +1 -1
  77. package/dist/improvedigitalBidAdapter.js +1 -1
  78. package/dist/insticatorBidAdapter.js +1 -1
  79. package/dist/intentIqIdSystem.js +1 -1
  80. package/dist/ixBidAdapter.js +1 -1
  81. package/dist/jixieBidAdapter.js +1 -1
  82. package/dist/justpremiumBidAdapter.js +1 -1
  83. package/dist/kargoBidAdapter.js +1 -1
  84. package/dist/kimberliteBidAdapter.js +1 -1
  85. package/dist/konduitAnalyticsAdapter.js +1 -1
  86. package/dist/kueezBidAdapter.js +1 -1
  87. package/dist/kueezRtbBidAdapter.js +1 -1
  88. package/dist/lassoBidAdapter.js +1 -1
  89. package/dist/lifestreetBidAdapter.js +1 -1
  90. package/dist/liveIntentIdSystem.js +1 -1
  91. package/dist/logicadBidAdapter.js +1 -1
  92. package/dist/loglyliftBidAdapter.js +1 -1
  93. package/dist/luceadBidAdapter.js +1 -1
  94. package/dist/luponmediaBidAdapter.js +1 -1
  95. package/dist/mabidderBidAdapter.js +1 -1
  96. package/dist/magniteAnalyticsAdapter.js +1 -1
  97. package/dist/malltvAnalyticsAdapter.js +1 -1
  98. package/dist/marsmediaBidAdapter.js +1 -1
  99. package/dist/mediafuseBidAdapter.js +1 -1
  100. package/dist/medianetAnalyticsAdapter.js +1 -1
  101. package/dist/medianetBidAdapter.js +1 -1
  102. package/dist/mediasquareBidAdapter.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/missenaBidAdapter.js +1 -1
  106. package/dist/nexx360BidAdapter.js +1 -1
  107. package/dist/nobidAnalyticsAdapter.js +1 -1
  108. package/dist/nobidBidAdapter.js +1 -1
  109. package/dist/not-for-prod/prebid.js +184 -178
  110. package/dist/oguryBidAdapter.js +1 -1
  111. package/dist/onetagBidAdapter.js +1 -1
  112. package/dist/ooloAnalyticsAdapter.js +1 -1
  113. package/dist/openwebBidAdapter.js +1 -1
  114. package/dist/openxBidAdapter.js +1 -1
  115. package/dist/optidigitalBidAdapter.js +1 -1
  116. package/dist/orakiBidAdapter.js +1 -0
  117. package/dist/orbidderBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/ozoneBidAdapter.js +1 -1
  120. package/dist/pairIdSystem.js +1 -1
  121. package/dist/pixfutureBidAdapter.js +1 -1
  122. package/dist/prebidServerBidAdapter.js +1 -1
  123. package/dist/processResponse.js +1 -0
  124. package/dist/publinkIdSystem.js +1 -1
  125. package/dist/publirBidAdapter.js +1 -1
  126. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  127. package/dist/pubmaticBidAdapter.js +1 -1
  128. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  129. package/dist/pxyzBidAdapter.js +1 -1
  130. package/dist/quantcastBidAdapter.js +1 -1
  131. package/dist/readpeakBidAdapter.js +1 -1
  132. package/dist/relaidoBidAdapter.js +1 -1
  133. package/dist/retailspotBidAdapter.js +1 -1
  134. package/dist/rhythmoneBidAdapter.js +1 -1
  135. package/dist/riseBidAdapter.js +1 -1
  136. package/dist/rubiconBidAdapter.js +1 -1
  137. package/dist/seedingAllianceBidAdapter.js +1 -1
  138. package/dist/seedtagBidAdapter.js +1 -1
  139. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  140. package/dist/sharethroughBidAdapter.js +1 -1
  141. package/dist/shinezBidAdapter.js +1 -1
  142. package/dist/shinezRtbBidAdapter.js +1 -1
  143. package/dist/smaatoBidAdapter.js +1 -1
  144. package/dist/smartadserverBidAdapter.js +1 -1
  145. package/dist/smartxBidAdapter.js +1 -1
  146. package/dist/smartyadsBidAdapter.js +1 -1
  147. package/dist/smartyadsUtils.js +1 -0
  148. package/dist/smilewantedBidAdapter.js +1 -1
  149. package/dist/snigelBidAdapter.js +1 -1
  150. package/dist/sonobiBidAdapter.js +1 -1
  151. package/dist/sovrnBidAdapter.js +1 -1
  152. package/dist/sspBCBidAdapter.js +1 -1
  153. package/dist/stnBidAdapter.js +1 -1
  154. package/dist/stvBidAdapter.js +1 -1
  155. package/dist/sublimeBidAdapter.js +1 -1
  156. package/dist/taboolaBidAdapter.js +1 -1
  157. package/dist/tagorasBidAdapter.js +1 -1
  158. package/dist/tappxBidAdapter.js +1 -1
  159. package/dist/targetVideoBidAdapter.js +1 -1
  160. package/dist/teadsBidAdapter.js +1 -1
  161. package/dist/terceptAnalyticsAdapter.js +1 -1
  162. package/dist/themoneytizerBidAdapter.js +1 -1
  163. package/dist/trionBidAdapter.js +1 -1
  164. package/dist/tripleliftBidAdapter.js +1 -1
  165. package/dist/ttdBidAdapter.js +1 -1
  166. package/dist/twistDigitalBidAdapter.js +1 -1
  167. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  168. package/dist/uid2IdSystem.js +1 -1
  169. package/dist/underdogmediaBidAdapter.js +1 -1
  170. package/dist/undertoneBidAdapter.js +1 -1
  171. package/dist/unrulyBidAdapter.js +1 -1
  172. package/dist/userId.js +1 -1
  173. package/dist/viantOrtbBidAdapter.js +1 -1
  174. package/dist/vidazooBidAdapter.js +1 -1
  175. package/dist/vidazooUtils.js +1 -0
  176. package/dist/videobyteBidAdapter.js +1 -1
  177. package/dist/visxBidAdapter.js +1 -1
  178. package/dist/vuukleBidAdapter.js +1 -1
  179. package/dist/widespaceBidAdapter.js +1 -1
  180. package/dist/winrBidAdapter.js +1 -1
  181. package/dist/yahooAdsBidAdapter.js +1 -1
  182. package/dist/yieldmoBidAdapter.js +1 -1
  183. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  184. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  185. package/dist/zeta_global_sspBidAdapter.js +1 -1
  186. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  187. package/libraries/consentManagement/cmUtils.js +38 -0
  188. package/libraries/processResponse/index.js +12 -0
  189. package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
  190. package/libraries/vidazooUtils/bidderUtils.js +480 -0
  191. package/libraries/vidazooUtils/constants.js +7 -0
  192. package/modules/adagioRtdProvider.js +9 -7
  193. package/modules/addefendBidAdapter.js +1 -2
  194. package/modules/adfBidAdapter.js +1 -10
  195. package/modules/adlooxRtdProvider.js +1 -1
  196. package/modules/adnuntiusBidAdapter.js +1 -0
  197. package/modules/adxcgAnalyticsAdapter.js +1 -2
  198. package/modules/carodaBidAdapter.js +3 -8
  199. package/modules/codefuelBidAdapter.js +1 -10
  200. package/modules/consentManagementGpp.js +2 -38
  201. package/modules/consentManagementTcf.js +7 -38
  202. package/modules/conversantAnalyticsAdapter.js +1 -2
  203. package/modules/copper6sspBidAdapter.js +19 -0
  204. package/modules/copper6sspBidAdapter.md +79 -0
  205. package/modules/cpmstarBidAdapter.js +52 -36
  206. package/modules/cpmstarBidAdapter.md +1 -4
  207. package/modules/criteoBidAdapter.js +10 -3
  208. package/modules/dailymotionBidAdapter.js +1 -1
  209. package/modules/deltaprojectsBidAdapter.js +2 -11
  210. package/modules/dianomiBidAdapter.js +1 -9
  211. package/modules/finativeBidAdapter.js +1 -10
  212. package/modules/gridBidAdapter.js +2 -12
  213. package/modules/id5AnalyticsAdapter.js +1 -2
  214. package/modules/illuminBidAdapter.js +9 -304
  215. package/modules/intentIqIdSystem.js +408 -50
  216. package/modules/intentIqIdSystem.md +92 -0
  217. package/modules/kueezRtbBidAdapter.js +17 -312
  218. package/modules/liveIntentIdSystem.js +2 -2
  219. package/modules/luponmediaBidAdapter.js +4 -10
  220. package/modules/mabidderBidAdapter.js +1 -2
  221. package/modules/medianetAnalyticsAdapter.js +1 -2
  222. package/modules/medianetBidAdapter.js +1 -1
  223. package/modules/mgidBidAdapter.js +1 -10
  224. package/modules/orakiBidAdapter.js +19 -0
  225. package/modules/orakiBidAdapter.md +79 -0
  226. package/modules/orbidderBidAdapter.js +4 -2
  227. package/modules/outbrainBidAdapter.js +8 -43
  228. package/modules/ozoneBidAdapter.js +9 -7
  229. package/modules/pairIdSystem.js +27 -10
  230. package/modules/pixfutureBidAdapter.js +1 -2
  231. package/modules/prebidServerBidAdapter/index.js +1 -1
  232. package/modules/seedtagBidAdapter.js +4 -0
  233. package/modules/shinezRtbBidAdapter.js +12 -304
  234. package/modules/smartadserverBidAdapter.js +3 -0
  235. package/modules/smartyadsBidAdapter.js +6 -110
  236. package/modules/snigelBidAdapter.js +1 -2
  237. package/modules/tagorasBidAdapter.js +13 -316
  238. package/modules/tappxBidAdapter.js +1 -2
  239. package/modules/terceptAnalyticsAdapter.js +1 -2
  240. package/modules/twistDigitalBidAdapter.js +9 -433
  241. package/modules/userId/index.js +31 -21
  242. package/modules/viantOrtbBidAdapter.js +20 -0
  243. package/modules/vidazooBidAdapter.js +26 -468
  244. package/modules/visxBidAdapter.js +27 -29
  245. package/modules/yahooAdsBidAdapter.js +4 -1
  246. package/modules/yuktamediaAnalyticsAdapter.js +1 -2
  247. package/modules/zeta_global_sspBidAdapter.js +2 -2
  248. package/package.json +1 -1
  249. package/src/adRendering.js +25 -2
  250. package/src/constants.js +2 -0
  251. package/src/prebid.js +2 -1
  252. package/src/utils.js +19 -1
  253. package/test/spec/creative/crossDomainCreative_spec.js +38 -2
  254. package/test/spec/fpd/gdpr_spec.js +24 -2
  255. package/test/spec/libraries/processResponse_spec.js +60 -0
  256. package/test/spec/modules/adagioRtdProvider_spec.js +12 -0
  257. package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
  258. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
  259. package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
  260. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  261. package/test/spec/modules/dailymotionBidAdapter_spec.js +18 -14
  262. package/test/spec/modules/illuminBidAdapter_spec.js +26 -13
  263. package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
  264. package/test/spec/modules/kueezRtbBidAdapter_spec.js +26 -15
  265. package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
  266. package/test/spec/modules/outbrainBidAdapter_spec.js +32 -1
  267. package/test/spec/modules/seedtagBidAdapter_spec.js +27 -0
  268. package/test/spec/modules/shinezRtbBidAdapter_spec.js +26 -14
  269. package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
  270. package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
  271. package/test/spec/modules/tagorasBidAdapter_spec.js +26 -15
  272. package/test/spec/modules/twistDigitalBidAdapter_spec.js +19 -22
  273. package/test/spec/modules/userId_spec.js +86 -47
  274. package/test/spec/modules/viantOrtbBidAdapter_spec.js +87 -6
  275. package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
  276. package/test/spec/modules/visxBidAdapter_spec.js +180 -0
  277. package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
  278. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +11 -0
  279. package/test/spec/unit/pbjs_api_spec.js +6 -1
@@ -0,0 +1,514 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/copper6sspBidAdapter.js';
3
+ import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
+ import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
+
6
+ const bidder = 'copper6ssp';
7
+
8
+ describe('Copper6SSPBidAdapter', function () {
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,
77
+ mediaTypes: {
78
+ [BANNER]: {
79
+ sizes: [[300, 250]]
80
+ }
81
+ },
82
+ params: {
83
+
84
+ }
85
+ }
86
+
87
+ const bidderRequest = {
88
+ uspConsent: '1---',
89
+ gdprConsent: {
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
92
+ },
93
+ refererInfo: {
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
105
+ };
106
+
107
+ describe('isBidRequestValid', function () {
108
+ it('Should return true if there are bidId, params and key parameters present', function () {
109
+ expect(spec.isBidRequestValid(bids[0])).to.be.true;
110
+ });
111
+ it('Should return false if at least one of parameters is not present', function () {
112
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
113
+ });
114
+ });
115
+
116
+ describe('buildRequests', function () {
117
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
118
+
119
+ it('Creates a ServerRequest object with method, URL and data', function () {
120
+ expect(serverRequest).to.exist;
121
+ expect(serverRequest.method).to.exist;
122
+ expect(serverRequest.url).to.exist;
123
+ expect(serverRequest.data).to.exist;
124
+ });
125
+
126
+ it('Returns POST method', function () {
127
+ expect(serverRequest.method).to.equal('POST');
128
+ });
129
+
130
+ it('Returns valid URL', function () {
131
+ expect(serverRequest.url).to.equal('https://endpoint.copper6.com/pbjs');
132
+ });
133
+
134
+ it('Returns general data valid', function () {
135
+ let data = serverRequest.data;
136
+ expect(data).to.be.an('object');
137
+ expect(data).to.have.all.keys(
138
+ 'deviceWidth',
139
+ 'deviceHeight',
140
+ 'language',
141
+ 'secure',
142
+ 'host',
143
+ 'page',
144
+ 'placements',
145
+ 'coppa',
146
+ 'ccpa',
147
+ 'gdpr',
148
+ 'tmax'
149
+ );
150
+ expect(data.deviceWidth).to.be.a('number');
151
+ expect(data.deviceHeight).to.be.a('number');
152
+ expect(data.language).to.be.a('string');
153
+ expect(data.secure).to.be.within(0, 1);
154
+ expect(data.host).to.be.a('string');
155
+ expect(data.page).to.be.a('string');
156
+ expect(data.coppa).to.be.a('number');
157
+ expect(data.gdpr).to.be.a('object');
158
+ expect(data.ccpa).to.be.a('string');
159
+ expect(data.tmax).to.be.a('number');
160
+ expect(data.placements).to.have.lengthOf(3);
161
+ });
162
+
163
+ it('Returns valid placements', function () {
164
+ const { placements } = serverRequest.data;
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
+ }
192
+ });
193
+
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
208
+ }
209
+ ];
210
+
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.adFormat) {
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
+ }
241
+ });
242
+
243
+ it('Returns data with gdprConsent and without uspConsent', function () {
244
+ delete bidderRequest.uspConsent;
245
+ serverRequest = spec.buildRequests(bids, bidderRequest);
246
+ let data = serverRequest.data;
247
+ expect(data.gdpr).to.exist;
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);
252
+ expect(data.ccpa).to.not.exist;
253
+ delete bidderRequest.gdprConsent;
254
+ });
255
+
256
+ it('Returns data with uspConsent and without gdprConsent', function () {
257
+ bidderRequest.uspConsent = '1---';
258
+ delete bidderRequest.gdprConsent;
259
+ serverRequest = spec.buildRequests(bids, bidderRequest);
260
+ let data = serverRequest.data;
261
+ expect(data.ccpa).to.exist;
262
+ expect(data.ccpa).to.be.a('string');
263
+ expect(data.ccpa).to.equal(bidderRequest.uspConsent);
264
+ expect(data.gdpr).to.not.exist;
265
+ });
266
+ });
267
+
268
+ describe('gpp consent', function () {
269
+ it('bidderRequest.gppConsent', () => {
270
+ bidderRequest.gppConsent = {
271
+ gppString: 'abc123',
272
+ applicableSections: [8]
273
+ };
274
+
275
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
276
+ let data = serverRequest.data;
277
+ expect(data).to.be.an('object');
278
+ expect(data).to.have.property('gpp');
279
+ expect(data).to.have.property('gpp_sid');
280
+
281
+ delete bidderRequest.gppConsent;
282
+ })
283
+
284
+ it('bidderRequest.ortb2.regs.gpp', () => {
285
+ bidderRequest.ortb2 = bidderRequest.ortb2 || {};
286
+ bidderRequest.ortb2.regs = bidderRequest.ortb2.regs || {};
287
+ bidderRequest.ortb2.regs.gpp = 'abc123';
288
+ bidderRequest.ortb2.regs.gpp_sid = [8];
289
+
290
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
291
+ let data = serverRequest.data;
292
+ expect(data).to.be.an('object');
293
+ expect(data).to.have.property('gpp');
294
+ expect(data).to.have.property('gpp_sid');
295
+
296
+ bidderRequest.ortb2;
297
+ })
298
+ });
299
+
300
+ describe('interpretResponse', function () {
301
+ it('Should interpret banner response', function () {
302
+ const banner = {
303
+ body: [{
304
+ mediaType: 'banner',
305
+ width: 300,
306
+ height: 250,
307
+ cpm: 0.4,
308
+ ad: 'Test',
309
+ requestId: '23fhj33i987f',
310
+ ttl: 120,
311
+ creativeId: '2',
312
+ netRevenue: true,
313
+ currency: 'USD',
314
+ dealId: '1',
315
+ meta: {
316
+ advertiserDomains: ['google.com'],
317
+ advertiserId: 1234
318
+ }
319
+ }]
320
+ };
321
+ let bannerResponses = spec.interpretResponse(banner);
322
+ expect(bannerResponses).to.be.an('array').that.is.not.empty;
323
+ let dataItem = bannerResponses[0];
324
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
325
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
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);
333
+ expect(dataItem.netRevenue).to.be.true;
334
+ expect(dataItem.currency).to.equal(banner.body[0].currency);
335
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
336
+ });
337
+ it('Should interpret video response', function () {
338
+ const video = {
339
+ body: [{
340
+ vastUrl: 'test.com',
341
+ mediaType: 'video',
342
+ cpm: 0.5,
343
+ requestId: '23fhj33i987f',
344
+ ttl: 120,
345
+ creativeId: '2',
346
+ netRevenue: true,
347
+ currency: 'USD',
348
+ dealId: '1',
349
+ meta: {
350
+ advertiserDomains: ['google.com'],
351
+ advertiserId: 1234
352
+ }
353
+ }]
354
+ };
355
+ let videoResponses = spec.interpretResponse(video);
356
+ expect(videoResponses).to.be.an('array').that.is.not.empty;
357
+
358
+ let dataItem = videoResponses[0];
359
+ expect(dataItem).to.have.all.keys('requestId', 'cpm', 'vastUrl', 'ttl', 'creativeId',
360
+ 'netRevenue', 'currency', 'dealId', 'mediaType', 'meta');
361
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
362
+ expect(dataItem.cpm).to.equal(0.5);
363
+ expect(dataItem.vastUrl).to.equal('test.com');
364
+ expect(dataItem.ttl).to.equal(120);
365
+ expect(dataItem.creativeId).to.equal('2');
366
+ expect(dataItem.netRevenue).to.be.true;
367
+ expect(dataItem.currency).to.equal('USD');
368
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
369
+ });
370
+ it('Should interpret native response', function () {
371
+ const native = {
372
+ body: [{
373
+ mediaType: 'native',
374
+ native: {
375
+ clickUrl: 'test.com',
376
+ title: 'Test',
377
+ image: 'test.com',
378
+ impressionTrackers: ['test.com'],
379
+ },
380
+ ttl: 120,
381
+ cpm: 0.4,
382
+ requestId: '23fhj33i987f',
383
+ creativeId: '2',
384
+ netRevenue: true,
385
+ currency: 'USD',
386
+ meta: {
387
+ advertiserDomains: ['google.com'],
388
+ advertiserId: 1234
389
+ }
390
+ }]
391
+ };
392
+ let nativeResponses = spec.interpretResponse(native);
393
+ expect(nativeResponses).to.be.an('array').that.is.not.empty;
394
+
395
+ let dataItem = nativeResponses[0];
396
+ expect(dataItem).to.have.keys('requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency', 'mediaType', 'native', 'meta');
397
+ expect(dataItem.native).to.have.keys('clickUrl', 'impressionTrackers', 'title', 'image')
398
+ expect(dataItem.requestId).to.equal('23fhj33i987f');
399
+ expect(dataItem.cpm).to.equal(0.4);
400
+ expect(dataItem.native.clickUrl).to.equal('test.com');
401
+ expect(dataItem.native.title).to.equal('Test');
402
+ expect(dataItem.native.image).to.equal('test.com');
403
+ expect(dataItem.native.impressionTrackers).to.be.an('array').that.is.not.empty;
404
+ expect(dataItem.native.impressionTrackers[0]).to.equal('test.com');
405
+ expect(dataItem.ttl).to.equal(120);
406
+ expect(dataItem.creativeId).to.equal('2');
407
+ expect(dataItem.netRevenue).to.be.true;
408
+ expect(dataItem.currency).to.equal('USD');
409
+ expect(dataItem.meta).to.be.an('object').that.has.any.key('advertiserDomains');
410
+ });
411
+ it('Should return an empty array if invalid banner response is passed', function () {
412
+ const invBanner = {
413
+ body: [{
414
+ width: 300,
415
+ cpm: 0.4,
416
+ ad: 'Test',
417
+ requestId: '23fhj33i987f',
418
+ ttl: 120,
419
+ creativeId: '2',
420
+ netRevenue: true,
421
+ currency: 'USD',
422
+ dealId: '1'
423
+ }]
424
+ };
425
+
426
+ let serverResponses = spec.interpretResponse(invBanner);
427
+ expect(serverResponses).to.be.an('array').that.is.empty;
428
+ });
429
+ it('Should return an empty array if invalid video response is passed', function () {
430
+ const invVideo = {
431
+ body: [{
432
+ mediaType: 'video',
433
+ cpm: 0.5,
434
+ requestId: '23fhj33i987f',
435
+ ttl: 120,
436
+ creativeId: '2',
437
+ netRevenue: true,
438
+ currency: 'USD',
439
+ dealId: '1'
440
+ }]
441
+ };
442
+ let serverResponses = spec.interpretResponse(invVideo);
443
+ expect(serverResponses).to.be.an('array').that.is.empty;
444
+ });
445
+ it('Should return an empty array if invalid native response is passed', function () {
446
+ const invNative = {
447
+ body: [{
448
+ mediaType: 'native',
449
+ clickUrl: 'test.com',
450
+ title: 'Test',
451
+ impressionTrackers: ['test.com'],
452
+ ttl: 120,
453
+ requestId: '23fhj33i987f',
454
+ creativeId: '2',
455
+ netRevenue: true,
456
+ currency: 'USD',
457
+ }]
458
+ };
459
+ let serverResponses = spec.interpretResponse(invNative);
460
+ expect(serverResponses).to.be.an('array').that.is.empty;
461
+ });
462
+ it('Should return an empty array if invalid response is passed', function () {
463
+ const invalid = {
464
+ body: [{
465
+ ttl: 120,
466
+ creativeId: '2',
467
+ netRevenue: true,
468
+ currency: 'USD',
469
+ dealId: '1'
470
+ }]
471
+ };
472
+ let serverResponses = spec.interpretResponse(invalid);
473
+ expect(serverResponses).to.be.an('array').that.is.empty;
474
+ });
475
+ });
476
+
477
+ describe('getUserSyncs', function() {
478
+ it('Should return array of objects with proper sync config , include GDPR', function() {
479
+ const syncData = spec.getUserSyncs({}, {}, {
480
+ consentString: 'ALL',
481
+ gdprApplies: true,
482
+ }, {});
483
+ expect(syncData).to.be.an('array').which.is.not.empty;
484
+ expect(syncData[0]).to.be.an('object')
485
+ expect(syncData[0].type).to.be.a('string')
486
+ expect(syncData[0].type).to.equal('image')
487
+ expect(syncData[0].url).to.be.a('string')
488
+ expect(syncData[0].url).to.equal('https://сsync.copper6.com/image?pbjs=1&gdpr=1&gdpr_consent=ALL&coppa=0')
489
+ });
490
+ it('Should return array of objects with proper sync config , include CCPA', function() {
491
+ const syncData = spec.getUserSyncs({}, {}, {}, {
492
+ consentString: '1---'
493
+ });
494
+ expect(syncData).to.be.an('array').which.is.not.empty;
495
+ expect(syncData[0]).to.be.an('object')
496
+ expect(syncData[0].type).to.be.a('string')
497
+ expect(syncData[0].type).to.equal('image')
498
+ expect(syncData[0].url).to.be.a('string')
499
+ expect(syncData[0].url).to.equal('https://сsync.copper6.com/image?pbjs=1&ccpa_consent=1---&coppa=0')
500
+ });
501
+ it('Should return array of objects with proper sync config , include GPP', function() {
502
+ const syncData = spec.getUserSyncs({}, {}, {}, {}, {
503
+ gppString: 'abc123',
504
+ applicableSections: [8]
505
+ });
506
+ expect(syncData).to.be.an('array').which.is.not.empty;
507
+ expect(syncData[0]).to.be.an('object')
508
+ expect(syncData[0].type).to.be.a('string')
509
+ expect(syncData[0].type).to.equal('image')
510
+ expect(syncData[0].url).to.be.a('string')
511
+ expect(syncData[0].url).to.equal('https://сsync.copper6.com/image?pbjs=1&gpp=abc123&gpp_sid=8&coppa=0')
512
+ });
513
+ });
514
+ });
@@ -149,7 +149,7 @@ describe('Cpmstar Bid Adapter', function () {
149
149
  };
150
150
  var requests = spec.buildRequests(reqs, bidderRequest);
151
151
  expect(requests[0]).to.have.property('url');
152
- expect(requests[0].url).to.include('&schain=1.0,1!exchange1.com,1234,1,,,!exchange2.com,abcd,1,,,');
152
+ expect(requests[0].url).to.include('&schain=1.0%2C1%21exchange1.com%2C1234%2C1%2C%2C%2C%21exchange2.com%2Cabcd%2C1%2C%2C%2C');
153
153
  });
154
154
 
155
155
  describe('interpretResponse', function () {
@@ -647,7 +647,7 @@ describe('dailymotionBidAdapterTests', () => {
647
647
 
648
648
  // No permissions
649
649
  {
650
- const responses = [{ user_syncs: [{ url: 'https://usersyncurl.com', type: 'image' }] }];
650
+ const responses = [{ body: { userSyncs: [{ url: 'https://usersyncurl.com', type: 'image' }] } }];
651
651
  const syncOptions = { iframeEnabled: false, pixelEnabled: false };
652
652
 
653
653
  expect(config.runWithBidder(
@@ -656,7 +656,7 @@ describe('dailymotionBidAdapterTests', () => {
656
656
  )).to.eql([]);
657
657
  }
658
658
 
659
- // Has permissions but no user_syncs urls
659
+ // Has permissions but no userSyncs urls
660
660
  {
661
661
  const responses = [{}];
662
662
  const syncOptions = { iframeEnabled: false, pixelEnabled: true };
@@ -667,14 +667,16 @@ describe('dailymotionBidAdapterTests', () => {
667
667
  )).to.eql([]);
668
668
  }
669
669
 
670
- // Return user_syncs urls for pixels
670
+ // Return userSyncs urls for pixels
671
671
  {
672
672
  const responses = [{
673
- user_syncs: [
674
- { url: 'https://usersyncurl.com', type: 'image' },
675
- { url: 'https://usersyncurl2.com', type: 'image' },
676
- { url: 'https://usersyncurl3.com', type: 'iframe' }
677
- ],
673
+ body: {
674
+ userSyncs: [
675
+ { url: 'https://usersyncurl.com', type: 'image' },
676
+ { url: 'https://usersyncurl2.com', type: 'image' },
677
+ { url: 'https://usersyncurl3.com', type: 'iframe' }
678
+ ],
679
+ }
678
680
  }];
679
681
 
680
682
  const syncOptions = { iframeEnabled: false, pixelEnabled: true };
@@ -688,14 +690,16 @@ describe('dailymotionBidAdapterTests', () => {
688
690
  ]);
689
691
  }
690
692
 
691
- // Return user_syncs urls for iframes
693
+ // Return userSyncs urls for iframes
692
694
  {
693
695
  const responses = [{
694
- user_syncs: [
695
- { url: 'https://usersyncurl.com', type: 'image' },
696
- { url: 'https://usersyncurl2.com', type: 'image' },
697
- { url: 'https://usersyncurl3.com', type: 'iframe' }
698
- ],
696
+ body: {
697
+ userSyncs: [
698
+ { url: 'https://usersyncurl.com', type: 'image' },
699
+ { url: 'https://usersyncurl2.com', type: 'image' },
700
+ { url: 'https://usersyncurl3.com', type: 'iframe' }
701
+ ],
702
+ }
699
703
  }];
700
704
 
701
705
  const syncOptions = { iframeEnabled: true, pixelEnabled: true };
@@ -2,6 +2,14 @@ import {expect} from 'chai';
2
2
  import {
3
3
  spec as adapter,
4
4
  createDomain,
5
+ storage
6
+ } from 'modules/illuminBidAdapter.js';
7
+ import * as utils from 'src/utils.js';
8
+ import {version} from 'package.json';
9
+ import {useFakeTimers} from 'sinon';
10
+ import {BANNER, VIDEO} from '../../../src/mediaTypes';
11
+ import {config} from '../../../src/config';
12
+ import {
5
13
  hashCode,
6
14
  extractPID,
7
15
  extractCID,
@@ -10,12 +18,7 @@ import {
10
18
  setStorageItem,
11
19
  tryParseJSON,
12
20
  getUniqueDealId,
13
- } from 'modules/illuminBidAdapter.js';
14
- import * as utils from 'src/utils.js';
15
- import {version} from 'package.json';
16
- import {useFakeTimers} from 'sinon';
17
- import {BANNER, VIDEO} from '../../../src/mediaTypes';
18
- import {config} from '../../../src/config';
21
+ } from '../../../libraries/vidazooUtils/bidderUtils.js';
19
22
 
20
23
  export const TEST_ID_SYSTEMS = ['criteoId', 'id5id', 'idl_env', 'lipb', 'netId', 'pubcid', 'tdid', 'pubProvidedId'];
21
24
 
@@ -325,7 +328,12 @@ describe('IlluminBidAdapter', function () {
325
328
  startdelay: 0
326
329
  }
327
330
  },
328
- gpid: '0123456789'
331
+ gpid: '0123456789',
332
+ cat: [],
333
+ contentData: [],
334
+ isStorageAllowed: true,
335
+ pagecat: [],
336
+ userData: []
329
337
  }
330
338
  });
331
339
  });
@@ -387,6 +395,11 @@ describe('IlluminBidAdapter', function () {
387
395
  uqs: getTopWindowQueryParams(),
388
396
  'ext.param1': 'loremipsum',
389
397
  'ext.param2': 'dolorsitamet',
398
+ cat: [],
399
+ contentData: [],
400
+ isStorageAllowed: true,
401
+ pagecat: [],
402
+ userData: []
390
403
  }
391
404
  });
392
405
  });
@@ -562,13 +575,13 @@ describe('IlluminBidAdapter', function () {
562
575
  const key = 'myKey';
563
576
  let uniqueDealId;
564
577
  beforeEach(() => {
565
- uniqueDealId = getUniqueDealId(key, 0);
578
+ uniqueDealId = getUniqueDealId(storage, key, 0);
566
579
  })
567
580
 
568
581
  it('should get current unique deal id', function (done) {
569
582
  // waiting some time so `now` will become past
570
583
  setTimeout(() => {
571
- const current = getUniqueDealId(key);
584
+ const current = getUniqueDealId(storage, key);
572
585
  expect(current).to.be.equal(uniqueDealId);
573
586
  done();
574
587
  }, 200);
@@ -576,7 +589,7 @@ describe('IlluminBidAdapter', function () {
576
589
 
577
590
  it('should get new unique deal id on expiration', function (done) {
578
591
  setTimeout(() => {
579
- const current = getUniqueDealId(key, 100);
592
+ const current = getUniqueDealId(storage, key, 100);
580
593
  expect(current).to.not.be.equal(uniqueDealId);
581
594
  done();
582
595
  }, 200)
@@ -600,8 +613,8 @@ describe('IlluminBidAdapter', function () {
600
613
  shouldAdvanceTime: true,
601
614
  now
602
615
  });
603
- setStorageItem('myKey', 2020);
604
- const {value, created} = getStorageItem('myKey');
616
+ setStorageItem(storage, 'myKey', 2020);
617
+ const {value, created} = getStorageItem(storage, 'myKey');
605
618
  expect(created).to.be.equal(now);
606
619
  expect(value).to.be.equal(2020);
607
620
  expect(typeof value).to.be.equal('number');
@@ -612,7 +625,7 @@ describe('IlluminBidAdapter', function () {
612
625
  it('should get external stored value', function () {
613
626
  const value = 'superman'
614
627
  window.localStorage.setItem('myExternalKey', value);
615
- const item = getStorageItem('myExternalKey');
628
+ const item = getStorageItem(storage, 'myExternalKey');
616
629
  expect(item).to.be.equal(value);
617
630
  });
618
631