prebid.js 7.46.0 → 7.48.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 (195) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/ablidaBidAdapter.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/admaticBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adrinoBidAdapter.js +1 -1
  10. package/dist/adtrgtmeBidAdapter.js +1 -1
  11. package/dist/adxcgBidAdapter.js +1 -1
  12. package/dist/adyoulikeBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/asoBidAdapter.js +1 -1
  19. package/dist/axonixBidAdapter.js +1 -1
  20. package/dist/bidglassBidAdapter.js +1 -1
  21. package/dist/big-richmediaBidAdapter.js +1 -1
  22. package/dist/bridgewellBidAdapter.js +1 -1
  23. package/dist/brightMountainMediaBidAdapter.js +1 -1
  24. package/dist/carodaBidAdapter.js +1 -1
  25. package/dist/chtnwBidAdapter.js +1 -1
  26. package/dist/concertBidAdapter.js +1 -1
  27. package/dist/connectIdSystem.js +1 -1
  28. package/dist/connectadBidAdapter.js +1 -1
  29. package/dist/consumableBidAdapter.js +1 -1
  30. package/dist/conversantAnalyticsAdapter.js +1 -1
  31. package/dist/conversantBidAdapter.js +1 -1
  32. package/dist/craftBidAdapter.js +1 -1
  33. package/dist/criteoBidAdapter.js +1 -1
  34. package/dist/criteoIdSystem.js +1 -1
  35. package/dist/cwireBidAdapter.js +1 -1
  36. package/dist/dependencies.json +4 -0
  37. package/dist/dspxBidAdapter.js +1 -1
  38. package/dist/emtvBidAdapter.js +1 -0
  39. package/dist/eplanningBidAdapter.js +1 -1
  40. package/dist/feedadBidAdapter.js +1 -1
  41. package/dist/finativeBidAdapter.js +1 -1
  42. package/dist/freewheel-sspBidAdapter.js +1 -1
  43. package/dist/glimpseBidAdapter.js +1 -1
  44. package/dist/gmosspBidAdapter.js +1 -1
  45. package/dist/goldbachBidAdapter.js +1 -1
  46. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  47. package/dist/greenbidsRtdProvider.js +1 -0
  48. package/dist/gridBidAdapter.js +1 -1
  49. package/dist/gumgumBidAdapter.js +1 -1
  50. package/dist/h12mediaBidAdapter.js +1 -1
  51. package/dist/id5IdSystem.js +1 -1
  52. package/dist/impactifyBidAdapter.js +1 -1
  53. package/dist/improvedigitalBidAdapter.js +1 -1
  54. package/dist/inmarBidAdapter.js +1 -1
  55. package/dist/insticatorBidAdapter.js +1 -1
  56. package/dist/iqmBidAdapter.js +1 -1
  57. package/dist/ixBidAdapter.js +1 -1
  58. package/dist/justpremiumBidAdapter.js +1 -1
  59. package/dist/kargoBidAdapter.js +1 -1
  60. package/dist/konduitAnalyticsAdapter.js +1 -1
  61. package/dist/kueezBidAdapter.js +1 -1
  62. package/dist/kueezRtbBidAdapter.js +1 -1
  63. package/dist/kulturemediaBidAdapter.js +1 -1
  64. package/dist/lassoBidAdapter.js +1 -1
  65. package/dist/lifestreetBidAdapter.js +1 -1
  66. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  67. package/dist/logicadBidAdapter.js +1 -1
  68. package/dist/loglyliftBidAdapter.js +1 -1
  69. package/dist/magniteAnalyticsAdapter.js +1 -1
  70. package/dist/malltvAnalyticsAdapter.js +1 -1
  71. package/dist/marsmediaBidAdapter.js +1 -1
  72. package/dist/mediafuseBidAdapter.js +1 -1
  73. package/dist/mediasquareBidAdapter.js +1 -1
  74. package/dist/mgidBidAdapter.js +1 -1
  75. package/dist/minutemediaBidAdapter.js +1 -1
  76. package/dist/minutemediaplusBidAdapter.js +1 -1
  77. package/dist/missenaBidAdapter.js +1 -1
  78. package/dist/nextMillenniumBidAdapter.js +1 -1
  79. package/dist/nexx360BidAdapter.js +1 -1
  80. package/dist/not-for-prod/prebid.js +142 -139
  81. package/dist/oguryBidAdapter.js +1 -1
  82. package/dist/onetagBidAdapter.js +1 -1
  83. package/dist/ooloAnalyticsAdapter.js +1 -1
  84. package/dist/optidigitalBidAdapter.js +1 -1
  85. package/dist/orbitsoftBidAdapter.js +1 -1
  86. package/dist/outbrainBidAdapter.js +1 -1
  87. package/dist/parrableIdSystem.js +1 -1
  88. package/dist/pixfutureBidAdapter.js +1 -1
  89. package/dist/prebid-core.js +1 -1
  90. package/dist/publinkIdSystem.js +1 -1
  91. package/dist/pubmaticBidAdapter.js +1 -1
  92. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  93. package/dist/pxyzBidAdapter.js +1 -1
  94. package/dist/quantcastBidAdapter.js +1 -1
  95. package/dist/radsBidAdapter.js +1 -1
  96. package/dist/readpeakBidAdapter.js +1 -1
  97. package/dist/relaidoBidAdapter.js +1 -1
  98. package/dist/relevantdigitalBidAdapter.js +1 -0
  99. package/dist/rhythmoneBidAdapter.js +1 -1
  100. package/dist/riseBidAdapter.js +1 -1
  101. package/dist/rtbhouseBidAdapter.js +1 -1
  102. package/dist/rubiconAnalyticsAdapter.js +1 -1
  103. package/dist/rubiconBidAdapter.js +1 -1
  104. package/dist/seedingAllianceBidAdapter.js +1 -1
  105. package/dist/seedtagBidAdapter.js +1 -1
  106. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  107. package/dist/sharethroughBidAdapter.js +1 -1
  108. package/dist/shinezBidAdapter.js +1 -1
  109. package/dist/smaatoBidAdapter.js +1 -1
  110. package/dist/smartadserverBidAdapter.js +1 -1
  111. package/dist/smartxBidAdapter.js +1 -1
  112. package/dist/smilewantedBidAdapter.js +1 -1
  113. package/dist/sonobiBidAdapter.js +1 -1
  114. package/dist/sovrnAnalyticsAdapter.js +1 -1
  115. package/dist/sovrnBidAdapter.js +1 -1
  116. package/dist/sspBCBidAdapter.js +1 -1
  117. package/dist/stvBidAdapter.js +1 -1
  118. package/dist/sublimeBidAdapter.js +1 -1
  119. package/dist/synacormediaBidAdapter.js +1 -1
  120. package/dist/targetVideoBidAdapter.js +1 -1
  121. package/dist/teadsBidAdapter.js +1 -1
  122. package/dist/trionBidAdapter.js +1 -1
  123. package/dist/tripleliftBidAdapter.js +1 -1
  124. package/dist/ttdBidAdapter.js +1 -1
  125. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  126. package/dist/uid2IdSystem.js +1 -1
  127. package/dist/underdogmediaBidAdapter.js +1 -1
  128. package/dist/undertoneBidAdapter.js +1 -1
  129. package/dist/userId.js +1 -1
  130. package/dist/vdoaiBidAdapter.js +1 -1
  131. package/dist/vidazooBidAdapter.js +1 -1
  132. package/dist/videobyteBidAdapter.js +1 -1
  133. package/dist/vidoomyBidAdapter.js +1 -1
  134. package/dist/visxBidAdapter.js +1 -1
  135. package/dist/vuukleBidAdapter.js +1 -1
  136. package/dist/widespaceBidAdapter.js +1 -1
  137. package/dist/winrBidAdapter.js +1 -1
  138. package/dist/wipesBidAdapter.js +1 -1
  139. package/dist/yahoosspBidAdapter.js +1 -1
  140. package/dist/yieldmoBidAdapter.js +1 -1
  141. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  142. package/dist/yieldoneBidAdapter.js +1 -1
  143. package/modules/ablidaBidAdapter.js +4 -5
  144. package/modules/admaticBidAdapter.js +32 -5
  145. package/modules/adrinoBidAdapter.js +11 -4
  146. package/modules/axonixBidAdapter.js +6 -6
  147. package/modules/connectIdSystem.js +5 -2
  148. package/modules/criteoBidAdapter.js +3 -5
  149. package/modules/criteoIdSystem.js +27 -14
  150. package/modules/dspxBidAdapter.js +2 -3
  151. package/modules/emtvBidAdapter.js +211 -0
  152. package/modules/emtvBidAdapter.md +79 -0
  153. package/modules/freewheel-sspBidAdapter.js +32 -7
  154. package/modules/greenbidsRtdProvider.js +110 -0
  155. package/modules/greenbidsRtdProvider.md +65 -0
  156. package/modules/impactifyBidAdapter.js +0 -1
  157. package/modules/iqmBidAdapter.js +1 -2
  158. package/modules/missenaBidAdapter.js +1 -1
  159. package/modules/nextMillenniumBidAdapter.js +2 -0
  160. package/modules/orbitsoftBidAdapter.js +1 -2
  161. package/modules/radsBidAdapter.js +3 -4
  162. package/modules/relevantdigitalBidAdapter.js +198 -0
  163. package/modules/relevantdigitalBidAdapter.md +117 -0
  164. package/modules/rtbhouseBidAdapter.js +9 -12
  165. package/modules/sovrnBidAdapter.js +4 -0
  166. package/modules/stvBidAdapter.js +4 -5
  167. package/modules/tripleliftBidAdapter.js +14 -3
  168. package/modules/ttdBidAdapter.js +73 -71
  169. package/modules/underdogmediaBidAdapter.js +9 -12
  170. package/modules/userId/index.js +1 -1
  171. package/modules/vdoaiBidAdapter.js +2 -3
  172. package/modules/vidoomyBidAdapter.js +19 -6
  173. package/modules/vidoomyBidAdapter.md +12 -2
  174. package/modules/wipesBidAdapter.js +2 -3
  175. package/modules/yieldmoBidAdapter.js +2 -2
  176. package/modules/yieldoneBidAdapter.js +3 -4
  177. package/package.json +1 -1
  178. package/test/spec/modules/adlooxAdServerVideo_spec.js +18 -35
  179. package/test/spec/modules/admaticBidAdapter_spec.js +164 -11
  180. package/test/spec/modules/adrinoBidAdapter_spec.js +50 -2
  181. package/test/spec/modules/connectIdSystem_spec.js +4 -4
  182. package/test/spec/modules/criteoBidAdapter_spec.js +56 -0
  183. package/test/spec/modules/criteoIdSystem_spec.js +99 -9
  184. package/test/spec/modules/emtvBidAdapter_spec.js +400 -0
  185. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +31 -2
  186. package/test/spec/modules/greenbidsRtdProvider_spec.js +210 -0
  187. package/test/spec/modules/relevantdigitalBidAdapter_spec.js +295 -0
  188. package/test/spec/modules/rtbhouseBidAdapter_spec.js +24 -2
  189. package/test/spec/modules/sovrnBidAdapter_spec.js +65 -0
  190. package/test/spec/modules/tripleliftBidAdapter_spec.js +53 -8
  191. package/test/spec/modules/ttdBidAdapter_spec.js +20 -0
  192. package/test/spec/modules/vidoomyBidAdapter_spec.js +49 -0
  193. package/test/spec/modules/yieldmoBidAdapter_spec.js +2 -2
  194. package/test/spec/ortbConverter/userId_spec.js +12 -0
  195. package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -189
@@ -1,5 +1,4 @@
1
- import { getAdUnitSizes } from '../src/utils.js';
2
- import {config} from '../src/config.js';
1
+ import {getAdUnitSizes} from '../src/utils.js';
3
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
3
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
4
 
@@ -87,7 +86,7 @@ export const spec = {
87
86
  // dealId: dealId,
88
87
  currency: currency,
89
88
  netRevenue: netRevenue,
90
- ttl: config.getConfig('_bidderTimeout'),
89
+ ttl: 60,
91
90
  // referrer: referrer,
92
91
  // ad: response.adm
93
92
  // ad: adCreative,
@@ -1,9 +1,9 @@
1
- import { logError, deepAccess, parseSizesInput } from '../src/utils.js';
1
+ import {deepAccess, logError, parseSizesInput} from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
4
4
  import {config} from '../src/config.js';
5
- import { Renderer } from '../src/Renderer.js';
6
- import { INSTREAM, OUTSTREAM } from '../src/video.js';
5
+ import {Renderer} from '../src/Renderer.js';
6
+ import {INSTREAM, OUTSTREAM} from '../src/video.js';
7
7
 
8
8
  const ENDPOINT = `https://d.vidoomy.com/api/rtbserver/prebid/`;
9
9
  const BIDDER_CODE = 'vidoomy';
@@ -129,6 +129,14 @@ const buildRequests = (validBidRequests, bidderRequest) => {
129
129
  const bidfloor = deepAccess(bid, `params.bidfloor`, 0);
130
130
  const floor = getBidFloor(bid, adType, sizes, bidfloor);
131
131
 
132
+ const ortb2 = bidderRequest.ortb2 || {
133
+ bcat: [],
134
+ badv: [],
135
+ bapp: [],
136
+ btype: [],
137
+ battr: []
138
+ };
139
+
132
140
  let eids;
133
141
  const userEids = deepAccess(bid, 'userIdAsEids');
134
142
  if (Array.isArray(userEids) && userEids.length > 0) {
@@ -155,7 +163,12 @@ const buildRequests = (validBidRequests, bidderRequest) => {
155
163
  sp: encodeURIComponent(bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation),
156
164
  usp: bidderRequest.uspConsent || '',
157
165
  coppa: !!config.getConfig('coppa'),
158
- videoContext: videoContext || ''
166
+ videoContext: videoContext || '',
167
+ bcat: ortb2.bcat || bid.params.bcat || [],
168
+ badv: ortb2.badv || bid.params.badv || [],
169
+ bapp: ortb2.bapp || bid.params.bapp || [],
170
+ btype: ortb2.btype || bid.params.btype || [],
171
+ battr: ortb2.battr || bid.params.battr || []
159
172
  };
160
173
 
161
174
  if (bidderRequest.gdprConsent) {
@@ -261,7 +274,7 @@ const interpretResponse = (serverResponse, bidRequest) => {
261
274
  }
262
275
  };
263
276
 
264
- function getUserSyncs (syncOptions, responses, gdprConsent, uspConsent) {
277
+ function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) {
265
278
  if (syncOptions.iframeEnabled || syncOptions.pixelEnabled) {
266
279
  const pixelType = syncOptions.pixelEnabled ? 'image' : 'iframe';
267
280
  const urls = deepAccess(responses, '0.body.pixels') || COOKIE_SYNC_FALLBACK_URLS;
@@ -288,7 +301,7 @@ export const spec = {
288
301
 
289
302
  registerBidder(spec);
290
303
 
291
- function getDomainWithoutSubdomain (hostname) {
304
+ function getDomainWithoutSubdomain(hostname) {
292
305
  const parts = hostname.split('.');
293
306
  const newParts = [];
294
307
  for (let i = parts.length - 1; i >= 0; i--) {
@@ -27,7 +27,12 @@ var adUnits = [
27
27
  params: {
28
28
  id: '123123',
29
29
  pid: '123123',
30
- bidfloor: 0.5 // This is optional
30
+ bidfloor: 0.5, // This is optional
31
+ bcat: ['IAB1-1'], // Optional - default is []
32
+ badv: ['example.com'], // Optional - default is []
33
+ bapp: ['app.com'], // Optional - default is []
34
+ btype: [1, 2, 3], // Optional - default is []
35
+ battr: [1, 2, 3] // Optional - default is []
31
36
  }
32
37
  }
33
38
  ]
@@ -52,7 +57,12 @@ var adUnits = [
52
57
  params: {
53
58
  id: '123123',
54
59
  pid: '123123',
55
- bidfloor: 0.5 // This is optional
60
+ bidfloor: 0.5, // This is optional
61
+ bcat: ['IAB1-1'], // Optional - default is []
62
+ badv: ['example.com'], // Optional - default is []
63
+ bapp: ['app.com'], // Optional - default is []
64
+ btype: [1, 2, 3], // Optional - default is []
65
+ battr: [1, 2, 3] // Optional - default is []
56
66
  }
57
67
  }
58
68
  ]
@@ -1,5 +1,4 @@
1
- import { logWarn } from '../src/utils.js';
2
- import {config} from '../src/config.js';
1
+ import {logWarn} from '../src/utils.js';
3
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
3
  import {BANNER} from '../src/mediaTypes.js';
5
4
 
@@ -50,7 +49,7 @@ function interpretResponse(serverResponse, bidRequest) {
50
49
  dealId: response.deal_id,
51
50
  currency: 'JPY',
52
51
  netRevenue: netRevenue,
53
- ttl: config.getConfig('_bidderTimeout'),
52
+ ttl: 60,
54
53
  referrer: bidRequest.data.r || '',
55
54
  mediaType: BANNER,
56
55
  ad: response.ad_tag,
@@ -83,7 +83,7 @@ export const spec = {
83
83
  gdprApplies: deepAccess(bidderRequest, 'gdprConsent.gdprApplies') || '',
84
84
  cmp: deepAccess(bidderRequest, 'gdprConsent.consentString') || '',
85
85
  gpp: deepAccess(bidderRequest, 'gppConsent.gppString') || '',
86
- gpp_sid: deepAccess(bidderRequest, 'gppConsent.applicableSections') || ''
86
+ gpp_sid: deepAccess(bidderRequest, 'gppConsent.applicableSections') || []
87
87
  }),
88
88
  us_privacy: deepAccess(bidderRequest, 'uspConsent') || ''
89
89
  };
@@ -525,7 +525,7 @@ function populateOpenRtbGdpr(openRtbRequest, bidderRequest) {
525
525
  deepSetValue(openRtbRequest, 'regs.ext.gdpr', gdpr && gdpr.gdprApplies ? 1 : 0);
526
526
  deepSetValue(openRtbRequest, 'user.ext.consent', gdpr && gdpr.consentString ? gdpr.consentString : '');
527
527
  }
528
- if (gppsid) {
528
+ if (gppsid && gppsid.length > 0) {
529
529
  deepSetValue(openRtbRequest, 'regs.ext.gpp_sid', gppsid);
530
530
  }
531
531
  const uspConsent = deepAccess(bidderRequest, 'uspConsent');
@@ -1,8 +1,7 @@
1
1
  import {deepAccess, isEmpty, isStr, logWarn, parseSizesInput} from '../src/utils.js';
2
- import {config} from '../src/config.js';
3
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
- import { Renderer } from '../src/Renderer.js';
5
- import { BANNER, VIDEO } from '../src/mediaTypes.js';
3
+ import {Renderer} from '../src/Renderer.js';
4
+ import {BANNER, VIDEO} from '../src/mediaTypes.js';
6
5
 
7
6
  /**
8
7
  * @typedef {import('../src/adapters/bidderFactory').Bid} Bid
@@ -147,7 +146,7 @@ export const spec = {
147
146
  dealId: dealId,
148
147
  currency: currency,
149
148
  netRevenue: netRevenue,
150
- ttl: config.getConfig('_bidderTimeout'),
149
+ ttl: 60,
151
150
  referrer: referrer,
152
151
  meta: {
153
152
  advertiserDomains: response.adomain ? response.adomain : []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "7.46.0",
3
+ "version": "7.48.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.js",
6
6
  "scripts": {
@@ -118,6 +118,16 @@ describe('Adloox Ad Server Video', function () {
118
118
  });
119
119
 
120
120
  describe('buildVideoUrl', function () {
121
+ beforeEach(() => {
122
+ sinon.stub(URL, 'createObjectURL');
123
+ sinon.stub(URL, 'revokeObjectURL');
124
+ });
125
+
126
+ afterEach(() => {
127
+ URL.createObjectURL.restore()
128
+ URL.revokeObjectURL.restore()
129
+ });
130
+
121
131
  describe('invalid arguments', function () {
122
132
  it('should require callback', function (done) {
123
133
  const ret = buildVideoUrl();
@@ -235,7 +245,6 @@ describe('Adloox Ad Server Video', function () {
235
245
  it('should fetch, retry on withoutCredentials, follow and return a wrapped blob that expires', function (done) {
236
246
  BID.responseTimestamp = utils.timestamp();
237
247
  BID.ttl = 30;
238
- this.timeout(5000)
239
248
 
240
249
  const clock = sandbox.useFakeTimers(BID.responseTimestamp);
241
250
 
@@ -244,42 +253,16 @@ describe('Adloox Ad Server Video', function () {
244
253
  url: wrapperUrl,
245
254
  bid: BID
246
255
  };
256
+
257
+ URL.createObjectURL.callsFake(() => 'mock-blob-url');
258
+
247
259
  const ret = buildVideoUrl(options, function (url) {
248
260
  expect(url.substr(0, options.url_vast.length)).is.equal(options.url_vast);
249
-
250
- const match = url.match(/[?&]vast=(blob%3A[^&]+)/);
251
- expect(match).is.not.null;
252
-
253
- const blob = decodeURIComponent(match[1]);
254
-
255
- const xfr = sandbox.useFakeXMLHttpRequest();
256
- xfr.useFilters = true;
257
- xfr.addFilter(x => true); // there is no network traffic for Blob URLs here
258
-
259
- ajax(blob, {
260
- success: (responseText, q) => {
261
- expect(q.status).is.equal(200);
262
- expect(q.getResponseHeader('content-type')).is.equal(vastHeaders['content-type']);
263
-
264
- clock.runAll();
265
-
266
- ajax(blob, {
267
- success: (responseText, q) => {
268
- xfr.useFilters = false; // .restore() does not really work
269
- if (q.status == 0) return done();
270
- done(new Error('Blob should have expired'));
271
- },
272
- error: (statusText, q) => {
273
- xfr.useFilters = false;
274
- done();
275
- }
276
- });
277
- },
278
- error: (statusText, q) => {
279
- xfr.useFilters = false;
280
- done(new Error(statusText));
281
- }
282
- });
261
+ expect(url).to.match(/[?&]vast=mock-blob-url/);
262
+ sinon.assert.calledWith(URL.createObjectURL, sinon.match((val) => val.type === vastHeaders['content-type']));
263
+ clock.runAll();
264
+ sinon.assert.calledWith(URL.revokeObjectURL, 'mock-blob-url');
265
+ done();
283
266
  });
284
267
  expect(ret).is.true;
285
268
 
@@ -22,11 +22,13 @@ describe('admaticBidAdapter', () => {
22
22
  'host': 'layer.serve.admatic.com.tr'
23
23
  },
24
24
  'adUnitCode': 'adunit-code',
25
+ 'mediaType': 'banner',
25
26
  'sizes': [[300, 250], [300, 600]],
26
27
  'bidId': '30b31c1838de1e',
27
28
  'bidderRequestId': '22edbae2733bf6',
28
29
  'auctionId': '1d1a030790a475',
29
- 'creativeId': 'er2ee'
30
+ 'creativeId': 'er2ee',
31
+ 'ortb2': { 'badv': ['admatic.com.tr'] }
30
32
  };
31
33
 
32
34
  it('should return true when required params found', function() {
@@ -34,15 +36,11 @@ describe('admaticBidAdapter', () => {
34
36
  });
35
37
 
36
38
  it('should return false when required params are not passed', function() {
37
- let bid = Object.assign({}, bid);
38
- delete bid.params;
39
-
40
- bid.params = {
41
- 'networkId': 0,
42
- 'host': 'layer.serve.admatic.com.tr'
39
+ let bid2 = {};
40
+ bid2.params = {
41
+ 'someIncorrectParam': 0
43
42
  };
44
-
45
- expect(spec.isBidRequestValid(bid)).to.equal(false);
43
+ expect(spec.isBidRequestValid(bid2)).to.equal(false);
46
44
  });
47
45
  });
48
46
 
@@ -54,6 +52,7 @@ describe('admaticBidAdapter', () => {
54
52
  'networkId': 10433394,
55
53
  'host': 'layer.serve.admatic.com.tr'
56
54
  },
55
+ 'ortb2': { 'badv': ['admatic.com.tr'] },
57
56
  'mediaTypes': {
58
57
  'banner': {
59
58
  'sizes': [[300, 250], [728, 90]]
@@ -98,6 +97,8 @@ describe('admaticBidAdapter', () => {
98
97
  'h': 90
99
98
  }
100
99
  ],
100
+ 'mediatype': {},
101
+ 'type': 'banner',
101
102
  'id': '2205da7a81846b',
102
103
  'floors': {
103
104
  'banner': {
@@ -105,6 +106,49 @@ describe('admaticBidAdapter', () => {
105
106
  '728x90': { 'currency': 'USD', 'floor': 2 }
106
107
  }
107
108
  }
109
+ },
110
+ {
111
+ 'size': [
112
+ {
113
+ 'w': 338,
114
+ 'h': 280
115
+ }
116
+ ],
117
+ 'type': 'video',
118
+ 'mediatype': {
119
+ 'context': 'instream',
120
+ 'mimes': [
121
+ 'video/mp4'
122
+ ],
123
+ 'maxduration': 240,
124
+ 'api': [
125
+ 1,
126
+ 2
127
+ ],
128
+ 'playerSize': [
129
+ [
130
+ 338,
131
+ 280
132
+ ]
133
+ ],
134
+ 'protocols': [
135
+ 1,
136
+ 2,
137
+ 3,
138
+ 4,
139
+ 5,
140
+ 6,
141
+ 7,
142
+ 8
143
+ ],
144
+ 'skip': 1,
145
+ 'playbackmethod': [
146
+ 2
147
+ ],
148
+ 'linearity': 1,
149
+ 'placement': 2
150
+ },
151
+ 'id': '45e86fc7ce7fc93'
108
152
  }
109
153
  ],
110
154
  'ext': {
@@ -118,6 +162,7 @@ describe('admaticBidAdapter', () => {
118
162
  'networkId': 10433394,
119
163
  'host': 'layer.serve.admatic.com.tr'
120
164
  },
165
+ 'ortb2': { 'badv': ['admatic.com.tr'] },
121
166
  'mediaTypes': {
122
167
  'banner': {
123
168
  'sizes': [[300, 250], [728, 90]]
@@ -163,12 +208,57 @@ describe('admaticBidAdapter', () => {
163
208
  }
164
209
  ],
165
210
  'id': '2205da7a81846b',
211
+ 'mediatype': {},
212
+ 'type': 'banner',
166
213
  'floors': {
167
214
  'banner': {
168
215
  '300x250': { 'currency': 'USD', 'floor': 1 },
169
216
  '728x90': { 'currency': 'USD', 'floor': 2 }
170
217
  }
171
218
  }
219
+ },
220
+ {
221
+ 'size': [
222
+ {
223
+ 'w': 338,
224
+ 'h': 280
225
+ }
226
+ ],
227
+ 'type': 'video',
228
+ 'mediatype': {
229
+ 'context': 'instream',
230
+ 'mimes': [
231
+ 'video/mp4'
232
+ ],
233
+ 'maxduration': 240,
234
+ 'api': [
235
+ 1,
236
+ 2
237
+ ],
238
+ 'playerSize': [
239
+ [
240
+ 338,
241
+ 280
242
+ ]
243
+ ],
244
+ 'protocols': [
245
+ 1,
246
+ 2,
247
+ 3,
248
+ 4,
249
+ 5,
250
+ 6,
251
+ 7,
252
+ 8
253
+ ],
254
+ 'skip': 1,
255
+ 'playbackmethod': [
256
+ 2
257
+ ],
258
+ 'linearity': 1,
259
+ 'placement': 2
260
+ },
261
+ 'id': '45e86fc7ce7fc93'
172
262
  }
173
263
  ],
174
264
  'ext': {
@@ -194,6 +284,7 @@ describe('admaticBidAdapter', () => {
194
284
  'sizes': [[300, 250], [728, 90]]
195
285
  }
196
286
  },
287
+ 'ortb2': { 'badv': ['admatic.com.tr'] },
197
288
  getFloor: inputParams => {
198
289
  if (inputParams.mediaType === BANNER && inputParams.size[0] === 300 && inputParams.size[1] === 250) {
199
290
  return {
@@ -217,6 +308,7 @@ describe('admaticBidAdapter', () => {
217
308
  'networkId': 10433394,
218
309
  'host': 'layer.serve.admatic.com.tr'
219
310
  },
311
+ 'ortb2': { 'badv': ['admatic.com.tr'] },
220
312
  'adUnitCode': 'adunit-code',
221
313
  'sizes': [[300, 250], [728, 90]],
222
314
  'bidId': '30b31c1838de1e',
@@ -249,9 +341,35 @@ describe('admaticBidAdapter', () => {
249
341
  'width': 300,
250
342
  'height': 250,
251
343
  'price': 0.01,
344
+ 'type': 'banner',
252
345
  'bidder': 'admatic',
253
346
  'adomain': ['admatic.com.tr'],
254
- 'party_tag': '<div></div>'
347
+ 'party_tag': '<div></div>',
348
+ 'iurl': 'https://www.admatic.com.tr'
349
+ },
350
+ {
351
+ 'id': 2,
352
+ 'creative_id': '3741',
353
+ 'width': 300,
354
+ 'height': 250,
355
+ 'price': 0.01,
356
+ 'type': 'video',
357
+ 'bidder': 'admatic',
358
+ 'adomain': ['admatic.com.tr'],
359
+ 'party_tag': '<VAST></VAST>',
360
+ 'iurl': 'https://www.admatic.com.tr'
361
+ },
362
+ {
363
+ 'id': 3,
364
+ 'creative_id': '3741',
365
+ 'width': 300,
366
+ 'height': 250,
367
+ 'price': 0.01,
368
+ 'type': 'video',
369
+ 'bidder': 'admatic',
370
+ 'adomain': ['admatic.com.tr'],
371
+ 'party_tag': 'https://www.admatic.com.tr',
372
+ 'iurl': 'https://www.admatic.com.tr'
255
373
  }
256
374
  ],
257
375
  'queryId': 'cdnbh24rlv0hhkpfpln0',
@@ -265,13 +383,48 @@ describe('admaticBidAdapter', () => {
265
383
  width: 300,
266
384
  height: 250,
267
385
  currency: 'TRY',
386
+ mediaType: 'banner',
268
387
  netRevenue: true,
269
388
  ad: '<div></div>',
270
389
  creativeId: '374',
271
390
  meta: {
272
391
  advertiserDomains: ['admatic.com.tr']
273
392
  },
274
- ttl: 360,
393
+ ttl: 60,
394
+ bidder: 'admatic'
395
+ },
396
+ {
397
+ requestId: 2,
398
+ cpm: 0.01,
399
+ width: 300,
400
+ height: 250,
401
+ currency: 'TRY',
402
+ mediaType: 'video',
403
+ netRevenue: true,
404
+ vastImpUrl: 'https://www.admatic.com.tr',
405
+ vastXml: '<VAST></VAST>',
406
+ creativeId: '3741',
407
+ meta: {
408
+ advertiserDomains: ['admatic.com.tr']
409
+ },
410
+ ttl: 60,
411
+ bidder: 'admatic'
412
+ },
413
+ {
414
+ requestId: 3,
415
+ cpm: 0.01,
416
+ width: 300,
417
+ height: 250,
418
+ currency: 'TRY',
419
+ mediaType: 'video',
420
+ netRevenue: true,
421
+ vastImpUrl: 'https://www.admatic.com.tr',
422
+ vastXml: 'https://www.admatic.com.tr',
423
+ creativeId: '3741',
424
+ meta: {
425
+ advertiserDomains: ['admatic.com.tr']
426
+ },
427
+ ttl: 60,
275
428
  bidder: 'admatic'
276
429
  }
277
430
  ];
@@ -43,7 +43,7 @@ describe('adrinoBidAdapter', function () {
43
43
 
44
44
  it('should return false when unsupported media type is requested', function () {
45
45
  const bid = { ...validBid };
46
- bid.mediaTypes = { banner: { sizes: [[300, 250]] } };
46
+ bid.mediaTypes = { video: {} };
47
47
  expect(spec.isBidRequestValid(bid)).to.equal(false);
48
48
  });
49
49
 
@@ -54,7 +54,46 @@ describe('adrinoBidAdapter', function () {
54
54
  });
55
55
  });
56
56
 
57
- describe('buildRequests', function () {
57
+ describe('buildBannerRequest', function () {
58
+ const bidRequest = {
59
+ bidder: 'adrino',
60
+ params: {
61
+ hash: 'abcdef123456'
62
+ },
63
+ mediaTypes: {
64
+ banner: {
65
+ sizes: [[300, 250], [970, 250]]
66
+ }
67
+ },
68
+ sizes: [[300, 250], [970, 250]],
69
+ userId: { criteoId: '2xqi3F94aHdwWnM3', pubcid: '3ec0b202-7697' },
70
+ adUnitCode: 'adunit-code-2',
71
+ bidId: '12345678901234',
72
+ bidderRequestId: '98765432109876',
73
+ auctionId: '01234567891234',
74
+ };
75
+
76
+ it('should build the request correctly', function () {
77
+ const result = spec.buildRequests(
78
+ [ bidRequest ],
79
+ { refererInfo: { page: 'http://example.com/' } }
80
+ );
81
+ expect(result.length).to.equal(1);
82
+ expect(result[0].method).to.equal('POST');
83
+ expect(result[0].url).to.equal('https://prd-prebid-bidder.adrino.io/bidder/bids/');
84
+ expect(result[0].data[0].bidId).to.equal('12345678901234');
85
+ expect(result[0].data[0].placementHash).to.equal('abcdef123456');
86
+ expect(result[0].data[0].referer).to.equal('http://example.com/');
87
+ expect(result[0].data[0].userAgent).to.equal(navigator.userAgent);
88
+ expect(result[0].data[0]).to.have.property('bannerParams');
89
+ expect(result[0].data[0].bannerParams.sizes.length).to.equal(2);
90
+ expect(result[0].data[0]).to.have.property('userId');
91
+ expect(result[0].data[0].userId.criteoId).to.equal('2xqi3F94aHdwWnM3');
92
+ expect(result[0].data[0].userId.pubcid).to.equal('3ec0b202-7697');
93
+ });
94
+ });
95
+
96
+ describe('buildNativeRequest', function () {
58
97
  const bidRequest = {
59
98
  bidder: 'adrino',
60
99
  params: {
@@ -71,6 +110,15 @@ describe('adrinoBidAdapter', function () {
71
110
  }
72
111
  }
73
112
  },
113
+ nativeParams: {
114
+ title: {
115
+ required: true
116
+ },
117
+ image: {
118
+ required: true,
119
+ sizes: [[300, 150], [300, 210]]
120
+ }
121
+ },
74
122
  userId: { criteoId: '2xqi3F94aHdwWnM3', pubcid: '3ec0b202-7697' },
75
123
  adUnitCode: 'adunit-code',
76
124
  bidId: '12345678901234',
@@ -86,7 +86,7 @@ describe('Yahoo ConnectID Submodule', () => {
86
86
  {
87
87
  detail: 'cookie data over local storage data',
88
88
  cookie: '{"connectId":"foo"}',
89
- localStorage: {connectId: 'bar'},
89
+ localStorage: JSON.stringify({connectId: 'bar'}),
90
90
  expected: {connectId: 'foo'}
91
91
  },
92
92
  {
@@ -98,7 +98,7 @@ describe('Yahoo ConnectID Submodule', () => {
98
98
  {
99
99
  detail: 'local storage data if only it local storage data exists',
100
100
  cookie: undefined,
101
- localStorage: {connectId: 'bar'},
101
+ localStorage: JSON.stringify({connectId: 'bar'}),
102
102
  expected: {connectId: 'bar'}
103
103
  },
104
104
  {
@@ -441,10 +441,10 @@ describe('Yahoo ConnectID Submodule', () => {
441
441
  const dateNowStub = sinon.stub(Date, 'now');
442
442
  dateNowStub.returns(0);
443
443
  const upsResponse = {connectid: 'barfoo'};
444
- const expectedStoredData = {
444
+ const expectedStoredData = JSON.stringify({
445
445
  connectid: 'barfoo',
446
446
  __expires: 60 * 60 * 24 * 14 * 1000
447
- };
447
+ });
448
448
  invokeGetIdAPI({
449
449
  puid: PUBLISHER_USER_ID,
450
450
  pixelId: PIXEL_ID
@@ -728,6 +728,62 @@ describe('The Criteo bidding adapter', function () {
728
728
  expect(ortbRequest.slots[0].native).to.equal(true);
729
729
  });
730
730
 
731
+ it('should map ortb native assets to slot ext assets', function () {
732
+ const assets = [{
733
+ required: 1,
734
+ id: 1,
735
+ img: {
736
+ type: 3,
737
+ wmin: 100,
738
+ hmin: 100,
739
+ }
740
+ },
741
+ {
742
+ required: 1,
743
+ id: 2,
744
+ title: {
745
+ len: 140,
746
+ }
747
+ },
748
+ {
749
+ required: 1,
750
+ id: 3,
751
+ data: {
752
+ type: 1,
753
+ }
754
+ },
755
+ {
756
+ required: 0,
757
+ id: 4,
758
+ data: {
759
+ type: 2,
760
+ }
761
+ },
762
+ {
763
+ required: 0,
764
+ id: 5,
765
+ img: {
766
+ type: 1,
767
+ wmin: 20,
768
+ hmin: 20,
769
+ }
770
+ }];
771
+ const bidRequests = [
772
+ {
773
+ nativeOrtbRequest: {
774
+ assets: assets
775
+ },
776
+ params: {
777
+ nativeCallback: function () { }
778
+ },
779
+ },
780
+ ];
781
+ const request = spec.buildRequests(bidRequests, bidderRequest);
782
+ const ortbRequest = request.data;
783
+ expect(ortbRequest.slots[0].native).to.equal(true);
784
+ expect(ortbRequest.slots[0].ext.assets).to.deep.equal(assets);
785
+ });
786
+
731
787
  it('should properly build a networkId request', function () {
732
788
  const bidderRequest = {
733
789
  refererInfo: {