prebid.js 7.44.0 → 7.46.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/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/acuityAdsBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appushBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beyondmediaBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/braveBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/brightcomBidAdapter.js +1 -1
- package/dist/brightcomSSPBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/coinzillaBidAdapter.js +1 -1
- package/dist/compassBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contentexchangeBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +15 -0
- package/dist/domainOverrideToRootDomain.js +1 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -0
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/globalsunBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/iqzoneBidAdapter.js +1 -1
- package/dist/ivsBidAdapter.js +1 -0
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/koblerBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mathildeadsBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +165 -162
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/onomagicBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/openxOrtbBidAdapter.js +1 -1
- package/dist/operaadsBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pairIdSystem.js +1 -0
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smarthubBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/truereachBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/videoheroesBidAdapter.js +1 -1
- package/dist/vidoomyBidAdapter.js +1 -1
- package/dist/visiblemeasuresBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yieldoneBidAdapter.js +1 -1
- package/integrationExamples/gpt/fledge_example.html +103 -0
- package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
- package/libraries/domainOverrideToRootDomain/index.js +39 -0
- package/libraries/ortbConverter/processors/video.js +1 -0
- package/modules/acuityAdsBidAdapter.js +1 -1
- package/modules/admaticBidAdapter.js +7 -2
- package/modules/adnuntiusBidAdapter.js +3 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/amxIdSystem.js +23 -20
- package/modules/amxIdSystem.md +7 -7
- package/modules/appnexusBidAdapter.js +108 -102
- package/modules/appushBidAdapter.js +1 -1
- package/modules/beyondmediaBidAdapter.js +1 -1
- package/modules/bidwatchAnalyticsAdapter.js +2 -0
- package/modules/braveBidAdapter.js +1 -1
- package/modules/brightcomBidAdapter.js +1 -1
- package/modules/brightcomSSPBidAdapter.js +1 -1
- package/modules/coinzillaBidAdapter.js +1 -2
- package/modules/compassBidAdapter.js +1 -1
- package/modules/connectIdSystem.js +96 -21
- package/modules/connectIdSystem.md +6 -5
- package/modules/contentexchangeBidAdapter.js +1 -1
- package/modules/conversantBidAdapter.js +3 -0
- package/modules/criteoBidAdapter.js +5 -1
- package/modules/eskimiBidAdapter.js +72 -0
- package/modules/eskimiBidAdapter.md +34 -0
- package/modules/freewheel-sspBidAdapter.js +8 -0
- package/modules/glimpseBidAdapter.js +1 -2
- package/modules/globalsunBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +43 -20
- package/modules/growthCodeIdSystem.js +18 -15
- package/modules/gumgumBidAdapter.js +1 -1
- package/modules/iqzoneBidAdapter.js +1 -1
- package/modules/ivsBidAdapter.js +85 -0
- package/modules/ivsBidAdapter.md +34 -0
- package/modules/ixBidAdapter.js +72 -105
- package/modules/jwplayerVideoProvider.js +25 -32
- package/modules/kargoBidAdapter.js +473 -246
- package/modules/koblerBidAdapter.js +1 -2
- package/modules/kueezBidAdapter.js +1 -1
- package/modules/kueezRtbBidAdapter.js +16 -4
- package/modules/liveIntentIdSystem.js +8 -0
- package/modules/luponmediaBidAdapter.js +1 -1
- package/modules/magniteAnalyticsAdapter.js +76 -3
- package/modules/mathildeadsBidAdapter.js +1 -1
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/mediasquareBidAdapter.js +2 -1
- package/modules/mgidBidAdapter.js +178 -26
- package/modules/minutemediaBidAdapter.js +1 -1
- package/modules/minutemediaplusBidAdapter.js +16 -4
- package/modules/nativoBidAdapter.js +110 -21
- package/modules/neuwoRtdProvider.js +0 -2
- package/modules/oguryBidAdapter.js +3 -2
- package/modules/onomagicBidAdapter.js +1 -2
- package/modules/openxBidAdapter.js +192 -563
- package/modules/openxBidAdapter.md +22 -20
- package/modules/openxOrtbBidAdapter.js +13 -11
- package/modules/openxOrtbBidAdapter.md +5 -3
- package/modules/operaadsBidAdapter.js +1 -1
- package/modules/pairIdSystem.js +79 -0
- package/modules/pubmaticBidAdapter.js +13 -10
- package/modules/pubxBidAdapter.js +5 -2
- package/modules/riseBidAdapter.js +1 -1
- package/modules/sharedIdSystem.js +4 -27
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/shinezBidAdapter.js +1 -1
- package/modules/smarthubBidAdapter.js +1 -1
- package/modules/synacormediaBidAdapter.js +1 -3
- package/modules/truereachBidAdapter.js +1 -2
- package/modules/userId/eids.js +24 -0
- package/modules/userId/eids.md +16 -0
- package/modules/videoheroesBidAdapter.js +1 -1
- package/modules/vidoomyBidAdapter.js +33 -4
- package/modules/visiblemeasuresBidAdapter.js +1 -1
- package/modules/vrtcalBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +15 -5
- package/modules/yieldoneBidAdapter.js +1 -1
- package/package.json +1 -1
- package/src/Renderer.js +2 -1
- package/src/config.js +78 -127
- package/src/native.js +5 -1
- package/test/spec/auctionmanager_spec.js +2 -2
- package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
- package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
- package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
- package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
- package/test/spec/modules/amxIdSystem_spec.js +13 -26
- package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
- package/test/spec/modules/appushBidAdapter_spec.js +2 -1
- package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
- package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
- package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
- package/test/spec/modules/compassBidAdapter_spec.js +2 -1
- package/test/spec/modules/connectIdSystem_spec.js +420 -242
- package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
- package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
- package/test/spec/modules/eids_spec.js +30 -0
- package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
- package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
- package/test/spec/modules/gridBidAdapter_spec.js +8 -0
- package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
- package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
- package/test/spec/modules/ixBidAdapter_spec.js +141 -71
- package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
- package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
- package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
- package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
- package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
- package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
- package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
- package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
- package/test/spec/modules/pairIdSystem_spec.js +68 -0
- package/test/spec/modules/pubCommonId_spec.js +0 -17
- package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
- package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
- package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
- package/test/spec/modules/sharedIdSystem_spec.js +0 -46
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
- package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
- package/test/spec/modules/vidoomyBidAdapter_spec.js +58 -0
- package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
- package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
- package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
- package/test/spec/renderer_spec.js +1 -2
- package/test/spec/unit/pbjs_api_spec.js +19 -3
- package/test/test_index.js +13 -3
- package/dist/gridNMBidAdapter.js +0 -1
- package/modules/gridNMBidAdapter.js +0 -422
- package/modules/gridNMBidAdapter.md +0 -39
- package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
package/modules/ixBidAdapter.js
CHANGED
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
logError,
|
|
14
14
|
logWarn,
|
|
15
15
|
mergeDeep,
|
|
16
|
-
parseQueryStringParameters,
|
|
17
16
|
safeJSONParse
|
|
18
17
|
} from '../src/utils.js';
|
|
19
18
|
import { BANNER, VIDEO, NATIVE } from '../src/mediaTypes.js';
|
|
@@ -104,9 +103,12 @@ export const LOCAL_STORAGE_FEATURE_TOGGLES_KEY = `${BIDDER_CODE}_features`;
|
|
|
104
103
|
let hasRegisteredHandler = false;
|
|
105
104
|
export const storage = getStorageManager({ bidderCode: BIDDER_CODE });
|
|
106
105
|
export const FEATURE_TOGGLES = {
|
|
106
|
+
// Update with list of CFTs to be requested from Exchange
|
|
107
|
+
REQUESTED_FEATURE_TOGGLES: [],
|
|
108
|
+
|
|
107
109
|
featureToggles: {},
|
|
108
110
|
isFeatureEnabled: function (ft) {
|
|
109
|
-
return deepAccess(this.featureToggles, `features.${ft}.activated
|
|
111
|
+
return deepAccess(this.featureToggles, `features.${ft}.activated`, false)
|
|
110
112
|
},
|
|
111
113
|
getFeatureToggles: function () {
|
|
112
114
|
if (storage.localStorageIsEnabled()) {
|
|
@@ -152,11 +154,6 @@ const MEDIA_TYPES = {
|
|
|
152
154
|
Native: 4
|
|
153
155
|
};
|
|
154
156
|
|
|
155
|
-
let baseRequestSize = 0;
|
|
156
|
-
let currentRequestSize = 0;
|
|
157
|
-
let wasAdUnitImpressionsTrimmed = false;
|
|
158
|
-
let currentImpressionSize = 0;
|
|
159
|
-
|
|
160
157
|
/**
|
|
161
158
|
* Transform valid bid request config object to banner impression object that will be sent to ad server.
|
|
162
159
|
*
|
|
@@ -198,6 +195,9 @@ function bidToVideoImp(bid) {
|
|
|
198
195
|
// populate imp level transactionId
|
|
199
196
|
imp.ext.tid = deepAccess(bid, 'ortb2Imp.ext.tid');
|
|
200
197
|
|
|
198
|
+
// AdUnit-Specific First Party Data
|
|
199
|
+
addAdUnitFPD(imp, bid)
|
|
200
|
+
|
|
201
201
|
// copy all video properties to imp object
|
|
202
202
|
for (const adUnitProperty in videoAdUnitRef) {
|
|
203
203
|
if (VIDEO_PARAMS_ALLOW_LIST.indexOf(adUnitProperty) !== -1 && !imp.video.hasOwnProperty(adUnitProperty)) {
|
|
@@ -271,6 +271,9 @@ function bidToNativeImp(bid) {
|
|
|
271
271
|
// populate imp level transactionId
|
|
272
272
|
imp.ext.tid = deepAccess(bid, 'ortb2Imp.ext.tid');
|
|
273
273
|
|
|
274
|
+
// AdUnit-Specific First Party Data
|
|
275
|
+
addAdUnitFPD(imp, bid)
|
|
276
|
+
|
|
274
277
|
_applyFloor(bid, imp, NATIVE);
|
|
275
278
|
|
|
276
279
|
return imp;
|
|
@@ -598,19 +601,12 @@ function getEidInfo(allEids) {
|
|
|
598
601
|
*
|
|
599
602
|
*/
|
|
600
603
|
function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
601
|
-
baseRequestSize = 0;
|
|
602
|
-
currentRequestSize = 0;
|
|
603
|
-
wasAdUnitImpressionsTrimmed = false;
|
|
604
|
-
currentImpressionSize = 0;
|
|
605
|
-
|
|
606
604
|
// Always use secure HTTPS protocol.
|
|
607
605
|
let baseUrl = SECURE_BID_URL;
|
|
608
606
|
// Get ids from Prebid User ID Modules
|
|
609
607
|
let eidInfo = getEidInfo(deepAccess(validBidRequests, '0.userIdAsEids'));
|
|
610
608
|
let userEids = eidInfo.toSend;
|
|
611
609
|
|
|
612
|
-
let MAX_REQUEST_SIZE = 8000;
|
|
613
|
-
|
|
614
610
|
// RTI ids will be included in the bid request if the function getIdentityInfo() is loaded
|
|
615
611
|
// and if the data for the partner exist
|
|
616
612
|
if (window.headertag && typeof window.headertag.getIdentityInfo === 'function') {
|
|
@@ -625,6 +621,9 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
625
621
|
const requests = [];
|
|
626
622
|
let r = createRequest(validBidRequests);
|
|
627
623
|
|
|
624
|
+
// Add FTs to be requested from Exchange
|
|
625
|
+
r = addRequestedFeatureToggles(r, FEATURE_TOGGLES.REQUESTED_FEATURE_TOGGLES)
|
|
626
|
+
|
|
628
627
|
// getting ixdiags for adunits of the video, outstream & multi format (MF) style
|
|
629
628
|
let ixdiag = buildIXDiag(validBidRequests);
|
|
630
629
|
for (var key in ixdiag) {
|
|
@@ -636,25 +635,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
636
635
|
r = applyRegulations(r, bidderRequest);
|
|
637
636
|
|
|
638
637
|
let payload = {};
|
|
639
|
-
createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload
|
|
638
|
+
createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload);
|
|
640
639
|
|
|
641
|
-
let requestSequenceNumber = 0;
|
|
642
640
|
const transactionIds = Object.keys(impressions);
|
|
643
641
|
let isFpdAdded = false;
|
|
644
642
|
|
|
645
643
|
for (let adUnitIndex = 0; adUnitIndex < transactionIds.length; adUnitIndex++) {
|
|
646
|
-
// buildRequestV2 does not have request spliting logic.
|
|
647
|
-
if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
|
|
648
|
-
if (currentRequestSize >= MAX_REQUEST_SIZE) {
|
|
649
|
-
break;
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
644
|
if (requests.length >= MAX_REQUEST_LIMIT) {
|
|
653
645
|
break;
|
|
654
646
|
}
|
|
655
647
|
|
|
656
|
-
r = addImpressions(impressions, transactionIds, r, adUnitIndex
|
|
657
|
-
currentRequestSize += currentImpressionSize;
|
|
648
|
+
r = addImpressions(impressions, transactionIds, r, adUnitIndex);
|
|
658
649
|
|
|
659
650
|
const fpd = deepAccess(bidderRequest, 'ortb2') || {};
|
|
660
651
|
const site = { ...(fpd.site || fpd.context) };
|
|
@@ -667,31 +658,17 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
667
658
|
clonedRObject.site = mergeDeep({}, clonedRObject.site, site);
|
|
668
659
|
clonedRObject.user = mergeDeep({}, clonedRObject.user, user);
|
|
669
660
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
r.site = mergeDeep({}, r.site, site);
|
|
674
|
-
r.user = mergeDeep({}, r.user, user);
|
|
675
|
-
isFpdAdded = true;
|
|
676
|
-
const fpdRequestSize = encodeURIComponent(JSON.stringify({ ...site, ...user })).length;
|
|
677
|
-
currentRequestSize += fpdRequestSize;
|
|
678
|
-
} else {
|
|
679
|
-
logError('IX Bid Adapter: FPD request size has exceeded maximum request size.', { bidder: BIDDER_CODE, code: ERROR_CODES.PB_FPD_EXCEEDS_MAX_SIZE });
|
|
680
|
-
}
|
|
661
|
+
r.site = mergeDeep({}, r.site, site);
|
|
662
|
+
r.user = mergeDeep({}, r.user, user);
|
|
663
|
+
isFpdAdded = true;
|
|
681
664
|
}
|
|
682
665
|
|
|
683
666
|
// add identifiers info to ixDiag
|
|
684
|
-
r = addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl
|
|
667
|
+
r = addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl);
|
|
685
668
|
|
|
686
669
|
const isLastAdUnit = adUnitIndex === transactionIds.length - 1;
|
|
687
670
|
|
|
688
|
-
if (
|
|
689
|
-
if (!isLastAdUnit || requestSequenceNumber) {
|
|
690
|
-
r.ext.ixdiag.sn = requestSequenceNumber;
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
requestSequenceNumber++;
|
|
694
|
-
|
|
671
|
+
if (isLastAdUnit) {
|
|
695
672
|
requests.push({
|
|
696
673
|
method: 'POST',
|
|
697
674
|
url: baseUrl + '?s=' + siteID,
|
|
@@ -702,7 +679,6 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) {
|
|
|
702
679
|
validBidRequests
|
|
703
680
|
});
|
|
704
681
|
|
|
705
|
-
currentRequestSize = baseRequestSize;
|
|
706
682
|
r.imp = [];
|
|
707
683
|
isFpdAdded = false;
|
|
708
684
|
}
|
|
@@ -751,6 +727,24 @@ function createRequest(validBidRequests) {
|
|
|
751
727
|
return r
|
|
752
728
|
}
|
|
753
729
|
|
|
730
|
+
/**
|
|
731
|
+
* Adds requested feature toggles to the provided request object to be sent to Exchange.
|
|
732
|
+
* @param {object} r - The request object to add feature toggles to.
|
|
733
|
+
* @param {Array} requestedFeatureToggles - The list of feature toggles to add.
|
|
734
|
+
* @returns {object} The updated request object with the added feature toggles.
|
|
735
|
+
*/
|
|
736
|
+
function addRequestedFeatureToggles(r, requestedFeatureToggles) {
|
|
737
|
+
if (requestedFeatureToggles.length > 0) {
|
|
738
|
+
r.ext.features = {};
|
|
739
|
+
// Loop through each feature toggle and add it to the features object.
|
|
740
|
+
// Add current activation status as well.
|
|
741
|
+
requestedFeatureToggles.forEach(toggle => {
|
|
742
|
+
r.ext.features[toggle] = { activated: FEATURE_TOGGLES.isFeatureEnabled(toggle) };
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
return r;
|
|
746
|
+
}
|
|
747
|
+
|
|
754
748
|
/**
|
|
755
749
|
* enrichRequest adds userSync configs, source, and referer info to request and ixDiag objects.
|
|
756
750
|
*
|
|
@@ -871,9 +865,8 @@ function applyRegulations(r, bidderRequest) {
|
|
|
871
865
|
* @param {string} baseUrl Base exchagne URL.
|
|
872
866
|
* @param {array} requests List of request obejcts.
|
|
873
867
|
* @param {object} payload Request payload object.
|
|
874
|
-
* @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
|
|
875
868
|
*/
|
|
876
|
-
function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload
|
|
869
|
+
function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, payload) {
|
|
877
870
|
// Use the siteId in the first bid request as the main siteId.
|
|
878
871
|
siteID = validBidRequests[0].params.siteId;
|
|
879
872
|
payload.s = siteID;
|
|
@@ -882,16 +875,6 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
|
|
|
882
875
|
const bidderCode = (bidderRequest && bidderRequest.bidderCode) || 'ix';
|
|
883
876
|
const otherIxConfig = config.getConfig(bidderCode);
|
|
884
877
|
|
|
885
|
-
baseRequestSize = `${baseUrl}${parseQueryStringParameters({ ...payload, r: JSON.stringify(r) })}`.length;
|
|
886
|
-
|
|
887
|
-
if (baseRequestSize > MAX_REQUEST_SIZE) {
|
|
888
|
-
logError('IX Bid Adapter: Base request size has exceeded maximum request size.', { bidder: BIDDER_CODE, code: ERROR_CODES.EXCEEDS_MAX_SIZE });
|
|
889
|
-
return requests;
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
currentRequestSize = baseRequestSize;
|
|
893
|
-
let fpdRequestSize = 0;
|
|
894
|
-
|
|
895
878
|
if (otherIxConfig) {
|
|
896
879
|
// Append firstPartyData to r.site.page if firstPartyData exists.
|
|
897
880
|
if (typeof otherIxConfig.firstPartyData === 'object') {
|
|
@@ -904,25 +887,10 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
|
|
|
904
887
|
}
|
|
905
888
|
firstPartyString = firstPartyString.slice(0, -1);
|
|
906
889
|
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
|
|
910
|
-
if (fpdRequestSize < MAX_REQUEST_SIZE) {
|
|
911
|
-
if ('page' in r.site) {
|
|
912
|
-
r.site.page += firstPartyString;
|
|
913
|
-
} else {
|
|
914
|
-
r.site.page = firstPartyString;
|
|
915
|
-
}
|
|
916
|
-
currentRequestSize += fpdRequestSize;
|
|
917
|
-
} else {
|
|
918
|
-
logError('IX Bid Adapter: IX config FPD request size has exceeded maximum request size.', { bidder: BIDDER_CODE, code: ERROR_CODES.IX_FPD_EXCEEDS_MAX_SIZE });
|
|
919
|
-
}
|
|
890
|
+
if ('page' in r.site) {
|
|
891
|
+
r.site.page += firstPartyString;
|
|
920
892
|
} else {
|
|
921
|
-
|
|
922
|
-
r.site.page += firstPartyString;
|
|
923
|
-
} else {
|
|
924
|
-
r.site.page = firstPartyString;
|
|
925
|
-
}
|
|
893
|
+
r.site.page = firstPartyString;
|
|
926
894
|
}
|
|
927
895
|
}
|
|
928
896
|
}
|
|
@@ -935,30 +903,17 @@ function createPayload(validBidRequests, bidderRequest, r, baseUrl, requests, pa
|
|
|
935
903
|
* @param {array} transactionIds List of transaction Ids.
|
|
936
904
|
* @param {object} r Reuqest object.
|
|
937
905
|
* @param {int} adUnitIndex Index of the current add unit
|
|
938
|
-
* @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
|
|
939
906
|
* @return {object} Reqyest object with added impressions describing the request to the server.
|
|
940
907
|
*/
|
|
941
|
-
function addImpressions(impressions, transactionIds, r, adUnitIndex
|
|
908
|
+
function addImpressions(impressions, transactionIds, r, adUnitIndex) {
|
|
942
909
|
const adUnitImpressions = impressions[transactionIds[adUnitIndex]];
|
|
943
910
|
const { missingImps: missingBannerImpressions = [], ixImps = [] } = adUnitImpressions;
|
|
944
|
-
|
|
945
|
-
let remainingRequestSize = MAX_REQUEST_SIZE - currentRequestSize;
|
|
946
911
|
const sourceImpressions = { ixImps, missingBannerImpressions };
|
|
947
912
|
const impressionObjects = Object.keys(sourceImpressions)
|
|
948
913
|
.map((key) => sourceImpressions[key])
|
|
949
914
|
.filter(item => Array.isArray(item))
|
|
950
915
|
.reduce((acc, curr) => acc.concat(...curr), []);
|
|
951
916
|
|
|
952
|
-
currentImpressionSize = encodeURIComponent(JSON.stringify({ impressionObjects })).length;
|
|
953
|
-
|
|
954
|
-
if (!FEATURE_TOGGLES.isFeatureEnabled('pbjs_use_buildRequestV2')) {
|
|
955
|
-
while (impressionObjects.length && currentImpressionSize > remainingRequestSize) {
|
|
956
|
-
wasAdUnitImpressionsTrimmed = true;
|
|
957
|
-
impressionObjects.pop();
|
|
958
|
-
currentImpressionSize = encodeURIComponent(JSON.stringify({ impressionObjects })).length;
|
|
959
|
-
}
|
|
960
|
-
}
|
|
961
|
-
|
|
962
917
|
const gpid = impressions[transactionIds[adUnitIndex]].gpid;
|
|
963
918
|
const dfpAdUnitCode = impressions[transactionIds[adUnitIndex]].dfp_ad_unit_code;
|
|
964
919
|
const tid = impressions[transactionIds[adUnitIndex]].tid;
|
|
@@ -1007,6 +962,11 @@ function addImpressions(impressions, transactionIds, r, adUnitIndex, MAX_REQUEST
|
|
|
1007
962
|
_bannerImpression.bidfloorcur = impressionObjects[0].bidfloorcur;
|
|
1008
963
|
}
|
|
1009
964
|
|
|
965
|
+
const adUnitFPD = impressions[transactionIds[adUnitIndex]].adUnitFPD
|
|
966
|
+
if (adUnitFPD) {
|
|
967
|
+
_bannerImpression.ext.data = adUnitFPD;
|
|
968
|
+
}
|
|
969
|
+
|
|
1010
970
|
r.imp.push(_bannerImpression);
|
|
1011
971
|
} else {
|
|
1012
972
|
// set imp.ext.gpid to resolved gpid for each imp
|
|
@@ -1062,6 +1022,19 @@ function addFPD(bidderRequest, r, fpd, site, user) {
|
|
|
1062
1022
|
return r;
|
|
1063
1023
|
}
|
|
1064
1024
|
|
|
1025
|
+
/**
|
|
1026
|
+
* Adds First-Party Data (FPD) from the bid object to the imp object.
|
|
1027
|
+
*
|
|
1028
|
+
* @param {Object} imp - The imp object, representing an impression in the OpenRTB format.
|
|
1029
|
+
* @param {Object} bid - The bid object, containing information about the bid request.
|
|
1030
|
+
*/
|
|
1031
|
+
function addAdUnitFPD(imp, bid) {
|
|
1032
|
+
const adUnitFPD = deepAccess(bid, 'ortb2Imp.ext.data');
|
|
1033
|
+
if (adUnitFPD) {
|
|
1034
|
+
deepSetValue(imp, 'ext.data', adUnitFPD)
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1065
1038
|
/**
|
|
1066
1039
|
* addIdentifiersInfo adds indentifier info to ixDaig.
|
|
1067
1040
|
*
|
|
@@ -1071,30 +1044,18 @@ function addFPD(bidderRequest, r, fpd, site, user) {
|
|
|
1071
1044
|
* @param {int} adUnitIndex Index of the current add unit
|
|
1072
1045
|
* @param {object} payload Request payload object.
|
|
1073
1046
|
* @param {string} baseUrl Base exchagne URL.
|
|
1074
|
-
* @param {int} MAX_REQUEST_SIZE Maximum request size limit (buildrequest V1).
|
|
1075
1047
|
* @return {object} Reqyest object with added indentigfier info to ixDiag.
|
|
1076
1048
|
*/
|
|
1077
|
-
function addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl
|
|
1049
|
+
function addIdentifiersInfo(impressions, r, transactionIds, adUnitIndex, payload, baseUrl) {
|
|
1078
1050
|
const pbaAdSlot = impressions[transactionIds[adUnitIndex]].pbadslot;
|
|
1079
1051
|
const tagId = impressions[transactionIds[adUnitIndex]].tagId;
|
|
1080
1052
|
const adUnitCode = impressions[transactionIds[adUnitIndex]].adUnitCode;
|
|
1081
1053
|
const divId = impressions[transactionIds[adUnitIndex]].divId;
|
|
1082
1054
|
if (pbaAdSlot || tagId || adUnitCode || divId) {
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
r.ext.ixdiag.pbadslot = pbaAdSlot;
|
|
1088
|
-
r.ext.ixdiag.tagid = tagId;
|
|
1089
|
-
r.ext.ixdiag.adunitcode = adUnitCode;
|
|
1090
|
-
r.ext.ixdiag.divId = divId;
|
|
1091
|
-
}
|
|
1092
|
-
} else {
|
|
1093
|
-
r.ext.ixdiag.pbadslot = pbaAdSlot;
|
|
1094
|
-
r.ext.ixdiag.tagid = tagId;
|
|
1095
|
-
r.ext.ixdiag.adunitcode = adUnitCode;
|
|
1096
|
-
r.ext.ixdiag.divId = divId;
|
|
1097
|
-
}
|
|
1055
|
+
r.ext.ixdiag.pbadslot = pbaAdSlot;
|
|
1056
|
+
r.ext.ixdiag.tagid = tagId;
|
|
1057
|
+
r.ext.ixdiag.adunitcode = adUnitCode;
|
|
1058
|
+
r.ext.ixdiag.divId = divId;
|
|
1098
1059
|
}
|
|
1099
1060
|
|
|
1100
1061
|
return r;
|
|
@@ -1259,6 +1220,12 @@ function createBannerImps(validBidRequest, missingBannerSizes, bannerImps) {
|
|
|
1259
1220
|
bannerImps[validBidRequest.transactionId].tagId = deepAccess(validBidRequest, 'params.tagId');
|
|
1260
1221
|
bannerImps[validBidRequest.transactionId].pos = deepAccess(validBidRequest, 'mediaTypes.banner.pos');
|
|
1261
1222
|
|
|
1223
|
+
// AdUnit-Specific First Party Data
|
|
1224
|
+
const adUnitFPD = deepAccess(validBidRequest, 'ortb2Imp.ext.data');
|
|
1225
|
+
if (adUnitFPD) {
|
|
1226
|
+
bannerImps[validBidRequest.transactionId].adUnitFPD = adUnitFPD;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1262
1229
|
const sid = deepAccess(validBidRequest, 'params.id');
|
|
1263
1230
|
if (sid && (typeof sid === 'string' || typeof sid === 'number')) {
|
|
1264
1231
|
bannerImps[validBidRequest.transactionId].sid = String(sid);
|
|
@@ -47,31 +47,29 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
47
47
|
|
|
48
48
|
function init() {
|
|
49
49
|
if (!jwplayer) {
|
|
50
|
-
triggerSetupFailure(-1); // TODO: come up with error code schema- player is absent
|
|
50
|
+
triggerSetupFailure({ code: -1 }); // TODO: come up with error code schema- player is absent
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
playerVersion = jwplayer.version;
|
|
55
55
|
|
|
56
56
|
if (playerVersion < minimumSupportedPlayerVersion) {
|
|
57
|
-
triggerSetupFailure(-2); // TODO: come up with error code schema - version not supported
|
|
57
|
+
triggerSetupFailure({ code: -2 }); // TODO: come up with error code schema - version not supported
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
if (!document.getElementById(divId)) {
|
|
62
|
-
triggerSetupFailure(-3); // TODO: come up with error code schema - missing div id
|
|
62
|
+
triggerSetupFailure({ code: -3 }); // TODO: come up with error code schema - missing div id
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
player = jwplayer(divId);
|
|
67
67
|
if (!player || !player.getState) {
|
|
68
|
-
triggerSetupFailure(-4); // TODO: come up with error code schema - factory function failure
|
|
68
|
+
triggerSetupFailure({ code: -4 }); // TODO: come up with error code schema - factory function failure
|
|
69
69
|
} else if (player.getState() === undefined) {
|
|
70
70
|
setupPlayer(playerConfig);
|
|
71
71
|
} else {
|
|
72
|
-
|
|
73
|
-
setupCompleteCallbacks.forEach(callback => callback(SETUP_COMPLETE, payload));
|
|
74
|
-
setupCompleteCallbacks = [];
|
|
72
|
+
triggerSetupComplete();
|
|
75
73
|
}
|
|
76
74
|
}
|
|
77
75
|
|
|
@@ -192,8 +190,12 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
192
190
|
function onEvent(externalEventName, callback, basePayload) {
|
|
193
191
|
if (externalEventName === SETUP_COMPLETE) {
|
|
194
192
|
setupCompleteCallbacks.push(callback);
|
|
195
|
-
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (externalEventName === SETUP_FAILED) {
|
|
196
197
|
setupFailedCallbacks.push(callback);
|
|
198
|
+
return;
|
|
197
199
|
}
|
|
198
200
|
|
|
199
201
|
if (!player) {
|
|
@@ -203,25 +205,6 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
203
205
|
let getEventPayload;
|
|
204
206
|
|
|
205
207
|
switch (externalEventName) {
|
|
206
|
-
case SETUP_COMPLETE:
|
|
207
|
-
getEventPayload = () => {
|
|
208
|
-
setupCompleteCallbacks = [];
|
|
209
|
-
return getSetupCompletePayload();
|
|
210
|
-
};
|
|
211
|
-
break;
|
|
212
|
-
|
|
213
|
-
case SETUP_FAILED:
|
|
214
|
-
getEventPayload = e => {
|
|
215
|
-
setupFailedCallbacks = [];
|
|
216
|
-
return {
|
|
217
|
-
playerVersion,
|
|
218
|
-
errorCode: e.code,
|
|
219
|
-
errorMessage: e.message,
|
|
220
|
-
sourceError: e.sourceError
|
|
221
|
-
};
|
|
222
|
-
};
|
|
223
|
-
break;
|
|
224
|
-
|
|
225
208
|
case AD_REQUEST:
|
|
226
209
|
case AD_PLAY:
|
|
227
210
|
case AD_PAUSE:
|
|
@@ -496,7 +479,17 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
496
479
|
if (!config) {
|
|
497
480
|
return;
|
|
498
481
|
}
|
|
499
|
-
player.setup(utils.getJwConfig(config));
|
|
482
|
+
player.setup(utils.getJwConfig(config)).on('ready', triggerSetupComplete).on('setupError', triggerSetupFailure);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
function triggerSetupComplete() {
|
|
486
|
+
if (!setupCompleteCallbacks.length) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
const payload = getSetupCompletePayload();
|
|
491
|
+
setupCompleteCallbacks.forEach(callback => callback(SETUP_COMPLETE, payload));
|
|
492
|
+
setupCompleteCallbacks = [];
|
|
500
493
|
}
|
|
501
494
|
|
|
502
495
|
function getSetupCompletePayload() {
|
|
@@ -511,7 +504,7 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
511
504
|
};
|
|
512
505
|
}
|
|
513
506
|
|
|
514
|
-
function triggerSetupFailure(
|
|
507
|
+
function triggerSetupFailure(e) {
|
|
515
508
|
if (!setupFailedCallbacks.length) {
|
|
516
509
|
return;
|
|
517
510
|
}
|
|
@@ -520,9 +513,9 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
520
513
|
divId,
|
|
521
514
|
playerVersion,
|
|
522
515
|
type: SETUP_FAILED,
|
|
523
|
-
errorCode,
|
|
524
|
-
errorMessage:
|
|
525
|
-
sourceError:
|
|
516
|
+
errorCode: e.code,
|
|
517
|
+
errorMessage: e.message,
|
|
518
|
+
sourceError: e.sourceError
|
|
526
519
|
};
|
|
527
520
|
|
|
528
521
|
setupFailedCallbacks.forEach(callback => callback(SETUP_FAILED, payload));
|