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
|
@@ -4,19 +4,18 @@ import {
|
|
|
4
4
|
getPrebidInternal, logError, isStr, isPlainObject, logWarn, generateUUID, bind, logMessage,
|
|
5
5
|
triggerPixel, insertUserSyncIframe, deepAccess, mergeDeep, deepSetValue, cleanObj, parseSizesInput,
|
|
6
6
|
getBidRequest, getDefinedParams, createTrackPixelHtml, pick, deepClone, uniques, flatten, isNumber,
|
|
7
|
-
isEmpty, isArray, logInfo
|
|
7
|
+
isEmpty, isArray, logInfo, timestamp
|
|
8
8
|
} from '../../src/utils.js';
|
|
9
9
|
import CONSTANTS from '../../src/constants.json';
|
|
10
10
|
import adapterManager from '../../src/adapterManager.js';
|
|
11
11
|
import { config } from '../../src/config.js';
|
|
12
12
|
import { VIDEO, NATIVE } from '../../src/mediaTypes.js';
|
|
13
|
-
import { processNativeAdUnitParams } from '../../src/native.js';
|
|
14
13
|
import { isValid } from '../../src/adapters/bidderFactory.js';
|
|
15
14
|
import events from '../../src/events.js';
|
|
16
|
-
import includes from '
|
|
15
|
+
import includes from 'prebidjs-polyfill/includes.js';
|
|
17
16
|
import { S2S_VENDORS } from './config.js';
|
|
18
17
|
import { ajax } from '../../src/ajax.js';
|
|
19
|
-
import find from '
|
|
18
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
20
19
|
|
|
21
20
|
const getConfig = config.getConfig;
|
|
22
21
|
|
|
@@ -54,6 +53,7 @@ let eidPermissions;
|
|
|
54
53
|
* @typedef {Object} S2SDefaultConfig
|
|
55
54
|
* @summary Base config properties for server to server header bidding
|
|
56
55
|
* @property {string} [adapter='prebidServer'] adapter code to use for S2S
|
|
56
|
+
* @property {boolean} [allowUnknownBidderCodes=false] allow bids from bidders that were not explicitly requested
|
|
57
57
|
* @property {boolean} [enabled=false] enables S2S bidding
|
|
58
58
|
* @property {number} [timeout=1000] timeout for S2S bidders - should be lower than `pbjs.requestBids({timeout})`
|
|
59
59
|
* @property {number} [syncTimeout=1000] timeout for cookie sync iframe / image rendering
|
|
@@ -81,6 +81,7 @@ const s2sDefaultConfig = {
|
|
|
81
81
|
syncTimeout: 1000,
|
|
82
82
|
maxBids: 1,
|
|
83
83
|
adapter: 'prebidServer',
|
|
84
|
+
allowUnknownBidderCodes: false,
|
|
84
85
|
adapterOptions: {},
|
|
85
86
|
syncUrlModifier: {}
|
|
86
87
|
};
|
|
@@ -433,7 +434,6 @@ let nativeEventTrackerMethodMap = {
|
|
|
433
434
|
* Protocol spec for OpenRTB endpoint
|
|
434
435
|
* e.g., https://<prebid-server-url>/v1/openrtb2/auction
|
|
435
436
|
*/
|
|
436
|
-
let bidIdMap = {};
|
|
437
437
|
let nativeAssetCache = {}; // store processed native params to preserve
|
|
438
438
|
|
|
439
439
|
/**
|
|
@@ -491,8 +491,24 @@ export function resetWurlMap() {
|
|
|
491
491
|
wurlMap = {};
|
|
492
492
|
}
|
|
493
493
|
|
|
494
|
-
|
|
495
|
-
|
|
494
|
+
function ORTB2(s2sBidRequest, bidderRequests, adUnits, requestedBidders) {
|
|
495
|
+
this.s2sBidRequest = s2sBidRequest;
|
|
496
|
+
this.bidderRequests = bidderRequests;
|
|
497
|
+
this.adUnits = adUnits;
|
|
498
|
+
this.s2sConfig = s2sBidRequest.s2sConfig;
|
|
499
|
+
this.requestedBidders = requestedBidders;
|
|
500
|
+
|
|
501
|
+
this.bidIdMap = {};
|
|
502
|
+
this.adUnitsByImp = {};
|
|
503
|
+
this.impRequested = {};
|
|
504
|
+
this.auctionId = bidderRequests.map(br => br.auctionId).reduce((l, r) => (l == null || l === r) && r);
|
|
505
|
+
this.requestTimestamp = timestamp();
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
Object.assign(ORTB2.prototype, {
|
|
509
|
+
buildRequest() {
|
|
510
|
+
const {s2sBidRequest, bidderRequests: bidRequests, adUnits, s2sConfig, requestedBidders} = this;
|
|
511
|
+
|
|
496
512
|
let imps = [];
|
|
497
513
|
let aliases = {};
|
|
498
514
|
const firstBidRequest = bidRequests[0];
|
|
@@ -510,8 +526,9 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
510
526
|
impressionId = `${adUnit.code}-${i}`;
|
|
511
527
|
}
|
|
512
528
|
impIds.add(impressionId);
|
|
529
|
+
this.adUnitsByImp[impressionId] = adUnit;
|
|
513
530
|
|
|
514
|
-
const nativeParams =
|
|
531
|
+
const nativeParams = adUnit.nativeParams;
|
|
515
532
|
let nativeAssets;
|
|
516
533
|
if (nativeParams) {
|
|
517
534
|
try {
|
|
@@ -584,9 +601,7 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
584
601
|
const bannerParams = deepAccess(adUnit, 'mediaTypes.banner');
|
|
585
602
|
|
|
586
603
|
adUnit.bids.forEach(bid => {
|
|
587
|
-
|
|
588
|
-
// combined to create a unique key for each bid since an id isn't returned
|
|
589
|
-
bidIdMap[`${impressionId}${bid.bidder}`] = bid.bid_id;
|
|
604
|
+
this.setBidRequestId(impressionId, bid.bidder, bid.bid_id);
|
|
590
605
|
// check for and store valid aliases to add to the request
|
|
591
606
|
if (adapterManager.aliasRegistry[bid.bidder]) {
|
|
592
607
|
const bidder = adapterManager.bidderRegistry[bid.bidder];
|
|
@@ -854,10 +869,12 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
854
869
|
|
|
855
870
|
addBidderFirstPartyDataToRequest(request);
|
|
856
871
|
|
|
872
|
+
request.imp.forEach((imp) => this.impRequested[imp.id] = imp);
|
|
857
873
|
return request;
|
|
858
874
|
},
|
|
859
875
|
|
|
860
|
-
interpretResponse(response
|
|
876
|
+
interpretResponse(response) {
|
|
877
|
+
const {bidderRequests, s2sConfig} = this;
|
|
861
878
|
const bids = [];
|
|
862
879
|
|
|
863
880
|
[['errors', 'serverErrors'], ['responsetimemillis', 'serverResponseTimeMs']]
|
|
@@ -867,22 +884,22 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
867
884
|
// a seatbid object contains a `bid` array and a `seat` string
|
|
868
885
|
response.seatbid.forEach(seatbid => {
|
|
869
886
|
(seatbid.bid || []).forEach(bid => {
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
bidIdMap[key],
|
|
875
|
-
bidderRequests
|
|
876
|
-
);
|
|
887
|
+
const bidRequest = this.getBidRequest(bid.impid, seatbid.seat);
|
|
888
|
+
if (bidRequest == null && !s2sConfig.allowUnknownBidderCodes) {
|
|
889
|
+
logWarn(`PBS adapter received bid from unknown bidder (${seatbid.seat}), but 's2sConfig.allowUnknownBidderCodes' is not set. Ignoring bid.`);
|
|
890
|
+
return;
|
|
877
891
|
}
|
|
878
892
|
|
|
879
893
|
const cpm = bid.price;
|
|
880
894
|
const status = cpm !== 0 ? CONSTANTS.STATUS.GOOD : CONSTANTS.STATUS.NO_BID;
|
|
881
|
-
let bidObject = createBid(status,
|
|
895
|
+
let bidObject = createBid(status, {
|
|
882
896
|
bidder: seatbid.seat,
|
|
883
|
-
src: TYPE
|
|
897
|
+
src: TYPE,
|
|
898
|
+
bidId: bidRequest ? (bidRequest.bidId || bidRequest.bid_Id) : null,
|
|
899
|
+
transactionId: this.adUnitsByImp[bid.impid].transactionId,
|
|
900
|
+
auctionId: this.auctionId,
|
|
884
901
|
});
|
|
885
|
-
|
|
902
|
+
bidObject.requestTimestamp = this.requestTimestamp;
|
|
886
903
|
bidObject.cpm = cpm;
|
|
887
904
|
|
|
888
905
|
// temporarily leaving attaching it to each bidResponse so no breaking change
|
|
@@ -900,7 +917,7 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
900
917
|
|
|
901
918
|
// store wurl by auctionId and adId so it can be accessed from the BID_WON event handler
|
|
902
919
|
if (isStr(deepAccess(bid, 'ext.prebid.events.win'))) {
|
|
903
|
-
addWurl(
|
|
920
|
+
addWurl(this.auctionId, bidObject.adId, deepAccess(bid, 'ext.prebid.events.win'));
|
|
904
921
|
}
|
|
905
922
|
|
|
906
923
|
let extPrebidTargeting = deepAccess(bid, 'ext.prebid.targeting');
|
|
@@ -921,9 +938,8 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
921
938
|
|
|
922
939
|
if (deepAccess(bid, 'ext.prebid.type') === VIDEO) {
|
|
923
940
|
bidObject.mediaType = VIDEO;
|
|
924
|
-
|
|
925
|
-
bidObject.playerWidth =
|
|
926
|
-
bidObject.playerHeight = sizes[1];
|
|
941
|
+
const impReq = this.impRequested[bid.impid];
|
|
942
|
+
[bidObject.playerWidth, bidObject.playerHeight] = [impReq.video.w, impReq.video.h];
|
|
927
943
|
|
|
928
944
|
// try to get cache values from 'response.ext.prebid.cache.js'
|
|
929
945
|
// else try 'bid.ext.prebid.targeting' as fallback
|
|
@@ -1006,7 +1022,6 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
1006
1022
|
bidObject.width = bid.w;
|
|
1007
1023
|
bidObject.height = bid.h;
|
|
1008
1024
|
if (bid.dealid) { bidObject.dealId = bid.dealid; }
|
|
1009
|
-
bidObject.requestId = bidRequest.bidId || bidRequest.bid_Id;
|
|
1010
1025
|
bidObject.creative_id = bid.crid;
|
|
1011
1026
|
bidObject.creativeId = bid.crid;
|
|
1012
1027
|
if (bid.burl) { bidObject.burl = bid.burl; }
|
|
@@ -1021,14 +1036,24 @@ const OPEN_RTB_PROTOCOL = {
|
|
|
1021
1036
|
bidObject.ttl = (bid.exp) ? bid.exp : configTtl;
|
|
1022
1037
|
bidObject.netRevenue = (bid.netRevenue) ? bid.netRevenue : DEFAULT_S2S_NETREVENUE;
|
|
1023
1038
|
|
|
1024
|
-
bids.push({ adUnit:
|
|
1039
|
+
bids.push({ adUnit: this.adUnitsByImp[bid.impid].code, bid: bidObject });
|
|
1025
1040
|
});
|
|
1026
1041
|
});
|
|
1027
1042
|
}
|
|
1028
1043
|
|
|
1029
1044
|
return bids;
|
|
1045
|
+
},
|
|
1046
|
+
setBidRequestId(impId, bidderCode, bidId) {
|
|
1047
|
+
this.bidIdMap[this.impBidderKey(impId, bidderCode)] = bidId;
|
|
1048
|
+
},
|
|
1049
|
+
getBidRequest(impId, bidderCode) {
|
|
1050
|
+
const key = this.impBidderKey(impId, bidderCode);
|
|
1051
|
+
return this.bidIdMap[key] && getBidRequest(this.bidIdMap[key], this.bidderRequests);
|
|
1052
|
+
},
|
|
1053
|
+
impBidderKey(impId, bidderCode) {
|
|
1054
|
+
return `${impId}${bidderCode}`;
|
|
1030
1055
|
}
|
|
1031
|
-
};
|
|
1056
|
+
});
|
|
1032
1057
|
|
|
1033
1058
|
/**
|
|
1034
1059
|
* BID_WON event to request the wurl
|
|
@@ -1099,7 +1124,8 @@ export function PrebidServer() {
|
|
|
1099
1124
|
queueSync(syncBidders, gdprConsent, uspConsent, s2sBidRequest.s2sConfig);
|
|
1100
1125
|
}
|
|
1101
1126
|
|
|
1102
|
-
const
|
|
1127
|
+
const ortb2 = new ORTB2(s2sBidRequest, bidRequests, validAdUnits, requestedBidders);
|
|
1128
|
+
const request = ortb2.buildRequest();
|
|
1103
1129
|
const requestJson = request && JSON.stringify(request);
|
|
1104
1130
|
logInfo('BidRequest: ' + requestJson);
|
|
1105
1131
|
const endpointUrl = getMatchingConsentUrl(s2sBidRequest.s2sConfig.endpoint, gdprConsent);
|
|
@@ -1107,7 +1133,7 @@ export function PrebidServer() {
|
|
|
1107
1133
|
ajax(
|
|
1108
1134
|
endpointUrl,
|
|
1109
1135
|
{
|
|
1110
|
-
success: response => handleResponse(response,
|
|
1136
|
+
success: response => handleResponse(response, ortb2, addBidResponse, done),
|
|
1111
1137
|
error: done
|
|
1112
1138
|
},
|
|
1113
1139
|
requestJson,
|
|
@@ -1120,27 +1146,23 @@ export function PrebidServer() {
|
|
|
1120
1146
|
};
|
|
1121
1147
|
|
|
1122
1148
|
/* Notify Prebid of bid responses so bids can get in the auction */
|
|
1123
|
-
function handleResponse(response,
|
|
1149
|
+
function handleResponse(response, ortb2, addBidResponse, done) {
|
|
1124
1150
|
let result;
|
|
1125
1151
|
let bids = [];
|
|
1126
|
-
let { gdprConsent, uspConsent } = getConsentData(bidderRequests);
|
|
1152
|
+
let { gdprConsent, uspConsent } = getConsentData(ortb2.bidderRequests);
|
|
1127
1153
|
|
|
1128
1154
|
try {
|
|
1129
1155
|
result = JSON.parse(response);
|
|
1130
1156
|
|
|
1131
|
-
bids =
|
|
1132
|
-
result,
|
|
1133
|
-
bidderRequests,
|
|
1134
|
-
s2sConfig
|
|
1135
|
-
);
|
|
1157
|
+
bids = ortb2.interpretResponse(result);
|
|
1136
1158
|
|
|
1137
1159
|
bids.forEach(({adUnit, bid}) => {
|
|
1138
|
-
if (isValid(adUnit, bid
|
|
1160
|
+
if (isValid(adUnit, bid)) {
|
|
1139
1161
|
addBidResponse(adUnit, bid);
|
|
1140
1162
|
}
|
|
1141
1163
|
});
|
|
1142
1164
|
|
|
1143
|
-
bidderRequests.forEach(bidderRequest => events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest));
|
|
1165
|
+
ortb2.bidderRequests.forEach(bidderRequest => events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest));
|
|
1144
1166
|
} catch (error) {
|
|
1145
1167
|
logError(error);
|
|
1146
1168
|
}
|
|
@@ -1150,7 +1172,7 @@ export function PrebidServer() {
|
|
|
1150
1172
|
}
|
|
1151
1173
|
|
|
1152
1174
|
done();
|
|
1153
|
-
doClientSideSyncs(requestedBidders, gdprConsent, uspConsent);
|
|
1175
|
+
doClientSideSyncs(ortb2.requestedBidders, gdprConsent, uspConsent);
|
|
1154
1176
|
}
|
|
1155
1177
|
|
|
1156
1178
|
// Listen for bid won to call wurl
|
package/modules/priceFloors.js
CHANGED
|
@@ -6,8 +6,10 @@ import events from '../src/events.js';
|
|
|
6
6
|
import CONSTANTS from '../src/constants.json';
|
|
7
7
|
import { getHook } from '../src/hook.js';
|
|
8
8
|
import { createBid } from '../src/bidfactory.js';
|
|
9
|
-
import find from '
|
|
9
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
10
10
|
import { getRefererInfo } from '../src/refererDetection.js';
|
|
11
|
+
import {auctionManager} from '../src/auctionManager.js';
|
|
12
|
+
import {bidderSettings} from '../src/bidderSettings.js';
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* @summary This Module is intended to provide users with the ability to dynamically set and enforce price floors on a per auction basis.
|
|
@@ -65,9 +67,10 @@ function getHostNameFromReferer(referer) {
|
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
// First look into bidRequest!
|
|
68
|
-
function
|
|
69
|
-
const
|
|
70
|
-
|
|
70
|
+
function getGptSlotFromAdUnit(transactionId, {index = auctionManager.index} = {}) {
|
|
71
|
+
const adUnit = index.getAdUnit({transactionId});
|
|
72
|
+
const isGam = deepAccess(adUnit, 'ortb2Imp.ext.data.adserver.name') === 'gam';
|
|
73
|
+
return isGam && adUnit.ortb2Imp.ext.data.adserver.adslot;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
/**
|
|
@@ -76,9 +79,9 @@ function getGptSlotFromBidRequest(bidRequest) {
|
|
|
76
79
|
export let fieldMatchingFunctions = {
|
|
77
80
|
'size': (bidRequest, bidResponse) => parseGPTSingleSizeArray(bidResponse.size) || '*',
|
|
78
81
|
'mediaType': (bidRequest, bidResponse) => bidResponse.mediaType || 'banner',
|
|
79
|
-
'gptSlot': (bidRequest, bidResponse) =>
|
|
82
|
+
'gptSlot': (bidRequest, bidResponse) => getGptSlotFromAdUnit((bidRequest || bidResponse).transactionId) || getGptSlotInfoForAdUnitCode((bidRequest || bidResponse).adUnitCode).gptSlot,
|
|
80
83
|
'domain': (bidRequest, bidResponse) => referrerHostname || getHostNameFromReferer(getRefererInfo().referer),
|
|
81
|
-
'adUnitCode': (bidRequest, bidResponse) => bidRequest.adUnitCode
|
|
84
|
+
'adUnitCode': (bidRequest, bidResponse) => (bidRequest || bidResponse).adUnitCode
|
|
82
85
|
}
|
|
83
86
|
|
|
84
87
|
/**
|
|
@@ -147,7 +150,7 @@ function generatePossibleEnumerations(arrayOfFields, delimiter) {
|
|
|
147
150
|
* @summary If a the input bidder has a registered cpmadjustment it returns the input CPM after being adjusted
|
|
148
151
|
*/
|
|
149
152
|
export function getBiddersCpmAdjustment(bidderName, inputCpm, bid = {}) {
|
|
150
|
-
const adjustmentFunction =
|
|
153
|
+
const adjustmentFunction = bidderSettings.get(bidderName, 'bidCpmAdjustment');
|
|
151
154
|
if (adjustmentFunction) {
|
|
152
155
|
return parseFloat(adjustmentFunction(inputCpm, {...bid, cpm: inputCpm}));
|
|
153
156
|
}
|
|
@@ -664,15 +667,13 @@ function shouldFloorBid(floorData, floorInfo, bid) {
|
|
|
664
667
|
* And if the rule we find determines a bid should be floored we will do so.
|
|
665
668
|
*/
|
|
666
669
|
export function addBidResponseHook(fn, adUnitCode, bid) {
|
|
667
|
-
let floorData = _floorDataForAuction[
|
|
668
|
-
// if no floor data
|
|
669
|
-
|
|
670
|
-
if (!floorData || !bid || floorData.skipped || !matchingBidRequest) {
|
|
670
|
+
let floorData = _floorDataForAuction[bid.auctionId];
|
|
671
|
+
// if no floor data then bail
|
|
672
|
+
if (!floorData || !bid || floorData.skipped) {
|
|
671
673
|
return fn.call(this, adUnitCode, bid);
|
|
672
674
|
}
|
|
673
|
-
|
|
674
675
|
// get the matching rule
|
|
675
|
-
let floorInfo = getFirstMatchingFloor(floorData.data,
|
|
676
|
+
let floorInfo = getFirstMatchingFloor(floorData.data, null, {...bid, size: [bid.width, bid.height]});
|
|
676
677
|
|
|
677
678
|
if (!floorInfo.matchingFloor) {
|
|
678
679
|
logWarn(`${MODULE_NAME}: unable to determine a matching price floor for bidResponse`, bid);
|
|
@@ -706,7 +707,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
|
|
|
706
707
|
if (shouldFloorBid(floorData, floorInfo, bid)) {
|
|
707
708
|
// bid fails floor -> throw it out
|
|
708
709
|
// create basic bid no-bid with necessary data fro analytics adapters
|
|
709
|
-
let flooredBid = createBid(CONSTANTS.STATUS.NO_BID,
|
|
710
|
+
let flooredBid = createBid(CONSTANTS.STATUS.NO_BID, bid.getIdentifiers());
|
|
710
711
|
Object.assign(flooredBid, pick(bid, [
|
|
711
712
|
'floorData',
|
|
712
713
|
'width',
|
|
@@ -1080,7 +1080,7 @@ export const spec = {
|
|
|
1080
1080
|
bid = deepClone(originalBid);
|
|
1081
1081
|
bid.params.adSlot = bid.params.adSlot || '';
|
|
1082
1082
|
_parseAdSlot(bid);
|
|
1083
|
-
if (bid.params.hasOwnProperty('video')) {
|
|
1083
|
+
if ((bid.mediaTypes && bid.mediaTypes.hasOwnProperty('video')) || bid.params.hasOwnProperty('video')) {
|
|
1084
1084
|
// Nothing to do
|
|
1085
1085
|
} else {
|
|
1086
1086
|
// If we have a native mediaType configured alongside banner, its ok if the banner size is not set in width and height
|
|
@@ -3,7 +3,7 @@ import { ajax } from '../src/ajax.js';
|
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { getStorageManager } from '../src/storageManager.js';
|
|
5
5
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
6
|
-
import find from '
|
|
6
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
7
7
|
|
|
8
8
|
const BIDDER_CODE = 'quantcast';
|
|
9
9
|
const DEFAULT_BID_FLOOR = 0.0000000001;
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import { submodule } from '../src/hook.js';
|
|
20
20
|
import { ajaxBuilder } from '../src/ajax.js';
|
|
21
21
|
import { isGptPubadsDefined, timestamp, generateUUID, logError } from '../src/utils.js';
|
|
22
|
-
import find from '
|
|
22
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
23
23
|
|
|
24
24
|
/** @type {Object} */
|
|
25
25
|
const MessageType = {
|
|
@@ -59,10 +59,15 @@ export const spec = {
|
|
|
59
59
|
REFERER = (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null)
|
|
60
60
|
|
|
61
61
|
payload.gdpr_consent = '';
|
|
62
|
-
payload.gdpr =
|
|
62
|
+
payload.gdpr = false;
|
|
63
63
|
|
|
64
64
|
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
65
|
-
|
|
65
|
+
if (typeof bidderRequest.gdprConsent.gdprApplies != 'undefined') {
|
|
66
|
+
payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
|
|
67
|
+
}
|
|
68
|
+
if (typeof bidderRequest.gdprConsent.consentString != 'undefined') {
|
|
69
|
+
payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
|
|
70
|
+
}
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
var payloadString = JSON.stringify(payload);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logWarn, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter } from '../src/utils.js';
|
|
1
|
+
import { logWarn, logInfo, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter, triggerPixel } from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {VIDEO} from '../src/mediaTypes.js';
|
|
4
4
|
import {config} from '../src/config.js';
|
|
@@ -23,7 +23,7 @@ export const spec = {
|
|
|
23
23
|
gvlid: 1043,
|
|
24
24
|
version: ADAPTER_VERSION,
|
|
25
25
|
supportedMediaTypes: SUPPORTED_AD_TYPES,
|
|
26
|
-
isBidRequestValid: function(bidRequest) {
|
|
26
|
+
isBidRequestValid: function (bidRequest) {
|
|
27
27
|
if (!bidRequest.params) {
|
|
28
28
|
logWarn('no params have been set to Rise adapter');
|
|
29
29
|
return false;
|
|
@@ -49,7 +49,7 @@ export const spec = {
|
|
|
49
49
|
|
|
50
50
|
return requests;
|
|
51
51
|
},
|
|
52
|
-
interpretResponse: function({body}) {
|
|
52
|
+
interpretResponse: function ({body}) {
|
|
53
53
|
const bidResponses = [];
|
|
54
54
|
|
|
55
55
|
const bidResponse = {
|
|
@@ -62,6 +62,7 @@ export const spec = {
|
|
|
62
62
|
netRevenue: body.netRevenue,
|
|
63
63
|
ttl: body.ttl || TTL,
|
|
64
64
|
vastXml: body.vastXml,
|
|
65
|
+
nurl: body.nurl,
|
|
65
66
|
mediaType: VIDEO
|
|
66
67
|
};
|
|
67
68
|
|
|
@@ -73,7 +74,7 @@ export const spec = {
|
|
|
73
74
|
|
|
74
75
|
return bidResponses;
|
|
75
76
|
},
|
|
76
|
-
getUserSyncs: function(syncOptions, serverResponses) {
|
|
77
|
+
getUserSyncs: function (syncOptions, serverResponses) {
|
|
77
78
|
const syncs = [];
|
|
78
79
|
for (const response of serverResponses) {
|
|
79
80
|
if (syncOptions.iframeEnabled && response.body.userSyncURL) {
|
|
@@ -93,8 +94,18 @@ export const spec = {
|
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
return syncs;
|
|
96
|
-
}
|
|
97
|
-
|
|
97
|
+
},
|
|
98
|
+
onBidWon: function (bid) {
|
|
99
|
+
if (bid == null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
logInfo('onBidWon:', bid);
|
|
104
|
+
if (bid.hasOwnProperty('nurl') && bid.nurl.length > 0) {
|
|
105
|
+
triggerPixel(bid.nurl);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
}
|
|
98
109
|
|
|
99
110
|
registerBidder(spec);
|
|
100
111
|
|
|
@@ -2,7 +2,7 @@ import { deepClone, getParameterByName, logInfo, logError } from '../src/utils.j
|
|
|
2
2
|
import adapter from '../src/AnalyticsAdapter.js';
|
|
3
3
|
import CONSTANTS from '../src/constants.json';
|
|
4
4
|
import adapterManager from '../src/adapterManager.js';
|
|
5
|
-
import includes from '
|
|
5
|
+
import includes from 'prebidjs-polyfill/includes.js';
|
|
6
6
|
import {ajaxBuilder} from '../src/ajax.js';
|
|
7
7
|
import { getStorageManager } from '../src/storageManager.js';
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isArray, deepAccess, getOrigin, logError } from '../src/utils.js';
|
|
2
2
|
import { BANNER, NATIVE } from '../src/mediaTypes.js';
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
|
-
import includes from '
|
|
4
|
+
import includes from 'prebidjs-polyfill/includes.js';
|
|
5
5
|
|
|
6
6
|
const BIDDER_CODE = 'rtbhouse';
|
|
7
7
|
const REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia'];
|
|
@@ -152,11 +152,11 @@
|
|
|
152
152
|
|
|
153
153
|
import {config} from '../../src/config.js';
|
|
154
154
|
import {module} from '../../src/hook.js';
|
|
155
|
-
import {logError, logWarn} from '../../src/utils.js';
|
|
155
|
+
import {logError, logInfo, logWarn} from '../../src/utils.js';
|
|
156
156
|
import events from '../../src/events.js';
|
|
157
157
|
import CONSTANTS from '../../src/constants.json';
|
|
158
158
|
import {gdprDataHandler, uspDataHandler} from '../../src/adapterManager.js';
|
|
159
|
-
import find from '
|
|
159
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
160
160
|
import {getGlobal} from '../../src/prebidGlobal.js';
|
|
161
161
|
|
|
162
162
|
/** @type {string} */
|
|
@@ -256,6 +256,7 @@ function initSubModules() {
|
|
|
256
256
|
}
|
|
257
257
|
});
|
|
258
258
|
subModules = subModulesByOrder;
|
|
259
|
+
logInfo(`Real time data module enabled, using submodules: ${subModules.map((m) => m.name).join(', ')}`);
|
|
259
260
|
}
|
|
260
261
|
|
|
261
262
|
/**
|
|
@@ -290,18 +291,12 @@ export function setBidRequestsData(fn, reqBidsConfigObj) {
|
|
|
290
291
|
return exitHook();
|
|
291
292
|
}
|
|
292
293
|
|
|
293
|
-
|
|
294
|
-
waitTimeout = setTimeout(exitHook, _moduleConfig.auctionDelay);
|
|
295
|
-
}
|
|
294
|
+
waitTimeout = setTimeout(exitHook, shouldDelayAuction ? _moduleConfig.auctionDelay : 0);
|
|
296
295
|
|
|
297
296
|
relevantSubModules.forEach(sm => {
|
|
298
297
|
sm.getBidRequestData(reqBidsConfigObj, onGetBidRequestDataCallback.bind(sm), sm.config, _userConsent)
|
|
299
298
|
});
|
|
300
299
|
|
|
301
|
-
if (!shouldDelayAuction) {
|
|
302
|
-
return exitHook();
|
|
303
|
-
}
|
|
304
|
-
|
|
305
300
|
function onGetBidRequestDataCallback() {
|
|
306
301
|
if (isDone) {
|
|
307
302
|
return;
|
|
@@ -309,12 +304,15 @@ export function setBidRequestsData(fn, reqBidsConfigObj) {
|
|
|
309
304
|
if (this.config && this.config.waitForIt) {
|
|
310
305
|
callbacksExpected--;
|
|
311
306
|
}
|
|
312
|
-
if (callbacksExpected
|
|
313
|
-
|
|
307
|
+
if (callbacksExpected === 0) {
|
|
308
|
+
setTimeout(exitHook, 0);
|
|
314
309
|
}
|
|
315
310
|
}
|
|
316
311
|
|
|
317
312
|
function exitHook() {
|
|
313
|
+
if (isDone) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
318
316
|
isDone = true;
|
|
319
317
|
clearTimeout(waitTimeout);
|
|
320
318
|
fn.call(this, reqBidsConfigObj);
|
|
@@ -234,6 +234,9 @@ function sendMessage(auctionId, bidWonId, trigger) {
|
|
|
234
234
|
|
|
235
235
|
let auction = {
|
|
236
236
|
clientTimeoutMillis: auctionCache.timeout,
|
|
237
|
+
auctionStart: auctionCache.timestamp,
|
|
238
|
+
auctionEnd: auctionCache.endTs,
|
|
239
|
+
bidderOrder: auctionCache.bidderOrder,
|
|
237
240
|
samplingFactor,
|
|
238
241
|
accountId,
|
|
239
242
|
adUnits: Object.keys(adUnitMap).map(i => adUnitMap[i]),
|
|
@@ -384,8 +387,9 @@ export function parseBidResponse(bid, previousBidResponse, auctionFloorData) {
|
|
|
384
387
|
'floorRuleValue', () => deepAccess(bid, 'floorData.floorRuleValue'),
|
|
385
388
|
'floorRule', () => debugTurnedOn() ? deepAccess(bid, 'floorData.floorRule') : undefined,
|
|
386
389
|
'adomains', () => {
|
|
387
|
-
|
|
388
|
-
|
|
390
|
+
const adomains = deepAccess(bid, 'meta.advertiserDomains');
|
|
391
|
+
const validAdomains = Array.isArray(adomains) && adomains.filter(domain => typeof domain === 'string');
|
|
392
|
+
return validAdomains && validAdomains.length > 0 ? validAdomains.slice(0, 10) : undefined
|
|
389
393
|
}
|
|
390
394
|
]);
|
|
391
395
|
}
|
|
@@ -582,6 +586,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, {
|
|
|
582
586
|
cacheEntry.bids = {};
|
|
583
587
|
cacheEntry.bidsWon = {};
|
|
584
588
|
cacheEntry.gamHasRendered = {};
|
|
589
|
+
cacheEntry.bidderOrder = [];
|
|
585
590
|
cacheEntry.referrer = deepAccess(args, 'bidderRequests.0.refererInfo.referer');
|
|
586
591
|
const floorData = deepAccess(args, 'bidderRequests.0.bids.0.floorData');
|
|
587
592
|
if (floorData) {
|
|
@@ -607,6 +612,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, {
|
|
|
607
612
|
}
|
|
608
613
|
break;
|
|
609
614
|
case BID_REQUESTED:
|
|
615
|
+
cache.auctions[args.auctionId].bidderOrder.push(args.bidderCode);
|
|
610
616
|
Object.assign(cache.auctions[args.auctionId].bids, args.bids.reduce((memo, bid) => {
|
|
611
617
|
// mark adUnits we expect bidWon events for
|
|
612
618
|
cache.auctions[args.auctionId].bidsWon[bid.adUnitCode] = false;
|
|
@@ -2,7 +2,7 @@ import { mergeDeep, _each, logError, deepAccess, deepSetValue, isStr, isNumber,
|
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {config} from '../src/config.js';
|
|
4
4
|
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
5
|
-
import find from '
|
|
5
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
6
6
|
import { Renderer } from '../src/Renderer.js';
|
|
7
7
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
8
8
|
|