prebid.js 8.4.0 → 8.6.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/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/adsinteractiveBidAdapter.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/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/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/growthCodeAnalyticsAdapter.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/mspa.js +1 -1
- package/dist/mwOpenLinkIdSystem.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/netIdSystem.js +1 -1
- package/dist/newspassidBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +186 -181
- 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 +1 -1
- package/dist/pubCircleBidAdapter.js +1 -0
- 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/quantcastIdSystem.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevadRtdProvider.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/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/tappxBidAdapter.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/viantOrtbBidAdapter.js +1 -0
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/videojsVideoProvider.js +1 -1
- package/dist/visxBidAdapter.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/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/bidRequestScheduling.html +1 -1
- package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +137 -0
- package/integrationExamples/videoModule/jwplayer/eventListeners.html +1 -1
- 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/bidsBackHandlerOverride.html +164 -0
- package/libraries/mspa/activityControls.js +51 -32
- package/modules/.submodules.json +1 -0
- package/modules/33acrossIdSystem.js +9 -0
- package/modules/a1MediaRtdProvider.js +92 -0
- package/modules/a1MediaRtdProvider.md +46 -0
- package/modules/adfBidAdapter.js +4 -1
- package/modules/adgenerationBidAdapter.js +3 -3
- package/modules/adkernelAdnBidAdapter.js +1 -1
- package/modules/adkernelBidAdapter.js +10 -3
- package/modules/admixerIdSystem.js +6 -0
- package/modules/adnuntiusBidAdapter.js +5 -13
- package/modules/adqueryIdSystem.js +6 -0
- package/modules/adsinteractiveBidAdapter.js +2 -2
- package/modules/adtelligentIdSystem.js +6 -0
- package/modules/adyoulikeBidAdapter.js +6 -3
- package/modules/amxIdSystem.js +6 -0
- package/modules/appnexusBidAdapter.js +1 -1
- package/modules/beachfrontBidAdapter.js +32 -6
- 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/criteoBidAdapter.js +18 -0
- package/modules/criteoIdSystem.js +6 -0
- package/modules/cwireBidAdapter.js +19 -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/geolocationRtdProvider.js +65 -0
- package/modules/gravitoIdSystem.js +6 -0
- package/modules/greenbidsRtdProvider.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +7 -2
- 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 +16 -0
- package/modules/justIdSystem.js +6 -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/mwOpenLinkIdSystem.js +6 -0
- package/modules/naveggIdSystem.js +6 -0
- package/modules/netIdSystem.js +6 -0
- package/modules/newspassid.md +76 -0
- package/modules/newspassidBidAdapter.js +44 -18
- package/modules/novatiqIdSystem.js +12 -0
- 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/pubCircleBidAdapter.js +231 -0
- package/modules/pubCircleBidAdapter.md +79 -0
- package/modules/publinkIdSystem.js +7 -1
- package/modules/quantcastIdSystem.js +6 -0
- package/modules/relevadRtdProvider.js +6 -7
- package/modules/rubiconBidAdapter.js +9 -0
- package/modules/sharedIdSystem.js +6 -0
- package/modules/silverpushBidAdapter.js +2 -2
- package/modules/ssmasBidAdapter.js +126 -0
- package/modules/ssmasBidAdapter.md +35 -0
- package/modules/sspBCBidAdapter.js +36 -13
- package/modules/tapadIdSystem.js +6 -0
- package/modules/tappxBidAdapter.js +10 -1
- package/modules/tappxBidAdapter.md +17 -0
- package/modules/tncIdSystem.js +6 -0
- package/modules/topicsFpdModule.js +21 -48
- 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 +36 -24
- package/modules/utiqSystem.js +9 -0
- package/modules/verizonMediaIdSystem.js +6 -0
- package/modules/viantOrtbBidAdapter.js +113 -0
- package/modules/viantOrtbBidAdapter.md +54 -0
- package/modules/vidazooBidAdapter.js +9 -2
- package/modules/videojsVideoProvider.js +9 -2
- package/modules/vrtcalBidAdapter.js +10 -6
- package/modules/zeotapIdPlusIdSystem.js +6 -0
- package/package.json +1 -1
- package/src/adapters/bidderFactory.js +15 -6
- package/src/adloader.js +2 -1
- package/test/spec/libraries/mspa/activityControls_spec.js +145 -212
- package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
- package/test/spec/modules/adfBidAdapter_spec.js +47 -0
- package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
- 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/appnexusBidAdapter_spec.js +12 -1
- package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
- package/test/spec/modules/consentManagementGpp_spec.js +16 -0
- package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +31 -3
- package/test/spec/modules/cwireBidAdapter_spec.js +47 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
- package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
- package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
- 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 +23 -5
- package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
- package/test/spec/modules/newspassidBidAdapter_spec.js +6 -0
- 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/pubCircleBidAdapter_spec.js +399 -0
- package/test/spec/modules/pubmaticBidAdapter_spec.js +6 -373
- package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
- package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
- package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
- package/test/spec/modules/topicsFpdModule_spec.js +343 -365
- package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
- package/test/spec/modules/userId_spec.js +116 -7
- package/test/spec/modules/viantOrtbBidAdapter_spec.js +432 -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 +5 -18
- package/test/spec/unit/core/bidderFactory_spec.js +61 -14
- package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
|
@@ -788,7 +788,7 @@ function bidToTag(bid) {
|
|
|
788
788
|
tag.keywords = auKeywords;
|
|
789
789
|
}
|
|
790
790
|
|
|
791
|
-
let gpid = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot');
|
|
791
|
+
let gpid = deepAccess(bid, 'ortb2Imp.ext.gpid') || deepAccess(bid, 'ortb2Imp.ext.data.pbadslot');
|
|
792
792
|
if (gpid) {
|
|
793
793
|
tag.gpid = gpid;
|
|
794
794
|
}
|
|
@@ -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
|
}
|
|
@@ -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}`);
|
|
@@ -10,6 +10,7 @@ import { getRefererInfo } from '../src/refererDetection.js';
|
|
|
10
10
|
import { hasPurpose1Consent } from '../src/utils/gpdr.js';
|
|
11
11
|
import { Renderer } from '../src/Renderer.js';
|
|
12
12
|
import { OUTSTREAM } from '../src/video.js';
|
|
13
|
+
import { ajax } from '../src/ajax.js';
|
|
13
14
|
|
|
14
15
|
const GVLID = 91;
|
|
15
16
|
export const ADAPTER_VERSION = 36;
|
|
@@ -306,6 +307,23 @@ export const spec = {
|
|
|
306
307
|
adapter.handleSetTargeting(bid);
|
|
307
308
|
}
|
|
308
309
|
},
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* @param {BidRequest[]} bidRequests
|
|
313
|
+
*/
|
|
314
|
+
onDataDeletionRequest: (bidRequests) => {
|
|
315
|
+
const id = readFromAllStorages(BUNDLE_COOKIE_NAME);
|
|
316
|
+
if (id) {
|
|
317
|
+
deleteFromAllStorages(BUNDLE_COOKIE_NAME);
|
|
318
|
+
}
|
|
319
|
+
ajax('https://privacy.criteo.com/api/privacy/datadeletionrequest',
|
|
320
|
+
null,
|
|
321
|
+
JSON.stringify({ publisherUserId: id }),
|
|
322
|
+
{
|
|
323
|
+
contentType: 'application/json',
|
|
324
|
+
method: 'POST'
|
|
325
|
+
});
|
|
326
|
+
}
|
|
309
327
|
};
|
|
310
328
|
|
|
311
329
|
function readFromAllStorages(name) {
|
|
@@ -2,6 +2,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
2
2
|
import {getStorageManager} from '../src/storageManager.js';
|
|
3
3
|
import {BANNER} from '../src/mediaTypes.js';
|
|
4
4
|
import {generateUUID, getParameterByName, isNumber, logError, logInfo} from '../src/utils.js';
|
|
5
|
+
import {hasPurpose1Consent} from '../src/utils/gpdr.js';
|
|
5
6
|
|
|
6
7
|
// ------------------------------------
|
|
7
8
|
const BIDDER_CODE = 'cwire';
|
|
@@ -230,5 +231,23 @@ export const spec = {
|
|
|
230
231
|
navigator.sendBeacon(EVENT_ENDPOINT, JSON.stringify(event))
|
|
231
232
|
},
|
|
232
233
|
|
|
234
|
+
getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {
|
|
235
|
+
logInfo('Collecting user-syncs: ', JSON.stringify({syncOptions, gdprConsent, uspConsent, serverResponses}));
|
|
236
|
+
|
|
237
|
+
const syncs = []
|
|
238
|
+
if (hasPurpose1Consent(gdprConsent)) {
|
|
239
|
+
logInfo('GDPR purpose 1 consent was given, adding user-syncs')
|
|
240
|
+
let type = (syncOptions.pixelEnabled) ? 'image' : null ?? (syncOptions.iframeEnabled) ? 'iframe' : null
|
|
241
|
+
if (type) {
|
|
242
|
+
syncs.push({
|
|
243
|
+
type: type,
|
|
244
|
+
url: 'https://ib.adnxs.com/getuid?https://prebid.cwi.re/v1/cookiesync?xandrId=$UID'
|
|
245
|
+
})
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
logInfo('Collected user-syncs: ', JSON.stringify({syncs}))
|
|
249
|
+
return syncs
|
|
250
|
+
}
|
|
251
|
+
|
|
233
252
|
};
|
|
234
253
|
registerBidder(spec);
|
package/modules/dacIdSystem.js
CHANGED
|
@@ -39,8 +39,13 @@ export const deepintentDpesSubmodule = {
|
|
|
39
39
|
*/
|
|
40
40
|
getId(config, consentData, cacheIdObj) {
|
|
41
41
|
return cacheIdObj;
|
|
42
|
-
}
|
|
43
|
-
|
|
42
|
+
},
|
|
43
|
+
eids: {
|
|
44
|
+
'deepintentId': {
|
|
45
|
+
source: 'deepintent.com',
|
|
46
|
+
atype: 3
|
|
47
|
+
},
|
|
48
|
+
},
|
|
44
49
|
};
|
|
45
50
|
|
|
46
51
|
submodule('userId', deepintentDpesSubmodule);
|
package/modules/dmdIdSystem.js
CHANGED
package/modules/euidIdSystem.js
CHANGED
|
@@ -103,6 +103,15 @@ export const euidIdSubmodule = {
|
|
|
103
103
|
_logInfo(`EUID getId returned`, result);
|
|
104
104
|
return result;
|
|
105
105
|
},
|
|
106
|
+
eids: {
|
|
107
|
+
'euid': {
|
|
108
|
+
source: 'euid.eu',
|
|
109
|
+
atype: 3,
|
|
110
|
+
getValue: function(data) {
|
|
111
|
+
return data.id;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
},
|
|
106
115
|
};
|
|
107
116
|
|
|
108
117
|
function decodeImpl(value) {
|
|
@@ -221,6 +221,22 @@ export const ftrackIdSubmodule = {
|
|
|
221
221
|
if (usPrivacyVersion == 1 && usPrivacyOptOutSale === 'Y') consentValue = false;
|
|
222
222
|
|
|
223
223
|
return consentValue;
|
|
224
|
+
},
|
|
225
|
+
eids: {
|
|
226
|
+
'ftrackId': {
|
|
227
|
+
source: 'flashtalking.com',
|
|
228
|
+
atype: 1,
|
|
229
|
+
getValue: function(data) {
|
|
230
|
+
let value = '';
|
|
231
|
+
if (data && data.ext && data.ext.DeviceID) {
|
|
232
|
+
value = data.ext.DeviceID;
|
|
233
|
+
}
|
|
234
|
+
return value;
|
|
235
|
+
},
|
|
236
|
+
getUidExt: function(data) {
|
|
237
|
+
return data && data.ext;
|
|
238
|
+
}
|
|
239
|
+
},
|
|
224
240
|
}
|
|
225
241
|
};
|
|
226
242
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {submodule} from '../src/hook.js';
|
|
2
|
+
import {isFn, logError, deepAccess, deepSetValue, logInfo, logWarn} from '../src/utils.js';
|
|
3
|
+
import { ACTIVITY_TRANSMIT_PRECISE_GEO } from '../src/activities/activities.js';
|
|
4
|
+
import { MODULE_TYPE_RTD } from '../src/activities/modules.js';
|
|
5
|
+
import { isActivityAllowed } from '../src/activities/rules.js';
|
|
6
|
+
import { activityParams } from '../src/activities/activityParams.js';
|
|
7
|
+
|
|
8
|
+
let permissionsAvailable = true;
|
|
9
|
+
let geolocation;
|
|
10
|
+
function getGeolocationData(requestBidsObject, onDone, providerConfig, userConsent) {
|
|
11
|
+
let done = false;
|
|
12
|
+
if (!permissionsAvailable) {
|
|
13
|
+
logWarn('permission for geolocation receiving was denied');
|
|
14
|
+
return complete()
|
|
15
|
+
};
|
|
16
|
+
if (!isActivityAllowed(ACTIVITY_TRANSMIT_PRECISE_GEO, activityParams(MODULE_TYPE_RTD, 'geolocation'))) {
|
|
17
|
+
logWarn('permission for geolocation receiving was denied by CMP');
|
|
18
|
+
return complete()
|
|
19
|
+
};
|
|
20
|
+
const requestPermission = deepAccess(providerConfig, 'params.requestPermission') === true;
|
|
21
|
+
const waitForIt = providerConfig.waitForIt;
|
|
22
|
+
navigator.permissions.query({
|
|
23
|
+
name: 'geolocation',
|
|
24
|
+
}).then(permission => {
|
|
25
|
+
if (permission.state !== 'granted' && !requestPermission) return complete();
|
|
26
|
+
navigator.geolocation.getCurrentPosition(geo => {
|
|
27
|
+
geolocation = geo;
|
|
28
|
+
complete();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
if (!waitForIt) complete();
|
|
32
|
+
function complete() {
|
|
33
|
+
if (done) return;
|
|
34
|
+
done = true;
|
|
35
|
+
if (geolocation) {
|
|
36
|
+
deepSetValue(requestBidsObject, 'ortb2Fragments.global.device.geo', {
|
|
37
|
+
lat: geolocation.coords.latitude,
|
|
38
|
+
lon: geolocation.coords.longitude,
|
|
39
|
+
lastfix: geolocation.timestamp,
|
|
40
|
+
type: 1
|
|
41
|
+
});
|
|
42
|
+
logInfo('geolocation was successfully received ', requestBidsObject.ortb2Fragments.global.device.geo)
|
|
43
|
+
}
|
|
44
|
+
onDone();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function init(moduleConfig) {
|
|
48
|
+
geolocation = void 0;
|
|
49
|
+
if (!isFn(navigator?.permissions?.query) || !isFn(navigator?.geolocation?.getCurrentPosition || !navigator?.permissions?.query)) {
|
|
50
|
+
logError('geolocation is not defined');
|
|
51
|
+
permissionsAvailable = false;
|
|
52
|
+
} else {
|
|
53
|
+
permissionsAvailable = true;
|
|
54
|
+
}
|
|
55
|
+
return permissionsAvailable;
|
|
56
|
+
}
|
|
57
|
+
export const geolocationSubmodule = {
|
|
58
|
+
name: 'geolocation',
|
|
59
|
+
getBidRequestData: getGeolocationData,
|
|
60
|
+
init: init,
|
|
61
|
+
};
|
|
62
|
+
function registerSubModule() {
|
|
63
|
+
submodule('realTimeData', geolocationSubmodule);
|
|
64
|
+
}
|
|
65
|
+
registerSubModule();
|
|
@@ -4,7 +4,7 @@ import { submodule } from '../src/hook.js';
|
|
|
4
4
|
|
|
5
5
|
const MODULE_NAME = 'greenbidsRtdProvider';
|
|
6
6
|
const MODULE_VERSION = '1.0.0';
|
|
7
|
-
const ENDPOINT = 'https://
|
|
7
|
+
const ENDPOINT = 'https://t.greenbids.ai';
|
|
8
8
|
|
|
9
9
|
const auctionInfo = {};
|
|
10
10
|
const rtdOptions = {};
|
|
@@ -30,8 +30,8 @@ let bidRequestTimeout = 0;
|
|
|
30
30
|
let analyticsType = 'endpoint';
|
|
31
31
|
|
|
32
32
|
let growthCodeAnalyticsAdapter = Object.assign(adapter({url: url, analyticsType}), {
|
|
33
|
-
track({eventType,
|
|
34
|
-
eventData =
|
|
33
|
+
track({eventType, args}) {
|
|
34
|
+
let eventData = args ? JSON.parse(JSON.stringify(args)) : {};
|
|
35
35
|
let data = {};
|
|
36
36
|
if (!trackEvents.includes(eventType)) return;
|
|
37
37
|
switch (eventType) {
|
|
@@ -98,6 +98,11 @@ let growthCodeAnalyticsAdapter = Object.assign(adapter({url: url, analyticsType}
|
|
|
98
98
|
break;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
case CONSTANTS.EVENTS.NO_BID: {
|
|
102
|
+
data = eventData
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
|
|
101
106
|
default:
|
|
102
107
|
return;
|
|
103
108
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @requires module:modules/userId
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {logError, logInfo, tryAppendQueryString} from '../src/utils.js';
|
|
8
|
+
import {logError, logInfo, pick, tryAppendQueryString} from '../src/utils.js';
|
|
9
9
|
import {ajax} from '../src/ajax.js';
|
|
10
10
|
import { submodule } from '../src/hook.js'
|
|
11
11
|
import {getStorageManager} from '../src/storageManager.js';
|
|
@@ -166,6 +166,25 @@ export const growthCodeIdSubmodule = {
|
|
|
166
166
|
}
|
|
167
167
|
};
|
|
168
168
|
return { callback: resp };
|
|
169
|
+
},
|
|
170
|
+
eids: {
|
|
171
|
+
'growthCodeId': {
|
|
172
|
+
getValue: function(data) {
|
|
173
|
+
return data.gc_id
|
|
174
|
+
},
|
|
175
|
+
source: 'growthcode.io',
|
|
176
|
+
atype: 1,
|
|
177
|
+
getUidExt: function(data) {
|
|
178
|
+
const extendedData = pick(data, [
|
|
179
|
+
'h1',
|
|
180
|
+
'h2',
|
|
181
|
+
'h3',
|
|
182
|
+
]);
|
|
183
|
+
if (Object.keys(extendedData).length) {
|
|
184
|
+
return extendedData;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
},
|
|
169
188
|
}
|
|
170
189
|
};
|
|
171
190
|
|
package/modules/id5IdSystem.js
CHANGED
|
@@ -108,7 +108,7 @@ export const id5IdSubmodule = {
|
|
|
108
108
|
* @returns {IdResponse|undefined}
|
|
109
109
|
*/
|
|
110
110
|
getId(submoduleConfig, consentData, cacheIdObj) {
|
|
111
|
-
if (!
|
|
111
|
+
if (!validateConfig(submoduleConfig)) {
|
|
112
112
|
return undefined;
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -142,19 +142,31 @@ export const id5IdSubmodule = {
|
|
|
142
142
|
* @return {(IdResponse|function(callback:function))} A response object that contains id and/or callback.
|
|
143
143
|
*/
|
|
144
144
|
extendId(config, consentData, cacheIdObj) {
|
|
145
|
-
hasRequiredConfig(config);
|
|
146
|
-
|
|
147
145
|
if (!hasWriteConsentToLocalStorage(consentData)) {
|
|
148
146
|
logInfo(LOG_PREFIX + 'No consent given for ID5 local storage writing, skipping nb increment.')
|
|
149
147
|
return cacheIdObj;
|
|
150
148
|
}
|
|
151
149
|
|
|
152
|
-
const partnerId = (config
|
|
150
|
+
const partnerId = validateConfig(config) ? config.params.partner : 0;
|
|
153
151
|
incrementNb(partnerId);
|
|
154
152
|
|
|
155
153
|
logInfo(LOG_PREFIX + 'using cached ID', cacheIdObj);
|
|
156
154
|
return cacheIdObj;
|
|
157
|
-
}
|
|
155
|
+
},
|
|
156
|
+
eids: {
|
|
157
|
+
'id5id': {
|
|
158
|
+
getValue: function(data) {
|
|
159
|
+
return data.uid
|
|
160
|
+
},
|
|
161
|
+
source: 'id5-sync.com',
|
|
162
|
+
atype: 1,
|
|
163
|
+
getUidExt: function(data) {
|
|
164
|
+
if (data.ext) {
|
|
165
|
+
return data.ext;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
},
|
|
158
170
|
};
|
|
159
171
|
|
|
160
172
|
class IdFetchFlow {
|
|
@@ -293,9 +305,23 @@ class IdFetchFlow {
|
|
|
293
305
|
}
|
|
294
306
|
}
|
|
295
307
|
|
|
296
|
-
function
|
|
297
|
-
if (!config || !config.params || !config.params.partner
|
|
298
|
-
logError(LOG_PREFIX + 'partner required to be defined
|
|
308
|
+
function validateConfig(config) {
|
|
309
|
+
if (!config || !config.params || !config.params.partner) {
|
|
310
|
+
logError(LOG_PREFIX + 'partner required to be defined');
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const partner = config.params.partner
|
|
315
|
+
if (typeof partner === 'string' || partner instanceof String) {
|
|
316
|
+
let parsedPartnerId = parseInt(partner);
|
|
317
|
+
if (isNaN(parsedPartnerId) || parsedPartnerId < 0) {
|
|
318
|
+
logError(LOG_PREFIX + 'partner required to be a number or a String parsable to a positive integer');
|
|
319
|
+
return false;
|
|
320
|
+
} else {
|
|
321
|
+
config.params.partner = parsedPartnerId;
|
|
322
|
+
}
|
|
323
|
+
} else if (typeof partner !== 'number') {
|
|
324
|
+
logError(LOG_PREFIX + 'partner required to be a number or a String parsable to a positive integer');
|
|
299
325
|
return false;
|
|
300
326
|
}
|
|
301
327
|
|