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.
- package/.eslintrc.js +8 -1
- package/allowedModules.js +4 -7
- package/integrationExamples/gpt/amp/creative.html +11 -33
- package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
- package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
- package/integrationExamples/gpt/userId_example.html +2 -2
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
- package/integrationExamples/gpt/x-domain/creative.html +63 -29
- package/modules/.submodules.json +3 -0
- package/modules/adagioBidAdapter.js +1 -9
- package/modules/adagioBidAdapter.md +1 -1
- package/modules/adbookpspBidAdapter.js +29 -12
- package/modules/adhashBidAdapter.js +4 -4
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +1 -1
- package/modules/adlooxRtdProvider.js +1 -1
- package/modules/adnowBidAdapter.js +1 -1
- package/modules/adnuntiusRtdProvider.js +96 -0
- package/modules/adnuntiusRtdProvider.md +41 -0
- package/modules/adomikAnalyticsAdapter.js +2 -2
- package/modules/adotBidAdapter.js +1 -1
- package/modules/adpod.js +14 -17
- package/modules/adrelevantisBidAdapter.js +2 -2
- package/modules/adtargetBidAdapter.js +1 -1
- package/modules/adtelligentBidAdapter.js +1 -1
- package/modules/advangelistsBidAdapter.js +2 -2
- package/modules/adxpremiumAnalyticsAdapter.js +1 -1
- package/modules/adyoulikeBidAdapter.js +1 -1
- package/modules/afpBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +16 -4
- package/modules/asealBidAdapter.js +58 -0
- package/modules/asealBidAdapter.md +52 -0
- package/modules/beachfrontBidAdapter.js +2 -2
- package/modules/betweenBidAdapter.js +1 -1
- package/modules/bidViewability.js +1 -1
- package/modules/bluebillywigBidAdapter.js +1 -1
- package/modules/brandmetricsRtdProvider.js +168 -0
- package/modules/brandmetricsRtdProvider.md +40 -0
- package/modules/bridgewellBidAdapter.js +1 -1
- package/modules/browsiRtdProvider.js +2 -2
- package/modules/cleanmedianetBidAdapter.js +1 -1
- package/modules/colossussspBidAdapter.js +12 -8
- package/modules/colossussspBidAdapter.md +15 -1
- package/modules/compassBidAdapter.js +1 -1
- package/modules/connectIdSystem.js +1 -1
- package/modules/consentManagement.js +2 -3
- package/modules/consumableBidAdapter.md +1 -1
- package/modules/conversantBidAdapter.js +7 -0
- package/modules/craftBidAdapter.js +2 -2
- package/modules/criteoBidAdapter.js +10 -1
- package/modules/currency.js +27 -5
- package/modules/cwireBidAdapter.js +1 -1
- package/modules/dailyhuntBidAdapter.js +1 -1
- package/modules/dchain.js +1 -1
- package/modules/displayioBidAdapter.js +157 -0
- package/modules/displayioBidAdapter.md +148 -0
- package/modules/dspxBidAdapter.js +69 -29
- package/modules/dspxBidAdapter.md +2 -1
- package/modules/e_volutionBidAdapter.js +158 -0
- package/modules/emx_digitalBidAdapter.js +2 -2
- package/modules/fluctBidAdapter.js +0 -1
- package/modules/gamoshiBidAdapter.js +1 -1
- package/modules/gdprEnforcement.js +2 -2
- package/modules/glomexBidAdapter.js +1 -1
- package/modules/gnetBidAdapter.js +3 -3
- package/modules/gnetBidAdapter.md +4 -4
- package/modules/goldbachBidAdapter.js +2 -2
- package/modules/gptPreAuction.js +1 -1
- package/modules/gridBidAdapter.js +15 -1
- package/modules/gumgumBidAdapter.js +57 -43
- package/modules/hadronIdSystem.js +96 -0
- package/modules/hadronIdSystem.md +35 -0
- package/modules/hadronRtdProvider.js +254 -0
- package/modules/hadronRtdProvider.md +126 -0
- package/modules/haloIdSystem.md +4 -35
- package/modules/haloRtdProvider.md +3 -126
- package/modules/hybridBidAdapter.js +1 -1
- package/modules/improvedigitalBidAdapter.js +6 -1
- package/modules/insticatorBidAdapter.js +1 -1
- package/modules/interactiveOffersBidAdapter.js +9 -6
- package/modules/intersectionRtdProvider.js +1 -1
- package/modules/ixBidAdapter.js +2 -2
- package/modules/jwplayerRtdProvider.js +72 -7
- package/modules/jwplayerRtdProvider.md +27 -11
- package/modules/kargoBidAdapter.js +2 -2
- package/modules/livewrappedBidAdapter.js +1 -1
- package/modules/lunamediahbBidAdapter.js +32 -4
- package/modules/malltvBidAdapter.js +7 -3
- package/modules/malltvBidAdapter.md +64 -51
- package/modules/mass.js +3 -5
- package/modules/mediakeysBidAdapter.js +2 -2
- package/modules/medianetAnalyticsAdapter.js +2 -2
- package/modules/medianetRtdProvider.js +1 -1
- package/modules/mediasquareBidAdapter.js +1 -0
- package/modules/nextMillenniumBidAdapter.js +1 -0
- package/modules/nextrollBidAdapter.js +1 -1
- package/modules/oguryBidAdapter.js +7 -14
- package/modules/onetagBidAdapter.js +1 -1
- package/modules/openwebBidAdapter.js +1 -1
- package/modules/openxAnalyticsAdapter.js +2 -2
- package/modules/openxBidAdapter.js +1 -1
- package/modules/parrableIdSystem.js +1 -1
- package/modules/permutiveRtdProvider.js +1 -1
- package/modules/pilotxBidAdapter.js +147 -0
- package/modules/pilotxBidAdapter.md +50 -0
- package/modules/pixfutureBidAdapter.js +2 -2
- package/modules/prebidServerBidAdapter/index.js +63 -41
- package/modules/priceFloors.js +15 -14
- package/modules/pubmaticBidAdapter.js +1 -1
- package/modules/quantcastBidAdapter.js +1 -1
- package/modules/reconciliationRtdProvider.js +1 -1
- package/modules/richaudienceBidAdapter.js +7 -2
- package/modules/riseBidAdapter.js +17 -6
- package/modules/roxotAnalyticsAdapter.js +1 -1
- package/modules/rtbhouseBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +9 -11
- package/modules/rubiconAnalyticsAdapter.js +8 -2
- package/modules/rubiconBidAdapter.js +1 -1
- package/modules/saambaaBidAdapter.js +420 -420
- package/modules/seedingAllianceBidAdapter.js +3 -3
- package/modules/sharethroughBidAdapter.js +12 -17
- package/modules/sigmoidAnalyticsAdapter.js +1 -1
- package/modules/sirdataRtdProvider.js +1 -1
- package/modules/sizeMappingV2.js +2 -9
- package/modules/smarticoBidAdapter.js +1 -1
- package/modules/sortableAnalyticsAdapter.js +5 -4
- package/modules/sovrnAnalyticsAdapter.js +2 -2
- package/modules/sovrnBidAdapter.js +93 -18
- package/modules/sovrnBidAdapter.md +80 -2
- package/modules/sspBCBidAdapter.js +54 -21
- package/modules/synacormediaBidAdapter.js +32 -11
- package/modules/targetVideoBidAdapter.js +1 -1
- package/modules/telariaBidAdapter.js +22 -29
- package/modules/trustpidSystem.js +197 -0
- package/modules/trustpidSystem.md +45 -0
- package/modules/undertoneBidAdapter.js +17 -1
- package/modules/userId/eids.js +16 -1
- package/modules/userId/eids.md +10 -2
- package/modules/userId/index.js +2 -2
- package/modules/userId/userId.md +17 -2
- package/modules/ventesBidAdapter.js +1 -1
- package/modules/verizonMediaIdSystem.js +1 -1
- package/modules/vibrantmediaBidAdapter.js +220 -0
- package/modules/vibrantmediaBidAdapter.md +92 -0
- package/modules/viewability.js +177 -0
- package/modules/viewability.md +87 -0
- package/modules/viewdeosDXBidAdapter.js +1 -1
- package/modules/voxBidAdapter.js +1 -1
- package/modules/waardexBidAdapter.js +1 -1
- package/modules/weboramaRtdProvider.js +264 -34
- package/modules/weboramaRtdProvider.md +110 -40
- package/modules/widespaceBidAdapter.js +2 -2
- package/modules/winrBidAdapter.js +7 -7
- package/modules/yahoosspBidAdapter.js +3 -1
- package/modules/yieldlabBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +2 -2
- package/modules/yieldoneBidAdapter.js +6 -0
- package/modules/yuktamediaAnalyticsAdapter.js +1 -1
- package/package.json +3 -1
- package/plugins/poly/arrayFrom.js +3 -0
- package/plugins/poly/find.js +3 -0
- package/plugins/poly/findIndex.js +3 -0
- package/plugins/poly/includes.js +3 -0
- package/plugins/poly/package.json +8 -0
- package/src/Renderer.js +1 -1
- package/src/adRendering.js +38 -0
- package/src/adapterManager.js +33 -28
- package/src/adapters/bidderFactory.js +13 -11
- package/src/adloader.js +3 -2
- package/src/auction.js +140 -117
- package/src/auctionIndex.js +85 -0
- package/src/auctionManager.js +4 -1
- package/src/bidderSettings.js +69 -0
- package/src/bidfactory.js +18 -6
- package/src/config.js +3 -4
- package/src/cpmBucketManager.js +1 -1
- package/src/native.js +30 -22
- package/src/prebid.js +4 -20
- package/src/secureCreatives.js +133 -49
- package/src/sizeMapping.js +1 -1
- package/src/storageManager.js +1 -1
- package/src/targeting.js +13 -4
- package/src/userSync.js +1 -1
- package/src/utils.js +16 -19
- package/src/video.js +11 -12
- package/src/videoCache.js +10 -9
- package/test/fixtures/fixtures.js +2 -1
- package/test/helpers/indexStub.js +28 -0
- package/test/helpers/syncPromise.js +71 -0
- package/test/spec/auctionmanager_spec.js +269 -90
- package/test/spec/config_spec.js +24 -1
- package/test/spec/e2e/longform/basic_w_bidderSettings.spec.js +1 -1
- package/test/spec/e2e/longform/basic_w_custom_adserver_translation.spec.js +1 -1
- package/test/spec/e2e/longform/basic_w_priceGran.spec.js +1 -1
- package/test/spec/e2e/longform/basic_w_requireExactDuration.spec.js +1 -1
- package/test/spec/e2e/longform/basic_wo_brandCategoryExclusion.spec.js +1 -1
- package/test/spec/e2e/longform/basic_wo_requireExactDuration.spec.js +1 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
- package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
- package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
- package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
- package/test/spec/modules/adpod_spec.js +91 -156
- package/test/spec/modules/afpBidAdapter_spec.js +1 -1
- package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
- package/test/spec/modules/asealBidAdapter_spec.js +144 -0
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
- package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
- package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
- package/test/spec/modules/currency_spec.js +36 -15
- package/test/spec/modules/deepintentDpesIdsystem_spec.js +1 -1
- package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
- package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
- package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
- package/test/spec/modules/eids_spec.js +2 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
- package/test/spec/modules/gridBidAdapter_spec.js +18 -0
- package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
- package/test/spec/modules/hadronIdSystem_spec.js +57 -0
- package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
- package/test/spec/modules/idxIdSystem_spec.js +1 -1
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
- package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
- package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
- package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
- package/test/spec/modules/mass_spec.js +2 -14
- package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -1
- package/test/spec/modules/multibid_spec.js +1 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
- package/test/spec/modules/onetagBidAdapter_spec.js +1 -1
- package/test/spec/modules/openxAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/parrableIdSystem_spec.js +1 -1
- package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
- package/test/spec/modules/priceFloors_spec.js +37 -24
- package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
- package/test/spec/modules/realTimeDataModule_spec.js +51 -2
- package/test/spec/modules/riseBidAdapter_spec.js +30 -4
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
- package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
- package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
- package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
- package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
- package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +1 -1
- package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
- package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
- package/test/spec/modules/trustpidSystem_spec.js +232 -0
- package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
- package/test/spec/modules/userId_spec.js +40 -40
- package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
- package/test/spec/modules/viewability_spec.js +280 -0
- package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
- package/test/spec/modules/widespaceBidAdapter_spec.js +1 -1
- package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
- package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -1
- package/test/spec/native_spec.js +62 -40
- package/test/spec/sizeMapping_spec.js +1 -1
- package/test/spec/unit/core/adapterManager_spec.js +24 -2
- package/test/spec/unit/core/auctionIndex_spec.js +129 -0
- package/test/spec/unit/core/bidderFactory_spec.js +65 -12
- package/test/spec/unit/core/bidderSettings_spec.js +123 -0
- package/test/spec/unit/core/targeting_spec.js +93 -0
- package/test/spec/unit/pbjs_api_spec.js +81 -43
- package/test/spec/unit/secureCreatives_spec.js +143 -24
- package/test/spec/videoCache_spec.js +18 -19
- package/test/spec/video_spec.js +51 -61
- package/webpack.conf.js +1 -1
package/src/video.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import adapterManager from './adapterManager.js';
|
|
2
|
-
import {
|
|
2
|
+
import { deepAccess, logError } from './utils.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
|
-
import includes from '
|
|
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
|
|
32
|
+
* @param index
|
|
32
33
|
* @return {Boolean} If object is valid
|
|
33
34
|
*/
|
|
34
|
-
export function isValidVideoBid(bid,
|
|
35
|
-
const
|
|
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,
|
|
42
|
+
return checkVideoBidSetup(bid, adUnit, videoMediaType, context);
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
export const checkVideoBidSetup = hook('sync', function(bid,
|
|
47
|
-
if (
|
|
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 ||
|
|
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 {
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
|
139
|
+
export function store(bids, done) {
|
|
139
140
|
const requestData = {
|
|
140
|
-
puts: bids.map(toStorageRequest
|
|
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
|
+
}
|