prebid.js 9.3.0 → 9.4.1
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/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/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- 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 +33 -9
- 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/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 +171 -170
- 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/orbidderBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/ozoneBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.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/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/viantOrtbBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/vidazooUtils.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/yahooAdsBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/x-domain/creative.html +1 -1
- package/libraries/processResponse/index.js +12 -0
- package/libraries/vidazooUtils/bidderUtils.js +9 -10
- package/modules/adagioRtdProvider.js +9 -7
- package/modules/adfBidAdapter.js +1 -10
- package/modules/carodaBidAdapter.js +3 -8
- package/modules/codefuelBidAdapter.js +1 -10
- package/modules/cpmstarBidAdapter.js +52 -36
- package/modules/cpmstarBidAdapter.md +1 -4
- 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/illuminBidAdapter.js +9 -304
- package/modules/kueezRtbBidAdapter.js +17 -312
- package/modules/luponmediaBidAdapter.js +4 -10
- package/modules/mgidBidAdapter.js +1 -10
- package/modules/outbrainBidAdapter.js +8 -43
- package/modules/ozoneBidAdapter.js +9 -7
- package/modules/shinezRtbBidAdapter.js +12 -304
- package/modules/tagorasBidAdapter.js +13 -316
- package/modules/twistDigitalBidAdapter.js +9 -422
- package/modules/viantOrtbBidAdapter.js +20 -0
- package/modules/vidazooBidAdapter.js +3 -3
- package/modules/visxBidAdapter.js +27 -29
- package/modules/zeta_global_sspBidAdapter.js +2 -2
- package/package.json +1 -1
- package/src/adRendering.js +29 -2
- package/src/constants.js +2 -0
- package/src/prebid.js +2 -1
- package/src/utils.js +19 -1
- package/test/pages/banner_sync.html +97 -0
- package/test/spec/creative/crossDomainCreative_spec.js +38 -2
- package/test/spec/e2e/banner/basic_banner_ad.spec.js +20 -14
- package/test/spec/libraries/processResponse_spec.js +60 -0
- package/test/spec/modules/adagioRtdProvider_spec.js +12 -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/kueezRtbBidAdapter_spec.js +26 -15
- package/test/spec/modules/outbrainBidAdapter_spec.js +32 -1
- package/test/spec/modules/shinezRtbBidAdapter_spec.js +26 -14
- package/test/spec/modules/tagorasBidAdapter_spec.js +26 -15
- package/test/spec/modules/twistDigitalBidAdapter_spec.js +15 -20
- package/test/spec/modules/viantOrtbBidAdapter_spec.js +87 -6
- package/test/spec/modules/visxBidAdapter_spec.js +180 -0
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +11 -0
- package/test/spec/unit/pbjs_api_spec.js +6 -1
|
@@ -1,338 +1,43 @@
|
|
|
1
|
-
import {_each, deepAccess, parseSizesInput, parseUrl, uniques, isFn} from '../src/utils.js';
|
|
2
1
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
2
|
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
4
3
|
import {getStorageManager} from '../src/storageManager.js';
|
|
5
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
createBuildRequestsFn,
|
|
6
|
+
createInterpretResponseFn,
|
|
7
|
+
createUserSyncGetter,
|
|
8
|
+
isBidRequestValid
|
|
9
|
+
} from '../libraries/vidazooUtils/bidderUtils.js';
|
|
6
10
|
|
|
7
11
|
const GVLID = 1165;
|
|
8
12
|
const DEFAULT_SUB_DOMAIN = 'exchange';
|
|
9
13
|
const BIDDER_CODE = 'kueezrtb';
|
|
10
14
|
const BIDDER_VERSION = '1.0.0';
|
|
11
|
-
const
|
|
12
|
-
const TTL_SECONDS = 60 * 5;
|
|
13
|
-
const UNIQUE_DEAL_ID_EXPIRY = 1000 * 60 * 15;
|
|
14
|
-
const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
15
|
-
|
|
16
|
-
function getTopWindowQueryParams() {
|
|
17
|
-
try {
|
|
18
|
-
const parsedUrl = parseUrl(window.top.document.URL, {decodeSearchAsString: true});
|
|
19
|
-
return parsedUrl.search;
|
|
20
|
-
} catch (e) {
|
|
21
|
-
return '';
|
|
22
|
-
}
|
|
23
|
-
}
|
|
15
|
+
export const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
24
16
|
|
|
25
17
|
export function createDomain(subDomain = DEFAULT_SUB_DOMAIN) {
|
|
26
18
|
return `https://${subDomain}.kueezrtb.com`;
|
|
27
19
|
}
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
return params.cId || params.CID || params.cID || params.CId || params.cid || params.ciD || params.Cid || params.CiD;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function extractPID(params) {
|
|
34
|
-
return params.pId || params.PID || params.pID || params.PId || params.pid || params.piD || params.Pid || params.PiD;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function extractSubDomain(params) {
|
|
38
|
-
return params.subDomain || params.SubDomain || params.Subdomain || params.subdomain || params.SUBDOMAIN || params.subDOMAIN;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function isBidRequestValid(bid) {
|
|
42
|
-
const params = bid.params || {};
|
|
43
|
-
return !!(extractCID(params) && extractPID(params));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
21
|
+
function createUniqueRequestData(hashUrl, bid) {
|
|
47
22
|
const {
|
|
48
|
-
params,
|
|
49
|
-
bidId,
|
|
50
|
-
userId,
|
|
51
|
-
adUnitCode,
|
|
52
|
-
schain,
|
|
53
|
-
mediaTypes,
|
|
54
23
|
auctionId,
|
|
55
24
|
transactionId,
|
|
56
|
-
bidderRequestId,
|
|
57
|
-
bidRequestsCount,
|
|
58
|
-
bidderRequestsCount,
|
|
59
|
-
bidderWinsCount
|
|
60
25
|
} = bid;
|
|
61
|
-
let {bidFloor, ext} = params;
|
|
62
|
-
const hashUrl = hashCode(topWindowUrl);
|
|
63
|
-
const uniqueDealId = getUniqueDealId(hashUrl);
|
|
64
|
-
const cId = extractCID(params);
|
|
65
|
-
const pId = extractPID(params);
|
|
66
|
-
const subDomain = extractSubDomain(params);
|
|
67
|
-
|
|
68
|
-
const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid') || deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', '');
|
|
69
|
-
|
|
70
|
-
if (isFn(bid.getFloor)) {
|
|
71
|
-
const floorInfo = bid.getFloor({
|
|
72
|
-
currency: 'USD',
|
|
73
|
-
mediaType: '*',
|
|
74
|
-
size: '*'
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
if (floorInfo.currency === 'USD') {
|
|
78
|
-
bidFloor = floorInfo.floor;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
26
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
cb: Date.now(),
|
|
86
|
-
bidFloor: bidFloor,
|
|
87
|
-
bidId: bidId,
|
|
88
|
-
referrer: bidderRequest.refererInfo.ref,
|
|
89
|
-
adUnitCode: adUnitCode,
|
|
90
|
-
publisherId: pId,
|
|
91
|
-
sizes: sizes,
|
|
92
|
-
uniqueDealId: uniqueDealId,
|
|
93
|
-
bidderVersion: BIDDER_VERSION,
|
|
94
|
-
prebidVersion: '$prebid.version$',
|
|
95
|
-
res: `${screen.width}x${screen.height}`,
|
|
96
|
-
schain: schain,
|
|
97
|
-
mediaTypes: mediaTypes,
|
|
98
|
-
gpid: gpid,
|
|
99
|
-
// TODO: fix auctionId/transactionId leak: https://github.com/prebid/Prebid.js/issues/9781
|
|
100
|
-
auctionId: auctionId,
|
|
101
|
-
transactionId: transactionId,
|
|
102
|
-
bidderRequestId: bidderRequestId,
|
|
103
|
-
bidRequestsCount: bidRequestsCount,
|
|
104
|
-
bidderRequestsCount: bidderRequestsCount,
|
|
105
|
-
bidderWinsCount: bidderWinsCount,
|
|
106
|
-
bidderTimeout: bidderTimeout
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
appendUserIdsToRequestPayload(data, userId);
|
|
110
|
-
|
|
111
|
-
const sua = deepAccess(bidderRequest, 'ortb2.device.sua');
|
|
112
|
-
|
|
113
|
-
if (sua) {
|
|
114
|
-
data.sua = sua;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (bidderRequest.gdprConsent) {
|
|
118
|
-
if (bidderRequest.gdprConsent.consentString) {
|
|
119
|
-
data.gdprConsent = bidderRequest.gdprConsent.consentString;
|
|
120
|
-
}
|
|
121
|
-
if (bidderRequest.gdprConsent.gdprApplies !== undefined) {
|
|
122
|
-
data.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (bidderRequest.uspConsent) {
|
|
126
|
-
data.usPrivacy = bidderRequest.uspConsent;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (bidderRequest.gppConsent) {
|
|
130
|
-
data.gppString = bidderRequest.gppConsent.gppString;
|
|
131
|
-
data.gppSid = bidderRequest.gppConsent.applicableSections;
|
|
132
|
-
} else if (bidderRequest.ortb2?.regs?.gpp) {
|
|
133
|
-
data.gppString = bidderRequest.ortb2.regs.gpp;
|
|
134
|
-
data.gppSid = bidderRequest.ortb2.regs.gpp_sid;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const dto = {
|
|
138
|
-
method: 'POST',
|
|
139
|
-
url: `${createDomain(subDomain)}/prebid/multi/${cId}`,
|
|
140
|
-
data: data
|
|
27
|
+
return {
|
|
28
|
+
auctionId,
|
|
29
|
+
transactionId,
|
|
141
30
|
};
|
|
142
|
-
|
|
143
|
-
_each(ext, (value, key) => {
|
|
144
|
-
dto.data['ext.' + key] = value;
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
return dto;
|
|
148
31
|
}
|
|
149
32
|
|
|
150
|
-
|
|
151
|
-
let key;
|
|
152
|
-
_each(userIds, (userId, idSystemProviderName) => {
|
|
153
|
-
key = `uid.${idSystemProviderName}`;
|
|
33
|
+
const buildRequests = createBuildRequestsFn(createDomain, createUniqueRequestData, storage, BIDDER_CODE, BIDDER_VERSION, false);
|
|
154
34
|
|
|
155
|
-
|
|
156
|
-
case 'digitrustid':
|
|
157
|
-
payloadRef[key] = deepAccess(userId, 'data.id');
|
|
158
|
-
break;
|
|
159
|
-
case 'lipb':
|
|
160
|
-
payloadRef[key] = userId.lipbid;
|
|
161
|
-
break;
|
|
162
|
-
case 'parrableId':
|
|
163
|
-
payloadRef[key] = userId.eid;
|
|
164
|
-
break;
|
|
165
|
-
case 'id5id':
|
|
166
|
-
payloadRef[key] = userId.uid;
|
|
167
|
-
break;
|
|
168
|
-
default:
|
|
169
|
-
payloadRef[key] = userId;
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}
|
|
35
|
+
const interpretResponse = createInterpretResponseFn(BIDDER_CODE, false);
|
|
173
36
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
validBidRequests.forEach(validBidRequest => {
|
|
179
|
-
const sizes = parseSizesInput(validBidRequest.sizes);
|
|
180
|
-
const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
|
|
181
|
-
requests.push(request);
|
|
182
|
-
});
|
|
183
|
-
return requests;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function interpretResponse(serverResponse, request) {
|
|
187
|
-
if (!serverResponse || !serverResponse.body) {
|
|
188
|
-
return [];
|
|
189
|
-
}
|
|
190
|
-
const {bidId} = request.data;
|
|
191
|
-
const {results} = serverResponse.body;
|
|
192
|
-
|
|
193
|
-
let output = [];
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
results.forEach(result => {
|
|
197
|
-
const {
|
|
198
|
-
creativeId,
|
|
199
|
-
ad,
|
|
200
|
-
price,
|
|
201
|
-
exp,
|
|
202
|
-
width,
|
|
203
|
-
height,
|
|
204
|
-
currency,
|
|
205
|
-
metaData,
|
|
206
|
-
advertiserDomains,
|
|
207
|
-
mediaType = BANNER
|
|
208
|
-
} = result;
|
|
209
|
-
if (!ad || !price) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const response = {
|
|
214
|
-
requestId: bidId,
|
|
215
|
-
cpm: price,
|
|
216
|
-
width: width,
|
|
217
|
-
height: height,
|
|
218
|
-
creativeId: creativeId,
|
|
219
|
-
currency: currency || CURRENCY,
|
|
220
|
-
netRevenue: true,
|
|
221
|
-
ttl: exp || TTL_SECONDS,
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
if (metaData) {
|
|
225
|
-
Object.assign(response, {
|
|
226
|
-
meta: metaData
|
|
227
|
-
})
|
|
228
|
-
} else {
|
|
229
|
-
Object.assign(response, {
|
|
230
|
-
meta: {
|
|
231
|
-
advertiserDomains: advertiserDomains || []
|
|
232
|
-
}
|
|
233
|
-
})
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
if (mediaType === BANNER) {
|
|
237
|
-
Object.assign(response, {
|
|
238
|
-
ad: ad,
|
|
239
|
-
});
|
|
240
|
-
} else {
|
|
241
|
-
Object.assign(response, {
|
|
242
|
-
vastXml: ad,
|
|
243
|
-
mediaType: VIDEO
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
output.push(response);
|
|
247
|
-
});
|
|
248
|
-
return output;
|
|
249
|
-
} catch (e) {
|
|
250
|
-
return [];
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
function getUserSyncs(syncOptions, responses, gdprConsent = {}, uspConsent = '', gppConsent = {}) {
|
|
255
|
-
let syncs = [];
|
|
256
|
-
const {iframeEnabled, pixelEnabled} = syncOptions;
|
|
257
|
-
const {gdprApplies, consentString = ''} = gdprConsent;
|
|
258
|
-
const {gppString, applicableSections} = gppConsent;
|
|
259
|
-
|
|
260
|
-
const cidArr = responses.filter(resp => deepAccess(resp, 'body.cid')).map(resp => resp.body.cid).filter(uniques);
|
|
261
|
-
let params = `?cid=${encodeURIComponent(cidArr.join(','))}&gdpr=${gdprApplies ? 1 : 0}&gdpr_consent=${encodeURIComponent(consentString || '')}&us_privacy=${encodeURIComponent(uspConsent || '')}`
|
|
262
|
-
|
|
263
|
-
if (gppString && applicableSections?.length) {
|
|
264
|
-
params += '&gpp=' + encodeURIComponent(gppString);
|
|
265
|
-
params += '&gpp_sid=' + encodeURIComponent(applicableSections.join(','));
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
if (iframeEnabled) {
|
|
269
|
-
syncs.push({
|
|
270
|
-
type: 'iframe',
|
|
271
|
-
url: `https://sync.kueezrtb.com/api/sync/iframe/${params}`
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
if (pixelEnabled) {
|
|
275
|
-
syncs.push({
|
|
276
|
-
type: 'image',
|
|
277
|
-
url: `https://sync.kueezrtb.com/api/sync/image/${params}`
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
return syncs;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
export function hashCode(s, prefix = '_') {
|
|
284
|
-
const l = s.length;
|
|
285
|
-
let h = 0
|
|
286
|
-
let i = 0;
|
|
287
|
-
if (l > 0) {
|
|
288
|
-
while (i < l) {
|
|
289
|
-
h = (h << 5) - h + s.charCodeAt(i++) | 0;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
return prefix + h;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
export function getUniqueDealId(key, expiry = UNIQUE_DEAL_ID_EXPIRY) {
|
|
296
|
-
const storageKey = `u_${key}`;
|
|
297
|
-
const now = Date.now();
|
|
298
|
-
const data = getStorageItem(storageKey);
|
|
299
|
-
let uniqueId;
|
|
300
|
-
|
|
301
|
-
if (!data || !data.value || now - data.created > expiry) {
|
|
302
|
-
uniqueId = `${key}_${now.toString()}`;
|
|
303
|
-
setStorageItem(storageKey, uniqueId);
|
|
304
|
-
} else {
|
|
305
|
-
uniqueId = data.value;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return uniqueId;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
export function getStorageItem(key) {
|
|
312
|
-
try {
|
|
313
|
-
return tryParseJSON(storage.getDataFromLocalStorage(key));
|
|
314
|
-
} catch (e) {
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
return null;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
export function setStorageItem(key, value, timestamp) {
|
|
321
|
-
try {
|
|
322
|
-
const created = timestamp || Date.now();
|
|
323
|
-
const data = JSON.stringify({value, created});
|
|
324
|
-
storage.setDataInLocalStorage(key, data);
|
|
325
|
-
} catch (e) {
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
export function tryParseJSON(value) {
|
|
330
|
-
try {
|
|
331
|
-
return JSON.parse(value);
|
|
332
|
-
} catch (e) {
|
|
333
|
-
return value;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
37
|
+
const getUserSyncs = createUserSyncGetter({
|
|
38
|
+
iframeSyncUrl: 'https://sync.kueezrtb.com/api/sync/iframe',
|
|
39
|
+
imageSyncUrl: 'https://sync.kueezrtb.com/api/sync/image'
|
|
40
|
+
});
|
|
336
41
|
|
|
337
42
|
export const spec = {
|
|
338
43
|
code: BIDDER_CODE,
|
|
@@ -9,7 +9,9 @@ import {
|
|
|
9
9
|
logError,
|
|
10
10
|
logMessage,
|
|
11
11
|
logWarn,
|
|
12
|
-
parseSizesInput
|
|
12
|
+
parseSizesInput,
|
|
13
|
+
sizeTupleToRtbSize,
|
|
14
|
+
sizesToSizeTuples
|
|
13
15
|
} from '../src/utils.js';
|
|
14
16
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
15
17
|
import {config} from '../src/config.js';
|
|
@@ -271,16 +273,8 @@ function newOrtbBidRequest(bidRequest, bidderRequest, currentImps) {
|
|
|
271
273
|
let bannerSizes = [];
|
|
272
274
|
|
|
273
275
|
if (bannerParams && bannerParams.sizes) {
|
|
274
|
-
const sizes = parseSizesInput(bannerParams.sizes);
|
|
275
|
-
|
|
276
276
|
// get banner sizes in form [{ w: <int>, h: <int> }, ...]
|
|
277
|
-
const format = sizes.map(
|
|
278
|
-
const [ width, height ] = size.split('x');
|
|
279
|
-
const w = parseInt(width, 10);
|
|
280
|
-
const h = parseInt(height, 10);
|
|
281
|
-
return { w, h };
|
|
282
|
-
});
|
|
283
|
-
|
|
277
|
+
const format = sizesToSizeTuples(bannerParams.sizes).map(sizeTupleToRtbSize);
|
|
284
278
|
bannerSizes = format;
|
|
285
279
|
}
|
|
286
280
|
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
isFn,
|
|
13
13
|
isNumber,
|
|
14
14
|
isBoolean,
|
|
15
|
-
isInteger, deepSetValue, getBidIdParameter,
|
|
15
|
+
isInteger, deepSetValue, getBidIdParameter, setOnAny
|
|
16
16
|
} from '../src/utils.js';
|
|
17
17
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
18
18
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
@@ -431,15 +431,6 @@ export const spec = {
|
|
|
431
431
|
|
|
432
432
|
registerBidder(spec);
|
|
433
433
|
|
|
434
|
-
function setOnAny(collection, key) {
|
|
435
|
-
for (let i = 0, result; i < collection.length; i++) {
|
|
436
|
-
result = deepAccess(collection[i], key);
|
|
437
|
-
if (result) {
|
|
438
|
-
return result;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
434
|
/**
|
|
444
435
|
* Unpack the Server's Bid into a Prebid-compatible one.
|
|
445
436
|
* @param serverBid
|
|
@@ -5,7 +5,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
5
5
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
6
6
|
import { getStorageManager } from '../src/storageManager.js';
|
|
7
7
|
import {OUTSTREAM} from '../src/video.js';
|
|
8
|
-
import {_map, deepAccess, deepSetValue,
|
|
8
|
+
import {_map, deepAccess, deepSetValue, logWarn, replaceAuctionPrice, setOnAny, parseGPTSingleSizeArrayToRtbSize} from '../src/utils.js';
|
|
9
9
|
import {ajax} from '../src/ajax.js';
|
|
10
10
|
import {config} from '../src/config.js';
|
|
11
11
|
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
|
|
@@ -94,7 +94,7 @@ export const spec = {
|
|
|
94
94
|
imp.video = getVideoAsset(bid);
|
|
95
95
|
} else {
|
|
96
96
|
imp.banner = {
|
|
97
|
-
format:
|
|
97
|
+
format: bid.sizes?.map((size) => parseGPTSingleSizeArrayToRtbSize(size))
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -111,7 +111,7 @@ export const spec = {
|
|
|
111
111
|
const request = {
|
|
112
112
|
id: bidderRequest.bidderRequestId,
|
|
113
113
|
site: { page, publisher },
|
|
114
|
-
device: { ua },
|
|
114
|
+
device: ortb2?.device || { ua },
|
|
115
115
|
source: { fd: 1 },
|
|
116
116
|
cur: [cur],
|
|
117
117
|
tmax: timeout,
|
|
@@ -174,7 +174,7 @@ export const spec = {
|
|
|
174
174
|
}
|
|
175
175
|
const { seatbid, cur } = serverResponse.body;
|
|
176
176
|
|
|
177
|
-
const bidResponses =
|
|
177
|
+
const bidResponses = seatbid.map(seat => seat.bid).flat().reduce((result, bid) => {
|
|
178
178
|
result[bid.impid - 1] = bid;
|
|
179
179
|
return result;
|
|
180
180
|
}, []);
|
|
@@ -288,19 +288,6 @@ function parseNative(bid) {
|
|
|
288
288
|
return result;
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
function setOnAny(collection, key) {
|
|
292
|
-
for (let i = 0, result; i < collection.length; i++) {
|
|
293
|
-
result = deepAccess(collection[i], key);
|
|
294
|
-
if (result) {
|
|
295
|
-
return result;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
function flatten(arr) {
|
|
301
|
-
return [].concat(...arr);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
291
|
function getNativeAssets(bid) {
|
|
305
292
|
return _map(bid.nativeParams, (bidParams, key) => {
|
|
306
293
|
const props = NATIVE_PARAMS[key];
|
|
@@ -319,7 +306,7 @@ function getNativeAssets(bid) {
|
|
|
319
306
|
}
|
|
320
307
|
|
|
321
308
|
if (bidParams.sizes) {
|
|
322
|
-
const sizes =
|
|
309
|
+
const sizes = bidParams.sizes.flat();
|
|
323
310
|
w = parseInt(sizes[0], 10);
|
|
324
311
|
h = parseInt(sizes[1], 10);
|
|
325
312
|
}
|
|
@@ -339,7 +326,7 @@ function getNativeAssets(bid) {
|
|
|
339
326
|
}
|
|
340
327
|
|
|
341
328
|
function getVideoAsset(bid) {
|
|
342
|
-
const sizes =
|
|
329
|
+
const sizes = bid.mediaTypes.video.playerSize.flat();
|
|
343
330
|
return {
|
|
344
331
|
w: parseInt(sizes[0], 10),
|
|
345
332
|
h: parseInt(sizes[1], 10),
|
|
@@ -354,34 +341,12 @@ function getVideoAsset(bid) {
|
|
|
354
341
|
minduration: bid.mediaTypes.video.minduration,
|
|
355
342
|
maxduration: bid.mediaTypes.video.maxduration,
|
|
356
343
|
startdelay: bid.mediaTypes.video.startdelay,
|
|
357
|
-
placement: bid.mediaTypes.video.
|
|
344
|
+
placement: bid.mediaTypes.video.placement,
|
|
345
|
+
plcmt: bid.mediaTypes.video.plcmt,
|
|
358
346
|
linearity: bid.mediaTypes.video.linearity
|
|
359
347
|
};
|
|
360
348
|
}
|
|
361
349
|
|
|
362
|
-
/* Turn bid request sizes into ut-compatible format */
|
|
363
|
-
function transformSizes(requestSizes) {
|
|
364
|
-
if (!isArray(requestSizes)) {
|
|
365
|
-
return [];
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
if (requestSizes.length === 2 && !isArray(requestSizes[0])) {
|
|
369
|
-
return [{
|
|
370
|
-
w: parseInt(requestSizes[0], 10),
|
|
371
|
-
h: parseInt(requestSizes[1], 10)
|
|
372
|
-
}];
|
|
373
|
-
} else if (isArray(requestSizes[0])) {
|
|
374
|
-
return requestSizes.map(item =>
|
|
375
|
-
({
|
|
376
|
-
w: parseInt(item[0], 10),
|
|
377
|
-
h: parseInt(item[1], 10)
|
|
378
|
-
})
|
|
379
|
-
);
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
return [];
|
|
383
|
-
}
|
|
384
|
-
|
|
385
350
|
function _getFloor(bid, type) {
|
|
386
351
|
const floorInfo = bid.getFloor({
|
|
387
352
|
currency: CURRENCY,
|
|
@@ -22,7 +22,7 @@ const AUCTIONURI = '/openrtb2/auction';
|
|
|
22
22
|
const OZONECOOKIESYNC = '/static/load-cookie.html';
|
|
23
23
|
const OZONE_RENDERER_URL = 'https://prebid.the-ozone-project.com/ozone-renderer.js';
|
|
24
24
|
const ORIGIN_DEV = 'https://test.ozpr.net';
|
|
25
|
-
const OZONEVERSION = '2.9.
|
|
25
|
+
const OZONEVERSION = '2.9.3';
|
|
26
26
|
export const spec = {
|
|
27
27
|
gvlid: 524,
|
|
28
28
|
aliases: [{code: 'lmc', gvlid: 524}, {code: 'venatus', gvlid: 524}],
|
|
@@ -535,7 +535,7 @@ export const spec = {
|
|
|
535
535
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
536
536
|
let thisRequestBid = this.getBidRequestForBidId(sb.bid[j].impid, request.bidderRequest.bids);
|
|
537
537
|
logInfo(`seatbid:${i}, bid:${j} Going to set default w h for seatbid/bidRequest`, sb.bid[j], thisRequestBid);
|
|
538
|
-
|
|
538
|
+
let {defaultWidth, defaultHeight} = defaultSize(thisRequestBid);
|
|
539
539
|
let thisBid = ozoneAddStandardProperties(sb.bid[j], defaultWidth, defaultHeight);
|
|
540
540
|
thisBid.meta = {advertiserDomains: thisBid.adomain || []};
|
|
541
541
|
let videoContext = null;
|
|
@@ -567,8 +567,8 @@ export const spec = {
|
|
|
567
567
|
this.setBidMediaTypeIfNotExist(thisBid, BANNER);
|
|
568
568
|
}
|
|
569
569
|
if (enhancedAdserverTargeting) {
|
|
570
|
-
let allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid);
|
|
571
|
-
logInfo('Going to iterate allBidsForThisBidId', allBidsForThisBidid);
|
|
570
|
+
let allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid, defaultWidth, defaultHeight);
|
|
571
|
+
logInfo('Going to iterate allBidsForThisBidId', deepClone(allBidsForThisBidid));
|
|
572
572
|
Object.keys(allBidsForThisBidid).forEach((bidderName, index, ar2) => {
|
|
573
573
|
logInfo(`adding adserverTargeting for ${bidderName} for bidId ${thisBid.bidId}`);
|
|
574
574
|
adserverTargeting[whitelabelPrefix + '_' + bidderName] = bidderName;
|
|
@@ -606,6 +606,7 @@ export const spec = {
|
|
|
606
606
|
}
|
|
607
607
|
}
|
|
608
608
|
let {seat: winningSeat, bid: winningBid} = ozoneGetWinnerForRequestBid(thisBid.bidId, serverResponse.seatbid);
|
|
609
|
+
winningBid = ozoneAddStandardProperties(winningBid, defaultWidth, defaultHeight);
|
|
609
610
|
adserverTargeting[whitelabelPrefix + '_auc_id'] = String(aucId); // was request.bidderRequest.auctionId
|
|
610
611
|
adserverTargeting[whitelabelPrefix + '_winner'] = String(winningSeat);
|
|
611
612
|
adserverTargeting[whitelabelPrefix + '_bid'] = 'true';
|
|
@@ -899,7 +900,7 @@ export const spec = {
|
|
|
899
900
|
}
|
|
900
901
|
};
|
|
901
902
|
export function injectAdIdsIntoAllBidResponses(seatbid) {
|
|
902
|
-
logInfo('injectAdIdsIntoAllBidResponses', seatbid);
|
|
903
|
+
logInfo('injectAdIdsIntoAllBidResponses', deepClone(seatbid));
|
|
903
904
|
for (let i = 0; i < seatbid.length; i++) {
|
|
904
905
|
let sb = seatbid[i];
|
|
905
906
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
@@ -951,7 +952,7 @@ export function ozoneGetWinnerForRequestBid(requestBidId, serverResponseSeatBid)
|
|
|
951
952
|
}
|
|
952
953
|
return {'seat': winningSeat, 'bid': thisBidWinner};
|
|
953
954
|
}
|
|
954
|
-
export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid) {
|
|
955
|
+
export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid, defaultWidth, defaultHeight) {
|
|
955
956
|
let objBids = {};
|
|
956
957
|
for (let j = 0; j < serverResponseSeatBid.length; j++) {
|
|
957
958
|
let theseBids = serverResponseSeatBid[j].bid;
|
|
@@ -960,10 +961,11 @@ export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid) {
|
|
|
960
961
|
if (theseBids[k].impid === matchBidId) {
|
|
961
962
|
if (objBids.hasOwnProperty(thisSeat)) { // > 1 bid for an adunit from a bidder - only use the one with the highest bid
|
|
962
963
|
if (objBids[thisSeat]['price'] < theseBids[k].price) {
|
|
963
|
-
objBids[thisSeat] = theseBids[k];
|
|
964
|
+
objBids[thisSeat] = ozoneAddStandardProperties(theseBids[k], defaultWidth, defaultHeight);
|
|
964
965
|
}
|
|
965
966
|
} else {
|
|
966
967
|
objBids[thisSeat] = theseBids[k];
|
|
968
|
+
objBids[thisSeat] = ozoneAddStandardProperties(theseBids[k], defaultWidth, defaultHeight);
|
|
967
969
|
}
|
|
968
970
|
}
|
|
969
971
|
}
|