prebid.js 7.30.0 → 7.32.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 (197) 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/adkernelBidAdapter.js +1 -1
  7. package/dist/adlooxRtdProvider.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/aidemBidAdapter.js +1 -1
  12. package/dist/ajaBidAdapter.js +1 -1
  13. package/dist/alkimiBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/aolBidAdapter.js +1 -1
  17. package/dist/appierAnalyticsAdapter.js +1 -1
  18. package/dist/appnexusBidAdapter.js +1 -1
  19. package/dist/appushBidAdapter.js +1 -0
  20. package/dist/asoBidAdapter.js +1 -1
  21. package/dist/axonixBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/big-richmediaBidAdapter.js +1 -1
  24. package/dist/bridgewellBidAdapter.js +1 -1
  25. package/dist/brightMountainMediaBidAdapter.js +1 -1
  26. package/dist/carodaBidAdapter.js +1 -1
  27. package/dist/chtnwBidAdapter.js +1 -1
  28. package/dist/concertBidAdapter.js +1 -1
  29. package/dist/confiantRtdProvider.js +1 -0
  30. package/dist/connectIdSystem.js +1 -1
  31. package/dist/connectadBidAdapter.js +1 -1
  32. package/dist/consumableBidAdapter.js +1 -1
  33. package/dist/conversantBidAdapter.js +1 -1
  34. package/dist/craftBidAdapter.js +1 -1
  35. package/dist/criteoBidAdapter.js +1 -1
  36. package/dist/datawrkzBidAdapter.js +1 -1
  37. package/dist/dspxBidAdapter.js +1 -1
  38. package/dist/eplanningBidAdapter.js +1 -1
  39. package/dist/feedadBidAdapter.js +1 -1
  40. package/dist/finativeBidAdapter.js +1 -1
  41. package/dist/glimpseBidAdapter.js +1 -1
  42. package/dist/gmosspBidAdapter.js +1 -1
  43. package/dist/goldbachBidAdapter.js +1 -1
  44. package/dist/gridBidAdapter.js +1 -1
  45. package/dist/gridNMBidAdapter.js +1 -1
  46. package/dist/gumgumBidAdapter.js +1 -1
  47. package/dist/h12mediaBidAdapter.js +1 -1
  48. package/dist/holidBidAdapter.js +1 -0
  49. package/dist/id5IdSystem.js +1 -1
  50. package/dist/improvedigitalBidAdapter.js +1 -1
  51. package/dist/inmarBidAdapter.js +1 -1
  52. package/dist/insticatorBidAdapter.js +1 -1
  53. package/dist/ixBidAdapter.js +1 -1
  54. package/dist/justpremiumBidAdapter.js +1 -1
  55. package/dist/jwplayerVideoProvider.js +1 -1
  56. package/dist/konduitAnalyticsAdapter.js +1 -1
  57. package/dist/kueezBidAdapter.js +1 -1
  58. package/dist/kueezRtbBidAdapter.js +1 -1
  59. package/dist/lassoBidAdapter.js +1 -1
  60. package/dist/lifestreetBidAdapter.js +1 -1
  61. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  62. package/dist/logicadBidAdapter.js +1 -1
  63. package/dist/loglyliftBidAdapter.js +1 -1
  64. package/dist/magniteAnalyticsAdapter.js +1 -1
  65. package/dist/malltvAnalyticsAdapter.js +1 -1
  66. package/dist/marsmediaBidAdapter.js +1 -1
  67. package/dist/mediafuseBidAdapter.js +1 -1
  68. package/dist/medianetRtdProvider.js +1 -1
  69. package/dist/mediasquareBidAdapter.js +1 -1
  70. package/dist/mgidBidAdapter.js +1 -1
  71. package/dist/minutemediaBidAdapter.js +1 -1
  72. package/dist/nexx360BidAdapter.js +1 -1
  73. package/dist/not-for-prod/prebid.js +131 -127
  74. package/dist/oguryBidAdapter.js +1 -1
  75. package/dist/onetagBidAdapter.js +1 -1
  76. package/dist/ooloAnalyticsAdapter.js +1 -1
  77. package/dist/orbitsoftBidAdapter.js +1 -0
  78. package/dist/outbrainBidAdapter.js +1 -1
  79. package/dist/parrableIdSystem.js +1 -1
  80. package/dist/pbsExtensions.js +1 -1
  81. package/dist/permutiveRtdProvider.js +1 -1
  82. package/dist/pixfutureBidAdapter.js +1 -1
  83. package/dist/prebid-core.js +1 -1
  84. package/dist/prebidServerBidAdapter.js +1 -1
  85. package/dist/publinkIdSystem.js +1 -1
  86. package/dist/pubmaticBidAdapter.js +1 -1
  87. package/dist/pubwiseAnalyticsAdapter.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/rhythmoneBidAdapter.js +1 -1
  93. package/dist/riseBidAdapter.js +1 -1
  94. package/dist/rubiconAnalyticsAdapter.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/sharethroughAnalyticsAdapter.js +1 -1
  99. package/dist/sharethroughBidAdapter.js +1 -1
  100. package/dist/shinezBidAdapter.js +1 -1
  101. package/dist/smaatoBidAdapter.js +1 -1
  102. package/dist/smartadserverBidAdapter.js +1 -1
  103. package/dist/smartxBidAdapter.js +1 -1
  104. package/dist/smilewantedBidAdapter.js +1 -1
  105. package/dist/sonobiBidAdapter.js +1 -1
  106. package/dist/sovrnAnalyticsAdapter.js +1 -1
  107. package/dist/sovrnBidAdapter.js +1 -1
  108. package/dist/sspBCBidAdapter.js +1 -1
  109. package/dist/sublimeBidAdapter.js +1 -1
  110. package/dist/synacormediaBidAdapter.js +1 -1
  111. package/dist/taboolaBidAdapter.js +1 -1
  112. package/dist/targetVideoBidAdapter.js +1 -1
  113. package/dist/teadsBidAdapter.js +1 -1
  114. package/dist/trionBidAdapter.js +1 -1
  115. package/dist/tripleliftBidAdapter.js +1 -1
  116. package/dist/ttdBidAdapter.js +1 -1
  117. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  118. package/dist/uid2IdSystem.js +1 -1
  119. package/dist/underdogmediaBidAdapter.js +1 -1
  120. package/dist/undertoneBidAdapter.js +1 -1
  121. package/dist/vidazooBidAdapter.js +1 -1
  122. package/dist/videobyteBidAdapter.js +1 -1
  123. package/dist/visxBidAdapter.js +1 -1
  124. package/dist/vuukleBidAdapter.js +1 -1
  125. package/dist/widespaceBidAdapter.js +1 -1
  126. package/dist/winrBidAdapter.js +1 -1
  127. package/dist/yahoosspBidAdapter.js +1 -1
  128. package/dist/yieldlabBidAdapter.js +1 -1
  129. package/dist/yieldmoBidAdapter.js +1 -1
  130. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  131. package/integrationExamples/gpt/adloox.html +5 -0
  132. package/libraries/pbsExtensions/processors/adUnitCode.js +13 -0
  133. package/libraries/pbsExtensions/processors/pbs.js +5 -0
  134. package/modules/.submodules.json +1 -0
  135. package/modules/adagioBidAdapter.js +0 -4
  136. package/modules/adagioBidAdapter.md +4 -22
  137. package/modules/adkernelBidAdapter.js +2 -1
  138. package/modules/adlooxAnalyticsAdapter.md +5 -3
  139. package/modules/adlooxRtdProvider.js +82 -278
  140. package/modules/adlooxRtdProvider.md +6 -6
  141. package/modules/aidemBidAdapter.js +4 -0
  142. package/modules/aidemBidAdapter.md +1 -0
  143. package/modules/alkimiBidAdapter.js +23 -6
  144. package/modules/aolBidAdapter.js +12 -0
  145. package/modules/appnexusBidAdapter.js +2 -2
  146. package/modules/appushBidAdapter.js +188 -0
  147. package/modules/appushBidAdapter.md +79 -0
  148. package/modules/asoBidAdapter.js +8 -5
  149. package/modules/confiantRtdProvider.js +128 -0
  150. package/modules/confiantRtdProvider.md +45 -0
  151. package/modules/connectIdSystem.js +15 -1
  152. package/modules/datawrkzBidAdapter.js +24 -4
  153. package/modules/feedadBidAdapter.js +17 -7
  154. package/modules/holidBidAdapter.js +170 -0
  155. package/modules/holidBidAdapter.md +36 -0
  156. package/modules/jwplayerVideoProvider.js +10 -3
  157. package/modules/kueezRtbBidAdapter.js +21 -8
  158. package/modules/medianetRtdProvider.js +4 -4
  159. package/modules/nexx360BidAdapter.js +5 -7
  160. package/modules/orbitsoftBidAdapter.js +150 -0
  161. package/modules/permutiveRtdProvider.js +1 -1
  162. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
  163. package/modules/riseBidAdapter.js +2 -1
  164. package/modules/riseBidAdapter.md +2 -0
  165. package/modules/seedtagBidAdapter.js +12 -0
  166. package/modules/smartxBidAdapter.js +6 -0
  167. package/modules/taboolaBidAdapter.js +61 -14
  168. package/modules/yahoosspBidAdapter.js +5 -0
  169. package/modules/yieldlabBidAdapter.js +150 -134
  170. package/modules/yieldmoBidAdapter.js +1 -12
  171. package/package.json +1 -1
  172. package/src/adloader.js +2 -1
  173. package/src/prebid.js +7 -8
  174. package/test/spec/modules/adagioBidAdapter_spec.js +1 -28
  175. package/test/spec/modules/adlooxRtdProvider_spec.js +28 -120
  176. package/test/spec/modules/aidemBidAdapter_spec.js +10 -2
  177. package/test/spec/modules/alkimiBidAdapter_spec.js +15 -3
  178. package/test/spec/modules/aolBidAdapter_spec.js +22 -0
  179. package/test/spec/modules/appnexusBidAdapter_spec.js +7 -3
  180. package/test/spec/modules/appushBidAdapter_spec.js +372 -0
  181. package/test/spec/modules/confiantRtdProvider_spec.js +107 -0
  182. package/test/spec/modules/connectIdSystem_spec.js +17 -5
  183. package/test/spec/modules/feedadBidAdapter_spec.js +60 -13
  184. package/test/spec/modules/holidBidAdapter_spec.js +165 -0
  185. package/test/spec/modules/kueezRtbBidAdapter_spec.js +147 -24
  186. package/test/spec/modules/medianetRtdProvider_spec.js +3 -3
  187. package/test/spec/modules/orbitsoftBidAdapter_spec.js +255 -0
  188. package/test/spec/modules/riseBidAdapter_spec.js +7 -0
  189. package/test/spec/modules/seedtagBidAdapter_spec.js +56 -10
  190. package/test/spec/modules/smartxBidAdapter_spec.js +10 -0
  191. package/test/spec/modules/taboolaBidAdapter_spec.js +142 -5
  192. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +45 -10
  193. package/test/spec/modules/yahoosspBidAdapter_spec.js +16 -1
  194. package/test/spec/modules/yieldlabBidAdapter_spec.js +311 -301
  195. package/test/spec/modules/yieldmoBidAdapter_spec.js +70 -0
  196. package/test/spec/ortbConverter/pbsExtensions/adUnitCode_spec.js +23 -0
  197. package/test/spec/unit/pbjs_api_spec.js +11 -0
@@ -0,0 +1,170 @@
1
+ import {
2
+ deepAccess,
3
+ getBidIdParameter,
4
+ isStr,
5
+ logMessage,
6
+ triggerPixel,
7
+ } from '../src/utils.js'
8
+ import * as events from '../src/events.js'
9
+ import CONSTANTS from '../src/constants.json'
10
+ import { BANNER } from '../src/mediaTypes.js'
11
+
12
+ import { registerBidder } from '../src/adapters/bidderFactory.js'
13
+
14
+ const BIDDER_CODE = 'holid'
15
+ const GVLID = 1177
16
+ const ENDPOINT = 'https://helloworld.holid.io/openrtb2/auction'
17
+ const COOKIE_SYNC_ENDPOINT = 'https://null.holid.io/sync.html'
18
+ const TIME_TO_LIVE = 300
19
+ let wurlMap = {}
20
+
21
+ events.on(CONSTANTS.EVENTS.BID_WON, bidWonHandler)
22
+
23
+ export const spec = {
24
+ code: BIDDER_CODE,
25
+ gvlid: GVLID,
26
+ supportedMediaTypes: [BANNER],
27
+
28
+ isBidRequestValid: function (bid) {
29
+ return !!bid.params.adUnitID
30
+ },
31
+
32
+ buildRequests: function (validBidRequests, _bidderRequest) {
33
+ return validBidRequests.map((bid) => {
34
+ const requestData = {
35
+ ...bid.ortb2,
36
+ id: bid.auctionId,
37
+ imp: [getImp(bid)],
38
+ }
39
+
40
+ return {
41
+ method: 'POST',
42
+ url: ENDPOINT,
43
+ data: JSON.stringify(requestData),
44
+ bidId: bid.bidId,
45
+ }
46
+ })
47
+ },
48
+
49
+ interpretResponse: function (serverResponse, bidRequest) {
50
+ const bidResponses = []
51
+
52
+ if (!serverResponse.body.seatbid) {
53
+ return []
54
+ }
55
+
56
+ serverResponse.body.seatbid.map((response) => {
57
+ response.bid.map((bid) => {
58
+ const requestId = bidRequest.bidId
59
+ const auctionId = bidRequest.auctionId
60
+ const wurl = deepAccess(bid, 'ext.prebid.events.win')
61
+ const bidResponse = {
62
+ requestId,
63
+ cpm: bid.price,
64
+ width: bid.w,
65
+ height: bid.h,
66
+ ad: bid.adm,
67
+ creativeId: bid.crid,
68
+ currency: serverResponse.body.cur,
69
+ netRevenue: true,
70
+ ttl: TIME_TO_LIVE,
71
+ }
72
+
73
+ addWurl({ auctionId, requestId, wurl })
74
+
75
+ bidResponses.push(bidResponse)
76
+ })
77
+ })
78
+
79
+ return bidResponses
80
+ },
81
+
82
+ getUserSyncs(optionsType, serverResponse, gdprConsent, uspConsent) {
83
+ if (!serverResponse || serverResponse.length === 0) {
84
+ return []
85
+ }
86
+
87
+ const syncs = []
88
+
89
+ if (optionsType.iframeEnabled) {
90
+ const queryParams = []
91
+
92
+ queryParams.push('bidders=' + getBidders(serverResponse))
93
+ queryParams.push('gdpr=' + +gdprConsent.gdprApplies)
94
+ queryParams.push('gdpr_consent=' + gdprConsent.consentString)
95
+ queryParams.push('usp_consent=' + (uspConsent || ''))
96
+
97
+ let strQueryParams = queryParams.join('&')
98
+
99
+ if (strQueryParams.length > 0) {
100
+ strQueryParams = '?' + strQueryParams
101
+ }
102
+
103
+ syncs.push({
104
+ type: 'iframe',
105
+ url: COOKIE_SYNC_ENDPOINT + strQueryParams + '&type=iframe',
106
+ })
107
+
108
+ return syncs
109
+ }
110
+ },
111
+ }
112
+
113
+ function getImp(bid) {
114
+ const imp = {
115
+ ext: {
116
+ prebid: {
117
+ storedrequest: {
118
+ id: getBidIdParameter('adUnitID', bid.params),
119
+ },
120
+ },
121
+ },
122
+ }
123
+ const sizes =
124
+ bid.sizes && !Array.isArray(bid.sizes[0]) ? [bid.sizes] : bid.sizes
125
+
126
+ if (deepAccess(bid, 'mediaTypes.banner')) {
127
+ imp.banner = {
128
+ format: sizes.map((size) => {
129
+ return { w: size[0], h: size[1] }
130
+ }),
131
+ }
132
+ }
133
+
134
+ return imp
135
+ }
136
+
137
+ function getBidders(serverResponse) {
138
+ const bidders = serverResponse
139
+ .map((res) => Object.keys(res.body.ext.responsetimemillis))
140
+ .flat(1)
141
+
142
+ return encodeURIComponent(JSON.stringify([...new Set(bidders)]))
143
+ }
144
+
145
+ function addWurl(auctionId, adId, wurl) {
146
+ if ([auctionId, adId].every(isStr)) {
147
+ wurlMap[`${auctionId}${adId}`] = wurl
148
+ }
149
+ }
150
+
151
+ function removeWurl(auctionId, adId) {
152
+ delete wurlMap[`${auctionId}${adId}`]
153
+ }
154
+
155
+ function getWurl(auctionId, adId) {
156
+ if ([auctionId, adId].every(isStr)) {
157
+ return wurlMap[`${auctionId}${adId}`]
158
+ }
159
+ }
160
+
161
+ function bidWonHandler(bid) {
162
+ const wurl = getWurl(bid.auctionId, bid.adId)
163
+ if (wurl) {
164
+ logMessage(`Invoking image pixel for wurl on BID_WIN: "${wurl}"`)
165
+ triggerPixel(wurl)
166
+ removeWurl(bid.auctionId, bid.adId)
167
+ }
168
+ }
169
+
170
+ registerBidder(spec)
@@ -0,0 +1,36 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: Holid Bid Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: richard@holid.se
7
+ ```
8
+
9
+ # Description
10
+
11
+ Currently module supports only banner mediaType.
12
+
13
+ # Test Parameters
14
+
15
+ ## Sample Banner Ad Unit
16
+
17
+ ```js
18
+ var adUnits = [
19
+ {
20
+ code: 'bannerAdUnit',
21
+ mediaTypes: {
22
+ banner: {
23
+ sizes: [[300, 250]],
24
+ },
25
+ },
26
+ bids: [
27
+ {
28
+ bidder: 'holid',
29
+ params: {
30
+ adUnitID: '12345',
31
+ },
32
+ },
33
+ ],
34
+ },
35
+ ]
36
+ ```
@@ -47,19 +47,26 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
47
47
 
48
48
  function init() {
49
49
  if (!jwplayer) {
50
- triggerSetupFailure(-1); // TODO: come up with code for player absent
50
+ triggerSetupFailure(-1); // TODO: come up with error code schema- player is absent
51
51
  return;
52
52
  }
53
53
 
54
54
  playerVersion = jwplayer.version;
55
55
 
56
56
  if (playerVersion < minimumSupportedPlayerVersion) {
57
- triggerSetupFailure(-2); // TODO: come up with code for version not supported
57
+ triggerSetupFailure(-2); // TODO: come up with error code schema - version not supported
58
+ return;
59
+ }
60
+
61
+ if (!document.getElementById(divId)) {
62
+ triggerSetupFailure(-3); // TODO: come up with error code schema - missing div id
58
63
  return;
59
64
  }
60
65
 
61
66
  player = jwplayer(divId);
62
- if (player.getState() === undefined) {
67
+ if (!player || !player.getState) {
68
+ triggerSetupFailure(-4); // TODO: come up with error code schema - factory function failure
69
+ } else if (player.getState() === undefined) {
63
70
  setupPlayer(playerConfig);
64
71
  } else {
65
72
  const payload = getSetupCompletePayload();
@@ -1,6 +1,6 @@
1
1
  import { _each, deepAccess, parseSizesInput, parseUrl, uniques, isFn } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
- import { BANNER } from '../src/mediaTypes.js';
3
+ import { BANNER, VIDEO } from '../src/mediaTypes.js';
4
4
  import { getStorageManager } from '../src/storageManager.js';
5
5
 
6
6
  const GVLID = 1165;
@@ -55,7 +55,7 @@ function isBidRequestValid(bid) {
55
55
  }
56
56
 
57
57
  function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
58
- const { params, bidId, userId, adUnitCode, schain } = bid;
58
+ const { params, bidId, userId, adUnitCode, schain, mediaTypes } = bid;
59
59
  let { bidFloor, ext } = params;
60
60
  const hashUrl = hashCode(topWindowUrl);
61
61
  const uniqueDealId = getUniqueDealId(hashUrl);
@@ -89,7 +89,8 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
89
89
  bidderVersion: BIDDER_VERSION,
90
90
  prebidVersion: '$prebid.version$',
91
91
  res: `${screen.width}x${screen.height}`,
92
- schain: schain
92
+ schain: schain,
93
+ mediaTypes: mediaTypes
93
94
  };
94
95
 
95
96
  appendUserIdsToRequestPayload(data, userId);
@@ -167,11 +168,12 @@ function interpretResponse(serverResponse, request) {
167
168
 
168
169
  try {
169
170
  results.forEach(result => {
170
- const { creativeId, ad, price, exp, width, height, currency, advertiserDomains } = result;
171
+ const { creativeId, ad, price, exp, width, height, currency, advertiserDomains, mediaType = BANNER } = result;
171
172
  if (!ad || !price) {
172
173
  return;
173
174
  }
174
- output.push({
175
+
176
+ const response = {
175
177
  requestId: bidId,
176
178
  cpm: price,
177
179
  width: width,
@@ -180,11 +182,22 @@ function interpretResponse(serverResponse, request) {
180
182
  currency: currency || CURRENCY,
181
183
  netRevenue: true,
182
184
  ttl: exp || TTL_SECONDS,
183
- ad: ad,
184
185
  meta: {
185
186
  advertiserDomains: advertiserDomains || []
186
187
  }
187
- })
188
+ };
189
+
190
+ if (mediaType === BANNER) {
191
+ Object.assign(response, {
192
+ ad: ad,
193
+ });
194
+ } else {
195
+ Object.assign(response, {
196
+ vastXml: ad,
197
+ mediaType: VIDEO
198
+ });
199
+ }
200
+ output.push(response);
188
201
  });
189
202
  return output;
190
203
  } catch (e) {
@@ -268,7 +281,7 @@ export const spec = {
268
281
  code: BIDDER_CODE,
269
282
  version: BIDDER_VERSION,
270
283
  gvlid: GVLID,
271
- supportedMediaTypes: [BANNER],
284
+ supportedMediaTypes: [BANNER, VIDEO],
272
285
  isBidRequestValid,
273
286
  buildRequests,
274
287
  interpretResponse,
@@ -59,14 +59,14 @@ function onAuctionInitEvent(auctionInit) {
59
59
  }, SOURCE));
60
60
  }
61
61
 
62
- function getTargetingData(adUnitCode) {
63
- const adUnits = getAdUnits(undefined, adUnitCode);
62
+ function getTargetingData(adUnitCodes, config, consent, auction) {
63
+ const adUnits = getAdUnits(auction.adUnits, adUnitCodes);
64
64
  let targetingData = {};
65
65
  if (window.mnjs.loaded && isFn(window.mnjs.getTargetingData)) {
66
- targetingData = window.mnjs.getTargetingData(adUnitCode, adUnits, SOURCE) || {};
66
+ targetingData = window.mnjs.getTargetingData(adUnitCodes, adUnits, SOURCE) || {};
67
67
  }
68
68
  const targeting = {};
69
- adUnitCode.forEach(adUnitCode => {
69
+ adUnitCodes.forEach(adUnitCode => {
70
70
  targeting[adUnitCode] = targeting[adUnitCode] || {};
71
71
  targetingData[adUnitCode] = targetingData[adUnitCode] || {};
72
72
  targeting[adUnitCode] = {
@@ -79,9 +79,6 @@ function createImpObject(bid) {
79
79
  }
80
80
  }
81
81
  };
82
- if (bid.params.customParams) {
83
- utils.deepSetValue(imp, 'ext.customParams', bid.params.customParams);
84
- }
85
82
  enrichImp(imp, bid, floor);
86
83
  return imp;
87
84
  }
@@ -154,9 +151,6 @@ function getFloor(bid, mediaType) {
154
151
  }
155
152
 
156
153
  function enrichImp(imp, bid, floor) {
157
- if (bid.params.customParams) {
158
- utils.deepSetValue(imp, 'ext.customParams', bid.params.customParams);
159
- }
160
154
  if (floor > 0) {
161
155
  imp.bidfloor = floor;
162
156
  imp.bidfloorcur = 'USD';
@@ -251,6 +245,7 @@ function interpretResponse(response, req) {
251
245
 
252
246
  let bids = [];
253
247
  respBody.seatbid.forEach(seatbid => {
248
+ const ssp = seatbid.seat;
254
249
  bids = [...bids, ...seatbid.bid.map(bid => {
255
250
  const response = {
256
251
  requestId: bid.impid,
@@ -264,7 +259,10 @@ function interpretResponse(response, req) {
264
259
  ttl: 120,
265
260
  bidderCode: allowAlternateBidderCodes ? `n360-${bid.ssp}` : 'nexx360',
266
261
  mediaType: bid.type === 'banner' ? 'banner' : 'video',
267
- meta: { advertiserDomains: bid.adomain },
262
+ meta: {
263
+ advertiserDomains: bid.adomain,
264
+ demandSource: ssp,
265
+ },
268
266
  };
269
267
  // if (bid.dealid) response.dealid = bid.dealid;
270
268
 
@@ -0,0 +1,150 @@
1
+ import * as utils from '../src/utils.js';
2
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
+ import {config} from '../src/config.js';
4
+
5
+ const BIDDER_CODE = 'orbitsoft';
6
+ let styleParamsMap = {
7
+ 'title.family': 'f1', // headerFont
8
+ 'title.size': 'fs1', // headerFontSize
9
+ 'title.weight': 'w1', // headerWeight
10
+ 'title.style': 's1', // headerStyle
11
+ 'title.color': 'c3', // headerColor
12
+ 'description.family': 'f2', // descriptionFont
13
+ 'description.size': 'fs2', // descriptionFontSize
14
+ 'description.weight': 'w2', // descriptionWeight
15
+ 'description.style': 's2', // descriptionStyle
16
+ 'description.color': 'c4', // descriptionColor
17
+ 'url.family': 'f3', // urlFont
18
+ 'url.size': 'fs3', // urlFontSize
19
+ 'url.weight': 'w3', // urlWeight
20
+ 'url.style': 's3', // urlStyle
21
+ 'url.color': 'c5', // urlColor
22
+ 'colors.background': 'c2', // borderColor
23
+ 'colors.border': 'c1', // borderColor
24
+ 'colors.link': 'c6', // lnkColor
25
+ };
26
+ export const spec = {
27
+ code: BIDDER_CODE,
28
+ aliases: ['oas', '152media'], // short code and customer aliases
29
+ isBidRequestValid: function (bid) {
30
+ switch (true) {
31
+ case !('params' in bid):
32
+ utils.logError(bid.bidder + ': No required params');
33
+ return false;
34
+ case !(bid.params.placementId):
35
+ utils.logError(bid.bidder + ': No required param placementId');
36
+ return false;
37
+ case !(bid.params.requestUrl):
38
+ utils.logError(bid.bidder + ': No required param requestUrl');
39
+ return false;
40
+ }
41
+ return true;
42
+ },
43
+ buildRequests: function (validBidRequests) {
44
+ let bidRequest;
45
+ let serverRequests = [];
46
+ for (let i = 0; i < validBidRequests.length; i++) {
47
+ bidRequest = validBidRequests[i];
48
+ let bidRequestParams = bidRequest.params;
49
+ let placementId = utils.getBidIdParameter('placementId', bidRequestParams);
50
+ let requestUrl = utils.getBidIdParameter('requestUrl', bidRequestParams);
51
+ let referrer = utils.getBidIdParameter('ref', bidRequestParams);
52
+ let location = utils.getBidIdParameter('loc', bidRequestParams);
53
+ // Append location & referrer
54
+ if (location === '') {
55
+ location = utils.getWindowLocation();
56
+ }
57
+ if (referrer === '' && bidRequest && bidRequest.refererInfo) {
58
+ referrer = bidRequest.refererInfo.referer;
59
+ }
60
+
61
+ // Styles params
62
+ let stylesParams = utils.getBidIdParameter('style', bidRequestParams);
63
+ let stylesParamsArray = {};
64
+ for (let currentValue in stylesParams) {
65
+ if (stylesParams.hasOwnProperty(currentValue)) {
66
+ let currentStyle = stylesParams[currentValue];
67
+ for (let field in currentStyle) {
68
+ if (currentStyle.hasOwnProperty(field)) {
69
+ let styleField = styleParamsMap[currentValue + '.' + field];
70
+ if (typeof styleField !== 'undefined') {
71
+ stylesParamsArray[styleField] = currentStyle[field];
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ // Custom params
78
+ let customParams = utils.getBidIdParameter('customParams', bidRequestParams);
79
+ let customParamsArray = {};
80
+ for (let customField in customParams) {
81
+ if (customParams.hasOwnProperty(customField)) {
82
+ customParamsArray['c.' + customField] = customParams[customField];
83
+ }
84
+ }
85
+
86
+ // Sizes params (not supports by server, for future features)
87
+ let sizesParams = bidRequest.sizes;
88
+ let parsedSizes = utils.parseSizesInput(sizesParams);
89
+ let requestData = Object.assign({
90
+ 'scid': placementId,
91
+ 'callback_uid': utils.generateUUID(),
92
+ 'loc': location,
93
+ 'ref': referrer,
94
+ 'size': parsedSizes
95
+ }, stylesParamsArray, customParamsArray);
96
+
97
+ serverRequests.push({
98
+ method: 'POST',
99
+ url: requestUrl,
100
+ data: requestData,
101
+ options: {withCredentials: false},
102
+ bidRequest: bidRequest
103
+ });
104
+ }
105
+ return serverRequests;
106
+ },
107
+ interpretResponse: function (serverResponse, request) {
108
+ let bidResponses = [];
109
+ if (!serverResponse || serverResponse.error) {
110
+ utils.logError(BIDDER_CODE + ': Server response error');
111
+ return bidResponses;
112
+ }
113
+
114
+ const serverBody = serverResponse.body;
115
+ if (!serverBody) {
116
+ utils.logError(BIDDER_CODE + ': Empty bid response');
117
+ return bidResponses;
118
+ }
119
+
120
+ const CPM = serverBody.cpm;
121
+ const WIDTH = serverBody.width;
122
+ const HEIGHT = serverBody.height;
123
+ const CREATIVE = serverBody.content_url;
124
+ const CALLBACK_UID = serverBody.callback_uid;
125
+ const TIME_TO_LIVE = config.getConfig('_bidderTimeout');
126
+ const REFERER = utils.getWindowTop();
127
+ let bidRequest = request.bidRequest;
128
+ if (CPM > 0 && WIDTH > 0 && HEIGHT > 0) {
129
+ let bidResponse = {
130
+ requestId: bidRequest.bidId,
131
+ cpm: CPM,
132
+ width: WIDTH,
133
+ height: HEIGHT,
134
+ creativeId: CALLBACK_UID,
135
+ ttl: TIME_TO_LIVE,
136
+ referrer: REFERER,
137
+ currency: 'USD',
138
+ netRevenue: true,
139
+ adUrl: CREATIVE,
140
+ meta: {
141
+ advertiserDomains: serverBody.adomain ? serverBody.adomain : []
142
+ }
143
+ };
144
+ bidResponses.push(bidResponse);
145
+ }
146
+
147
+ return bidResponses;
148
+ }
149
+ };
150
+ registerBidder(spec);
@@ -243,7 +243,7 @@ function getCustomBidderFn (moduleConfig, bidder) {
243
243
  */
244
244
  function getDefaultBidderFn (bidder) {
245
245
  const isPStandardTargetingEnabled = (data, acEnabled) => {
246
- return (acEnabled && data.ac && data.ac.length) || (data.ssp && data.ssp.cohorts.length)
246
+ return (acEnabled && data.ac && data.ac.length) || (data.ssp && data.ssp.cohorts && data.ssp.cohorts.length)
247
247
  }
248
248
  const pStandardTargeting = (data, acEnabled) => {
249
249
  const ac = (acEnabled) ? (data.ac ?? []) : []
@@ -246,6 +246,7 @@ export function buildPBSRequest(s2sBidRequest, bidderRequests, adUnits, requeste
246
246
  impIds.add(impId)
247
247
  proxyBidRequests.push({
248
248
  ...adUnit,
249
+ adUnitCode: adUnit.code,
249
250
  ...getDefinedParams(actualBidRequests.values().next().value || {}, ['userId', 'userIdAsEids', 'schain']),
250
251
  pbsData: {impId, actualBidRequests, adUnit}
251
252
  });
@@ -400,7 +400,8 @@ function generateGeneralParams(generalObject, bidderRequest) {
400
400
  dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0,
401
401
  device_type: getDeviceType(navigator.userAgent),
402
402
  ua: navigator.userAgent,
403
- session_id: getBidIdParameter('auctionId', generalObject),
403
+ is_wrapper: !!generalBidParams.isWrapper,
404
+ session_id: generalBidParams.sessionId || getBidIdParameter('auctionId', generalObject),
404
405
  tmax: timeout
405
406
  };
406
407
 
@@ -25,6 +25,8 @@ The adapter supports Video(instream).
25
25
  | `placementId` | optional | String | A unique placement identifier | "12345678"
26
26
  | `testMode` | optional | Boolean | This activates the test mode | false
27
27
  | `rtbDomain` | optional | String | Sets the seller end point | "www.test.com"
28
+ | `is_wrapper` | private | Boolean | Please don't use unless your account manager asked you to | false
29
+
28
30
 
29
31
  # Test Parameters
30
32
  ```javascript
@@ -260,6 +260,18 @@ export const spec = {
260
260
  payload.coppa = coppa;
261
261
  }
262
262
 
263
+ if (bidderRequest.gppConsent) {
264
+ payload.gppConsent = {
265
+ gppString: bidderRequest.gppConsent.gppString,
266
+ applicableSections: bidderRequest.gppConsent.applicableSections
267
+ }
268
+ } else if (bidderRequest.ortb2?.regs?.gpp) {
269
+ payload.gppConsent = {
270
+ gppString: bidderRequest.ortb2.regs.gpp,
271
+ applicableSections: bidderRequest.ortb2.regs.gpp_sid
272
+ }
273
+ }
274
+
263
275
  const payloadString = JSON.stringify(payload);
264
276
  return {
265
277
  method: 'POST',
@@ -76,6 +76,7 @@ export const spec = {
76
76
  const bidfloor = getBidFloor(bid) || 0;
77
77
  const bidfloorcur = getBidIdParameter('bidfloorcur', bid.params) || 'EUR';
78
78
  const siteId = getBidIdParameter('siteId', bid.params);
79
+ const sitekey = getBidIdParameter('sitekey', bid.params);
79
80
  const domain = getBidIdParameter('domain', bid.params);
80
81
  const cat = getBidIdParameter('cat', bid.params) || [''];
81
82
  let pubcid = null;
@@ -191,6 +192,11 @@ export const spec = {
191
192
  }
192
193
  }
193
194
 
195
+ // Add sitekey if available
196
+ if (sitekey) {
197
+ requestPayload.site.content.ext.sitekey = sitekey;
198
+ }
199
+
194
200
  // Add common id if available
195
201
  if (pubcid) {
196
202
  userExt.fpc = pubcid;