prebid.js 5.16.0 → 5.20.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 (182) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/browsers.json +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/adgenerationBidAdapter.js +28 -4
  9. package/modules/adkernelBidAdapter.js +3 -1
  10. package/modules/admixerBidAdapter.js +11 -0
  11. package/modules/adnuntiusBidAdapter.js +1 -0
  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/aolBidAdapter.js +2 -1
  17. package/modules/appnexusBidAdapter.js +5 -3
  18. package/modules/atsAnalyticsAdapter.js +89 -63
  19. package/modules/atsAnalyticsAdapter.md +1 -0
  20. package/modules/betweenBidAdapter.js +20 -3
  21. package/modules/bliinkBidAdapter.js +58 -32
  22. package/modules/bliinkBidAdapter.md +29 -6
  23. package/modules/browsiRtdProvider.js +106 -18
  24. package/modules/cleanioRtdProvider.js +192 -0
  25. package/modules/cleanioRtdProvider.md +59 -0
  26. package/modules/codefuelBidAdapter.js +183 -0
  27. package/modules/codefuelBidAdapter.md +111 -0
  28. package/modules/connectIdSystem.js +104 -0
  29. package/modules/connectIdSystem.md +33 -0
  30. package/modules/cwireBidAdapter.js +272 -0
  31. package/modules/cwireBidAdapter.md +43 -0
  32. package/modules/deepintentBidAdapter.js +106 -9
  33. package/modules/deepintentBidAdapter.md +36 -1
  34. package/modules/deltaprojectsBidAdapter.js +252 -0
  35. package/modules/deltaprojectsBidAdapter.md +32 -0
  36. package/modules/dgkeywordRtdProvider.js +0 -1
  37. package/modules/engageyaBidAdapter.js +157 -0
  38. package/modules/glimpseBidAdapter.js +160 -48
  39. package/modules/glimpseBidAdapter.md +11 -74
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gridNMBidAdapter.js +7 -6
  42. package/modules/gumgumBidAdapter.js +16 -2
  43. package/modules/iasRtdProvider.js +83 -67
  44. package/modules/inskinBidAdapter.js +7 -3
  45. package/modules/ixBidAdapter.js +8 -1
  46. package/modules/jixieBidAdapter.js +8 -2
  47. package/modules/justpremiumBidAdapter.js +6 -1
  48. package/modules/kargoBidAdapter.js +14 -7
  49. package/modules/kargoBidAdapter.md +20 -0
  50. package/modules/limelightDigitalBidAdapter.js +22 -2
  51. package/modules/livewrappedAnalyticsAdapter.js +53 -3
  52. package/modules/mediakeysBidAdapter.js +405 -14
  53. package/modules/mediakeysBidAdapter.md +108 -0
  54. package/modules/multibid/index.js +3 -3
  55. package/modules/mytargetBidAdapter.js +112 -0
  56. package/modules/nativoBidAdapter.js +48 -29
  57. package/modules/nativoBidAdapter.md +0 -1
  58. package/modules/nextMillenniumBidAdapter.js +12 -3
  59. package/modules/nextrollBidAdapter.js +375 -0
  60. package/modules/nobidBidAdapter.js +2 -1
  61. package/modules/oguryBidAdapter.js +36 -7
  62. package/modules/openxBidAdapter.js +34 -22
  63. package/modules/operaadsBidAdapter.js +21 -1
  64. package/modules/otmBidAdapter.js +146 -0
  65. package/modules/otmBidAdapter.md +27 -26
  66. package/modules/outbrainBidAdapter.js +5 -0
  67. package/modules/pixfutureBidAdapter.js +24 -4
  68. package/modules/pixfutureBidAdapter.md +127 -0
  69. package/modules/playwireBidAdapter.md +61 -0
  70. package/modules/prebidServerBidAdapter/index.js +1 -1
  71. package/modules/proxistoreBidAdapter.js +4 -6
  72. package/modules/publinkIdSystem.js +17 -7
  73. package/modules/publinkIdSystem.md +7 -2
  74. package/modules/pubmaticBidAdapter.js +22 -6
  75. package/modules/pubmaticBidAdapter.md +1 -1
  76. package/modules/relaidoBidAdapter.js +8 -2
  77. package/modules/rtdModule/index.js +2 -2
  78. package/modules/sharethroughBidAdapter.js +12 -19
  79. package/modules/slimcutBidAdapter.js +121 -0
  80. package/modules/sonobiBidAdapter.js +7 -0
  81. package/modules/sortableBidAdapter.js +1 -0
  82. package/modules/spotxBidAdapter.js +15 -1
  83. package/modules/sspBCBidAdapter.js +207 -12
  84. package/modules/sspBCBidAdapter.md +1 -1
  85. package/modules/talkadsBidAdapter.js +129 -0
  86. package/modules/talkadsBidAdapter.md +60 -0
  87. package/modules/tappxBidAdapter.js +6 -5
  88. package/modules/teadsBidAdapter.js +3 -0
  89. package/modules/tripleliftBidAdapter.js +22 -5
  90. package/modules/trustxBidAdapter.js +17 -11
  91. package/modules/undertoneBidAdapter.js +9 -5
  92. package/modules/undertoneBidAdapter.md +5 -1
  93. package/modules/unicornBidAdapter.js +3 -3
  94. package/modules/userId/eids.js +18 -0
  95. package/modules/userId/eids.md +7 -0
  96. package/modules/userId/userId.md +12 -0
  97. package/modules/ventesBidAdapter.js +370 -0
  98. package/modules/ventesBidAdapter.md +94 -0
  99. package/modules/videobyteBidAdapter.js +13 -6
  100. package/modules/videobyteBidAdapter.md +49 -0
  101. package/modules/vidoomyBidAdapter.js +20 -12
  102. package/modules/visxBidAdapter.js +15 -22
  103. package/modules/yahoosspBidAdapter.js +637 -0
  104. package/modules/yahoosspBidAdapter.md +795 -0
  105. package/modules/yieldlabBidAdapter.js +48 -3
  106. package/modules/yieldlabBidAdapter.md +16 -1
  107. package/modules/yieldmoBidAdapter.js +20 -6
  108. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  109. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  110. package/package.json +1 -1
  111. package/src/adapterManager.js +5 -0
  112. package/src/adapters/bidderFactory.js +4 -3
  113. package/src/auction.js +11 -11
  114. package/src/constants.json +1 -0
  115. package/src/secureCreatives.js +6 -7
  116. package/src/targeting.js +11 -9
  117. package/test/.eslintrc.js +2 -1
  118. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  119. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  120. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  121. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  122. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  123. package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
  124. package/test/spec/modules/atsAnalyticsAdapter_spec.js +77 -9
  125. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  126. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  127. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  128. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  129. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  130. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  131. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  132. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  133. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  134. package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
  135. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  136. package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
  137. package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
  138. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  139. package/test/spec/modules/ixBidAdapter_spec.js +13 -3
  140. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  141. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  142. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  143. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
  144. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  145. package/test/spec/modules/multibid_spec.js +31 -31
  146. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  147. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  148. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  149. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  150. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  151. package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
  152. package/test/spec/modules/openxBidAdapter_spec.js +85 -13
  153. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  154. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  155. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  156. package/test/spec/modules/publinkIdSystem_spec.js +34 -15
  157. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  158. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  159. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  160. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  161. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  162. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  163. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  164. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  165. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  166. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  167. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  168. package/test/spec/modules/trustxBidAdapter_spec.js +38 -5
  169. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  170. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  171. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  172. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  173. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  174. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  175. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  176. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  177. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  178. package/test/spec/unit/core/adapterManager_spec.js +32 -0
  179. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  180. package/test/spec/unit/pbjs_api_spec.js +37 -2
  181. package/test/spec/unit/secureCreatives_spec.js +54 -25
  182. package/modules/turktelekomBidAdapter.md +0 -49
@@ -10,7 +10,7 @@ export const storage = getStorageManager();
10
10
 
11
11
  const BIDDER_CODE = 'jixie';
12
12
  const EVENTS_URL = 'https://hbtra.jixie.io/sync/hb?';
13
- const JX_OUTSTREAM_RENDERER_URL = 'https://scripts.jixie.io/jxhboutstream.js';
13
+ const JX_OUTSTREAM_RENDERER_URL = 'https://scripts.jixie.media/jxhbrenderer.1.1.min.js';
14
14
  const REQUESTS_URL = 'https://hb.jixie.io/v2/hbpost';
15
15
  const sidTTLMins_ = 30;
16
16
 
@@ -104,7 +104,8 @@ function getMiscDims_() {
104
104
  let ret = {
105
105
  pageurl: '',
106
106
  domain: '',
107
- device: 'unknown'
107
+ device: 'unknown',
108
+ mkeywords: ''
108
109
  }
109
110
  try {
110
111
  let refererInfo_ = getRefererInfo();
@@ -112,6 +113,10 @@ function getMiscDims_() {
112
113
  ret.pageurl = url_;
113
114
  ret.domain = parseUrl(url_).host;
114
115
  ret.device = getDevice_();
116
+ let keywords = document.getElementsByTagName('meta')['keywords'];
117
+ if (keywords && keywords.content) {
118
+ ret.mkeywords = keywords.content;
119
+ }
115
120
  } catch (error) {}
116
121
  return ret;
117
122
  }
@@ -167,6 +172,7 @@ export const spec = {
167
172
  device: miscDims.device,
168
173
  domain: miscDims.domain,
169
174
  pageurl: miscDims.pageurl,
175
+ mkeywords: miscDims.mkeywords,
170
176
  bids: bids,
171
177
  cfg: jixieCfgBlob
172
178
  }, ids);
@@ -4,7 +4,7 @@ import { deepAccess } from '../src/utils.js';
4
4
  const BIDDER_CODE = 'justpremium'
5
5
  const GVLID = 62
6
6
  const ENDPOINT_URL = 'https://pre.ads.justpremium.com/v/2.0/t/xhr'
7
- const JP_ADAPTER_VERSION = '1.8'
7
+ const JP_ADAPTER_VERSION = '1.8.1'
8
8
  const pixels = []
9
9
 
10
10
  export const spec = {
@@ -101,6 +101,11 @@ export const spec = {
101
101
  advertiserDomains: bid.adomain && bid.adomain.length > 0 ? bid.adomain : []
102
102
  }
103
103
  }
104
+ if (bid.ext && bid.ext.pg) {
105
+ bidResponse.adserverTargeting = {
106
+ 'hb_deal_justpremium': 'jp_pg'
107
+ }
108
+ }
104
109
  bidResponses.push(bidResponse)
105
110
  }
106
111
  })
@@ -1,13 +1,15 @@
1
1
  import { _each } from '../src/utils.js';
2
- import {config} from '../src/config.js';
3
- import {registerBidder} from '../src/adapters/bidderFactory.js';
2
+ import { config } from '../src/config.js';
3
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
4
4
  import { getStorageManager } from '../src/storageManager.js';
5
+ import { BANNER, VIDEO } from '../src/mediaTypes.js';
5
6
 
6
7
  const BIDDER_CODE = 'kargo';
7
8
  const HOST = 'https://krk.kargo.com';
8
9
  const SYNC = 'https://crb.kargo.com/api/v1/initsyncrnd/{UUID}?seed={SEED}&idx={INDEX}&gdpr={GDPR}&gdpr_consent={GDPR_CONSENT}&us_privacy={US_PRIVACY}';
9
10
  const SYNC_COUNT = 5;
10
11
  const GVLID = 972;
12
+ const SUPPORTED_MEDIA_TYPES = [BANNER, VIDEO]
11
13
  const storage = getStorageManager(GVLID, BIDDER_CODE);
12
14
 
13
15
  let sessionId,
@@ -21,34 +23,38 @@ export const spec = {
21
23
  if (!bid || !bid.params) {
22
24
  return false;
23
25
  }
26
+
24
27
  return !!bid.params.placementId;
25
28
  },
26
29
  buildRequests: function(validBidRequests, bidderRequest) {
27
30
  const currencyObj = config.getConfig('currency');
28
31
  const currency = (currencyObj && currencyObj.adServerCurrency) || 'USD';
29
- const bidIds = {};
32
+ const bidIDs = {};
30
33
  const bidSizes = {};
34
+
31
35
  _each(validBidRequests, bid => {
32
- bidIds[bid.bidId] = bid.params.placementId;
36
+ bidIDs[bid.bidId] = bid.params.placementId;
33
37
  bidSizes[bid.bidId] = bid.sizes;
34
38
  });
39
+
35
40
  let tdid;
36
41
  if (validBidRequests.length > 0 && validBidRequests[0].userId && validBidRequests[0].userId.tdid) {
37
42
  tdid = validBidRequests[0].userId.tdid;
38
43
  }
44
+
39
45
  const transformedParams = Object.assign({}, {
40
46
  sessionId: spec._getSessionId(),
41
47
  requestCount: spec._getRequestCount(),
42
48
  timeout: bidderRequest.timeout,
43
- currency: currency,
49
+ currency,
44
50
  cpmGranularity: 1,
45
51
  timestamp: (new Date()).getTime(),
46
52
  cpmRange: {
47
53
  floor: 0,
48
54
  ceil: 20
49
55
  },
50
- bidIDs: bidIds,
51
- bidSizes: bidSizes,
56
+ bidIDs,
57
+ bidSizes,
52
58
  prebidRawBidRequests: validBidRequests
53
59
  }, spec._getAllMetadata(tdid, bidderRequest.uspConsent, bidderRequest.gdprConsent));
54
60
  const encodedParams = encodeURIComponent(JSON.stringify(transformedParams));
@@ -111,6 +117,7 @@ export const spec = {
111
117
  }
112
118
  return syncs;
113
119
  },
120
+ supportedMediaTypes: SUPPORTED_MEDIA_TYPES,
114
121
 
115
122
  // PRIVATE
116
123
  _readCookie(name) {
@@ -19,5 +19,25 @@ Please use `kargo` as the bidder code. Also, you *must* test on a mobile device,
19
19
  placementId: '_m1Xt2E5dez'
20
20
  }
21
21
  }]
22
+ },{
23
+ code: 'div-gpt-ad-video-1',
24
+ sizes: [[640,480]],
25
+ mediaTypes: {
26
+ video: {
27
+ playerSize: [640, 480],
28
+ context: 'instream'
29
+ }
30
+ },
31
+ bids: [{
32
+ bidder: 'kargo',
33
+ params: {
34
+ placementId: '_bLIt2QMYee',
35
+ video: {
36
+ skipppable: true,
37
+ playback_method: ['auto_play_sound_off'],
38
+ mimes: ['video/mp4']
39
+ }
40
+ }
41
+ }]
22
42
  }];
23
43
  ```
@@ -1,4 +1,4 @@
1
- import { logMessage, groupBy, uniques } from '../src/utils.js';
1
+ import { logMessage, groupBy, uniques, flatten, deepAccess } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { BANNER, VIDEO } from '../src/mediaTypes.js';
4
4
  import {ajax} from '../src/ajax.js';
@@ -92,6 +92,26 @@ export const spec = {
92
92
  }
93
93
  return bidResponses;
94
94
  },
95
+
96
+ getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
97
+ const syncs = serverResponses.map(response => response.body).reduce(flatten, [])
98
+ .map(response => deepAccess(response, 'ext.sync')).filter(Boolean);
99
+ const iframeSyncUrls = !syncOptions.iframeEnabled ? [] : syncs.map(sync => sync.iframe).filter(Boolean)
100
+ .filter(uniques).map(url => {
101
+ return {
102
+ type: 'iframe',
103
+ url: url
104
+ }
105
+ });
106
+ const pixelSyncUrls = !syncOptions.pixelEnabled ? [] : syncs.map(sync => sync.pixel).filter(Boolean)
107
+ .filter(uniques).map(url => {
108
+ return {
109
+ type: 'image',
110
+ url: url
111
+ }
112
+ });
113
+ return [iframeSyncUrls, pixelSyncUrls].reduce(flatten, []);
114
+ }
95
115
  };
96
116
 
97
117
  registerBidder(spec);
@@ -125,7 +145,7 @@ function buildPlacement(bidRequest) {
125
145
  break;
126
146
  }
127
147
  }
128
- sizes = (sizes || []).concat(bidRequest.sizes || []).filter(uniques);
148
+ sizes = (sizes || []).concat(bidRequest.sizes || []);
129
149
  return {
130
150
  host: bidRequest.params.host,
131
151
  adUnit: {
@@ -3,6 +3,7 @@ import {ajax} from '../src/ajax.js';
3
3
  import adapter from '../src/AnalyticsAdapter.js';
4
4
  import CONSTANTS from '../src/constants.json';
5
5
  import adapterManager from '../src/adapterManager.js';
6
+ import { getGlobal } from '../src/prebidGlobal.js';
6
7
 
7
8
  const ANALYTICSTYPE = 'endpoint';
8
9
  const URL = 'https://lwadm.com/analytics/10';
@@ -11,8 +12,10 @@ const REQUESTSENT = 1;
11
12
  const RESPONSESENT = 2;
12
13
  const WINSENT = 4;
13
14
  const TIMEOUTSENT = 8;
15
+ const ADRENDERFAILEDSENT = 16;
14
16
 
15
17
  let initOptions;
18
+ let prebidGlobal = getGlobal();
16
19
  export const BID_WON_TIMEOUT = 500;
17
20
 
18
21
  const cache = {
@@ -78,9 +81,11 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
78
81
  bidResponse.width = args.width;
79
82
  bidResponse.height = args.height;
80
83
  bidResponse.cpm = args.cpm;
84
+ bidResponse.originalCpm = prebidGlobal.convertCurrency(args.originalCpm, args.originalCurrency, args.currency);
81
85
  bidResponse.ttr = args.timeToRespond;
82
86
  bidResponse.readyToSend = 1;
83
87
  bidResponse.mediaType = args.mediaType == 'native' ? 2 : (args.mediaType == 'video' ? 4 : 1);
88
+ bidResponse.floorData = args.floorData;
84
89
  if (!bidResponse.ttr) {
85
90
  bidResponse.ttr = time - bidResponse.start;
86
91
  }
@@ -108,10 +113,21 @@ let livewrappedAnalyticsAdapter = Object.assign(adapter({EMPTYURL, ANALYTICSTYPE
108
113
  logInfo('LIVEWRAPPED_BID_WON:', args);
109
114
  let wonBid = cache.auctions[args.auctionId].bids[args.requestId];
110
115
  wonBid.won = true;
116
+ wonBid.floorData = args.floorData;
111
117
  if (wonBid.sendStatus != 0) {
112
118
  livewrappedAnalyticsAdapter.sendEvents();
113
119
  }
114
120
  break;
121
+ case CONSTANTS.EVENTS.AD_RENDER_FAILED:
122
+ logInfo('LIVEWRAPPED_AD_RENDER_FAILED:', args);
123
+ let adRenderFailedBid = cache.auctions[args.bid.auctionId].bids[args.bid.requestId];
124
+ adRenderFailedBid.adRenderFailed = true;
125
+ adRenderFailedBid.reason = args.reason;
126
+ adRenderFailedBid.message = args.message;
127
+ if (adRenderFailedBid.sendStatus != 0) {
128
+ livewrappedAnalyticsAdapter.sendEvents();
129
+ }
130
+ break;
115
131
  case CONSTANTS.EVENTS.BID_TIMEOUT:
116
132
  logInfo('LIVEWRAPPED_BID_TIMEOUT:', args);
117
133
  args.forEach(timeout => {
@@ -149,13 +165,15 @@ livewrappedAnalyticsAdapter.sendEvents = function() {
149
165
  wins: getWins(sentRequests.gdpr, sentRequests.auctionIds),
150
166
  timeouts: getTimeouts(sentRequests.auctionIds),
151
167
  bidAdUnits: getbidAdUnits(),
168
+ rf: getAdRenderFailed(sentRequests.auctionIds),
152
169
  rcv: getAdblockerRecovered()
153
170
  };
154
171
 
155
172
  if (events.requests.length == 0 &&
156
173
  events.responses.length == 0 &&
157
174
  events.wins.length == 0 &&
158
- events.timeouts.length == 0) {
175
+ events.timeouts.length == 0 &&
176
+ events.rf.length == 0) {
159
177
  return;
160
178
  }
161
179
 
@@ -222,11 +240,12 @@ function getResponses(gdpr, auctionIds) {
222
240
  width: bid.width,
223
241
  height: bid.height,
224
242
  cpm: bid.cpm,
243
+ orgCpm: bid.originalCpm,
225
244
  ttr: bid.ttr,
226
245
  IsBid: bid.isBid,
227
246
  mediaType: bid.mediaType,
228
247
  gdpr: gdprPos,
229
- floor: bid.floorData ? bid.floorData.floorValue : bid.lwFloor,
248
+ floor: bid.lwFloor ? bid.lwFloor : (bid.floorData ? bid.floorData.floorValue : undefined),
230
249
  floorCur: bid.floorData ? bid.floorData.floorCurrency : undefined,
231
250
  auctionId: auctionIdPos,
232
251
  auc: bid.auc,
@@ -261,9 +280,10 @@ function getWins(gdpr, auctionIds) {
261
280
  width: bid.width,
262
281
  height: bid.height,
263
282
  cpm: bid.cpm,
283
+ orgCpm: bid.originalCpm,
264
284
  mediaType: bid.mediaType,
265
285
  gdpr: gdprPos,
266
- floor: bid.floorData ? bid.floorData.floorValue : bid.lwFloor,
286
+ floor: bid.lwFloor ? bid.lwFloor : (bid.floorData ? bid.floorData.floorValue : undefined),
267
287
  floorCur: bid.floorData ? bid.floorData.floorCurrency : undefined,
268
288
  auctionId: auctionIdPos,
269
289
  auc: bid.auc,
@@ -336,6 +356,36 @@ function getTimeouts(auctionIds) {
336
356
  return timeouts;
337
357
  }
338
358
 
359
+ function getAdRenderFailed(auctionIds) {
360
+ var adRenderFails = [];
361
+
362
+ Object.keys(cache.auctions).forEach(auctionId => {
363
+ let auctionIdPos = getAuctionIdPos(auctionIds, auctionId);
364
+ Object.keys(cache.auctions[auctionId].bids).forEach(bidId => {
365
+ let auction = cache.auctions[auctionId];
366
+ let bid = auction.bids[bidId];
367
+ if (!(bid.sendStatus & ADRENDERFAILEDSENT) && bid.adRenderFailed) {
368
+ bid.sendStatus |= ADRENDERFAILEDSENT;
369
+
370
+ adRenderFails.push({
371
+ bidder: bid.bidder,
372
+ adUnit: bid.adUnit,
373
+ adUnitId: bid.adUnitId,
374
+ timeStamp: auction.timeStamp,
375
+ auctionId: auctionIdPos,
376
+ auc: bid.auc,
377
+ buc: bid.buc,
378
+ lw: bid.lw,
379
+ rsn: bid.reason,
380
+ msg: bid.message
381
+ });
382
+ }
383
+ });
384
+ });
385
+
386
+ return adRenderFails;
387
+ }
388
+
339
389
  function getbidAdUnits() {
340
390
  var bidAdUnits = [];
341
391