prebid.js 8.3.0 → 8.4.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 (203) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/admanBidAdapter.js +1 -1
  7. package/dist/adqueryBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adtrgtmeBidAdapter.js +1 -1
  10. package/dist/adxcgBidAdapter.js +1 -1
  11. package/dist/adyoulikeBidAdapter.js +1 -1
  12. package/dist/ajaBidAdapter.js +1 -1
  13. package/dist/amxBidAdapter.js +1 -1
  14. package/dist/amxIdSystem.js +1 -1
  15. package/dist/appierAnalyticsAdapter.js +1 -1
  16. package/dist/appnexusBidAdapter.js +1 -1
  17. package/dist/asoBidAdapter.js +1 -1
  18. package/dist/axonixBidAdapter.js +1 -1
  19. package/dist/bidglassBidAdapter.js +1 -1
  20. package/dist/big-richmediaBidAdapter.js +1 -1
  21. package/dist/brandmetricsRtdProvider.js +1 -1
  22. package/dist/bridBidAdapter.js +1 -1
  23. package/dist/bridgewellBidAdapter.js +1 -1
  24. package/dist/brightMountainMediaBidAdapter.js +1 -1
  25. package/dist/carodaBidAdapter.js +1 -1
  26. package/dist/chtnwBidAdapter.js +1 -1
  27. package/dist/concertBidAdapter.js +1 -1
  28. package/dist/connectadBidAdapter.js +1 -1
  29. package/dist/consumableBidAdapter.js +1 -1
  30. package/dist/conversantAnalyticsAdapter.js +1 -1
  31. package/dist/conversantBidAdapter.js +1 -1
  32. package/dist/craftBidAdapter.js +1 -1
  33. package/dist/criteoBidAdapter.js +1 -1
  34. package/dist/cwireBidAdapter.js +1 -1
  35. package/dist/dependencies.json +3 -0
  36. package/dist/dspxBidAdapter.js +1 -1
  37. package/dist/eplanningBidAdapter.js +1 -1
  38. package/dist/euidIdSystem.js +1 -1
  39. package/dist/feedadBidAdapter.js +1 -1
  40. package/dist/finativeBidAdapter.js +1 -1
  41. package/dist/freewheel-sspBidAdapter.js +1 -1
  42. package/dist/gdprEnforcement.js +1 -1
  43. package/dist/gmosspBidAdapter.js +1 -1
  44. package/dist/goldbachBidAdapter.js +1 -1
  45. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  46. package/dist/greenbidsRtdProvider.js +1 -1
  47. package/dist/gridBidAdapter.js +1 -1
  48. package/dist/gumgumBidAdapter.js +1 -1
  49. package/dist/h12mediaBidAdapter.js +1 -1
  50. package/dist/hypelabBidAdapter.js +1 -1
  51. package/dist/id5IdSystem.js +1 -1
  52. package/dist/imdsBidAdapter.js +1 -1
  53. package/dist/improvedigitalBidAdapter.js +1 -1
  54. package/dist/insticatorBidAdapter.js +1 -1
  55. package/dist/ixBidAdapter.js +1 -1
  56. package/dist/justpremiumBidAdapter.js +1 -1
  57. package/dist/kargoBidAdapter.js +1 -1
  58. package/dist/konduitAnalyticsAdapter.js +1 -1
  59. package/dist/kueezBidAdapter.js +1 -1
  60. package/dist/kueezRtbBidAdapter.js +1 -1
  61. package/dist/kulturemediaBidAdapter.js +1 -1
  62. package/dist/lassoBidAdapter.js +1 -1
  63. package/dist/lifestreetBidAdapter.js +1 -1
  64. package/dist/logicadBidAdapter.js +1 -1
  65. package/dist/loglyliftBidAdapter.js +1 -1
  66. package/dist/magniteAnalyticsAdapter.js +1 -1
  67. package/dist/malltvAnalyticsAdapter.js +1 -1
  68. package/dist/marsmediaBidAdapter.js +1 -1
  69. package/dist/mediafuseBidAdapter.js +1 -1
  70. package/dist/mediasquareBidAdapter.js +1 -1
  71. package/dist/mgidBidAdapter.js +1 -1
  72. package/dist/minutemediaBidAdapter.js +1 -1
  73. package/dist/minutemediaplusBidAdapter.js +1 -1
  74. package/dist/nexx360BidAdapter.js +1 -1
  75. package/dist/not-for-prod/prebid.js +135 -135
  76. package/dist/oguryBidAdapter.js +1 -1
  77. package/dist/onetagBidAdapter.js +1 -1
  78. package/dist/ooloAnalyticsAdapter.js +1 -1
  79. package/dist/optidigitalBidAdapter.js +1 -1
  80. package/dist/outbrainBidAdapter.js +1 -1
  81. package/dist/parrableIdSystem.js +1 -1
  82. package/dist/pixfutureBidAdapter.js +1 -1
  83. package/dist/prebid-core.js +2 -2
  84. package/dist/publinkIdSystem.js +1 -1
  85. package/dist/pubmaticBidAdapter.js +1 -1
  86. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  87. package/dist/pulsepointBidAdapter.js +1 -1
  88. package/dist/pxyzBidAdapter.js +1 -1
  89. package/dist/quantcastBidAdapter.js +1 -1
  90. package/dist/readpeakBidAdapter.js +1 -1
  91. package/dist/relaidoBidAdapter.js +1 -1
  92. package/dist/retailspotBidAdapter.js +1 -1
  93. package/dist/rhythmoneBidAdapter.js +1 -1
  94. package/dist/riseBidAdapter.js +1 -1
  95. package/dist/rubiconBidAdapter.js +1 -1
  96. package/dist/seedingAllianceBidAdapter.js +1 -1
  97. package/dist/seedtagBidAdapter.js +1 -1
  98. package/dist/sharedIdSystem.js +1 -1
  99. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  100. package/dist/sharethroughBidAdapter.js +1 -1
  101. package/dist/shinezBidAdapter.js +1 -1
  102. package/dist/smaatoBidAdapter.js +1 -1
  103. package/dist/smartadserverBidAdapter.js +1 -1
  104. package/dist/smartxBidAdapter.js +1 -1
  105. package/dist/smilewantedBidAdapter.js +1 -1
  106. package/dist/sonobiBidAdapter.js +1 -1
  107. package/dist/sovrnAnalyticsAdapter.js +1 -1
  108. package/dist/sovrnBidAdapter.js +1 -1
  109. package/dist/sspBCBidAdapter.js +1 -1
  110. package/dist/stroeerCoreBidAdapter.js +1 -1
  111. package/dist/stvBidAdapter.js +1 -1
  112. package/dist/sublimeBidAdapter.js +1 -1
  113. package/dist/targetVideoBidAdapter.js +1 -1
  114. package/dist/teadsBidAdapter.js +1 -1
  115. package/dist/topicsFpdModule.js +1 -1
  116. package/dist/trionBidAdapter.js +1 -1
  117. package/dist/tripleliftBidAdapter.js +1 -1
  118. package/dist/ttdBidAdapter.js +1 -1
  119. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  120. package/dist/uid2IdSystem.js +1 -1
  121. package/dist/underdogmediaBidAdapter.js +1 -1
  122. package/dist/undertoneBidAdapter.js +1 -1
  123. package/dist/userId.js +1 -1
  124. package/dist/vidazooBidAdapter.js +1 -1
  125. package/dist/videobyteBidAdapter.js +1 -1
  126. package/dist/visxBidAdapter.js +1 -1
  127. package/dist/voxBidAdapter.js +1 -1
  128. package/dist/vuukleBidAdapter.js +1 -1
  129. package/dist/widespaceBidAdapter.js +1 -1
  130. package/dist/winrBidAdapter.js +1 -1
  131. package/dist/yahoosspBidAdapter.js +1 -1
  132. package/dist/yandexBidAdapter.js +1 -1
  133. package/dist/yieldmoBidAdapter.js +1 -1
  134. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  135. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  136. package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -2
  137. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  138. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  139. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  140. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  141. package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +1 -1
  142. package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +1 -1
  143. package/integrationExamples/videoModule/videojs/eventListeners.html +1 -1
  144. package/integrationExamples/videoModule/videojs/eventsUI.html +1 -1
  145. package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +1 -1
  146. package/integrationExamples/videoModule/videojs/mediaMetadata.html +1 -1
  147. package/integrationExamples/videoModule/videojs/playlist.html +1 -1
  148. package/modules/33acrossBidAdapter.js +24 -14
  149. package/modules/33acrossIdSystem.js +15 -4
  150. package/modules/adagioBidAdapter.js +0 -1
  151. package/modules/admanBidAdapter.js +4 -0
  152. package/modules/brandmetricsRtdProvider.js +36 -2
  153. package/modules/brandmetricsRtdProvider.md +17 -2
  154. package/modules/gdprEnforcement.js +27 -22
  155. package/modules/gridBidAdapter.js +19 -0
  156. package/modules/ixBidAdapter.js +40 -2
  157. package/modules/kargoBidAdapter.js +4 -0
  158. package/modules/minutemediaBidAdapter.js +17 -2
  159. package/modules/oguryBidAdapter.js +29 -16
  160. package/modules/pubmaticBidAdapter.js +16 -1
  161. package/modules/pulsepointBidAdapter.js +63 -424
  162. package/modules/pulsepointBidAdapter.md +39 -45
  163. package/modules/sharedIdSystem.js +1 -1
  164. package/modules/sovrnBidAdapter.js +5 -1
  165. package/modules/stroeerCoreBidAdapter.js +2 -3
  166. package/modules/teadsBidAdapter.js +2 -0
  167. package/modules/topicsFpdModule.js +4 -1
  168. package/modules/topicsFpdModule.md +4 -0
  169. package/modules/userId/index.js +2 -2
  170. package/modules/vidazooBidAdapter.js +5 -7
  171. package/modules/voxBidAdapter.js +16 -5
  172. package/modules/yahoosspBidAdapter.js +38 -33
  173. package/modules/yahoosspBidAdapter.md +96 -95
  174. package/modules/yandexBidAdapter.js +12 -15
  175. package/package.json +1 -1
  176. package/src/activities/redactor.js +1 -1
  177. package/src/auction.js +24 -2
  178. package/src/constants.json +3 -1
  179. package/src/fpd/sua.js +8 -2
  180. package/test/spec/auctionmanager_spec.js +29 -1
  181. package/test/spec/fpd/enrichment_spec.js +7 -1
  182. package/test/spec/fpd/sua_spec.js +12 -0
  183. package/test/spec/modules/33acrossBidAdapter_spec.js +188 -35
  184. package/test/spec/modules/33acrossIdSystem_spec.js +122 -27
  185. package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
  186. package/test/spec/modules/brandmetricsRtdProvider_spec.js +69 -7
  187. package/test/spec/modules/gdprEnforcement_spec.js +43 -2
  188. package/test/spec/modules/gridBidAdapter_spec.js +42 -0
  189. package/test/spec/modules/ixBidAdapter_spec.js +72 -0
  190. package/test/spec/modules/kargoBidAdapter_spec.js +121 -106
  191. package/test/spec/modules/minutemediaBidAdapter_spec.js +36 -5
  192. package/test/spec/modules/oguryBidAdapter_spec.js +208 -108
  193. package/test/spec/modules/pubmaticBidAdapter_spec.js +119 -0
  194. package/test/spec/modules/pulsepointBidAdapter_spec.js +225 -486
  195. package/test/spec/modules/sovrnBidAdapter_spec.js +24 -4
  196. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +8 -5
  197. package/test/spec/modules/teadsBidAdapter_spec.js +70 -21
  198. package/test/spec/modules/topicsFpdModule_spec.js +10 -4
  199. package/test/spec/modules/vidazooBidAdapter_spec.js +0 -5
  200. package/test/spec/modules/voxBidAdapter_spec.js +93 -0
  201. package/test/spec/modules/yahoosspBidAdapter_spec.js +402 -314
  202. package/test/spec/modules/yandexBidAdapter_spec.js +21 -3
  203. package/integrationExamples/gpt/inskin_example.html +0 -100
@@ -1,21 +1,9 @@
1
- import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
2
- /* eslint dot-notation:0, quote-props:0 */
3
- import {convertTypes, deepAccess, isArray, isFn, logError} from '../src/utils.js';
1
+ import { ortbConverter } from '../libraries/ortbConverter/converter.js';
2
+ import {convertTypes, isArray} from '../src/utils.js';
4
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
5
- import {Renderer} from '../src/Renderer.js';
6
4
 
7
- const NATIVE_DEFAULTS = {
8
- TITLE_LEN: 100,
9
- DESCR_LEN: 200,
10
- SPONSORED_BY_LEN: 50,
11
- IMG_MIN: 150,
12
- ICON_MIN: 50,
13
- };
14
-
15
- const DEFAULT_BID_TTL = 20;
16
5
  const DEFAULT_CURRENCY = 'USD';
17
- const DEFAULT_NET_REVENUE = true;
18
- const KNOWN_PARAMS = ['cp', 'ct', 'cf', 'video', 'battr', 'bcat', 'badv', 'bidfloor'];
6
+ const KNOWN_PARAMS = ['cp', 'ct', 'cf', 'battr', 'deals'];
19
7
  const DEFAULT_TMAX = 500;
20
8
 
21
9
  /**
@@ -41,33 +29,21 @@ export const spec = {
41
29
  ),
42
30
 
43
31
  buildRequests: (bidRequests, bidderRequest) => {
44
- // convert Native ORTB definition to old-style prebid native definition
45
- bidRequests = convertOrtbRequestToProprietaryNative(bidRequests);
46
-
47
- const request = {
48
- id: bidRequests[0].bidderRequestId,
49
- imp: bidRequests.map(slot => impression(slot)),
50
- site: site(bidRequests, bidderRequest),
51
- app: app(bidRequests),
52
- device: device(),
53
- bcat: deepAccess(bidderRequest.ortb2Imp, 'bcat') || bidRequests[0].params.bcat,
54
- badv: bidRequests[0].params.badv,
55
- user: user(bidRequests[0], bidderRequest),
56
- regs: regs(bidderRequest),
57
- source: source(bidRequests[0].schain),
58
- tmax: bidderRequest.timeout || DEFAULT_TMAX,
59
- };
32
+ const data = converter.toORTB({bidRequests, bidderRequest});
60
33
  return {
61
34
  method: 'POST',
62
35
  url: 'https://bid.contextweb.com/header/ortb?src=prebid',
63
- data: request,
36
+ data,
64
37
  bidderRequest
65
38
  };
66
39
  },
67
40
 
68
- interpretResponse: (response, request) => (
69
- bidResponseAvailable(request, response)
70
- ),
41
+ interpretResponse: (response, request) => {
42
+ if (response.body) {
43
+ return converter.fromORTB({response: response.body, request: request.data}).bids;
44
+ }
45
+ return [];
46
+ },
71
47
 
72
48
  getUserSyncs: syncOptions => {
73
49
  if (syncOptions.iframeEnabled) {
@@ -82,7 +58,7 @@ export const spec = {
82
58
  }];
83
59
  }
84
60
  },
85
- transformBidParams: function(params, isOpenRtb) {
61
+ transformBidParams: function(params) {
86
62
  return convertTypes({
87
63
  'cf': 'string',
88
64
  'cp': 'number',
@@ -91,124 +67,61 @@ export const spec = {
91
67
  }
92
68
  };
93
69
 
94
- /**
95
- * Callback for bids, after the call to PulsePoint completes.
96
- */
97
- function bidResponseAvailable(request, response) {
98
- const idToImpMap = {};
99
- const idToBidMap = {};
100
- const idToSlotConfig = {};
101
- const bidResponse = response.body;
102
- // extract the request bids and the response bids, keyed by impr-id
103
- const ortbRequest = request.data;
104
- ortbRequest.imp.forEach(imp => {
105
- idToImpMap[imp.id] = imp;
106
- });
107
- if (bidResponse) {
108
- bidResponse.seatbid.forEach(seatBid => seatBid.bid.forEach(bid => {
109
- idToBidMap[bid.impid] = bid;
110
- }));
111
- }
112
- if (request.bidderRequest && request.bidderRequest.bids) {
113
- request.bidderRequest.bids.forEach(bid => {
114
- idToSlotConfig[bid.bidId] = bid;
115
- });
116
- }
117
- const bids = [];
118
- Object.keys(idToImpMap).forEach(id => {
119
- if (idToBidMap[id]) {
120
- const bid = {
121
- requestId: id,
122
- cpm: idToBidMap[id].price,
123
- creative_id: idToBidMap[id].crid,
124
- creativeId: idToBidMap[id].crid,
125
- adId: id,
126
- ttl: idToBidMap[id].exp || DEFAULT_BID_TTL,
127
- netRevenue: DEFAULT_NET_REVENUE,
128
- currency: bidResponse.cur || DEFAULT_CURRENCY,
129
- meta: { advertiserDomains: idToBidMap[id].adomain || [] }
130
- };
131
- if (idToImpMap[id].video) {
132
- // for outstream, a renderer is specified
133
- if (idToSlotConfig[id] && deepAccess(idToSlotConfig[id], 'mediaTypes.video.context') === 'outstream') {
134
- bid.renderer = outstreamRenderer(deepAccess(idToSlotConfig[id], 'renderer.options'), deepAccess(idToBidMap[id], 'ext.outstream'));
70
+ const converter = ortbConverter({
71
+ context: {
72
+ netRevenue: true,
73
+ ttl: 300,
74
+ currency: 'USD'
75
+ },
76
+
77
+ imp(buildImp, bidRequest, context) {
78
+ const imp = buildImp(bidRequest, context);
79
+ // tagid
80
+ imp.tagid = bidRequest.params.ct.toString();
81
+ // unknown params
82
+ const unknownParams = slotUnknownParams(bidRequest);
83
+ if (imp.ext || unknownParams) {
84
+ imp.ext = Object.assign({}, imp.ext, unknownParams);
85
+ }
86
+ // battr
87
+ if (bidRequest.params.battr) {
88
+ ['banner', 'video', 'audio', 'native'].forEach(k => {
89
+ if (imp[k]) {
90
+ imp[k].battr = bidRequest.params.battr;
135
91
  }
136
- bid.vastXml = idToBidMap[id].adm;
137
- bid.mediaType = 'video';
138
- bid.width = idToBidMap[id].w;
139
- bid.height = idToBidMap[id].h;
140
- } else if (idToImpMap[id].banner) {
141
- bid.ad = idToBidMap[id].adm;
142
- bid.width = idToBidMap[id].w || idToImpMap[id].banner.w;
143
- bid.height = idToBidMap[id].h || idToImpMap[id].banner.h;
144
- } else if (idToImpMap[id]['native']) {
145
- bid['native'] = nativeResponse(idToImpMap[id], idToBidMap[id]);
146
- bid.mediaType = 'native';
147
- }
148
- bids.push(bid);
92
+ });
149
93
  }
150
- });
151
- return bids;
152
- }
153
-
154
- /**
155
- * Produces an OpenRTBImpression from a slot config.
156
- */
157
- function impression(slot) {
158
- var firstPartyData = slot.ortb2Imp?.ext || {};
159
- var ext = Object.assign({}, firstPartyData, slotUnknownParams(slot));
160
- return {
161
- id: slot.bidId,
162
- banner: banner(slot),
163
- 'native': nativeImpression(slot),
164
- tagid: slot.params.ct.toString(),
165
- video: video(slot),
166
- bidfloor: bidFloor(slot),
167
- ext: Object.keys(ext).length > 0 ? ext : null,
168
- };
169
- }
170
-
171
- /**
172
- * Produces an OpenRTB Banner object for the slot given.
173
- */
174
- function banner(slot) {
175
- const sizes = parseSizes(slot);
176
- const size = adSize(slot, sizes);
177
- return (slot.mediaTypes && slot.mediaTypes.banner) ? {
178
- w: size[0],
179
- h: size[1],
180
- battr: slot.params.battr,
181
- format: sizes
182
- } : null;
183
- }
94
+ // deals
95
+ if (bidRequest.params.deals && isArray(bidRequest.params.deals)) {
96
+ imp.pmp = {
97
+ private_auction: 0,
98
+ deals: bidRequest.params.deals
99
+ };
100
+ }
101
+ return imp;
102
+ },
184
103
 
185
- /**
186
- * Produce openrtb format objects based on the sizes configured for the slot.
187
- */
188
- function parseSizes(slot) {
189
- const sizes = deepAccess(slot, 'mediaTypes.banner.sizes');
190
- if (sizes && isArray(sizes)) {
191
- return sizes.filter(sz => isArray(sz) && sz.length === 2).map(sz => ({
192
- w: sz[0],
193
- h: sz[1]
194
- }));
195
- }
196
- return null;
197
- }
104
+ request(buildRequest, imps, bidderRequest, context) {
105
+ const request = buildRequest(imps, bidderRequest, context);
106
+ // publisher id
107
+ const siteOrApp = request.site || request.app;
108
+ const pubId = context.bidRequests && context.bidRequests.length > 0 ? context.bidRequests[0].params.cp : '0';
109
+ if (siteOrApp) {
110
+ siteOrApp.publisher = Object.assign({}, siteOrApp.publisher, {
111
+ id: pubId.toString()
112
+ });
113
+ }
114
+ // tmax
115
+ request.tmax = request.tmax || DEFAULT_TMAX;
116
+ return request;
117
+ },
198
118
 
199
- /**
200
- * Produces an OpenRTB Video object for the slot given
201
- */
202
- function video(slot) {
203
- if (slot.params.video) {
204
- return Object.assign({},
205
- slot.params.video, // previously supported as bidder param
206
- slot.mediaTypes && slot.mediaTypes.video ? slot.mediaTypes.video : {}, // params on mediaTypes.video
207
- {battr: slot.params.battr}
208
- );
209
- }
210
- return null;
211
- }
119
+ bidResponse(buildBidResponse, bid, context) {
120
+ const bidResponse = buildBidResponse(bid, context);
121
+ bidResponse.cur = bidResponse.cur || DEFAULT_CURRENCY;
122
+ return bidResponse;
123
+ },
124
+ });
212
125
 
213
126
  /**
214
127
  * Unknown params are captured and sent on ext
@@ -225,278 +138,4 @@ function slotUnknownParams(slot) {
225
138
  return Object.keys(ext).length > 0 ? { prebid: ext } : null;
226
139
  }
227
140
 
228
- /**
229
- * Sets up the renderer on the bid, for outstream bid responses.
230
- */
231
- function outstreamRenderer(rendererOptions, outstreamExtOptions) {
232
- const renderer = Renderer.install({
233
- url: outstreamExtOptions.rendererUrl,
234
- config: {
235
- defaultOptions: outstreamExtOptions.config,
236
- rendererOptions,
237
- type: outstreamExtOptions.type
238
- },
239
- loaded: false,
240
- });
241
- renderer.setRender((bid) => {
242
- bid.renderer.push(() => {
243
- const config = bid.renderer.getConfig();
244
- new window.PulsePointOutstreamRenderer().render({
245
- adUnitCode: bid.adUnitCode,
246
- vastXml: bid.vastXml,
247
- type: config.type,
248
- defaultOptions: config.defaultOptions,
249
- rendererOptions
250
- });
251
- });
252
- });
253
- return renderer;
254
- }
255
-
256
- /**
257
- * Produces an OpenRTB Native object for the slot given.
258
- */
259
- function nativeImpression(slot) {
260
- if (slot.nativeParams) {
261
- const assets = [];
262
- addAsset(assets, titleAsset(assets.length + 1, slot.nativeParams.title, NATIVE_DEFAULTS.TITLE_LEN));
263
- addAsset(assets, dataAsset(assets.length + 1, slot.nativeParams.body, 2, NATIVE_DEFAULTS.DESCR_LEN));
264
- addAsset(assets, dataAsset(assets.length + 1, slot.nativeParams.sponsoredBy, 1, NATIVE_DEFAULTS.SPONSORED_BY_LEN));
265
- addAsset(assets, imageAsset(assets.length + 1, slot.nativeParams.icon, 1, NATIVE_DEFAULTS.ICON_MIN, NATIVE_DEFAULTS.ICON_MIN));
266
- addAsset(assets, imageAsset(assets.length + 1, slot.nativeParams.image, 3, NATIVE_DEFAULTS.IMG_MIN, NATIVE_DEFAULTS.IMG_MIN));
267
- return {
268
- request: JSON.stringify({ assets }),
269
- ver: '1.1',
270
- battr: slot.params.battr,
271
- };
272
- }
273
- return null;
274
- }
275
-
276
- /**
277
- * Helper method to add an asset to the assets list.
278
- */
279
- function addAsset(assets, asset) {
280
- if (asset) {
281
- assets.push(asset);
282
- }
283
- }
284
-
285
- /**
286
- * Produces a Native Title asset for the configuration given.
287
- */
288
- function titleAsset(id, params, defaultLen) {
289
- if (params) {
290
- return {
291
- id,
292
- required: params.required ? 1 : 0,
293
- title: {
294
- len: params.len || defaultLen,
295
- },
296
- };
297
- }
298
- return null;
299
- }
300
-
301
- /**
302
- * Produces a Native Image asset for the configuration given.
303
- */
304
- function imageAsset(id, params, type, defaultMinWidth, defaultMinHeight) {
305
- return params ? {
306
- id,
307
- required: params.required ? 1 : 0,
308
- img: {
309
- type,
310
- wmin: params.wmin || defaultMinWidth,
311
- hmin: params.hmin || defaultMinHeight,
312
- }
313
- } : null;
314
- }
315
-
316
- /**
317
- * Produces a Native Data asset for the configuration given.
318
- */
319
- function dataAsset(id, params, type, defaultLen) {
320
- return params ? {
321
- id,
322
- required: params.required ? 1 : 0,
323
- data: {
324
- type,
325
- len: params.len || defaultLen,
326
- }
327
- } : null;
328
- }
329
-
330
- /**
331
- * Produces an OpenRTB site object.
332
- */
333
- function site(bidRequests, bidderRequest) {
334
- const pubId = bidRequests && bidRequests.length > 0 ? bidRequests[0].params.cp : '0';
335
- const appParams = bidRequests[0].params.app;
336
- if (!appParams) {
337
- // use the first party data if available, and override only publisher/ref/page properties
338
- var firstPartyData = bidderRequest?.ortb2?.site || {};
339
- return Object.assign({}, firstPartyData, {
340
- publisher: {
341
- id: pubId.toString(),
342
- },
343
- // TODO: does the fallback make sense here?
344
- ref: bidderRequest?.refererInfo?.ref || window.document.referrer,
345
- page: bidderRequest?.refererInfo?.page || ''
346
- });
347
- }
348
- return null;
349
- }
350
-
351
- /**
352
- * Produces an OpenRTB App object.
353
- */
354
- function app(bidderRequest) {
355
- const pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.cp : '0';
356
- const appParams = bidderRequest[0].params.app;
357
- if (appParams) {
358
- return {
359
- publisher: {
360
- id: pubId.toString(),
361
- },
362
- bundle: appParams.bundle,
363
- storeurl: appParams.storeUrl,
364
- domain: appParams.domain,
365
- }
366
- }
367
- return null;
368
- }
369
-
370
- /**
371
- * Produces an OpenRTB Device object.
372
- */
373
- function device() {
374
- return {
375
- ua: navigator.userAgent,
376
- language: (navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage),
377
- };
378
- }
379
-
380
- /**
381
- * Safely parses the input given. Returns null on
382
- * parsing failure.
383
- */
384
- function parse(rawResponse) {
385
- try {
386
- if (rawResponse) {
387
- return JSON.parse(rawResponse);
388
- }
389
- } catch (ex) {
390
- logError('pulsepointLite.safeParse', 'ERROR', ex);
391
- }
392
- return null;
393
- }
394
-
395
- /**
396
- * Determines the AdSize for the slot.
397
- */
398
- function adSize(slot, sizes) {
399
- if (slot.params.cf) {
400
- const size = slot.params.cf.toUpperCase().split('X');
401
- const width = parseInt(slot.params.cw || size[0], 10);
402
- const height = parseInt(slot.params.ch || size[1], 10);
403
- return [width, height];
404
- } else if (sizes && sizes.length > 0) {
405
- return [sizes[0].w, sizes[0].h];
406
- }
407
- return [1, 1];
408
- }
409
-
410
- /**
411
- * Handles the user level attributes and produces
412
- * an openrtb User object.
413
- */
414
- function user(bidRequest, bidderRequest) {
415
- var user = bidderRequest?.ortb2?.user || { ext: {} };
416
- var ext = user.ext;
417
- if (bidderRequest) {
418
- if (bidderRequest.gdprConsent) {
419
- ext.consent = bidderRequest.gdprConsent.consentString;
420
- }
421
- }
422
- if (bidRequest) {
423
- let eids = bidRequest.userIdAsEids;
424
- if (eids) {
425
- ext.eids = eids;
426
- }
427
- }
428
- return user;
429
- }
430
-
431
- /**
432
- * Produces the regulations ortb object
433
- */
434
- function regs(bidderRequest) {
435
- if (bidderRequest.gdprConsent || bidderRequest.uspConsent) {
436
- var ext = {};
437
- // GDPR applies attribute (actual consent value is in user object)
438
- if (bidderRequest.gdprConsent) {
439
- ext.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
440
- }
441
- // CCPA
442
- if (bidderRequest.uspConsent) {
443
- ext.us_privacy = bidderRequest.uspConsent;
444
- }
445
- return { ext };
446
- }
447
- return null;
448
- }
449
-
450
- /**
451
- * Creates source object with supply chain
452
- */
453
- function source(schain) {
454
- if (schain) {
455
- return {
456
- ext: { schain }
457
- };
458
- }
459
- return null;
460
- }
461
-
462
- /**
463
- * Parses the native response from the Bid given.
464
- */
465
- function nativeResponse(imp, bid) {
466
- if (imp['native']) {
467
- const nativeAd = parse(bid.adm);
468
- const keys = {};
469
- if (nativeAd && nativeAd['native'] && nativeAd['native'].assets) {
470
- nativeAd['native'].assets.forEach(asset => {
471
- keys.title = asset.title ? asset.title.text : keys.title;
472
- keys.body = asset.data && asset.data.type === 2 ? asset.data.value : keys.body;
473
- keys.sponsoredBy = asset.data && asset.data.type === 1 ? asset.data.value : keys.sponsoredBy;
474
- keys.image = asset.img && asset.img.type === 3 ? asset.img.url : keys.image;
475
- keys.icon = asset.img && asset.img.type === 1 ? asset.img.url : keys.icon;
476
- });
477
- if (nativeAd['native'].link) {
478
- keys.clickUrl = encodeURIComponent(nativeAd['native'].link.url);
479
- }
480
- keys.impressionTrackers = nativeAd['native'].imptrackers;
481
- return keys;
482
- }
483
- }
484
- return null;
485
- }
486
-
487
- function bidFloor(slot) {
488
- let floor = slot.params.bidfloor;
489
- if (isFn(slot.getFloor)) {
490
- const floorData = slot.getFloor({
491
- mediaType: slot.mediaTypes.banner ? 'banner' : slot.mediaTypes.video ? 'video' : 'Native',
492
- size: '*',
493
- currency: DEFAULT_CURRENCY,
494
- });
495
- if (floorData && floorData.floor) {
496
- floor = floorData.floor;
497
- }
498
- }
499
- return floor;
500
- }
501
-
502
141
  registerBidder(spec);
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Module Name**: PulsePoint Bidder Adapter
4
4
  **Module Type**: Bidder Adapter
5
- **Maintainer**: ExchangeTeam@pulsepoint.com
5
+ **Maintainer**: ExchangeTeam@pulsepoint.com
6
6
 
7
7
  # Description
8
8
 
@@ -18,55 +18,49 @@ Please use ```pulsepoint``` as the bidder code.
18
18
  sizes: [[300, 250]],
19
19
  bids: [{
20
20
  bidder: 'pulsepoint',
21
- params: {
22
- cf: '300X250',
21
+ params: {
23
22
  cp: 512379,
24
23
  ct: 486653
25
24
  }
26
25
  }]
27
26
  },{
28
- code: 'native-ad-div',
29
- sizes: [[1, 1]],
30
- nativeParams: {
31
- title: { required: true, len: 75 },
32
- image: { required: true },
33
- body: { len: 200 },
34
- sponsoredBy: { len: 20 }
35
- },
36
- bids: [{
37
- bidder: 'pulsepoint',
38
- params: {
39
- cp: 512379,
40
- ct: 505642
41
- }
42
- }]
43
- },{
44
- code: 'outstream-div',
45
- mediaTypes: {
46
- video: {
47
- playerSize: [640, 480],
48
- context: 'outstream',
49
- h: 300,
50
- w: 400,
51
- minduration: 1,
52
- maxduration: 210,
53
- linearity: 1,
54
- mimes: ["video/mp4", "video/ogg", "video/webm"],
55
- pos: 3
56
- }
57
- },
58
- bids: [{
59
- bidder: 'pulsepoint',
60
- params: {
61
- cp: 512379,
62
- ct: 505642
63
- }
64
- }],
65
- renderer: {
66
- options: {
67
- text: "PulsePoint Outstream"
68
- }
69
- }
27
+ code: 'native-1-slot',
28
+ mediaTypes: {
29
+ native: {
30
+ ortb: {
31
+ assets: [{
32
+ id: 1,
33
+ required: 1,
34
+ img: {
35
+ type: 3,
36
+ w: 150,
37
+ h: 50,
38
+ }
39
+ },
40
+ {
41
+ id: 2,
42
+ required: 1,
43
+ title: {
44
+ len: 80
45
+ }
46
+ },
47
+ {
48
+ id: 3,
49
+ required: 1,
50
+ data: {
51
+ type: 1
52
+ }
53
+ }]
54
+ }
55
+ }
56
+ },
57
+ bids: [{
58
+ bidder: 'pulsepoint',
59
+ params: {
60
+ cp: 512379,
61
+ ct: 694973
62
+ }
63
+ }]
70
64
  },{
71
65
  code: 'instream',
72
66
  mediaTypes: {
@@ -13,7 +13,7 @@ import {VENDORLESS_GVLID} from '../src/consentHandler.js';
13
13
  import {MODULE_TYPE_UID} from '../src/activities/modules.js';
14
14
  import {domainOverrideToRootDomain} from '../libraries/domainOverrideToRootDomain/index.js';
15
15
 
16
- export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleName: 'pubCommonId'});
16
+ export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleName: 'sharedId'});
17
17
  const COOKIE = 'cookie';
18
18
  const LOCAL_STORAGE = 'html5';
19
19
  const OPTOUT_NAME = '_pubcid_optout';
@@ -248,7 +248,7 @@ export const spec = {
248
248
  }
249
249
  },
250
250
 
251
- getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {
251
+ getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) {
252
252
  try {
253
253
  const tracks = []
254
254
  if (serverResponses && serverResponses.length !== 0) {
@@ -262,6 +262,10 @@ export const spec = {
262
262
  if (uspConsent) {
263
263
  params.push(['us_privacy', uspConsent]);
264
264
  }
265
+ if (gppConsent) {
266
+ params.push(['gpp', gppConsent.gppString]);
267
+ params.push(['gpp_sid', gppConsent.applicableSections])
268
+ }
265
269
 
266
270
  if (iidArr[0]) {
267
271
  params.push(['informer', iidArr[0]]);
@@ -1,4 +1,4 @@
1
- import {buildUrl, deepAccess, getWindowSelf, getWindowTop, isEmpty, isStr, logWarn} from '../src/utils.js';
1
+ import { buildUrl, deepAccess, generateUUID, getWindowSelf, getWindowTop, isEmpty, isStr, logWarn } from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
4
4
  import {find} from '../src/polyfill.js';
@@ -50,8 +50,7 @@ export const spec = {
50
50
  const refererInfo = bidderRequest.refererInfo;
51
51
 
52
52
  const basePayload = {
53
- // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
54
- id: bidderRequest.auctionId,
53
+ id: generateUUID(),
55
54
  ref: refererInfo.ref,
56
55
  ssl: isSecureWindow(),
57
56
  mpa: isMainPageAccessible(),