prebid.js 7.29.0 → 7.30.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/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/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/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/ccxBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementGpp.js +1 -0
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/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/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +122 -120
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/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/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/viouslyBidAdapter.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/gpp_us_hello_world.html +124 -0
- package/integrationExamples/gpt/gpp_us_hello_world_iframe.html +12 -0
- package/integrationExamples/gpt/gpp_us_hello_world_iframe_subpage.html +140 -0
- package/karma.conf.maker.js +1 -1
- package/modules/appnexusBidAdapter.js +23 -2
- package/modules/bidViewability.js +6 -1
- package/modules/ccxBidAdapter.js +3 -2
- package/modules/colossussspBidAdapter.js +8 -0
- package/modules/consentManagement.js +4 -4
- package/modules/consentManagementGpp.js +386 -0
- package/modules/dfpAdServerVideo.js +6 -1
- package/modules/gridBidAdapter.js +1 -2
- package/modules/lassoBidAdapter.js +2 -2
- package/modules/magniteAnalyticsAdapter.js +9 -1
- package/modules/onetagBidAdapter.js +20 -29
- package/modules/prebidServerBidAdapter/index.js +19 -8
- package/modules/rtdModule/index.js +2 -1
- package/modules/viouslyBidAdapter.js +209 -0
- package/modules/viouslyBidAdapter.md +35 -0
- package/package.json +1 -1
- package/src/adapterManager.js +11 -10
- package/src/adapters/bidderFactory.js +5 -5
- package/src/consentHandler.js +11 -0
- package/src/prebid.js +2 -1
- package/test/helpers/hookSetup.js +5 -0
- package/test/spec/modules/ViouslyBidAdapter_spec.js +378 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +46 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +89 -2
- package/test/spec/modules/consentManagementGpp_spec.js +577 -0
- package/test/spec/modules/gridBidAdapter_spec.js +0 -18
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +36 -14
- package/test/spec/modules/onetagBidAdapter_spec.js +29 -23
- package/test/spec/modules/topicsFpdModule_spec.js +41 -22
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { deepAccess, logError, parseUrl, parseSizesInput, triggerPixel } from '../src/utils.js';
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import { config } from '../src/config.js';
|
|
4
|
+
import { VIDEO } from '../src/mediaTypes.js';
|
|
5
|
+
import find from 'core-js-pure/features/array/find.js'; // eslint-disable-line prebid/validate-imports
|
|
6
|
+
|
|
7
|
+
const BIDDER_CODE = 'viously';
|
|
8
|
+
// const GVLID = 1028;
|
|
9
|
+
const CURRENCY = 'EUR';
|
|
10
|
+
const TTL = 60;
|
|
11
|
+
const HTTP_METHOD = 'POST';
|
|
12
|
+
const REQUEST_URL = 'https://bidder.viously.com/bid';
|
|
13
|
+
const REQUIRED_VIDEO_PARAMS = ['context', 'playbackmethod', 'playerSize'];
|
|
14
|
+
const REQUIRED_VIOUSLY_PARAMS = ['pid'];
|
|
15
|
+
|
|
16
|
+
export const spec = {
|
|
17
|
+
code: BIDDER_CODE,
|
|
18
|
+
// gvlid: GVLID,
|
|
19
|
+
supportedMediaTypes: [VIDEO],
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Determines whether or not the given bid request is valid.
|
|
23
|
+
*
|
|
24
|
+
* @param {BidRequest} bid The bid params to validate.
|
|
25
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
26
|
+
*/
|
|
27
|
+
isBidRequestValid: function(bid) {
|
|
28
|
+
let videoParams = deepAccess(bid, 'mediaTypes.video');
|
|
29
|
+
|
|
30
|
+
if (!bid.params) {
|
|
31
|
+
logError('The bid params are missing');
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!videoParams) {
|
|
36
|
+
logError('The placement must be of video type');
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* VIDEO checks
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
let areParamsValid = true;
|
|
45
|
+
|
|
46
|
+
REQUIRED_VIDEO_PARAMS.forEach(function(videoParam) {
|
|
47
|
+
if (typeof videoParams[videoParam] === 'undefined') {
|
|
48
|
+
logError('mediaTypes.video.' + videoParam + ' must be set for video placement.');
|
|
49
|
+
areParamsValid = false;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
if (parseSizesInput(videoParams.playerSize).length === 0) {
|
|
54
|
+
logError('mediaTypes.video.playerSize must be set for video placement at the right format.');
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Viously checks
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
REQUIRED_VIOUSLY_PARAMS.forEach(function(viouslyParam) {
|
|
63
|
+
if (typeof bid.params[viouslyParam] === 'undefined') {
|
|
64
|
+
logError('The ' + viouslyParam + ' is missing.');
|
|
65
|
+
areParamsValid = false;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
if (!areParamsValid) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return true;
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
buildRequests: function(validBidRequests, bidderRequest) {
|
|
77
|
+
let payload = {};
|
|
78
|
+
|
|
79
|
+
/** Viously Publisher ID */
|
|
80
|
+
if (validBidRequests[0].params.pid) {
|
|
81
|
+
payload.pid = validBidRequests[0].params.pid;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Referer Info
|
|
85
|
+
if (config.getConfig('pageUrl')) {
|
|
86
|
+
let parsedUrl = parseUrl(config.getConfig('pageUrl'));
|
|
87
|
+
|
|
88
|
+
payload.domain = parsedUrl.hostname;
|
|
89
|
+
payload.page_domain = config.getConfig('pageUrl');
|
|
90
|
+
} else if (bidderRequest && bidderRequest.refererInfo) {
|
|
91
|
+
let parsedUrl = parseUrl(bidderRequest.refererInfo.page);
|
|
92
|
+
|
|
93
|
+
payload.domain = parsedUrl.hostname;
|
|
94
|
+
payload.page_domain = bidderRequest.refererInfo.page;
|
|
95
|
+
}
|
|
96
|
+
if (payload.domain) {
|
|
97
|
+
/** Make sur that the scheme is not part of the domain */
|
|
98
|
+
payload.domain = payload.domain.replace(/(^\w+:|^)\/\//, '');
|
|
99
|
+
payload.domain = payload.domain.replace(/\/$/, '');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Handle GDPR
|
|
103
|
+
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
104
|
+
payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
|
|
105
|
+
payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
|
|
106
|
+
if (bidderRequest.gdprConsent.addtlConsent && bidderRequest.gdprConsent.addtlConsent.indexOf('~') !== -1) {
|
|
107
|
+
payload.addtl_consent = bidderRequest.gdprConsent.addtlConsent;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// US Privacy
|
|
112
|
+
if (bidderRequest && bidderRequest.uspConsent) {
|
|
113
|
+
payload.us_privacy = bidderRequest.uspConsent;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Schain
|
|
117
|
+
if (validBidRequests[0].schain) {
|
|
118
|
+
payload.schain = validBidRequests[0].schain;
|
|
119
|
+
}
|
|
120
|
+
// Currency
|
|
121
|
+
payload.currency_code = CURRENCY;
|
|
122
|
+
|
|
123
|
+
// User IDs
|
|
124
|
+
if (validBidRequests[0].userIdAsEids) {
|
|
125
|
+
payload.users_uid = validBidRequests[0].userIdAsEids;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Placements
|
|
129
|
+
payload.placements = validBidRequests.map(bidRequest => {
|
|
130
|
+
let request = {
|
|
131
|
+
id: bidRequest.adUnitCode,
|
|
132
|
+
bid_id: bidRequest.bidId
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
request.video_params = {
|
|
136
|
+
context: deepAccess(bidRequest, 'mediaTypes.video.context'),
|
|
137
|
+
playbackmethod: deepAccess(bidRequest, 'mediaTypes.video.playbackmethod'),
|
|
138
|
+
size: parseSizesInput(deepAccess(bidRequest, 'mediaTypes.video.playerSize'))
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
return request;
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
method: HTTP_METHOD,
|
|
146
|
+
url: validBidRequests[0].params.endpoint ? validBidRequests[0].params.endpoint : REQUEST_URL,
|
|
147
|
+
data: payload
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
interpretResponse: function(serverResponse, requests) {
|
|
152
|
+
const bidResponses = [];
|
|
153
|
+
const responseBody = serverResponse.body;
|
|
154
|
+
|
|
155
|
+
if (responseBody.ads && responseBody.ads.length > 0) {
|
|
156
|
+
responseBody.ads.forEach(function(bidResponse) {
|
|
157
|
+
if (bidResponse.bid) {
|
|
158
|
+
let bidRequest = find(requests.data.placements, bid => bid.bid_id === bidResponse.bid_id);
|
|
159
|
+
|
|
160
|
+
if (bidRequest) {
|
|
161
|
+
let sizes = bidResponse.size.split('x');
|
|
162
|
+
|
|
163
|
+
const bid = {
|
|
164
|
+
requestId: bidRequest.bid_id,
|
|
165
|
+
id: bidResponse.id,
|
|
166
|
+
cpm: bidResponse.cpm,
|
|
167
|
+
width: sizes[0],
|
|
168
|
+
height: sizes[1],
|
|
169
|
+
creativeId: bidResponse.creative_id || '',
|
|
170
|
+
currency: CURRENCY,
|
|
171
|
+
netRevenue: true,
|
|
172
|
+
ttl: TTL,
|
|
173
|
+
mediaType: 'video',
|
|
174
|
+
meta: {},
|
|
175
|
+
// Tracking data
|
|
176
|
+
nurl: bidResponse.nurl ? bidResponse.nurl : []
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
if (bidResponse.ad_url) {
|
|
180
|
+
bid.vastUrl = bidResponse.ad_url;
|
|
181
|
+
} else {
|
|
182
|
+
bid.vastXml = bidResponse.ad;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
bidResponses.push(bid);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return bidResponses;
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {},
|
|
195
|
+
|
|
196
|
+
onTimeout: function(timeoutData) {},
|
|
197
|
+
|
|
198
|
+
onBidWon: function(bid) {
|
|
199
|
+
if (bid && bid.nurl && bid.nurl.length > 0) {
|
|
200
|
+
bid.nurl.forEach(function(winUrl) {
|
|
201
|
+
triggerPixel(winUrl, null);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
onSetTargeting: function(bid) {}
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Viously Bidder Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: prebid@viously.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to Viously's demand sources
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
```
|
|
15
|
+
var adUnits = [
|
|
16
|
+
{
|
|
17
|
+
code: 'test-div',
|
|
18
|
+
mediaTypes: {
|
|
19
|
+
video: {
|
|
20
|
+
playerSize: [640, 360],
|
|
21
|
+
context: 'instream',
|
|
22
|
+
playbackmethod: [1, 2, 3, 4, 5, 6]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
bids: [
|
|
26
|
+
{
|
|
27
|
+
bidder: 'viously',
|
|
28
|
+
params: {
|
|
29
|
+
pid: '20d30b78-43ec-11ed-b878-0242ac120002'
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
```
|
package/package.json
CHANGED
package/src/adapterManager.js
CHANGED
|
@@ -31,7 +31,7 @@ import {hook} from './hook.js';
|
|
|
31
31
|
import {find, includes} from './polyfill.js';
|
|
32
32
|
import {adunitCounter} from './adUnits.js';
|
|
33
33
|
import {getRefererInfo} from './refererDetection.js';
|
|
34
|
-
import {GdprConsentHandler, UspConsentHandler} from './consentHandler.js';
|
|
34
|
+
import {GdprConsentHandler, UspConsentHandler, GppConsentHandler} from './consentHandler.js';
|
|
35
35
|
import * as events from './events.js';
|
|
36
36
|
import CONSTANTS from './constants.json';
|
|
37
37
|
import {useMetrics} from './utils/perfMetrics.js';
|
|
@@ -161,6 +161,7 @@ function getAdUnitCopyForClientAdapters(adUnits) {
|
|
|
161
161
|
|
|
162
162
|
export let gdprDataHandler = new GdprConsentHandler();
|
|
163
163
|
export let uspDataHandler = new UspConsentHandler();
|
|
164
|
+
export let gppDataHandler = new GppConsentHandler();
|
|
164
165
|
|
|
165
166
|
export let coppaDataHandler = {
|
|
166
167
|
getCoppa: function() {
|
|
@@ -309,17 +310,17 @@ adapterManager.makeBidRequests = hook('sync', function (adUnits, auctionStart, a
|
|
|
309
310
|
}
|
|
310
311
|
});
|
|
311
312
|
|
|
312
|
-
|
|
313
|
-
|
|
313
|
+
bidRequests.forEach(bidRequest => {
|
|
314
|
+
if (gdprDataHandler.getConsentData()) {
|
|
314
315
|
bidRequest['gdprConsent'] = gdprDataHandler.getConsentData();
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
if (uspDataHandler.getConsentData()) {
|
|
319
|
-
bidRequests.forEach(bidRequest => {
|
|
316
|
+
}
|
|
317
|
+
if (uspDataHandler.getConsentData()) {
|
|
320
318
|
bidRequest['uspConsent'] = uspDataHandler.getConsentData();
|
|
321
|
-
}
|
|
322
|
-
|
|
319
|
+
}
|
|
320
|
+
if (gppDataHandler.getConsentData()) {
|
|
321
|
+
bidRequest['gppConsent'] = gppDataHandler.getConsentData();
|
|
322
|
+
}
|
|
323
|
+
});
|
|
323
324
|
|
|
324
325
|
bidRequests.forEach(bidRequest => {
|
|
325
326
|
config.runWithBidder(bidRequest.bidderCode, () => {
|
|
@@ -214,7 +214,7 @@ export function newBidder(spec) {
|
|
|
214
214
|
done();
|
|
215
215
|
config.runWithBidder(spec.code, () => {
|
|
216
216
|
events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest);
|
|
217
|
-
registerSyncs(responses, bidderRequest.gdprConsent, bidderRequest.uspConsent);
|
|
217
|
+
registerSyncs(responses, bidderRequest.gdprConsent, bidderRequest.uspConsent, bidderRequest.gppConsent);
|
|
218
218
|
});
|
|
219
219
|
}
|
|
220
220
|
|
|
@@ -295,8 +295,8 @@ export function newBidder(spec) {
|
|
|
295
295
|
return false;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
function registerSyncs(responses, gdprConsent, uspConsent) {
|
|
299
|
-
registerSyncInner(spec, responses, gdprConsent, uspConsent);
|
|
298
|
+
function registerSyncs(responses, gdprConsent, uspConsent, gppConsent) {
|
|
299
|
+
registerSyncInner(spec, responses, gdprConsent, uspConsent, gppConsent);
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
function filterAndWarn(bid) {
|
|
@@ -448,14 +448,14 @@ export const processBidderRequests = hook('sync', function (spec, bids, bidderRe
|
|
|
448
448
|
})
|
|
449
449
|
}, 'processBidderRequests')
|
|
450
450
|
|
|
451
|
-
export const registerSyncInner = hook('async', function(spec, responses, gdprConsent, uspConsent) {
|
|
451
|
+
export const registerSyncInner = hook('async', function(spec, responses, gdprConsent, uspConsent, gppConsent) {
|
|
452
452
|
const aliasSyncEnabled = config.getConfig('userSync.aliasSyncEnabled');
|
|
453
453
|
if (spec.getUserSyncs && (aliasSyncEnabled || !adapterManager.aliasRegistry[spec.code])) {
|
|
454
454
|
let filterConfig = config.getConfig('userSync.filterSettings');
|
|
455
455
|
let syncs = spec.getUserSyncs({
|
|
456
456
|
iframeEnabled: !!(filterConfig && (filterConfig.iframe || filterConfig.all)),
|
|
457
457
|
pixelEnabled: !!(filterConfig && (filterConfig.image || filterConfig.all)),
|
|
458
|
-
}, responses, gdprConsent, uspConsent);
|
|
458
|
+
}, responses, gdprConsent, uspConsent, gppConsent);
|
|
459
459
|
if (syncs) {
|
|
460
460
|
if (!Array.isArray(syncs)) {
|
|
461
461
|
syncs = [syncs];
|
package/src/consentHandler.js
CHANGED
|
@@ -107,3 +107,14 @@ export class GdprConsentHandler extends ConsentHandler {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
|
|
111
|
+
export class GppConsentHandler extends ConsentHandler {
|
|
112
|
+
getConsentMeta() {
|
|
113
|
+
const consentData = this.getConsentData();
|
|
114
|
+
if (consentData && this.generatedTime) {
|
|
115
|
+
return {
|
|
116
|
+
generatedAt: this.generatedTime,
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
package/src/prebid.js
CHANGED
|
@@ -45,7 +45,7 @@ import {executeRenderer, isRendererRequired} from './Renderer.js';
|
|
|
45
45
|
import {createBid} from './bidfactory.js';
|
|
46
46
|
import {storageCallbacks} from './storageManager.js';
|
|
47
47
|
import {emitAdRenderFail, emitAdRenderSucceeded} from './adRendering.js';
|
|
48
|
-
import {default as adapterManager, gdprDataHandler, getS2SBidderSet, uspDataHandler} from './adapterManager.js';
|
|
48
|
+
import {default as adapterManager, gdprDataHandler, getS2SBidderSet, gppDataHandler, uspDataHandler} from './adapterManager.js';
|
|
49
49
|
import CONSTANTS from './constants.json';
|
|
50
50
|
import * as events from './events.js';
|
|
51
51
|
import {newMetrics, useMetrics} from './utils/perfMetrics.js';
|
|
@@ -336,6 +336,7 @@ function getConsentMetadata() {
|
|
|
336
336
|
return {
|
|
337
337
|
gdpr: gdprDataHandler.getConsentMeta(),
|
|
338
338
|
usp: uspDataHandler.getConsentMeta(),
|
|
339
|
+
gpp: gppDataHandler.getConsentMeta(),
|
|
339
340
|
coppa: !!(config.getConfig('coppa'))
|
|
340
341
|
}
|
|
341
342
|
}
|