prebid.js 7.52.0 → 7.53.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/1plusXRtdProvider.js +1 -1
- 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/adkernelBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/airgridRtdProvider.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/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/conceptxBidAdapter.js +1 -0
- 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/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -0
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freepassIdSystem.js +1 -0
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.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/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/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/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.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/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 +146 -142
- 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/pairIdSystem.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/proxistoreBidAdapter.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/richaudienceBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/schain.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/sirdataRtdProvider.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stroeerCoreBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/uid2IdSystem_shared.js +1 -0
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/viouslyBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.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/userId_example.html +20 -6
- package/modules/.submodules.json +3 -1
- package/modules/1plusXRtdProvider.js +31 -60
- package/modules/adagioBidAdapter.js +86 -24
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/airgridRtdProvider.js +11 -12
- package/modules/asoBidAdapter.js +2 -1
- package/modules/beopBidAdapter.js +6 -0
- package/modules/conceptxBidAdapter.js +70 -0
- package/modules/conceptxBidAdapter.md +36 -0
- package/modules/criteoBidAdapter.js +9 -2
- package/modules/eskimiBidAdapter.js +171 -41
- package/modules/eskimiBidAdapter.md +35 -16
- package/modules/euidIdSystem.js +121 -0
- package/modules/euidIdSystem.md +131 -0
- package/modules/freepassIdSystem.js +61 -0
- package/modules/freepassIdSystem.md +47 -0
- package/modules/greenbidsAnalyticsAdapter.js +1 -1
- package/modules/id5IdSystem.js +3 -5
- package/modules/ixBidAdapter.js +12 -1
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/logicadBidAdapter.js +14 -1
- package/modules/mediasquareBidAdapter.js +13 -5
- package/modules/nexx360BidAdapter.js +1 -0
- package/modules/pairIdSystem.js +10 -5
- package/modules/proxistoreBidAdapter.js +11 -14
- package/modules/richaudienceBidAdapter.js +10 -1
- package/modules/riseBidAdapter.js +1 -1
- package/modules/schain.js +2 -2
- package/modules/sirdataRtdProvider.js +73 -146
- package/modules/sovrnBidAdapter.js +4 -1
- package/modules/stroeerCoreBidAdapter.js +55 -6
- package/modules/uid2IdSystem.js +27 -210
- package/modules/uid2IdSystem.md +104 -23
- package/modules/uid2IdSystem_shared.js +232 -0
- package/modules/userId/eids.js +8 -0
- package/modules/userId/userId.md +2 -1
- package/modules/viouslyBidAdapter.js +2 -2
- package/modules/weboramaRtdProvider.js +25 -95
- package/modules/weboramaRtdProvider.md +4 -4
- package/modules/yieldlabBidAdapter.js +23 -14
- package/modules/zeta_global_sspBidAdapter.js +27 -22
- package/package.json +1 -1
- package/src/adloader.js +1 -0
- package/test/spec/modules/1plusXRtdProvider_spec.js +98 -149
- package/test/spec/modules/adagioBidAdapter_spec.js +46 -17
- package/test/spec/modules/airgridRtdProvider_spec.js +2 -0
- package/test/spec/modules/beopBidAdapter_spec.js +24 -0
- package/test/spec/modules/conceptxBidAdapter_spec.js +136 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +1 -1
- package/test/spec/modules/eids_spec.js +15 -0
- package/test/spec/modules/eskimiBidAdapter_spec.js +264 -112
- package/test/spec/modules/euidIdSystem_spec.js +130 -0
- package/test/spec/modules/freepassIdSystem_spec.js +186 -0
- package/test/spec/modules/id5IdSystem_spec.js +10 -3
- package/test/spec/modules/ixBidAdapter_spec.js +30 -0
- package/test/spec/modules/logicadBidAdapter_spec.js +122 -2
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -0
- package/test/spec/modules/richaudienceBidAdapter_spec.js +44 -0
- package/test/spec/modules/schain_spec.js +9 -0
- package/test/spec/modules/sirdataRtdProvider_spec.js +110 -17
- package/test/spec/modules/sovrnBidAdapter_spec.js +13 -0
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +151 -6
- package/test/spec/modules/uid2IdSystem_helpers.js +70 -0
- package/test/spec/modules/uid2IdSystem_spec.js +131 -86
- package/test/spec/modules/userId_spec.js +16 -12
- package/test/spec/modules/weboramaRtdProvider_spec.js +331 -205
- package/test/spec/modules/yieldlabBidAdapter_spec.js +42 -2
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +200 -4
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
1
2
|
import { config } from 'src/config';
|
|
2
3
|
import {
|
|
3
4
|
onePlusXSubmodule,
|
|
4
|
-
segtaxes,
|
|
5
|
-
extractConfig,
|
|
6
5
|
buildOrtb2Updates,
|
|
7
|
-
|
|
8
|
-
setTargetingDataToConfig,
|
|
6
|
+
extractConfig,
|
|
9
7
|
extractConsent,
|
|
10
|
-
|
|
8
|
+
extractFpid,
|
|
9
|
+
getPapiUrl,
|
|
10
|
+
segtaxes,
|
|
11
|
+
setTargetingDataToConfig,
|
|
12
|
+
updateBidderConfig,
|
|
11
13
|
} from 'modules/1plusXRtdProvider';
|
|
12
|
-
import assert from 'assert';
|
|
13
|
-
import { extractFpid } from '../../../modules/1plusXRtdProvider';
|
|
14
14
|
|
|
15
15
|
describe('1plusXRtdProvider', () => {
|
|
16
16
|
// Fake server config
|
|
@@ -35,47 +35,37 @@ describe('1plusXRtdProvider', () => {
|
|
|
35
35
|
|
|
36
36
|
// Bidder configs
|
|
37
37
|
const bidderConfigInitial = {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
site: { ext: {} }
|
|
41
|
-
}
|
|
38
|
+
user: { keywords: '' },
|
|
39
|
+
site: { ext: {} }
|
|
42
40
|
}
|
|
43
41
|
const bidderConfigInitialWith1plusXUserData = {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
site: { content: { data: [] } }
|
|
49
|
-
}
|
|
42
|
+
user: {
|
|
43
|
+
data: [{ name: '1plusX.com', segment: [{ id: 'initial' }] }]
|
|
44
|
+
},
|
|
45
|
+
site: { content: { data: [] } }
|
|
50
46
|
}
|
|
51
47
|
const bidderConfigInitialWithUserData = {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
site: { content: { data: [] } }
|
|
57
|
-
}
|
|
48
|
+
user: {
|
|
49
|
+
data: [{ name: 'hello.world', segment: [{ id: 'initial' }] }]
|
|
50
|
+
},
|
|
51
|
+
site: { content: { data: [] } }
|
|
58
52
|
}
|
|
59
53
|
const bidderConfigInitialWith1plusXSiteContent = {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
},
|
|
54
|
+
user: { data: [] },
|
|
55
|
+
site: {
|
|
56
|
+
content: {
|
|
57
|
+
data: [{
|
|
58
|
+
name: '1plusX.com', segment: [{ id: 'initial' }], ext: { segtax: 525 }
|
|
59
|
+
}]
|
|
60
|
+
}
|
|
69
61
|
}
|
|
70
62
|
}
|
|
71
63
|
const bidderConfigInitialWithSiteContent = {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
},
|
|
64
|
+
user: { data: [] },
|
|
65
|
+
site: {
|
|
66
|
+
content: {
|
|
67
|
+
data: [{ name: 'hello.world', segment: [{ id: 'initial' }] }]
|
|
68
|
+
}
|
|
79
69
|
}
|
|
80
70
|
}
|
|
81
71
|
// Util functions
|
|
@@ -178,7 +168,7 @@ describe('1plusXRtdProvider', () => {
|
|
|
178
168
|
})
|
|
179
169
|
|
|
180
170
|
describe('buildOrtb2Updates', () => {
|
|
181
|
-
it('fills site.content.data
|
|
171
|
+
it('fills site.content.data, user.data & site.keywords in the ortb2 config', () => {
|
|
182
172
|
const rtdData = { segments: fakeResponse.s, topics: fakeResponse.t };
|
|
183
173
|
const ortb2Updates = buildOrtb2Updates(rtdData, randomBidder());
|
|
184
174
|
|
|
@@ -191,18 +181,8 @@ describe('1plusXRtdProvider', () => {
|
|
|
191
181
|
userData: {
|
|
192
182
|
name: '1plusX.com',
|
|
193
183
|
segment: rtdData.segments.map((segmentId) => ({ id: segmentId }))
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
expect([ortb2Updates]).to.deep.include.members([expectedOutput]);
|
|
197
|
-
});
|
|
198
|
-
it('fills site.keywords in the ortb2 config (appnexus specific)', () => {
|
|
199
|
-
const rtdData = { segments: fakeResponse.s, topics: fakeResponse.t };
|
|
200
|
-
const ortb2Updates = buildOrtb2Updates(rtdData, 'appnexus');
|
|
201
|
-
|
|
202
|
-
const expectedOutput = {
|
|
203
|
-
site: {
|
|
204
|
-
keywords: rtdData.topics.join(','),
|
|
205
|
-
}
|
|
184
|
+
},
|
|
185
|
+
siteKeywords: rtdData.topics.map(topic => `1plusX=${topic}`).join(','),
|
|
206
186
|
}
|
|
207
187
|
expect([ortb2Updates]).to.deep.include.members([expectedOutput]);
|
|
208
188
|
});
|
|
@@ -220,7 +200,8 @@ describe('1plusXRtdProvider', () => {
|
|
|
220
200
|
userData: {
|
|
221
201
|
name: '1plusX.com',
|
|
222
202
|
segment: []
|
|
223
|
-
}
|
|
203
|
+
},
|
|
204
|
+
siteKeywords: rtdData.topics.map(topic => `1plusX=${topic}`).join(','),
|
|
224
205
|
}
|
|
225
206
|
expect(ortb2Updates).to.deep.include(expectedOutput);
|
|
226
207
|
})
|
|
@@ -238,20 +219,10 @@ describe('1plusXRtdProvider', () => {
|
|
|
238
219
|
userData: {
|
|
239
220
|
name: '1plusX.com',
|
|
240
221
|
segment: rtdData.segments.map((segmentId) => ({ id: segmentId }))
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
expect(ortb2Updates).to.deep.include(expectedOutput);
|
|
244
|
-
})
|
|
245
|
-
it('defaults to empty string if no topic is given (appnexus specific)', () => {
|
|
246
|
-
const rtdData = { segments: fakeResponse.s };
|
|
247
|
-
const ortb2Updates = buildOrtb2Updates(rtdData, 'appnexus');
|
|
248
|
-
|
|
249
|
-
const expectedOutput = {
|
|
250
|
-
site: {
|
|
251
|
-
keywords: '',
|
|
252
|
-
}
|
|
222
|
+
},
|
|
223
|
+
siteKeywords: '',
|
|
253
224
|
}
|
|
254
|
-
expect(ortb2Updates).to.deep.include(expectedOutput);
|
|
225
|
+
expect(ortb2Updates, `${JSON.stringify(ortb2Updates, null, 2)}`).to.deep.include(expectedOutput);
|
|
255
226
|
})
|
|
256
227
|
})
|
|
257
228
|
|
|
@@ -271,6 +242,7 @@ describe('1plusXRtdProvider', () => {
|
|
|
271
242
|
expect(expectedOutput).to.deep.include(output)
|
|
272
243
|
expect(output).to.deep.include(expectedOutput)
|
|
273
244
|
})
|
|
245
|
+
|
|
274
246
|
it('extracts null if consent object is empty', () => {
|
|
275
247
|
const consent1 = {}
|
|
276
248
|
expect(extractConsent(consent1)).to.equal(null)
|
|
@@ -345,15 +317,6 @@ describe('1plusXRtdProvider', () => {
|
|
|
345
317
|
})
|
|
346
318
|
|
|
347
319
|
describe('updateBidderConfig', () => {
|
|
348
|
-
const ortb2UpdatesAppNexus = {
|
|
349
|
-
site: {
|
|
350
|
-
keywords: fakeResponse.t.join(','),
|
|
351
|
-
},
|
|
352
|
-
userData: {
|
|
353
|
-
name: '1plusX.com',
|
|
354
|
-
segment: fakeResponse.s.map((segmentId) => ({ id: segmentId }))
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
320
|
const ortb2Updates = {
|
|
358
321
|
siteContentData: {
|
|
359
322
|
name: '1plusX.com',
|
|
@@ -363,114 +326,98 @@ describe('1plusXRtdProvider', () => {
|
|
|
363
326
|
userData: {
|
|
364
327
|
name: '1plusX.com',
|
|
365
328
|
segment: fakeResponse.s.map((segmentId) => ({ id: segmentId }))
|
|
366
|
-
}
|
|
329
|
+
},
|
|
330
|
+
siteKeywords: fakeResponse.t.map(topic => `1plusX=${topic}`).join(','),
|
|
367
331
|
}
|
|
368
332
|
|
|
369
333
|
it('merges fetched data in bidderConfig for configured bidders', () => {
|
|
370
|
-
const bidder = randomBidder();
|
|
371
|
-
// Set initial config
|
|
372
|
-
config.setBidderConfig({
|
|
373
|
-
bidders: [bidder],
|
|
374
|
-
config: bidderConfigInitial
|
|
375
|
-
});
|
|
376
|
-
// Call submodule's setBidderConfig
|
|
377
|
-
const newBidderConfig = updateBidderConfig(bidder, ortb2Updates, config.getBidderConfig());
|
|
378
|
-
// Check that the targeting data has been set in the config
|
|
379
|
-
expect(newBidderConfig).not.to.be.null;
|
|
380
|
-
expect(newBidderConfig.ortb2.site.content.data).to.deep.include(ortb2Updates.siteContentData);
|
|
381
|
-
expect(newBidderConfig.ortb2.user.data).to.deep.include(ortb2Updates.userData);
|
|
382
|
-
// Check that existing config didn't get erased
|
|
383
|
-
expect(newBidderConfig.ortb2.site).to.deep.include(bidderConfigInitial.ortb2.site);
|
|
384
|
-
expect(newBidderConfig.ortb2.user).to.deep.include(bidderConfigInitial.ortb2.user);
|
|
385
|
-
})
|
|
386
|
-
|
|
387
|
-
it('merges fetched data in bidderConfig for configured bidders (appnexus specific)', () => {
|
|
388
|
-
const bidder = 'appnexus';
|
|
389
334
|
// Set initial config
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
config: bidderConfigInitial
|
|
393
|
-
});
|
|
335
|
+
const bidder = randomBidder();
|
|
336
|
+
const ortb2Fragments = { [bidder]: { ...bidderConfigInitial } }
|
|
394
337
|
// Call submodule's setBidderConfig
|
|
395
|
-
|
|
396
|
-
|
|
338
|
+
updateBidderConfig(bidder, ortb2Updates, ortb2Fragments);
|
|
339
|
+
const newBidderConfig = ortb2Fragments[bidder];
|
|
397
340
|
// Check that the targeting data has been set in the config
|
|
398
|
-
expect(newBidderConfig).not.to.be.null;
|
|
399
|
-
expect(newBidderConfig.
|
|
341
|
+
expect(newBidderConfig).not.to.be.null.and.not.to.be.undefined;
|
|
342
|
+
expect(newBidderConfig.user).not.to.be.null.and.not.to.be.undefined;
|
|
343
|
+
expect(newBidderConfig.site).not.to.be.null.and.not.to.be.undefined;
|
|
344
|
+
expect(newBidderConfig.user.data).to.deep.include(ortb2Updates.userData);
|
|
345
|
+
expect(newBidderConfig.site.keywords).to.deep.include(ortb2Updates.siteKeywords);
|
|
346
|
+
expect(newBidderConfig.site.content.data).to.deep.include(ortb2Updates.siteContentData);
|
|
400
347
|
// Check that existing config didn't get erased
|
|
401
|
-
expect(newBidderConfig.
|
|
402
|
-
expect(newBidderConfig.
|
|
348
|
+
expect(newBidderConfig.site).to.deep.include(bidderConfigInitial.site);
|
|
349
|
+
expect(newBidderConfig.user).to.deep.include(bidderConfigInitial.user);
|
|
403
350
|
})
|
|
404
351
|
|
|
405
352
|
it('overwrites an existing 1plus.com entry in ortb2.user.data', () => {
|
|
406
|
-
const bidder = randomBidder();
|
|
407
353
|
// Set initial config
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
config: bidderConfigInitialWith1plusXUserData
|
|
411
|
-
});
|
|
354
|
+
const bidder = randomBidder();
|
|
355
|
+
const ortb2Fragments = { [bidder]: { ...bidderConfigInitialWith1plusXUserData } }
|
|
412
356
|
// Save previous user.data entry
|
|
413
|
-
const previousUserData = bidderConfigInitialWith1plusXUserData.
|
|
357
|
+
const previousUserData = bidderConfigInitialWith1plusXUserData.user.data[0];
|
|
414
358
|
// Call submodule's setBidderConfig
|
|
415
|
-
|
|
359
|
+
updateBidderConfig(bidder, ortb2Updates, ortb2Fragments);
|
|
360
|
+
const newBidderConfig = ortb2Fragments[bidder];
|
|
416
361
|
// Check that the targeting data has been set in the config
|
|
417
362
|
expect(newBidderConfig).not.to.be.null;
|
|
418
|
-
expect(newBidderConfig.
|
|
419
|
-
expect(newBidderConfig.
|
|
363
|
+
expect(newBidderConfig.site).not.to.be.null;
|
|
364
|
+
expect(newBidderConfig.user).not.to.be.null;
|
|
365
|
+
expect(newBidderConfig.user.data).to.deep.include(ortb2Updates.userData);
|
|
366
|
+
expect(newBidderConfig.user.data).not.to.include(previousUserData);
|
|
420
367
|
})
|
|
421
368
|
it("doesn't overwrite entries in ortb2.user.data that aren't 1plusx.com", () => {
|
|
422
|
-
const bidder = randomBidder();
|
|
423
369
|
// Set initial config
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
config: bidderConfigInitialWithUserData
|
|
427
|
-
});
|
|
370
|
+
const bidder = randomBidder();
|
|
371
|
+
const ortb2Fragments = { [bidder]: { ...bidderConfigInitialWithUserData } }
|
|
428
372
|
// Save previous user.data entry
|
|
429
|
-
const previousUserData = bidderConfigInitialWithUserData.
|
|
373
|
+
const previousUserData = bidderConfigInitialWithUserData.user.data[0];
|
|
430
374
|
// Call submodule's setBidderConfig
|
|
431
|
-
|
|
375
|
+
updateBidderConfig(bidder, ortb2Updates, ortb2Fragments);
|
|
376
|
+
const newBidderConfig = ortb2Fragments[bidder];
|
|
432
377
|
// Check that the targeting data has been set in the config
|
|
433
378
|
expect(newBidderConfig).not.to.be.null;
|
|
434
|
-
expect(newBidderConfig.
|
|
435
|
-
expect(newBidderConfig.
|
|
379
|
+
expect(newBidderConfig.site).not.to.be.null;
|
|
380
|
+
expect(newBidderConfig.user).not.to.be.null;
|
|
381
|
+
expect(newBidderConfig.user.data).to.deep.include(ortb2Updates.userData);
|
|
382
|
+
expect(newBidderConfig.user.data).to.deep.include(previousUserData);
|
|
436
383
|
})
|
|
437
384
|
|
|
438
385
|
it('overwrites an existing 1plus.com entry in ortb2.site.content.data', () => {
|
|
439
|
-
const bidder = randomBidder();
|
|
440
386
|
// Set initial config
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
config: bidderConfigInitialWith1plusXSiteContent
|
|
444
|
-
});
|
|
387
|
+
const bidder = randomBidder();
|
|
388
|
+
const ortb2Fragments = { [bidder]: { ...bidderConfigInitialWith1plusXSiteContent } }
|
|
445
389
|
// Save previous user.data entry
|
|
446
|
-
const previousSiteContent = bidderConfigInitialWith1plusXSiteContent.
|
|
390
|
+
const previousSiteContent = bidderConfigInitialWith1plusXSiteContent.site.content.data[0];
|
|
447
391
|
// Call submodule's setBidderConfig
|
|
448
|
-
|
|
392
|
+
updateBidderConfig(bidder, ortb2Updates, ortb2Fragments);
|
|
393
|
+
const newBidderConfig = ortb2Fragments[bidder];
|
|
449
394
|
// Check that the targeting data has been set in the config
|
|
450
395
|
expect(newBidderConfig).not.to.be.null;
|
|
451
|
-
expect(newBidderConfig.
|
|
452
|
-
expect(newBidderConfig.
|
|
396
|
+
expect(newBidderConfig.site).not.to.be.null;
|
|
397
|
+
expect(newBidderConfig.user).not.to.be.null;
|
|
398
|
+
expect(newBidderConfig.site.content.data).to.deep.include(ortb2Updates.siteContentData);
|
|
399
|
+
expect(newBidderConfig.site.content.data).not.to.include(previousSiteContent);
|
|
453
400
|
})
|
|
454
401
|
it("doesn't overwrite entries in ortb2.site.content.data that aren't 1plusx.com", () => {
|
|
455
|
-
const bidder = randomBidder();
|
|
456
402
|
// Set initial config
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
config: bidderConfigInitialWithSiteContent
|
|
460
|
-
});
|
|
403
|
+
const bidder = randomBidder();
|
|
404
|
+
const ortb2Fragments = { [bidder]: { ...bidderConfigInitialWithSiteContent } }
|
|
461
405
|
// Save previous user.data entry
|
|
462
|
-
const previousSiteContent = bidderConfigInitialWithSiteContent.
|
|
406
|
+
const previousSiteContent = bidderConfigInitialWithSiteContent.site.content.data[0];
|
|
463
407
|
// Call submodule's setBidderConfig
|
|
464
|
-
|
|
408
|
+
updateBidderConfig(bidder, ortb2Updates, ortb2Fragments);
|
|
409
|
+
const newBidderConfig = ortb2Fragments[bidder];
|
|
465
410
|
// Check that the targeting data has been set in the config
|
|
466
411
|
expect(newBidderConfig).not.to.be.null;
|
|
467
|
-
expect(newBidderConfig.
|
|
468
|
-
expect(newBidderConfig.
|
|
412
|
+
expect(newBidderConfig.site).not.to.be.null;
|
|
413
|
+
expect(newBidderConfig.user).not.to.be.null;
|
|
414
|
+
expect(newBidderConfig.site.content.data).to.deep.include(ortb2Updates.siteContentData);
|
|
415
|
+
expect(newBidderConfig.site.content.data).to.deep.include(previousSiteContent);
|
|
469
416
|
})
|
|
470
417
|
})
|
|
471
418
|
|
|
472
419
|
describe('setTargetingDataToConfig', () => {
|
|
473
|
-
const expectedKeywords = fakeResponse.t.join(',');
|
|
420
|
+
const expectedKeywords = fakeResponse.t.map(topic => `1plusX=${topic}`).join(',');
|
|
474
421
|
const expectedSiteContentObj = {
|
|
475
422
|
data: [{
|
|
476
423
|
name: '1plusX.com',
|
|
@@ -486,10 +433,11 @@ describe('1plusXRtdProvider', () => {
|
|
|
486
433
|
}
|
|
487
434
|
const expectedOrtb2 = {
|
|
488
435
|
appnexus: {
|
|
489
|
-
site: { keywords: expectedKeywords }
|
|
436
|
+
site: { content: expectedSiteContentObj, keywords: expectedKeywords },
|
|
437
|
+
user: expectedUserObj
|
|
490
438
|
},
|
|
491
439
|
rubicon: {
|
|
492
|
-
site: { content: expectedSiteContentObj },
|
|
440
|
+
site: { content: expectedSiteContentObj, keywords: expectedKeywords },
|
|
493
441
|
user: expectedUserObj
|
|
494
442
|
}
|
|
495
443
|
}
|
|
@@ -501,22 +449,23 @@ describe('1plusXRtdProvider', () => {
|
|
|
501
449
|
bidders,
|
|
502
450
|
config: bidderConfigInitial
|
|
503
451
|
})
|
|
452
|
+
const biddersOrtb2 = config.getBidderConfig();
|
|
504
453
|
// call setTargetingDataToConfig
|
|
505
|
-
setTargetingDataToConfig(fakeResponse, { bidders });
|
|
454
|
+
setTargetingDataToConfig(fakeResponse, { bidders, biddersOrtb2 });
|
|
506
455
|
|
|
507
456
|
// Check that the targeting data has been set in both configs
|
|
508
457
|
for (const bidder of bidders) {
|
|
509
458
|
const newConfig = config.getBidderConfig()[bidder];
|
|
510
459
|
// Check that we got what we expect
|
|
511
460
|
const expectedConfErr = (prop) => `New config for ${bidder} doesn't comply with expected at ${prop}`;
|
|
512
|
-
expect(newConfig.
|
|
461
|
+
expect(newConfig.site, expectedConfErr('site')).to.deep.include(expectedOrtb2[bidder].site);
|
|
513
462
|
if (expectedOrtb2[bidder].user) {
|
|
514
|
-
expect(newConfig.
|
|
463
|
+
expect(newConfig.user, expectedConfErr('user')).to.deep.include(expectedOrtb2[bidder].user);
|
|
515
464
|
}
|
|
516
465
|
// Check that existing config didn't get erased
|
|
517
466
|
const existingConfErr = (prop) => `Existing config for ${bidder} got unlawfully overwritten at ${prop}`;
|
|
518
|
-
expect(newConfig.
|
|
519
|
-
expect(newConfig.
|
|
467
|
+
expect(newConfig.site, existingConfErr('site')).to.deep.include(bidderConfigInitial.site);
|
|
468
|
+
expect(newConfig.user, existingConfErr('user')).to.deep.include(bidderConfigInitial.user);
|
|
520
469
|
}
|
|
521
470
|
})
|
|
522
471
|
})
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
spec,
|
|
10
10
|
ENDPOINT,
|
|
11
11
|
VERSION,
|
|
12
|
-
|
|
12
|
+
BB_RENDERER_URL,
|
|
13
13
|
GlobalExchange
|
|
14
14
|
} from '../../../modules/adagioBidAdapter.js';
|
|
15
15
|
import { loadExternalScript } from '../../../src/adloader.js';
|
|
@@ -76,6 +76,7 @@ describe('Adagio bid adapter', () => {
|
|
|
76
76
|
let adagioMock;
|
|
77
77
|
let utilsMock;
|
|
78
78
|
let sandbox;
|
|
79
|
+
let fakeRenderer;
|
|
79
80
|
|
|
80
81
|
const fixtures = {
|
|
81
82
|
getElementById(width, height, x, y) {
|
|
@@ -1000,42 +1001,70 @@ describe('Adagio bid adapter', () => {
|
|
|
1000
1001
|
context: 'outstream',
|
|
1001
1002
|
playerSize: [[300, 250]],
|
|
1002
1003
|
mimes: ['video/mp4'],
|
|
1003
|
-
skip:
|
|
1004
|
+
skip: 1,
|
|
1005
|
+
skipafter: 3
|
|
1004
1006
|
};
|
|
1005
1007
|
|
|
1006
1008
|
const serverResponseWithOutstream = utils.deepClone(serverResponse);
|
|
1007
1009
|
serverResponseWithOutstream.body.bids[0].vastXml = '<VAST version="4.0"><Ad></Ad></VAST>';
|
|
1008
1010
|
serverResponseWithOutstream.body.bids[0].mediaType = 'video';
|
|
1009
|
-
serverResponseWithOutstream.body.bids[0].outstream = {
|
|
1010
|
-
bvwUrl: 'https://foo.baz',
|
|
1011
|
-
impUrl: 'https://foo.bar'
|
|
1012
|
-
};
|
|
1013
1011
|
|
|
1014
|
-
|
|
1012
|
+
const defaultRendererUrl = BB_RENDERER_URL.replace('$RENDERER', 'renderer');
|
|
1013
|
+
|
|
1014
|
+
it('should set related properties for video outstream context', function() {
|
|
1015
1015
|
const bidResponse = spec.interpretResponse(serverResponseWithOutstream, bidRequestWithOutstream)[0];
|
|
1016
|
-
expect(bidResponse).to.have.any.keys('
|
|
1016
|
+
expect(bidResponse).to.have.any.keys('renderer', 'mediaType');
|
|
1017
1017
|
expect(bidResponse.renderer).to.be.a('object');
|
|
1018
|
-
expect(bidResponse.renderer.url).to.equal(
|
|
1019
|
-
expect(bidResponse.renderer.config.bvwUrl).to.be.ok;
|
|
1020
|
-
expect(bidResponse.renderer.config.impUrl).to.be.ok;
|
|
1018
|
+
expect(bidResponse.renderer.url).to.equal(defaultRendererUrl);
|
|
1021
1019
|
expect(bidResponse.renderer.loaded).to.not.be.ok;
|
|
1022
1020
|
expect(bidResponse.width).to.equal(300);
|
|
1023
1021
|
expect(bidResponse.height).to.equal(250);
|
|
1024
1022
|
expect(bidResponse.vastUrl).to.match(/^data:text\/xml;/)
|
|
1025
1023
|
});
|
|
1026
1024
|
|
|
1027
|
-
it('should execute
|
|
1028
|
-
window.
|
|
1025
|
+
it('should execute Blue Billywig VAST Renderer bootstrap if defined', function() {
|
|
1026
|
+
window.bluebillywig = {
|
|
1027
|
+
renderers: [{ bootstrap: sinon.stub(), _id: 'adagio-renderer' }]
|
|
1028
|
+
};
|
|
1029
|
+
|
|
1030
|
+
const bidResponse = spec.interpretResponse(serverResponseWithOutstream, bidRequestWithOutstream)[0];
|
|
1031
|
+
executeRenderer(bidResponse.renderer, bidResponse)
|
|
1032
|
+
sinon.assert.calledOnce(window.bluebillywig.renderers[0].bootstrap);
|
|
1033
|
+
|
|
1034
|
+
delete window.bluebillywig;
|
|
1035
|
+
});
|
|
1036
|
+
|
|
1037
|
+
it('Should logError if response does not have a vastXml or vastUrl', function() {
|
|
1038
|
+
utilsMock.expects('logError').withExactArgs('Adagio: no vastXml or vastUrl on bid').once();
|
|
1039
|
+
|
|
1040
|
+
const localServerResponseWithOutstream = utils.deepClone(serverResponse);
|
|
1041
|
+
localServerResponseWithOutstream.body.bids[0].mediaType = 'video';
|
|
1042
|
+
|
|
1043
|
+
const bidResponse = spec.interpretResponse(localServerResponseWithOutstream, bidRequestWithOutstream)[0];
|
|
1044
|
+
executeRenderer(bidResponse.renderer, bidResponse)
|
|
1045
|
+
|
|
1046
|
+
utilsMock.verify();
|
|
1047
|
+
})
|
|
1048
|
+
|
|
1049
|
+
it('should logError if Blue Billywig API is not defined', function() {
|
|
1050
|
+
utilsMock.expects('logError').withExactArgs('Adagio: no BlueBillywig renderers found!').once();
|
|
1051
|
+
|
|
1029
1052
|
const bidResponse = spec.interpretResponse(serverResponseWithOutstream, bidRequestWithOutstream)[0];
|
|
1030
1053
|
executeRenderer(bidResponse.renderer, bidResponse)
|
|
1031
|
-
|
|
1032
|
-
|
|
1054
|
+
|
|
1055
|
+
utilsMock.verify();
|
|
1033
1056
|
});
|
|
1034
1057
|
|
|
1035
|
-
it('should logError if
|
|
1058
|
+
it('should logError if correct renderer is not defined', function() {
|
|
1059
|
+
window.bluebillywig = { renderers: [ { _id: 'adagio-another_renderer' } ] };
|
|
1060
|
+
|
|
1061
|
+
utilsMock.expects('logError').withExactArgs('Adagio: couldn\'t find a renderer with ID adagio-renderer').once();
|
|
1062
|
+
|
|
1036
1063
|
const bidResponse = spec.interpretResponse(serverResponseWithOutstream, bidRequestWithOutstream)[0];
|
|
1037
1064
|
executeRenderer(bidResponse.renderer, bidResponse)
|
|
1038
|
-
|
|
1065
|
+
|
|
1066
|
+
delete window.bluebillywig;
|
|
1067
|
+
utilsMock.verify();
|
|
1039
1068
|
});
|
|
1040
1069
|
});
|
|
1041
1070
|
|
|
@@ -2,6 +2,7 @@ import { config } from 'src/config.js';
|
|
|
2
2
|
import { deepAccess } from 'src/utils.js';
|
|
3
3
|
import { getAdUnits } from '../../fixtures/fixtures.js';
|
|
4
4
|
import * as agRTD from 'modules/airgridRtdProvider.js';
|
|
5
|
+
import { loadExternalScript } from '../../../src/adloader.js';
|
|
5
6
|
|
|
6
7
|
const MATCHED_AUDIENCES = ['travel', 'sport'];
|
|
7
8
|
const RTD_CONFIG = {
|
|
@@ -40,6 +41,7 @@ describe('airgrid RTD Submodule', function () {
|
|
|
40
41
|
expect(agRTD.airgridSubmodule.init(RTD_CONFIG.dataProviders[0])).to.equal(
|
|
41
42
|
true
|
|
42
43
|
);
|
|
44
|
+
expect(loadExternalScript.called).to.be.true
|
|
43
45
|
});
|
|
44
46
|
|
|
45
47
|
it('should attach script to DOM with correct config', function () {
|
|
@@ -130,6 +130,30 @@ 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
|
+
});
|
|
135
|
+
|
|
136
|
+
it('should call the endpoint with psegs data if any', function () {
|
|
137
|
+
let bidderRequest =
|
|
138
|
+
{
|
|
139
|
+
'ortb2': {
|
|
140
|
+
'user': {
|
|
141
|
+
'ext': {
|
|
142
|
+
'data': {
|
|
143
|
+
'permutive': [1234, 5678, 910]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const request = spec.buildRequests(bidRequests, bidderRequest);
|
|
151
|
+
const payload = JSON.parse(request.data);
|
|
152
|
+
expect(payload.psegs).to.exist;
|
|
153
|
+
expect(payload.psegs).to.include(1234);
|
|
154
|
+
expect(payload.psegs).to.include(5678);
|
|
155
|
+
expect(payload.psegs).to.include(910);
|
|
156
|
+
expect(payload.psegs).to.not.include(1);
|
|
133
157
|
});
|
|
134
158
|
|
|
135
159
|
it('should not prepend the protocol in page url if already present', function () {
|