prebid.js 7.26.0 → 7.28.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/workflows/issue_tracker.yml +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adhashBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -0
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/bucksenseBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.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/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -0
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.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/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +206 -202
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -0
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.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/sonobiAnalyticsAdapter.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/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/terceptAnalyticsAdapter.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/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/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/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/libraries/ortb2.5StrictTranslator/dsl.js +54 -0
- package/libraries/ortb2.5StrictTranslator/spec.js +81 -0
- package/libraries/ortb2.5StrictTranslator/translator.js +37 -0
- package/libraries/ortb2.5Translator/translator.js +82 -0
- package/modules/33acrossIdSystem.js +3 -0
- package/modules/adhashBidAdapter.js +115 -30
- package/modules/adhashBidAdapter.md +1 -3
- package/modules/admaticBidAdapter.js +10 -1
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/discoveryBidAdapter.js +3 -0
- package/modules/eplanningBidAdapter.js +2 -6
- package/modules/fluctBidAdapter.js +5 -0
- package/modules/gdprEnforcement.js +26 -24
- package/modules/genericAnalyticsAdapter.js +157 -0
- package/modules/geoedgeRtdProvider.js +22 -0
- package/modules/glomexBidAdapter.js +2 -0
- package/modules/gravitoIdSystem.js +3 -4
- package/modules/gridBidAdapter.js +1 -1
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +176 -0
- package/modules/growthCodeAnalyticsAdapter.md +41 -0
- package/modules/impactifyBidAdapter.js +19 -1
- package/modules/jwplayerRtdProvider.js +1 -2
- package/modules/kargoBidAdapter.js +1 -1
- package/modules/lassoBidAdapter.js +8 -4
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/liveIntentIdSystem.js +1 -2
- package/modules/mediagoBidAdapter.js +2 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/openxBidAdapter.md +15 -14
- package/modules/pubCommonId.js +2 -1
- package/modules/pubProvidedIdSystem.js +2 -0
- package/modules/rasBidAdapter.js +8 -3
- package/modules/rasBidAdapter.md +16 -15
- package/modules/redtramBidAdapter.js +155 -0
- package/modules/redtramBidAdapter.md +33 -0
- package/modules/riseBidAdapter.js +15 -0
- package/modules/riseBidAdapter.md +3 -3
- package/modules/rtbhouseBidAdapter.js +90 -29
- package/modules/rubiconBidAdapter.js +2 -1
- package/modules/seedtagBidAdapter.js +67 -56
- package/modules/seedtagBidAdapter.md +60 -0
- package/modules/sharedIdSystem.js +3 -1
- package/modules/smartxBidAdapter.js +1 -1
- package/modules/smnBidAdapter.md +52 -0
- package/modules/taboolaBidAdapter.js +20 -7
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +4 -0
- package/modules/vidazooBidAdapter.js +31 -8
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +10 -4
- package/modules/yieldliftBidAdapter.js +3 -3
- package/package.json +2 -2
- package/src/auction.js +30 -4
- package/src/consentHandler.js +8 -0
- package/src/constants.json +2 -1
- package/src/events.js +4 -0
- package/src/native.js +31 -20
- package/src/refererDetection.js +6 -1
- package/src/storageManager.js +6 -3
- package/test/helpers/analytics.js +34 -0
- package/test/helpers/refererDetectionHelper.js +88 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +119 -1
- package/test/spec/modules/33acrossIdSystem_spec.js +4 -1
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/adhashBidAdapter_spec.js +65 -11
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
- package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
- package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
- package/test/spec/modules/fpdModule_spec.js +1 -1
- package/test/spec/modules/gdprEnforcement_spec.js +115 -68
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
- package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
- package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
- package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
- package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
- package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
- package/test/spec/modules/rasBidAdapter_spec.js +5 -1
- package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
- package/test/spec/modules/riseBidAdapter_spec.js +24 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/taboolaBidAdapter_spec.js +39 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +50 -9
- package/test/spec/modules/vidazooBidAdapter_spec.js +173 -27
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/native_spec.js +68 -56
- package/test/spec/ortb2.5StrictTranslator/dsl_spec.js +137 -0
- package/test/spec/ortb2.5StrictTranslator/spec_spec.js +358 -0
- package/test/spec/ortb2.5StrictTranslator/translator_spec.js +16 -0
- package/test/spec/ortb2.5Translator/translator_spec.js +64 -0
- package/test/spec/refererDetection_spec.js +46 -95
- package/test/spec/unit/core/storageManager_spec.js +2 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { expect } from 'chai';
|
|
2
|
+
import {config} from 'src/config.js';
|
|
2
3
|
import { getRefererInfo } from 'src/refererDetection.js';
|
|
3
4
|
import {processFpd, coreStorage, resetEnrichments} from 'modules/enrichmentFpdModule.js';
|
|
4
5
|
import * as enrichmentModule from 'modules/enrichmentFpdModule.js';
|
|
@@ -77,10 +78,10 @@ describe('the first party data enrichment module', function() {
|
|
|
77
78
|
expect(validated.site.keywords).to.be.undefined;
|
|
78
79
|
});
|
|
79
80
|
|
|
80
|
-
it('adds page domain values if
|
|
81
|
+
it('adds page domain values if pageUrl url exists', function() {
|
|
82
|
+
config.setConfig({'pageUrl': 'https://www.subdomain.domain.co.uk/path?query=12345'});
|
|
81
83
|
width = 800;
|
|
82
84
|
height = 500;
|
|
83
|
-
canonical.href = 'https://www.subdomain.domain.co.uk/path?query=12345';
|
|
84
85
|
|
|
85
86
|
let validated = syncProcessFpd({}, {}).global;
|
|
86
87
|
|
|
@@ -152,9 +152,6 @@ describe('eplanning analytics adapter', function () {
|
|
|
152
152
|
|
|
153
153
|
// Step 10 check that the host to send the ajax request is configurable via options
|
|
154
154
|
expect(eplAnalyticsAdapter.context.host).to.equal(initOptions.host);
|
|
155
|
-
|
|
156
|
-
// Step 11 verify that we received 7 events (6 E-Planning events + 1 Clean.io event)
|
|
157
|
-
sinon.assert.callCount(eplAnalyticsAdapter.track, 7);
|
|
158
155
|
});
|
|
159
156
|
});
|
|
160
157
|
});
|
|
@@ -840,7 +840,7 @@ describe('E-Planning Adapter', function () {
|
|
|
840
840
|
});
|
|
841
841
|
|
|
842
842
|
it('should correctly map the parameters in the response vast', function () {
|
|
843
|
-
const bidResponse = spec.interpretResponse(responseVast, { adUnitToBidId: { [CLEAN_ADUNIT_CODE_VAST]: BID_ID } })[0];
|
|
843
|
+
const bidResponse = spec.interpretResponse(responseVast, { adUnitToBidId: { [CLEAN_ADUNIT_CODE_VAST]: BID_ID }, data: { vv: 2 } })[0];
|
|
844
844
|
const expectedResponse = {
|
|
845
845
|
requestId: BID_ID,
|
|
846
846
|
cpm: CPM,
|
|
@@ -851,13 +851,13 @@ describe('E-Planning Adapter', function () {
|
|
|
851
851
|
netRevenue: true,
|
|
852
852
|
currency: 'USD',
|
|
853
853
|
vastXml: ADM_VAST,
|
|
854
|
-
|
|
854
|
+
mediaType: VIDEO
|
|
855
855
|
};
|
|
856
856
|
expect(bidResponse).to.deep.equal(expectedResponse);
|
|
857
857
|
});
|
|
858
858
|
|
|
859
859
|
it('should correctly map the parameters in the response vast vv 1', function () {
|
|
860
|
-
const bidResponse = spec.interpretResponse(responseVastVV1, { adUnitToBidId: { [CLEAN_ADUNIT_CODE_VAST]: BID_ID } })[0];
|
|
860
|
+
const bidResponse = spec.interpretResponse(responseVastVV1, { adUnitToBidId: { [CLEAN_ADUNIT_CODE_VAST]: BID_ID }, data: { vv: 1 } })[0];
|
|
861
861
|
const expectedResponse = {
|
|
862
862
|
requestId: BID_ID,
|
|
863
863
|
cpm: CPM,
|
|
@@ -868,7 +868,7 @@ describe('E-Planning Adapter', function () {
|
|
|
868
868
|
netRevenue: true,
|
|
869
869
|
currency: 'USD',
|
|
870
870
|
vastXml: ADM_VAST_VV_1,
|
|
871
|
-
|
|
871
|
+
mediaType: VIDEO
|
|
872
872
|
};
|
|
873
873
|
expect(bidResponse).to.deep.equal(expectedResponse);
|
|
874
874
|
});
|
|
@@ -94,7 +94,12 @@ describe('fluctAdapter', function () {
|
|
|
94
94
|
expect(request.data.params.kv).to.eql(undefined);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
it('includes
|
|
97
|
+
it('includes no data.schain by default', function () {
|
|
98
|
+
const request = spec.buildRequests(bidRequests, bidderRequest)[0];
|
|
99
|
+
expect(request.data.schain).to.eql(undefined);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('includes filtered user.eids if any exist', function () {
|
|
98
103
|
const bidRequests2 = bidRequests.map(
|
|
99
104
|
(bidReq) => Object.assign(bidReq, {
|
|
100
105
|
userIdAsEids: [
|
|
@@ -175,6 +180,37 @@ describe('fluctAdapter', function () {
|
|
|
175
180
|
imsids: ['imsid1', 'imsid2']
|
|
176
181
|
});
|
|
177
182
|
});
|
|
183
|
+
|
|
184
|
+
it('includes data.schain if any exists', function () {
|
|
185
|
+
// this should be done by schain.js
|
|
186
|
+
const bidRequests2 = bidRequests.map(
|
|
187
|
+
(bidReq) => Object.assign(bidReq, {
|
|
188
|
+
schain: {
|
|
189
|
+
ver: '1.0',
|
|
190
|
+
complete: 1,
|
|
191
|
+
nodes: [
|
|
192
|
+
{
|
|
193
|
+
asi: 'example.com',
|
|
194
|
+
sid: 'publisher-id',
|
|
195
|
+
hp: 1
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
})
|
|
200
|
+
);
|
|
201
|
+
const request = spec.buildRequests(bidRequests2, bidderRequest)[0];
|
|
202
|
+
expect(request.data.schain).to.eql({
|
|
203
|
+
ver: '1.0',
|
|
204
|
+
complete: 1,
|
|
205
|
+
nodes: [
|
|
206
|
+
{
|
|
207
|
+
asi: 'example.com',
|
|
208
|
+
sid: 'publisher-id',
|
|
209
|
+
hp: 1
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
});
|
|
213
|
+
});
|
|
178
214
|
});
|
|
179
215
|
|
|
180
216
|
describe('interpretResponse', function() {
|
|
@@ -130,7 +130,7 @@ describe('the first party data module', function () {
|
|
|
130
130
|
}
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
config.setConfig({'pageUrl': 'https://www.domain.com/path?query=12345'});
|
|
134
134
|
width = 1120;
|
|
135
135
|
height = 750;
|
|
136
136
|
|
|
@@ -20,6 +20,7 @@ import * as events from 'src/events.js';
|
|
|
20
20
|
import 'modules/appnexusBidAdapter.js'; // some tests expect this to be in the adapter registry
|
|
21
21
|
import 'src/prebid.js'
|
|
22
22
|
import {hook} from '../../../src/hook.js';
|
|
23
|
+
import {VENDORLESS_GVLID} from '../../../src/consentHandler.js';
|
|
23
24
|
|
|
24
25
|
describe('gdpr enforcement', function () {
|
|
25
26
|
let nextFnSpy;
|
|
@@ -150,13 +151,13 @@ describe('gdpr enforcement', function () {
|
|
|
150
151
|
}
|
|
151
152
|
});
|
|
152
153
|
|
|
153
|
-
deviceAccessHook(nextFnSpy
|
|
154
|
+
deviceAccessHook(nextFnSpy);
|
|
154
155
|
expect(nextFnSpy.calledOnce).to.equal(true);
|
|
155
156
|
let result = {
|
|
156
157
|
hasEnforcementHook: true,
|
|
157
158
|
valid: false
|
|
158
159
|
}
|
|
159
|
-
sinon.assert.calledWith(nextFnSpy,
|
|
160
|
+
sinon.assert.calledWith(nextFnSpy, undefined, undefined, result);
|
|
160
161
|
});
|
|
161
162
|
|
|
162
163
|
it('should only check for consent for vendor exceptions when enforcePurpose and enforceVendor are false', function () {
|
|
@@ -178,8 +179,8 @@ describe('gdpr enforcement', function () {
|
|
|
178
179
|
consentData.apiVersion = 2;
|
|
179
180
|
gdprDataHandlerStub.returns(consentData);
|
|
180
181
|
|
|
181
|
-
deviceAccessHook(nextFnSpy,
|
|
182
|
-
deviceAccessHook(nextFnSpy,
|
|
182
|
+
deviceAccessHook(nextFnSpy, 1, 'appnexus');
|
|
183
|
+
deviceAccessHook(nextFnSpy, 5, 'rubicon');
|
|
183
184
|
expect(logWarnSpy.callCount).to.equal(0);
|
|
184
185
|
});
|
|
185
186
|
|
|
@@ -201,8 +202,8 @@ describe('gdpr enforcement', function () {
|
|
|
201
202
|
consentData.apiVersion = 2;
|
|
202
203
|
gdprDataHandlerStub.returns(consentData);
|
|
203
204
|
|
|
204
|
-
deviceAccessHook(nextFnSpy,
|
|
205
|
-
deviceAccessHook(nextFnSpy,
|
|
205
|
+
deviceAccessHook(nextFnSpy, 1, 'appnexus');
|
|
206
|
+
deviceAccessHook(nextFnSpy, 3, 'rubicon');
|
|
206
207
|
expect(logWarnSpy.callCount).to.equal(1);
|
|
207
208
|
});
|
|
208
209
|
|
|
@@ -224,13 +225,13 @@ describe('gdpr enforcement', function () {
|
|
|
224
225
|
consentData.apiVersion = 2;
|
|
225
226
|
gdprDataHandlerStub.returns(consentData);
|
|
226
227
|
|
|
227
|
-
deviceAccessHook(nextFnSpy,
|
|
228
|
+
deviceAccessHook(nextFnSpy, 1, 'appnexus');
|
|
228
229
|
expect(nextFnSpy.calledOnce).to.equal(true);
|
|
229
230
|
let result = {
|
|
230
231
|
hasEnforcementHook: true,
|
|
231
232
|
valid: true
|
|
232
233
|
}
|
|
233
|
-
sinon.assert.calledWith(nextFnSpy,
|
|
234
|
+
sinon.assert.calledWith(nextFnSpy, 1, 'appnexus', result);
|
|
234
235
|
});
|
|
235
236
|
|
|
236
237
|
it('should use gvlMapping set by publisher', function() {
|
|
@@ -255,13 +256,13 @@ describe('gdpr enforcement', function () {
|
|
|
255
256
|
consentData.apiVersion = 2;
|
|
256
257
|
gdprDataHandlerStub.returns(consentData);
|
|
257
258
|
|
|
258
|
-
deviceAccessHook(nextFnSpy,
|
|
259
|
+
deviceAccessHook(nextFnSpy, 1, 'appnexus');
|
|
259
260
|
expect(nextFnSpy.calledOnce).to.equal(true);
|
|
260
261
|
let result = {
|
|
261
262
|
hasEnforcementHook: true,
|
|
262
263
|
valid: true
|
|
263
264
|
}
|
|
264
|
-
sinon.assert.calledWith(nextFnSpy,
|
|
265
|
+
sinon.assert.calledWith(nextFnSpy, 4, 'appnexus', result);
|
|
265
266
|
config.resetConfig();
|
|
266
267
|
});
|
|
267
268
|
|
|
@@ -290,31 +291,17 @@ describe('gdpr enforcement', function () {
|
|
|
290
291
|
consentData.apiVersion = 2;
|
|
291
292
|
gdprDataHandlerStub.returns(consentData);
|
|
292
293
|
|
|
293
|
-
deviceAccessHook(nextFnSpy,
|
|
294
|
+
deviceAccessHook(nextFnSpy, 1, 'appnexus');
|
|
294
295
|
expect(nextFnSpy.calledOnce).to.equal(true);
|
|
295
296
|
let result = {
|
|
296
297
|
hasEnforcementHook: true,
|
|
297
298
|
valid: true
|
|
298
299
|
}
|
|
299
|
-
sinon.assert.calledWith(nextFnSpy,
|
|
300
|
+
sinon.assert.calledWith(nextFnSpy, 4, 'appnexus', result);
|
|
300
301
|
config.resetConfig();
|
|
301
302
|
curBidderStub.restore();
|
|
302
303
|
});
|
|
303
304
|
|
|
304
|
-
it(`should mark module as vendorless for rule validation when isVendorless = true and ${STRICT_STORAGE_ENFORCEMENT} is set`, () => {
|
|
305
|
-
setEnforcementConfig({
|
|
306
|
-
[STRICT_STORAGE_ENFORCEMENT]: true
|
|
307
|
-
});
|
|
308
|
-
let consentData = {
|
|
309
|
-
vendorData: staticConfig.consentData.getTCData,
|
|
310
|
-
gdprApplies: true
|
|
311
|
-
}
|
|
312
|
-
gdprDataHandlerStub.returns(consentData);
|
|
313
|
-
const validate = sinon.stub().callsFake(() => true);
|
|
314
|
-
deviceAccessHook(nextFnSpy, true, 123, 'mockModule', undefined, {validate});
|
|
315
|
-
expect(validate.args[0][4]('mockModule')).to.be.true;
|
|
316
|
-
});
|
|
317
|
-
|
|
318
305
|
it(`should not enforce consent for vendorless modules if ${STRICT_STORAGE_ENFORCEMENT} is not set`, () => {
|
|
319
306
|
setEnforcementConfig({});
|
|
320
307
|
let consentData = {
|
|
@@ -323,9 +310,9 @@ describe('gdpr enforcement', function () {
|
|
|
323
310
|
}
|
|
324
311
|
gdprDataHandlerStub.returns(consentData);
|
|
325
312
|
const validate = sinon.stub().callsFake(() => false);
|
|
326
|
-
deviceAccessHook(nextFnSpy,
|
|
313
|
+
deviceAccessHook(nextFnSpy, VENDORLESS_GVLID, 'mockModule', undefined, {validate});
|
|
327
314
|
sinon.assert.callCount(validate, 0);
|
|
328
|
-
sinon.assert.calledWith(nextFnSpy,
|
|
315
|
+
sinon.assert.calledWith(nextFnSpy, VENDORLESS_GVLID, 'mockModule', {hasEnforcementHook: true, valid: true});
|
|
329
316
|
})
|
|
330
317
|
});
|
|
331
318
|
|
|
@@ -804,11 +791,12 @@ describe('gdpr enforcement', function () {
|
|
|
804
791
|
});
|
|
805
792
|
|
|
806
793
|
describe('validateRules', function () {
|
|
807
|
-
const createGdprRule = (purposeName = 'storage', enforcePurpose = true, enforceVendor = true, vendorExceptions = []) => ({
|
|
794
|
+
const createGdprRule = (purposeName = 'storage', enforcePurpose = true, enforceVendor = true, vendorExceptions = [], softVendorExceptions = []) => ({
|
|
808
795
|
purpose: purposeName,
|
|
809
|
-
enforcePurpose
|
|
810
|
-
enforceVendor
|
|
811
|
-
vendorExceptions
|
|
796
|
+
enforcePurpose,
|
|
797
|
+
enforceVendor,
|
|
798
|
+
vendorExceptions,
|
|
799
|
+
softVendorExceptions,
|
|
812
800
|
});
|
|
813
801
|
|
|
814
802
|
const consentData = {
|
|
@@ -922,6 +910,19 @@ describe('gdpr enforcement', function () {
|
|
|
922
910
|
expect(isAllowed).to.equal(true);
|
|
923
911
|
});
|
|
924
912
|
|
|
913
|
+
describe('when the vendor has a softVendorException', () => {
|
|
914
|
+
const gdprRule = createGdprRule('storage', true, true, [], [vendorBlockedModule]);
|
|
915
|
+
|
|
916
|
+
it('should return false if general consent was not given', () => {
|
|
917
|
+
const isAllowed = validateRules(gdprRule, consentDataWithPurposeConsentFalse, vendorBlockedModule, vendorBlockedGvlId);
|
|
918
|
+
expect(isAllowed).to.be.false;
|
|
919
|
+
})
|
|
920
|
+
it('should return true if general consent was given', () => {
|
|
921
|
+
const isAllowed = validateRules(gdprRule, consentData, vendorBlockedModule, vendorBlockedGvlId);
|
|
922
|
+
expect(isAllowed).to.be.true;
|
|
923
|
+
})
|
|
924
|
+
})
|
|
925
|
+
|
|
925
926
|
describe('when module does not need vendor consent', () => {
|
|
926
927
|
Object.entries({
|
|
927
928
|
'storage': 1,
|
|
@@ -937,11 +938,9 @@ describe('gdpr enforcement', function () {
|
|
|
937
938
|
it(`should be ${t} when purpose is ${t}`, () => {
|
|
938
939
|
const consent = utils.deepClone(consentData);
|
|
939
940
|
consent.vendorData.purpose.consents[purposeNo] = consentGiven;
|
|
940
|
-
// vendor consent (and gvlid) should be ignored
|
|
941
|
-
consent.vendorData.vendor.consents[123] = !consentGiven;
|
|
942
941
|
// take legitimate interest out of the picture for this test
|
|
943
942
|
consent.vendorData.purpose.legitimateInterests = {};
|
|
944
|
-
const actual = validateRules(rule, consent, 'mockModule',
|
|
943
|
+
const actual = validateRules(rule, consent, 'mockModule', VENDORLESS_GVLID);
|
|
945
944
|
expect(actual).to.equal(consentGiven);
|
|
946
945
|
})
|
|
947
946
|
})
|
|
@@ -1131,56 +1130,104 @@ describe('gdpr enforcement', function () {
|
|
|
1131
1130
|
})
|
|
1132
1131
|
});
|
|
1133
1132
|
|
|
1134
|
-
describe('
|
|
1133
|
+
describe('gvlid resolution', () => {
|
|
1135
1134
|
let sandbox;
|
|
1136
|
-
let getGvlidForBidAdapterStub;
|
|
1137
|
-
let getGvlidForUserIdModuleStub;
|
|
1138
|
-
let getGvlidForAnalyticsAdapterStub;
|
|
1139
1135
|
beforeEach(function() {
|
|
1140
1136
|
sandbox = sinon.createSandbox();
|
|
1141
|
-
getGvlidForBidAdapterStub = sandbox.stub(internal, 'getGvlidForBidAdapter');
|
|
1142
|
-
getGvlidForUserIdModuleStub = sandbox.stub(internal, 'getGvlidForUserIdModule');
|
|
1143
|
-
getGvlidForAnalyticsAdapterStub = sandbox.stub(internal, 'getGvlidForAnalyticsAdapter');
|
|
1144
1137
|
});
|
|
1138
|
+
|
|
1145
1139
|
afterEach(function() {
|
|
1146
1140
|
sandbox.restore();
|
|
1147
1141
|
config.resetConfig();
|
|
1148
1142
|
});
|
|
1149
1143
|
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1144
|
+
describe('getGvlid', function() {
|
|
1145
|
+
let getGvlidForBidAdapterStub;
|
|
1146
|
+
let getGvlidForUserIdModuleStub;
|
|
1147
|
+
let getGvlidForAnalyticsAdapterStub;
|
|
1148
|
+
beforeEach(function() {
|
|
1149
|
+
getGvlidForBidAdapterStub = sandbox.stub(internal, 'getGvlidForBidAdapter');
|
|
1150
|
+
getGvlidForUserIdModuleStub = sandbox.stub(internal, 'getGvlidForUserIdModule');
|
|
1151
|
+
getGvlidForAnalyticsAdapterStub = sandbox.stub(internal, 'getGvlidForAnalyticsAdapter');
|
|
1152
|
+
});
|
|
1154
1153
|
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1154
|
+
it('should return "null" if called without passing any argument', function() {
|
|
1155
|
+
const gvlid = getGvlid();
|
|
1156
|
+
expect(gvlid).to.equal(null);
|
|
1157
|
+
});
|
|
1159
1158
|
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1159
|
+
it('should return "null" if GVL ID is not defined for any of these modules: Bid adapter, UserId submodule and Analytics adapter', function() {
|
|
1160
|
+
getGvlidForBidAdapterStub.withArgs('moduleA').returns(null);
|
|
1161
|
+
getGvlidForUserIdModuleStub.withArgs('moduleA').returns(null);
|
|
1162
|
+
getGvlidForAnalyticsAdapterStub.withArgs('moduleA').returns(null);
|
|
1163
1163
|
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1164
|
+
const gvlid = getGvlid('moduleA');
|
|
1165
|
+
expect(gvlid).to.equal(null);
|
|
1166
|
+
});
|
|
1167
|
+
|
|
1168
|
+
it('should return the GVL ID from gvlMapping if it is defined in setConfig', function() {
|
|
1169
|
+
config.setConfig({
|
|
1170
|
+
gvlMapping: {
|
|
1171
|
+
moduleA: 1
|
|
1172
|
+
}
|
|
1173
|
+
});
|
|
1174
|
+
|
|
1175
|
+
// Actual GVL ID for moduleA is 2, as defined on its the bidAdapter.js file.
|
|
1176
|
+
getGvlidForBidAdapterStub.withArgs('moduleA').returns(2);
|
|
1177
|
+
|
|
1178
|
+
const gvlid = getGvlid('moduleA');
|
|
1179
|
+
expect(gvlid).to.equal(1);
|
|
1169
1180
|
});
|
|
1170
1181
|
|
|
1171
|
-
|
|
1172
|
-
|
|
1182
|
+
it('should return the GVL ID by calling getGvlidForBidAdapter -> getGvlidForUserIdModule -> getGvlidForAnalyticsAdapter in sequence', function() {
|
|
1183
|
+
getGvlidForBidAdapterStub.withArgs('moduleA').returns(null);
|
|
1184
|
+
getGvlidForUserIdModuleStub.withArgs('moduleA').returns(null);
|
|
1185
|
+
getGvlidForAnalyticsAdapterStub.withArgs('moduleA').returns(7);
|
|
1186
|
+
|
|
1187
|
+
expect(getGvlid('moduleA')).to.equal(7);
|
|
1188
|
+
});
|
|
1173
1189
|
|
|
1174
|
-
|
|
1175
|
-
|
|
1190
|
+
it('should pass extra arguments to analytics\' getGvlid', () => {
|
|
1191
|
+
getGvlidForAnalyticsAdapterStub.withArgs('analytics').returns(321);
|
|
1192
|
+
const cfg = {some: 'args'};
|
|
1193
|
+
getGvlid('analytics', cfg);
|
|
1194
|
+
sinon.assert.calledWith(getGvlidForAnalyticsAdapterStub, 'analytics', cfg);
|
|
1195
|
+
});
|
|
1176
1196
|
});
|
|
1177
1197
|
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1198
|
+
describe('getGvlidForAnalyticsAdapter', () => {
|
|
1199
|
+
let getAnalyticsAdapter, adapter, adapterEntry;
|
|
1200
|
+
|
|
1201
|
+
beforeEach(() => {
|
|
1202
|
+
adapter = {};
|
|
1203
|
+
adapterEntry = {
|
|
1204
|
+
adapter
|
|
1205
|
+
};
|
|
1206
|
+
getAnalyticsAdapter = sandbox.stub(adapterManager, 'getAnalyticsAdapter');
|
|
1207
|
+
getAnalyticsAdapter.withArgs('analytics').returns(adapterEntry);
|
|
1208
|
+
});
|
|
1209
|
+
|
|
1210
|
+
it('should return gvlid from adapterManager if defined', () => {
|
|
1211
|
+
adapterEntry.gvlid = 123;
|
|
1212
|
+
adapter.gvlid = 321
|
|
1213
|
+
expect(internal.getGvlidForAnalyticsAdapter('analytics')).to.equal(123);
|
|
1214
|
+
});
|
|
1215
|
+
|
|
1216
|
+
it('should return gvlid from adapter if defined', () => {
|
|
1217
|
+
adapter.gvlid = 321;
|
|
1218
|
+
expect(internal.getGvlidForAnalyticsAdapter('analytics')).to.equal(321);
|
|
1219
|
+
});
|
|
1182
1220
|
|
|
1183
|
-
|
|
1221
|
+
it('should invoke adapter.gvlid if it\'s a function', () => {
|
|
1222
|
+
adapter.gvlid = (cfg) => cfg.k
|
|
1223
|
+
const cfg = {k: 231};
|
|
1224
|
+
expect(internal.getGvlidForAnalyticsAdapter('analytics', cfg)).to.eql(231);
|
|
1225
|
+
});
|
|
1226
|
+
|
|
1227
|
+
it('should not choke if adapter gvlid fn throws', () => {
|
|
1228
|
+
adapter.gvlid = () => { throw new Error(); };
|
|
1229
|
+
expect(internal.getGvlidForAnalyticsAdapter('analytics')).to.not.be.ok;
|
|
1230
|
+
});
|
|
1184
1231
|
});
|
|
1185
|
-
})
|
|
1232
|
+
})
|
|
1186
1233
|
});
|