prebid.js 5.19.0 → 6.2.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 (161) hide show
  1. package/.babelrc.js +1 -10
  2. package/README.md +4 -2
  3. package/browsers.json +13 -37
  4. package/gulpfile.js +1 -0
  5. package/karma.conf.maker.js +1 -1
  6. package/modules/adheseBidAdapter.js +7 -2
  7. package/modules/adkernelBidAdapter.js +1 -0
  8. package/modules/adlivetechBidAdapter.md +61 -0
  9. package/modules/admixerBidAdapter.js +2 -1
  10. package/modules/adnuntiusBidAdapter.js +2 -1
  11. package/modules/adomikAnalyticsAdapter.js +10 -4
  12. package/modules/adplusBidAdapter.js +203 -0
  13. package/modules/adplusBidAdapter.md +39 -0
  14. package/modules/adyoulikeBidAdapter.js +7 -2
  15. package/modules/airgridRtdProvider.js +1 -1
  16. package/modules/appnexusBidAdapter.js +28 -5
  17. package/modules/atsAnalyticsAdapter.js +67 -46
  18. package/modules/atsAnalyticsAdapter.md +1 -0
  19. package/modules/beachfrontBidAdapter.js +14 -17
  20. package/modules/betweenBidAdapter.js +2 -1
  21. package/modules/browsiRtdProvider.js +106 -18
  22. package/modules/cleanioRtdProvider.js +192 -0
  23. package/modules/cleanioRtdProvider.md +59 -0
  24. package/modules/codefuelBidAdapter.js +1 -3
  25. package/modules/codefuelBidAdapter.md +3 -3
  26. package/modules/craftBidAdapter.js +5 -3
  27. package/modules/datablocksBidAdapter.js +3 -3
  28. package/modules/dchain.js +149 -0
  29. package/modules/dchain.md +45 -0
  30. package/modules/deepintentBidAdapter.js +1 -1
  31. package/modules/deltaprojectsBidAdapter.js +252 -0
  32. package/modules/deltaprojectsBidAdapter.md +32 -0
  33. package/modules/emx_digitalBidAdapter.js +9 -1
  34. package/modules/engageyaBidAdapter.js +68 -54
  35. package/modules/freewheel-sspBidAdapter.js +6 -0
  36. package/modules/glimpseBidAdapter.js +31 -16
  37. package/modules/goldbachBidAdapter.js +1176 -0
  38. package/modules/goldbachBidAdapter.md +151 -0
  39. package/modules/gptPreAuction.js +11 -5
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gumgumBidAdapter.js +5 -1
  42. package/modules/id5IdSystem.md +6 -6
  43. package/modules/imRtdProvider.js +31 -0
  44. package/modules/intersectionRtdProvider.js +114 -0
  45. package/modules/invibesBidAdapter.js +15 -9
  46. package/modules/ipromBidAdapter.js +79 -0
  47. package/modules/ixBidAdapter.js +173 -22
  48. package/modules/jixieBidAdapter.js +8 -2
  49. package/modules/justpremiumBidAdapter.js +6 -1
  50. package/modules/limelightDigitalBidAdapter.js +2 -1
  51. package/modules/livewrappedAnalyticsAdapter.js +5 -0
  52. package/modules/luponmediaBidAdapter.js +570 -0
  53. package/modules/merkleIdSystem.js +5 -0
  54. package/modules/missenaBidAdapter.js +89 -0
  55. package/modules/multibid/index.js +3 -3
  56. package/modules/nativoBidAdapter.js +32 -2
  57. package/modules/oguryBidAdapter.js +2 -1
  58. package/modules/openxBidAdapter.js +7 -2
  59. package/modules/operaadsBidAdapter.js +21 -1
  60. package/modules/otmBidAdapter.js +146 -0
  61. package/modules/otmBidAdapter.md +27 -26
  62. package/modules/outbrainBidAdapter.js +5 -0
  63. package/modules/playwireBidAdapter.md +61 -0
  64. package/modules/prebidServerBidAdapter/index.js +3 -3
  65. package/modules/pubmaticBidAdapter.js +5 -3
  66. package/modules/relaidoBidAdapter.js +86 -65
  67. package/modules/richaudienceBidAdapter.js +1 -1
  68. package/modules/rtdModule/index.js +2 -2
  69. package/modules/saambaaBidAdapter.js +420 -0
  70. package/modules/saambaaBidAdapter.md +65 -68
  71. package/modules/seedtagBidAdapter.js +6 -0
  72. package/modules/smaatoBidAdapter.js +9 -1
  73. package/modules/smartxBidAdapter.js +17 -1
  74. package/modules/sonobiBidAdapter.js +7 -0
  75. package/modules/sortableBidAdapter.js +1 -0
  76. package/modules/sspBCBidAdapter.js +34 -3
  77. package/modules/tappxBidAdapter.js +3 -1
  78. package/modules/teadsBidAdapter.js +3 -0
  79. package/modules/trustxBidAdapter.js +18 -7
  80. package/modules/undertoneBidAdapter.js +8 -1
  81. package/modules/userId/index.js +27 -2
  82. package/modules/ventes.md +71 -0
  83. package/modules/ventesBidAdapter.js +410 -0
  84. package/modules/ventesBidAdapter.md +93 -0
  85. package/modules/vidoomyBidAdapter.js +51 -100
  86. package/modules/visxBidAdapter.js +20 -3
  87. package/modules/visxBidAdapter.md +4 -6
  88. package/modules/yahoosspBidAdapter.js +6 -6
  89. package/modules/yahoosspBidAdapter.md +1 -1
  90. package/modules/yieldlabBidAdapter.js +41 -10
  91. package/modules/yieldlabBidAdapter.md +91 -48
  92. package/modules/yieldoneBidAdapter.js +115 -11
  93. package/package.json +6 -1
  94. package/src/adapterManager.js +14 -8
  95. package/src/auction.js +14 -13
  96. package/src/targeting.js +2 -2
  97. package/src/utils.js +7 -0
  98. package/test/spec/integration/faker/googletag.js +6 -0
  99. package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
  100. package/test/spec/modules/adnuntiusBidAdapter_spec.js +18 -0
  101. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
  102. package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
  103. package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
  104. package/test/spec/modules/appnexusBidAdapter_spec.js +65 -2
  105. package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
  106. package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
  107. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  108. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  109. package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
  110. package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
  111. package/test/spec/modules/dchain_spec.js +329 -0
  112. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  113. package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
  114. package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
  115. package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
  116. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
  117. package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
  118. package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
  119. package/test/spec/modules/gptPreAuction_spec.js +58 -4
  120. package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
  121. package/test/spec/modules/imRtdProvider_spec.js +25 -0
  122. package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
  123. package/test/spec/modules/invibesBidAdapter_spec.js +29 -4
  124. package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
  125. package/test/spec/modules/ixBidAdapter_spec.js +288 -5
  126. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  127. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  128. package/test/spec/modules/konduitWrapper_spec.js +0 -1
  129. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
  130. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +23 -4
  131. package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
  132. package/test/spec/modules/merkleIdSystem_spec.js +18 -0
  133. package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
  134. package/test/spec/modules/multibid_spec.js +31 -31
  135. package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
  136. package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
  137. package/test/spec/modules/openxBidAdapter_spec.js +5 -26
  138. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  139. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  140. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  141. package/test/spec/modules/prebidServerBidAdapter_spec.js +19 -2
  142. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  143. package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
  144. package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
  145. package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
  146. package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
  147. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  148. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  149. package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
  150. package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
  151. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  152. package/test/spec/modules/trustxBidAdapter_spec.js +45 -3
  153. package/test/spec/modules/userId_spec.js +51 -0
  154. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  155. package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
  156. package/test/spec/modules/visxBidAdapter_spec.js +121 -5
  157. package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
  158. package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
  159. package/test/spec/unit/core/adapterManager_spec.js +26 -7
  160. package/test/spec/unit/core/targeting_spec.js +44 -0
  161. package/wdio.conf.js +1 -1
@@ -1,7 +1,4 @@
1
- import {
2
- BANNER,
3
- NATIVE
4
- } from '../src/mediaTypes.js';
1
+ import { BANNER, NATIVE } from '../src/mediaTypes.js';
5
2
  import { createTrackPixelHtml } from '../src/utils.js';
6
3
 
7
4
  const {
@@ -10,14 +7,21 @@ const {
10
7
  const BIDDER_CODE = 'engageya';
11
8
  const ENDPOINT_URL = 'https://recs.engageya.com/rec-api/getrecs.json';
12
9
  const ENDPOINT_METHOD = 'GET';
10
+ const SUPPORTED_SIZES = [
11
+ [100, 75], [236, 202], [100, 100], [130, 130], [200, 200], [250, 250], [300, 272], [300, 250], [300, 230], [300, 214], [300, 187], [300, 166], [300, 150], [300, 133], [300, 120], [400, 200], [300, 200], [250, 377], [620, 410], [207, 311], [310, 166], [310, 333], [190, 106], [228, 132], [300, 174], [80, 60], [600, 500], [600, 600], [1080, 610], [1080, 610], [624, 350], [650, 1168], [1080, 1920], [300, 374]
12
+ ];
13
13
 
14
- function getPageUrl() {
15
- var pUrl = window.location.href;
16
- if (isInIframe()) {
17
- pUrl = document.referrer ? document.referrer : pUrl;
14
+ function getPageUrl(bidRequest, bidderRequest) {
15
+ if (bidRequest.params.pageUrl && bidRequest.params.pageUrl != '[PAGE_URL]') {
16
+ return bidRequest.params.pageUrl;
18
17
  }
19
- pUrl = encodeURIComponent(pUrl);
20
- return pUrl;
18
+ if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) {
19
+ return bidderRequest.refererInfo.referer;
20
+ }
21
+ const pageUrl = (isInIframe() && document.referrer)
22
+ ? document.referrer
23
+ : window.location.href;
24
+ return encodeURIComponent(pageUrl);
21
25
  }
22
26
 
23
27
  function isInIframe() {
@@ -33,13 +37,14 @@ function getImageSrc(rec) {
33
37
  return rec.thumbnail_path.indexOf('http') === -1 ? 'https:' + rec.thumbnail_path : rec.thumbnail_path;
34
38
  }
35
39
 
36
- function getImpressionTrackers(rec) {
40
+ function getImpressionTrackers(rec, response) {
41
+ const responseTrackers = [response.viewPxl];
37
42
  if (!rec.trackers) {
38
- return [];
43
+ return responseTrackers;
39
44
  }
40
45
  const impressionTrackers = rec.trackers.impressionPixels || [];
41
46
  const viewTrackers = rec.trackers.viewPixels || [];
42
- return [...impressionTrackers, ...viewTrackers];
47
+ return [...impressionTrackers, ...viewTrackers, ...responseTrackers];
43
48
  }
44
49
 
45
50
  function parseNativeResponse(rec, response) {
@@ -56,7 +61,7 @@ function parseNativeResponse(rec, response) {
56
61
  displayUrl: rec.url,
57
62
  cta: '',
58
63
  sponsoredBy: rec.displayName,
59
- impressionTrackers: getImpressionTrackers(rec),
64
+ impressionTrackers: getImpressionTrackers(rec, response),
60
65
  };
61
66
  }
62
67
 
@@ -74,56 +79,65 @@ function parseBannerResponse(rec, response) {
74
79
  }
75
80
  const title = rec.title && rec.title.trim() ? `<div class="eng_tag_ttl" style="display: none">${rec.title}</div>` : '';
76
81
  const displayName = rec.displayName && title ? `<div class="eng_tag_brnd" style="display: none">${rec.displayName}</div>` : '';
77
- const trackers = getImpressionTrackers(rec)
82
+ const trackers = getImpressionTrackers(rec, response)
78
83
  .map(createTrackPixelHtml)
79
84
  .join('');
80
85
  return `<html><body>${style}<div id="ENG_TAG"><a href="${rec.clickUrl}" target=_blank><img class="eng_tag_img" src="${getImageSrc(rec)}" style="width:${response.imageWidth}px;height:${response.imageHeight}px;" alt="${rec.title}"/>${displayName}${title}</a>${trackers}</div></body></html>`;
81
86
  }
82
87
 
88
+ function getImageSize(bidRequest) {
89
+ if (bidRequest.sizes && bidRequest.sizes.length > 0) {
90
+ return bidRequest.sizes[0];
91
+ } else if (bidRequest.nativeParams && bidRequest.nativeParams.image && bidRequest.nativeParams.image.sizes) {
92
+ return bidRequest.nativeParams.image.sizes;
93
+ }
94
+ return [-1, -1];
95
+ }
96
+
97
+ function isValidSize([width, height]) {
98
+ if (!width || !height) {
99
+ return false;
100
+ }
101
+ return SUPPORTED_SIZES.some(([supportedWidth, supportedHeight]) => supportedWidth === width && supportedHeight === height);
102
+ }
103
+
83
104
  export const spec = {
84
105
  code: BIDDER_CODE,
85
106
  supportedMediaTypes: [BANNER, NATIVE],
86
- isBidRequestValid: function (bid) {
87
- return bid && bid.params && bid.params.hasOwnProperty('widgetId') && bid.params.hasOwnProperty('websiteId') && !isNaN(bid.params.widgetId) && !isNaN(bid.params.websiteId);
107
+
108
+ isBidRequestValid: function (bidRequest) {
109
+ return bidRequest &&
110
+ bidRequest.params &&
111
+ bidRequest.params.hasOwnProperty('widgetId') &&
112
+ bidRequest.params.hasOwnProperty('websiteId') &&
113
+ !isNaN(bidRequest.params.widgetId) &&
114
+ !isNaN(bidRequest.params.websiteId) &&
115
+ isValidSize(getImageSize(bidRequest));
88
116
  },
89
117
 
90
118
  buildRequests: function (validBidRequests, bidderRequest) {
91
- var bidRequests = [];
92
- if (validBidRequests && validBidRequests.length > 0) {
93
- validBidRequests.forEach(function (bidRequest) {
94
- if (bidRequest.params) {
95
- var mediaType = bidRequest.hasOwnProperty('nativeParams') ? 1 : 2;
96
- var imageWidth = -1;
97
- var imageHeight = -1;
98
- if (bidRequest.sizes && bidRequest.sizes.length > 0) {
99
- imageWidth = bidRequest.sizes[0][0];
100
- imageHeight = bidRequest.sizes[0][1];
101
- } else if (bidRequest.nativeParams && bidRequest.nativeParams.image && bidRequest.nativeParams.image.sizes) {
102
- imageWidth = bidRequest.nativeParams.image.sizes[0];
103
- imageHeight = bidRequest.nativeParams.image.sizes[1];
104
- }
105
-
106
- var widgetId = bidRequest.params.widgetId;
107
- var websiteId = bidRequest.params.websiteId;
108
- var pageUrl = (bidRequest.params.pageUrl && bidRequest.params.pageUrl != '[PAGE_URL]') ? bidRequest.params.pageUrl : '';
109
- if (!pageUrl) {
110
- pageUrl = (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) ? bidderRequest.refererInfo.referer : getPageUrl();
111
- }
112
- var bidId = bidRequest.bidId;
113
- var finalUrl = ENDPOINT_URL + '?pubid=0&webid=' + websiteId + '&wid=' + widgetId + '&url=' + pageUrl + '&ireqid=' + bidId + '&pbtpid=' + mediaType + '&imw=' + imageWidth + '&imh=' + imageHeight;
114
- if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprApplies && bidderRequest.consentString) {
115
- finalUrl += '&is_gdpr=1&gdpr_consent=' + bidderRequest.consentString;
116
- }
117
- bidRequests.push({
118
- url: finalUrl,
119
- method: ENDPOINT_METHOD,
120
- data: ''
121
- });
122
- }
123
- });
119
+ if (!validBidRequests) {
120
+ return [];
124
121
  }
125
-
126
- return bidRequests;
122
+ return validBidRequests.map(bidRequest => {
123
+ if (bidRequest.params) {
124
+ const mediaType = bidRequest.hasOwnProperty('nativeParams') ? 1 : 2;
125
+ const [imageWidth, imageHeight] = getImageSize(bidRequest);
126
+ const widgetId = bidRequest.params.widgetId;
127
+ const websiteId = bidRequest.params.websiteId;
128
+ const pageUrl = getPageUrl(bidRequest, bidderRequest);
129
+ const bidId = bidRequest.bidId;
130
+ let finalUrl = ENDPOINT_URL + '?pubid=0&webid=' + websiteId + '&wid=' + widgetId + '&url=' + pageUrl + '&ireqid=' + bidId + '&pbtpid=' + mediaType + '&imw=' + imageWidth + '&imh=' + imageHeight;
131
+ if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprApplies && bidderRequest.consentString) {
132
+ finalUrl += '&is_gdpr=1&gdpr_consent=' + bidderRequest.consentString;
133
+ }
134
+ return {
135
+ url: finalUrl,
136
+ method: ENDPOINT_METHOD,
137
+ data: ''
138
+ };
139
+ }
140
+ }).filter(Boolean);
127
141
  },
128
142
 
129
143
  interpretResponse: function (serverResponse, bidRequest) {
@@ -135,12 +149,12 @@ export const spec = {
135
149
  return response.recs.map(rec => {
136
150
  let bid = {
137
151
  requestId: response.ireqId,
138
- cpm: rec.ecpm,
139
152
  width: response.imageWidth,
140
153
  height: response.imageHeight,
141
154
  creativeId: rec.postId,
155
+ cpm: rec.pecpm || (rec.ecpm / 100),
142
156
  currency: 'USD',
143
- netRevenue: false,
157
+ netRevenue: !!rec.pecpm,
144
158
  ttl: 360,
145
159
  meta: { advertiserDomains: rec.domain ? [rec.domain] : [] },
146
160
  }
@@ -312,6 +312,12 @@ export const spec = {
312
312
  requestParams._fw_us_privacy = bidderRequest.uspConsent;
313
313
  }
314
314
 
315
+ // Add schain object
316
+ var schain = currentBidRequest.schain;
317
+ if (schain) {
318
+ requestParams.schain = schain;
319
+ }
320
+
315
321
  var vastParams = currentBidRequest.params.vastUrlParams;
316
322
  if (typeof vastParams === 'object') {
317
323
  for (var key in vastParams) {
@@ -1,19 +1,22 @@
1
1
  import { BANNER } from '../src/mediaTypes.js'
2
+ import { config } from '../src/config.js'
2
3
  import { getStorageManager } from '../src/storageManager.js'
3
4
  import { isArray } from '../src/utils.js'
4
5
  import { registerBidder } from '../src/adapters/bidderFactory.js'
5
6
 
6
7
  const storageManager = getStorageManager()
7
8
 
9
+ const GVLID = 1012
8
10
  const BIDDER_CODE = 'glimpse'
9
11
  const ENDPOINT = 'https://api.glimpsevault.io/ads/serving/public/v1/prebid'
10
12
  const LOCAL_STORAGE_KEY = {
11
- glimpse: {
13
+ vault: {
12
14
  jwt: 'gp_vault_jwt',
13
15
  },
14
16
  }
15
17
 
16
18
  export const spec = {
19
+ gvlid: GVLID,
17
20
  code: BIDDER_CODE,
18
21
  supportedMediaTypes: [BANNER],
19
22
 
@@ -37,20 +40,28 @@ export const spec = {
37
40
  * @returns {ServerRequest}
38
41
  */
39
42
  buildRequests: (validBidRequests, bidderRequest) => {
40
- const networkId = window.networkId || -1
41
- const bids = validBidRequests.map(processBidRequest)
43
+ const demo = config.getConfig('glimpse.demo') || false
44
+ const account = config.getConfig('glimpse.account') || -1
45
+ const demand = config.getConfig('glimpse.demand') || 'glimpse'
46
+ const keywords = config.getConfig('glimpse.keywords') || {}
47
+
48
+ const auth = getVaultJwt()
42
49
  const referer = getReferer(bidderRequest)
43
50
  const gdprConsent = getGdprConsentChoice(bidderRequest)
44
- const jwt = getVaultJwt()
51
+ const bids = validBidRequests.map((bidRequest) => {
52
+ return processBidRequest(bidRequest, keywords)
53
+ })
45
54
 
46
55
  const data = {
47
- auth: jwt,
56
+ auth,
48
57
  data: {
49
58
  bidderCode: spec.code,
50
- networkId,
51
- bids,
59
+ demo,
60
+ account,
61
+ demand,
52
62
  referer,
53
63
  gdprConsent,
64
+ bids,
54
65
  }
55
66
  }
56
67
 
@@ -65,10 +76,9 @@ export const spec = {
65
76
  /**
66
77
  * Parse response from Glimpse server
67
78
  * @param bidResponse {ServerResponse}
68
- * @param bidRequest {BidRequest}
69
79
  * @returns {Bid[]}
70
80
  */
71
- interpretResponse: (bidResponse, bidRequest) => {
81
+ interpretResponse: (bidResponse) => {
72
82
  const isValidResponse = isValidBidResponse(bidResponse)
73
83
 
74
84
  if (isValidResponse) {
@@ -81,16 +91,20 @@ export const spec = {
81
91
  },
82
92
  }
83
93
 
84
- function processBidRequest(bidRequest) {
94
+ function processBidRequest(bidRequest, globalKeywords) {
85
95
  const sizes = normalizeSizes(bidRequest.sizes)
86
- const keywords = bidRequest.params.keywords || []
96
+ const bidKeywords = bidRequest.params.keywords || {}
97
+ const keywords = {
98
+ ...globalKeywords,
99
+ ...bidKeywords,
100
+ }
87
101
 
88
102
  return {
103
+ unitCode: bidRequest.adUnitCode,
89
104
  bidId: bidRequest.bidId,
90
105
  placementId: bidRequest.params.placementId,
91
- unitCode: bidRequest.adUnitCode,
92
- sizes,
93
106
  keywords,
107
+ sizes,
94
108
  }
95
109
  }
96
110
 
@@ -124,7 +138,8 @@ function getReferer(bidderRequest) {
124
138
  function getGdprConsentChoice(bidderRequest) {
125
139
  const hasGdprConsent =
126
140
  hasValue(bidderRequest) &&
127
- hasValue(bidderRequest.gdprConsent)
141
+ hasValue(bidderRequest.gdprConsent) &&
142
+ hasStringValue(bidderRequest.gdprConsent.consentString)
128
143
 
129
144
  if (hasGdprConsent) {
130
145
  return bidderRequest.gdprConsent
@@ -138,11 +153,11 @@ function getGdprConsentChoice(bidderRequest) {
138
153
  }
139
154
 
140
155
  function setVaultJwt(auth) {
141
- storageManager.setDataInLocalStorage(LOCAL_STORAGE_KEY.glimpse.jwt, auth)
156
+ storageManager.setDataInLocalStorage(LOCAL_STORAGE_KEY.vault.jwt, auth)
142
157
  }
143
158
 
144
159
  function getVaultJwt() {
145
- return storageManager.getDataFromLocalStorage(LOCAL_STORAGE_KEY.glimpse.jwt) || ''
160
+ return storageManager.getDataFromLocalStorage(LOCAL_STORAGE_KEY.vault.jwt) || ''
146
161
  }
147
162
 
148
163
  function isValidBidResponse(bidResponse) {