prebid.js 9.0.0 → 9.1.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/.nvmrc +1 -1
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.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/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/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -1
- package/dist/dependencies.json +5 -2
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/illuminBidAdapter.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.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/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.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/mgidXBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobianRtdProvider.js +1 -0
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +151 -149
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openwebBidAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/publirBidAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/richaudienceBidAdapter.js +1 -0
- package/dist/ringieraxelspringerBidAdapter.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/setupadBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/shinezRtbBidAdapter.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/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stnBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tagorasBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/twistDigitalBidAdapter.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/unrulyBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahooAdsBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/modules/dailymotionBidAdapter.js +1 -1
- package/modules/mgidXBidAdapter.js +0 -2
- package/modules/mobianRtdProvider.js +52 -0
- package/modules/mobianRtdProvider.md +11 -0
- package/modules/novatiqIdSystem.md +2 -3
- package/modules/richaudienceBidAdapter.js +375 -0
- package/modules/richaudienceBidAdapter.md +1 -1
- package/modules/setupadBidAdapter.js +25 -20
- package/modules/setupadBidAdapter.md +1 -1
- package/modules/smaatoBidAdapter.js +17 -6
- package/modules/zeta_global_sspAnalyticsAdapter.js +8 -4
- package/package.json +1 -1
- package/test/spec/modules/dailymotionBidAdapter_spec.js +3 -3
- package/test/spec/modules/mobianRtdProvider_spec.js +107 -0
- package/test/spec/modules/richaudienceBidAdapter_spec.js +1304 -0
- package/test/spec/modules/setupadBidAdapter_spec.js +15 -0
- package/test/spec/modules/smaatoBidAdapter_spec.js +27 -0
- package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +4 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import {deepAccess, isStr, triggerPixel} from '../src/utils.js';
|
|
2
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import {config} from '../src/config.js';
|
|
4
|
+
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
5
|
+
import {Renderer} from '../src/Renderer.js';
|
|
6
|
+
import {getAllOrtbKeywords} from '../libraries/keywords/keywords.js';
|
|
7
|
+
|
|
8
|
+
const BIDDER_CODE = 'richaudience';
|
|
9
|
+
let REFERER = '';
|
|
10
|
+
|
|
11
|
+
export const spec = {
|
|
12
|
+
code: BIDDER_CODE,
|
|
13
|
+
gvlid: 108,
|
|
14
|
+
aliases: ['ra'],
|
|
15
|
+
supportedMediaTypes: [BANNER, VIDEO],
|
|
16
|
+
|
|
17
|
+
/***
|
|
18
|
+
* Determines whether or not the given bid request is valid
|
|
19
|
+
*
|
|
20
|
+
* @param {bidRequest} bid The bid params to validate.
|
|
21
|
+
* @returns {boolean} True if this is a valid bid, and false otherwise
|
|
22
|
+
*/
|
|
23
|
+
isBidRequestValid: function (bid) {
|
|
24
|
+
return !!(bid.params && bid.params.pid && bid.params.supplyType);
|
|
25
|
+
},
|
|
26
|
+
/***
|
|
27
|
+
* Build a server request from the list of valid BidRequests
|
|
28
|
+
* @param {validBidRequests} is an array of the valid bids
|
|
29
|
+
* @param {bidderRequest} bidder request object
|
|
30
|
+
* @returns {ServerRequest} Info describing the request to the server
|
|
31
|
+
*/
|
|
32
|
+
buildRequests: function (validBidRequests, bidderRequest) {
|
|
33
|
+
return validBidRequests.map(bid => {
|
|
34
|
+
var payload = {
|
|
35
|
+
bidfloor: raiGetFloor(bid, config),
|
|
36
|
+
ifa: bid.params.ifa,
|
|
37
|
+
pid: bid.params.pid,
|
|
38
|
+
supplyType: bid.params.supplyType,
|
|
39
|
+
currencyCode: config.getConfig('currency.adServerCurrency'),
|
|
40
|
+
auctionId: bid.auctionId,
|
|
41
|
+
bidId: bid.bidId,
|
|
42
|
+
BidRequestsCount: bid.bidRequestsCount,
|
|
43
|
+
bidder: bid.bidder,
|
|
44
|
+
bidderRequestId: bid.bidderRequestId,
|
|
45
|
+
tagId: bid.adUnitCode,
|
|
46
|
+
sizes: raiGetSizes(bid),
|
|
47
|
+
referer: (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null),
|
|
48
|
+
numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null),
|
|
49
|
+
transactionId: bid.ortb2Imp?.ext?.tid,
|
|
50
|
+
timeout: bidderRequest.timeout || 600,
|
|
51
|
+
user: raiSetEids(bid),
|
|
52
|
+
demand: raiGetDemandType(bid),
|
|
53
|
+
videoData: raiGetVideoInfo(bid),
|
|
54
|
+
scr_rsl: raiGetResolution(),
|
|
55
|
+
cpuc: (typeof window.navigator != 'undefined' ? window.navigator.hardwareConcurrency : null),
|
|
56
|
+
kws: getAllOrtbKeywords(bidderRequest.ortb2, bid.params.keywords).join(','),
|
|
57
|
+
schain: bid.schain,
|
|
58
|
+
gpid: raiSetPbAdSlot(bid)
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
REFERER = (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null)
|
|
62
|
+
|
|
63
|
+
payload.gdpr_consent = '';
|
|
64
|
+
payload.gdpr = false;
|
|
65
|
+
|
|
66
|
+
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
67
|
+
if (typeof bidderRequest.gdprConsent.gdprApplies != 'undefined') {
|
|
68
|
+
payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
|
|
69
|
+
}
|
|
70
|
+
if (typeof bidderRequest.gdprConsent.consentString != 'undefined') {
|
|
71
|
+
payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (bidderRequest?.gppConsent) {
|
|
76
|
+
payload.privacy = {
|
|
77
|
+
gpp: bidderRequest.gppConsent.gppString,
|
|
78
|
+
gpp_sid: bidderRequest.gppConsent.applicableSections
|
|
79
|
+
}
|
|
80
|
+
} else if (bidderRequest?.ortb2?.regs?.gpp) {
|
|
81
|
+
payload.privacy = {
|
|
82
|
+
gpp: bidderRequest.ortb2.regs.gpp,
|
|
83
|
+
gpp_sid: bidderRequest.ortb2.regs.gpp_sid
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
var payloadString = JSON.stringify(payload);
|
|
88
|
+
|
|
89
|
+
var endpoint = 'https://shb.richaudience.com/hb/';
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
url: endpoint,
|
|
94
|
+
data: payloadString,
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
/***
|
|
99
|
+
* Read the response from the server and build a list of bids
|
|
100
|
+
* @param {serverResponse} Response from the server.
|
|
101
|
+
* @param {bidRequest} Bid request object
|
|
102
|
+
* @returns {bidResponses} Array of bids which were nested inside the server
|
|
103
|
+
*/
|
|
104
|
+
interpretResponse: function (serverResponse, bidRequest) {
|
|
105
|
+
const bidResponses = [];
|
|
106
|
+
// try catch
|
|
107
|
+
var response = serverResponse.body;
|
|
108
|
+
if (response) {
|
|
109
|
+
var bidResponse = {
|
|
110
|
+
requestId: JSON.parse(bidRequest.data).bidId,
|
|
111
|
+
cpm: response.cpm,
|
|
112
|
+
width: response.width,
|
|
113
|
+
height: response.height,
|
|
114
|
+
creativeId: response.creative_id,
|
|
115
|
+
mediaType: response.media_type,
|
|
116
|
+
netRevenue: response.netRevenue,
|
|
117
|
+
currency: response.currency,
|
|
118
|
+
ttl: response.ttl,
|
|
119
|
+
meta: response.adomain,
|
|
120
|
+
dealId: response.dealId
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
if (response.media_type === 'video') {
|
|
124
|
+
bidResponse.vastXml = response.vastXML;
|
|
125
|
+
try {
|
|
126
|
+
if (bidResponse.vastXml != null) {
|
|
127
|
+
if (JSON.parse(bidRequest.data).videoData.format == 'outstream' || JSON.parse(bidRequest.data).videoData.format == 'banner') {
|
|
128
|
+
bidResponse.renderer = Renderer.install({
|
|
129
|
+
id: bidRequest.bidId,
|
|
130
|
+
adunitcode: bidRequest.tagId,
|
|
131
|
+
loaded: false,
|
|
132
|
+
config: response.media_type,
|
|
133
|
+
url: 'https://cdn3.richaudience.com/prebidVideo/player.js'
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
bidResponse.renderer.setRender(renderer);
|
|
137
|
+
}
|
|
138
|
+
} catch (e) {
|
|
139
|
+
bidResponse.ad = response.adm;
|
|
140
|
+
}
|
|
141
|
+
} else {
|
|
142
|
+
bidResponse.ad = response.adm;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
bidResponses.push(bidResponse);
|
|
146
|
+
}
|
|
147
|
+
return bidResponses;
|
|
148
|
+
},
|
|
149
|
+
/***
|
|
150
|
+
* User Syncs
|
|
151
|
+
*
|
|
152
|
+
* @param {syncOptions} Publisher prebid configuration
|
|
153
|
+
* @param {serverResponses} Response from the server
|
|
154
|
+
* @param {gdprConsent} GPDR consent object
|
|
155
|
+
* @returns {Array}
|
|
156
|
+
*/
|
|
157
|
+
getUserSyncs: function (syncOptions, responses, gdprConsent, uspConsent, gppConsent) {
|
|
158
|
+
const syncs = [];
|
|
159
|
+
|
|
160
|
+
var rand = Math.floor(Math.random() * 9999999999);
|
|
161
|
+
var syncUrl = '';
|
|
162
|
+
var consent = '';
|
|
163
|
+
var consentGPP = '';
|
|
164
|
+
|
|
165
|
+
var raiSync = {};
|
|
166
|
+
|
|
167
|
+
raiSync = raiGetSyncInclude(config);
|
|
168
|
+
|
|
169
|
+
if (gdprConsent && typeof gdprConsent.consentString === 'string' && typeof gdprConsent.consentString != 'undefined') {
|
|
170
|
+
consent = `consentString=${gdprConsent.consentString}`
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// GPP Consent
|
|
174
|
+
if (gppConsent?.gppString && gppConsent?.applicableSections?.length) {
|
|
175
|
+
consentGPP = 'gpp=' + encodeURIComponent(gppConsent.gppString);
|
|
176
|
+
consentGPP += '&gpp_sid=' + encodeURIComponent(gppConsent?.applicableSections?.join(','));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (syncOptions.iframeEnabled && raiSync.raiIframe != 'exclude') {
|
|
180
|
+
syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand
|
|
181
|
+
if (consent != '') {
|
|
182
|
+
syncUrl += `&${consent}`
|
|
183
|
+
}
|
|
184
|
+
if (consentGPP != '') {
|
|
185
|
+
syncUrl += `&${consentGPP}`
|
|
186
|
+
}
|
|
187
|
+
syncs.push({
|
|
188
|
+
type: 'iframe',
|
|
189
|
+
url: syncUrl
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (syncOptions.pixelEnabled && REFERER != null && syncs.length == 0 && raiSync.raiImage != 'exclude') {
|
|
194
|
+
syncUrl = `https://sync.richaudience.com/bf7c142f4339da0278e83698a02b0854/?referrer=${REFERER}`;
|
|
195
|
+
if (consent != '') {
|
|
196
|
+
syncUrl += `&${consent}`
|
|
197
|
+
}
|
|
198
|
+
if (consentGPP != '') {
|
|
199
|
+
syncUrl += `&${consentGPP}`
|
|
200
|
+
}
|
|
201
|
+
syncs.push({
|
|
202
|
+
type: 'image',
|
|
203
|
+
url: syncUrl
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return syncs
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
onTimeout: function (data) {
|
|
210
|
+
let url = raiGetTimeoutURL(data);
|
|
211
|
+
if (url) {
|
|
212
|
+
triggerPixel(url);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
registerBidder(spec);
|
|
218
|
+
|
|
219
|
+
function raiGetSizes(bid) {
|
|
220
|
+
let raiNewSizes;
|
|
221
|
+
if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) {
|
|
222
|
+
raiNewSizes = bid.mediaTypes.banner.sizes
|
|
223
|
+
}
|
|
224
|
+
if (raiNewSizes != null) {
|
|
225
|
+
return raiNewSizes.map(size => ({
|
|
226
|
+
w: size[0],
|
|
227
|
+
h: size[1]
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function raiGetDemandType(bid) {
|
|
233
|
+
let raiFormat = 'display';
|
|
234
|
+
if (typeof bid.sizes != 'undefined') {
|
|
235
|
+
bid.sizes.forEach(function (sz) {
|
|
236
|
+
if ((sz[0] == '1800' && sz[1] == '1000') || (sz[0] == '1' && sz[1] == '1')) {
|
|
237
|
+
raiFormat = 'skin'
|
|
238
|
+
}
|
|
239
|
+
})
|
|
240
|
+
}
|
|
241
|
+
if (bid.mediaTypes != undefined) {
|
|
242
|
+
if (bid.mediaTypes.video != undefined) {
|
|
243
|
+
raiFormat = 'video';
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return raiFormat;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function raiGetVideoInfo(bid) {
|
|
250
|
+
let videoData;
|
|
251
|
+
if (raiGetDemandType(bid) == 'video') {
|
|
252
|
+
videoData = {
|
|
253
|
+
format: bid.mediaTypes.video.context,
|
|
254
|
+
playerSize: bid.mediaTypes.video.playerSize,
|
|
255
|
+
mimes: bid.mediaTypes.video.mimes
|
|
256
|
+
};
|
|
257
|
+
} else {
|
|
258
|
+
videoData = {
|
|
259
|
+
format: 'banner'
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return videoData;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function raiSetEids(bid) {
|
|
266
|
+
let eids = [];
|
|
267
|
+
|
|
268
|
+
if (bid && bid.userId) {
|
|
269
|
+
raiSetUserId(bid, eids, 'id5-sync.com', deepAccess(bid, `userId.id5id.uid`));
|
|
270
|
+
raiSetUserId(bid, eids, 'pubcommon', deepAccess(bid, `userId.pubcid`));
|
|
271
|
+
raiSetUserId(bid, eids, 'criteo.com', deepAccess(bid, `userId.criteoId`));
|
|
272
|
+
raiSetUserId(bid, eids, 'liveramp.com', deepAccess(bid, `userId.idl_env`));
|
|
273
|
+
raiSetUserId(bid, eids, 'liveintent.com', deepAccess(bid, `userId.lipb.lipbid`));
|
|
274
|
+
raiSetUserId(bid, eids, 'adserver.org', deepAccess(bid, `userId.tdid`));
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return eids;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
function raiSetUserId(bid, eids, source, value) {
|
|
281
|
+
if (isStr(value)) {
|
|
282
|
+
eids.push({
|
|
283
|
+
userId: value,
|
|
284
|
+
source: source
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function renderer(bid) {
|
|
290
|
+
bid.renderer.push(() => {
|
|
291
|
+
renderAd(bid)
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function renderAd(bid) {
|
|
296
|
+
let raOutstreamHBPassback = `${bid.vastXml}`;
|
|
297
|
+
let raPlayerHB = {
|
|
298
|
+
config: bid.params[0].player != undefined ? {
|
|
299
|
+
end: bid.params[0].player.end != null ? bid.params[0].player.end : 'close',
|
|
300
|
+
init: bid.params[0].player.init != null ? bid.params[0].player.init : 'close',
|
|
301
|
+
skin: bid.params[0].player.skin != null ? bid.params[0].player.skin : 'light',
|
|
302
|
+
} : {end: 'close', init: 'close', skin: 'light'},
|
|
303
|
+
pid: bid.params[0].pid,
|
|
304
|
+
adUnit: bid.adUnitCode
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
window.raParams(raPlayerHB, raOutstreamHBPassback, true);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function raiGetResolution() {
|
|
311
|
+
let resolution = '';
|
|
312
|
+
if (typeof window.screen != 'undefined') {
|
|
313
|
+
resolution = window.screen.width + 'x' + window.screen.height;
|
|
314
|
+
}
|
|
315
|
+
return resolution;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function raiSetPbAdSlot(bid) {
|
|
319
|
+
let pbAdSlot = '';
|
|
320
|
+
if (deepAccess(bid, 'ortb2Imp.ext.data.pbadslot') != null) {
|
|
321
|
+
pbAdSlot = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot')
|
|
322
|
+
}
|
|
323
|
+
return pbAdSlot
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function raiGetSyncInclude(config) {
|
|
327
|
+
try {
|
|
328
|
+
let raConfig = null;
|
|
329
|
+
let raiSync = {};
|
|
330
|
+
if (config.getConfig('userSync').filterSettings != null && typeof config.getConfig('userSync').filterSettings != 'undefined') {
|
|
331
|
+
raConfig = config.getConfig('userSync').filterSettings
|
|
332
|
+
if (raConfig.iframe != null && typeof raConfig.iframe != 'undefined') {
|
|
333
|
+
raiSync.raiIframe = raConfig.iframe.bidders == 'richaudience' || raConfig.iframe.bidders == '*' ? raConfig.iframe.filter : 'exclude';
|
|
334
|
+
}
|
|
335
|
+
if (raConfig.image != null && typeof raConfig.image != 'undefined') {
|
|
336
|
+
raiSync.raiImage = raConfig.image.bidders == 'richaudience' || raConfig.image.bidders == '*' ? raConfig.image.filter : 'exclude';
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return raiSync;
|
|
340
|
+
} catch (e) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function raiGetFloor(bid, config) {
|
|
346
|
+
try {
|
|
347
|
+
let raiFloor;
|
|
348
|
+
if (bid.params.bidfloor != null) {
|
|
349
|
+
raiFloor = bid.params.bidfloor;
|
|
350
|
+
} else if (typeof bid.getFloor == 'function') {
|
|
351
|
+
let floorSpec = bid.getFloor({
|
|
352
|
+
currency: config.getConfig('floors.data.currency') != null ? config.getConfig('floors.data.currency') : 'USD',
|
|
353
|
+
mediaType: typeof bid.mediaTypes['banner'] == 'object' ? 'banner' : 'video',
|
|
354
|
+
size: '*'
|
|
355
|
+
})
|
|
356
|
+
|
|
357
|
+
raiFloor = floorSpec.floor;
|
|
358
|
+
}
|
|
359
|
+
return raiFloor
|
|
360
|
+
} catch (e) {
|
|
361
|
+
return 0
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
function raiGetTimeoutURL(data) {
|
|
366
|
+
let {params, timeout} = data[0]
|
|
367
|
+
let url = 'https://s.richaudience.com/err/?ec=6&ev=[timeout_publisher]&pla=[placement_hash]&int=PREBID&pltfm=&node=&dm=[domain]';
|
|
368
|
+
|
|
369
|
+
url = url.replace('[timeout_publisher]', timeout)
|
|
370
|
+
url = url.replace('[placement_hash]', params[0].pid)
|
|
371
|
+
if (document.location.host != null) {
|
|
372
|
+
url = url.replace('[domain]', document.location.host)
|
|
373
|
+
}
|
|
374
|
+
return url
|
|
375
|
+
}
|
|
@@ -13,7 +13,7 @@ import { BANNER } from '../src/mediaTypes.js';
|
|
|
13
13
|
const BIDDER_CODE = 'setupad';
|
|
14
14
|
const ENDPOINT = 'https://prebid.setupad.io/openrtb2/auction';
|
|
15
15
|
const SYNC_ENDPOINT = 'https://cookie.stpd.cloud/sync?';
|
|
16
|
-
const REPORT_ENDPOINT = 'https://adapter-analytics.setupad.io/api/adapter-analytics';
|
|
16
|
+
const REPORT_ENDPOINT = 'https://adapter-analytics.setupad.io/api/adapter-analytics?';
|
|
17
17
|
const GVLID = 1241;
|
|
18
18
|
const TIME_TO_LIVE = 360;
|
|
19
19
|
const biddersCreativeIds = {};
|
|
@@ -28,7 +28,12 @@ export const spec = {
|
|
|
28
28
|
gvlid: GVLID,
|
|
29
29
|
|
|
30
30
|
isBidRequestValid: function (bid) {
|
|
31
|
-
return !!(
|
|
31
|
+
return !!(
|
|
32
|
+
bid.params.placement_id &&
|
|
33
|
+
isStr(bid.params.placement_id) &&
|
|
34
|
+
bid.params.account_id &&
|
|
35
|
+
isStr(bid.params.account_id)
|
|
36
|
+
);
|
|
32
37
|
},
|
|
33
38
|
|
|
34
39
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
@@ -225,17 +230,23 @@ export const spec = {
|
|
|
225
230
|
|
|
226
231
|
if (!placementIds) return;
|
|
227
232
|
|
|
228
|
-
let extraBidParams = '';
|
|
229
|
-
|
|
230
233
|
// find the winning bidder by using creativeId as identification
|
|
231
234
|
if (biddersCreativeIds.hasOwnProperty(bid.creativeId) && biddersCreativeIds[bid.creativeId]) {
|
|
232
235
|
bidder = biddersCreativeIds[bid.creativeId];
|
|
233
236
|
}
|
|
234
237
|
|
|
235
|
-
|
|
236
|
-
|
|
238
|
+
const queryParams = [];
|
|
239
|
+
queryParams.push(`event=bidWon`);
|
|
240
|
+
queryParams.push('bidder=' + bidder);
|
|
241
|
+
queryParams.push('placementIds=' + placementIds);
|
|
242
|
+
queryParams.push('auctionId=' + auctionId);
|
|
243
|
+
queryParams.push('cpm=' + bid.originalCpm);
|
|
244
|
+
queryParams.push('currency=' + bid.originalCurrency);
|
|
245
|
+
queryParams.push('timestamp=' + Date.now());
|
|
246
|
+
|
|
247
|
+
const strQueryParams = queryParams.join('&');
|
|
237
248
|
|
|
238
|
-
const url =
|
|
249
|
+
const url = REPORT_ENDPOINT + strQueryParams;
|
|
239
250
|
triggerPixel(url);
|
|
240
251
|
},
|
|
241
252
|
};
|
|
@@ -251,21 +262,15 @@ function getBidders(serverResponse) {
|
|
|
251
262
|
}
|
|
252
263
|
|
|
253
264
|
function getAd(bid) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
|
|
261
|
-
} else if (bid.adm) {
|
|
262
|
-
ad = bid.adm;
|
|
263
|
-
} else if (bid.nurl) {
|
|
264
|
-
adUrl = bid.nurl;
|
|
265
|
-
}
|
|
265
|
+
const { adm, nurl } = bid;
|
|
266
|
+
let ad = adm;
|
|
267
|
+
|
|
268
|
+
if (nurl) {
|
|
269
|
+
const trackingPixel = createTrackPixelHtml(decodeURIComponent(nurl));
|
|
270
|
+
ad += trackingPixel;
|
|
266
271
|
}
|
|
267
272
|
|
|
268
|
-
return { ad
|
|
273
|
+
return { ad };
|
|
269
274
|
}
|
|
270
275
|
|
|
271
276
|
registerBidder(spec);
|
|
@@ -212,15 +212,19 @@ const converter = ortbConverter({
|
|
|
212
212
|
return bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies;
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
+
function setPublisherId(node) {
|
|
216
|
+
deepSetValue(node, 'publisher.id', bidRequest.params.publisherId);
|
|
217
|
+
}
|
|
218
|
+
|
|
215
219
|
const request = buildRequest(imps, bidderRequest, context);
|
|
216
220
|
const bidRequest = context.bidRequests[0];
|
|
217
|
-
let
|
|
221
|
+
let content;
|
|
218
222
|
const mediaType = context.mediaType;
|
|
219
223
|
if (mediaType === VIDEO) {
|
|
220
224
|
const videoParams = bidRequest.mediaTypes[VIDEO];
|
|
221
225
|
if (videoParams.context === ADPOD) {
|
|
222
226
|
request.imp = createAdPodImp(request.imp[0], videoParams);
|
|
223
|
-
|
|
227
|
+
content = addOptionalAdpodParameters(videoParams);
|
|
224
228
|
}
|
|
225
229
|
}
|
|
226
230
|
|
|
@@ -242,19 +246,26 @@ const converter = ortbConverter({
|
|
|
242
246
|
|
|
243
247
|
if (request.site) {
|
|
244
248
|
request.site.id = window.location.hostname
|
|
245
|
-
if (
|
|
246
|
-
request.site.content =
|
|
249
|
+
if (content) {
|
|
250
|
+
request.site.content = content;
|
|
251
|
+
}
|
|
252
|
+
setPublisherId(request.site);
|
|
253
|
+
} else if (request.dooh) {
|
|
254
|
+
request.dooh.id = window.location.hostname
|
|
255
|
+
if (content) {
|
|
256
|
+
request.dooh.content = content;
|
|
247
257
|
}
|
|
258
|
+
setPublisherId(request.dooh);
|
|
248
259
|
} else {
|
|
249
260
|
request.site = {
|
|
250
261
|
id: window.location.hostname,
|
|
251
262
|
domain: bidderRequest.refererInfo.domain || window.location.hostname,
|
|
252
263
|
page: bidderRequest.refererInfo.page || window.location.href,
|
|
253
264
|
ref: bidderRequest.refererInfo.ref,
|
|
254
|
-
content:
|
|
265
|
+
content: content || null
|
|
255
266
|
}
|
|
267
|
+
setPublisherId(request.site);
|
|
256
268
|
}
|
|
257
|
-
deepSetValue(request.site, 'publisher.id', bidRequest.params.publisherId);
|
|
258
269
|
|
|
259
270
|
if (request.regs) {
|
|
260
271
|
if (isGdprApplicable()) {
|
|
@@ -41,7 +41,8 @@ function adRenderSucceededHandler(args) {
|
|
|
41
41
|
size: args.bid?.size,
|
|
42
42
|
adomain: args.bid?.adserverTargeting?.hb_adomain,
|
|
43
43
|
timeToRespond: args.bid?.timeToRespond,
|
|
44
|
-
cpm: args.bid?.cpm
|
|
44
|
+
cpm: args.bid?.cpm,
|
|
45
|
+
adUnitCode: args.bid?.adUnitCode
|
|
45
46
|
},
|
|
46
47
|
device: {
|
|
47
48
|
ua: navigator.userAgent
|
|
@@ -63,7 +64,8 @@ function auctionEndHandler(args) {
|
|
|
63
64
|
bidder: b?.bidder,
|
|
64
65
|
mediaType: b?.mediaTypes?.video ? 'VIDEO' : (b?.mediaTypes?.banner ? 'BANNER' : undefined),
|
|
65
66
|
size: b?.sizes?.filter(s => s && s.length === 2).filter(s => Number.isInteger(s[0]) && Number.isInteger(s[1])).map(s => s[0] + 'x' + s[1]).find(s => s),
|
|
66
|
-
device: b?.ortb2?.device
|
|
67
|
+
device: b?.ortb2?.device,
|
|
68
|
+
adUnitCode: b?.adUnitCode
|
|
67
69
|
}))
|
|
68
70
|
})),
|
|
69
71
|
bidsReceived: args.bidsReceived?.map(br => ({
|
|
@@ -75,7 +77,8 @@ function auctionEndHandler(args) {
|
|
|
75
77
|
size: br?.size,
|
|
76
78
|
adomain: br?.adserverTargeting?.hb_adomain,
|
|
77
79
|
timeToRespond: br?.timeToRespond,
|
|
78
|
-
cpm: br?.cpm
|
|
80
|
+
cpm: br?.cpm,
|
|
81
|
+
adUnitCode: br?.adUnitCode
|
|
79
82
|
}))
|
|
80
83
|
}
|
|
81
84
|
sendEvent(EVENTS.AUCTION_END, event);
|
|
@@ -93,7 +96,8 @@ function bidTimeoutHandler(args) {
|
|
|
93
96
|
mediaType: t?.mediaTypes?.video ? 'VIDEO' : (t?.mediaTypes?.banner ? 'BANNER' : undefined),
|
|
94
97
|
size: t?.sizes?.filter(s => s && s.length === 2).filter(s => Number.isInteger(s[0]) && Number.isInteger(s[1])).map(s => s[0] + 'x' + s[1]).find(s => s),
|
|
95
98
|
timeout: t?.timeout,
|
|
96
|
-
device: t?.ortb2?.device
|
|
99
|
+
device: t?.ortb2?.device,
|
|
100
|
+
adUnitCode: t?.adUnitCode
|
|
97
101
|
}))
|
|
98
102
|
}
|
|
99
103
|
sendEvent(EVENTS.BID_TIMEOUT, event);
|
package/package.json
CHANGED
|
@@ -196,7 +196,7 @@ describe('dailymotionBidAdapterTests', () => {
|
|
|
196
196
|
livestream: !!bidRequestData[0].params.video.livestream,
|
|
197
197
|
isCreatedForKids: bidRequestData[0].params.video.isCreatedForKids,
|
|
198
198
|
context: {
|
|
199
|
-
siteOrAppCat:
|
|
199
|
+
siteOrAppCat: [],
|
|
200
200
|
videoViewsInSession: bidRequestData[0].params.video.videoViewsInSession,
|
|
201
201
|
autoplay: bidRequestData[0].params.video.autoplay,
|
|
202
202
|
playerVolume: bidRequestData[0].params.video.playerVolume,
|
|
@@ -342,7 +342,7 @@ describe('dailymotionBidAdapterTests', () => {
|
|
|
342
342
|
livestream: !!bidRequestData[0].params.video.livestream,
|
|
343
343
|
isCreatedForKids: null,
|
|
344
344
|
context: {
|
|
345
|
-
siteOrAppCat:
|
|
345
|
+
siteOrAppCat: [],
|
|
346
346
|
videoViewsInSession: null,
|
|
347
347
|
autoplay: null,
|
|
348
348
|
playerVolume: null,
|
|
@@ -588,7 +588,7 @@ describe('dailymotionBidAdapterTests', () => {
|
|
|
588
588
|
livestream: false,
|
|
589
589
|
isCreatedForKids: null,
|
|
590
590
|
context: {
|
|
591
|
-
siteOrAppCat:
|
|
591
|
+
siteOrAppCat: [],
|
|
592
592
|
videoViewsInSession: null,
|
|
593
593
|
autoplay: null,
|
|
594
594
|
playerVolume: null,
|