prebid.js 5.18.0 → 5.20.2

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 (114) hide show
  1. package/browsers.json +1 -0
  2. package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
  3. package/modules/.submodules.json +1 -0
  4. package/modules/adfBidAdapter.js +21 -16
  5. package/modules/adtelligentBidAdapter.js +2 -1
  6. package/modules/adxcgBidAdapter.js +311 -359
  7. package/modules/airgridRtdProvider.js +1 -1
  8. package/modules/akamaiDapRtdProvider.js +474 -0
  9. package/modules/akamaiDapRtdProvider.md +47 -0
  10. package/modules/appnexusBidAdapter.js +9 -3
  11. package/modules/atsAnalyticsAdapter.js +67 -46
  12. package/modules/atsAnalyticsAdapter.md +1 -0
  13. package/modules/betweenBidAdapter.js +20 -3
  14. package/modules/browsiRtdProvider.js +106 -18
  15. package/modules/cleanioRtdProvider.js +192 -0
  16. package/modules/cleanioRtdProvider.md +59 -0
  17. package/modules/codefuelBidAdapter.js +183 -0
  18. package/modules/codefuelBidAdapter.md +111 -0
  19. package/modules/connectIdSystem.js +104 -0
  20. package/modules/connectIdSystem.md +33 -0
  21. package/modules/deepintentBidAdapter.js +106 -9
  22. package/modules/deepintentBidAdapter.md +36 -1
  23. package/modules/deltaprojectsBidAdapter.js +252 -0
  24. package/modules/deltaprojectsBidAdapter.md +32 -0
  25. package/modules/engageyaBidAdapter.js +157 -0
  26. package/modules/gridBidAdapter.js +1 -0
  27. package/modules/gumgumBidAdapter.js +8 -0
  28. package/modules/inskinBidAdapter.js +7 -3
  29. package/modules/ipromBidAdapter.js +79 -0
  30. package/modules/ixBidAdapter.js +8 -1
  31. package/modules/jixieBidAdapter.js +8 -2
  32. package/modules/justpremiumBidAdapter.js +6 -1
  33. package/modules/kinessoIdSystem.js +1 -1
  34. package/modules/limelightDigitalBidAdapter.js +22 -2
  35. package/modules/livewrappedAnalyticsAdapter.js +49 -1
  36. package/modules/multibid/index.js +3 -3
  37. package/modules/nativoBidAdapter.js +5 -1
  38. package/modules/nextMillenniumBidAdapter.js +12 -3
  39. package/modules/oguryBidAdapter.js +14 -1
  40. package/modules/openxBidAdapter.js +34 -22
  41. package/modules/operaadsBidAdapter.js +21 -1
  42. package/modules/otmBidAdapter.js +146 -0
  43. package/modules/otmBidAdapter.md +27 -26
  44. package/modules/outbrainBidAdapter.js +5 -0
  45. package/modules/playwireBidAdapter.md +61 -0
  46. package/modules/publinkIdSystem.js +11 -6
  47. package/modules/rtdModule/index.js +2 -2
  48. package/modules/sonobiBidAdapter.js +7 -0
  49. package/modules/sortableBidAdapter.js +1 -0
  50. package/modules/teadsBidAdapter.js +3 -0
  51. package/modules/tripleliftBidAdapter.js +22 -5
  52. package/modules/trustxBidAdapter.js +8 -6
  53. package/modules/undertoneBidAdapter.js +9 -5
  54. package/modules/undertoneBidAdapter.md +5 -1
  55. package/modules/userId/eids.js +18 -0
  56. package/modules/userId/eids.md +7 -0
  57. package/modules/userId/userId.md +12 -0
  58. package/modules/ventesBidAdapter.js +370 -0
  59. package/modules/ventesBidAdapter.md +94 -0
  60. package/modules/videobyteBidAdapter.js +13 -6
  61. package/modules/videobyteBidAdapter.md +49 -0
  62. package/modules/yahoosspBidAdapter.js +6 -6
  63. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  64. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  65. package/package.json +1 -1
  66. package/src/adapterManager.js +5 -0
  67. package/src/adapters/bidderFactory.js +4 -3
  68. package/src/auction.js +11 -11
  69. package/src/constants.json +1 -0
  70. package/src/secureCreatives.js +6 -7
  71. package/src/targeting.js +11 -9
  72. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  73. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  74. package/test/spec/modules/adxcgBidAdapter_spec.js +827 -571
  75. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  76. package/test/spec/modules/appnexusBidAdapter_spec.js +16 -1
  77. package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
  78. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  79. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  80. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  81. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  82. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  83. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  84. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  85. package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
  86. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  87. package/test/spec/modules/gumgumBidAdapter_spec.js +5 -1
  88. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  89. package/test/spec/modules/ixBidAdapter_spec.js +13 -3
  90. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  91. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  92. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  93. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +52 -7
  94. package/test/spec/modules/multibid_spec.js +31 -31
  95. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  96. package/test/spec/modules/oguryBidAdapter_spec.js +53 -12
  97. package/test/spec/modules/openxBidAdapter_spec.js +85 -13
  98. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  99. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  100. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  101. package/test/spec/modules/publinkIdSystem_spec.js +6 -6
  102. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  103. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  104. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  105. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  106. package/test/spec/modules/trustxBidAdapter_spec.js +3 -3
  107. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  108. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  109. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  110. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  111. package/test/spec/unit/core/adapterManager_spec.js +37 -2
  112. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  113. package/test/spec/unit/pbjs_api_spec.js +37 -2
  114. package/test/spec/unit/secureCreatives_spec.js +54 -25
package/browsers.json CHANGED
@@ -71,4 +71,5 @@
71
71
  "device": null,
72
72
  "os": "OS X"
73
73
  }
74
+
74
75
  }
@@ -0,0 +1,132 @@
1
+ <html>
2
+ <head>
3
+ <script async src="../../build/dev/prebid.js"></script>
4
+ <script async src="https://www.googletagservices.com/tag/js/gpt.js"></script>
5
+ <script>
6
+ var FAILSAFE_TIMEOUT = 3300;
7
+ var PREBID_TIMEOUT = 2000;
8
+
9
+ var adUnits = [{
10
+ code: 'div-gpt-ad-1460505748561-0',
11
+ mediaTypes: {
12
+ banner: {
13
+ sizes: [[300, 250], [300,600]],
14
+ }
15
+ },
16
+ // Replace this object to test a new Adapter!
17
+ bids: [
18
+ {
19
+ bidder: 'appnexus',
20
+ params: {
21
+ placementId: 13144370
22
+ }
23
+ },
24
+ {
25
+ bidder: 'sovrn',
26
+ params: {
27
+ tagid: 1
28
+ }
29
+ }
30
+ ]
31
+
32
+ }];
33
+
34
+ var pbjs = pbjs || {};
35
+ pbjs.que = pbjs.que || [];
36
+
37
+ </script>
38
+
39
+ <script>
40
+ var googletag = googletag || {};
41
+ googletag.cmd = googletag.cmd || [];
42
+ googletag.cmd.push(function() {
43
+ googletag.pubads().disableInitialLoad();
44
+ });
45
+
46
+ pbjs.que.push(function() {
47
+ pbjs.setConfig({
48
+ debug: true,
49
+ ortb2: {
50
+ user: {
51
+ data: [
52
+ // DAP segment taxonomy inserted here
53
+ ]
54
+ },
55
+ site: {
56
+ ext: {
57
+ data: {
58
+ // DAP SAID will be inserted here
59
+ }
60
+ }
61
+ },
62
+ imp: {
63
+ ext: {
64
+ data: {
65
+ // DAP SAID will be inserted here
66
+ }
67
+ }
68
+ }
69
+ },
70
+ realTimeData: {
71
+ dataProviders: [
72
+ {
73
+ name: "dap",
74
+ waitForIt: true,
75
+ params: {
76
+ apiHostname: "prebid.dap.akadns.net",
77
+ apiVersion: "x1",
78
+ domain: "prebid.org",
79
+ identityType: "dap-signature:1.0.0",
80
+ segtax: 503,
81
+ tokenTtl: 5,
82
+ }
83
+ }
84
+ ]
85
+ }
86
+ });
87
+ pbjs.addAdUnits(adUnits);
88
+ pbjs.requestBids({
89
+ bidsBackHandler: sendAdserverRequest,
90
+ timeout: PREBID_TIMEOUT
91
+ });
92
+ });
93
+
94
+ function sendAdserverRequest() {
95
+ if (pbjs.adserverRequestSent) return;
96
+ pbjs.adserverRequestSent = true;
97
+ googletag.cmd.push(function() {
98
+ pbjs.que.push(function() {
99
+ pbjs.setTargetingForGPTAsync();
100
+ googletag.pubads().refresh();
101
+ });
102
+ });
103
+ }
104
+
105
+ setTimeout(function() {
106
+ sendAdserverRequest();
107
+ }, FAILSAFE_TIMEOUT);
108
+
109
+ </script>
110
+
111
+ <script>
112
+ googletag.cmd.push(function () {
113
+ googletag.defineSlot('/19968336/header-bid-tag-0', [[300, 250], [300, 600]], 'div-gpt-ad-1460505748561-0').addService(googletag.pubads());
114
+ googletag.pubads().enableSingleRequest();
115
+ googletag.enableServices();
116
+ });
117
+ </script>
118
+
119
+ <script>!function(a){var e="https://s.go-mpulse.net/boomerang/",t="addEventListener";if("False"=="True")a.BOOMR_config=a.BOOMR_config||{},a.BOOMR_config.PageParams=a.BOOMR_config.PageParams||{},a.BOOMR_config.PageParams.pci=!0,e="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="5G3ZS-8L7PG-U23WM-5CA4K-LQ3YP",function(){function n(e){a.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!a.BOOMR||!a.BOOMR.version&&!a.BOOMR.snippetExecuted){a.BOOMR=a.BOOMR||{},a.BOOMR.snippetExecuted=!0;var i,_,o,r=document.createElement("iframe");if(a[t])a[t]("load",n,!1);else if(a.attachEvent)a.attachEvent("onload",n);r.src="javascript:void(0)",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="width:0;height:0;border:0;display:none;",o=document.getElementsByTagName("script")[0],o.parentNode.insertBefore(r,o);try{_=r.contentWindow.document}catch(O){i=document.domain,r.src="javascript:var d=document.open();d.domain='"+i+"';void(0);",_=r.contentWindow.document}_.open()._l=function(){var a=this.createElement("script");if(i)this.domain=i;a.id="boomr-if-as",a.src=e+"5G3ZS-8L7PG-U23WM-5CA4K-LQ3YP",BOOMR_lstart=(new Date).getTime(),this.body.appendChild(a)},_.write("<bo"+'dy onload="document._l();">'),_.close()}}(),"".length>0)if(a&&"performance"in a&&a.performance&&"function"==typeof a.performance.setResourceTimingBufferSize)a.performance.setResourceTimingBufferSize();!function(){if(BOOMR=a.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var e=""=="true"?1:0,t="",n="ghh4w4yxem66iyi6ijxa-f-a8f1ed317-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,_={"ak.v":"32","ak.cp":"540505","ak.ai":parseInt("351538",10),"ak.ol":"0","ak.cr":17,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"322de403","ak.r":36326,"ak.a2":e,"ak.m":"dscx","ak.n":"essl","ak.bpcip":"49.207.203.0","ak.cport":5172,"ak.gh":"23.47.149.85","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.csrc":"-","ak.acc":"bbr","ak.t":"1629373038","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==admFPBlxVf0VKeanKFKUThzq+or23aIaVFP5DBXpeOGEuvD5mQz0UZbvK242Y8cupS91bsNaM7uJT3/O00EszGTxlFhkv439YkTWfyegvqVlJhcrZ7jcRkIoyrmjoBqDZoF0WaG4rhwmNzkKEv6T1noRYwEWwRHOG8p7osPXWy5as6KkmhOYUiYk8S5hQj+HFzhYI5YUTx+8urmHdpVIDBkramcrT2V89mb0cH5L2bSGS2hahAA3Kkf+0Dul7r5hDFQaVTf17e4oKdM1G8cKVF5LGRxRl3v4Rn6tBJ+fjrJ7XYQWV30w1LPwcAmSfRX8iTCK4xzHwG1fwDFHb5tWVsxHeEkRgNN3/KhnrCjxKtaROjJeWypJf/rjn1HWHwy7uVVsP9f/HRN3drCCkEvJBmu6yi0jzFFCoeEkbUEoq+8=","ak.pv":"396","ak.dpoabenc":"","ak.tf":i};if(""!==t)_["ak.ruds"]=t;var o={i:!1,av:function(e){var t="http.initiator";if(e&&(!e[t]||"spa_hard"===e[t]))_["ak.feo"]=void 0!==a.aFeoApplied?1:0,BOOMR.addVar(_)},rv:function(){var a=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(a)}};BOOMR.plugins.AK={akVars:_,akDNSPreFetchDomain:n,init:function(){if(!o.i){var a=BOOMR.subscribe;a("before_beacon",o.av,null,null),a("onbeacon",o.rv,null,null),o.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head>
120
+
121
+ <body>
122
+ <h2>Prebid.js Test</h2>
123
+ <h5>Div-1</h5>
124
+ <div id='div-gpt-ad-1460505748561-0'>
125
+ <script type='text/javascript'>
126
+ googletag.cmd.push(function() { googletag.display('div-gpt-ad-1460505748561-0'); });
127
+ </script>
128
+ </div>
129
+ <h5>Segments Sent to Bidding Adapter</h5>
130
+ <div id="user-segments"></div>
131
+ </body>
132
+ </html>
@@ -5,6 +5,7 @@
5
5
  "akamaiDAPIdSystem",
6
6
  "amxIdSystem",
7
7
  "britepoolIdSystem",
8
+ "connectIdSystem",
8
9
  "criteoIdSystem",
9
10
  "deepintentDpesIdSystem",
10
11
  "dmdIdSystem",
@@ -58,7 +58,11 @@ export const spec = {
58
58
  aliases: BIDDER_ALIAS,
59
59
  gvlid: GVLID,
60
60
  supportedMediaTypes: [ NATIVE, BANNER, VIDEO ],
61
- isBidRequestValid: bid => !!bid.params.mid,
61
+ isBidRequestValid: (bid) => {
62
+ const params = bid.params || {};
63
+ const { mid, inv, mname } = params;
64
+ return !!(mid || (inv && mname));
65
+ },
62
66
  buildRequests: (validBidRequests, bidderRequest) => {
63
67
  let app, site;
64
68
 
@@ -104,12 +108,19 @@ export const spec = {
104
108
  }) : {};
105
109
  const bidfloor = floorInfo.floor;
106
110
  const bidfloorcur = floorInfo.currency;
111
+ const { mid, inv, mname } = bid.params;
107
112
 
108
113
  const imp = {
109
114
  id: id + 1,
110
- tagid: bid.params.mid,
115
+ tagid: mid,
111
116
  bidfloor,
112
- bidfloorcur
117
+ bidfloorcur,
118
+ ext: {
119
+ bidder: {
120
+ inv,
121
+ mname
122
+ }
123
+ }
113
124
  };
114
125
 
115
126
  const assets = _map(bid.nativeParams, (bidParams, key) => {
@@ -153,9 +164,6 @@ export const spec = {
153
164
  assets
154
165
  }
155
166
  };
156
-
157
- bid.mediaType = NATIVE;
158
- return imp;
159
167
  }
160
168
 
161
169
  const bannerParams = deepAccess(bid, 'mediaTypes.banner');
@@ -172,18 +180,14 @@ export const spec = {
172
180
  imp.banner = {
173
181
  format
174
182
  };
175
- bid.mediaType = BANNER;
176
-
177
- return imp;
178
183
  }
179
184
 
180
185
  const videoParams = deepAccess(bid, 'mediaTypes.video');
181
186
  if (videoParams) {
182
187
  imp.video = videoParams;
183
- bid.mediaType = VIDEO;
184
-
185
- return imp;
186
188
  }
189
+
190
+ return imp;
187
191
  });
188
192
 
189
193
  const request = {
@@ -243,6 +247,7 @@ export const spec = {
243
247
  return bids.map((bid, id) => {
244
248
  const bidResponse = bidResponses[id];
245
249
  if (bidResponse) {
250
+ const mediaType = deepAccess(bidResponse, 'ext.prebid.type');
246
251
  const result = {
247
252
  requestId: bid.bidId,
248
253
  cpm: bidResponse.price,
@@ -250,12 +255,12 @@ export const spec = {
250
255
  ttl: 360,
251
256
  netRevenue: bid.netRevenue === 'net',
252
257
  currency: cur,
253
- mediaType: bid.mediaType,
258
+ mediaType,
254
259
  width: bidResponse.w,
255
260
  height: bidResponse.h,
256
261
  dealId: bidResponse.dealid,
257
262
  meta: {
258
- mediaType: bid.mediaType,
263
+ mediaType,
259
264
  advertiserDomains: bidResponse.adomain
260
265
  }
261
266
  };
@@ -263,10 +268,10 @@ export const spec = {
263
268
  if (bidResponse.native) {
264
269
  result.native = parseNative(bidResponse);
265
270
  } else {
266
- result[ bid.mediaType === VIDEO ? 'vastXml' : 'ad' ] = bidResponse.adm;
271
+ result[ mediaType === VIDEO ? 'vastXml' : 'ad' ] = bidResponse.adm;
267
272
  }
268
273
 
269
- if (!bid.renderer && bid.mediaType === VIDEO && deepAccess(bid, 'mediaTypes.video.context') === 'outstream') {
274
+ if (!bid.renderer && mediaType === VIDEO && deepAccess(bid, 'mediaTypes.video.context') === 'outstream') {
270
275
  result.renderer = Renderer.install({id: bid.bidId, url: OUTSTREAM_RENDERER_URL, adUnitCode: bid.adUnitCode});
271
276
  result.renderer.setRender(renderer);
272
277
  }
@@ -20,6 +20,7 @@ const HOST_GETTERS = {
20
20
  onefiftytwomedia: () => 'ghb.ads.152media.com',
21
21
  mediafuse: () => 'ghb.hbmp.mediafuse.com',
22
22
  bidsxchange: () => 'ghb.hbd.bidsxchange.com',
23
+ streamkey: () => 'ghb.hb.streamkey.net',
23
24
  }
24
25
  const getUri = function (bidderCode) {
25
26
  let bidderWithoutSuffix = bidderCode.split('_')[0];
@@ -35,7 +36,7 @@ const syncsCache = {};
35
36
  export const spec = {
36
37
  code: BIDDER_CODE,
37
38
  gvlid: 410,
38
- aliases: ['onefiftytwomedia', 'selectmedia', 'appaloosa', 'bidsxchange',
39
+ aliases: ['onefiftytwomedia', 'selectmedia', 'appaloosa', 'bidsxchange', 'streamkey',
39
40
  { code: 'navelix', gvlid: 380 },
40
41
  {
41
42
  code: 'mediafuse',