prebid.js 8.2.0 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtelligentBidAdapter.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/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.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/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/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.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/holidBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.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/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.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/mediagoBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +132 -132
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.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/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/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/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trafficgateBidAdapter.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/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.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/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/modules/adagioBidAdapter.js +2 -1
- package/modules/adtelligentBidAdapter.js +8 -0
- package/modules/beopBidAdapter.js +6 -6
- package/modules/beopBidAdapter.md +35 -1
- package/modules/cadentApertureMXBidAdapter.md +2 -2
- package/modules/discoveryBidAdapter.js +1 -1
- package/modules/holidBidAdapter.js +49 -30
- package/modules/ixBidAdapter.js +2 -1
- package/modules/livewrappedAnalyticsAdapter.js +33 -33
- package/modules/mediagoBidAdapter.js +1 -0
- package/modules/smartyadsBidAdapter.js +6 -3
- package/modules/sovrnBidAdapter.js +5 -0
- package/modules/trafficgateBidAdapter.js +126 -72
- package/modules/vidazooBidAdapter.js +68 -16
- package/package.json +1 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +2 -1
- package/test/spec/modules/adtelligentBidAdapter_spec.js +8 -0
- package/test/spec/modules/beopBidAdapter_spec.js +18 -2
- package/test/spec/modules/cadentApertureMXBidAdapter_spec.js +1 -1
- package/test/spec/modules/holidBidAdapter_spec.js +26 -6
- package/test/spec/modules/ixBidAdapter_spec.js +12 -6
- package/test/spec/modules/smartyadsBidAdapter_spec.js +1 -1
- package/test/spec/modules/sovrnBidAdapter_spec.js +34 -0
- package/test/spec/modules/trafficgateBidAdapter_spec.js +1349 -199
- package/test/spec/modules/vidazooBidAdapter_spec.js +131 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {_each, deepAccess, parseSizesInput, parseUrl, uniques,
|
|
1
|
+
import {_each, chunk, deepAccess, isFn, parseSizesInput, parseUrl, uniques, isArray} from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
4
4
|
import {getStorageManager} from '../src/storageManager.js';
|
|
@@ -48,7 +48,7 @@ function isBidRequestValid(bid) {
|
|
|
48
48
|
return !!(extractCID(params) && extractPID(params));
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
function
|
|
51
|
+
function buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
52
52
|
const {
|
|
53
53
|
params,
|
|
54
54
|
bidId,
|
|
@@ -69,9 +69,7 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
|
69
69
|
const dealId = getNextDealId(hashUrl);
|
|
70
70
|
const uniqueDealId = getUniqueDealId(hashUrl);
|
|
71
71
|
const sId = getVidazooSessionId();
|
|
72
|
-
const cId = extractCID(params);
|
|
73
72
|
const pId = extractPID(params);
|
|
74
|
-
const subDomain = extractSubDomain(params);
|
|
75
73
|
const ptrace = getCacheOpt();
|
|
76
74
|
const isStorageAllowed = bidderSettings.get(BIDDER_CODE, 'storageAllowed');
|
|
77
75
|
|
|
@@ -153,17 +151,46 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
|
153
151
|
data.gppSid = bidderRequest.ortb2.regs.gpp_sid;
|
|
154
152
|
}
|
|
155
153
|
|
|
154
|
+
_each(ext, (value, key) => {
|
|
155
|
+
data['ext.' + key] = value;
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
return data;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
|
|
162
|
+
const {params} = bid;
|
|
163
|
+
const cId = extractCID(params);
|
|
164
|
+
const subDomain = extractSubDomain(params);
|
|
165
|
+
const data = buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout);
|
|
156
166
|
const dto = {
|
|
157
167
|
method: 'POST',
|
|
158
168
|
url: `${createDomain(subDomain)}/prebid/multi/${cId}`,
|
|
159
169
|
data: data
|
|
160
170
|
};
|
|
171
|
+
return dto;
|
|
172
|
+
}
|
|
161
173
|
|
|
162
|
-
|
|
163
|
-
|
|
174
|
+
function buildSingleRequest(bidRequests, bidderRequest, topWindowUrl, bidderTimeout) {
|
|
175
|
+
const {params} = bidRequests[0];
|
|
176
|
+
const cId = extractCID(params);
|
|
177
|
+
const subDomain = extractSubDomain(params);
|
|
178
|
+
const data = bidRequests.map(bid => {
|
|
179
|
+
const sizes = parseSizesInput(bid.sizes);
|
|
180
|
+
return buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout)
|
|
181
|
+
});
|
|
182
|
+
const CHUNK_SIZE = Math.min(10, config.getConfig('vidazoo.chunkSize') || 10);
|
|
183
|
+
|
|
184
|
+
const chunkedData = chunk(data, CHUNK_SIZE);
|
|
185
|
+
return chunkedData.map(chunk => {
|
|
186
|
+
return {
|
|
187
|
+
method: 'POST',
|
|
188
|
+
url: `${createDomain(subDomain)}/prebid/multi/${cId}`,
|
|
189
|
+
data: {
|
|
190
|
+
bids: chunk
|
|
191
|
+
}
|
|
192
|
+
};
|
|
164
193
|
});
|
|
165
|
-
|
|
166
|
-
return dto;
|
|
167
194
|
}
|
|
168
195
|
|
|
169
196
|
function appendUserIdsToRequestPayload(payloadRef, userIds) {
|
|
@@ -193,12 +220,33 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
193
220
|
// TODO: does the fallback make sense here?
|
|
194
221
|
const topWindowUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation;
|
|
195
222
|
const bidderTimeout = config.getConfig('bidderTimeout');
|
|
223
|
+
|
|
224
|
+
const singleRequestMode = config.getConfig('vidazoo.singleRequest');
|
|
225
|
+
|
|
196
226
|
const requests = [];
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
227
|
+
|
|
228
|
+
if (singleRequestMode) {
|
|
229
|
+
// We need to split the requests into banner and video requests
|
|
230
|
+
const bannerBidRequests = validBidRequests.filter(bid => isArray(bid.mediaTypes) ? bid.mediaTypes.includes(BANNER) : bid.mediaTypes[BANNER] !== undefined);
|
|
231
|
+
if (bannerBidRequests.length > 0) {
|
|
232
|
+
const singleRequests = buildSingleRequest(bannerBidRequests, bidderRequest, topWindowUrl, bidderTimeout);
|
|
233
|
+
requests.push(...singleRequests);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Video Logic
|
|
237
|
+
const videoBidRequests = validBidRequests.filter(bid => bid.mediaTypes[VIDEO] !== undefined);
|
|
238
|
+
videoBidRequests.forEach(validBidRequest => {
|
|
239
|
+
const sizes = parseSizesInput(validBidRequest.sizes);
|
|
240
|
+
const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
|
|
241
|
+
requests.push(request);
|
|
242
|
+
});
|
|
243
|
+
} else {
|
|
244
|
+
validBidRequests.forEach(validBidRequest => {
|
|
245
|
+
const sizes = parseSizesInput(validBidRequest.sizes);
|
|
246
|
+
const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
|
|
247
|
+
requests.push(request);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
202
250
|
return requests;
|
|
203
251
|
}
|
|
204
252
|
|
|
@@ -206,13 +254,15 @@ function interpretResponse(serverResponse, request) {
|
|
|
206
254
|
if (!serverResponse || !serverResponse.body) {
|
|
207
255
|
return [];
|
|
208
256
|
}
|
|
209
|
-
|
|
257
|
+
|
|
258
|
+
const singleRequestMode = config.getConfig('vidazoo.singleRequest');
|
|
259
|
+
const reqBidId = deepAccess(request, 'data.bidId');
|
|
210
260
|
const {results} = serverResponse.body;
|
|
211
261
|
|
|
212
262
|
let output = [];
|
|
213
263
|
|
|
214
264
|
try {
|
|
215
|
-
results.forEach(result => {
|
|
265
|
+
results.forEach((result, i) => {
|
|
216
266
|
const {
|
|
217
267
|
creativeId,
|
|
218
268
|
ad,
|
|
@@ -221,6 +271,7 @@ function interpretResponse(serverResponse, request) {
|
|
|
221
271
|
width,
|
|
222
272
|
height,
|
|
223
273
|
currency,
|
|
274
|
+
bidId,
|
|
224
275
|
advertiserDomains,
|
|
225
276
|
metaData,
|
|
226
277
|
mediaType = BANNER
|
|
@@ -230,7 +281,7 @@ function interpretResponse(serverResponse, request) {
|
|
|
230
281
|
}
|
|
231
282
|
|
|
232
283
|
const response = {
|
|
233
|
-
requestId: bidId,
|
|
284
|
+
requestId: (singleRequestMode && bidId) ? bidId : reqBidId,
|
|
234
285
|
cpm: price,
|
|
235
286
|
width: width,
|
|
236
287
|
height: height,
|
|
@@ -264,6 +315,7 @@ function interpretResponse(serverResponse, request) {
|
|
|
264
315
|
}
|
|
265
316
|
output.push(response);
|
|
266
317
|
});
|
|
318
|
+
|
|
267
319
|
return output;
|
|
268
320
|
} catch (e) {
|
|
269
321
|
return [];
|
package/package.json
CHANGED
|
@@ -156,6 +156,10 @@ const displayBidderRequestWithConsents = {
|
|
|
156
156
|
gdprApplies: true,
|
|
157
157
|
consentString: 'test'
|
|
158
158
|
},
|
|
159
|
+
gppConsent: {
|
|
160
|
+
gppString: 'abc12345234',
|
|
161
|
+
applicableSections: [7, 8]
|
|
162
|
+
},
|
|
159
163
|
uspConsent: 'iHaveIt'
|
|
160
164
|
};
|
|
161
165
|
|
|
@@ -364,6 +368,10 @@ describe('adtelligentBidAdapter', () => {
|
|
|
364
368
|
expect(bidRequestWithPubSettingsData.GDPR).to.be.equal(1);
|
|
365
369
|
expect(bidRequestWithPubSettingsData.GDPRConsent).to.be.equal(displayBidderRequestWithConsents.gdprConsent.consentString);
|
|
366
370
|
});
|
|
371
|
+
it('sets GPP flags', () => {
|
|
372
|
+
expect(bidRequestWithPubSettingsData.GPP).to.be.equal(displayBidderRequestWithConsents.gppConsent.gppString);
|
|
373
|
+
expect(bidRequestWithPubSettingsData.GPPSid).to.be.equal('7,8');
|
|
374
|
+
});
|
|
367
375
|
it('sets USP', () => {
|
|
368
376
|
expect(bidRequestWithPubSettingsData.USP).to.be.equal(displayBidderRequestWithConsents.uspConsent);
|
|
369
377
|
})
|
|
@@ -130,15 +130,15 @@ describe('BeOp Bid Adapter tests', () => {
|
|
|
130
130
|
expect(payload.url).to.exist;
|
|
131
131
|
// check that the protocol is added correctly
|
|
132
132
|
expect(payload.url).to.equal('http://test.te');
|
|
133
|
-
expect(payload.psegs).to.not.exist;
|
|
134
133
|
});
|
|
135
134
|
|
|
136
|
-
it('should call the endpoint with psegs data if any', function () {
|
|
135
|
+
it('should call the endpoint with psegs and bpsegs (stringified) data if any or [] if none', function () {
|
|
137
136
|
let bidderRequest =
|
|
138
137
|
{
|
|
139
138
|
'ortb2': {
|
|
140
139
|
'user': {
|
|
141
140
|
'ext': {
|
|
141
|
+
'bpsegs': ['axed', 'axec', 1234],
|
|
142
142
|
'data': {
|
|
143
143
|
'permutive': [1234, 5678, 910]
|
|
144
144
|
}
|
|
@@ -154,6 +154,22 @@ describe('BeOp Bid Adapter tests', () => {
|
|
|
154
154
|
expect(payload.psegs).to.include(5678);
|
|
155
155
|
expect(payload.psegs).to.include(910);
|
|
156
156
|
expect(payload.psegs).to.not.include(1);
|
|
157
|
+
expect(payload.bpsegs).to.exist;
|
|
158
|
+
expect(payload.bpsegs).to.include('axed');
|
|
159
|
+
expect(payload.bpsegs).to.include('axec');
|
|
160
|
+
expect(payload.bpsegs).to.include('1234');
|
|
161
|
+
|
|
162
|
+
let bidderRequest2 =
|
|
163
|
+
{
|
|
164
|
+
'ortb2': {}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
const request2 = spec.buildRequests(bidRequests, bidderRequest2);
|
|
168
|
+
const payload2 = JSON.parse(request2.data);
|
|
169
|
+
expect(payload2.psegs).to.exist;
|
|
170
|
+
expect(payload2.psegs).to.be.empty;
|
|
171
|
+
expect(payload2.bpsegs).to.exist;
|
|
172
|
+
expect(payload2.bpsegs).to.be.empty;
|
|
157
173
|
});
|
|
158
174
|
|
|
159
175
|
it('should not prepend the protocol in page url if already present', function () {
|
|
@@ -699,7 +699,7 @@ describe('cadent_aperture_mx Adapter', function () {
|
|
|
699
699
|
|
|
700
700
|
it('should not throw an error when decoding an improperly encoded adm', function () {
|
|
701
701
|
const badAdmServerResponse = utils.deepClone(serverResponse);
|
|
702
|
-
badAdmServerResponse.seatbid[0].bid[0].adm = '<script\\ src\\=\\\"https\\:\\/\\/nym1\\-ib\\.adnxs\\.com\\/ab\\?an_audit\\=0\\&referrer=https%3A%2F%2Fwww.
|
|
702
|
+
badAdmServerResponse.seatbid[0].bid[0].adm = '<script\\ src\\=\\\"https\\:\\/\\/nym1\\-ib\\.adnxs\\.com\\/ab\\?an_audit\\=0\\&referrer=https%3A%2F%2Fwww.cadent.tv%3Ftest%3DhAiE3%VVl%26prebid%3D%25123%25\\&e\\=wqT_3QLPCfBDzwQAAAMA1gAFAQj2iaPtBRCdw\\-qeto72gkEYlNWN2smGoJhTKjYJzGJi83G9KkARzGJi83G9KkAZAAAAgD0KEkAhzGIJGwApESTIMQAAAGBmZu4_MMvWgAc4zApAzApIAlDo\\-YEUWNbsR2AAaIrFCnjOpQWAAQGKAQNVU0SSBQbwQJgB2AWgAVqoAQGwAQC4AQLAAQTIAQLQAQnYAQDgAQDwAQCKAjp1ZignYScsIDI4OTEwMSwgMTU3MTM0MTU1OCk7ARwscicsIDQxOTc1MDE2Nh4A9DQBkgLhAiE3VVlCWndpQmpwOEpFT2o1Z1JRWUFDRFc3RWN3QURnQVFBUkl6QXBReTlhQUIxZ0FZTHdFYUFCd0NuZ0FnQUZFaUFFQWtBRUFtQUVBb0FFQnFBRURzQUVBdVFGS1I2cF9jYjBxUU1FQlNrZXFmM0c5S2tESkFaR1JfRy1UVnRNXzJRRUFBQUFBQUFEd1AtQUJBUFVCQUFBQUFJQUNBSWdDcVlMWEJaQUNBWmdDQUtBQ0FLZ0NBTFVDQUFBQUFMMENBQUFBQU9BQ0FPZ0NBUGdDQUlBREFaZ0RBYWdEZ1k2ZkNib0RDVTVaVFRJNk5ESTRNdUFEOHhQNEE0NnV2Z3lJQkFDUUJBQ1lCQUd5QkFvSXFZTFhCUkNPcnI0TXdRUUFBQUFBQUFBQUFNa0VBQUFBBXgMQURSQgkJLEF3Q0ZBMkFRQThRUQ0SYEFBQVBnRUFJZ0Z1aUUumgKJASE2eElrelE2ZQGgMXV4SElBUW9BREU5Q3RlamNMMHFRRG9KVGxsTk1qbzBNamd5UVBNVFMRWAxQQV9VEQwMQUFBVx0MAFkdDABhHQwAYw0MAaXwi2VBQS7YAqwD4AK30UbqAlxodHRwczovL3d3dy5jZWxlYnV6ei5jb20vZy90YXlsb3Itc3dpZnQtZGVidXRzLXJlZC1oYWlyLWluLXN1Z2FybGFuZC12aWRlby8_YmlkZHJfZGVidWc9dHJ1ZfICEwoPQ1VTVE9NX01PREVMX0lEEgDyAhoKFkNVU1RPERY8TEVBRl9OQU1FEgDyAh4KGjYdAPQqAUFTVF9NT0RJRklFRBIAgAMAiAMBkAMAmAMUoAMBqgMAwAOsAsgDANgDlCHgAwDoAwD4AwOABACSBAkvb3BlbnJ0YjKYBACiBA8xNDQuMTIxLjIzMy4yMzeoBIkWsgQMCAAQABgAIAAwADgAuAQAwAQAyASxgoIB0gQOMTM1NiNOWU0yOjQyODLaBAIIAeAEAPAE6PmBFPoEEgkAAAAAZqdHQBEAAAAgWpRewIgFAZgFAKAF____________AaoFFjQ5MTgxNTcxMzQxNTU2NTI2OTQ5ZTHABQDJBQAAAAAAAPA_0gUJCQAAAAAAAAAA2AUB4AUB8AXW7gr6BQQIABAAkAYAmAYAuAYAwQYAAAAAAADwP8gGANAGwgTaBhYKEAAAAAAAAAAAAAAABQpQEAAYAOAGAfIGAggAgAcBiAcAoAcB\\&s\\=630dbbd55f593c7bfd9e7bccc4dbaa28203daaed\\&pp\\=\\$\\{EMX_MACRO\\}\\\"\\>\\<\\/script\\>';
|
|
703
703
|
badAdmServerResponse.seatbid[1].bid[0].adm = '%3F%%3Dcadent%3C3prebid';
|
|
704
704
|
|
|
705
705
|
assert.doesNotThrow(() => spec.interpretResponse({
|
|
@@ -2,11 +2,14 @@ import { expect } from 'chai'
|
|
|
2
2
|
import { spec } from 'modules/holidBidAdapter.js'
|
|
3
3
|
|
|
4
4
|
describe('holidBidAdapterTests', () => {
|
|
5
|
+
const bidderRequest = {
|
|
6
|
+
bidderRequestId: 'test-id'
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
const bidRequestData = {
|
|
6
10
|
bidder: 'holid',
|
|
7
11
|
adUnitCode: 'test-div',
|
|
8
12
|
bidId: 'bid-id',
|
|
9
|
-
auctionId: 'test-id',
|
|
10
13
|
params: { adUnitID: '12345' },
|
|
11
14
|
mediaTypes: { banner: {} },
|
|
12
15
|
sizes: [[300, 250]],
|
|
@@ -48,18 +51,26 @@ describe('holidBidAdapterTests', () => {
|
|
|
48
51
|
|
|
49
52
|
describe('buildRequests', () => {
|
|
50
53
|
const bid = JSON.parse(JSON.stringify(bidRequestData))
|
|
51
|
-
const request = spec.buildRequests([bid],
|
|
54
|
+
const request = spec.buildRequests([bid], bidderRequest)
|
|
52
55
|
const payload = JSON.parse(request[0].data)
|
|
53
56
|
|
|
57
|
+
it('should include id in request', () => {
|
|
58
|
+
expect(payload.id).to.equal('test-id')
|
|
59
|
+
})
|
|
60
|
+
|
|
54
61
|
it('should include ext in imp', () => {
|
|
55
|
-
expect(payload.imp[0].ext).to.exist
|
|
56
62
|
expect(payload.imp[0].ext).to.deep.equal({
|
|
57
63
|
prebid: { storedrequest: { id: '12345' } },
|
|
58
64
|
})
|
|
59
65
|
})
|
|
60
66
|
|
|
67
|
+
it('should include ext in request', () => {
|
|
68
|
+
expect(payload.ext).to.deep.equal({
|
|
69
|
+
prebid: { storedrequest: { id: '12345' } },
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
|
|
61
73
|
it('should include banner format in imp', () => {
|
|
62
|
-
expect(payload.imp[0].banner).to.exist
|
|
63
74
|
expect(payload.imp[0].banner).to.deep.equal({
|
|
64
75
|
format: [{ w: 300, h: 250 }],
|
|
65
76
|
})
|
|
@@ -146,6 +157,10 @@ describe('holidBidAdapterTests', () => {
|
|
|
146
157
|
}
|
|
147
158
|
const uspConsent = 'mkjvbiniwot4827obfoy8sdg8203gb'
|
|
148
159
|
const expectedUserSyncs = [
|
|
160
|
+
{
|
|
161
|
+
type: 'image',
|
|
162
|
+
url: 'https://track.adform.net/Serving/TrackPoint/?pm=2992097&lid=132720821',
|
|
163
|
+
},
|
|
149
164
|
{
|
|
150
165
|
type: 'iframe',
|
|
151
166
|
url: 'https://null.holid.io/sync.html?bidders=%5B%22test%20seat%201%22%2C%22test%20seat%202%22%5D&gdpr=1&gdpr_consent=dkj49Sjmfjuj34as:12jaf90123hufabidfy9u23brfpoig&usp_consent=mkjvbiniwot4827obfoy8sdg8203gb&type=iframe',
|
|
@@ -162,7 +177,7 @@ describe('holidBidAdapterTests', () => {
|
|
|
162
177
|
expect(userSyncs).to.deep.equal(expectedUserSyncs)
|
|
163
178
|
})
|
|
164
179
|
|
|
165
|
-
it('should return
|
|
180
|
+
it('should return base user syncs when responsetimemillis is not defined', () => {
|
|
166
181
|
const optionsType = {
|
|
167
182
|
iframeEnabled: true,
|
|
168
183
|
pixelEnabled: true,
|
|
@@ -179,7 +194,12 @@ describe('holidBidAdapterTests', () => {
|
|
|
179
194
|
consentString: 'dkj49Sjmfjuj34as:12jaf90123hufabidfy9u23brfpoig',
|
|
180
195
|
}
|
|
181
196
|
const uspConsent = 'mkjvbiniwot4827obfoy8sdg8203gb'
|
|
182
|
-
const expectedUserSyncs = [
|
|
197
|
+
const expectedUserSyncs = [
|
|
198
|
+
{
|
|
199
|
+
type: 'image',
|
|
200
|
+
url: 'https://track.adform.net/Serving/TrackPoint/?pm=2992097&lid=132720821',
|
|
201
|
+
}
|
|
202
|
+
]
|
|
183
203
|
|
|
184
204
|
const userSyncs = spec.getUserSyncs(
|
|
185
205
|
optionsType,
|
|
@@ -759,7 +759,8 @@ describe('IndexexchangeAdapter', function () {
|
|
|
759
759
|
uid2: { id: 'testuid2' }, // UID 2.0
|
|
760
760
|
// similar to uid2, but id5's getValue takes .uid
|
|
761
761
|
id5id: { uid: 'testid5id' }, // ID5
|
|
762
|
-
imuid: 'testimuid'
|
|
762
|
+
imuid: 'testimuid',
|
|
763
|
+
'33acrossId': { envelope: 'v1.5fs.1000.fjdiosmclds' }
|
|
763
764
|
};
|
|
764
765
|
|
|
765
766
|
const DEFAULT_USERIDASEIDS_DATA = createEidsArray(DEFAULT_USERID_DATA);
|
|
@@ -813,7 +814,12 @@ describe('IndexexchangeAdapter', function () {
|
|
|
813
814
|
}, {
|
|
814
815
|
source: 'intimatemerger.com',
|
|
815
816
|
uids: [{
|
|
816
|
-
id: DEFAULT_USERID_DATA.imuid
|
|
817
|
+
id: DEFAULT_USERID_DATA.imuid
|
|
818
|
+
}]
|
|
819
|
+
}, {
|
|
820
|
+
source: '33across.com',
|
|
821
|
+
uids: [{
|
|
822
|
+
id: DEFAULT_USERID_DATA['33acrossId'].envelope
|
|
817
823
|
}]
|
|
818
824
|
}
|
|
819
825
|
];
|
|
@@ -1219,7 +1225,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
1219
1225
|
const payload = extractPayload(request[0]);
|
|
1220
1226
|
expect(request).to.be.an('array');
|
|
1221
1227
|
expect(request).to.have.lengthOf.above(0); // should be 1 or more
|
|
1222
|
-
expect(payload.user.eids).to.have.lengthOf(
|
|
1228
|
+
expect(payload.user.eids).to.have.lengthOf(8);
|
|
1223
1229
|
expect(payload.user.eids).to.deep.include(DEFAULT_USERID_PAYLOAD[0]);
|
|
1224
1230
|
});
|
|
1225
1231
|
});
|
|
@@ -1407,7 +1413,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
1407
1413
|
cloneValidBid[0].userIdAsEids = utils.deepClone(DEFAULT_USERIDASEIDS_DATA);
|
|
1408
1414
|
const request = spec.buildRequests(cloneValidBid, DEFAULT_OPTION)[0];
|
|
1409
1415
|
const payload = extractPayload(request);
|
|
1410
|
-
expect(payload.user.eids).to.have.lengthOf(
|
|
1416
|
+
expect(payload.user.eids).to.have.lengthOf(8);
|
|
1411
1417
|
expect(payload.user.eids).to.have.deep.members(DEFAULT_USERID_PAYLOAD);
|
|
1412
1418
|
});
|
|
1413
1419
|
|
|
@@ -1540,7 +1546,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
1540
1546
|
})
|
|
1541
1547
|
|
|
1542
1548
|
expect(payload.user).to.exist;
|
|
1543
|
-
expect(payload.user.eids).to.have.lengthOf(
|
|
1549
|
+
expect(payload.user.eids).to.have.lengthOf(10);
|
|
1544
1550
|
|
|
1545
1551
|
expect(payload.user.eids).to.have.deep.members(validUserIdPayload);
|
|
1546
1552
|
});
|
|
@@ -1582,7 +1588,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
1582
1588
|
});
|
|
1583
1589
|
|
|
1584
1590
|
const payload = extractPayload(request);
|
|
1585
|
-
expect(payload.user.eids).to.have.lengthOf(
|
|
1591
|
+
expect(payload.user.eids).to.have.lengthOf(9);
|
|
1586
1592
|
expect(payload.user.eids).to.have.deep.members(validUserIdPayload);
|
|
1587
1593
|
});
|
|
1588
1594
|
});
|
|
@@ -243,7 +243,7 @@ describe('SmartyadsAdapter', function () {
|
|
|
243
243
|
});
|
|
244
244
|
});
|
|
245
245
|
describe('getUserSyncs', function () {
|
|
246
|
-
const syncUrl = 'https://as.ck-ie.com/prebidjs?p=7c47322e527cf8bdeb7facc1bb03387a&gdpr=0&gdpr_consent=&type=iframe&us_privacy=';
|
|
246
|
+
const syncUrl = 'https://as.ck-ie.com/prebidjs?p=7c47322e527cf8bdeb7facc1bb03387a&gdpr=0&gdpr_consent=&type=iframe&us_privacy=&gpp=';
|
|
247
247
|
const syncOptions = {
|
|
248
248
|
iframeEnabled: true
|
|
249
249
|
};
|
|
@@ -183,6 +183,40 @@ describe('sovrnBidAdapter', function() {
|
|
|
183
183
|
expect(payload.tmax).to.equal(3000)
|
|
184
184
|
})
|
|
185
185
|
|
|
186
|
+
it('forwards auction level tid', function() {
|
|
187
|
+
const bidderRequest = {
|
|
188
|
+
...baseBidderRequest,
|
|
189
|
+
ortb2: {
|
|
190
|
+
source: {
|
|
191
|
+
tid: '1d1a030790a475'
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
bids: [baseBidRequest]
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const payload = JSON.parse(spec.buildRequests([baseBidRequest], bidderRequest).data)
|
|
198
|
+
expect(payload.source?.tid).to.equal('1d1a030790a475')
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
it('forwards impression level tid', function() {
|
|
202
|
+
const bidRequest = {
|
|
203
|
+
...baseBidRequest,
|
|
204
|
+
ortb2Imp: {
|
|
205
|
+
ext: {
|
|
206
|
+
tid: '1a2c032473f4983'
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const bidderRequest = {
|
|
212
|
+
...baseBidderRequest,
|
|
213
|
+
bids: [bidRequest]
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const payload = JSON.parse(spec.buildRequests([bidRequest], bidderRequest).data)
|
|
217
|
+
expect(payload.imp[0]?.ext?.tid).to.equal('1a2c032473f4983')
|
|
218
|
+
})
|
|
219
|
+
|
|
186
220
|
it('includes the ad unit code in the request', function() {
|
|
187
221
|
const impression = payload.imp[0]
|
|
188
222
|
expect(impression.adunitcode).to.equal('adunit-code')
|