prebid.js 6.6.0 → 6.10.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 (271) hide show
  1. package/.eslintrc.js +8 -1
  2. package/allowedModules.js +4 -7
  3. package/integrationExamples/gpt/amp/creative.html +11 -33
  4. package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
  5. package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
  6. package/integrationExamples/gpt/userId_example.html +2 -2
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
  8. package/integrationExamples/gpt/x-domain/creative.html +63 -29
  9. package/modules/.submodules.json +3 -0
  10. package/modules/adagioBidAdapter.js +1 -9
  11. package/modules/adagioBidAdapter.md +1 -1
  12. package/modules/adbookpspBidAdapter.js +29 -12
  13. package/modules/adhashBidAdapter.js +4 -4
  14. package/modules/adkernelBidAdapter.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +1 -1
  16. package/modules/adlooxRtdProvider.js +1 -1
  17. package/modules/adnowBidAdapter.js +1 -1
  18. package/modules/adnuntiusRtdProvider.js +96 -0
  19. package/modules/adnuntiusRtdProvider.md +41 -0
  20. package/modules/adomikAnalyticsAdapter.js +2 -2
  21. package/modules/adotBidAdapter.js +1 -1
  22. package/modules/adpod.js +14 -17
  23. package/modules/adrelevantisBidAdapter.js +2 -2
  24. package/modules/adtargetBidAdapter.js +1 -1
  25. package/modules/adtelligentBidAdapter.js +1 -1
  26. package/modules/advangelistsBidAdapter.js +2 -2
  27. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  28. package/modules/adyoulikeBidAdapter.js +1 -1
  29. package/modules/afpBidAdapter.js +1 -1
  30. package/modules/appnexusBidAdapter.js +16 -4
  31. package/modules/asealBidAdapter.js +58 -0
  32. package/modules/asealBidAdapter.md +52 -0
  33. package/modules/beachfrontBidAdapter.js +2 -2
  34. package/modules/betweenBidAdapter.js +1 -1
  35. package/modules/bidViewability.js +1 -1
  36. package/modules/bluebillywigBidAdapter.js +1 -1
  37. package/modules/brandmetricsRtdProvider.js +168 -0
  38. package/modules/brandmetricsRtdProvider.md +40 -0
  39. package/modules/bridgewellBidAdapter.js +1 -1
  40. package/modules/browsiRtdProvider.js +2 -2
  41. package/modules/cleanmedianetBidAdapter.js +1 -1
  42. package/modules/colossussspBidAdapter.js +12 -8
  43. package/modules/colossussspBidAdapter.md +15 -1
  44. package/modules/compassBidAdapter.js +1 -1
  45. package/modules/connectIdSystem.js +1 -1
  46. package/modules/consentManagement.js +2 -3
  47. package/modules/consumableBidAdapter.md +1 -1
  48. package/modules/conversantBidAdapter.js +7 -0
  49. package/modules/craftBidAdapter.js +2 -2
  50. package/modules/criteoBidAdapter.js +10 -1
  51. package/modules/currency.js +27 -5
  52. package/modules/cwireBidAdapter.js +1 -1
  53. package/modules/dailyhuntBidAdapter.js +1 -1
  54. package/modules/dchain.js +1 -1
  55. package/modules/displayioBidAdapter.js +157 -0
  56. package/modules/displayioBidAdapter.md +148 -0
  57. package/modules/dspxBidAdapter.js +69 -29
  58. package/modules/dspxBidAdapter.md +2 -1
  59. package/modules/e_volutionBidAdapter.js +158 -0
  60. package/modules/emx_digitalBidAdapter.js +2 -2
  61. package/modules/fluctBidAdapter.js +0 -1
  62. package/modules/gamoshiBidAdapter.js +1 -1
  63. package/modules/gdprEnforcement.js +2 -2
  64. package/modules/glomexBidAdapter.js +1 -1
  65. package/modules/gnetBidAdapter.js +3 -3
  66. package/modules/gnetBidAdapter.md +4 -4
  67. package/modules/goldbachBidAdapter.js +2 -2
  68. package/modules/gptPreAuction.js +1 -1
  69. package/modules/gridBidAdapter.js +15 -1
  70. package/modules/gumgumBidAdapter.js +57 -43
  71. package/modules/hadronIdSystem.js +96 -0
  72. package/modules/hadronIdSystem.md +35 -0
  73. package/modules/hadronRtdProvider.js +254 -0
  74. package/modules/hadronRtdProvider.md +126 -0
  75. package/modules/haloIdSystem.md +4 -35
  76. package/modules/haloRtdProvider.md +3 -126
  77. package/modules/hybridBidAdapter.js +1 -1
  78. package/modules/improvedigitalBidAdapter.js +6 -1
  79. package/modules/insticatorBidAdapter.js +1 -1
  80. package/modules/interactiveOffersBidAdapter.js +9 -6
  81. package/modules/intersectionRtdProvider.js +1 -1
  82. package/modules/ixBidAdapter.js +2 -2
  83. package/modules/jwplayerRtdProvider.js +72 -7
  84. package/modules/jwplayerRtdProvider.md +27 -11
  85. package/modules/kargoBidAdapter.js +2 -2
  86. package/modules/livewrappedBidAdapter.js +1 -1
  87. package/modules/lunamediahbBidAdapter.js +32 -4
  88. package/modules/malltvBidAdapter.js +7 -3
  89. package/modules/malltvBidAdapter.md +64 -51
  90. package/modules/mass.js +3 -5
  91. package/modules/mediakeysBidAdapter.js +2 -2
  92. package/modules/medianetAnalyticsAdapter.js +2 -2
  93. package/modules/medianetRtdProvider.js +1 -1
  94. package/modules/mediasquareBidAdapter.js +1 -0
  95. package/modules/nextMillenniumBidAdapter.js +1 -0
  96. package/modules/nextrollBidAdapter.js +1 -1
  97. package/modules/oguryBidAdapter.js +7 -14
  98. package/modules/onetagBidAdapter.js +1 -1
  99. package/modules/openwebBidAdapter.js +1 -1
  100. package/modules/openxAnalyticsAdapter.js +2 -2
  101. package/modules/openxBidAdapter.js +1 -1
  102. package/modules/parrableIdSystem.js +1 -1
  103. package/modules/permutiveRtdProvider.js +1 -1
  104. package/modules/pilotxBidAdapter.js +147 -0
  105. package/modules/pilotxBidAdapter.md +50 -0
  106. package/modules/pixfutureBidAdapter.js +2 -2
  107. package/modules/prebidServerBidAdapter/index.js +63 -41
  108. package/modules/priceFloors.js +15 -14
  109. package/modules/pubmaticBidAdapter.js +1 -1
  110. package/modules/quantcastBidAdapter.js +1 -1
  111. package/modules/reconciliationRtdProvider.js +1 -1
  112. package/modules/richaudienceBidAdapter.js +7 -2
  113. package/modules/riseBidAdapter.js +17 -6
  114. package/modules/roxotAnalyticsAdapter.js +1 -1
  115. package/modules/rtbhouseBidAdapter.js +1 -1
  116. package/modules/rtdModule/index.js +9 -11
  117. package/modules/rubiconAnalyticsAdapter.js +8 -2
  118. package/modules/rubiconBidAdapter.js +1 -1
  119. package/modules/saambaaBidAdapter.js +420 -420
  120. package/modules/seedingAllianceBidAdapter.js +3 -3
  121. package/modules/sharethroughBidAdapter.js +12 -17
  122. package/modules/sigmoidAnalyticsAdapter.js +1 -1
  123. package/modules/sirdataRtdProvider.js +1 -1
  124. package/modules/sizeMappingV2.js +2 -9
  125. package/modules/smarticoBidAdapter.js +1 -1
  126. package/modules/sortableAnalyticsAdapter.js +5 -4
  127. package/modules/sovrnAnalyticsAdapter.js +2 -2
  128. package/modules/sovrnBidAdapter.js +93 -18
  129. package/modules/sovrnBidAdapter.md +80 -2
  130. package/modules/sspBCBidAdapter.js +54 -21
  131. package/modules/synacormediaBidAdapter.js +32 -11
  132. package/modules/targetVideoBidAdapter.js +1 -1
  133. package/modules/telariaBidAdapter.js +22 -29
  134. package/modules/trustpidSystem.js +197 -0
  135. package/modules/trustpidSystem.md +45 -0
  136. package/modules/undertoneBidAdapter.js +17 -1
  137. package/modules/userId/eids.js +16 -1
  138. package/modules/userId/eids.md +10 -2
  139. package/modules/userId/index.js +2 -2
  140. package/modules/userId/userId.md +17 -2
  141. package/modules/ventesBidAdapter.js +1 -1
  142. package/modules/verizonMediaIdSystem.js +1 -1
  143. package/modules/vibrantmediaBidAdapter.js +220 -0
  144. package/modules/vibrantmediaBidAdapter.md +92 -0
  145. package/modules/viewability.js +177 -0
  146. package/modules/viewability.md +87 -0
  147. package/modules/viewdeosDXBidAdapter.js +1 -1
  148. package/modules/voxBidAdapter.js +1 -1
  149. package/modules/waardexBidAdapter.js +1 -1
  150. package/modules/weboramaRtdProvider.js +264 -34
  151. package/modules/weboramaRtdProvider.md +110 -40
  152. package/modules/widespaceBidAdapter.js +2 -2
  153. package/modules/winrBidAdapter.js +7 -7
  154. package/modules/yahoosspBidAdapter.js +3 -1
  155. package/modules/yieldlabBidAdapter.js +1 -1
  156. package/modules/yieldmoBidAdapter.js +2 -2
  157. package/modules/yieldoneBidAdapter.js +6 -0
  158. package/modules/yuktamediaAnalyticsAdapter.js +1 -1
  159. package/package.json +3 -1
  160. package/plugins/poly/arrayFrom.js +3 -0
  161. package/plugins/poly/find.js +3 -0
  162. package/plugins/poly/findIndex.js +3 -0
  163. package/plugins/poly/includes.js +3 -0
  164. package/plugins/poly/package.json +8 -0
  165. package/src/Renderer.js +1 -1
  166. package/src/adRendering.js +38 -0
  167. package/src/adapterManager.js +33 -28
  168. package/src/adapters/bidderFactory.js +13 -11
  169. package/src/adloader.js +3 -2
  170. package/src/auction.js +140 -117
  171. package/src/auctionIndex.js +85 -0
  172. package/src/auctionManager.js +4 -1
  173. package/src/bidderSettings.js +69 -0
  174. package/src/bidfactory.js +18 -6
  175. package/src/config.js +3 -4
  176. package/src/cpmBucketManager.js +1 -1
  177. package/src/native.js +30 -22
  178. package/src/prebid.js +4 -20
  179. package/src/secureCreatives.js +133 -49
  180. package/src/sizeMapping.js +1 -1
  181. package/src/storageManager.js +1 -1
  182. package/src/targeting.js +13 -4
  183. package/src/userSync.js +1 -1
  184. package/src/utils.js +16 -19
  185. package/src/video.js +11 -12
  186. package/src/videoCache.js +10 -9
  187. package/test/fixtures/fixtures.js +2 -1
  188. package/test/helpers/indexStub.js +28 -0
  189. package/test/helpers/syncPromise.js +71 -0
  190. package/test/spec/auctionmanager_spec.js +269 -90
  191. package/test/spec/config_spec.js +24 -1
  192. package/test/spec/e2e/longform/basic_w_bidderSettings.spec.js +1 -1
  193. package/test/spec/e2e/longform/basic_w_custom_adserver_translation.spec.js +1 -1
  194. package/test/spec/e2e/longform/basic_w_priceGran.spec.js +1 -1
  195. package/test/spec/e2e/longform/basic_w_requireExactDuration.spec.js +1 -1
  196. package/test/spec/e2e/longform/basic_wo_brandCategoryExclusion.spec.js +1 -1
  197. package/test/spec/e2e/longform/basic_wo_requireExactDuration.spec.js +1 -1
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
  199. package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
  200. package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
  201. package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
  202. package/test/spec/modules/adpod_spec.js +91 -156
  203. package/test/spec/modules/afpBidAdapter_spec.js +1 -1
  204. package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
  205. package/test/spec/modules/asealBidAdapter_spec.js +144 -0
  206. package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
  207. package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
  208. package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
  209. package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
  210. package/test/spec/modules/currency_spec.js +36 -15
  211. package/test/spec/modules/deepintentDpesIdsystem_spec.js +1 -1
  212. package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
  213. package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
  214. package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
  215. package/test/spec/modules/eids_spec.js +2 -2
  216. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +1 -1
  217. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +1 -1
  218. package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
  219. package/test/spec/modules/gridBidAdapter_spec.js +18 -0
  220. package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
  221. package/test/spec/modules/hadronIdSystem_spec.js +57 -0
  222. package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
  223. package/test/spec/modules/idxIdSystem_spec.js +1 -1
  224. package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
  225. package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
  226. package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
  227. package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
  228. package/test/spec/modules/mass_spec.js +2 -14
  229. package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -1
  230. package/test/spec/modules/multibid_spec.js +1 -1
  231. package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
  232. package/test/spec/modules/onetagBidAdapter_spec.js +1 -1
  233. package/test/spec/modules/openxAnalyticsAdapter_spec.js +1 -1
  234. package/test/spec/modules/parrableIdSystem_spec.js +1 -1
  235. package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
  236. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
  237. package/test/spec/modules/priceFloors_spec.js +37 -24
  238. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  239. package/test/spec/modules/realTimeDataModule_spec.js +51 -2
  240. package/test/spec/modules/riseBidAdapter_spec.js +30 -4
  241. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
  242. package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
  243. package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
  244. package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
  245. package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
  246. package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
  247. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +1 -1
  248. package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
  249. package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
  250. package/test/spec/modules/trustpidSystem_spec.js +232 -0
  251. package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
  252. package/test/spec/modules/userId_spec.js +40 -40
  253. package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
  254. package/test/spec/modules/viewability_spec.js +280 -0
  255. package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
  256. package/test/spec/modules/widespaceBidAdapter_spec.js +1 -1
  257. package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
  258. package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
  259. package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -1
  260. package/test/spec/native_spec.js +62 -40
  261. package/test/spec/sizeMapping_spec.js +1 -1
  262. package/test/spec/unit/core/adapterManager_spec.js +24 -2
  263. package/test/spec/unit/core/auctionIndex_spec.js +129 -0
  264. package/test/spec/unit/core/bidderFactory_spec.js +65 -12
  265. package/test/spec/unit/core/bidderSettings_spec.js +123 -0
  266. package/test/spec/unit/core/targeting_spec.js +93 -0
  267. package/test/spec/unit/pbjs_api_spec.js +81 -43
  268. package/test/spec/unit/secureCreatives_spec.js +143 -24
  269. package/test/spec/videoCache_spec.js +18 -19
  270. package/test/spec/video_spec.js +51 -61
  271. package/webpack.conf.js +1 -1
package/src/video.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import adapterManager from './adapterManager.js';
2
- import { getBidRequest, deepAccess, logError } from './utils.js';
2
+ import { deepAccess, logError } from './utils.js';
3
3
  import { config } from '../src/config.js';
4
- import includes from 'core-js-pure/features/array/includes.js';
4
+ import includes from 'prebidjs-polyfill/includes.js';
5
5
  import { hook } from './hook.js';
6
+ import {auctionManager} from './auctionManager.js';
6
7
 
7
8
  const VIDEO_MEDIA_TYPE = 'video';
8
9
  export const OUTSTREAM = 'outstream';
@@ -28,23 +29,21 @@ export const hasNonVideoBidder = adUnit =>
28
29
  /**
29
30
  * Validate that the assets required for video context are present on the bid
30
31
  * @param {VideoBid} bid Video bid to validate
31
- * @param {BidRequest[]} bidRequests All bid requests for an auction
32
+ * @param index
32
33
  * @return {Boolean} If object is valid
33
34
  */
34
- export function isValidVideoBid(bid, bidRequests) {
35
- const bidRequest = getBidRequest(bid.requestId, bidRequests);
36
-
37
- const videoMediaType =
38
- bidRequest && deepAccess(bidRequest, 'mediaTypes.video');
35
+ export function isValidVideoBid(bid, {index = auctionManager.index} = {}) {
36
+ const videoMediaType = deepAccess(index.getMediaTypes(bid), 'video');
39
37
  const context = videoMediaType && deepAccess(videoMediaType, 'context');
38
+ const adUnit = index.getAdUnit(bid);
40
39
 
41
40
  // if context not defined assume default 'instream' for video bids
42
41
  // instream bids require a vast url or vast xml content
43
- return checkVideoBidSetup(bid, bidRequest, videoMediaType, context);
42
+ return checkVideoBidSetup(bid, adUnit, videoMediaType, context);
44
43
  }
45
44
 
46
- export const checkVideoBidSetup = hook('sync', function(bid, bidRequest, videoMediaType, context) {
47
- if (!bidRequest || (videoMediaType && context !== OUTSTREAM)) {
45
+ export const checkVideoBidSetup = hook('sync', function(bid, adUnit, videoMediaType, context) {
46
+ if (videoMediaType && context !== OUTSTREAM) {
48
47
  // xml-only video bids require a prebid cache url
49
48
  if (!config.getConfig('cache.url') && bid.vastXml && !bid.vastUrl) {
50
49
  logError(`
@@ -59,7 +58,7 @@ export const checkVideoBidSetup = hook('sync', function(bid, bidRequest, videoMe
59
58
 
60
59
  // outstream bids require a renderer on the bid or pub-defined on adunit
61
60
  if (context === OUTSTREAM) {
62
- return !!(bid.renderer || bidRequest.renderer || videoMediaType.renderer);
61
+ return !!(bid.renderer || (adUnit && adUnit.renderer) || videoMediaType.renderer);
63
62
  }
64
63
 
65
64
  return true;
package/src/videoCache.js CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  import { ajax } from './ajax.js';
13
13
  import { config } from './config.js';
14
- import { isPlainObject } from './utils.js';
14
+ import {auctionManager} from './auctionManager.js';
15
15
 
16
16
  /**
17
17
  * @typedef {object} CacheableUrlBid
@@ -58,9 +58,11 @@ function wrapURI(uri, impUrl) {
58
58
  * the bid can't be converted cleanly.
59
59
  *
60
60
  * @param {CacheableBid} bid
61
+ * @param index
61
62
  */
62
- function toStorageRequest(bid) {
63
+ function toStorageRequest(bid, {index = auctionManager.index} = {}) {
63
64
  const vastValue = bid.vastXml ? bid.vastXml : wrapURI(bid.vastUrl, bid.vastImpUrl);
65
+ const auction = index.getAuction(bid);
64
66
 
65
67
  let payload = {
66
68
  type: 'xml',
@@ -72,10 +74,10 @@ function toStorageRequest(bid) {
72
74
  payload.bidder = bid.bidder;
73
75
  payload.bidid = bid.requestId;
74
76
  payload.aid = bid.auctionId;
75
- // function has a thisArg set to bidderRequest for accessing the auctionStart
76
- if (isPlainObject(this) && this.hasOwnProperty('auctionStart')) {
77
- payload.timestamp = this.auctionStart;
78
- }
77
+ }
78
+
79
+ if (auction != null) {
80
+ payload.timestamp = auction.getAuctionStart();
79
81
  }
80
82
 
81
83
  if (typeof bid.customCacheKey === 'string' && bid.customCacheKey !== '') {
@@ -132,12 +134,11 @@ function shimStorageCallback(done) {
132
134
  *
133
135
  * @param {CacheableBid[]} bids A list of bid objects which should be cached.
134
136
  * @param {videoCacheStoreCallback} [done] An optional callback which should be executed after
135
- * @param {BidderRequest} [bidderRequest]
136
137
  * the data has been stored in the cache.
137
138
  */
138
- export function store(bids, done, bidderRequest) {
139
+ export function store(bids, done) {
139
140
  const requestData = {
140
- puts: bids.map(toStorageRequest, bidderRequest)
141
+ puts: bids.map(toStorageRequest)
141
142
  };
142
143
 
143
144
  ajax(config.getConfig('cache.url'), shimStorageCallback(done), JSON.stringify(requestData), {
@@ -1231,7 +1231,7 @@ export function getCurrencyRates() {
1231
1231
  };
1232
1232
  }
1233
1233
 
1234
- export function createBidReceived({bidder, cpm, auctionId, responseTimestamp, adUnitCode, adId, status, ttl, requestId}) {
1234
+ export function createBidReceived({bidder, cpm, auctionId, responseTimestamp, adUnitCode, adId, status, ttl, requestId, mediaType}) {
1235
1235
  let bid = {
1236
1236
  'bidderCode': bidder,
1237
1237
  'width': '300',
@@ -1259,6 +1259,7 @@ export function createBidReceived({bidder, cpm, auctionId, responseTimestamp, ad
1259
1259
  'hb_pb': cpm,
1260
1260
  'foobar': '300x250'
1261
1261
  }),
1262
+ 'mediaType': mediaType,
1262
1263
  'netRevenue': true,
1263
1264
  'currency': 'USD',
1264
1265
  'ttl': (!ttl) ? 300 : ttl
@@ -0,0 +1,28 @@
1
+ import {AuctionIndex} from '../../src/auctionIndex.js';
2
+
3
+ export function stubAuctionIndex({bidRequests, bidderRequests, adUnits}) {
4
+ if (adUnits == null) {
5
+ adUnits = []
6
+ }
7
+ if (bidderRequests == null) {
8
+ bidderRequests = []
9
+ }
10
+ if (bidRequests != null) {
11
+ bidderRequests.push({
12
+ bidderRequestId: 'mock-bidder-request',
13
+ bids: bidRequests
14
+ });
15
+ }
16
+ const auction = {
17
+ getAuctionId() {
18
+ return 'mock-auction'
19
+ },
20
+ getBidRequests() {
21
+ return bidderRequests;
22
+ },
23
+ getAdUnits() {
24
+ return adUnits;
25
+ }
26
+ };
27
+ return new AuctionIndex(() => ([auction]));
28
+ }
@@ -0,0 +1,71 @@
1
+ const orig = {};
2
+ ['resolve', 'reject', 'all', 'race', 'allSettled'].forEach((k) => orig[k] = Promise[k].bind(Promise))
3
+
4
+ // Callbacks attached through Promise.resolve(value).then(...) will usually
5
+ // not execute immediately even if `value` is immediately available. This
6
+ // breaks tests that were written before promises even though they are semantically still valid.
7
+ // They can be made to work by making promises quasi-synchronous.
8
+
9
+ export function SyncPromise(value, fail = false) {
10
+ if (value instanceof SyncPromise) {
11
+ return value;
12
+ } else if (typeof value === 'object' && typeof value.then === 'function') {
13
+ return orig.resolve(value);
14
+ } else {
15
+ Object.assign(this, {
16
+ then: function (cb, err) {
17
+ const handler = fail ? err : cb;
18
+ if (handler != null) {
19
+ return new SyncPromise(handler(value));
20
+ } else {
21
+ return this;
22
+ }
23
+ },
24
+ catch: function (cb) {
25
+ if (fail) {
26
+ return new SyncPromise(cb(value))
27
+ } else {
28
+ return this;
29
+ }
30
+ },
31
+ finally: function (cb) {
32
+ cb();
33
+ return this;
34
+ },
35
+ __value: fail ? {status: 'rejected', reason: value} : {status: 'fulfilled', value}
36
+ })
37
+ }
38
+ }
39
+
40
+ Object.assign(SyncPromise, {
41
+ resolve: (val) => new SyncPromise(val),
42
+ reject: (val) => new SyncPromise(val, true),
43
+ race: (promises) => promises.find((p) => p instanceof SyncPromise) || orig.race(promises),
44
+ allSettled: (promises) => {
45
+ if (promises.every((p) => p instanceof SyncPromise)) {
46
+ return new SyncPromise(promises.map((p) => p.__value))
47
+ } else {
48
+ return orig.allSettled(promises);
49
+ }
50
+ },
51
+ all: (promises) => {
52
+ if (promises.every((p) => p instanceof SyncPromise)) {
53
+ return SyncPromise.allSettled(promises).then((result) => {
54
+ const err = result.find((r) => r.status === 'rejected');
55
+ if (err != null) {
56
+ return new SyncPromise(err.reason, true);
57
+ } else {
58
+ return new SyncPromise(result.map((r) => r.value))
59
+ }
60
+ })
61
+ } else {
62
+ return orig.all(promises);
63
+ }
64
+ }
65
+ })
66
+
67
+ export function synchronizePromise(sandbox) {
68
+ Object.keys(orig).forEach((k) => {
69
+ sandbox.stub(window.Promise, k).callsFake(SyncPromise[k]);
70
+ })
71
+ }