prebid.js 7.51.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/adriverIdSystem.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/allowActivities.js +1 -0
- 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/connectIdSystem.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 +6 -0
- 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/gdprEnforcement.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/growthCodeRtdProvider.js +1 -0
- 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 +154 -146
- package/dist/objectGuard.js +1 -0
- 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/oxxionAnalyticsAdapter.js +1 -0
- 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/rtdModule.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/growthcode.html +20 -9
- package/integrationExamples/gpt/userId_example.html +20 -6
- package/libraries/objectGuard/objectGuard.js +108 -0
- package/libraries/objectGuard/ortbGuard.js +88 -0
- package/modules/.submodules.json +3 -1
- package/modules/1plusXRtdProvider.js +31 -60
- package/modules/adagioBidAdapter.js +86 -24
- package/modules/adgenerationBidAdapter.js +14 -5
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/adriverIdSystem.js +1 -1
- package/modules/airgridRtdProvider.js +11 -12
- package/modules/allowActivities.js +74 -0
- 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/connectIdSystem.js +89 -13
- package/modules/connectIdSystem.md +4 -7
- package/modules/criteoBidAdapter.js +18 -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/gdprEnforcement.js +98 -169
- package/modules/greenbidsAnalyticsAdapter.js +1 -1
- package/modules/growthCodeRtdProvider.js +131 -0
- package/modules/growthCodeRtdProvider.md +55 -0
- package/modules/id5IdSystem.js +3 -5
- package/modules/ixBidAdapter.js +17 -3
- 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/oxxionAnalyticsAdapter.js +212 -0
- package/modules/oxxionAnalyticsAdapter.md +33 -0
- package/modules/pairIdSystem.js +16 -11
- package/modules/proxistoreBidAdapter.js +11 -14
- package/modules/richaudienceBidAdapter.js +10 -1
- package/modules/riseBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +12 -1
- package/modules/schain.js +2 -2
- package/modules/sharethroughBidAdapter.js +2 -2
- package/modules/sirdataRtdProvider.js +73 -146
- package/modules/smartadserverBidAdapter.js +5 -0
- package/modules/sovrnBidAdapter.js +4 -1
- package/modules/stroeerCoreBidAdapter.js +55 -6
- package/modules/stvBidAdapter.js +34 -1
- package/modules/uid2IdSystem.js +27 -210
- package/modules/uid2IdSystem.md +104 -23
- package/modules/uid2IdSystem_shared.js +232 -0
- package/modules/undertoneBidAdapter.js +9 -1
- package/modules/userId/eids.js +8 -0
- package/modules/userId/index.js +69 -41
- 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/yahoosspBidAdapter.js +45 -3
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +23 -14
- package/modules/zeta_global_sspBidAdapter.js +28 -22
- package/package.json +1 -1
- package/src/activities/activities.js +47 -0
- package/src/activities/activityParams.js +8 -0
- package/src/activities/modules.js +1 -1
- package/src/activities/params.js +59 -0
- package/src/activities/redactor.js +157 -0
- package/src/activities/rules.js +95 -0
- package/src/adapterManager.js +45 -8
- package/src/adloader.js +1 -0
- package/src/fpd/rootDomain.js +1 -1
- package/src/prebid.js +1 -1
- package/src/storageManager.js +57 -44
- package/src/userSync.js +35 -18
- package/test/spec/activities/allowActivites_spec.js +138 -0
- package/test/spec/activities/objectGuard_spec.js +144 -0
- package/test/spec/activities/ortbGuard_spec.js +140 -0
- package/test/spec/activities/params_spec.js +25 -0
- package/test/spec/activities/redactor_spec.js +296 -0
- package/test/spec/activities/rules_spec.js +135 -0
- package/test/spec/modules/1plusXRtdProvider_spec.js +98 -149
- package/test/spec/modules/adagioBidAdapter_spec.js +46 -17
- package/test/spec/modules/adgenerationBidAdapter_spec.js +52 -12
- 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/connectIdSystem_spec.js +291 -23
- package/test/spec/modules/criteoBidAdapter_spec.js +85 -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/gdprEnforcement_spec.js +127 -414
- package/test/spec/modules/growthCodeRtdProvider_spec.js +127 -0
- package/test/spec/modules/id5IdSystem_spec.js +10 -3
- package/test/spec/modules/ixBidAdapter_spec.js +32 -1
- package/test/spec/modules/logicadBidAdapter_spec.js +122 -2
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -0
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +324 -0
- package/test/spec/modules/pairIdSystem_spec.js +16 -3
- package/test/spec/modules/realTimeDataModule_spec.js +1 -1
- package/test/spec/modules/richaudienceBidAdapter_spec.js +44 -0
- package/test/spec/modules/schain_spec.js +9 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +1 -1
- package/test/spec/modules/sirdataRtdProvider_spec.js +110 -17
- package/test/spec/modules/smartadserverBidAdapter_spec.js +42 -0
- package/test/spec/modules/sovrnBidAdapter_spec.js +13 -0
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +151 -6
- package/test/spec/modules/stvBidAdapter_spec.js +13 -1
- package/test/spec/modules/uid2IdSystem_helpers.js +70 -0
- package/test/spec/modules/uid2IdSystem_spec.js +131 -86
- package/test/spec/modules/undertoneBidAdapter_spec.js +57 -1
- package/test/spec/modules/userId_spec.js +96 -33
- package/test/spec/modules/weboramaRtdProvider_spec.js +331 -205
- package/test/spec/modules/yahoosspBidAdapter_spec.js +103 -51
- package/test/spec/modules/yieldlabBidAdapter_spec.js +42 -2
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +204 -4
- package/test/spec/unit/core/adapterManager_spec.js +181 -1
- package/test/spec/unit/core/storageManager_spec.js +76 -68
- package/test/spec/unit/pbjs_api_spec.js +15 -25
- package/test/spec/userSync_spec.js +45 -16
|
@@ -89,11 +89,16 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => {
|
|
|
89
89
|
numIframes: 0,
|
|
90
90
|
stack: ['https://publisher-test.com'],
|
|
91
91
|
},
|
|
92
|
+
uspConsent: '1-Y-',
|
|
92
93
|
gdprConsent: {
|
|
93
94
|
consentString: 'BOtmiBKOtmiBKABABAENAFAAAAACeAAA',
|
|
94
95
|
vendorData: {},
|
|
95
96
|
gdprApplies: true
|
|
96
97
|
},
|
|
98
|
+
gppConsent: {
|
|
99
|
+
gppString: 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN',
|
|
100
|
+
applicableSections: [1, 2, 3]
|
|
101
|
+
},
|
|
97
102
|
start: new Date().getTime(),
|
|
98
103
|
timeout: 1000,
|
|
99
104
|
ortb2
|
|
@@ -177,11 +182,6 @@ const generateResponseMock = (admPayloadType, vastVersion, videoContext) => {
|
|
|
177
182
|
|
|
178
183
|
// Unit tests
|
|
179
184
|
describe('YahooSSP Bid Adapter:', () => {
|
|
180
|
-
it('PLACEHOLDER TO PASS GULP', () => {
|
|
181
|
-
const obj = {};
|
|
182
|
-
expect(obj).to.be.an('object');
|
|
183
|
-
});
|
|
184
|
-
|
|
185
185
|
describe('Validate basic properties', () => {
|
|
186
186
|
it('should define the correct bidder code', () => {
|
|
187
187
|
expect(spec.code).to.equal('yahoossp')
|
|
@@ -193,40 +193,38 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
193
193
|
});
|
|
194
194
|
|
|
195
195
|
describe('getUserSyncs()', () => {
|
|
196
|
-
const IMAGE_PIXEL_URL = 'http://image-pixel.com/foo/bar?1234&baz=true';
|
|
197
|
-
const IFRAME_ONE_URL = 'http://image-iframe.com/foo/bar?1234&baz=true';
|
|
196
|
+
const IMAGE_PIXEL_URL = 'http://image-pixel.com/foo/bar?1234&baz=true&gdpr=foo&gdpr_consent=bar';
|
|
197
|
+
const IFRAME_ONE_URL = 'http://image-iframe.com/foo/bar?1234&baz=true&us_privacy=hello&gpp=goodbye';
|
|
198
198
|
const IFRAME_TWO_URL = 'http://image-iframe-two.com/foo/bar?1234&baz=true';
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
pixels: `<script>document.write('<iframe src="${IFRAME_ONE_URL}"></iframe>` +
|
|
206
|
-
`<img src="${IMAGE_PIXEL_URL}"></iframe>` +
|
|
207
|
-
`<iframe src="${IFRAME_TWO_URL}"></iframe>');</script>`
|
|
208
|
-
}
|
|
199
|
+
const SERVER_RESPONSES = [{
|
|
200
|
+
body: {
|
|
201
|
+
ext: {
|
|
202
|
+
pixels: `<script>document.write('<iframe src="${IFRAME_ONE_URL}"></iframe>` +
|
|
203
|
+
`<img src="${IMAGE_PIXEL_URL}"></iframe>` +
|
|
204
|
+
`<iframe src="${IFRAME_TWO_URL}"></iframe>');</script>`
|
|
209
205
|
}
|
|
210
206
|
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
after(() => {
|
|
214
|
-
serverResponses = undefined;
|
|
215
|
-
});
|
|
207
|
+
}];
|
|
208
|
+
const bidderRequest = generateBuildRequestMock({}).bidderRequest;
|
|
216
209
|
|
|
217
210
|
it('for only iframe enabled syncs', () => {
|
|
218
211
|
let syncOptions = {
|
|
219
212
|
iframeEnabled: true,
|
|
220
213
|
pixelEnabled: false
|
|
221
214
|
};
|
|
222
|
-
let
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
)
|
|
215
|
+
let pixelObjects = spec.getUserSyncs(
|
|
216
|
+
syncOptions,
|
|
217
|
+
SERVER_RESPONSES,
|
|
218
|
+
bidderRequest.gdprConsent,
|
|
219
|
+
bidderRequest.uspConsent,
|
|
220
|
+
bidderRequest.gppConsent
|
|
221
|
+
);
|
|
222
|
+
expect(pixelObjects.length).to.equal(2);
|
|
223
|
+
|
|
224
|
+
pixelObjects.forEach(pixelObject => {
|
|
225
|
+
expect(pixelObject).to.have.all.keys('type', 'url');
|
|
226
|
+
expect(pixelObject.type).to.equal('iframe');
|
|
227
|
+
});
|
|
230
228
|
});
|
|
231
229
|
|
|
232
230
|
it('for only pixel enabled syncs', () => {
|
|
@@ -234,13 +232,16 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
234
232
|
iframeEnabled: false,
|
|
235
233
|
pixelEnabled: true
|
|
236
234
|
};
|
|
237
|
-
let
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
)
|
|
235
|
+
let pixelObjects = spec.getUserSyncs(
|
|
236
|
+
syncOptions,
|
|
237
|
+
SERVER_RESPONSES,
|
|
238
|
+
bidderRequest.gdprConsent,
|
|
239
|
+
bidderRequest.uspConsent,
|
|
240
|
+
bidderRequest.gppConsent
|
|
241
|
+
);
|
|
242
|
+
expect(pixelObjects.length).to.equal(1);
|
|
243
|
+
expect(pixelObjects[0]).to.have.all.keys('type', 'url');
|
|
244
|
+
expect(pixelObjects[0].type).to.equal('image');
|
|
244
245
|
});
|
|
245
246
|
|
|
246
247
|
it('for both pixel and iframe enabled syncs', () => {
|
|
@@ -248,15 +249,56 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
248
249
|
iframeEnabled: true,
|
|
249
250
|
pixelEnabled: true
|
|
250
251
|
};
|
|
251
|
-
let
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
252
|
+
let pixelObjects = spec.getUserSyncs(
|
|
253
|
+
syncOptions,
|
|
254
|
+
SERVER_RESPONSES,
|
|
255
|
+
bidderRequest.gdprConsent,
|
|
256
|
+
bidderRequest.uspConsent,
|
|
257
|
+
bidderRequest.gppConsent
|
|
258
|
+
);
|
|
259
|
+
expect(pixelObjects.length).to.equal(3);
|
|
260
|
+
let iframeCount = 0;
|
|
261
|
+
let imageCount = 0;
|
|
262
|
+
pixelObjects.forEach(pixelObject => {
|
|
263
|
+
if (pixelObject.type == 'iframe') {
|
|
264
|
+
iframeCount++;
|
|
265
|
+
} else if (pixelObject.type == 'image') {
|
|
266
|
+
imageCount++;
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
expect(iframeCount).to.equal(2);
|
|
270
|
+
expect(imageCount).to.equal(1);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
describe('user consent parameters are updated', () => {
|
|
274
|
+
let syncOptions = {
|
|
275
|
+
iframeEnabled: true,
|
|
276
|
+
pixelEnabled: true
|
|
277
|
+
};
|
|
278
|
+
let pixelObjects = spec.getUserSyncs(
|
|
279
|
+
syncOptions,
|
|
280
|
+
SERVER_RESPONSES,
|
|
281
|
+
bidderRequest.gdprConsent,
|
|
282
|
+
bidderRequest.uspConsent,
|
|
283
|
+
bidderRequest.gppConsent
|
|
284
|
+
);
|
|
285
|
+
pixelObjects.forEach(pixelObject => {
|
|
286
|
+
let url = pixelObject.url;
|
|
287
|
+
let urlParams = new URL(url).searchParams;
|
|
288
|
+
const expectedParams = {
|
|
289
|
+
'baz': 'true',
|
|
290
|
+
'gdpr_consent': bidderRequest.gdprConsent.consentString,
|
|
291
|
+
'gdpr': bidderRequest.gdprConsent.gdprApplies ? '1' : '0',
|
|
292
|
+
'us_privacy': bidderRequest.uspConsent,
|
|
293
|
+
'gpp': bidderRequest.gppConsent.gppString,
|
|
294
|
+
'gpp_sid': Array.isArray(bidderRequest.gppConsent.applicableSections) ? bidderRequest.gppConsent.applicableSections.join(',') : ''
|
|
295
|
+
}
|
|
296
|
+
for (const [key, value] of Object.entries(expectedParams)) {
|
|
297
|
+
it(`Updates the ${key} consent param in user sync URL ${url}`, () => {
|
|
298
|
+
expect(urlParams.get(key)).to.equal(value);
|
|
299
|
+
});
|
|
300
|
+
};
|
|
301
|
+
});
|
|
260
302
|
});
|
|
261
303
|
});
|
|
262
304
|
|
|
@@ -749,7 +791,15 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
749
791
|
expect(options.withCredentials).to.be.false;
|
|
750
792
|
});
|
|
751
793
|
|
|
752
|
-
it('
|
|
794
|
+
it('set the GPP consent data from the data within the bid request', function () {
|
|
795
|
+
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
796
|
+
let clonedBidderRequest = {...bidderRequest};
|
|
797
|
+
const data = spec.buildRequests(validBidRequests, clonedBidderRequest)[0].data;
|
|
798
|
+
expect(data.regs.ext.gpp).to.equal(bidderRequest.gppConsent.gppString);
|
|
799
|
+
expect(data.regs.ext.gpp_sid).to.eql(bidderRequest.gppConsent.applicableSections);
|
|
800
|
+
});
|
|
801
|
+
|
|
802
|
+
it('overrides the GPP consent data using data from the ortb2 config object', function () {
|
|
753
803
|
const { validBidRequests, bidderRequest } = generateBuildRequestMock({});
|
|
754
804
|
const ortb2 = {
|
|
755
805
|
regs: {
|
|
@@ -759,8 +809,8 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
759
809
|
};
|
|
760
810
|
let clonedBidderRequest = {...bidderRequest, ortb2};
|
|
761
811
|
const data = spec.buildRequests(validBidRequests, clonedBidderRequest)[0].data;
|
|
762
|
-
expect(data.regs.ext.gpp).to.equal(
|
|
763
|
-
expect(data.regs.ext.gpp_sid).to.eql(
|
|
812
|
+
expect(data.regs.ext.gpp).to.equal(ortb2.regs.gpp);
|
|
813
|
+
expect(data.regs.ext.gpp_sid).to.eql(ortb2.regs.gpp_sid);
|
|
764
814
|
});
|
|
765
815
|
});
|
|
766
816
|
|
|
@@ -930,8 +980,10 @@ describe('YahooSSP Bid Adapter:', () => {
|
|
|
930
980
|
|
|
931
981
|
expect(data.regs).to.deep.equal({
|
|
932
982
|
ext: {
|
|
933
|
-
'us_privacy':
|
|
934
|
-
gdpr: 1
|
|
983
|
+
'us_privacy': bidderRequest.uspConsent,
|
|
984
|
+
gdpr: 1,
|
|
985
|
+
gpp: bidderRequest.gppConsent.gppString,
|
|
986
|
+
gpp_sid: bidderRequest.gppConsent.applicableSections
|
|
935
987
|
}
|
|
936
988
|
});
|
|
937
989
|
|
|
@@ -200,6 +200,15 @@ const NATIVE_RESPONSE = Object.assign({}, RESPONSE, {
|
|
|
200
200
|
value: 'Native body value',
|
|
201
201
|
},
|
|
202
202
|
},
|
|
203
|
+
{
|
|
204
|
+
id: 4,
|
|
205
|
+
img: {
|
|
206
|
+
url: 'https://localhost:8080/assets/favicon/favicon-16x16.png',
|
|
207
|
+
w: 16,
|
|
208
|
+
h: 16,
|
|
209
|
+
type: 1,
|
|
210
|
+
},
|
|
211
|
+
},
|
|
203
212
|
],
|
|
204
213
|
imptrackers: [
|
|
205
214
|
'http://localhost:8080/ve?d=ODE9ZSY2MTI1MjAzNjMzMzYxPXN0JjA0NWUwZDk0NTY5Yi05M2FiLWUwZTQtOWFjNy1hYWY0MzFiZj1kaXQmMj12',
|
|
@@ -567,15 +576,24 @@ describe('yieldlabBidAdapter', () => {
|
|
|
567
576
|
expect(result[0].native.image.url).to.equal('https://localhost:8080/yl-logo100x100.jpg');
|
|
568
577
|
expect(result[0].native.image.width).to.equal(100);
|
|
569
578
|
expect(result[0].native.image.height).to.equal(100);
|
|
579
|
+
expect(result[0].native.icon.url).to.equal('https://localhost:8080/assets/favicon/favicon-16x16.png');
|
|
580
|
+
expect(result[0].native.icon.width).to.equal(16);
|
|
581
|
+
expect(result[0].native.icon.height).to.equal(16);
|
|
570
582
|
expect(result[0].native.clickUrl).to.equal('https://www.yieldlab.de');
|
|
571
583
|
expect(result[0].native.impressionTrackers.length).to.equal(3);
|
|
572
|
-
expect(result[0].native.assets.length).to.equal(
|
|
584
|
+
expect(result[0].native.assets.length).to.equal(4);
|
|
573
585
|
const titleAsset = result[0].native.assets.find(asset => 'title' in asset);
|
|
574
|
-
const imageAsset = result[0].native.assets.find(asset =>
|
|
586
|
+
const imageAsset = result[0].native.assets.find((asset) => {
|
|
587
|
+
return asset?.img?.type === 3;
|
|
588
|
+
});
|
|
589
|
+
const iconAsset = result[0].native.assets.find((asset) => {
|
|
590
|
+
return asset?.img?.type === 1;
|
|
591
|
+
});
|
|
575
592
|
const bodyAsset = result[0].native.assets.find(asset => 'data' in asset);
|
|
576
593
|
expect(titleAsset).to.exist.and.to.have.nested.property('id', 1)
|
|
577
594
|
expect(imageAsset).to.exist.and.to.have.nested.property('id', 2)
|
|
578
595
|
expect(bodyAsset).to.exist.and.to.have.nested.property('id', 3)
|
|
596
|
+
expect(iconAsset).to.exist.and.to.have.nested.property('id', 4)
|
|
579
597
|
});
|
|
580
598
|
|
|
581
599
|
it('should add adUrl and default native assets when type is Native', () => {
|
|
@@ -601,6 +619,28 @@ describe('yieldlabBidAdapter', () => {
|
|
|
601
619
|
expect(result[0].native.image.height).to.equal(0);
|
|
602
620
|
});
|
|
603
621
|
|
|
622
|
+
it('should not add icon if not present in the native response', () => {
|
|
623
|
+
const NATIVE_RESPONSE_WITHOUT_ICON = Object.assign({}, NATIVE_RESPONSE, {
|
|
624
|
+
native: {
|
|
625
|
+
link: {
|
|
626
|
+
url: 'https://www.yieldlab.de',
|
|
627
|
+
},
|
|
628
|
+
assets: [
|
|
629
|
+
{
|
|
630
|
+
id: 1,
|
|
631
|
+
title: {
|
|
632
|
+
text: 'This is a great headline',
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
],
|
|
636
|
+
imptrackers: [],
|
|
637
|
+
},
|
|
638
|
+
});
|
|
639
|
+
const result = spec.interpretResponse({body: [NATIVE_RESPONSE_WITHOUT_ICON]}, {validBidRequests: [NATIVE_REQUEST()], queryParams: REQPARAMS});
|
|
640
|
+
expect(result[0].native.hasOwnProperty('icon')).to.be.false;
|
|
641
|
+
expect(result[0].native.title).to.equal('This is a great headline');
|
|
642
|
+
});
|
|
643
|
+
|
|
604
644
|
it('should append gdpr parameters to vastUrl', () => {
|
|
605
645
|
const result = spec.interpretResponse({body: [VIDEO_RESPONSE]}, {validBidRequests: [VIDEO_REQUEST()], queryParams: REQPARAMS_GDPR});
|
|
606
646
|
|
|
@@ -127,6 +127,29 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
127
127
|
timeout: 500
|
|
128
128
|
}];
|
|
129
129
|
|
|
130
|
+
const bannerWithFewSizesRequest = [{
|
|
131
|
+
bidId: 12345,
|
|
132
|
+
auctionId: 67890,
|
|
133
|
+
mediaTypes: {
|
|
134
|
+
banner: {
|
|
135
|
+
sizes: [[300, 250], [200, 240], [100, 150]],
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
refererInfo: {
|
|
139
|
+
page: 'http://www.zetaglobal.com/page?param=value',
|
|
140
|
+
domain: 'www.zetaglobal.com',
|
|
141
|
+
},
|
|
142
|
+
gdprConsent: {
|
|
143
|
+
gdprApplies: 1,
|
|
144
|
+
consentString: 'consentString'
|
|
145
|
+
},
|
|
146
|
+
schain: schain,
|
|
147
|
+
uspConsent: 'someCCPAString',
|
|
148
|
+
params: params,
|
|
149
|
+
userIdAsEids: eids,
|
|
150
|
+
timeout: 500
|
|
151
|
+
}];
|
|
152
|
+
|
|
130
153
|
const videoRequest = [{
|
|
131
154
|
bidId: 112233,
|
|
132
155
|
auctionId: 667788,
|
|
@@ -137,6 +160,8 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
137
160
|
mimes: ['video/mp4'],
|
|
138
161
|
minduration: 5,
|
|
139
162
|
maxduration: 30,
|
|
163
|
+
placement: 2,
|
|
164
|
+
plcmt: 1,
|
|
140
165
|
protocols: [2, 3]
|
|
141
166
|
}
|
|
142
167
|
},
|
|
@@ -146,6 +171,87 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
146
171
|
params: params
|
|
147
172
|
}];
|
|
148
173
|
|
|
174
|
+
const zetaResponse = {
|
|
175
|
+
body: {
|
|
176
|
+
id: '12345',
|
|
177
|
+
seatbid: [
|
|
178
|
+
{
|
|
179
|
+
bid: [
|
|
180
|
+
{
|
|
181
|
+
id: 'auctionId',
|
|
182
|
+
impid: 'impId',
|
|
183
|
+
price: 0.0,
|
|
184
|
+
adm: 'adMarkup',
|
|
185
|
+
crid: 'creativeId',
|
|
186
|
+
adomain: [
|
|
187
|
+
'https://example.com'
|
|
188
|
+
],
|
|
189
|
+
h: 250,
|
|
190
|
+
w: 300
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
cur: 'USD'
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const responseBannerPayload = {
|
|
200
|
+
data: {
|
|
201
|
+
id: '123',
|
|
202
|
+
site: {
|
|
203
|
+
id: 'SITE_ID',
|
|
204
|
+
page: 'page.com',
|
|
205
|
+
domain: 'domain.com'
|
|
206
|
+
},
|
|
207
|
+
user: {
|
|
208
|
+
id: '45asdf9tydhrty789adfad4678rew656789',
|
|
209
|
+
buyeruid: '1234567890'
|
|
210
|
+
},
|
|
211
|
+
cur: [
|
|
212
|
+
'USD'
|
|
213
|
+
],
|
|
214
|
+
imp: [
|
|
215
|
+
{
|
|
216
|
+
id: '1',
|
|
217
|
+
banner: {
|
|
218
|
+
h: 600,
|
|
219
|
+
w: 160
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
at: 1
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const responseVideoPayload = {
|
|
228
|
+
data: {
|
|
229
|
+
id: '123',
|
|
230
|
+
site: {
|
|
231
|
+
id: 'SITE_ID',
|
|
232
|
+
page: 'page.com',
|
|
233
|
+
domain: 'domain.com'
|
|
234
|
+
},
|
|
235
|
+
user: {
|
|
236
|
+
id: '45asdf9tydhrty789adfad4678rew656789',
|
|
237
|
+
buyeruid: '1234567890'
|
|
238
|
+
},
|
|
239
|
+
cur: [
|
|
240
|
+
'USD'
|
|
241
|
+
],
|
|
242
|
+
imp: [
|
|
243
|
+
{
|
|
244
|
+
id: '1',
|
|
245
|
+
video: {
|
|
246
|
+
h: 600,
|
|
247
|
+
w: 160
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
at: 1
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
|
|
149
255
|
it('Test the bid validation function', function () {
|
|
150
256
|
const validBid = spec.isBidRequestValid(bannerRequest[0]);
|
|
151
257
|
const invalidBid = spec.isBidRequestValid(null);
|
|
@@ -199,7 +305,12 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
199
305
|
'https://example.com'
|
|
200
306
|
],
|
|
201
307
|
h: 250,
|
|
202
|
-
w: 300
|
|
308
|
+
w: 300,
|
|
309
|
+
ext: {
|
|
310
|
+
prebid: {
|
|
311
|
+
type: 'banner'
|
|
312
|
+
}
|
|
313
|
+
}
|
|
203
314
|
},
|
|
204
315
|
{
|
|
205
316
|
id: 'auctionId2',
|
|
@@ -213,7 +324,9 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
213
324
|
h: 150,
|
|
214
325
|
w: 200,
|
|
215
326
|
ext: {
|
|
216
|
-
|
|
327
|
+
prebid: {
|
|
328
|
+
type: 'video'
|
|
329
|
+
}
|
|
217
330
|
}
|
|
218
331
|
},
|
|
219
332
|
{
|
|
@@ -226,7 +339,12 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
226
339
|
'https://example3.com'
|
|
227
340
|
],
|
|
228
341
|
h: 400,
|
|
229
|
-
w: 300
|
|
342
|
+
w: 300,
|
|
343
|
+
ext: {
|
|
344
|
+
prebid: {
|
|
345
|
+
type: 'video'
|
|
346
|
+
}
|
|
347
|
+
}
|
|
230
348
|
}
|
|
231
349
|
]
|
|
232
350
|
}
|
|
@@ -235,7 +353,7 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
235
353
|
}
|
|
236
354
|
};
|
|
237
355
|
|
|
238
|
-
const bidResponse = spec.interpretResponse(response,
|
|
356
|
+
const bidResponse = spec.interpretResponse(response, responseBannerPayload);
|
|
239
357
|
expect(bidResponse).to.not.be.empty;
|
|
240
358
|
|
|
241
359
|
const bid1 = bidResponse[0];
|
|
@@ -326,6 +444,8 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
326
444
|
expect(payload.imp[0].video.mimes).to.eql(videoRequest[0].mediaTypes.video.mimes);
|
|
327
445
|
expect(payload.imp[0].video.w).to.eql(720);
|
|
328
446
|
expect(payload.imp[0].video.h).to.eql(340);
|
|
447
|
+
expect(payload.imp[0].video.placement).to.eql(videoRequest[0].mediaTypes.video.placement);
|
|
448
|
+
expect(payload.imp[0].video.plcmt).to.eql(videoRequest[0].mediaTypes.video.plcmt);
|
|
329
449
|
|
|
330
450
|
expect(payload.imp[0].banner).to.be.undefined;
|
|
331
451
|
});
|
|
@@ -404,4 +524,84 @@ describe('Zeta Ssp Bid Adapter', function () {
|
|
|
404
524
|
|
|
405
525
|
expect(payload.imp[0].tagid).to.eql(params.tagid);
|
|
406
526
|
});
|
|
527
|
+
|
|
528
|
+
it('Test if only one size', function () {
|
|
529
|
+
const request = spec.buildRequests(bannerRequest, bannerRequest[0]);
|
|
530
|
+
const payload = JSON.parse(request.data);
|
|
531
|
+
|
|
532
|
+
// banner
|
|
533
|
+
expect(payload.imp[0].banner.w).to.eql(300);
|
|
534
|
+
expect(payload.imp[0].banner.h).to.eql(250);
|
|
535
|
+
|
|
536
|
+
expect(payload.imp[0].banner.format).to.be.undefined;
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
it('Test few sizes provided in format', function () {
|
|
540
|
+
const request = spec.buildRequests(bannerWithFewSizesRequest, bannerWithFewSizesRequest[0]);
|
|
541
|
+
const payload = JSON.parse(request.data);
|
|
542
|
+
|
|
543
|
+
// banner
|
|
544
|
+
expect(payload.imp[0].banner.w).to.eql(300);
|
|
545
|
+
expect(payload.imp[0].banner.h).to.eql(250);
|
|
546
|
+
|
|
547
|
+
expect(payload.imp[0].banner.format.length).to.eql(3);
|
|
548
|
+
|
|
549
|
+
// format[0]
|
|
550
|
+
expect(payload.imp[0].banner.format[0].w).to.eql(300);
|
|
551
|
+
expect(payload.imp[0].banner.format[0].h).to.eql(250);
|
|
552
|
+
|
|
553
|
+
// format[1]
|
|
554
|
+
expect(payload.imp[0].banner.format[1].w).to.eql(200);
|
|
555
|
+
expect(payload.imp[0].banner.format[1].h).to.eql(240);
|
|
556
|
+
|
|
557
|
+
// format[2]
|
|
558
|
+
expect(payload.imp[0].banner.format[2].w).to.eql(100);
|
|
559
|
+
expect(payload.imp[0].banner.format[2].h).to.eql(150);
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
it('Test the response default mediaType:banner', function () {
|
|
563
|
+
const bidResponse = spec.interpretResponse(zetaResponse, responseBannerPayload);
|
|
564
|
+
expect(bidResponse).to.not.be.empty;
|
|
565
|
+
expect(bidResponse.length).to.eql(1);
|
|
566
|
+
expect(bidResponse[0].mediaType).to.eql(BANNER);
|
|
567
|
+
expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
|
|
568
|
+
expect(bidResponse[0].vastXml).to.be.undefined;
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
it('Test the response default mediaType:video', function () {
|
|
572
|
+
const bidResponse = spec.interpretResponse(zetaResponse, responseVideoPayload);
|
|
573
|
+
expect(bidResponse).to.not.be.empty;
|
|
574
|
+
expect(bidResponse.length).to.eql(1);
|
|
575
|
+
expect(bidResponse[0].mediaType).to.eql(VIDEO);
|
|
576
|
+
expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
|
|
577
|
+
expect(bidResponse[0].vastXml).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
it('Test the response mediaType:video from ext param', function () {
|
|
581
|
+
zetaResponse.body.seatbid[0].bid[0].ext = {
|
|
582
|
+
prebid: {
|
|
583
|
+
type: 'video'
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
const bidResponse = spec.interpretResponse(zetaResponse, responseBannerPayload);
|
|
587
|
+
expect(bidResponse).to.not.be.empty;
|
|
588
|
+
expect(bidResponse.length).to.eql(1);
|
|
589
|
+
expect(bidResponse[0].mediaType).to.eql(VIDEO);
|
|
590
|
+
expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
|
|
591
|
+
expect(bidResponse[0].vastXml).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
|
|
592
|
+
});
|
|
593
|
+
|
|
594
|
+
it('Test the response mediaType:banner from ext param', function () {
|
|
595
|
+
zetaResponse.body.seatbid[0].bid[0].ext = {
|
|
596
|
+
prebid: {
|
|
597
|
+
type: 'banner'
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
const bidResponse = spec.interpretResponse(zetaResponse, responseVideoPayload);
|
|
601
|
+
expect(bidResponse).to.not.be.empty;
|
|
602
|
+
expect(bidResponse.length).to.eql(1);
|
|
603
|
+
expect(bidResponse[0].mediaType).to.eql(BANNER);
|
|
604
|
+
expect(bidResponse[0].ad).to.eql(zetaResponse.body.seatbid[0].bid[0].adm);
|
|
605
|
+
expect(bidResponse[0].vastXml).to.be.undefined;
|
|
606
|
+
});
|
|
407
607
|
});
|