prebid.js 7.17.0 → 7.19.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/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adqueryIdSystem.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/asoBidAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/{andBeyondMediaBidAdapter.js → 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/bluebillywigBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -0
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dianomiBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/enrichmentFpdModule.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fpd.js +1 -0
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.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/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +133 -130
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.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/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/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/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.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/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.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/visxBidAdapter.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/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/libraries/fpd/sua.js +98 -0
- package/modules/adagioBidAdapter.js +2 -1
- package/modules/adfBidAdapter.js +1 -1
- package/modules/adkernelAdnBidAdapter.js +1 -0
- package/modules/adqueryBidAdapter.js +4 -2
- package/modules/adqueryIdSystem.js +8 -8
- package/modules/adxcgBidAdapter.js +1 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
- package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
- package/modules/bidwatchAnalyticsAdapter.js +1 -1
- package/modules/cleanioRtdProvider.js +3 -4
- package/modules/colossussspBidAdapter.js +2 -1
- package/modules/conversantAnalyticsAdapter.js +560 -0
- package/modules/conversantAnalyticsAdapter.md +47 -0
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/debugging/bidInterceptor.js +2 -2
- package/modules/debugging/debugging.js +10 -2
- package/modules/dgkeywordRtdProvider.js +21 -3
- package/modules/dianomiBidAdapter.js +1 -1
- package/modules/enrichmentFpdModule.js +33 -14
- package/modules/finativeBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +188 -118
- package/modules/growthCodeIdSystem.js +164 -0
- package/modules/growthCodeIdSystem.md +37 -0
- package/modules/improvedigitalBidAdapter.js +2 -2
- package/modules/ixBidAdapter.js +94 -23
- package/modules/liveIntentIdSystem.js +39 -5
- package/modules/mediakeysBidAdapter.js +6 -1
- package/modules/mediakeysBidAdapter.md +50 -40
- package/modules/nativoBidAdapter.js +3 -2
- package/modules/nextMillenniumBidAdapter.js +34 -11
- package/modules/prebidServerBidAdapter/index.js +44 -13
- package/modules/readpeakBidAdapter.js +1 -1
- package/modules/rubiconBidAdapter.js +2 -3
- package/modules/seedingAllianceBidAdapter.js +1 -1
- package/modules/seedtagBidAdapter.js +4 -0
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/taboolaBidAdapter.js +4 -8
- package/modules/talkadsBidAdapter.js +1 -0
- package/modules/truereachBidAdapter.js +1 -0
- package/modules/ttdBidAdapter.js +1 -1
- package/modules/userId/eids.js +19 -0
- package/modules/vidazooBidAdapter.js +1 -1
- package/modules/vuukleBidAdapter.js +34 -3
- package/modules/yahoosspBidAdapter.js +3 -1
- package/modules/yandexBidAdapter.js +31 -8
- package/package.json +2 -2
- package/src/adapterManager.js +2 -4
- package/src/cpmBucketManager.js +22 -3
- package/src/native.js +1 -5
- package/src/prebid.js +3 -3
- package/test/spec/cpmBucketManager_spec.js +239 -177
- package/test/spec/fpd/sua_spec.js +244 -0
- package/test/spec/modules/adagioBidAdapter_spec.js +23 -0
- package/test/spec/modules/adfBidAdapter_spec.js +2 -3
- package/test/spec/modules/adqueryBidAdapter_spec.js +11 -0
- package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
- package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
- package/test/spec/modules/amxBidAdapter_spec.js +3 -2
- package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +2 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
- package/test/spec/modules/debugging_mod_spec.js +9 -0
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
- package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
- package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
- package/test/spec/modules/fpdModule_spec.js +9 -0
- package/test/spec/modules/gridBidAdapter_spec.js +87 -31
- package/test/spec/modules/growthCodeIdSystem_spec.js +83 -0
- package/test/spec/modules/ixBidAdapter_spec.js +221 -2
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
- package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
- package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
- package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
- package/test/spec/modules/prebidServerBidAdapter_spec.js +171 -4
- package/test/spec/modules/seedtagBidAdapter_spec.js +42 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/taboolaBidAdapter_spec.js +2 -2
- package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
- package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +3 -1
- package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
- package/test/spec/native_spec.js +5 -0
- package/test/spec/unit/pbjs_api_spec.js +44 -0
|
@@ -20,10 +20,8 @@ import { getGlobal } from '../src/prebidGlobal.js';
|
|
|
20
20
|
* @param {Object} userConsent
|
|
21
21
|
*/
|
|
22
22
|
export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, userConsent) {
|
|
23
|
-
const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1?url=';
|
|
24
23
|
const PROFILE_TIMEOUT_MS = 1000;
|
|
25
24
|
const timeout = (moduleConfig && moduleConfig.params && moduleConfig.params.timeout && Number(moduleConfig.params.timeout) > 0) ? Number(moduleConfig.params.timeout) : PROFILE_TIMEOUT_MS;
|
|
26
|
-
const url = (moduleConfig && moduleConfig.params && moduleConfig.params.url) ? moduleConfig.params.url : URL + encodeURIComponent(window.location.href);
|
|
27
25
|
const adUnits = reqBidsConfigObj.adUnits || getGlobal().adUnits;
|
|
28
26
|
callback = (function(cb) {
|
|
29
27
|
let done = false;
|
|
@@ -43,7 +41,7 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
|
|
|
43
41
|
} else {
|
|
44
42
|
logMessage('[dgkeyword sub module] dgkeyword targets:', setKeywordTargetBidders);
|
|
45
43
|
logMessage('[dgkeyword sub module] get targets from profile api start.');
|
|
46
|
-
ajax(url, {
|
|
44
|
+
ajax(getProfileApiUrl(moduleConfig?.params?.url, moduleConfig?.params?.disableReadFpid), {
|
|
47
45
|
success: function(response) {
|
|
48
46
|
const res = JSON.parse(response);
|
|
49
47
|
if (!isFinish) {
|
|
@@ -98,6 +96,26 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
|
|
|
98
96
|
}
|
|
99
97
|
}
|
|
100
98
|
|
|
99
|
+
export function getProfileApiUrl(customeUrl, disableReadFpid) {
|
|
100
|
+
const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1';
|
|
101
|
+
const fpid = (disableReadFpid) ? '' : readFpidFromLocalStrage();
|
|
102
|
+
let url = customeUrl || URL;
|
|
103
|
+
url = url + '?url=' + encodeURIComponent(window.location.href) + ((fpid) ? `&fpid=${fpid}` : '');
|
|
104
|
+
return url;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function readFpidFromLocalStrage() {
|
|
108
|
+
try {
|
|
109
|
+
const fpid = window.localStorage.getItem('ope_fpid');
|
|
110
|
+
if (fpid) {
|
|
111
|
+
return fpid;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
101
119
|
/**
|
|
102
120
|
* get all bidder which hava {dgkeyword: true} in params
|
|
103
121
|
* @param {Object} adUnits
|
|
@@ -112,7 +112,7 @@ export const spec = {
|
|
|
112
112
|
setOnAny(validBidRequests, 'params.pt') ||
|
|
113
113
|
setOnAny(validBidRequests, 'params.priceType') ||
|
|
114
114
|
'net';
|
|
115
|
-
const tid =
|
|
115
|
+
const tid = bidderRequest.auctionId;
|
|
116
116
|
const currency = getConfig('currency.adServerCurrency');
|
|
117
117
|
const cur = currency && [currency];
|
|
118
118
|
const eids = setOnAny(validBidRequests, 'userIdAsEids');
|
|
@@ -7,11 +7,15 @@ import { timestamp, mergeDeep } from '../src/utils.js';
|
|
|
7
7
|
import { submodule } from '../src/hook.js';
|
|
8
8
|
import {getRefererInfo, parseDomain} from '../src/refererDetection.js';
|
|
9
9
|
import { getCoreStorageManager } from '../src/storageManager.js';
|
|
10
|
+
import {GreedyPromise} from '../src/utils/promise.js';
|
|
11
|
+
import {getHighEntropySUA, getLowEntropySUA} from '../libraries/fpd/sua.js';
|
|
10
12
|
|
|
11
|
-
let ortb2
|
|
13
|
+
let ortb2;
|
|
12
14
|
let win = (window === window.top) ? window : window.top;
|
|
13
15
|
export const coreStorage = getCoreStorageManager('enrichmentFpd');
|
|
14
16
|
|
|
17
|
+
export const sua = {he: getHighEntropySUA, le: getLowEntropySUA};
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
20
|
* Find the root domain
|
|
17
21
|
* @param {string|undefined} fullDomain
|
|
@@ -124,6 +128,17 @@ function setKeywords() {
|
|
|
124
128
|
if (keywords && keywords.content) mergeDeep(ortb2, { site: { keywords: keywords.content.replace(/\s/g, '') } });
|
|
125
129
|
}
|
|
126
130
|
|
|
131
|
+
function setDeviceSua(hints) {
|
|
132
|
+
let data = Array.isArray(hints) && hints.length === 0
|
|
133
|
+
? GreedyPromise.resolve(sua.le())
|
|
134
|
+
: sua.he(hints);
|
|
135
|
+
return data.then((sua) => {
|
|
136
|
+
if (sua != null) {
|
|
137
|
+
mergeDeep(ortb2, {device: {sua}});
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
|
|
127
142
|
/**
|
|
128
143
|
* Checks the Global Privacy Control status, and if exists and is true, merges into regs.ext.gpc
|
|
129
144
|
*/
|
|
@@ -137,30 +152,34 @@ function setGpc() {
|
|
|
137
152
|
/**
|
|
138
153
|
* Resets modules global ortb2 data
|
|
139
154
|
*/
|
|
140
|
-
const
|
|
155
|
+
export const resetEnrichments = () => { ortb2 = null };
|
|
141
156
|
|
|
142
|
-
function runEnrichments() {
|
|
157
|
+
function runEnrichments(fpdConf) {
|
|
143
158
|
setReferer();
|
|
144
159
|
setPage();
|
|
145
160
|
setDomain();
|
|
146
161
|
setDimensions();
|
|
147
162
|
setKeywords();
|
|
148
163
|
setGpc();
|
|
149
|
-
|
|
150
|
-
return ortb2;
|
|
164
|
+
return setDeviceSua(fpdConf.uaHints).then(() => ortb2);
|
|
151
165
|
}
|
|
152
166
|
|
|
153
|
-
/**
|
|
154
|
-
* Sets default values to ortb2 if exists and adds currency and ortb2 setConfig callbacks on init
|
|
155
|
-
*/
|
|
156
167
|
export function processFpd(fpdConf, {global}) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
168
|
+
if (fpdConf.skipEnrichments) {
|
|
169
|
+
return {global};
|
|
170
|
+
} else {
|
|
171
|
+
let ready;
|
|
172
|
+
if (ortb2 == null) {
|
|
173
|
+
ortb2 = {};
|
|
174
|
+
ready = runEnrichments(fpdConf);
|
|
175
|
+
} else {
|
|
176
|
+
ready = GreedyPromise.resolve();
|
|
177
|
+
}
|
|
178
|
+
return ready.then(() => ({
|
|
179
|
+
global: mergeDeep({}, ortb2, global)
|
|
180
|
+
}))
|
|
181
|
+
}
|
|
162
182
|
}
|
|
163
|
-
|
|
164
183
|
/** @type {firstPartyDataSubmodule} */
|
|
165
184
|
export const enrichmentsSubmodule = {
|
|
166
185
|
name: 'enrichments',
|
|
@@ -63,7 +63,7 @@ export const spec = {
|
|
|
63
63
|
// convert Native ORTB definition to old-style prebid native definition
|
|
64
64
|
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
65
65
|
const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net';
|
|
66
|
-
const tid =
|
|
66
|
+
const tid = bidderRequest.auctionId;
|
|
67
67
|
const cur = [config.getConfig('currency.adServerCurrency') || DEFAULT_CUR];
|
|
68
68
|
let url = bidderRequest.refererInfo.referer;
|
|
69
69
|
|
|
@@ -39,7 +39,7 @@ let hasSynced = false;
|
|
|
39
39
|
|
|
40
40
|
export const spec = {
|
|
41
41
|
code: BIDDER_CODE,
|
|
42
|
-
aliases: ['playwire', 'adlivetech', 'trustx'],
|
|
42
|
+
aliases: ['playwire', 'adlivetech', { code: 'trustx', skipPbsAliasing: true }],
|
|
43
43
|
supportedMediaTypes: [ BANNER, VIDEO ],
|
|
44
44
|
/**
|
|
45
45
|
* Determines whether or not the given bid request is valid.
|
|
@@ -72,10 +72,14 @@ export const spec = {
|
|
|
72
72
|
let forceBidderName = false;
|
|
73
73
|
let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo} = bidderRequest || {};
|
|
74
74
|
|
|
75
|
-
// TODO: is 'page' the right value here?
|
|
76
75
|
const referer = refererInfo ? encodeURIComponent(refererInfo.page) : '';
|
|
76
|
+
const bidderTimeout = config.getConfig('bidderTimeout') || timeout;
|
|
77
|
+
const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
|
|
77
78
|
const imp = [];
|
|
78
79
|
const bidsMap = {};
|
|
80
|
+
const requests = [];
|
|
81
|
+
const sources = [];
|
|
82
|
+
const bidsArray = [];
|
|
79
83
|
|
|
80
84
|
validBidRequests.forEach((bid) => {
|
|
81
85
|
if (!bidderRequestId) {
|
|
@@ -93,7 +97,8 @@ export const spec = {
|
|
|
93
97
|
if (!endpoint) {
|
|
94
98
|
endpoint = ALIAS_CONFIG[bid.bidder] && ALIAS_CONFIG[bid.bidder].endpoint;
|
|
95
99
|
}
|
|
96
|
-
const { params: { uid, keywords, forceBidder }, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp } = bid;
|
|
100
|
+
const { params: { uid, keywords, forceBidder, multiRequest }, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp } = bid;
|
|
101
|
+
const { pubdata, secid, pubid, source, content: bidParamsContent } = bid.params;
|
|
97
102
|
bidsMap[bidId] = bid;
|
|
98
103
|
const bidFloor = _getFloor(mediaTypes || {}, bid);
|
|
99
104
|
const jwTargeting = rtd && rtd.jwplayer && rtd.jwplayer.targeting;
|
|
@@ -105,9 +110,10 @@ export const spec = {
|
|
|
105
110
|
content = jwTargeting.content;
|
|
106
111
|
}
|
|
107
112
|
}
|
|
113
|
+
|
|
108
114
|
let impObj = {
|
|
109
115
|
id: bidId.toString(),
|
|
110
|
-
tagid: uid.toString(),
|
|
116
|
+
tagid: (secid || uid).toString(),
|
|
111
117
|
ext: {
|
|
112
118
|
divid: adUnitCode.toString()
|
|
113
119
|
}
|
|
@@ -150,7 +156,54 @@ export const spec = {
|
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
if (impObj.banner || impObj.video) {
|
|
153
|
-
|
|
159
|
+
if (multiRequest) {
|
|
160
|
+
const reqSource = {
|
|
161
|
+
tid: bid.auctionId && bid.auctionId.toString(),
|
|
162
|
+
ext: {
|
|
163
|
+
wrapper: 'Prebid_js',
|
|
164
|
+
wrapper_version: '$prebid.version$'
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
if (bid.schain) {
|
|
168
|
+
reqSource.ext.schain = bid.schain;
|
|
169
|
+
}
|
|
170
|
+
const request = {
|
|
171
|
+
id: bid.bidderRequestId && bid.bidderRequestId.toString(),
|
|
172
|
+
site: {
|
|
173
|
+
page: referer,
|
|
174
|
+
},
|
|
175
|
+
tmax,
|
|
176
|
+
source: reqSource,
|
|
177
|
+
imp: [impObj]
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
if (pubid) {
|
|
181
|
+
request.site.publisher = { id: pubid };
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const reqJwpseg = (pubdata && pubdata.jwpseg) || (jwTargeting && jwTargeting.segments);
|
|
185
|
+
|
|
186
|
+
const siteContent = bidParamsContent || (jwTargeting && jwTargeting.content);
|
|
187
|
+
|
|
188
|
+
if (siteContent) {
|
|
189
|
+
request.site.content = siteContent;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (reqJwpseg && reqJwpseg.length) {
|
|
193
|
+
request.user = {
|
|
194
|
+
data: [{
|
|
195
|
+
name: 'iow_labs_pub_data',
|
|
196
|
+
segment: segmentProcessing(reqJwpseg, 'jwpseg'),
|
|
197
|
+
}]
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
requests.push(request);
|
|
202
|
+
sources.push(source);
|
|
203
|
+
bidsArray.push(bid);
|
|
204
|
+
} else {
|
|
205
|
+
imp.push(impObj);
|
|
206
|
+
}
|
|
154
207
|
}
|
|
155
208
|
|
|
156
209
|
if (!forceBidderName && forceBidder && ALIAS_CONFIG[forceBidder]) {
|
|
@@ -165,7 +218,7 @@ export const spec = {
|
|
|
165
218
|
this.forceBidderName = forceBidderName;
|
|
166
219
|
}
|
|
167
220
|
|
|
168
|
-
const
|
|
221
|
+
const reqSource = {
|
|
169
222
|
tid: auctionId && auctionId.toString(),
|
|
170
223
|
ext: {
|
|
171
224
|
wrapper: 'Prebid_js',
|
|
@@ -174,28 +227,25 @@ export const spec = {
|
|
|
174
227
|
};
|
|
175
228
|
|
|
176
229
|
if (schain) {
|
|
177
|
-
|
|
230
|
+
reqSource.ext.schain = schain;
|
|
178
231
|
}
|
|
179
232
|
|
|
180
|
-
const
|
|
181
|
-
const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
|
|
182
|
-
|
|
183
|
-
let request = {
|
|
233
|
+
const mainRequest = (imp.length || !requests.length) ? {
|
|
184
234
|
id: bidderRequestId && bidderRequestId.toString(),
|
|
185
235
|
site: {
|
|
186
236
|
page: referer
|
|
187
237
|
},
|
|
188
238
|
tmax,
|
|
189
|
-
source,
|
|
239
|
+
source: reqSource,
|
|
190
240
|
imp
|
|
191
|
-
};
|
|
241
|
+
} : null;
|
|
192
242
|
|
|
193
243
|
if (content) {
|
|
194
|
-
|
|
244
|
+
mainRequest.site.content = content;
|
|
195
245
|
}
|
|
196
246
|
|
|
197
247
|
if (jwpseg && jwpseg.length) {
|
|
198
|
-
user = {
|
|
248
|
+
mainRequest.user = {
|
|
199
249
|
data: [{
|
|
200
250
|
name: 'iow_labs_pub_data',
|
|
201
251
|
segment: segmentProcessing(jwpseg, 'jwpseg'),
|
|
@@ -203,131 +253,151 @@ export const spec = {
|
|
|
203
253
|
};
|
|
204
254
|
}
|
|
205
255
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
user = { data: [] };
|
|
256
|
+
[...requests, mainRequest].forEach((request) => {
|
|
257
|
+
if (!request) {
|
|
258
|
+
return;
|
|
210
259
|
}
|
|
211
|
-
user = mergeDeep(user, {
|
|
212
|
-
data: [...ortb2UserData]
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
260
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
261
|
+
const ortb2UserData = deepAccess(bidderRequest, 'ortb2.user.data');
|
|
262
|
+
if (ortb2UserData && ortb2UserData.length) {
|
|
263
|
+
user = request.user || { data: [] };
|
|
264
|
+
user = mergeDeep(user, {
|
|
265
|
+
data: [...ortb2UserData]
|
|
266
|
+
});
|
|
267
|
+
}
|
|
219
268
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
userExt.device = { ...ortb2UserExtDevice };
|
|
224
|
-
}
|
|
269
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
270
|
+
userExt = {consent: gdprConsent.consentString};
|
|
271
|
+
}
|
|
225
272
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
273
|
+
const ortb2UserExtDevice = deepAccess(bidderRequest, 'ortb2.user.ext.device');
|
|
274
|
+
if (ortb2UserExtDevice) {
|
|
275
|
+
userExt = userExt || {};
|
|
276
|
+
userExt.device = { ...ortb2UserExtDevice };
|
|
277
|
+
}
|
|
230
278
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
279
|
+
if (userIdAsEids && userIdAsEids.length) {
|
|
280
|
+
userExt = userExt || {};
|
|
281
|
+
userExt.eids = [...userIdAsEids];
|
|
282
|
+
}
|
|
235
283
|
|
|
236
|
-
|
|
284
|
+
if (userExt && Object.keys(userExt).length) {
|
|
285
|
+
user = user || {};
|
|
286
|
+
user.ext = userExt;
|
|
287
|
+
}
|
|
237
288
|
|
|
238
|
-
|
|
239
|
-
user = user || {};
|
|
240
|
-
user.id = fpdUserId.toString();
|
|
241
|
-
}
|
|
289
|
+
const fpdUserId = getUserIdFromFPDStorage();
|
|
242
290
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
291
|
+
if (fpdUserId) {
|
|
292
|
+
user = user || {};
|
|
293
|
+
user.id = fpdUserId.toString();
|
|
294
|
+
}
|
|
246
295
|
|
|
247
|
-
|
|
248
|
-
|
|
296
|
+
if (user) {
|
|
297
|
+
request.user = user;
|
|
298
|
+
}
|
|
249
299
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
pageKeywords.user = pageKeywords.user || {};
|
|
253
|
-
pageKeywords.user.ortb2 = [
|
|
254
|
-
{
|
|
255
|
-
name: 'keywords',
|
|
256
|
-
keywords: userKeywords.split(','),
|
|
257
|
-
}
|
|
258
|
-
];
|
|
259
|
-
}
|
|
260
|
-
if (siteKeywords) {
|
|
261
|
-
pageKeywords = pageKeywords || {};
|
|
262
|
-
pageKeywords.site = pageKeywords.site || {};
|
|
263
|
-
pageKeywords.site.ortb2 = [
|
|
264
|
-
{
|
|
265
|
-
name: 'keywords',
|
|
266
|
-
keywords: siteKeywords.split(','),
|
|
267
|
-
}
|
|
268
|
-
];
|
|
269
|
-
}
|
|
300
|
+
const userKeywords = deepAccess(bidderRequest, 'ortb2.user.keywords') || null;
|
|
301
|
+
const siteKeywords = deepAccess(bidderRequest, 'ortb2.site.keywords') || null;
|
|
270
302
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
303
|
+
if (userKeywords) {
|
|
304
|
+
pageKeywords = pageKeywords || {};
|
|
305
|
+
pageKeywords.user = pageKeywords.user || {};
|
|
306
|
+
pageKeywords.user.ortb2 = [
|
|
307
|
+
{
|
|
308
|
+
name: 'keywords',
|
|
309
|
+
keywords: userKeywords.split(','),
|
|
310
|
+
}
|
|
311
|
+
];
|
|
312
|
+
}
|
|
313
|
+
if (siteKeywords) {
|
|
314
|
+
pageKeywords = pageKeywords || {};
|
|
315
|
+
pageKeywords.site = pageKeywords.site || {};
|
|
316
|
+
pageKeywords.site.ortb2 = [
|
|
317
|
+
{
|
|
318
|
+
name: 'keywords',
|
|
319
|
+
keywords: siteKeywords.split(','),
|
|
320
|
+
}
|
|
321
|
+
];
|
|
277
322
|
}
|
|
278
|
-
}
|
|
279
323
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
324
|
+
if (pageKeywords) {
|
|
325
|
+
pageKeywords = reformatKeywords(pageKeywords);
|
|
326
|
+
if (pageKeywords) {
|
|
327
|
+
request.ext = {
|
|
328
|
+
keywords: pageKeywords
|
|
329
|
+
};
|
|
284
330
|
}
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
if (uspConsent) {
|
|
289
|
-
if (!request.regs) {
|
|
290
|
-
request.regs = {ext: {}};
|
|
291
331
|
}
|
|
292
|
-
request.regs.ext.us_privacy = uspConsent;
|
|
293
|
-
}
|
|
294
332
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
333
|
+
if (gdprConsent && gdprConsent.gdprApplies) {
|
|
334
|
+
request.regs = {
|
|
335
|
+
ext: {
|
|
336
|
+
gdpr: gdprConsent.gdprApplies ? 1 : 0
|
|
337
|
+
}
|
|
338
|
+
};
|
|
298
339
|
}
|
|
299
|
-
request.regs.coppa = 1;
|
|
300
|
-
}
|
|
301
340
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
if (pageCategory.length) {
|
|
308
|
-
request.site.cat = pageCategory;
|
|
309
|
-
}
|
|
310
|
-
const genre = deepAccess(site, 'content.genre');
|
|
311
|
-
if (genre && typeof genre === 'string') {
|
|
312
|
-
request.site.content = {...request.site.content, genre};
|
|
341
|
+
if (uspConsent) {
|
|
342
|
+
if (!request.regs) {
|
|
343
|
+
request.regs = {ext: {}};
|
|
344
|
+
}
|
|
345
|
+
request.regs.ext.us_privacy = uspConsent;
|
|
313
346
|
}
|
|
314
|
-
|
|
315
|
-
if (
|
|
316
|
-
|
|
317
|
-
|
|
347
|
+
|
|
348
|
+
if (config.getConfig('coppa') === true) {
|
|
349
|
+
if (!request.regs) {
|
|
350
|
+
request.regs = {};
|
|
351
|
+
}
|
|
352
|
+
request.regs.coppa = 1;
|
|
318
353
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
354
|
+
|
|
355
|
+
const site = deepAccess(bidderRequest, 'ortb2.site');
|
|
356
|
+
if (site) {
|
|
357
|
+
const pageCategory = [...(site.cat || []), ...(site.pagecat || [])].filter((category) => {
|
|
358
|
+
return category && typeof category === 'string'
|
|
359
|
+
});
|
|
360
|
+
if (pageCategory.length) {
|
|
361
|
+
request.site.cat = pageCategory;
|
|
362
|
+
}
|
|
363
|
+
const genre = deepAccess(site, 'content.genre');
|
|
364
|
+
if (genre && typeof genre === 'string') {
|
|
365
|
+
request.site.content = {...request.site.content, genre};
|
|
366
|
+
}
|
|
367
|
+
const data = deepAccess(site, 'content.data');
|
|
368
|
+
if (data && data.length) {
|
|
369
|
+
const siteContent = request.site.content || {};
|
|
370
|
+
request.site.content = mergeDeep(siteContent, { data });
|
|
371
|
+
}
|
|
372
|
+
const id = deepAccess(site, 'content.id');
|
|
373
|
+
if (id) {
|
|
374
|
+
request.site.content = {...request.site.content, id};
|
|
375
|
+
}
|
|
322
376
|
}
|
|
323
|
-
}
|
|
377
|
+
});
|
|
324
378
|
|
|
325
|
-
return {
|
|
379
|
+
return [...requests.map((req, i) => {
|
|
380
|
+
let sp;
|
|
381
|
+
const url = (endpoint || ENDPOINT_URL).replace(/[?&]sp=([^?&=]+)/, (i, found) => {
|
|
382
|
+
if (found) {
|
|
383
|
+
sp = found;
|
|
384
|
+
}
|
|
385
|
+
return '';
|
|
386
|
+
});
|
|
387
|
+
let currentSource = sources[i] || sp;
|
|
388
|
+
const urlWithParams = url + (url.indexOf('?') > -1 ? '&' : '?') + 'no_mapping=1' + (currentSource ? `&sp=${currentSource}` : '');
|
|
389
|
+
return {
|
|
390
|
+
method: 'POST',
|
|
391
|
+
url: urlWithParams,
|
|
392
|
+
data: JSON.stringify(req),
|
|
393
|
+
bid: bidsArray[i],
|
|
394
|
+
};
|
|
395
|
+
}), ...(mainRequest ? [{
|
|
326
396
|
method: 'POST',
|
|
327
397
|
url: endpoint || ENDPOINT_URL,
|
|
328
|
-
data: JSON.stringify(
|
|
398
|
+
data: JSON.stringify(mainRequest),
|
|
329
399
|
bidsMap
|
|
330
|
-
};
|
|
400
|
+
}] : [])];
|
|
331
401
|
},
|
|
332
402
|
/**
|
|
333
403
|
* Unpack the response from the server into a list of bids.
|
|
@@ -395,7 +465,7 @@ export const spec = {
|
|
|
395
465
|
*/
|
|
396
466
|
function _getFloor (mediaTypes, bid) {
|
|
397
467
|
const curMediaType = mediaTypes.video ? 'video' : 'banner';
|
|
398
|
-
let floor = bid.params.bidFloor || 0;
|
|
468
|
+
let floor = bid.params.bidFloor || bid.params.floorcpm || 0;
|
|
399
469
|
|
|
400
470
|
if (typeof bid.getFloor === 'function') {
|
|
401
471
|
const floorInfo = bid.getFloor({
|
|
@@ -431,7 +501,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
|
|
|
431
501
|
if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid);
|
|
432
502
|
if (!errorMessage && !serverBid.adm && !serverBid.nurl) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);
|
|
433
503
|
else {
|
|
434
|
-
const bid = bidRequest.bidsMap[serverBid.impid];
|
|
504
|
+
const bid = bidRequest.bidsMap ? bidRequest.bidsMap[serverBid.impid] : bidRequest.bid;
|
|
435
505
|
if (bid) {
|
|
436
506
|
const bidResponse = {
|
|
437
507
|
requestId: bid.bidId, // bid.bidderRequestId
|
|
@@ -483,7 +553,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
|
|
|
483
553
|
}
|
|
484
554
|
|
|
485
555
|
function createVideoRequest(bid, mediaType) {
|
|
486
|
-
const {playerSize, mimes, durationRangeSec, protocols} = mediaType;
|
|
556
|
+
const { playerSize, mimes, durationRangeSec, protocols } = mediaType;
|
|
487
557
|
const size = (playerSize || bid.sizes || [])[0];
|
|
488
558
|
if (!size) return;
|
|
489
559
|
|