prebid.js 9.2.0 → 9.4.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/creative/constants.js +2 -1
- package/creative/crossDomain.js +16 -4
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adagioRtdProvider.js +1 -1
- package/dist/adagioUtils.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.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/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/codefuelBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -0
- package/dist/consentManagementGpp.js +1 -1
- package/dist/consentManagementTcf.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/copper6sspBidAdapter.js +1 -0
- package/dist/cpmstarBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -1
- package/dist/deltaprojectsBidAdapter.js +1 -1
- package/dist/dependencies.json +51 -13
- package/dist/dianomiBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/illuminBidAdapter.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.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/missenaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +184 -178
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openwebBidAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/orakiBidAdapter.js +1 -0
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/ozoneBidAdapter.js +1 -1
- package/dist/pairIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/processResponse.js +1 -0
- package/dist/publinkIdSystem.js +1 -1
- package/dist/publirBidAdapter.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.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/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.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/shinezRtbBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smartyadsUtils.js +1 -0
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stnBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tagorasBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/twistDigitalBidAdapter.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/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/viantOrtbBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/vidazooUtils.js +1 -0
- 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/yahooAdsBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/x-domain/creative.html +1 -1
- package/libraries/consentManagement/cmUtils.js +38 -0
- package/libraries/processResponse/index.js +12 -0
- package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
- package/libraries/vidazooUtils/bidderUtils.js +480 -0
- package/libraries/vidazooUtils/constants.js +7 -0
- package/modules/adagioRtdProvider.js +9 -7
- package/modules/addefendBidAdapter.js +1 -2
- package/modules/adfBidAdapter.js +1 -10
- package/modules/adlooxRtdProvider.js +1 -1
- package/modules/adnuntiusBidAdapter.js +1 -0
- package/modules/adxcgAnalyticsAdapter.js +1 -2
- package/modules/carodaBidAdapter.js +3 -8
- package/modules/codefuelBidAdapter.js +1 -10
- package/modules/consentManagementGpp.js +2 -38
- package/modules/consentManagementTcf.js +7 -38
- package/modules/conversantAnalyticsAdapter.js +1 -2
- package/modules/copper6sspBidAdapter.js +19 -0
- package/modules/copper6sspBidAdapter.md +79 -0
- package/modules/cpmstarBidAdapter.js +52 -36
- package/modules/cpmstarBidAdapter.md +1 -4
- package/modules/criteoBidAdapter.js +10 -3
- package/modules/dailymotionBidAdapter.js +1 -1
- package/modules/deltaprojectsBidAdapter.js +2 -11
- package/modules/dianomiBidAdapter.js +1 -9
- package/modules/finativeBidAdapter.js +1 -10
- package/modules/gridBidAdapter.js +2 -12
- package/modules/id5AnalyticsAdapter.js +1 -2
- package/modules/illuminBidAdapter.js +9 -304
- package/modules/intentIqIdSystem.js +408 -50
- package/modules/intentIqIdSystem.md +92 -0
- package/modules/kueezRtbBidAdapter.js +17 -312
- package/modules/liveIntentIdSystem.js +2 -2
- package/modules/luponmediaBidAdapter.js +4 -10
- package/modules/mabidderBidAdapter.js +1 -2
- package/modules/medianetAnalyticsAdapter.js +1 -2
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/mgidBidAdapter.js +1 -10
- package/modules/orakiBidAdapter.js +19 -0
- package/modules/orakiBidAdapter.md +79 -0
- package/modules/orbidderBidAdapter.js +4 -2
- package/modules/outbrainBidAdapter.js +8 -43
- package/modules/ozoneBidAdapter.js +9 -7
- package/modules/pairIdSystem.js +27 -10
- package/modules/pixfutureBidAdapter.js +1 -2
- package/modules/prebidServerBidAdapter/index.js +1 -1
- package/modules/seedtagBidAdapter.js +4 -0
- package/modules/shinezRtbBidAdapter.js +12 -304
- package/modules/smartadserverBidAdapter.js +3 -0
- package/modules/smartyadsBidAdapter.js +6 -110
- package/modules/snigelBidAdapter.js +1 -2
- package/modules/tagorasBidAdapter.js +13 -316
- package/modules/tappxBidAdapter.js +1 -2
- package/modules/terceptAnalyticsAdapter.js +1 -2
- package/modules/twistDigitalBidAdapter.js +9 -433
- package/modules/userId/index.js +31 -21
- package/modules/viantOrtbBidAdapter.js +20 -0
- package/modules/vidazooBidAdapter.js +26 -468
- package/modules/visxBidAdapter.js +27 -29
- package/modules/yahooAdsBidAdapter.js +4 -1
- package/modules/yuktamediaAnalyticsAdapter.js +1 -2
- package/modules/zeta_global_sspBidAdapter.js +2 -2
- package/package.json +1 -1
- package/src/adRendering.js +25 -2
- package/src/constants.js +2 -0
- package/src/prebid.js +2 -1
- package/src/utils.js +19 -1
- package/test/spec/creative/crossDomainCreative_spec.js +38 -2
- package/test/spec/fpd/gdpr_spec.js +24 -2
- package/test/spec/libraries/processResponse_spec.js +60 -0
- package/test/spec/modules/adagioRtdProvider_spec.js +12 -0
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
- package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
- package/test/spec/modules/dailymotionBidAdapter_spec.js +18 -14
- package/test/spec/modules/illuminBidAdapter_spec.js +26 -13
- package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +26 -15
- package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
- package/test/spec/modules/outbrainBidAdapter_spec.js +32 -1
- package/test/spec/modules/seedtagBidAdapter_spec.js +27 -0
- package/test/spec/modules/shinezRtbBidAdapter_spec.js +26 -14
- package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
- package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
- package/test/spec/modules/tagorasBidAdapter_spec.js +26 -15
- package/test/spec/modules/twistDigitalBidAdapter_spec.js +19 -22
- package/test/spec/modules/userId_spec.js +86 -47
- package/test/spec/modules/viantOrtbBidAdapter_spec.js +87 -6
- package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
- package/test/spec/modules/visxBidAdapter_spec.js +180 -0
- package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +11 -0
- package/test/spec/unit/pbjs_api_spec.js +6 -1
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import {
|
|
2
|
+
_each,
|
|
3
|
+
deepAccess,
|
|
4
|
+
formatQS,
|
|
5
|
+
isArray,
|
|
6
|
+
isFn,
|
|
7
|
+
parseSizesInput,
|
|
8
|
+
parseUrl,
|
|
9
|
+
triggerPixel,
|
|
10
|
+
uniques
|
|
11
|
+
} from '../../src/utils.js';
|
|
12
|
+
import {chunk} from '../chunk/chunk.js';
|
|
13
|
+
import {CURRENCY, DEAL_ID_EXPIRY, SESSION_ID_KEY, TTL_SECONDS, UNIQUE_DEAL_ID_EXPIRY} from './constants.js';
|
|
14
|
+
import {bidderSettings} from '../../src/bidderSettings.js';
|
|
15
|
+
import {config} from '../../src/config.js';
|
|
16
|
+
import {BANNER, VIDEO} from '../../src/mediaTypes.js';
|
|
17
|
+
|
|
18
|
+
export function createSessionId() {
|
|
19
|
+
return 'wsid_' + parseInt(Date.now() * Math.random());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getTopWindowQueryParams() {
|
|
23
|
+
try {
|
|
24
|
+
const parsedUrl = parseUrl(window.top.document.URL, {decodeSearchAsString: true});
|
|
25
|
+
return parsedUrl.search;
|
|
26
|
+
} catch (e) {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function extractCID(params) {
|
|
32
|
+
return params.cId || params.CID || params.cID || params.CId || params.cid || params.ciD || params.Cid || params.CiD;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function extractPID(params) {
|
|
36
|
+
return params.pId || params.PID || params.pID || params.PId || params.pid || params.piD || params.Pid || params.PiD;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function extractSubDomain(params) {
|
|
40
|
+
return params.subDomain || params.SubDomain || params.Subdomain || params.subdomain || params.SUBDOMAIN || params.subDOMAIN;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function isBidRequestValid(bid) {
|
|
44
|
+
const params = bid.params || {};
|
|
45
|
+
return !!(extractCID(params) && extractPID(params));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function tryParseJSON(value) {
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(value);
|
|
51
|
+
} catch (e) {
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function setStorageItem(storage, key, value, timestamp) {
|
|
57
|
+
try {
|
|
58
|
+
const created = timestamp || Date.now();
|
|
59
|
+
const data = JSON.stringify({value, created});
|
|
60
|
+
storage.setDataInLocalStorage(key, data);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function getStorageItem(storage, key) {
|
|
66
|
+
try {
|
|
67
|
+
return tryParseJSON(storage.getDataFromLocalStorage(key, null));
|
|
68
|
+
} catch (e) {
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function getCacheOpt(storage, useKey) {
|
|
75
|
+
let data = storage.getDataFromLocalStorage(useKey, null);
|
|
76
|
+
if (!data) {
|
|
77
|
+
data = String(Date.now());
|
|
78
|
+
storage.setDataInLocalStorage(useKey, data, null);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return data;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function getUniqueDealId(storage, key, expiry = UNIQUE_DEAL_ID_EXPIRY) {
|
|
85
|
+
const storageKey = `u_${key}`;
|
|
86
|
+
const now = Date.now();
|
|
87
|
+
const data = getStorageItem(storage, storageKey);
|
|
88
|
+
let uniqueId;
|
|
89
|
+
|
|
90
|
+
if (!data || !data.value || now - data.created > expiry) {
|
|
91
|
+
uniqueId = `${key}_${now.toString()}`;
|
|
92
|
+
setStorageItem(storage, storageKey, uniqueId);
|
|
93
|
+
} else {
|
|
94
|
+
uniqueId = data.value;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return uniqueId;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function getNextDealId(storage, key, expiry = DEAL_ID_EXPIRY) {
|
|
101
|
+
try {
|
|
102
|
+
const data = getStorageItem(storage, key);
|
|
103
|
+
let currentValue = 0;
|
|
104
|
+
let timestamp;
|
|
105
|
+
|
|
106
|
+
if (data && data.value && Date.now() - data.created < expiry) {
|
|
107
|
+
currentValue = data.value;
|
|
108
|
+
timestamp = data.created;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const nextValue = currentValue + 1;
|
|
112
|
+
setStorageItem(storage, key, nextValue, timestamp);
|
|
113
|
+
return nextValue;
|
|
114
|
+
} catch (e) {
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function hashCode(s, prefix = '_') {
|
|
120
|
+
const l = s.length;
|
|
121
|
+
let h = 0
|
|
122
|
+
let i = 0;
|
|
123
|
+
if (l > 0) {
|
|
124
|
+
while (i < l) {
|
|
125
|
+
h = (h << 5) - h + s.charCodeAt(i++) | 0;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return prefix + h;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function onBidWon(bid) {
|
|
132
|
+
if (!bid.nurl) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const wonBid = {
|
|
136
|
+
adId: bid.adId,
|
|
137
|
+
creativeId: bid.creativeId,
|
|
138
|
+
auctionId: bid.auctionId,
|
|
139
|
+
transactionId: bid.transactionId,
|
|
140
|
+
adUnitCode: bid.adUnitCode,
|
|
141
|
+
cpm: bid.cpm,
|
|
142
|
+
currency: bid.currency,
|
|
143
|
+
originalCpm: bid.originalCpm,
|
|
144
|
+
originalCurrency: bid.originalCurrency,
|
|
145
|
+
netRevenue: bid.netRevenue,
|
|
146
|
+
mediaType: bid.mediaType,
|
|
147
|
+
timeToRespond: bid.timeToRespond,
|
|
148
|
+
status: bid.status,
|
|
149
|
+
};
|
|
150
|
+
const qs = formatQS(wonBid);
|
|
151
|
+
const url = bid.nurl + (bid.nurl.indexOf('?') === -1 ? '?' : '&') + qs;
|
|
152
|
+
triggerPixel(url);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Create the spec function for getting user syncs
|
|
157
|
+
*
|
|
158
|
+
* The options object accepts the following fields:
|
|
159
|
+
*
|
|
160
|
+
* - iframeSyncUrl
|
|
161
|
+
* - imageSyncUrl
|
|
162
|
+
*
|
|
163
|
+
* @param options
|
|
164
|
+
*/
|
|
165
|
+
export function createUserSyncGetter(options = {
|
|
166
|
+
iframeSyncUrl: '',
|
|
167
|
+
imageSyncUrl: ''
|
|
168
|
+
}) {
|
|
169
|
+
return function getUserSyncs(syncOptions, responses, gdprConsent = {}, uspConsent = '', gppConsent = {}) {
|
|
170
|
+
const syncs = [];
|
|
171
|
+
const {iframeEnabled, pixelEnabled} = syncOptions;
|
|
172
|
+
const {gdprApplies, consentString = ''} = gdprConsent;
|
|
173
|
+
const {gppString, applicableSections} = gppConsent;
|
|
174
|
+
|
|
175
|
+
const cidArr = responses.filter(resp => deepAccess(resp, 'body.cid')).map(resp => resp.body.cid).filter(uniques);
|
|
176
|
+
let params = `?cid=${encodeURIComponent(cidArr.join(','))}&gdpr=${gdprApplies ? 1 : 0}&gdpr_consent=${encodeURIComponent(consentString || '')}&us_privacy=${encodeURIComponent(uspConsent || '')}`;
|
|
177
|
+
|
|
178
|
+
if (gppString && applicableSections?.length) {
|
|
179
|
+
params += '&gpp=' + encodeURIComponent(gppString);
|
|
180
|
+
params += '&gpp_sid=' + encodeURIComponent(applicableSections.join(','));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (iframeEnabled && options.iframeSyncUrl) {
|
|
184
|
+
syncs.push({
|
|
185
|
+
type: 'iframe',
|
|
186
|
+
url: `${options.iframeSyncUrl}/${params}`
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
if (pixelEnabled && options.imageSyncUrl) {
|
|
190
|
+
syncs.push({
|
|
191
|
+
type: 'image',
|
|
192
|
+
url: `${options.imageSyncUrl}/${params}`
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return syncs;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function appendUserIdsToRequestPayload(payloadRef, userIds) {
|
|
200
|
+
let key;
|
|
201
|
+
_each(userIds, (userId, idSystemProviderName) => {
|
|
202
|
+
key = `uid.${idSystemProviderName}`;
|
|
203
|
+
|
|
204
|
+
switch (idSystemProviderName) {
|
|
205
|
+
case 'lipb':
|
|
206
|
+
payloadRef[key] = userId.lipbid;
|
|
207
|
+
break;
|
|
208
|
+
case 'id5id':
|
|
209
|
+
payloadRef[key] = userId.uid;
|
|
210
|
+
break;
|
|
211
|
+
default:
|
|
212
|
+
payloadRef[key] = userId;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export function getVidazooSessionId(storage) {
|
|
218
|
+
return getStorageItem(storage, SESSION_ID_KEY) || '';
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout, storage, bidderVersion, bidderCode, getUniqueRequestData) {
|
|
222
|
+
const {
|
|
223
|
+
params,
|
|
224
|
+
bidId,
|
|
225
|
+
userId,
|
|
226
|
+
adUnitCode,
|
|
227
|
+
schain,
|
|
228
|
+
mediaTypes,
|
|
229
|
+
ortb2Imp,
|
|
230
|
+
bidderRequestId,
|
|
231
|
+
bidRequestsCount,
|
|
232
|
+
bidderRequestsCount,
|
|
233
|
+
bidderWinsCount
|
|
234
|
+
} = bid;
|
|
235
|
+
const {ext} = params;
|
|
236
|
+
let {bidFloor} = params;
|
|
237
|
+
const hashUrl = hashCode(topWindowUrl);
|
|
238
|
+
const uniqueRequestData = isFn(getUniqueRequestData) ? getUniqueRequestData(hashUrl, bid) : {};
|
|
239
|
+
const uniqueDealId = getUniqueDealId(storage, hashUrl);
|
|
240
|
+
const pId = extractPID(params);
|
|
241
|
+
const isStorageAllowed = bidderSettings.get(bidderCode, 'storageAllowed');
|
|
242
|
+
|
|
243
|
+
const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid') || deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', '');
|
|
244
|
+
const cat = deepAccess(bidderRequest, 'ortb2.site.cat', []);
|
|
245
|
+
const pagecat = deepAccess(bidderRequest, 'ortb2.site.pagecat', []);
|
|
246
|
+
const contentData = deepAccess(bidderRequest, 'ortb2.site.content.data', []);
|
|
247
|
+
const userData = deepAccess(bidderRequest, 'ortb2.user.data', []);
|
|
248
|
+
|
|
249
|
+
if (isFn(bid.getFloor)) {
|
|
250
|
+
const floorInfo = bid.getFloor({
|
|
251
|
+
currency: 'USD',
|
|
252
|
+
mediaType: '*',
|
|
253
|
+
size: '*'
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
if (floorInfo.currency === 'USD') {
|
|
257
|
+
bidFloor = floorInfo.floor;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
let data = {
|
|
262
|
+
url: encodeURIComponent(topWindowUrl),
|
|
263
|
+
uqs: getTopWindowQueryParams(),
|
|
264
|
+
cb: Date.now(),
|
|
265
|
+
bidFloor: bidFloor,
|
|
266
|
+
bidId: bidId,
|
|
267
|
+
referrer: bidderRequest.refererInfo.ref,
|
|
268
|
+
adUnitCode: adUnitCode,
|
|
269
|
+
publisherId: pId,
|
|
270
|
+
sizes: sizes,
|
|
271
|
+
uniqueDealId: uniqueDealId,
|
|
272
|
+
bidderVersion: bidderVersion,
|
|
273
|
+
prebidVersion: '$prebid.version$',
|
|
274
|
+
res: `${screen.width}x${screen.height}`,
|
|
275
|
+
schain: schain,
|
|
276
|
+
mediaTypes: mediaTypes,
|
|
277
|
+
isStorageAllowed: isStorageAllowed,
|
|
278
|
+
gpid: gpid,
|
|
279
|
+
cat: cat,
|
|
280
|
+
contentData,
|
|
281
|
+
userData: userData,
|
|
282
|
+
pagecat: pagecat,
|
|
283
|
+
transactionId: ortb2Imp?.ext?.tid,
|
|
284
|
+
bidderRequestId: bidderRequestId,
|
|
285
|
+
bidRequestsCount: bidRequestsCount,
|
|
286
|
+
bidderRequestsCount: bidderRequestsCount,
|
|
287
|
+
bidderWinsCount: bidderWinsCount,
|
|
288
|
+
bidderTimeout: bidderTimeout,
|
|
289
|
+
...uniqueRequestData
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
appendUserIdsToRequestPayload(data, userId);
|
|
293
|
+
|
|
294
|
+
const sua = deepAccess(bidderRequest, 'ortb2.device.sua');
|
|
295
|
+
|
|
296
|
+
if (sua) {
|
|
297
|
+
data.sua = sua;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (bidderRequest.gdprConsent) {
|
|
301
|
+
if (bidderRequest.gdprConsent.consentString) {
|
|
302
|
+
data.gdprConsent = bidderRequest.gdprConsent.consentString;
|
|
303
|
+
}
|
|
304
|
+
if (bidderRequest.gdprConsent.gdprApplies !== undefined) {
|
|
305
|
+
data.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (bidderRequest.uspConsent) {
|
|
309
|
+
data.usPrivacy = bidderRequest.uspConsent;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (bidderRequest.gppConsent) {
|
|
313
|
+
data.gppString = bidderRequest.gppConsent.gppString;
|
|
314
|
+
data.gppSid = bidderRequest.gppConsent.applicableSections;
|
|
315
|
+
} else if (bidderRequest.ortb2?.regs?.gpp) {
|
|
316
|
+
data.gppString = bidderRequest.ortb2.regs.gpp;
|
|
317
|
+
data.gppSid = bidderRequest.ortb2.regs.gpp_sid;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (bidderRequest.paapi?.enabled) {
|
|
321
|
+
const fledge = deepAccess(bidderRequest, 'ortb2Imp.ext.ae');
|
|
322
|
+
if (fledge) {
|
|
323
|
+
data.fledge = fledge;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
_each(ext, (value, key) => {
|
|
328
|
+
data['ext.' + key] = value;
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
return data;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export function createInterpretResponseFn(bidderCode, allowSingleRequest) {
|
|
335
|
+
return function interpretResponse(serverResponse, request) {
|
|
336
|
+
if (!serverResponse || !serverResponse.body) {
|
|
337
|
+
return [];
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
const singleRequestMode = allowSingleRequest && config.getConfig(`${bidderCode}.singleRequest`);
|
|
341
|
+
const reqBidId = deepAccess(request, 'data.bidId');
|
|
342
|
+
const {results} = serverResponse.body;
|
|
343
|
+
|
|
344
|
+
let output = [];
|
|
345
|
+
|
|
346
|
+
try {
|
|
347
|
+
results.forEach((result, i) => {
|
|
348
|
+
const {
|
|
349
|
+
creativeId,
|
|
350
|
+
ad,
|
|
351
|
+
price,
|
|
352
|
+
exp,
|
|
353
|
+
width,
|
|
354
|
+
height,
|
|
355
|
+
currency,
|
|
356
|
+
bidId,
|
|
357
|
+
nurl,
|
|
358
|
+
advertiserDomains,
|
|
359
|
+
metaData,
|
|
360
|
+
mediaType = BANNER
|
|
361
|
+
} = result;
|
|
362
|
+
if (!ad || !price) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const response = {
|
|
367
|
+
requestId: (singleRequestMode && bidId) ? bidId : reqBidId,
|
|
368
|
+
cpm: price,
|
|
369
|
+
width: width,
|
|
370
|
+
height: height,
|
|
371
|
+
creativeId: creativeId,
|
|
372
|
+
currency: currency || CURRENCY,
|
|
373
|
+
netRevenue: true,
|
|
374
|
+
ttl: exp || TTL_SECONDS,
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
if (nurl) {
|
|
378
|
+
response.nurl = nurl;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if (metaData) {
|
|
382
|
+
Object.assign(response, {
|
|
383
|
+
meta: metaData
|
|
384
|
+
})
|
|
385
|
+
} else {
|
|
386
|
+
Object.assign(response, {
|
|
387
|
+
meta: {
|
|
388
|
+
advertiserDomains: advertiserDomains || []
|
|
389
|
+
}
|
|
390
|
+
})
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
if (mediaType === BANNER) {
|
|
394
|
+
Object.assign(response, {
|
|
395
|
+
ad: ad,
|
|
396
|
+
});
|
|
397
|
+
} else {
|
|
398
|
+
Object.assign(response, {
|
|
399
|
+
vastXml: ad,
|
|
400
|
+
mediaType: VIDEO
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
output.push(response);
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
return output;
|
|
407
|
+
} catch (e) {
|
|
408
|
+
return [];
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
export function createBuildRequestsFn(createRequestDomain, createUniqueRequestData, storage, bidderCode, bidderVersion, allowSingleRequest) {
|
|
414
|
+
function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
415
|
+
const {params} = bid;
|
|
416
|
+
const cId = extractCID(params);
|
|
417
|
+
const subDomain = extractSubDomain(params);
|
|
418
|
+
const data = buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout, storage, bidderVersion, bidderCode, createUniqueRequestData);
|
|
419
|
+
const dto = {
|
|
420
|
+
method: 'POST', url: `${createRequestDomain(subDomain)}/prebid/multi/${cId}`, data: data
|
|
421
|
+
};
|
|
422
|
+
return dto;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
function buildSingleRequest(bidRequests, bidderRequest, topWindowUrl, bidderTimeout) {
|
|
426
|
+
const {params} = bidRequests[0];
|
|
427
|
+
const cId = extractCID(params);
|
|
428
|
+
const subDomain = extractSubDomain(params);
|
|
429
|
+
const data = bidRequests.map(bid => {
|
|
430
|
+
const sizes = parseSizesInput(bid.sizes);
|
|
431
|
+
return buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout, storage, bidderVersion, bidderCode, createUniqueRequestData)
|
|
432
|
+
});
|
|
433
|
+
const chunkSize = Math.min(20, config.getConfig(`${bidderCode}.chunkSize`) || 10);
|
|
434
|
+
|
|
435
|
+
const chunkedData = chunk(data, chunkSize);
|
|
436
|
+
return chunkedData.map(chunk => {
|
|
437
|
+
return {
|
|
438
|
+
method: 'POST',
|
|
439
|
+
url: `${createRequestDomain(subDomain)}/prebid/multi/${cId}`,
|
|
440
|
+
data: {
|
|
441
|
+
bids: chunk
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return function buildRequests(validBidRequests, bidderRequest) {
|
|
448
|
+
const topWindowUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation;
|
|
449
|
+
const bidderTimeout = config.getConfig('bidderTimeout');
|
|
450
|
+
|
|
451
|
+
const singleRequestMode = allowSingleRequest && config.getConfig(`${bidderCode}.singleRequest`);
|
|
452
|
+
|
|
453
|
+
const requests = [];
|
|
454
|
+
|
|
455
|
+
if (singleRequestMode) {
|
|
456
|
+
// banner bids are sent as a single request
|
|
457
|
+
const bannerBidRequests = validBidRequests.filter(bid => isArray(bid.mediaTypes) ? bid.mediaTypes.includes(BANNER) : bid.mediaTypes[BANNER] !== undefined);
|
|
458
|
+
if (bannerBidRequests.length > 0) {
|
|
459
|
+
const singleRequests = buildSingleRequest(bannerBidRequests, bidderRequest, topWindowUrl, bidderTimeout);
|
|
460
|
+
requests.push(...singleRequests);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// video bids are sent as a single request for each bid
|
|
464
|
+
|
|
465
|
+
const videoBidRequests = validBidRequests.filter(bid => bid.mediaTypes[VIDEO] !== undefined);
|
|
466
|
+
videoBidRequests.forEach(validBidRequest => {
|
|
467
|
+
const sizes = parseSizesInput(validBidRequest.sizes);
|
|
468
|
+
const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
|
|
469
|
+
requests.push(request);
|
|
470
|
+
});
|
|
471
|
+
} else {
|
|
472
|
+
validBidRequests.forEach(validBidRequest => {
|
|
473
|
+
const sizes = parseSizesInput(validBidRequest.sizes);
|
|
474
|
+
const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
|
|
475
|
+
requests.push(request);
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
return requests;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const CURRENCY = 'USD';
|
|
2
|
+
export const TTL_SECONDS = 60 * 5;
|
|
3
|
+
export const DEAL_ID_EXPIRY = 1000 * 60 * 15;
|
|
4
|
+
export const UNIQUE_DEAL_ID_EXPIRY = 1000 * 60 * 60;
|
|
5
|
+
export const SESSION_ID_KEY = 'vidSid';
|
|
6
|
+
export const OPT_CACHE_KEY = 'vdzwopt';
|
|
7
|
+
export const OPT_TIME_KEY = 'vdzHum';
|
|
@@ -278,15 +278,18 @@ function onGetBidRequestData(bidReqConfig, callback, config) {
|
|
|
278
278
|
|
|
279
279
|
const adUnits = bidReqConfig.adUnits || getGlobal().adUnits || [];
|
|
280
280
|
adUnits.forEach(adUnit => {
|
|
281
|
+
adUnit.ortb2Imp = adUnit.ortb2Imp || {};
|
|
281
282
|
const ortb2Imp = deepAccess(adUnit, 'ortb2Imp');
|
|
283
|
+
|
|
282
284
|
// A divId is required to compute the slot position and later to track viewability.
|
|
283
285
|
// If nothing has been explicitly set, we try to get the divId from the GPT slot and fallback to the adUnit code in last resort.
|
|
284
|
-
|
|
285
|
-
|
|
286
|
+
let divId = deepAccess(ortb2Imp, 'ext.data.divId')
|
|
287
|
+
if (!divId) {
|
|
288
|
+
divId = getGptSlotInfoForAdUnitCode(adUnit.code).divId;
|
|
286
289
|
deepSetValue(ortb2Imp, `ext.data.divId`, divId || adUnit.code);
|
|
287
290
|
}
|
|
288
291
|
|
|
289
|
-
const slotPosition = getSlotPosition(
|
|
292
|
+
const slotPosition = getSlotPosition(divId);
|
|
290
293
|
deepSetValue(ortb2Imp, `ext.data.adg_rtd.adunit_position`, slotPosition);
|
|
291
294
|
|
|
292
295
|
// It is expected that the publisher set a `adUnits[].ortb2Imp.ext.data.placement` value.
|
|
@@ -430,7 +433,7 @@ function getElementFromTopWindow(element, currentWindow) {
|
|
|
430
433
|
}
|
|
431
434
|
};
|
|
432
435
|
|
|
433
|
-
function getSlotPosition(
|
|
436
|
+
function getSlotPosition(divId) {
|
|
434
437
|
if (!isSafeFrameWindow() && !canAccessWindowTop()) {
|
|
435
438
|
return '';
|
|
436
439
|
}
|
|
@@ -451,16 +454,15 @@ function getSlotPosition(adUnit) {
|
|
|
451
454
|
// window.top based computing
|
|
452
455
|
const wt = getWindowTop();
|
|
453
456
|
const d = wt.document;
|
|
454
|
-
const adUnitElementId = deepAccess(adUnit, 'ortb2Imp.ext.data.divId');
|
|
455
457
|
|
|
456
458
|
let domElement;
|
|
457
459
|
|
|
458
460
|
if (inIframe() === true) {
|
|
459
461
|
const ws = getWindowSelf();
|
|
460
|
-
const currentElement = ws.document.getElementById(
|
|
462
|
+
const currentElement = ws.document.getElementById(divId);
|
|
461
463
|
domElement = getElementFromTopWindow(currentElement, ws);
|
|
462
464
|
} else {
|
|
463
|
-
domElement = wt.document.getElementById(
|
|
465
|
+
domElement = wt.document.getElementById(divId);
|
|
464
466
|
}
|
|
465
467
|
|
|
466
468
|
if (!domElement) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
-
import {getGlobal} from '../src/prebidGlobal.js';
|
|
3
2
|
|
|
4
3
|
const BIDDER_CODE = 'addefend';
|
|
5
4
|
|
|
@@ -17,7 +16,7 @@ export const spec = {
|
|
|
17
16
|
},
|
|
18
17
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
19
18
|
let bid = {
|
|
20
|
-
v:
|
|
19
|
+
v: 'v' + '$prebid.version$',
|
|
21
20
|
auctionId: false,
|
|
22
21
|
pageId: false,
|
|
23
22
|
gdpr_applies: bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies ? bidderRequest.gdprConsent.gdprApplies : 'true',
|
package/modules/adfBidAdapter.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
5
5
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
6
|
-
import {deepAccess, deepClone, deepSetValue, mergeDeep, parseSizesInput} from '../src/utils.js';
|
|
6
|
+
import {deepAccess, deepClone, deepSetValue, mergeDeep, parseSizesInput, setOnAny} from '../src/utils.js';
|
|
7
7
|
import {config} from '../src/config.js';
|
|
8
8
|
import {Renderer} from '../src/Renderer.js';
|
|
9
9
|
|
|
@@ -255,15 +255,6 @@ export const spec = {
|
|
|
255
255
|
|
|
256
256
|
registerBidder(spec);
|
|
257
257
|
|
|
258
|
-
function setOnAny(collection, key) {
|
|
259
|
-
for (let i = 0, result; i < collection.length; i++) {
|
|
260
|
-
result = deepAccess(collection[i], key);
|
|
261
|
-
if (result) {
|
|
262
|
-
return result;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
258
|
function flatten(arr) {
|
|
268
259
|
return [].concat(...arr);
|
|
269
260
|
}
|
|
@@ -106,7 +106,7 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
106
106
|
|
|
107
107
|
// buildUrl creates PHP style multi-parameters and includes undefined... (╯°□°)╯ ┻━┻
|
|
108
108
|
const url = buildUrl(mergeDeep(parseUrl(`${API_ORIGIN}/q`), { search: {
|
|
109
|
-
'v':
|
|
109
|
+
'v': 'pbjs-v' + '$prebid.version$',
|
|
110
110
|
'c': config.params.clientid,
|
|
111
111
|
'p': config.params.platformid,
|
|
112
112
|
't': config.params.tagid,
|
|
@@ -252,6 +252,7 @@ export const spec = {
|
|
|
252
252
|
|
|
253
253
|
const bidderConfig = config.getConfig();
|
|
254
254
|
if (bidderConfig.useCookie === false) queryParamsAndValues.push('noCookies=true');
|
|
255
|
+
if (bidderConfig.advertiserTransparency === true) queryParamsAndValues.push('advertiserTransparency=true');
|
|
255
256
|
if (bidderConfig.maxDeals > 0) queryParamsAndValues.push('ds=' + Math.min(bidderConfig.maxDeals, MAXIMUM_DEALS_LIMIT));
|
|
256
257
|
|
|
257
258
|
const bidRequests = {};
|
|
@@ -3,7 +3,6 @@ import { ajax } from '../src/ajax.js';
|
|
|
3
3
|
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
4
4
|
import adapterManager from '../src/adapterManager.js';
|
|
5
5
|
import { EVENTS } from '../src/constants.js';
|
|
6
|
-
import {getGlobal} from '../src/prebidGlobal.js';
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* Analytics adapter from adxcg.com
|
|
@@ -123,7 +122,7 @@ function send (data) {
|
|
|
123
122
|
ats: adxcgAnalyticsAdapter.context.auctionTimestamp,
|
|
124
123
|
aav: adxcgAnalyticsVersion,
|
|
125
124
|
iob: intersectionObserverAvailable(window) ? '1' : '0',
|
|
126
|
-
pbv:
|
|
125
|
+
pbv: '$prebid.version$',
|
|
127
126
|
sz: window.screen.width + 'x' + window.screen.height
|
|
128
127
|
}
|
|
129
128
|
});
|
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
deepSetValue,
|
|
9
9
|
logError,
|
|
10
10
|
mergeDeep,
|
|
11
|
-
|
|
11
|
+
sizeTupleToRtbSize,
|
|
12
|
+
sizesToSizeTuples
|
|
12
13
|
} from '../src/utils.js';
|
|
13
14
|
import { config } from '../src/config.js';
|
|
14
15
|
|
|
@@ -195,13 +196,7 @@ function getImps (validBidRequests, common) {
|
|
|
195
196
|
};
|
|
196
197
|
const bannerParams = deepAccess(bid, 'mediaTypes.banner');
|
|
197
198
|
if (bannerParams && bannerParams.sizes) {
|
|
198
|
-
const
|
|
199
|
-
const format = sizes.map(size => {
|
|
200
|
-
const [width, height] = size.split('x');
|
|
201
|
-
const w = parseInt(width, 10);
|
|
202
|
-
const h = parseInt(height, 10);
|
|
203
|
-
return { w, h };
|
|
204
|
-
});
|
|
199
|
+
const format = sizesToSizeTuples(bannerParams.sizes).map(sizeTupleToRtbSize);
|
|
205
200
|
imp.banner = {
|
|
206
201
|
format
|
|
207
202
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {isArray, setOnAny} from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {BANNER} from '../src/mediaTypes.js';
|
|
4
4
|
|
|
@@ -148,15 +148,6 @@ function getDeviceType() {
|
|
|
148
148
|
return 2; // 'desktop'
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
function setOnAny(collection, key) {
|
|
152
|
-
for (let i = 0, result; i < collection.length; i++) {
|
|
153
|
-
result = deepAccess(collection[i], key);
|
|
154
|
-
if (result) {
|
|
155
|
-
return result;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
151
|
function flatten(arr) {
|
|
161
152
|
return [].concat(...arr);
|
|
162
153
|
}
|