prebid.js 5.18.0 → 6.1.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 (150) hide show
  1. package/.babelrc.js +1 -10
  2. package/README.md +3 -1
  3. package/browsers.json +1 -8
  4. package/gulpfile.js +1 -0
  5. package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
  6. package/modules/.submodules.json +1 -0
  7. package/modules/adfBidAdapter.js +21 -16
  8. package/modules/adheseBidAdapter.js +7 -2
  9. package/modules/adkernelBidAdapter.js +1 -0
  10. package/modules/adlivetechBidAdapter.md +61 -0
  11. package/modules/adomikAnalyticsAdapter.js +10 -4
  12. package/modules/adtelligentBidAdapter.js +2 -1
  13. package/modules/airgridRtdProvider.js +1 -1
  14. package/modules/akamaiDapRtdProvider.js +474 -0
  15. package/modules/akamaiDapRtdProvider.md +47 -0
  16. package/modules/appnexusBidAdapter.js +9 -3
  17. package/modules/atsAnalyticsAdapter.js +67 -46
  18. package/modules/atsAnalyticsAdapter.md +1 -0
  19. package/modules/betweenBidAdapter.js +20 -3
  20. package/modules/browsiRtdProvider.js +106 -18
  21. package/modules/cleanioRtdProvider.js +192 -0
  22. package/modules/cleanioRtdProvider.md +59 -0
  23. package/modules/codefuelBidAdapter.js +181 -0
  24. package/modules/codefuelBidAdapter.md +111 -0
  25. package/modules/connectIdSystem.js +104 -0
  26. package/modules/connectIdSystem.md +33 -0
  27. package/modules/datablocksBidAdapter.js +3 -3
  28. package/modules/deepintentBidAdapter.js +107 -10
  29. package/modules/deepintentBidAdapter.md +36 -1
  30. package/modules/deltaprojectsBidAdapter.js +252 -0
  31. package/modules/deltaprojectsBidAdapter.md +32 -0
  32. package/modules/engageyaBidAdapter.js +171 -0
  33. package/modules/glimpseBidAdapter.js +31 -16
  34. package/modules/gptPreAuction.js +11 -5
  35. package/modules/gridBidAdapter.js +1 -0
  36. package/modules/gumgumBidAdapter.js +8 -0
  37. package/modules/id5IdSystem.md +6 -6
  38. package/modules/imRtdProvider.js +31 -0
  39. package/modules/inskinBidAdapter.js +7 -3
  40. package/modules/ixBidAdapter.js +174 -22
  41. package/modules/jixieBidAdapter.js +8 -2
  42. package/modules/justpremiumBidAdapter.js +6 -1
  43. package/modules/limelightDigitalBidAdapter.js +22 -2
  44. package/modules/livewrappedAnalyticsAdapter.js +49 -1
  45. package/modules/merkleIdSystem.js +5 -0
  46. package/modules/multibid/index.js +3 -3
  47. package/modules/nativoBidAdapter.js +32 -2
  48. package/modules/nextMillenniumBidAdapter.js +12 -3
  49. package/modules/oguryBidAdapter.js +16 -2
  50. package/modules/openxBidAdapter.js +40 -23
  51. package/modules/operaadsBidAdapter.js +21 -1
  52. package/modules/otmBidAdapter.js +146 -0
  53. package/modules/otmBidAdapter.md +27 -26
  54. package/modules/outbrainBidAdapter.js +5 -0
  55. package/modules/playwireBidAdapter.md +61 -0
  56. package/modules/prebidServerBidAdapter/index.js +3 -3
  57. package/modules/publinkIdSystem.js +11 -6
  58. package/modules/pubmaticBidAdapter.js +2 -0
  59. package/modules/rtdModule/index.js +2 -2
  60. package/modules/saambaaBidAdapter.js +420 -0
  61. package/modules/saambaaBidAdapter.md +65 -68
  62. package/modules/seedtagBidAdapter.js +6 -0
  63. package/modules/smaatoBidAdapter.js +6 -1
  64. package/modules/sonobiBidAdapter.js +7 -0
  65. package/modules/sortableBidAdapter.js +1 -0
  66. package/modules/sspBCBidAdapter.js +34 -3
  67. package/modules/teadsBidAdapter.js +3 -0
  68. package/modules/tripleliftBidAdapter.js +22 -5
  69. package/modules/trustxBidAdapter.js +18 -7
  70. package/modules/undertoneBidAdapter.js +9 -5
  71. package/modules/undertoneBidAdapter.md +5 -1
  72. package/modules/userId/eids.js +18 -0
  73. package/modules/userId/eids.md +7 -0
  74. package/modules/userId/userId.md +12 -0
  75. package/modules/ventesBidAdapter.js +370 -0
  76. package/modules/ventesBidAdapter.md +94 -0
  77. package/modules/videobyteBidAdapter.js +13 -6
  78. package/modules/videobyteBidAdapter.md +49 -0
  79. package/modules/vidoomyBidAdapter.js +51 -100
  80. package/modules/visxBidAdapter.js +1 -1
  81. package/modules/yahoosspBidAdapter.js +6 -6
  82. package/modules/yieldlabBidAdapter.js +41 -10
  83. package/modules/yieldlabBidAdapter.md +91 -48
  84. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  85. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  86. package/package.json +6 -1
  87. package/src/adapterManager.js +19 -8
  88. package/src/adapters/bidderFactory.js +4 -3
  89. package/src/auction.js +11 -11
  90. package/src/constants.json +1 -0
  91. package/src/secureCreatives.js +6 -7
  92. package/src/targeting.js +11 -9
  93. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  94. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  95. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
  96. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  97. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  98. package/test/spec/modules/appnexusBidAdapter_spec.js +16 -1
  99. package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
  100. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  101. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  102. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  103. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  104. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  105. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  106. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  107. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  108. package/test/spec/modules/engageyaBidAdapter_spec.js +422 -0
  109. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  110. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  111. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  112. package/test/spec/modules/gumgumBidAdapter_spec.js +5 -1
  113. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  114. package/test/spec/modules/ixBidAdapter_spec.js +298 -5
  115. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  116. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  117. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  118. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  119. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +52 -7
  120. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  121. package/test/spec/modules/multibid_spec.js +31 -31
  122. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  123. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  124. package/test/spec/modules/oguryBidAdapter_spec.js +66 -23
  125. package/test/spec/modules/openxBidAdapter_spec.js +90 -13
  126. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  127. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  128. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  129. package/test/spec/modules/prebidServerBidAdapter_spec.js +19 -2
  130. package/test/spec/modules/publinkIdSystem_spec.js +6 -6
  131. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  132. package/test/spec/modules/smaatoBidAdapter_spec.js +30 -0
  133. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  134. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  135. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  136. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  137. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  138. package/test/spec/modules/trustxBidAdapter_spec.js +45 -3
  139. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  140. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  141. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  142. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  143. package/test/spec/modules/visxBidAdapter_spec.js +1 -1
  144. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  145. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  146. package/test/spec/unit/core/adapterManager_spec.js +56 -6
  147. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  148. package/test/spec/unit/pbjs_api_spec.js +37 -2
  149. package/test/spec/unit/secureCreatives_spec.js +54 -25
  150. package/wdio.conf.js +1 -1
package/.babelrc.js CHANGED
@@ -14,16 +14,7 @@ module.exports = {
14
14
  [
15
15
  useLocal('@babel/preset-env'),
16
16
  {
17
- "targets": {
18
- "browsers": [
19
- "chrome >= 75",
20
- "safari >=10",
21
- "edge >= 70",
22
- "ff >= 70",
23
- "ie >= 11",
24
- "ios >= 11"
25
- ]
26
- }
17
+ "useBuiltIns": "entry"
27
18
  }
28
19
  ]
29
20
  ],
package/README.md CHANGED
@@ -59,6 +59,8 @@ module.exports = {
59
59
  loader: 'babel-loader',
60
60
  // presets and plugins for Prebid.js must be manually specified separate from your other babel rule.
61
61
  // this can be accomplished by requiring prebid's .babelrc.js file (requires Babel 7 and Node v8.9.0+)
62
+ // as of Prebid 6, babelrc.js only targets modern browsers. One can change the targets and build for
63
+ // older browsers if they prefer, but integration tests on ie11 were removed in Prebid.js 6.0
62
64
  options: require('prebid.js/.babelrc.js')
63
65
  }
64
66
  }
@@ -314,7 +316,7 @@ For instructions on writing tests for Prebid.js, see [Testing Prebid.js](http://
314
316
 
315
317
  ### Supported Browsers
316
318
 
317
- Prebid.js is supported on IE11 and modern browsers.
319
+ Prebid.js is supported on IE11 and modern browsers until 5.x. 6.x+ transpiles to target >0.25%; not Opera Mini; not IE11.
318
320
 
319
321
  ### Governance
320
322
  Review our governance model [here](https://github.com/prebid/Prebid.js/tree/master/governance.md).
package/browsers.json CHANGED
@@ -15,14 +15,6 @@
15
15
  "device": null,
16
16
  "os": "Windows"
17
17
  },
18
- "bs_ie_11_windows_10": {
19
- "base": "BrowserStack",
20
- "os_version": "10",
21
- "browser": "ie",
22
- "browser_version": "11.0",
23
- "device": null,
24
- "os": "Windows"
25
- },
26
18
  "bs_chrome_90_windows_10": {
27
19
  "base": "BrowserStack",
28
20
  "os_version": "10",
@@ -71,4 +63,5 @@
71
63
  "device": null,
72
64
  "os": "OS X"
73
65
  }
66
+
74
67
  }
package/gulpfile.js CHANGED
@@ -76,6 +76,7 @@ function lint(done) {
76
76
  'modules/**/*.js',
77
77
  'test/**/*.js',
78
78
  'plugins/**/*.js',
79
+ '!plugins/**/node_modules/**',
79
80
  './*.js'
80
81
  ], { base: './' })
81
82
  .pipe(gulpif(argv.nolintfix, eslint(), eslint({ fix: true })))
@@ -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
  }
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
4
  import { BANNER, VIDEO } from '../src/mediaTypes.js';
5
+ import { config } from '../src/config.js';
5
6
 
6
7
  const BIDDER_CODE = 'adhese';
7
8
  const GVLID = 553;
@@ -20,11 +21,15 @@ export const spec = {
20
21
  if (validBidRequests.length === 0) {
21
22
  return null;
22
23
  }
24
+
23
25
  const { gdprConsent, refererInfo } = bidderRequest;
24
26
 
27
+ const adheseConfig = config.getConfig('adhese');
25
28
  const gdprParams = (gdprConsent && gdprConsent.consentString) ? { xt: [gdprConsent.consentString] } : {};
26
29
  const refererParams = (refererInfo && refererInfo.referer) ? { xf: [base64urlEncode(refererInfo.referer)] } : {};
27
- const commonParams = { ...gdprParams, ...refererParams };
30
+ const globalCustomParams = (adheseConfig && adheseConfig.globalTargets) ? cleanTargets(adheseConfig.globalTargets) : {};
31
+ const commonParams = { ...globalCustomParams, ...gdprParams, ...refererParams };
32
+ const vastContentAsUrl = !(adheseConfig && adheseConfig.vastContentAsUrl == false);
28
33
 
29
34
  const slots = validBidRequests.map(bid => ({
30
35
  slotname: bidToSlotName(bid),
@@ -34,7 +39,7 @@ export const spec = {
34
39
  const payload = {
35
40
  slots: slots,
36
41
  parameters: commonParams,
37
- vastContentAsUrl: true,
42
+ vastContentAsUrl: vastContentAsUrl,
38
43
  user: {
39
44
  ext: {
40
45
  eids: getEids(validBidRequests),
@@ -75,6 +75,7 @@ export const spec = {
75
75
  {code: 'denakop'},
76
76
  {code: 'rtbanalytica'},
77
77
  {code: 'unibots'},
78
+ {code: 'catapultx'},
78
79
  {code: 'ergadx'},
79
80
  {code: 'turktelekom'}
80
81
  ],
@@ -0,0 +1,61 @@
1
+ # Overview
2
+
3
+ Module Name: Adlivetech Bidder Adapter
4
+ Module Type: Bidder Adapter
5
+ Maintainer: grid-tech@themediagrid.com
6
+
7
+ # Description
8
+
9
+ Module that connects to Grid demand source to fetch bids.
10
+ The adapter is GDPR compliant and supports banner and video (instream and outstream).
11
+
12
+ # Test Parameters
13
+ ```
14
+ var adUnits = [
15
+ {
16
+ code: 'test-div',
17
+ sizes: [[300, 250]],
18
+ bids: [
19
+ {
20
+ bidder: "adlivetech",
21
+ params: {
22
+ uid: '1',
23
+ bidFloor: 0.5
24
+ }
25
+ }
26
+ ]
27
+ },{
28
+ code: 'test-div',
29
+ sizes: [[728, 90]],
30
+ bids: [
31
+ {
32
+ bidder: "adlivetech",
33
+ params: {
34
+ uid: 2,
35
+ keywords: {
36
+ brandsafety: ['disaster'],
37
+ topic: ['stress', 'fear']
38
+ }
39
+ }
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ code: 'test-div',
45
+ sizes: [[728, 90]],
46
+ mediaTypes: { video: {
47
+ context: 'instream',
48
+ playerSize: [728, 90],
49
+ mimes: ['video/mp4']
50
+ },
51
+ bids: [
52
+ {
53
+ bidder: "adlivetech",
54
+ params: {
55
+ uid: 11
56
+ }
57
+ }
58
+ ]
59
+ }
60
+ ];
61
+ ```
@@ -12,6 +12,7 @@ const bidRequested = CONSTANTS.EVENTS.BID_REQUESTED;
12
12
  const bidResponse = CONSTANTS.EVENTS.BID_RESPONSE;
13
13
  const bidWon = CONSTANTS.EVENTS.BID_WON;
14
14
  const bidTimeout = CONSTANTS.EVENTS.BID_TIMEOUT;
15
+ const ua = navigator.userAgent;
15
16
 
16
17
  let adomikAdapter = Object.assign(adapter({}),
17
18
  {
@@ -47,7 +48,7 @@ let adomikAdapter = Object.assign(adapter({}),
47
48
  type: 'request',
48
49
  event: {
49
50
  bidder: bid.bidder.toUpperCase(),
50
- placementCode: bid.placementCode
51
+ placementCode: bid.adUnitCode
51
52
  }
52
53
  });
53
54
  });
@@ -67,6 +68,10 @@ adomikAdapter.initializeBucketEvents = function() {
67
68
  adomikAdapter.bucketEvents = [];
68
69
  }
69
70
 
71
+ adomikAdapter.maxPartLength = function () {
72
+ return (ua.includes(' MSIE ')) ? 1600 : 60000;
73
+ };
74
+
70
75
  adomikAdapter.sendTypedEvent = function() {
71
76
  const groupedTypedEvents = adomikAdapter.buildTypedEvents();
72
77
 
@@ -108,9 +113,10 @@ adomikAdapter.sendTypedEvent = function() {
108
113
  // Encode object in base64
109
114
  const encodedBuf = window.btoa(stringBulkEvents);
110
115
 
111
- // Create final url and split it in 1600 characters max (+endpoint length)
116
+ // Create final url and split it (+endpoint length)
112
117
  const encodedUri = encodeURIComponent(encodedBuf);
113
- const splittedUrl = encodedUri.match(/.{1,1600}/g);
118
+ const maxLength = adomikAdapter.maxPartLength();
119
+ const splittedUrl = encodedUri.match(new RegExp(`.{1,${maxLength}}`, 'g'));
114
120
 
115
121
  splittedUrl.forEach((split, i) => {
116
122
  const partUrl = `${split}&id=${adomikAdapter.currentContext.id}&part=${i}&on=${splittedUrl.length - 1}`;
@@ -121,7 +127,7 @@ adomikAdapter.sendTypedEvent = function() {
121
127
 
122
128
  adomikAdapter.sendWonEvent = function (wonEvent) {
123
129
  const stringWonEvent = JSON.stringify(wonEvent)
124
- logInfo('Won event sent to adomik prebid analytic ' + wonEvent);
130
+ logInfo('Won event sent to adomik prebid analytic ' + stringWonEvent);
125
131
 
126
132
  // Encode object in base64
127
133
  const encodedBuf = window.btoa(stringWonEvent);
@@ -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',
@@ -33,7 +33,7 @@ export function attachScriptTagToDOM(rtdConfig) {
33
33
  edktInitializor.load = function(e) {
34
34
  var p = e || 'sdk';
35
35
  var n = document.createElement('script');
36
- n.type = 'text/javascript';
36
+ n.type = 'module';
37
37
  n.async = true;
38
38
  n.src = 'https://cdn.edkt.io/' + p + '/edgekit.min.js';
39
39
  document.getElementsByTagName('head')[0].appendChild(n);