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.
Files changed (170) hide show
  1. package/.nvmrc +1 -1
  2. package/dist/33acrossAnalyticsAdapter.js +1 -1
  3. package/dist/33acrossBidAdapter.js +1 -1
  4. package/dist/33acrossIdSystem.js +1 -1
  5. package/dist/BTBidAdapter.js +1 -1
  6. package/dist/adagioAnalyticsAdapter.js +1 -1
  7. package/dist/adagioBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adqueryBidAdapter.js +1 -1
  10. package/dist/adrelevantisBidAdapter.js +1 -1
  11. package/dist/adstirBidAdapter.js +1 -1
  12. package/dist/adtrgtmeBidAdapter.js +1 -1
  13. package/dist/adxcgBidAdapter.js +1 -1
  14. package/dist/adyoulikeBidAdapter.js +1 -1
  15. package/dist/agmaAnalyticsAdapter.js +1 -1
  16. package/dist/ajaBidAdapter.js +1 -1
  17. package/dist/amxBidAdapter.js +1 -1
  18. package/dist/amxIdSystem.js +1 -1
  19. package/dist/appierAnalyticsAdapter.js +1 -1
  20. package/dist/appnexusBidAdapter.js +1 -1
  21. package/dist/asoBidAdapter.js +1 -1
  22. package/dist/axonixBidAdapter.js +1 -1
  23. package/dist/bidglassBidAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/bridBidAdapter.js +1 -1
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/carodaBidAdapter.js +1 -1
  29. package/dist/chtnwBidAdapter.js +1 -1
  30. package/dist/chunk-core.js +1 -1
  31. package/dist/concertBidAdapter.js +1 -1
  32. package/dist/connectadBidAdapter.js +1 -1
  33. package/dist/consumableBidAdapter.js +1 -1
  34. package/dist/conversantAnalyticsAdapter.js +1 -1
  35. package/dist/conversantBidAdapter.js +1 -1
  36. package/dist/craftBidAdapter.js +1 -1
  37. package/dist/criteoBidAdapter.js +1 -1
  38. package/dist/cwireBidAdapter.js +1 -1
  39. package/dist/dailymotionBidAdapter.js +1 -1
  40. package/dist/dependencies.json +5 -2
  41. package/dist/dspxBidAdapter.js +1 -1
  42. package/dist/dxkultureBidAdapter.js +1 -1
  43. package/dist/eplanningBidAdapter.js +1 -1
  44. package/dist/euidIdSystem.js +1 -1
  45. package/dist/exadsBidAdapter.js +1 -1
  46. package/dist/feedadBidAdapter.js +1 -1
  47. package/dist/finativeBidAdapter.js +1 -1
  48. package/dist/freewheel-sspBidAdapter.js +1 -1
  49. package/dist/gmosspBidAdapter.js +1 -1
  50. package/dist/goldbachBidAdapter.js +1 -1
  51. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  52. package/dist/greenbidsRtdProvider.js +1 -1
  53. package/dist/gridBidAdapter.js +1 -1
  54. package/dist/gumgumBidAdapter.js +1 -1
  55. package/dist/h12mediaBidAdapter.js +1 -1
  56. package/dist/hypelabBidAdapter.js +1 -1
  57. package/dist/id5IdSystem.js +1 -1
  58. package/dist/illuminBidAdapter.js +1 -1
  59. package/dist/imdsBidAdapter.js +1 -1
  60. package/dist/improvedigitalBidAdapter.js +1 -1
  61. package/dist/insticatorBidAdapter.js +1 -1
  62. package/dist/ixBidAdapter.js +1 -1
  63. package/dist/jixieBidAdapter.js +1 -1
  64. package/dist/justpremiumBidAdapter.js +1 -1
  65. package/dist/kargoBidAdapter.js +1 -1
  66. package/dist/kimberliteBidAdapter.js +1 -1
  67. package/dist/konduitAnalyticsAdapter.js +1 -1
  68. package/dist/kueezBidAdapter.js +1 -1
  69. package/dist/kueezRtbBidAdapter.js +1 -1
  70. package/dist/lassoBidAdapter.js +1 -1
  71. package/dist/lifestreetBidAdapter.js +1 -1
  72. package/dist/liveIntentIdSystem.js +1 -1
  73. package/dist/logicadBidAdapter.js +1 -1
  74. package/dist/loglyliftBidAdapter.js +1 -1
  75. package/dist/luceadBidAdapter.js +1 -1
  76. package/dist/magniteAnalyticsAdapter.js +1 -1
  77. package/dist/malltvAnalyticsAdapter.js +1 -1
  78. package/dist/marsmediaBidAdapter.js +1 -1
  79. package/dist/mediafuseBidAdapter.js +1 -1
  80. package/dist/mediasquareBidAdapter.js +1 -1
  81. package/dist/mgidBidAdapter.js +1 -1
  82. package/dist/mgidXBidAdapter.js +1 -1
  83. package/dist/minutemediaBidAdapter.js +1 -1
  84. package/dist/missenaBidAdapter.js +1 -1
  85. package/dist/mobianRtdProvider.js +1 -0
  86. package/dist/nexx360BidAdapter.js +1 -1
  87. package/dist/nobidAnalyticsAdapter.js +1 -1
  88. package/dist/nobidBidAdapter.js +1 -1
  89. package/dist/not-for-prod/prebid.js +151 -149
  90. package/dist/oguryBidAdapter.js +1 -1
  91. package/dist/onetagBidAdapter.js +1 -1
  92. package/dist/ooloAnalyticsAdapter.js +1 -1
  93. package/dist/openwebBidAdapter.js +1 -1
  94. package/dist/openxBidAdapter.js +1 -1
  95. package/dist/optidigitalBidAdapter.js +1 -1
  96. package/dist/outbrainBidAdapter.js +1 -1
  97. package/dist/pixfutureBidAdapter.js +1 -1
  98. package/dist/publinkIdSystem.js +1 -1
  99. package/dist/publirBidAdapter.js +1 -1
  100. package/dist/pubmaticBidAdapter.js +1 -1
  101. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  102. package/dist/pxyzBidAdapter.js +1 -1
  103. package/dist/quantcastBidAdapter.js +1 -1
  104. package/dist/readpeakBidAdapter.js +1 -1
  105. package/dist/relaidoBidAdapter.js +1 -1
  106. package/dist/retailspotBidAdapter.js +1 -1
  107. package/dist/rhythmoneBidAdapter.js +1 -1
  108. package/dist/richaudienceBidAdapter.js +1 -0
  109. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  110. package/dist/riseBidAdapter.js +1 -1
  111. package/dist/rubiconBidAdapter.js +1 -1
  112. package/dist/seedingAllianceBidAdapter.js +1 -1
  113. package/dist/seedtagBidAdapter.js +1 -1
  114. package/dist/setupadBidAdapter.js +1 -1
  115. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  116. package/dist/sharethroughBidAdapter.js +1 -1
  117. package/dist/shinezBidAdapter.js +1 -1
  118. package/dist/shinezRtbBidAdapter.js +1 -1
  119. package/dist/smaatoBidAdapter.js +1 -1
  120. package/dist/smartadserverBidAdapter.js +1 -1
  121. package/dist/smartxBidAdapter.js +1 -1
  122. package/dist/smilewantedBidAdapter.js +1 -1
  123. package/dist/sonobiBidAdapter.js +1 -1
  124. package/dist/sovrnBidAdapter.js +1 -1
  125. package/dist/sspBCBidAdapter.js +1 -1
  126. package/dist/stnBidAdapter.js +1 -1
  127. package/dist/stvBidAdapter.js +1 -1
  128. package/dist/sublimeBidAdapter.js +1 -1
  129. package/dist/taboolaBidAdapter.js +1 -1
  130. package/dist/tagorasBidAdapter.js +1 -1
  131. package/dist/targetVideoBidAdapter.js +1 -1
  132. package/dist/teadsBidAdapter.js +1 -1
  133. package/dist/themoneytizerBidAdapter.js +1 -1
  134. package/dist/trionBidAdapter.js +1 -1
  135. package/dist/tripleliftBidAdapter.js +1 -1
  136. package/dist/ttdBidAdapter.js +1 -1
  137. package/dist/twistDigitalBidAdapter.js +1 -1
  138. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  139. package/dist/uid2IdSystem.js +1 -1
  140. package/dist/underdogmediaBidAdapter.js +1 -1
  141. package/dist/undertoneBidAdapter.js +1 -1
  142. package/dist/unrulyBidAdapter.js +1 -1
  143. package/dist/vidazooBidAdapter.js +1 -1
  144. package/dist/videobyteBidAdapter.js +1 -1
  145. package/dist/visxBidAdapter.js +1 -1
  146. package/dist/vuukleBidAdapter.js +1 -1
  147. package/dist/widespaceBidAdapter.js +1 -1
  148. package/dist/winrBidAdapter.js +1 -1
  149. package/dist/yahooAdsBidAdapter.js +1 -1
  150. package/dist/yieldmoBidAdapter.js +1 -1
  151. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  152. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  153. package/modules/dailymotionBidAdapter.js +1 -1
  154. package/modules/mgidXBidAdapter.js +0 -2
  155. package/modules/mobianRtdProvider.js +52 -0
  156. package/modules/mobianRtdProvider.md +11 -0
  157. package/modules/novatiqIdSystem.md +2 -3
  158. package/modules/richaudienceBidAdapter.js +375 -0
  159. package/modules/richaudienceBidAdapter.md +1 -1
  160. package/modules/setupadBidAdapter.js +25 -20
  161. package/modules/setupadBidAdapter.md +1 -1
  162. package/modules/smaatoBidAdapter.js +17 -6
  163. package/modules/zeta_global_sspAnalyticsAdapter.js +8 -4
  164. package/package.json +1 -1
  165. package/test/spec/modules/dailymotionBidAdapter_spec.js +3 -3
  166. package/test/spec/modules/mobianRtdProvider_spec.js +107 -0
  167. package/test/spec/modules/richaudienceBidAdapter_spec.js +1304 -0
  168. package/test/spec/modules/setupadBidAdapter_spec.js +15 -0
  169. package/test/spec/modules/smaatoBidAdapter_spec.js +27 -0
  170. 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
+ }
@@ -3,7 +3,7 @@
3
3
  ```
4
4
  Module Name: Rich Audience Bidder Adapter
5
5
  Module Type: Bidder Adapter
6
- Maintainer: cert@richaudience.com
6
+ Maintainer: integrations@richaudience.com
7
7
  ```
8
8
 
9
9
  # Description
@@ -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 !!(bid.params.placement_id && isStr(bid.params.placement_id));
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
- // Add extra parameters
236
- extraBidParams = `&cpm=${bid.originalCpm}&currency=${bid.originalCurrency}`;
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 = `${REPORT_ENDPOINT}?event=bidWon&bidder=${bidder}&placementIds=${placementIds}&auctionId=${auctionId}${extraBidParams}&timestamp=${Date.now()}`;
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
- let ad, adUrl;
255
-
256
- switch (deepAccess(bid, 'ext.prebid.type')) {
257
- default:
258
- if (bid.adm && bid.nurl) {
259
- ad = bid.adm;
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, adUrl };
273
+ return { ad };
269
274
  }
270
275
 
271
276
  registerBidder(spec);
@@ -26,7 +26,7 @@ const adUnits = [
26
26
  bidder: 'setupad',
27
27
  params: {
28
28
  placement_id: '123', //required
29
- account_id: '123', //optional
29
+ account_id: '123', //required
30
30
  },
31
31
  },
32
32
  ],
@@ -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 siteContent;
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
- siteContent = addOptionalAdpodParameters(videoParams);
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 (siteContent) {
246
- request.site.content = siteContent;
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: siteContent || null
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "9.0.0",
3
+ "version": "9.1.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.public.js",
6
6
  "exports": {
@@ -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,