prebid.js 7.12.0 → 7.13.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/.github/PULL_REQUEST_TEMPLATE.md +16 -10
- package/.github/codeql/codeql-config.yml +4 -0
- package/.github/workflows/codeql-analysis.yml +73 -0
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/acuityAdsBidAdapter.js +1 -0
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aolBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/brandmetricsRtdProvider.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/currency.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/enrichmentFpdModule.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imRtdProvider.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -0
- 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/mabidderBidAdapter.js +1 -0
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +132 -127
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/oneKeyIdSystem.js +1 -0
- package/dist/oneKeyRtdProvider.js +1 -0
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/trustpidSystem.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/viewability.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/.submodules.json +2 -0
- package/modules/acuityAdsBidAdapter.js +207 -0
- package/modules/acuityAdsBidAdapter.md +79 -0
- package/modules/adgenerationBidAdapter.js +2 -2
- package/modules/adriverBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +13 -93
- package/modules/beopBidAdapter.js +4 -4
- package/modules/browsiRtdProvider.js +1 -1
- package/modules/consentManagement.js +1 -1
- package/modules/consentManagementUsp.js +1 -1
- package/modules/consumableBidAdapter.js +23 -1
- package/modules/currency.js +1 -0
- package/modules/datawrkzBidAdapter.js +13 -13
- package/modules/enrichmentFpdModule.js +11 -0
- package/modules/id5IdSystem.js +2 -2
- package/modules/imRtdProvider.js +20 -7
- package/modules/imRtdProvider.md +3 -1
- package/modules/insticatorBidAdapter.js +1 -1
- package/modules/ixBidAdapter.js +8 -22
- package/modules/ixBidAdapter.md +1 -19
- package/modules/lifestreetBidAdapter.js +143 -0
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/mabidderBidAdapter.js +60 -0
- package/modules/mabidderBidAdapter.md +31 -0
- package/modules/oneKeyIdSystem.js +78 -0
- package/modules/oneKeyIdSystem.md +109 -0
- package/modules/oneKeyRtdProvider.js +98 -0
- package/modules/oneKeyRtdProvider.md +127 -0
- package/modules/permutiveRtdProvider.js +55 -8
- package/modules/pubmaticBidAdapter.js +14 -0
- package/modules/rtbhouseBidAdapter.js +24 -0
- package/modules/seedtagBidAdapter.md +25 -56
- package/modules/tripleliftBidAdapter.js +20 -1
- package/modules/trustpidSystem.js +6 -42
- package/modules/trustpidSystem.md +10 -10
- package/modules/userId/eids.js +26 -0
- package/modules/userId/userId.md +2 -2
- package/modules/viewability.js +14 -14
- package/modules/yahoosspBidAdapter.js +1 -1
- package/package.json +1 -1
- package/src/auction.js +2 -1
- package/src/native.js +22 -3
- package/src/sizeMapping.js +4 -6
- package/src/utils/promise.js +3 -1
- package/src/utils.js +27 -0
- package/src/video.js +5 -4
- package/test/pages/instream.html +2 -2
- package/test/spec/modules/acuityAdsBidAdapter_spec.js +398 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +1 -0
- package/test/spec/modules/beopBidAdapter_spec.js +11 -0
- package/test/spec/modules/big-richmediaBidAdapter_spec.js +1 -0
- package/test/spec/modules/consumableBidAdapter_spec.js +19 -0
- package/test/spec/modules/currency_spec.js +22 -0
- package/test/spec/modules/enrichmentFpdModule_spec.js +14 -0
- package/test/spec/modules/imRtdProvider_spec.js +10 -5
- package/test/spec/modules/ixBidAdapter_spec.js +6 -19
- package/test/spec/modules/lifestreetBidAdapter_spec.js +232 -0
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +59 -7
- package/test/spec/modules/mabidderBidAdapter_spec.js +125 -0
- package/test/spec/modules/oneKeyIdSystem_spec.js +107 -0
- package/test/spec/modules/oneKeyRtdProvider_spec.js +152 -0
- package/test/spec/modules/permutiveRtdProvider_spec.js +152 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +16 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +18 -0
- package/test/spec/modules/trustpidSystem_spec.js +27 -45
- package/test/spec/native_spec.js +17 -2
|
@@ -171,7 +171,8 @@ describe('IndexexchangeAdapter', function () {
|
|
|
171
171
|
sizes: [[300, 250], [300, 600]],
|
|
172
172
|
mediaTypes: {
|
|
173
173
|
banner: {
|
|
174
|
-
sizes: [[300, 250], [300, 600]]
|
|
174
|
+
sizes: [[300, 250], [300, 600]],
|
|
175
|
+
pos: 0
|
|
175
176
|
}
|
|
176
177
|
},
|
|
177
178
|
ortb2Imp: {
|
|
@@ -1839,6 +1840,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
1839
1840
|
expect(impression.id).to.equal(DEFAULT_BANNER_VALID_BID[0].bidId);
|
|
1840
1841
|
expect(impression.banner.format).to.be.length(2);
|
|
1841
1842
|
expect(impression.banner.topframe).to.be.oneOf([0, 1]);
|
|
1843
|
+
expect(impression.banner.pos).to.equal(0);
|
|
1842
1844
|
expect(impression.ext.tid).to.equal(DEFAULT_BANNER_VALID_BID[0].transactionId);
|
|
1843
1845
|
|
|
1844
1846
|
impression.banner.format.map(({ w, h, ext }, index) => {
|
|
@@ -2323,15 +2325,7 @@ describe('IndexexchangeAdapter', function () {
|
|
|
2323
2325
|
});
|
|
2324
2326
|
|
|
2325
2327
|
describe('detect missing sizes', function () {
|
|
2326
|
-
|
|
2327
|
-
config.setConfig({
|
|
2328
|
-
ix: {
|
|
2329
|
-
detectMissingSizes: false
|
|
2330
|
-
}
|
|
2331
|
-
});
|
|
2332
|
-
})
|
|
2333
|
-
|
|
2334
|
-
it('request should not contain missing sizes if detectMissingSizes = false', function () {
|
|
2328
|
+
it('request should always contain missing sizes', function () {
|
|
2335
2329
|
const bid1 = utils.deepClone(DEFAULT_BANNER_VALID_BID[0]);
|
|
2336
2330
|
bid1.mediaTypes.banner.sizes = LARGE_SET_OF_SIZES;
|
|
2337
2331
|
|
|
@@ -2448,11 +2442,13 @@ describe('IndexexchangeAdapter', function () {
|
|
|
2448
2442
|
bid.mediaTypes.video.protocols = [6];
|
|
2449
2443
|
bid.mediaTypes.video.mimes = ['video/mp4'];
|
|
2450
2444
|
bid.mediaTypes.video.api = 2;
|
|
2445
|
+
bid.mediaTypes.video.pos = 0;
|
|
2451
2446
|
const request = spec.buildRequests([bid], {})[0];
|
|
2452
2447
|
const impression = JSON.parse(request.data.r).imp[0];
|
|
2453
2448
|
|
|
2454
2449
|
expect(impression.video.protocols[0]).to.equal(6);
|
|
2455
2450
|
expect(impression.video.api).to.equal(2);
|
|
2451
|
+
expect(impression.video.pos).to.equal(0);
|
|
2456
2452
|
expect(impression.video.mimes[0]).to.equal('video/mp4');
|
|
2457
2453
|
});
|
|
2458
2454
|
|
|
@@ -2689,15 +2685,6 @@ describe('IndexexchangeAdapter', function () {
|
|
|
2689
2685
|
expect(videoImp.video.w).to.equal(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0].params.size[0]);
|
|
2690
2686
|
expect(videoImp.video.h).to.equal(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0].params.size[1]);
|
|
2691
2687
|
});
|
|
2692
|
-
|
|
2693
|
-
it('should get missing sizes count 0 when params.size not used', function () {
|
|
2694
|
-
const bid = utils.deepClone(DEFAULT_MULTIFORMAT_VIDEO_VALID_BID[0]);
|
|
2695
|
-
delete bid.params.size;
|
|
2696
|
-
const request = spec.buildRequests([bid], {});
|
|
2697
|
-
const diagObj = JSON.parse(request[0].data.r).ext.ixdiag;
|
|
2698
|
-
expect(diagObj.msd).to.equal(0);
|
|
2699
|
-
expect(diagObj.msi).to.equal(0);
|
|
2700
|
-
});
|
|
2701
2688
|
});
|
|
2702
2689
|
|
|
2703
2690
|
describe('both banner and video bidder params set', function () {
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { BANNER, VIDEO } from 'src/mediaTypes.js';
|
|
3
|
+
import { spec } from 'modules/lifestreetBidAdapter.js';
|
|
4
|
+
|
|
5
|
+
describe('lifestreetBidAdapter', function() {
|
|
6
|
+
let bidRequests;
|
|
7
|
+
let videoBidRequests;
|
|
8
|
+
let bidResponses;
|
|
9
|
+
let videoBidResponses;
|
|
10
|
+
beforeEach(function() {
|
|
11
|
+
bidRequests = [
|
|
12
|
+
{
|
|
13
|
+
bidder: 'lifestreet',
|
|
14
|
+
params: {
|
|
15
|
+
slot: 'slot166704',
|
|
16
|
+
adkey: '78c',
|
|
17
|
+
ad_size: '160x600'
|
|
18
|
+
},
|
|
19
|
+
mediaTypes: {
|
|
20
|
+
banner: {
|
|
21
|
+
sizes: [
|
|
22
|
+
[160, 600],
|
|
23
|
+
[300, 600]
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
sizes: [
|
|
28
|
+
[160, 600],
|
|
29
|
+
[300, 600]
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
bidResponses = {
|
|
35
|
+
body: {
|
|
36
|
+
cpm: 0.1,
|
|
37
|
+
netRevenue: true,
|
|
38
|
+
content_type: 'display_flash',
|
|
39
|
+
width: 160,
|
|
40
|
+
currency: 'USD',
|
|
41
|
+
ttl: 86400,
|
|
42
|
+
content: '<iframe src=\'https://ads.lfstmedia.com/displayAd?__ads=ip37346-u0T8r2uJ8245jv6i2QE8Qu&adt=5748927953915945176&seq=2&plc=K73sUSWIH9WwpIQiGybtg8lYdYFld5NvswMmfGBMz6U&__df=true&clickUrl=https%3A%2F%2Fads.lfstmedia.com%2Fclick%2Fcmp15299%2F5748927953915945176%2F2%3F__ads%3Dip37346-u0T8r2uJ8245jv6i2QE8Qu%26adkey%3D6bd%26slot%3Dslot166704%26__stamp%3D1583331395140%26ad%3Dcrv197050%26_cx%3D%24%24CX%24%24%26_cy%3D%24%24CY%24%24%26_celt%3D%24%24ELT-ID%24%24%26redirectURL%3D\' width=\'160\' height=\'600\' frameBorder=\'0\' scrolling=\'no\' framespacing=\'0\' marginheight=\'0\' marginwidth=\'0\'><!--test--><\/iframe>\n',
|
|
43
|
+
creativeId: 7985076,
|
|
44
|
+
height: 600,
|
|
45
|
+
status: 1
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
videoBidRequests = [
|
|
49
|
+
{
|
|
50
|
+
bidder: 'lifestreet',
|
|
51
|
+
params: {
|
|
52
|
+
slot: 'slot1227631',
|
|
53
|
+
adkey: 'a98',
|
|
54
|
+
ad_size: '640x480'
|
|
55
|
+
},
|
|
56
|
+
mediaTypes: {
|
|
57
|
+
video: {
|
|
58
|
+
sizes: [
|
|
59
|
+
[640, 480],
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
videoBidResponses = {
|
|
67
|
+
body: {
|
|
68
|
+
cpm: 0.1,
|
|
69
|
+
netRevenue: true,
|
|
70
|
+
content_type: 'vast_3_0',
|
|
71
|
+
width: 640,
|
|
72
|
+
currency: 'USD',
|
|
73
|
+
ttl: 86400,
|
|
74
|
+
content: '<iframe src="https://ads.lfstmedia.com/displayAd?__ads=ip38770-u0T8r2uJ8245jv6i2QE8Qu&adt=7734389071973843496&seq=2&plc=QEw02HSSpFZCrGaMUP5rN01QQtwPM5iEI5EQzt1nV4E&__df=true&clickUrl=https%3A%2F%2Fads.lfstmedia.com%2Fclick%2Fcmp20228%2F7734389071973843496%2F2%3F__ads%3Dip38770-u0T8r2uJ8245jv6i2QE8Qu%26adkey%3Dcdc%26slot%3Dslot1227631%26__stamp%3D1583766419183%26ad%3Dcrv225652%26_cx%3D%24%24CX%24%24%26_cy%3D%24%24CY%24%24%26_celt%3D%24%24ELT-ID%24%24%26redirectURL%3D" width="640" height="480" frameBorder="0" scrolling="no" framespacing="0" marginheight="0" marginwidth="0"><!--test--><\/iframe>\n',
|
|
75
|
+
creativeId: 108323592,
|
|
76
|
+
height: 480,
|
|
77
|
+
status: 1
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
describe('implementation', function() {
|
|
82
|
+
describe('Bid validations', function() {
|
|
83
|
+
it('valid bid case', function() {
|
|
84
|
+
const validBid = {
|
|
85
|
+
bidder: 'lifestreet',
|
|
86
|
+
params: {
|
|
87
|
+
slot: 'slot166704',
|
|
88
|
+
adkey: '78c',
|
|
89
|
+
ad_size: '160x600'
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
expect(spec.isBidRequestValid(validBid)).to.equal(true);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('invalid bid case', function() {
|
|
96
|
+
expect(spec.isBidRequestValid()).to.equal(false);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('invalid bid case: slot not passed', function() {
|
|
100
|
+
var validBid = {
|
|
101
|
+
bidder: 'lifestreet',
|
|
102
|
+
params: {
|
|
103
|
+
adkey: '78c',
|
|
104
|
+
ad_size: '160x600'
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
expect(spec.isBidRequestValid(validBid)).to.equal(false);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('invalid bid case: adkey not passed', function() {
|
|
111
|
+
const validBid = {
|
|
112
|
+
bidder: 'lifestreet',
|
|
113
|
+
params: {
|
|
114
|
+
slot: 'slot166704',
|
|
115
|
+
ad_size: '160x600'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
expect(spec.isBidRequestValid(validBid)).to.equal(false);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('invalid bid case: ad_size is not passed', function() {
|
|
122
|
+
const validBid = {
|
|
123
|
+
bidder: 'lifestreet',
|
|
124
|
+
params: {
|
|
125
|
+
slot: 'slot166704',
|
|
126
|
+
adkey: '78c'
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
expect(spec.isBidRequestValid(validBid)).to.equal(false);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe('buildRequests spec method', function () {
|
|
134
|
+
it('method exists and is a function', function () {
|
|
135
|
+
expect(spec.buildRequests).to.exist.and.to.be.a('function');
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('should not return request when no bids are present', function () {
|
|
139
|
+
const [request] = spec.buildRequests([]);
|
|
140
|
+
expect(request).to.be.undefined;
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('should return an url and request method ', function () {
|
|
144
|
+
const [request] = spec.buildRequests(bidRequests);
|
|
145
|
+
expect(request.method).to.equal('GET');
|
|
146
|
+
expect(request.url).to.be.a('string');
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('should return an url that contains all required fields', function () {
|
|
150
|
+
const [request] = spec.buildRequests(bidRequests);
|
|
151
|
+
expect(request.url).to.have.string('adkey');
|
|
152
|
+
expect(request.url).to.have.string('slot');
|
|
153
|
+
expect(request.url).to.have.string('ad_size');
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('should add GDPR consent information to the request', function () {
|
|
157
|
+
let consentString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==';
|
|
158
|
+
let bidderRequest = {
|
|
159
|
+
bidderCode: 'lifestreet',
|
|
160
|
+
auctionId: '1d1a030790a875',
|
|
161
|
+
bidderRequestId: '22edbae2744bf6',
|
|
162
|
+
timeout: 3000,
|
|
163
|
+
gdprConsent: {
|
|
164
|
+
consentString: consentString,
|
|
165
|
+
gdprApplies: true
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
bidderRequest.bids = bidRequests;
|
|
169
|
+
|
|
170
|
+
const [request] = spec.buildRequests(bidRequests, bidderRequest);
|
|
171
|
+
expect(request.url).to.have.string('__gdpr=1');
|
|
172
|
+
expect(request.url).to.have.string(`__consent=${consentString}`);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('should add US privacy string to request', function() {
|
|
176
|
+
let consentString = '1YA-';
|
|
177
|
+
let bidderRequest = {
|
|
178
|
+
bidderCode: 'lifestreet',
|
|
179
|
+
auctionId: '1d1a030790a875',
|
|
180
|
+
bidderRequestId: '22edbae2744bf6',
|
|
181
|
+
timeout: 3000,
|
|
182
|
+
uspConsent: consentString
|
|
183
|
+
};
|
|
184
|
+
bidderRequest.bids = bidRequests;
|
|
185
|
+
|
|
186
|
+
const [request] = spec.buildRequests(bidRequests, bidderRequest);
|
|
187
|
+
expect(request.url).to.have.string(`__us_privacy=${consentString}`);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
describe('server response', function() {
|
|
192
|
+
it('should return valid proper values', function() {
|
|
193
|
+
const request = spec.buildRequests(bidRequests);
|
|
194
|
+
const response = spec.interpretResponse(bidResponses, request);
|
|
195
|
+
expect(response).to.be.an('array').with.length.above(0);
|
|
196
|
+
expect(response[0].cpm).to.equal(bidResponses.body.cpm);
|
|
197
|
+
expect(response[0].width).to.equal(bidResponses.body.width);
|
|
198
|
+
expect(response[0].height).to.equal(bidResponses.body.height);
|
|
199
|
+
expect(response[0].creativeId).to.equal(bidResponses.body.creativeId);
|
|
200
|
+
expect(response[0].currency).to.equal('USD');
|
|
201
|
+
expect(response[0].netRevenue).to.equal(true);
|
|
202
|
+
expect(response[0].ttl).to.equal(bidResponses.body.ttl);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('should return proper mediaType for BANNER', function() {
|
|
206
|
+
const request = spec.buildRequests(bidRequests);
|
|
207
|
+
const [response] = spec.interpretResponse(bidResponses, request);
|
|
208
|
+
expect(response.mediaType).to.equal(BANNER);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it('should return proper mediaType for VIDEO', function() {
|
|
212
|
+
const request = spec.buildRequests(videoBidRequests);
|
|
213
|
+
const [response] = spec.interpretResponse(videoBidResponses, request);
|
|
214
|
+
expect(response.mediaType).to.equal(VIDEO);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('should return a VAST XML for VIDEO', function() {
|
|
218
|
+
const request = spec.buildRequests(videoBidRequests);
|
|
219
|
+
const [response] = spec.interpretResponse(videoBidResponses, request);
|
|
220
|
+
expect(response.vastXml).to.be.a('string');
|
|
221
|
+
expect(response.vastXml).to.have.string('iframe');
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('should return an ad content for BANNER', function() {
|
|
225
|
+
const request = spec.buildRequests(bidRequests);
|
|
226
|
+
const [response] = spec.interpretResponse(bidResponses, request);
|
|
227
|
+
expect(response.ad).to.be.a('string');
|
|
228
|
+
expect(response.ad).to.have.string('iframe');
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {expect} from 'chai';
|
|
2
|
-
import {spec} from '../../../modules/limelightDigitalBidAdapter.js';
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { spec } from '../../../modules/limelightDigitalBidAdapter.js';
|
|
3
3
|
|
|
4
4
|
describe('limelightDigitalAdapter', function () {
|
|
5
5
|
const bid1 = {
|
|
@@ -29,7 +29,18 @@ describe('limelightDigitalAdapter', function () {
|
|
|
29
29
|
}
|
|
30
30
|
]
|
|
31
31
|
}
|
|
32
|
-
]
|
|
32
|
+
],
|
|
33
|
+
schain: {
|
|
34
|
+
ver: '1.0',
|
|
35
|
+
complete: 1,
|
|
36
|
+
nodes: [
|
|
37
|
+
{
|
|
38
|
+
asi: 'example.com',
|
|
39
|
+
sid: '1',
|
|
40
|
+
hp: 1
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
33
44
|
}
|
|
34
45
|
const bid2 = {
|
|
35
46
|
bidId: '58ee9870c3164a',
|
|
@@ -53,7 +64,23 @@ describe('limelightDigitalAdapter', function () {
|
|
|
53
64
|
}
|
|
54
65
|
]
|
|
55
66
|
}
|
|
56
|
-
]
|
|
67
|
+
],
|
|
68
|
+
schain: {
|
|
69
|
+
ver: '1.0',
|
|
70
|
+
complete: 1,
|
|
71
|
+
nodes: [
|
|
72
|
+
{
|
|
73
|
+
asi: 'example.com',
|
|
74
|
+
sid: '1',
|
|
75
|
+
hp: 1
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
asi: 'example1.com',
|
|
79
|
+
sid: '2',
|
|
80
|
+
hp: 1
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
57
84
|
}
|
|
58
85
|
const bid3 = {
|
|
59
86
|
bidId: '019645c7d69460',
|
|
@@ -81,7 +108,18 @@ describe('limelightDigitalAdapter', function () {
|
|
|
81
108
|
}
|
|
82
109
|
]
|
|
83
110
|
}
|
|
84
|
-
]
|
|
111
|
+
],
|
|
112
|
+
schain: {
|
|
113
|
+
ver: '1.0',
|
|
114
|
+
complete: 1,
|
|
115
|
+
nodes: [
|
|
116
|
+
{
|
|
117
|
+
asi: 'example.com',
|
|
118
|
+
sid: '1',
|
|
119
|
+
hp: 1
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
85
123
|
}
|
|
86
124
|
const bid4 = {
|
|
87
125
|
bidId: '019645c7d69460',
|
|
@@ -107,7 +145,18 @@ describe('limelightDigitalAdapter', function () {
|
|
|
107
145
|
}
|
|
108
146
|
]
|
|
109
147
|
}
|
|
110
|
-
]
|
|
148
|
+
],
|
|
149
|
+
schain: {
|
|
150
|
+
ver: '1.0',
|
|
151
|
+
complete: 1,
|
|
152
|
+
nodes: [
|
|
153
|
+
{
|
|
154
|
+
asi: 'example.com',
|
|
155
|
+
sid: '1',
|
|
156
|
+
hp: 1
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
111
160
|
}
|
|
112
161
|
|
|
113
162
|
describe('buildRequests', function () {
|
|
@@ -146,7 +195,8 @@ describe('limelightDigitalAdapter', function () {
|
|
|
146
195
|
'sizes',
|
|
147
196
|
'transactionId',
|
|
148
197
|
'publisherId',
|
|
149
|
-
'userIdAsEids'
|
|
198
|
+
'userIdAsEids',
|
|
199
|
+
'supplyChain'
|
|
150
200
|
);
|
|
151
201
|
expect(adUnit.id).to.be.a('number');
|
|
152
202
|
expect(adUnit.bidId).to.be.a('string');
|
|
@@ -154,6 +204,7 @@ describe('limelightDigitalAdapter', function () {
|
|
|
154
204
|
expect(adUnit.transactionId).to.be.a('string');
|
|
155
205
|
expect(adUnit.sizes).to.be.an('array');
|
|
156
206
|
expect(adUnit.userIdAsEids).to.be.an('array');
|
|
207
|
+
expect(adUnit.supplyChain).to.be.an('object');
|
|
157
208
|
})
|
|
158
209
|
})
|
|
159
210
|
})
|
|
@@ -587,4 +638,5 @@ function validateAdUnit(adUnit, bid) {
|
|
|
587
638
|
}));
|
|
588
639
|
expect(adUnit.publisherId).to.equal(bid.params.publisherId);
|
|
589
640
|
expect(adUnit.userIdAsEids).to.deep.equal(bid.userIdAsEids);
|
|
641
|
+
expect(adUnit.supplyChain).to.deep.equal(bid.schain);
|
|
590
642
|
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { expect } from 'chai'
|
|
2
|
+
import { baseUrl, spec } from 'modules/mabidderBidAdapter.js'
|
|
3
|
+
import { newBidder } from 'src/adapters/bidderFactory.js'
|
|
4
|
+
import { BANNER } from '../../../src/mediaTypes.js';
|
|
5
|
+
|
|
6
|
+
describe('mabidderBidAdapter', () => {
|
|
7
|
+
const adapter = newBidder(spec)
|
|
8
|
+
const bidRequestBanner = {
|
|
9
|
+
'bidId': '12345',
|
|
10
|
+
'bidder': 'mabidder',
|
|
11
|
+
'sizes': [[300, 250]],
|
|
12
|
+
'mediaTypes': {
|
|
13
|
+
'banner': {
|
|
14
|
+
'sizes': [[300, 250]]
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
'params': {
|
|
18
|
+
'ppid': 'string1',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe('inherited functions', () => {
|
|
24
|
+
it('exists and is a function', () => {
|
|
25
|
+
expect(adapter.callBids).to.exist.and.to.be.a('function')
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
describe('isBidRequestValid', () => {
|
|
30
|
+
it('should return true when required params are found', () => {
|
|
31
|
+
expect(spec.isBidRequestValid(bidRequestBanner)).to.equal(true)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('should return false when required params are not found', () => {
|
|
35
|
+
let bid = Object.assign({}, bidRequestBanner)
|
|
36
|
+
const ppid = bid.params.ppid
|
|
37
|
+
delete bid.params.ppid
|
|
38
|
+
expect(spec.isBidRequestValid(bid)).to.equal(false)
|
|
39
|
+
bid.params.ppid = ppid
|
|
40
|
+
|
|
41
|
+
bid = Object.assign({}, bidRequestBanner)
|
|
42
|
+
const params = bidRequestBanner.params
|
|
43
|
+
delete bid.params
|
|
44
|
+
expect(spec.isBidRequestValid(bid)).to.equal(false)
|
|
45
|
+
bidRequestBanner.params = params
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
describe('buildRequests', () => {
|
|
50
|
+
const bidRequests = [bidRequestBanner]
|
|
51
|
+
const req = spec.buildRequests(bidRequests, {
|
|
52
|
+
auctionId: '123',
|
|
53
|
+
refererInfo: {
|
|
54
|
+
referer: 'http://test.com/path.html'
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('sends bid request to ENDPOINT via POST', () => {
|
|
59
|
+
expect(req.method).to.equal('POST')
|
|
60
|
+
expect(req.url.indexOf('https://')).to.equal(0)
|
|
61
|
+
expect(req.url).to.equal(baseUrl)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('contains prebid version parameter', () => {
|
|
65
|
+
expect(req.data.v).to.equal($$PREBID_GLOBAL$$.version)
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('sends the correct bid parameters for banner', () => {
|
|
69
|
+
expect(req.data.bids[0].bidId).to.equal(bidRequestBanner.bidId)
|
|
70
|
+
expect(req.data.bids[0].ppid).to.equal(bidRequestBanner.params.ppid)
|
|
71
|
+
expect(req.data.bids[0].sizes[0].width).to.equal(bidRequestBanner.sizes[0][0])
|
|
72
|
+
expect(req.data.bids[0].sizes[0].height).to.equal(bidRequestBanner.sizes[0][1])
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('accepts an optional fpd parameter', () => {
|
|
76
|
+
expect(req.data.fpd).to.exist.and.to.be.a('Object')
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
describe('interpretResponse', () => {
|
|
81
|
+
it('handles banner request and should get correct bid response', () => {
|
|
82
|
+
const BIDDER_RESPONSE_BANNER = {
|
|
83
|
+
'Responses': [{
|
|
84
|
+
'width': 300,
|
|
85
|
+
'height': 250,
|
|
86
|
+
'creativeId': '123abc',
|
|
87
|
+
'ad': '<!-- Creative -->',
|
|
88
|
+
'cpm': 0.5,
|
|
89
|
+
'requestId': 'abc123',
|
|
90
|
+
'ttl': 60,
|
|
91
|
+
'netRevenue': true,
|
|
92
|
+
'currency': 'USD',
|
|
93
|
+
'mediaType': BANNER,
|
|
94
|
+
'meta': {
|
|
95
|
+
'advertiserDomains': ['https://loblaws.ca']
|
|
96
|
+
}
|
|
97
|
+
}]
|
|
98
|
+
}
|
|
99
|
+
const results = spec.interpretResponse({ body: BIDDER_RESPONSE_BANNER }, {})
|
|
100
|
+
const response = results[0]
|
|
101
|
+
expect(results.length).to.equal(BIDDER_RESPONSE_BANNER.Responses.length)
|
|
102
|
+
expect(response).to.have.property('ad').equal('<!-- Creative -->')
|
|
103
|
+
expect(response).to.have.property('requestId').equal('abc123')
|
|
104
|
+
expect(response).to.have.property('cpm').equal(0.5)
|
|
105
|
+
expect(response).to.have.property('currency').equal('USD')
|
|
106
|
+
expect(response).to.have.property('width').equal(300)
|
|
107
|
+
expect(response).to.have.property('height').equal(250)
|
|
108
|
+
expect(response).to.have.property('ttl').equal(60)
|
|
109
|
+
expect(response).to.have.property('creativeId').equal('123abc')
|
|
110
|
+
expect(response).to.have.property('mediaType').equal(BANNER)
|
|
111
|
+
expect(response).to.have.property('meta')
|
|
112
|
+
expect(response.meta).to.have.property('advertiserDomains')
|
|
113
|
+
expect(response.meta.advertiserDomains).to.be.an('array')
|
|
114
|
+
expect(response.meta.advertiserDomains[0]).equal('https://loblaws.ca')
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
it('handles no bid response by returning empty array', () => {
|
|
118
|
+
let result = spec.interpretResponse({ body: undefined }, {})
|
|
119
|
+
expect(result).to.deep.equal([])
|
|
120
|
+
|
|
121
|
+
result = spec.interpretResponse({ body: '' }, {})
|
|
122
|
+
expect(result).to.deep.equal([])
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
})
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { oneKeyIdSubmodule } from 'modules/oneKeyIdSystem'
|
|
2
|
+
|
|
3
|
+
const defaultConf = {
|
|
4
|
+
params: {
|
|
5
|
+
proxyHostName: 'proxy.com'
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const defaultIdsAndPreferences = {
|
|
10
|
+
identifiers: [
|
|
11
|
+
{
|
|
12
|
+
version: '0.1',
|
|
13
|
+
type: 'paf_browser_id',
|
|
14
|
+
value: 'df0a5664-987d-4074-bbd9-e9b12ebae6ef',
|
|
15
|
+
source: {
|
|
16
|
+
domain: 'crto-poc-1.onekey.network',
|
|
17
|
+
timestamp: 1657100291,
|
|
18
|
+
signature: 'ikjV6WwpcroNB5XyLOr3MgYHLpS6UjICEOuv/jEr00uVrjZm0zluDSWh11OeGDZrMhxMBPeTabtQ4U2rNk3IzQ=='
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
preferences: {
|
|
23
|
+
version: '0.1',
|
|
24
|
+
data: {
|
|
25
|
+
use_browsing_for_personalization: true
|
|
26
|
+
},
|
|
27
|
+
source: {
|
|
28
|
+
domain: 'cmp.pafdemopublisher.com',
|
|
29
|
+
timestamp: 1657100294,
|
|
30
|
+
signature: 'aAbMThxyeKpe/EgT5ARI1xecjCwwh0uRagsTuPXNY2fzh7foeW31qljDZf6h8UwOd9M2bAN7XNtM2LYBbJzskQ=='
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const defaultIdsAndPreferencesResult = {
|
|
36
|
+
status: 'PARTICIPATING',
|
|
37
|
+
data: defaultIdsAndPreferences
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
describe('oneKeyData module', () => {
|
|
41
|
+
describe('getId function', () => {
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
setUpOneKey();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('return a callback for handling asynchron results', () => {
|
|
47
|
+
const moduleIdResponse = oneKeyIdSubmodule.getId(defaultConf);
|
|
48
|
+
|
|
49
|
+
expect(moduleIdResponse.callback).to.be.an('function');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it(`return a callback that waits for OneKey to be loaded`, () => {
|
|
53
|
+
const moduleIdResponse = oneKeyIdSubmodule.getId(defaultConf);
|
|
54
|
+
|
|
55
|
+
moduleIdResponse.callback(function() {})
|
|
56
|
+
|
|
57
|
+
expect(window.OneKey.queue.length).to.equal(1);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('return a callback that gets ids and prefs', () => {
|
|
61
|
+
const moduleIdResponse = oneKeyIdSubmodule.getId(defaultConf);
|
|
62
|
+
|
|
63
|
+
// Act
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
moduleIdResponse.callback(resolve);
|
|
66
|
+
executeOneKeyQueue();
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// Assert
|
|
70
|
+
.then((idsAndPrefs) => {
|
|
71
|
+
expect(idsAndPrefs).to.equal(defaultIdsAndPreferences);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('return a callback with undefined if impossible to get ids and prefs', () => {
|
|
76
|
+
window.OneKey.getIdsAndPreferences = () => {
|
|
77
|
+
return Promise.reject(new Error(`Impossible to get ids and prefs`));
|
|
78
|
+
};
|
|
79
|
+
const moduleIdResponse = oneKeyIdSubmodule.getId(defaultConf);
|
|
80
|
+
|
|
81
|
+
// Act
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
moduleIdResponse.callback(resolve);
|
|
84
|
+
executeOneKeyQueue();
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
// Assert
|
|
88
|
+
.then((idsAndPrefs) => {
|
|
89
|
+
expect(idsAndPrefs).to.be.undefined;
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const setUpOneKey = () => {
|
|
96
|
+
window.OneKey.queue = [];
|
|
97
|
+
window.OneKey.getIdsAndPreferences = () => {
|
|
98
|
+
return Promise.resolve(defaultIdsAndPreferencesResult);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const executeOneKeyQueue = () => {
|
|
103
|
+
while (window.OneKey.queue.length > 0) {
|
|
104
|
+
window.OneKey.queue[0]();
|
|
105
|
+
window.OneKey.queue.shift();
|
|
106
|
+
}
|
|
107
|
+
}
|