prebid.js 8.3.0 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/a1MediaRtdProvider.js +1 -0
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/admixerIdSystem.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtelligentIdSystem.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beachfrontBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/brandmetricsRtdProvider.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/britepoolIdSystem.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagementGpp.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/criteoIdSystem.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/czechAdIdSystem.js +1 -1
- package/dist/dacIdSystem.js +1 -1
- package/dist/deepintentDpesIdSystem.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dmdIdSystem.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/fabrickIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/geolocationRtdProvider.js +1 -0
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronIdSystem.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/identityLinkIdSystem.js +1 -1
- package/dist/idxIdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/imuIdSystem.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/invibesBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justIdSystem.js +1 -1
- package/dist/justpremiumBidAdapter.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/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.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/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/merkleIdSystem.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/mwOpenLinkIdSystem.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/netIdSystem.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +185 -182
- package/dist/novatiqIdSystem.js +1 -1
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/oneKeyIdSystem.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/ozoneBidAdapter.js +1 -1
- package/dist/pairIdSystem.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pulsepointBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/silverpushBidAdapter.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/ssmasBidAdapter.js +1 -0
- 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/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/tncIdSystem.js +1 -1
- package/dist/topicsFpdModule.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unifiedIdSystem.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/utiqSystem.js +1 -1
- package/dist/verizonMediaIdSystem.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/voxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.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/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeotapIdPlusIdSystem.js +1 -1
- package/integrationExamples/gpt/adUnitFloors.html +0 -1
- package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
- package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -2
- package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
- package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
- package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
- package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
- package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +1 -1
- package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +1 -1
- package/integrationExamples/videoModule/videojs/eventListeners.html +1 -1
- package/integrationExamples/videoModule/videojs/eventsUI.html +1 -1
- package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +1 -1
- package/integrationExamples/videoModule/videojs/mediaMetadata.html +1 -1
- package/integrationExamples/videoModule/videojs/playlist.html +1 -1
- package/modules/.submodules.json +1 -0
- package/modules/33acrossBidAdapter.js +24 -14
- package/modules/33acrossIdSystem.js +24 -4
- package/modules/a1MediaRtdProvider.js +92 -0
- package/modules/a1MediaRtdProvider.md +46 -0
- package/modules/adagioBidAdapter.js +0 -1
- package/modules/adfBidAdapter.js +4 -1
- package/modules/adkernelAdnBidAdapter.js +1 -1
- package/modules/adkernelBidAdapter.js +10 -3
- package/modules/admanBidAdapter.js +4 -0
- package/modules/admixerIdSystem.js +6 -0
- package/modules/adnuntiusBidAdapter.js +5 -13
- package/modules/adqueryIdSystem.js +6 -0
- package/modules/adtelligentIdSystem.js +6 -0
- package/modules/adyoulikeBidAdapter.js +6 -3
- package/modules/amxIdSystem.js +6 -0
- package/modules/beachfrontBidAdapter.js +32 -6
- package/modules/brandmetricsRtdProvider.js +36 -2
- package/modules/brandmetricsRtdProvider.md +17 -2
- package/modules/britepoolIdSystem.js +6 -0
- package/modules/connectIdSystem.js +6 -0
- package/modules/consentManagementGpp.js +10 -1
- package/modules/consumableBidAdapter.js +9 -1
- package/modules/criteoIdSystem.js +6 -0
- package/modules/czechAdIdSystem.js +6 -0
- package/modules/dacIdSystem.js +6 -0
- package/modules/deepintentDpesIdSystem.js +7 -2
- package/modules/dmdIdSystem.js +6 -0
- package/modules/euidIdSystem.js +9 -0
- package/modules/fabrickIdSystem.js +6 -0
- package/modules/ftrackIdSystem.js +16 -0
- package/modules/gdprEnforcement.js +27 -22
- package/modules/geolocationRtdProvider.js +65 -0
- package/modules/gravitoIdSystem.js +6 -0
- package/modules/greenbidsRtdProvider.js +1 -1
- package/modules/gridBidAdapter.js +19 -0
- package/modules/growthCodeIdSystem.js +20 -1
- package/modules/hadronIdSystem.js +6 -0
- package/modules/id5IdSystem.js +34 -8
- package/modules/identityLinkIdSystem.js +6 -0
- package/modules/idxIdSystem.js +6 -0
- package/modules/imdsBidAdapter.js +38 -14
- package/modules/imuIdSystem.js +10 -0
- package/modules/intentIqIdSystem.js +6 -0
- package/modules/invibesBidAdapter.js +5 -5
- package/modules/ixBidAdapter.js +56 -2
- package/modules/justIdSystem.js +6 -0
- package/modules/kargoBidAdapter.js +4 -0
- package/modules/kinessoIdSystem.js +7 -2
- package/modules/liveIntentIdSystem.js +53 -0
- package/modules/lotamePanoramaIdSystem.js +6 -0
- package/modules/merkleIdSystem.js +24 -0
- package/modules/minutemediaBidAdapter.js +17 -2
- package/modules/mwOpenLinkIdSystem.js +6 -0
- package/modules/naveggIdSystem.js +6 -0
- package/modules/netIdSystem.js +6 -0
- package/modules/novatiqIdSystem.js +12 -0
- package/modules/oguryBidAdapter.js +29 -16
- package/modules/oneKeyIdSystem.js +26 -0
- package/modules/ozoneBidAdapter.js +65 -18
- package/modules/ozoneBidAdapter.md +3 -1
- package/modules/pairIdSystem.js +6 -0
- package/modules/parrableIdSystem.js +38 -2
- package/modules/publinkIdSystem.js +7 -1
- package/modules/pubmaticBidAdapter.js +16 -1
- package/modules/pulsepointBidAdapter.js +63 -424
- package/modules/pulsepointBidAdapter.md +39 -45
- package/modules/quantcastIdSystem.js +6 -0
- package/modules/rubiconBidAdapter.js +9 -0
- package/modules/sharedIdSystem.js +7 -1
- package/modules/silverpushBidAdapter.js +2 -2
- package/modules/sovrnBidAdapter.js +5 -1
- package/modules/ssmasBidAdapter.js +126 -0
- package/modules/ssmasBidAdapter.md +35 -0
- package/modules/sspBCBidAdapter.js +36 -13
- package/modules/stroeerCoreBidAdapter.js +2 -3
- package/modules/tapadIdSystem.js +6 -0
- package/modules/teadsBidAdapter.js +2 -0
- package/modules/tncIdSystem.js +6 -0
- package/modules/topicsFpdModule.js +4 -1
- package/modules/topicsFpdModule.md +4 -0
- package/modules/tripleliftBidAdapter.js +5 -0
- package/modules/uid2IdSystem.js +14 -0
- package/modules/unifiedIdSystem.js +11 -0
- package/modules/userId/eids.js +6 -445
- package/modules/userId/index.js +38 -26
- package/modules/utiqSystem.js +9 -0
- package/modules/verizonMediaIdSystem.js +6 -0
- package/modules/vidazooBidAdapter.js +5 -7
- package/modules/voxBidAdapter.js +16 -5
- package/modules/vrtcalBidAdapter.js +10 -6
- package/modules/yahoosspBidAdapter.js +38 -33
- package/modules/yahoosspBidAdapter.md +96 -95
- package/modules/yandexBidAdapter.js +12 -15
- package/modules/zeotapIdPlusIdSystem.js +6 -0
- package/package.json +1 -1
- package/src/activities/redactor.js +1 -1
- package/src/adapters/bidderFactory.js +15 -6
- package/src/adloader.js +2 -1
- package/src/auction.js +24 -2
- package/src/constants.json +3 -1
- package/src/fpd/sua.js +8 -2
- package/test/spec/auctionmanager_spec.js +29 -1
- package/test/spec/fpd/enrichment_spec.js +7 -1
- package/test/spec/fpd/sua_spec.js +12 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +188 -35
- package/test/spec/modules/33acrossIdSystem_spec.js +122 -27
- package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
- package/test/spec/modules/adfBidAdapter_spec.js +47 -0
- package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
- package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
- package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +69 -7
- package/test/spec/modules/consentManagementGpp_spec.js +16 -0
- package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
- package/test/spec/modules/gdprEnforcement_spec.js +43 -2
- package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
- package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
- package/test/spec/modules/gridBidAdapter_spec.js +42 -0
- package/test/spec/modules/id5IdSystem_spec.js +18 -0
- package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
- package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
- package/test/spec/modules/ixBidAdapter_spec.js +95 -5
- package/test/spec/modules/kargoBidAdapter_spec.js +121 -106
- package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
- package/test/spec/modules/minutemediaBidAdapter_spec.js +36 -5
- package/test/spec/modules/oguryBidAdapter_spec.js +208 -108
- package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
- package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
- package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
- package/test/spec/modules/priceFloors_spec.js +14 -0
- package/test/spec/modules/pubmaticBidAdapter_spec.js +125 -373
- package/test/spec/modules/pulsepointBidAdapter_spec.js +225 -486
- package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
- package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
- package/test/spec/modules/sovrnBidAdapter_spec.js +24 -4
- package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +8 -5
- package/test/spec/modules/teadsBidAdapter_spec.js +70 -21
- package/test/spec/modules/topicsFpdModule_spec.js +10 -4
- package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
- package/test/spec/modules/userId_spec.js +116 -7
- package/test/spec/modules/vidazooBidAdapter_spec.js +0 -5
- package/test/spec/modules/voxBidAdapter_spec.js +93 -0
- package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
- package/test/spec/modules/xeBidAdapter_spec.js +366 -368
- package/test/spec/modules/yahoosspBidAdapter_spec.js +405 -330
- package/test/spec/modules/yandexBidAdapter_spec.js +21 -3
- package/test/spec/unit/core/bidderFactory_spec.js +61 -14
- package/integrationExamples/gpt/inskin_example.html +0 -100
- package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { MODULE_TYPE_RTD } from '../src/activities/modules.js';
|
|
2
|
+
import { loadExternalScript } from '../src/adloader.js';
|
|
3
|
+
import { submodule } from '../src/hook.js';
|
|
4
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
5
|
+
import { isEmptyStr, mergeDeep } from '../src/utils.js';
|
|
6
|
+
|
|
7
|
+
const REAL_TIME_MODULE = 'realTimeData';
|
|
8
|
+
const MODULE_NAME = 'a1Media';
|
|
9
|
+
const SCRIPT_URL = 'https://linkback.contentsfeed.com/src';
|
|
10
|
+
export const A1_SEG_KEY = '__a1tg';
|
|
11
|
+
export const A1_AUD_KEY = 'a1gid';
|
|
12
|
+
|
|
13
|
+
export const storage = getStorageManager({moduleType: MODULE_TYPE_RTD, moduleName: MODULE_NAME});
|
|
14
|
+
|
|
15
|
+
/** @type {RtdSubmodule} */
|
|
16
|
+
export const subModuleObj = {
|
|
17
|
+
name: MODULE_NAME,
|
|
18
|
+
init: init,
|
|
19
|
+
getBidRequestData: alterBidRequests,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export function getStorageData(key) {
|
|
23
|
+
let storageValue = '';
|
|
24
|
+
if (storage.getDataFromLocalStorage(key)) {
|
|
25
|
+
storageValue = storage.getDataFromLocalStorage(key);
|
|
26
|
+
} else if (storage.getCookie(key)) {
|
|
27
|
+
storageValue = storage.getCookie(key);
|
|
28
|
+
}
|
|
29
|
+
return storageValue;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function loadLbScript(tagname) {
|
|
33
|
+
const linkback = window.linkback = window.linkback || {};
|
|
34
|
+
if (!linkback.l) {
|
|
35
|
+
linkback.l = true;
|
|
36
|
+
|
|
37
|
+
const scriptUrl = `${SCRIPT_URL}/${tagname}`;
|
|
38
|
+
loadExternalScript(scriptUrl, MODULE_NAME);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function init(config, userConsent) {
|
|
43
|
+
const tagId = config.params.tagId;
|
|
44
|
+
if (tagId && !isEmptyStr(tagId)) {
|
|
45
|
+
loadLbScript(config.params.tagId);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (!isEmptyStr(getStorageData(A1_SEG_KEY))) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function alterBidRequests(reqBidsConfigObj, callback, config, userConsent) {
|
|
55
|
+
const a1seg = getStorageData(A1_SEG_KEY);
|
|
56
|
+
const a1gid = getStorageData(A1_AUD_KEY);
|
|
57
|
+
|
|
58
|
+
const a1UserSegData = {
|
|
59
|
+
name: 'a1mediagroup.com',
|
|
60
|
+
ext: {
|
|
61
|
+
segtax: 900
|
|
62
|
+
},
|
|
63
|
+
segment: a1seg.split(',').map(x => ({id: x}))
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const a1UserEid = {
|
|
67
|
+
source: 'a1mediagroup.com',
|
|
68
|
+
uids: [
|
|
69
|
+
{
|
|
70
|
+
id: a1gid,
|
|
71
|
+
atype: 1
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const a1Ortb2 = {
|
|
77
|
+
user: {
|
|
78
|
+
data: [
|
|
79
|
+
a1UserSegData
|
|
80
|
+
],
|
|
81
|
+
ext: {
|
|
82
|
+
eids: [
|
|
83
|
+
a1UserEid
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
mergeDeep(reqBidsConfigObj.ortb2Fragments.global, a1Ortb2);
|
|
89
|
+
callback();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
submodule(REAL_TIME_MODULE, subModuleObj);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: A1Media Rtd Provider
|
|
4
|
+
Module Type: Rtd Provider
|
|
5
|
+
Maintainer: dev@a1mediagroup.co.kr
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
This module loads external code using the passed parameter (params.tagId).
|
|
10
|
+
|
|
11
|
+
The A1Media RTD module loads A1Media script for obtains user segments, and provides user segment data to bid-requests.<br />
|
|
12
|
+
to get user segments, you will need a1media script customized for site.
|
|
13
|
+
|
|
14
|
+
To use this module, you’ll need to work with [A1MediaGroup](https://www.a1mediagroup.com/) to get an account and receive instructions on how to set up your pages and ad server.
|
|
15
|
+
|
|
16
|
+
Contact dev@a1mediagroup.co.kr for information.
|
|
17
|
+
|
|
18
|
+
### Integration
|
|
19
|
+
|
|
20
|
+
1) Build the A1Media RTD Module into the Prebid.js package with:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
gulp build --modules=a1MediaRtdProvider,...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
2) Use `setConfig` to instruct Prebid.js to initilaize the A1Media RTD module, as specified below.
|
|
27
|
+
|
|
28
|
+
### Configuration
|
|
29
|
+
|
|
30
|
+
```javascript
|
|
31
|
+
pbjs.setConfig({
|
|
32
|
+
realTimeData: {
|
|
33
|
+
auctionDelay: 1000,
|
|
34
|
+
dataProviders: [
|
|
35
|
+
{
|
|
36
|
+
name: "a1Media",
|
|
37
|
+
waitForIt: true,
|
|
38
|
+
params: {
|
|
39
|
+
// 'tagId' is unique value for each account.
|
|
40
|
+
tagId: 'lb4test'
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
```
|
package/modules/adfBidAdapter.js
CHANGED
|
@@ -69,8 +69,11 @@ export const spec = {
|
|
|
69
69
|
bid.netRevenue = pt;
|
|
70
70
|
|
|
71
71
|
const floorInfo = bid.getFloor ? bid.getFloor({
|
|
72
|
-
currency: currency || 'USD'
|
|
72
|
+
currency: currency || 'USD',
|
|
73
|
+
size: '*',
|
|
74
|
+
mediaType: '*'
|
|
73
75
|
}) : {};
|
|
76
|
+
|
|
74
77
|
const bidfloor = floorInfo.floor;
|
|
75
78
|
const bidfloorcur = floorInfo.currency;
|
|
76
79
|
const { mid, inv, mname } = bid.params;
|
|
@@ -159,7 +159,7 @@ export const spec = {
|
|
|
159
159
|
code: 'adkernelAdn',
|
|
160
160
|
gvlid: GVLID,
|
|
161
161
|
supportedMediaTypes: [BANNER, VIDEO],
|
|
162
|
-
aliases: ['engagesimply'],
|
|
162
|
+
aliases: ['engagesimply', 'adpluto_dsp'],
|
|
163
163
|
|
|
164
164
|
isBidRequestValid: function(bidRequest) {
|
|
165
165
|
return 'params' in bidRequest &&
|
|
@@ -100,7 +100,8 @@ export const spec = {
|
|
|
100
100
|
{code: 'bidbuddy'},
|
|
101
101
|
{code: 'adliveconnect'},
|
|
102
102
|
{code: 'didnadisplay'},
|
|
103
|
-
{code: 'qortex'}
|
|
103
|
+
{code: 'qortex'},
|
|
104
|
+
{code: 'adpluto'}
|
|
104
105
|
],
|
|
105
106
|
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
106
107
|
|
|
@@ -456,7 +457,9 @@ function makeUser(bidderRequest, fpd) {
|
|
|
456
457
|
if (eids) {
|
|
457
458
|
deepSetValue(user, 'ext.eids', eids);
|
|
458
459
|
}
|
|
459
|
-
if (!isEmpty(user)) {
|
|
460
|
+
if (!isEmpty(user)) {
|
|
461
|
+
return {user: user};
|
|
462
|
+
}
|
|
460
463
|
}
|
|
461
464
|
|
|
462
465
|
/**
|
|
@@ -465,13 +468,17 @@ function makeUser(bidderRequest, fpd) {
|
|
|
465
468
|
* @returns {{regs: Object} | undefined}
|
|
466
469
|
*/
|
|
467
470
|
function makeRegulations(bidderRequest) {
|
|
468
|
-
let {gdprConsent, uspConsent} = bidderRequest;
|
|
471
|
+
let {gdprConsent, uspConsent, gppConsent} = bidderRequest;
|
|
469
472
|
let regs = {};
|
|
470
473
|
if (gdprConsent) {
|
|
471
474
|
if (gdprConsent.gdprApplies !== undefined) {
|
|
472
475
|
deepSetValue(regs, 'regs.ext.gdpr', ~~gdprConsent.gdprApplies);
|
|
473
476
|
}
|
|
474
477
|
}
|
|
478
|
+
if (gppConsent) {
|
|
479
|
+
deepSetValue(regs, 'regs.gpp', gppConsent.gppString);
|
|
480
|
+
deepSetValue(regs, 'regs.gpp_sid', gppConsent.applicableSections);
|
|
481
|
+
}
|
|
475
482
|
if (uspConsent) {
|
|
476
483
|
deepSetValue(regs, 'regs.ext.us_privacy', uspConsent);
|
|
477
484
|
}
|
|
@@ -66,6 +66,7 @@ export const spec = {
|
|
|
66
66
|
buildRequests: (validBidRequests = [], bidderRequest) => {
|
|
67
67
|
// convert Native ORTB definition to old-style prebid native definition
|
|
68
68
|
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
69
|
+
const content = deepAccess(bidderRequest, 'ortb2.site.content', config.getAnyConfig('ortb2.site.content'));
|
|
69
70
|
|
|
70
71
|
let winTop = window;
|
|
71
72
|
let location;
|
|
@@ -95,6 +96,9 @@ export const spec = {
|
|
|
95
96
|
if (bidderRequest.gdprConsent) {
|
|
96
97
|
request.gdpr = bidderRequest.gdprConsent
|
|
97
98
|
}
|
|
99
|
+
if (content) {
|
|
100
|
+
request.content = content;
|
|
101
|
+
}
|
|
98
102
|
}
|
|
99
103
|
const len = validBidRequests.length;
|
|
100
104
|
|
|
@@ -6,11 +6,9 @@ import { getStorageManager } from '../src/storageManager.js';
|
|
|
6
6
|
|
|
7
7
|
const BIDDER_CODE = 'adnuntius';
|
|
8
8
|
const BIDDER_CODE_DEAL_ALIAS_BASE = 'adndeal';
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const BIDDER_CODE_DEAL_ALIAS_4 = BIDDER_CODE_DEAL_ALIAS_BASE + '4';
|
|
13
|
-
const BIDDER_CODE_DEAL_ALIAS_5 = BIDDER_CODE_DEAL_ALIAS_BASE + '5';
|
|
9
|
+
const BIDDER_CODE_DEAL_ALIASES = [1, 2, 3, 4, 5].map(num => {
|
|
10
|
+
return BIDDER_CODE_DEAL_ALIAS_BASE + num;
|
|
11
|
+
});
|
|
14
12
|
const ENDPOINT_URL = 'https://ads.adnuntius.delivery/i';
|
|
15
13
|
const ENDPOINT_URL_EUROPE = 'https://europe.delivery.adnuntius.com/i';
|
|
16
14
|
const GVLID = 855;
|
|
@@ -54,13 +52,7 @@ const AU_ID_REGEX = new RegExp('^[0-9A-Fa-f]{1,20}$');
|
|
|
54
52
|
|
|
55
53
|
export const spec = {
|
|
56
54
|
code: BIDDER_CODE,
|
|
57
|
-
aliases:
|
|
58
|
-
BIDDER_CODE_DEAL_ALIAS_1,
|
|
59
|
-
BIDDER_CODE_DEAL_ALIAS_2,
|
|
60
|
-
BIDDER_CODE_DEAL_ALIAS_3,
|
|
61
|
-
BIDDER_CODE_DEAL_ALIAS_4,
|
|
62
|
-
BIDDER_CODE_DEAL_ALIAS_5
|
|
63
|
-
],
|
|
55
|
+
aliases: BIDDER_CODE_DEAL_ALIASES,
|
|
64
56
|
gvlid: GVLID,
|
|
65
57
|
supportedMediaTypes: [BANNER, VIDEO],
|
|
66
58
|
isBidRequestValid: function (bid) {
|
|
@@ -178,7 +170,7 @@ export const spec = {
|
|
|
178
170
|
|
|
179
171
|
const hasBidAdUnits = adUnits.filter((au) => {
|
|
180
172
|
const bid = bidsById[au.targetId];
|
|
181
|
-
if (bid && bid.bidder
|
|
173
|
+
if (bid && bid.bidder && BIDDER_CODE_DEAL_ALIASES.indexOf(bid.bidder) < 0) {
|
|
182
174
|
return au.matchedAdCount > 0;
|
|
183
175
|
} else {
|
|
184
176
|
// We do NOT accept bids when using this adaptor via one of the
|
|
@@ -63,6 +63,7 @@ export const spec = {
|
|
|
63
63
|
// convert Native ORTB definition to old-style prebid native definition
|
|
64
64
|
bidRequests = convertOrtbRequestToProprietaryNative(bidRequests);
|
|
65
65
|
let hasVideo = false;
|
|
66
|
+
let eids;
|
|
66
67
|
const payload = {
|
|
67
68
|
Version: VERSION,
|
|
68
69
|
Bids: bidRequests.reduce((accumulator, bidReq) => {
|
|
@@ -81,6 +82,9 @@ export const spec = {
|
|
|
81
82
|
if (bidReq.schain) {
|
|
82
83
|
accumulator[bidReq.bidId].SChain = bidReq.schain;
|
|
83
84
|
}
|
|
85
|
+
if (!eids && bidReq.userIdAsEids && bidReq.userIdAsEids.length) {
|
|
86
|
+
eids = bidReq.userIdAsEids;
|
|
87
|
+
}
|
|
84
88
|
if (mediatype === NATIVE) {
|
|
85
89
|
let nativeReq = bidReq.mediaTypes.native;
|
|
86
90
|
if (nativeReq.type === 'image') {
|
|
@@ -120,9 +124,8 @@ export const spec = {
|
|
|
120
124
|
if (bidderRequest.ortb2) {
|
|
121
125
|
payload.ortb2 = bidderRequest.ortb2;
|
|
122
126
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
payload.userId = bidderRequest.userIdAsEids;
|
|
127
|
+
if (eids) {
|
|
128
|
+
payload.eids = eids;
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
payload.pbjs_version = '$prebid.version$';
|
package/modules/amxIdSystem.js
CHANGED
|
@@ -7,14 +7,15 @@ import {
|
|
|
7
7
|
isFn,
|
|
8
8
|
logWarn,
|
|
9
9
|
parseSizesInput,
|
|
10
|
-
parseUrl
|
|
10
|
+
parseUrl,
|
|
11
|
+
formatQS
|
|
11
12
|
} from '../src/utils.js';
|
|
12
13
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
13
14
|
import {Renderer} from '../src/Renderer.js';
|
|
14
15
|
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
15
16
|
import {find, includes} from '../src/polyfill.js';
|
|
16
17
|
|
|
17
|
-
const ADAPTER_VERSION = '1.
|
|
18
|
+
const ADAPTER_VERSION = '1.20';
|
|
18
19
|
const ADAPTER_NAME = 'BFIO_PREBID';
|
|
19
20
|
const OUTSTREAM = 'outstream';
|
|
20
21
|
const CURRENCY = 'USD';
|
|
@@ -22,6 +23,8 @@ const CURRENCY = 'USD';
|
|
|
22
23
|
export const VIDEO_ENDPOINT = 'https://reachms.bfmio.com/bid.json?exchange_id=';
|
|
23
24
|
export const BANNER_ENDPOINT = 'https://display.bfmio.com/prebid_display';
|
|
24
25
|
export const OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js';
|
|
26
|
+
export const SYNC_IFRAME_ENDPOINT = 'https://sync.bfmio.com/sync_iframe';
|
|
27
|
+
export const SYNC_IMAGE_ENDPOINT = 'https://sync.bfmio.com/syncb';
|
|
25
28
|
|
|
26
29
|
export const VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'placement', 'skip', 'skipmin', 'skipafter'];
|
|
27
30
|
export const DEFAULT_MIMES = ['video/mp4', 'application/javascript'];
|
|
@@ -152,11 +155,22 @@ export const spec = {
|
|
|
152
155
|
}
|
|
153
156
|
},
|
|
154
157
|
|
|
155
|
-
getUserSyncs(syncOptions, serverResponses = [], gdprConsent = {}, uspConsent = '') {
|
|
156
|
-
let syncs = [];
|
|
158
|
+
getUserSyncs(syncOptions, serverResponses = [], gdprConsent = {}, uspConsent = '', gppConsent = {}) {
|
|
157
159
|
let { gdprApplies, consentString = '' } = gdprConsent;
|
|
160
|
+
let { gppString = '', applicableSections = [] } = gppConsent;
|
|
158
161
|
let bannerResponse = find(serverResponses, (res) => isArray(res.body));
|
|
159
162
|
|
|
163
|
+
let syncs = [];
|
|
164
|
+
let params = {
|
|
165
|
+
id: appId,
|
|
166
|
+
gdpr: gdprApplies ? 1 : 0,
|
|
167
|
+
gc: consentString,
|
|
168
|
+
gce: 1,
|
|
169
|
+
us_privacy: uspConsent,
|
|
170
|
+
gpp: gppString,
|
|
171
|
+
gpp_sid: Array.isArray(applicableSections) ? applicableSections.join(',') : ''
|
|
172
|
+
};
|
|
173
|
+
|
|
160
174
|
if (bannerResponse) {
|
|
161
175
|
if (syncOptions.iframeEnabled) {
|
|
162
176
|
bannerResponse.body
|
|
@@ -171,12 +185,12 @@ export const spec = {
|
|
|
171
185
|
} else if (syncOptions.iframeEnabled) {
|
|
172
186
|
syncs.push({
|
|
173
187
|
type: 'iframe',
|
|
174
|
-
url:
|
|
188
|
+
url: `${SYNC_IFRAME_ENDPOINT}?ifg=1&${formatQS(params)}`
|
|
175
189
|
});
|
|
176
190
|
} else if (syncOptions.pixelEnabled) {
|
|
177
191
|
syncs.push({
|
|
178
192
|
type: 'image',
|
|
179
|
-
url:
|
|
193
|
+
url: `${SYNC_IMAGE_ENDPOINT}?pid=144&${formatQS(params)}`
|
|
180
194
|
});
|
|
181
195
|
}
|
|
182
196
|
|
|
@@ -404,6 +418,12 @@ function createVideoRequestData(bid, bidderRequest) {
|
|
|
404
418
|
deepSetValue(payload, 'user.ext.consent', consentString);
|
|
405
419
|
}
|
|
406
420
|
|
|
421
|
+
if (bidderRequest && bidderRequest.gppConsent) {
|
|
422
|
+
let { gppString, applicableSections } = bidderRequest.gppConsent;
|
|
423
|
+
deepSetValue(payload, 'regs.gpp', gppString);
|
|
424
|
+
deepSetValue(payload, 'regs.gpp_sid', applicableSections);
|
|
425
|
+
}
|
|
426
|
+
|
|
407
427
|
if (bid.schain) {
|
|
408
428
|
deepSetValue(payload, 'source.ext.schain', bid.schain);
|
|
409
429
|
}
|
|
@@ -459,6 +479,12 @@ function createBannerRequestData(bids, bidderRequest) {
|
|
|
459
479
|
payload.gdprConsent = consentString;
|
|
460
480
|
}
|
|
461
481
|
|
|
482
|
+
if (bidderRequest && bidderRequest.gppConsent) {
|
|
483
|
+
let { gppString, applicableSections } = bidderRequest.gppConsent;
|
|
484
|
+
payload.gpp = gppString;
|
|
485
|
+
payload.gppSid = applicableSections;
|
|
486
|
+
}
|
|
487
|
+
|
|
462
488
|
if (bids[0] && bids[0].schain) {
|
|
463
489
|
payload.schain = bids[0].schain;
|
|
464
490
|
}
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
* @requires module:modules/realTimeData
|
|
7
7
|
*/
|
|
8
8
|
import {submodule} from '../src/hook.js';
|
|
9
|
-
import {deepAccess, deepSetValue, logError, mergeDeep} from '../src/utils.js';
|
|
9
|
+
import {deepAccess, deepSetValue, logError, mergeDeep, generateUUID} from '../src/utils.js';
|
|
10
10
|
import {loadExternalScript} from '../src/adloader.js';
|
|
11
|
+
import * as events from '../src/events.js';
|
|
12
|
+
import CONSTANTS from '../src/constants.json';
|
|
11
13
|
|
|
12
14
|
const MODULE_NAME = 'brandmetrics'
|
|
13
15
|
const MODULE_CODE = MODULE_NAME
|
|
@@ -15,12 +17,15 @@ const RECEIVED_EVENTS = []
|
|
|
15
17
|
const GVL_ID = 422
|
|
16
18
|
const TCF_PURPOSES = [1, 7]
|
|
17
19
|
|
|
20
|
+
let billableEventsInitialized = false
|
|
21
|
+
|
|
18
22
|
function init (config, userConsent) {
|
|
19
23
|
const hasConsent = checkConsent(userConsent)
|
|
20
24
|
|
|
21
25
|
if (hasConsent) {
|
|
22
26
|
const moduleConfig = getMergedConfig(config)
|
|
23
27
|
initializeBrandmetrics(moduleConfig.params.scriptId)
|
|
28
|
+
initializeBillableEvents()
|
|
24
29
|
}
|
|
25
30
|
return hasConsent
|
|
26
31
|
}
|
|
@@ -82,7 +87,6 @@ function processBrandmetricsEvents (reqBidsConfigObj, moduleConfig, callback) {
|
|
|
82
87
|
if (RECEIVED_EVENTS.length > 0) {
|
|
83
88
|
callBidTargeting(RECEIVED_EVENTS[RECEIVED_EVENTS.length - 1])
|
|
84
89
|
} else {
|
|
85
|
-
window._brandmetrics = window._brandmetrics || []
|
|
86
90
|
window._brandmetrics.push({
|
|
87
91
|
cmd: '_addeventlistener',
|
|
88
92
|
val: {
|
|
@@ -120,6 +124,8 @@ function setBidderTargeting (reqBidsConfigObj, moduleConfig, key, val) {
|
|
|
120
124
|
* @param {string} scriptId - The script- id provided by brandmetrics or brandmetrics partner
|
|
121
125
|
*/
|
|
122
126
|
function initializeBrandmetrics(scriptId) {
|
|
127
|
+
window._brandmetrics = window._brandmetrics || []
|
|
128
|
+
|
|
123
129
|
if (scriptId) {
|
|
124
130
|
const path = 'https://cdn.brandmetrics.com/survey/script/'
|
|
125
131
|
const file = scriptId + '.js'
|
|
@@ -129,6 +135,34 @@ function initializeBrandmetrics(scriptId) {
|
|
|
129
135
|
}
|
|
130
136
|
}
|
|
131
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Hook in to brandmetrics creative_in_view- event and emit billable- event for creatives measured by brandmetrics.
|
|
140
|
+
*/
|
|
141
|
+
function initializeBillableEvents() {
|
|
142
|
+
if (!billableEventsInitialized) {
|
|
143
|
+
window._brandmetrics.push({
|
|
144
|
+
cmd: '_addeventlistener',
|
|
145
|
+
val: {
|
|
146
|
+
event: 'creative_in_view',
|
|
147
|
+
handler: (ev) => {
|
|
148
|
+
if (ev.source && ev.source.type === 'pbj') {
|
|
149
|
+
const bid = ev.source.data;
|
|
150
|
+
events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, {
|
|
151
|
+
vendor: 'brandmetrics',
|
|
152
|
+
type: 'creative_in_view',
|
|
153
|
+
measurementId: ev.mid,
|
|
154
|
+
billingId: generateUUID(),
|
|
155
|
+
auctionId: bid.auctionId,
|
|
156
|
+
transactionId: bid.transactionId,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
}
|
|
161
|
+
})
|
|
162
|
+
billableEventsInitialized = true
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
132
166
|
/**
|
|
133
167
|
* Merges a provided config with default values
|
|
134
168
|
* @param {Object} customConfig
|
|
@@ -16,10 +16,10 @@ Enable the Brandmetrics RTD in your Prebid configuration, using the below format
|
|
|
16
16
|
pbjs.setConfig({
|
|
17
17
|
...,
|
|
18
18
|
realTimeData: {
|
|
19
|
-
auctionDelay: 500,
|
|
19
|
+
auctionDelay: 500,
|
|
20
20
|
dataProviders: [{
|
|
21
21
|
name: 'brandmetrics',
|
|
22
|
-
waitForIt: true
|
|
22
|
+
waitForIt: true,
|
|
23
23
|
params: {
|
|
24
24
|
scriptId: '00000000-0000-0000-0000-000000000000',
|
|
25
25
|
bidders: ['ozone']
|
|
@@ -29,6 +29,7 @@ pbjs.setConfig({
|
|
|
29
29
|
...
|
|
30
30
|
})
|
|
31
31
|
```
|
|
32
|
+
The scriptId- parameter is provided by brandmetrics or a brandmetrics partner.
|
|
32
33
|
|
|
33
34
|
## Parameters
|
|
34
35
|
| Name | Type | Description | Default |
|
|
@@ -38,3 +39,17 @@ pbjs.setConfig({
|
|
|
38
39
|
| params | Object | | - |
|
|
39
40
|
| params.bidders | String[] | An array of bidders which should receive targeting keys. | `[]` |
|
|
40
41
|
| params.scriptId | String | A script- id GUID if the brandmetrics- script should be initialized. | `undefined` |
|
|
42
|
+
|
|
43
|
+
## Billable events
|
|
44
|
+
The module emits a billable event for creatives that are measured by brandmetrics and are considered in- view.
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
{
|
|
48
|
+
vendor: 'brandmetrics',
|
|
49
|
+
type: 'creative_in_view',
|
|
50
|
+
measurementId: string, // UUID, brandmetrics measurement id
|
|
51
|
+
billingId: string, // UUID, unique billing id
|
|
52
|
+
auctionId: string, // Prebid auction id
|
|
53
|
+
transactionId: string, //Prebid transaction id
|
|
54
|
+
}
|
|
55
|
+
```
|
|
@@ -71,11 +71,20 @@ export function lookupIabConsent({onSuccess, onError}, mkClient = cmpClient) {
|
|
|
71
71
|
: 'Detected GPP CMP is outside the current iframe where Prebid.js is located, calling it now...';
|
|
72
72
|
logInfo(startupMsg);
|
|
73
73
|
|
|
74
|
+
let versionMismatch = false;
|
|
75
|
+
|
|
74
76
|
cmp({
|
|
75
77
|
command: 'addEventListener',
|
|
76
78
|
callback: function (evt) {
|
|
77
|
-
if (evt) {
|
|
79
|
+
if (evt && !versionMismatch) {
|
|
78
80
|
logInfo(`Received a ${(cmp.isDirect ? 'direct' : 'postmsg')} response from GPP CMP for event`, evt);
|
|
81
|
+
const cmpVer = evt?.pingData?.gppVersion;
|
|
82
|
+
if (cmpVer != null && cmpVer !== '1.0') {
|
|
83
|
+
logWarn(`Unsupported GPP CMP version: ${cmpVer}. Continuing auction without consent`);
|
|
84
|
+
versionMismatch = true;
|
|
85
|
+
onSuccess(storeConsentData());
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
79
88
|
if (evt.eventName === 'sectionChange' || evt.pingData.cmpStatus === 'loaded') {
|
|
80
89
|
cmp({command: 'getGPPData'}).then((gppData) => {
|
|
81
90
|
logInfo(`Received a ${cmp.isDirect ? 'direct' : 'postmsg'} response from GPP CMP for getGPPData`, gppData);
|
|
@@ -65,6 +65,11 @@ export const spec = {
|
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
if (bidderRequest && bidderRequest.gppConsent && bidderRequest.gppConsent.gppString) {
|
|
69
|
+
data.gpp = bidderRequest.gppConsent.gppString;
|
|
70
|
+
data.gpp_sid = bidderRequest.gppConsent.applicableSections;
|
|
71
|
+
}
|
|
72
|
+
|
|
68
73
|
if (bidderRequest && bidderRequest.uspConsent) {
|
|
69
74
|
data.ccpa = bidderRequest.uspConsent;
|
|
70
75
|
}
|
|
@@ -180,7 +185,7 @@ export const spec = {
|
|
|
180
185
|
return bidResponses;
|
|
181
186
|
},
|
|
182
187
|
|
|
183
|
-
getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {
|
|
188
|
+
getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) {
|
|
184
189
|
let syncUrl = 'https://sync.serverbid.com/ss/' + siteId + '.html';
|
|
185
190
|
|
|
186
191
|
if (syncOptions.iframeEnabled) {
|
|
@@ -191,6 +196,9 @@ export const spec = {
|
|
|
191
196
|
syncUrl = appendUrlParam(syncUrl, `gdpr=0&gdpr_consent=${gdprConsent.consentString}`);
|
|
192
197
|
}
|
|
193
198
|
}
|
|
199
|
+
if (gppConsent && gppConsent.gppString) {
|
|
200
|
+
syncUrl = appendUrlParam(syncUrl, `gpp=${gppConsent.gppString}&gpp_sid=${gppConsent.applicableSections}`);
|
|
201
|
+
}
|
|
194
202
|
|
|
195
203
|
if (uspConsent && uspConsent.consentString) {
|
|
196
204
|
syncUrl = appendUrlParam(syncUrl, `us_privacy=${uspConsent.consentString}`);
|