prebid.js 6.0.0 → 6.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 (201) hide show
  1. package/.babelrc.js +1 -7
  2. package/.circleci/config.yml +1 -1
  3. package/README.md +1 -1
  4. package/browsers.json +13 -29
  5. package/gulpfile.js +88 -82
  6. package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
  7. package/karma.conf.maker.js +2 -2
  8. package/modules/33acrossBidAdapter.js +189 -102
  9. package/modules/adagioBidAdapter.js +1 -1
  10. package/modules/addefendBidAdapter.js +1 -0
  11. package/modules/adheseBidAdapter.js +7 -2
  12. package/modules/adkernelBidAdapter.js +147 -61
  13. package/modules/adlivetechBidAdapter.md +61 -0
  14. package/modules/adlooxAdServerVideo.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +4 -4
  16. package/modules/admanBidAdapter.js +1 -0
  17. package/modules/admixerBidAdapter.js +3 -2
  18. package/modules/adnuntiusBidAdapter.js +5 -2
  19. package/modules/adomikAnalyticsAdapter.js +16 -4
  20. package/modules/adplusBidAdapter.js +203 -0
  21. package/modules/adplusBidAdapter.md +39 -0
  22. package/modules/adxcgBidAdapter.js +311 -359
  23. package/modules/adxcgBidAdapter.md +22 -21
  24. package/modules/adyoulikeBidAdapter.js +7 -2
  25. package/modules/aniviewBidAdapter.js +1 -1
  26. package/modules/appnexusBidAdapter.js +23 -3
  27. package/modules/beachfrontBidAdapter.js +14 -17
  28. package/modules/beopBidAdapter.js +6 -4
  29. package/modules/bidViewability.js +3 -3
  30. package/modules/bidViewabilityIO.js +3 -3
  31. package/modules/codefuelBidAdapter.js +1 -3
  32. package/modules/codefuelBidAdapter.md +3 -3
  33. package/modules/colossussspBidAdapter.js +7 -0
  34. package/modules/compassBidAdapter.js +201 -0
  35. package/modules/compassBidAdapter.md +79 -0
  36. package/modules/craftBidAdapter.js +5 -3
  37. package/modules/criteoBidAdapter.js +1 -1
  38. package/modules/currency.js +2 -2
  39. package/modules/cwireBidAdapter.js +3 -0
  40. package/modules/dailyhuntBidAdapter.js +435 -0
  41. package/modules/dailyhuntBidAdapter.md +4 -0
  42. package/modules/datablocksBidAdapter.js +3 -3
  43. package/modules/dchain.js +149 -0
  44. package/modules/dchain.md +45 -0
  45. package/modules/deepintentBidAdapter.js +1 -1
  46. package/modules/dspxBidAdapter.js +1 -1
  47. package/modules/emx_digitalBidAdapter.js +9 -1
  48. package/modules/engageyaBidAdapter.js +68 -54
  49. package/modules/feedadBidAdapter.js +2 -2
  50. package/modules/feedadBidAdapter.md +4 -2
  51. package/modules/freewheel-sspBidAdapter.js +6 -0
  52. package/modules/futureads.md +48 -0
  53. package/modules/glimpseBidAdapter.js +44 -16
  54. package/modules/goldbachBidAdapter.js +1176 -0
  55. package/modules/goldbachBidAdapter.md +151 -0
  56. package/modules/gptPreAuction.js +11 -5
  57. package/modules/gridBidAdapter.js +5 -4
  58. package/modules/gumgumBidAdapter.js +7 -3
  59. package/modules/id5IdSystem.md +6 -6
  60. package/modules/imRtdProvider.js +31 -0
  61. package/modules/improvedigitalBidAdapter.js +19 -3
  62. package/modules/instreamTracking.js +4 -4
  63. package/modules/intersectionRtdProvider.js +114 -0
  64. package/modules/invibesBidAdapter.js +64 -14
  65. package/modules/invibesBidAdapter.md +2 -1
  66. package/modules/ipromBidAdapter.js +79 -0
  67. package/modules/ixBidAdapter.js +185 -22
  68. package/modules/kinessoIdSystem.js +1 -1
  69. package/modules/limelightDigitalBidAdapter.js +2 -1
  70. package/modules/livewrappedBidAdapter.js +8 -2
  71. package/modules/lotamePanoramaIdSystem.js +80 -8
  72. package/modules/luponmediaBidAdapter.js +570 -0
  73. package/modules/mediasquareBidAdapter.js +1 -9
  74. package/modules/merkleIdSystem.js +5 -0
  75. package/modules/missenaBidAdapter.js +89 -0
  76. package/modules/nativoBidAdapter.js +27 -1
  77. package/modules/nextMillenniumBidAdapter.js +37 -7
  78. package/modules/oguryBidAdapter.js +2 -1
  79. package/modules/openxBidAdapter.js +6 -1
  80. package/modules/prebidServerBidAdapter/index.js +19 -15
  81. package/modules/pubgeniusBidAdapter.js +1 -1
  82. package/modules/pubmaticBidAdapter.js +5 -3
  83. package/modules/pubxaiAnalyticsAdapter.js +17 -0
  84. package/modules/relaidoBidAdapter.js +86 -65
  85. package/modules/richaudienceBidAdapter.js +2 -3
  86. package/modules/rtdModule/index.js +48 -18
  87. package/modules/rubiconBidAdapter.js +31 -19
  88. package/modules/saambaaBidAdapter.js +420 -0
  89. package/modules/saambaaBidAdapter.md +65 -68
  90. package/modules/seedtagBidAdapter.js +6 -0
  91. package/modules/sharedIdSystem.js +27 -1
  92. package/modules/smaatoBidAdapter.js +9 -1
  93. package/modules/smartxBidAdapter.js +17 -1
  94. package/modules/sspBCBidAdapter.js +34 -3
  95. package/modules/tappxBidAdapter.js +3 -1
  96. package/modules/targetVideoBidAdapter.js +187 -0
  97. package/modules/targetVideoBidAdapter.md +34 -0
  98. package/modules/telariaBidAdapter.js +2 -2
  99. package/modules/trustxBidAdapter.js +18 -17
  100. package/modules/undertoneBidAdapter.js +8 -1
  101. package/modules/userId/index.js +27 -2
  102. package/modules/ventes.md +71 -0
  103. package/modules/ventesBidAdapter.js +104 -64
  104. package/modules/ventesBidAdapter.md +0 -1
  105. package/modules/vidoomyBidAdapter.js +65 -108
  106. package/modules/visxBidAdapter.js +20 -3
  107. package/modules/visxBidAdapter.md +4 -6
  108. package/modules/weboramaRtdProvider.js +288 -73
  109. package/modules/weboramaRtdProvider.md +27 -10
  110. package/modules/yahoosspBidAdapter.js +5 -1
  111. package/modules/yahoosspBidAdapter.md +1 -1
  112. package/modules/yieldlabBidAdapter.js +41 -10
  113. package/modules/yieldlabBidAdapter.md +91 -48
  114. package/modules/yieldoneBidAdapter.js +115 -11
  115. package/modules/zetaSspBidAdapter.md +33 -1
  116. package/modules/zeta_global_sspBidAdapter.js +22 -1
  117. package/package.json +6 -1
  118. package/plugins/pbjsGlobals.js +28 -1
  119. package/src/adapterManager.js +14 -8
  120. package/src/auction.js +5 -4
  121. package/src/prebid.js +1 -2
  122. package/src/targeting.js +24 -3
  123. package/src/utils.js +41 -7
  124. package/test/helpers/prebidGlobal.js +1 -0
  125. package/test/spec/integration/faker/googletag.js +6 -0
  126. package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
  127. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  128. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  129. package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
  130. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
  131. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  132. package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
  133. package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
  134. package/test/spec/modules/appnexusBidAdapter_spec.js +63 -1
  135. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  136. package/test/spec/modules/beopBidAdapter_spec.js +1 -1
  137. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  138. package/test/spec/modules/bidViewability_spec.js +4 -4
  139. package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
  140. package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
  141. package/test/spec/modules/compassBidAdapter_spec.js +397 -0
  142. package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
  143. package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
  144. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  145. package/test/spec/modules/dchain_spec.js +329 -0
  146. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  147. package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
  148. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  149. package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
  150. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  151. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  152. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  153. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  154. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  155. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  156. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
  157. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  158. package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
  159. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  160. package/test/spec/modules/ixBidAdapter_spec.js +293 -2
  161. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  162. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
  163. package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
  164. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
  165. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  166. package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
  167. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  168. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  169. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  170. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
  171. package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
  172. package/test/spec/modules/openxBidAdapter_spec.js +5 -0
  173. package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
  174. package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
  175. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  176. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
  177. package/test/spec/modules/realTimeDataModule_spec.js +135 -49
  178. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  179. package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
  180. package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
  181. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  182. package/test/spec/modules/sharedIdSystem_spec.js +52 -6
  183. package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
  184. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  185. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  186. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  187. package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
  188. package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
  189. package/test/spec/modules/userId_spec.js +51 -0
  190. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  191. package/test/spec/modules/visxBidAdapter_spec.js +121 -5
  192. package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
  193. package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
  194. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  195. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  196. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
  197. package/test/spec/unit/core/adapterManager_spec.js +24 -6
  198. package/test/spec/unit/core/targeting_spec.js +116 -0
  199. package/test/spec/utils_spec.js +38 -0
  200. package/test/test_deps.js +3 -0
  201. package/test/test_index.js +1 -3
@@ -34,31 +34,34 @@ Module that connects to an Adxcg.com zone to fetch bids.
34
34
  code: 'native-ad-div',
35
35
  mediaTypes: {
36
36
  native: {
37
- image: {
37
+ image: {
38
38
  sendId: false,
39
- required: true,
40
- sizes: [80, 80]
39
+ required: false,
40
+ sizes: [127, 83]
41
41
  },
42
42
  icon: {
43
- sendId: true,
44
- },
45
- brand: {
43
+ sizes: [80, 80],
44
+ required: false,
46
45
  sendId: true,
47
46
  },
48
47
  title: {
49
48
  sendId: false,
50
- required: true,
49
+ required: false,
51
50
  len: 75
52
51
  },
53
52
  body: {
54
53
  sendId: false,
55
- required: true,
54
+ required: false,
56
55
  len: 200
57
56
  },
58
- sponsoredBy: {
57
+ cta: {
59
58
  sendId: false,
60
59
  required: false,
61
- len: 20
60
+ len: 75
61
+ },
62
+ sponsoredBy: {
63
+ sendId: false,
64
+ required: false
62
65
  }
63
66
  }
64
67
  },
@@ -73,21 +76,19 @@ Module that connects to an Adxcg.com zone to fetch bids.
73
76
  code: 'video-div',
74
77
  mediaTypes: {
75
78
  video: {
76
- playerSize: [640, 480],
77
- context: 'instream',
78
- mimes: ['video/mp4'],
79
- protocols: [5, 6, 8],
80
- playback_method: ['auto_play_sound_off']
81
- }
79
+ playerSize: [640, 480],
80
+ context: 'instream',
81
+ mimes: ['video/mp4'],
82
+ protocols: [2, 3, 5, 6, 8],
83
+ playback_method: ['auto_play_sound_off'],
84
+ maxduration: 100,
85
+ skip: 1
86
+ }
82
87
  },
83
88
  bids: [{
84
89
  bidder: 'adxcg',
85
90
  params: {
86
- adzoneid: '20',
87
- video: {
88
- maxduration: 100,
89
- skippable: true
90
- }
91
+ adzoneid: '20'
91
92
  }
92
93
  }]
93
94
  }
@@ -1,6 +1,7 @@
1
1
  import { deepAccess, buildUrl, parseSizesInput } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { config } from '../src/config.js';
4
+ import { createEidsArray } from './userId/eids.js';
4
5
  import find from 'core-js-pure/features/array/find.js';
5
6
  import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
6
7
 
@@ -97,17 +98,21 @@ export const spec = {
97
98
  PageRefreshed: getPageRefreshed()
98
99
  };
99
100
 
100
- if (bidderRequest && bidderRequest.gdprConsent) {
101
+ if (bidderRequest.gdprConsent) {
101
102
  payload.gdprConsent = {
102
103
  consentString: bidderRequest.gdprConsent.consentString,
103
104
  consentRequired: (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') ? bidderRequest.gdprConsent.gdprApplies : null
104
105
  };
105
106
  }
106
107
 
107
- if (bidderRequest && bidderRequest.uspConsent) {
108
+ if (bidderRequest.uspConsent) {
108
109
  payload.uspConsent = bidderRequest.uspConsent;
109
110
  }
110
111
 
112
+ if (deepAccess(bidderRequest, 'userId')) {
113
+ payload.userId = createEidsArray(bidderRequest.userId);
114
+ }
115
+
111
116
  const data = JSON.stringify(payload);
112
117
  const options = {
113
118
  withCredentials: true
@@ -309,7 +309,7 @@ function getUserSyncs(syncOptions, serverResponses) {
309
309
  export const spec = {
310
310
  code: BIDDER_CODE,
311
311
  gvlid: GVLID,
312
- aliases: ['avantisvideo', 'selectmediavideo', 'vidcrunch', 'openwebvideo'],
312
+ aliases: ['avantisvideo', 'selectmediavideo', 'vidcrunch', 'openwebvideo', 'didnavideo'],
313
313
  supportedMediaTypes: [VIDEO, BANNER],
314
314
  isBidRequestValid,
315
315
  buildRequests,
@@ -1,4 +1,4 @@
1
- import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn } from '../src/utils.js';
1
+ import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn, isAllowZeroCpmBidsEnabled } from '../src/utils.js';
2
2
  import { Renderer } from '../src/Renderer.js';
3
3
  import { config } from '../src/config.js';
4
4
  import { registerBidder, getIabSubCategory } from '../src/adapters/bidderFactory.js';
@@ -78,7 +78,6 @@ export const spec = {
78
78
  { code: 'districtm', gvlid: 144 },
79
79
  { code: 'adasta' },
80
80
  { code: 'beintoo', gvlid: 618 },
81
- { code: 'targetVideo' },
82
81
  ],
83
82
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
84
83
 
@@ -293,7 +292,8 @@ export const spec = {
293
292
  serverResponse.tags.forEach(serverBid => {
294
293
  const rtbBid = getRtbBid(serverBid);
295
294
  if (rtbBid) {
296
- if (rtbBid.cpm !== 0 && includes(this.supportedMediaTypes, rtbBid.ad_type)) {
295
+ const cpmCheck = (isAllowZeroCpmBidsEnabled(bidderRequest.bidderCode)) ? rtbBid.cpm >= 0 : rtbBid.cpm > 0;
296
+ if (cpmCheck && includes(this.supportedMediaTypes, rtbBid.ad_type)) {
297
297
  const bid = newBid(serverBid, rtbBid, bidderRequest);
298
298
  bid.mediaType = parseMediaType(rtbBid);
299
299
  bids.push(bid);
@@ -598,6 +598,26 @@ function newBid(serverBid, rtbBid, bidderRequest) {
598
598
  bid.meta = Object.assign({}, bid.meta, { advertiserId: rtbBid.advertiser_id });
599
599
  }
600
600
 
601
+ // temporary function; may remove at later date if/when adserver fully supports dchain
602
+ function setupDChain(rtbBid) {
603
+ let dchain = {
604
+ ver: '1.0',
605
+ complete: 0,
606
+ nodes: [{
607
+ bsid: rtbBid.buyer_member_id.toString()
608
+ }],
609
+ };
610
+
611
+ return dchain;
612
+ }
613
+ if (rtbBid.buyer_member_id) {
614
+ bid.meta = Object.assign({}, bid.meta, {dchain: setupDChain(rtbBid)});
615
+ }
616
+
617
+ if (rtbBid.brand_id) {
618
+ bid.meta = Object.assign({}, bid.meta, { brandId: rtbBid.brand_id });
619
+ }
620
+
601
621
  if (rtbBid.rtb.video) {
602
622
  // shared video properties used for all 3 contexts
603
623
  Object.assign(bid, {
@@ -1,4 +1,4 @@
1
- import { logWarn, deepAccess, isArray, parseSizesInput, isFn, parseUrl, getUniqueIdentifierStr } from '../src/utils.js';
1
+ import { logWarn, deepAccess, deepSetValue, deepClone, isArray, parseSizesInput, isFn, parseUrl, getUniqueIdentifierStr } from '../src/utils.js';
2
2
  import { config } from '../src/config.js';
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
4
  import { Renderer } from '../src/Renderer.js';
@@ -6,7 +6,7 @@ import { VIDEO, BANNER } from '../src/mediaTypes.js';
6
6
  import find from 'core-js-pure/features/array/find.js';
7
7
  import includes from 'core-js-pure/features/array/includes.js';
8
8
 
9
- const ADAPTER_VERSION = '1.18';
9
+ const ADAPTER_VERSION = '1.19';
10
10
  const ADAPTER_NAME = 'BFIO_PREBID';
11
11
  const OUTSTREAM = 'outstream';
12
12
  const CURRENCY = 'USD';
@@ -360,6 +360,7 @@ function createVideoRequestData(bid, bidderRequest) {
360
360
  let tagid = getVideoBidParam(bid, 'tagid');
361
361
  let topLocation = getTopWindowLocation(bidderRequest);
362
362
  let eids = getEids(bid);
363
+ let ortb2 = deepClone(config.getConfig('ortb2'));
363
364
  let payload = {
364
365
  isPrebid: true,
365
366
  appId: appId,
@@ -378,6 +379,7 @@ function createVideoRequestData(bid, bidderRequest) {
378
379
  displaymanagerver: ADAPTER_VERSION
379
380
  }],
380
381
  site: {
382
+ ...deepAccess(ortb2, 'site', {}),
381
383
  page: topLocation.href,
382
384
  domain: topLocation.hostname
383
385
  },
@@ -389,39 +391,32 @@ function createVideoRequestData(bid, bidderRequest) {
389
391
  js: 1,
390
392
  geo: {}
391
393
  },
392
- regs: {
393
- ext: {}
394
- },
395
- source: {
396
- ext: {}
397
- },
398
- user: {
399
- ext: {}
400
- },
394
+ app: deepAccess(ortb2, 'app'),
395
+ user: deepAccess(ortb2, 'user'),
401
396
  cur: [CURRENCY]
402
397
  };
403
398
 
404
399
  if (bidderRequest && bidderRequest.uspConsent) {
405
- payload.regs.ext.us_privacy = bidderRequest.uspConsent;
400
+ deepSetValue(payload, 'regs.ext.us_privacy', bidderRequest.uspConsent);
406
401
  }
407
402
 
408
403
  if (bidderRequest && bidderRequest.gdprConsent) {
409
404
  let { gdprApplies, consentString } = bidderRequest.gdprConsent;
410
- payload.regs.ext.gdpr = gdprApplies ? 1 : 0;
411
- payload.user.ext.consent = consentString;
405
+ deepSetValue(payload, 'regs.ext.gdpr', gdprApplies ? 1 : 0);
406
+ deepSetValue(payload, 'user.ext.consent', consentString);
412
407
  }
413
408
 
414
409
  if (bid.schain) {
415
- payload.source.ext.schain = bid.schain;
410
+ deepSetValue(payload, 'source.ext.schain', bid.schain);
416
411
  }
417
412
 
418
413
  if (eids.length > 0) {
419
- payload.user.ext.eids = eids;
414
+ deepSetValue(payload, 'user.ext.eids', eids);
420
415
  }
421
416
 
422
417
  let connection = navigator.connection || navigator.webkitConnection;
423
418
  if (connection && connection.effectiveType) {
424
- payload.device.connectiontype = connection.effectiveType;
419
+ deepSetValue(payload, 'device.connectiontype', connection.effectiveType);
425
420
  }
426
421
 
427
422
  return payload;
@@ -439,8 +434,10 @@ function createBannerRequestData(bids, bidderRequest) {
439
434
  sizes: getBannerSizes(bid)
440
435
  };
441
436
  });
437
+ let ortb2 = deepClone(config.getConfig('ortb2'));
442
438
  let payload = {
443
439
  slots: slots,
440
+ ortb2: ortb2,
444
441
  page: topLocation.href,
445
442
  domain: topLocation.hostname,
446
443
  search: topLocation.search,
@@ -36,7 +36,7 @@ export const spec = {
36
36
  */
37
37
  buildRequests: function(validBidRequests, bidderRequest) {
38
38
  const slots = validBidRequests.map(beOpRequestSlotsMaker);
39
- let pageUrl = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl') || deepAccess(window, 'location.href');
39
+ let pageUrl = deepAccess(window, 'location.href') || deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl');
40
40
  let fpd = config.getLegacyFpd(config.getConfig('ortb2'));
41
41
  let gdpr = bidderRequest.gdprConsent;
42
42
  let firstSlot = slots[0];
@@ -99,16 +99,18 @@ export const spec = {
99
99
  }
100
100
 
101
101
  function buildTrackingParams(data, info, value) {
102
+ const accountId = data.params.accountId;
102
103
  return {
103
- pid: data.params.accountId,
104
+ pid: accountId === undefined ? data.ad.match(/account: \“([a-f\d]{24})\“/)[1] : accountId,
104
105
  nid: data.params.networkId,
105
106
  nptnid: data.params.networkPartnerId,
106
- bid: data.bidId,
107
+ bid: data.bidId || data.requestId,
107
108
  sl_n: data.adUnitCode,
108
109
  aid: data.auctionId,
109
110
  se_ca: 'bid',
110
111
  se_ac: info,
111
- se_va: value
112
+ se_va: value,
113
+ url: window.location.href
112
114
  };
113
115
  }
114
116
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { config } from '../src/config.js';
6
6
  import * as events from '../src/events.js';
7
- import { EVENTS } from '../src/constants.json';
7
+ import CONSTANTS from '../src/constants.json';
8
8
  import { logWarn, isFn, triggerPixel } from '../src/utils.js';
9
9
  import { getGlobal } from '../src/prebidGlobal.js';
10
10
  import adapterManager, { gdprDataHandler, uspDataHandler } from '../src/adapterManager.js';
@@ -70,12 +70,12 @@ export let impressionViewableHandler = (globalModuleConfig, slot, event) => {
70
70
  // trigger respective bidder's onBidViewable handler
71
71
  adapterManager.callBidViewableBidder(respectiveBid.bidder, respectiveBid);
72
72
  // emit the BID_VIEWABLE event with bid details, this event can be consumed by bidders and analytics pixels
73
- events.emit(EVENTS.BID_VIEWABLE, respectiveBid);
73
+ events.emit(CONSTANTS.EVENTS.BID_VIEWABLE, respectiveBid);
74
74
  }
75
75
  };
76
76
 
77
77
  export let init = () => {
78
- events.on(EVENTS.AUCTION_INIT, () => {
78
+ events.on(CONSTANTS.EVENTS.AUCTION_INIT, () => {
79
79
  // read the config for the module
80
80
  const globalModuleConfig = config.getConfig(MODULE_NAME) || {};
81
81
  // do nothing if module-config.enabled is not set to true
@@ -1,7 +1,7 @@
1
1
  import { logMessage } from '../src/utils.js';
2
2
  import { config } from '../src/config.js';
3
3
  import * as events from '../src/events.js';
4
- import { EVENTS } from '../src/constants.json';
4
+ import CONSTANTS from '../src/constants.json';
5
5
 
6
6
  const MODULE_NAME = 'bidViewabilityIO';
7
7
  const CONFIG_ENABLED = 'enabled';
@@ -42,7 +42,7 @@ export let getViewableOptions = (bid) => {
42
42
  export let markViewed = (bid, entry, observer) => {
43
43
  return () => {
44
44
  observer.unobserve(entry.target);
45
- events.emit(EVENTS.BID_VIEWABLE, bid);
45
+ events.emit(CONSTANTS.EVENTS.BID_VIEWABLE, bid);
46
46
  _logMessage(`id: ${entry.target.getAttribute('id')} code: ${bid.adUnitCode} was viewed`);
47
47
  }
48
48
  }
@@ -77,7 +77,7 @@ export let init = () => {
77
77
  if (conf[MODULE_NAME][CONFIG_ENABLED] && CLIENT_SUPPORTS_IO) {
78
78
  // if the module is enabled and the browser supports Intersection Observer,
79
79
  // then listen to AD_RENDER_SUCCEEDED to setup IO's for supported mediaTypes
80
- events.on(EVENTS.AD_RENDER_SUCCEEDED, ({doc, bid, id}) => {
80
+ events.on(CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED, ({doc, bid, id}) => {
81
81
  if (isSupportedMediaType(bid)) {
82
82
  let viewable = new IntersectionObserver(viewCallbackFactory(bid), getViewableOptions(bid));
83
83
  let element = document.getElementById(bid.adUnitCode);
@@ -1,5 +1,4 @@
1
1
  import { deepAccess, isArray } from '../src/utils.js';
2
- import { config } from '../src/config.js';
3
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
3
  import { BANNER } from '../src/mediaTypes.js';
5
4
  const BIDDER_CODE = 'codefuel';
@@ -34,8 +33,7 @@ export const spec = {
34
33
  const devicetype = getDeviceType()
35
34
  const publisher = setOnAny(validBidRequests, 'params.publisher');
36
35
  const cur = CURRENCY;
37
- // const endpointUrl = 'http://localhost:5000/prebid'
38
- const endpointUrl = config.getConfig('codefuel.bidderUrl');
36
+ const endpointUrl = 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid'
39
37
  const timeout = bidderRequest.timeout;
40
38
 
41
39
  validBidRequests.forEach(bid => bid.netRevenue = 'net');
@@ -21,7 +21,7 @@ You will receive the URLs when contacting us.
21
21
  ```
22
22
  pbjs.setConfig({
23
23
  codefuel: {
24
- bidderUrl: 'https://ai-i-codefuel-ds-rtb-us-east-1-k8s-internal.seccint.com/prebid',
24
+ bidderUrl: 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid',
25
25
  usersyncUrl: 'https://usersync-url.com'
26
26
  }
27
27
  });
@@ -74,7 +74,7 @@ pbjs.setConfig({
74
74
 
75
75
  pbjs.setConfig({
76
76
  codefuel: {
77
- bidderUrl: 'https://prebidtest.zemanta.com/api/bidder/prebidtest/bid/'
77
+ bidderUrl: 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid'
78
78
  }
79
79
  });
80
80
  ```
@@ -105,7 +105,7 @@ pbjs.setConfig({
105
105
 
106
106
  pbjs.setConfig({
107
107
  codefuel: {
108
- bidderUrl: 'https://prebidtest.zemanta.com/api/bidder/prebidtest/bid/'
108
+ bidderUrl: 'https://ai-p-codefuel-ds-rtb-us-east-1-k8s.seccint.com/prebid'
109
109
  }
110
110
  });
111
111
  ```
@@ -1,6 +1,7 @@
1
1
  import { getWindowTop, deepAccess, logMessage } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
4
+ import { ajax } from '../src/ajax.js';
4
5
 
5
6
  const BIDDER_CODE = 'colossusssp';
6
7
  const G_URL = 'https://colossusssp.com/?c=o&m=multi';
@@ -175,6 +176,12 @@ export const spec = {
175
176
  type: 'image',
176
177
  url: G_URL_SYNC
177
178
  }];
179
+ },
180
+
181
+ onBidWon: (bid) => {
182
+ if (bid.nurl) {
183
+ ajax(bid.nurl, null);
184
+ }
178
185
  }
179
186
  };
180
187
 
@@ -0,0 +1,201 @@
1
+ import { isFn, deepAccess, logMessage, logError } from '../src/utils.js';
2
+
3
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
4
+ import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
5
+ import { config } from '../src/config.js';
6
+
7
+ const BIDDER_CODE = 'compass';
8
+ const AD_URL = 'https://sa-lb.deliverimp.com/pbjs';
9
+ const SYNC_URL = 'https://sa-cs.deliverimp.com';
10
+
11
+ function isBidResponseValid(bid) {
12
+ if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
13
+ return false;
14
+ }
15
+
16
+ switch (bid.mediaType) {
17
+ case BANNER:
18
+ return Boolean(bid.width && bid.height && bid.ad);
19
+ case VIDEO:
20
+ return Boolean(bid.vastUrl || bid.vastXml);
21
+ case NATIVE:
22
+ return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
23
+ default:
24
+ return false;
25
+ }
26
+ }
27
+
28
+ function getPlacementReqData(bid) {
29
+ const { params, bidId, mediaTypes } = bid;
30
+ const schain = bid.schain || {};
31
+ const { placementId } = params;
32
+ const bidfloor = getBidFloor(bid);
33
+
34
+ const placement = {
35
+ placementId,
36
+ bidId,
37
+ schain,
38
+ bidfloor
39
+ };
40
+
41
+ if (mediaTypes && mediaTypes[BANNER]) {
42
+ placement.adFormat = BANNER;
43
+ placement.sizes = mediaTypes[BANNER].sizes;
44
+ } else if (mediaTypes && mediaTypes[VIDEO]) {
45
+ placement.adFormat = VIDEO;
46
+ placement.playerSize = mediaTypes[VIDEO].playerSize;
47
+ placement.minduration = mediaTypes[VIDEO].minduration;
48
+ placement.maxduration = mediaTypes[VIDEO].maxduration;
49
+ placement.mimes = mediaTypes[VIDEO].mimes;
50
+ placement.protocols = mediaTypes[VIDEO].protocols;
51
+ placement.startdelay = mediaTypes[VIDEO].startdelay;
52
+ placement.placement = mediaTypes[VIDEO].placement;
53
+ placement.skip = mediaTypes[VIDEO].skip;
54
+ placement.skipafter = mediaTypes[VIDEO].skipafter;
55
+ placement.minbitrate = mediaTypes[VIDEO].minbitrate;
56
+ placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
57
+ placement.delivery = mediaTypes[VIDEO].delivery;
58
+ placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
59
+ placement.api = mediaTypes[VIDEO].api;
60
+ placement.linearity = mediaTypes[VIDEO].linearity;
61
+ } else if (mediaTypes && mediaTypes[NATIVE]) {
62
+ placement.native = mediaTypes[NATIVE];
63
+ placement.adFormat = NATIVE;
64
+ }
65
+
66
+ return placement;
67
+ }
68
+
69
+ function getBidFloor(bid) {
70
+ if (!isFn(bid.getFloor)) {
71
+ return deepAccess(bid, 'params.bidfloor', 0);
72
+ }
73
+
74
+ try {
75
+ const bidFloor = bid.getFloor({
76
+ currency: 'USD',
77
+ mediaType: '*',
78
+ size: '*',
79
+ });
80
+ return bidFloor.floor;
81
+ } catch (err) {
82
+ logError(err);
83
+ return 0;
84
+ }
85
+ }
86
+
87
+ export const spec = {
88
+ code: BIDDER_CODE,
89
+ supportedMediaTypes: [BANNER, VIDEO, NATIVE],
90
+
91
+ isBidRequestValid: (bid = {}) => {
92
+ const { params, bidId, mediaTypes } = bid;
93
+ let valid = Boolean(bidId && params && params.placementId);
94
+
95
+ if (mediaTypes && mediaTypes[BANNER]) {
96
+ valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
97
+ } else if (mediaTypes && mediaTypes[VIDEO]) {
98
+ valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
99
+ } else if (mediaTypes && mediaTypes[NATIVE]) {
100
+ valid = valid && Boolean(mediaTypes[NATIVE]);
101
+ } else {
102
+ valid = false;
103
+ }
104
+ return valid;
105
+ },
106
+
107
+ buildRequests: (validBidRequests = [], bidderRequest = {}) => {
108
+ let deviceWidth = 0;
109
+ let deviceHeight = 0;
110
+
111
+ let winLocation;
112
+ try {
113
+ const winTop = window.top;
114
+ deviceWidth = winTop.screen.width;
115
+ deviceHeight = winTop.screen.height;
116
+ winLocation = winTop.location;
117
+ } catch (e) {
118
+ logMessage(e);
119
+ winLocation = window.location;
120
+ }
121
+
122
+ const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer;
123
+ let refferLocation;
124
+ try {
125
+ refferLocation = refferUrl && new URL(refferUrl);
126
+ } catch (e) {
127
+ logMessage(e);
128
+ }
129
+
130
+ let location = refferLocation || winLocation;
131
+ const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
132
+ const host = location.host;
133
+ const page = location.pathname;
134
+ const secure = location.protocol === 'https:' ? 1 : 0;
135
+ const placements = [];
136
+ const request = {
137
+ deviceWidth,
138
+ deviceHeight,
139
+ language,
140
+ secure,
141
+ host,
142
+ page,
143
+ placements,
144
+ coppa: config.getConfig('coppa') === true ? 1 : 0,
145
+ ccpa: bidderRequest.uspConsent || undefined,
146
+ gdpr: bidderRequest.gdprConsent || undefined,
147
+ tmax: config.getConfig('bidderTimeout')
148
+ };
149
+
150
+ const len = validBidRequests.length;
151
+ for (let i = 0; i < len; i++) {
152
+ const bid = validBidRequests[i];
153
+ placements.push(getPlacementReqData(bid));
154
+ }
155
+
156
+ return {
157
+ method: 'POST',
158
+ url: AD_URL,
159
+ data: request
160
+ };
161
+ },
162
+
163
+ interpretResponse: (serverResponse) => {
164
+ let response = [];
165
+ for (let i = 0; i < serverResponse.body.length; i++) {
166
+ let resItem = serverResponse.body[i];
167
+ if (isBidResponseValid(resItem)) {
168
+ const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
169
+ resItem.meta = { ...resItem.meta, advertiserDomains };
170
+
171
+ response.push(resItem);
172
+ }
173
+ }
174
+ return response;
175
+ },
176
+
177
+ getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
178
+ let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
179
+ let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
180
+ if (gdprConsent && gdprConsent.consentString) {
181
+ if (typeof gdprConsent.gdprApplies === 'boolean') {
182
+ syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
183
+ } else {
184
+ syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
185
+ }
186
+ }
187
+ if (uspConsent && uspConsent.consentString) {
188
+ syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
189
+ }
190
+
191
+ const coppa = config.getConfig('coppa') ? 1 : 0;
192
+ syncUrl += `&coppa=${coppa}`;
193
+
194
+ return [{
195
+ type: syncType,
196
+ url: syncUrl
197
+ }];
198
+ }
199
+ };
200
+
201
+ registerBidder(spec);