prebid.js 9.26.0 → 9.28.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 (305) hide show
  1. package/creative/renderers/native/renderer.js +29 -8
  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/acuityadsBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -1
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/adlooxAdServerVideo.js +1 -1
  14. package/dist/adlooxAnalyticsAdapter.js +1 -1
  15. package/dist/adlooxRtdProvider.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgAnalyticsAdapter.js +1 -1
  21. package/dist/adxcgBidAdapter.js +1 -1
  22. package/dist/adyoulikeBidAdapter.js +1 -1
  23. package/dist/agmaAnalyticsAdapter.js +1 -1
  24. package/dist/ajaBidAdapter.js +1 -1
  25. package/dist/akamaiDapRtdProvider.js +1 -1
  26. package/dist/amxBidAdapter.js +1 -1
  27. package/dist/amxIdSystem.js +1 -1
  28. package/dist/aniviewBidAdapter.js +1 -1
  29. package/dist/appierAnalyticsAdapter.js +1 -1
  30. package/dist/appnexusBidAdapter.js +1 -1
  31. package/dist/asoBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/bidglassBidAdapter.js +1 -1
  34. package/dist/big-richmediaBidAdapter.js +1 -1
  35. package/dist/bitmediaBidAdapter.js +1 -1
  36. package/dist/blueBidAdapter.js +1 -0
  37. package/dist/bridBidAdapter.js +1 -1
  38. package/dist/bridgeuppBidAdapter.js +1 -1
  39. package/dist/bridgewellBidAdapter.js +1 -1
  40. package/dist/brightMountainMediaBidAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/chunk-core.js +1 -1
  44. package/dist/conceptxBidAdapter.js +1 -1
  45. package/dist/concertBidAdapter.js +1 -1
  46. package/dist/connectadBidAdapter.js +1 -1
  47. package/dist/consumableBidAdapter.js +1 -1
  48. package/dist/contxtfulBidAdapter.js +1 -1
  49. package/dist/contxtfulRtdProvider.js +1 -1
  50. package/dist/conversantAnalyticsAdapter.js +1 -1
  51. package/dist/conversantBidAdapter.js +1 -1
  52. package/dist/craftBidAdapter.js +1 -1
  53. package/dist/creative-renderer-native.js +1 -1
  54. package/dist/criteoBidAdapter.js +1 -1
  55. package/dist/cwireBidAdapter.js +1 -1
  56. package/dist/dailymotionBidAdapter.js +1 -1
  57. package/dist/dependencies.json +7 -1
  58. package/dist/dspxBidAdapter.js +1 -1
  59. package/dist/dxkultureBidAdapter.js +1 -1
  60. package/dist/eplanningBidAdapter.js +1 -1
  61. package/dist/equativBidAdapter.js +1 -1
  62. package/dist/escalaxBidAdapter.js +1 -1
  63. package/dist/eskimiBidAdapter.js +1 -1
  64. package/dist/euidIdSystem.js +1 -1
  65. package/dist/exadsBidAdapter.js +1 -1
  66. package/dist/feedadBidAdapter.js +1 -1
  67. package/dist/finativeBidAdapter.js +1 -1
  68. package/dist/freewheel-sspBidAdapter.js +1 -1
  69. package/dist/gmosspBidAdapter.js +1 -1
  70. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  71. package/dist/greenbidsBidAdapter.js +1 -1
  72. package/dist/greenbidsRtdProvider.js +1 -1
  73. package/dist/gridBidAdapter.js +1 -1
  74. package/dist/gumgumBidAdapter.js +1 -1
  75. package/dist/h12mediaBidAdapter.js +1 -1
  76. package/dist/hypelabBidAdapter.js +1 -1
  77. package/dist/id5AnalyticsAdapter.js +1 -1
  78. package/dist/id5IdSystem.js +1 -1
  79. package/dist/imdsBidAdapter.js +1 -1
  80. package/dist/improvedigitalBidAdapter.js +1 -1
  81. package/dist/inmobiBidAdapter.js +1 -1
  82. package/dist/insticatorBidAdapter.js +1 -1
  83. package/dist/intentIqAnalyticsAdapter.js +1 -1
  84. package/dist/intentIqConstants.js +1 -1
  85. package/dist/ixBidAdapter.js +1 -1
  86. package/dist/jixieBidAdapter.js +1 -1
  87. package/dist/justpremiumBidAdapter.js +1 -1
  88. package/dist/jwplayerVideoProvider.js +1 -1
  89. package/dist/kargoBidAdapter.js +1 -1
  90. package/dist/kimberliteBidAdapter.js +1 -1
  91. package/dist/konduitAnalyticsAdapter.js +1 -1
  92. package/dist/kueezBidAdapter.js +1 -1
  93. package/dist/lassoBidAdapter.js +1 -1
  94. package/dist/lifestreetBidAdapter.js +1 -1
  95. package/dist/liveIntentId.js +1 -1
  96. package/dist/liveIntentIdSystem.js +1 -1
  97. package/dist/liveIntentRtdProvider.js +1 -0
  98. package/dist/logicadBidAdapter.js +1 -1
  99. package/dist/loglyliftBidAdapter.js +1 -1
  100. package/dist/luceadBidAdapter.js +1 -1
  101. package/dist/mabidderBidAdapter.js +1 -1
  102. package/dist/madsenseBidAdapter.js +1 -1
  103. package/dist/magniteAnalyticsAdapter.js +1 -1
  104. package/dist/malltvAnalyticsAdapter.js +1 -1
  105. package/dist/marsmediaBidAdapter.js +1 -1
  106. package/dist/mediafuseBidAdapter.js +1 -1
  107. package/dist/medianetAnalyticsAdapter.js +1 -1
  108. package/dist/medianetBidAdapter.js +1 -1
  109. package/dist/mediasquareBidAdapter.js +1 -1
  110. package/dist/mgidBidAdapter.js +1 -1
  111. package/dist/minutemediaBidAdapter.js +1 -1
  112. package/dist/missenaBidAdapter.js +1 -1
  113. package/dist/mspa.js +1 -1
  114. package/dist/nativeRendering.js +1 -1
  115. package/dist/nextMillenniumBidAdapter.js +1 -1
  116. package/dist/nexx360BidAdapter.js +1 -1
  117. package/dist/nobidAnalyticsAdapter.js +1 -1
  118. package/dist/nobidBidAdapter.js +1 -1
  119. package/dist/not-for-prod/prebid.js +193 -191
  120. package/dist/oguryBidAdapter.js +1 -1
  121. package/dist/omsBidAdapter.js +1 -1
  122. package/dist/onetagBidAdapter.js +1 -1
  123. package/dist/ooloAnalyticsAdapter.js +1 -1
  124. package/dist/openwebBidAdapter.js +1 -1
  125. package/dist/openxBidAdapter.js +1 -1
  126. package/dist/optidigitalBidAdapter.js +1 -1
  127. package/dist/orbidderBidAdapter.js +1 -1
  128. package/dist/orbitsoftBidAdapter.js +1 -1
  129. package/dist/outbrainBidAdapter.js +1 -1
  130. package/dist/pixfutureBidAdapter.js +1 -1
  131. package/dist/publinkIdSystem.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  135. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/quantcastBidAdapter.js +1 -1
  138. package/dist/readpeakBidAdapter.js +1 -1
  139. package/dist/relaidoBidAdapter.js +1 -1
  140. package/dist/retailspotBidAdapter.js +1 -1
  141. package/dist/rhythmoneBidAdapter.js +1 -1
  142. package/dist/riseBidAdapter.js +1 -1
  143. package/dist/riseUtils.js +1 -1
  144. package/dist/rubiconBidAdapter.js +1 -1
  145. package/dist/seedingAllianceBidAdapter.js +1 -1
  146. package/dist/seedtagBidAdapter.js +1 -1
  147. package/dist/sharedIdSystem.js +1 -1
  148. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  149. package/dist/sharethroughBidAdapter.js +1 -1
  150. package/dist/shinezBidAdapter.js +1 -1
  151. package/dist/showheroes-bsBidAdapter.js +1 -1
  152. package/dist/sizeUtils.js +1 -1
  153. package/dist/smaatoBidAdapter.js +1 -1
  154. package/dist/smartadserverBidAdapter.js +1 -1
  155. package/dist/smartxBidAdapter.js +1 -1
  156. package/dist/smilewantedBidAdapter.js +1 -1
  157. package/dist/snigelBidAdapter.js +1 -1
  158. package/dist/sonobiBidAdapter.js +1 -1
  159. package/dist/sovrnBidAdapter.js +1 -1
  160. package/dist/sparteoBidAdapter.js +1 -1
  161. package/dist/sspBCBidAdapter.js +1 -1
  162. package/dist/stnBidAdapter.js +1 -1
  163. package/dist/stvBidAdapter.js +1 -1
  164. package/dist/sublimeBidAdapter.js +1 -1
  165. package/dist/symitriDapRtdProvider.js +1 -1
  166. package/dist/taboolaBidAdapter.js +1 -1
  167. package/dist/tappxBidAdapter.js +1 -1
  168. package/dist/targetVideoBidAdapter.js +1 -1
  169. package/dist/teadsBidAdapter.js +1 -1
  170. package/dist/terceptAnalyticsAdapter.js +1 -1
  171. package/dist/themoneytizerBidAdapter.js +1 -1
  172. package/dist/trionBidAdapter.js +1 -1
  173. package/dist/tripleliftBidAdapter.js +1 -1
  174. package/dist/ttdBidAdapter.js +1 -1
  175. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  176. package/dist/uid2IdSystem.js +1 -1
  177. package/dist/underdogmediaBidAdapter.js +1 -1
  178. package/dist/undertoneBidAdapter.js +1 -1
  179. package/dist/unrulyBidAdapter.js +1 -1
  180. package/dist/userId.js +1 -1
  181. package/dist/vdoaiBidAdapter.js +1 -1
  182. package/dist/vidazooUtils.js +1 -1
  183. package/dist/videobyteBidAdapter.js +1 -1
  184. package/dist/visxBidAdapter.js +1 -1
  185. package/dist/vuukleBidAdapter.js +1 -1
  186. package/dist/widespaceBidAdapter.js +1 -1
  187. package/dist/winrBidAdapter.js +1 -1
  188. package/dist/wurflRtdProvider.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yieldlabBidAdapter.js +1 -1
  191. package/dist/yieldmoBidAdapter.js +1 -1
  192. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  193. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  194. package/integrationExamples/gpt/liveIntentRtdProviderExample.html +164 -0
  195. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +3 -1
  196. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +2 -0
  197. package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +2 -0
  198. package/integrationExamples/videoModule/jwplayer/eventListeners.html +2 -0
  199. package/integrationExamples/videoModule/jwplayer/eventsUI.html +2 -0
  200. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +2 -0
  201. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +3 -1
  202. package/integrationExamples/videoModule/jwplayer/playlist.html +3 -1
  203. package/libraries/creative-renderer-native/renderer.js +1 -1
  204. package/libraries/intentIqConstants/intentIqConstants.js +1 -1
  205. package/libraries/liveIntentId/shared.js +18 -5
  206. package/libraries/mspa/activityControls.js +26 -7
  207. package/libraries/riseUtils/constants.js +20 -0
  208. package/libraries/riseUtils/index.js +143 -38
  209. package/libraries/sizeUtils/sizeUtils.js +25 -0
  210. package/libraries/vidazooUtils/bidderUtils.js +2 -0
  211. package/modules/33acrossIdSystem.js +64 -23
  212. package/modules/33acrossIdSystem.md +2 -1
  213. package/modules/acuityadsBidAdapter.js +1 -1
  214. package/modules/adagioRtdProvider.js +15 -9
  215. package/modules/adlooxAnalyticsAdapter.js +12 -6
  216. package/modules/blueBidAdapter.js +122 -0
  217. package/modules/blueBidAdapter.md +28 -0
  218. package/modules/conceptxBidAdapter.js +2 -0
  219. package/modules/consumableBidAdapter.js +3 -1
  220. package/modules/contxtfulBidAdapter.js +25 -13
  221. package/modules/contxtfulRtdProvider.js +9 -12
  222. package/modules/eplanningBidAdapter.js +5 -1
  223. package/modules/equativBidAdapter.js +13 -18
  224. package/modules/escalaxBidAdapter.js +2 -2
  225. package/modules/eskimiBidAdapter.js +4 -1
  226. package/modules/improvedigitalBidAdapter.js +0 -67
  227. package/modules/intentIqAnalyticsAdapter.js +1 -1
  228. package/modules/ixBidAdapter.js +7 -1
  229. package/modules/jwplayerVideoProvider.js +99 -6
  230. package/modules/liveIntentRtdProvider.js +52 -0
  231. package/modules/liveIntentRtdProvider.md +45 -0
  232. package/modules/minutemediaBidAdapter.js +6 -80
  233. package/modules/minutemediaBidAdapter.md +1 -1
  234. package/modules/missenaBidAdapter.js +2 -0
  235. package/modules/nativeRendering.js +2 -1
  236. package/modules/omsBidAdapter.js +25 -11
  237. package/modules/omsBidAdapter.md +15 -0
  238. package/modules/openwebBidAdapter.js +6 -81
  239. package/modules/openwebBidAdapter.md +1 -1
  240. package/modules/openxBidAdapter.js +19 -6
  241. package/modules/openxBidAdapter.md +46 -1
  242. package/modules/orbitsoftBidAdapter.js +1 -1
  243. package/modules/permutiveRtdProvider.md +6 -5
  244. package/modules/pubmaticAnalyticsAdapter.js +61 -19
  245. package/modules/riseBidAdapter.js +11 -92
  246. package/modules/riseBidAdapter.md +1 -1
  247. package/modules/sharedIdSystem.js +9 -3
  248. package/modules/shinezBidAdapter.js +4 -80
  249. package/modules/shinezBidAdapter.md +2 -2
  250. package/modules/stnBidAdapter.js +7 -86
  251. package/modules/stnBidAdapter.md +1 -1
  252. package/modules/symitriDapRtdProvider.js +4 -4
  253. package/modules/symitriDapRtdProvider.md +2 -2
  254. package/modules/userId/eids.js +32 -5
  255. package/modules/wurflRtdProvider.js +7 -1
  256. package/modules/wurflRtdProvider.md +1 -1
  257. package/modules/yieldlabBidAdapter.js +2 -2
  258. package/modules/zeta_global_sspAnalyticsAdapter.js +5 -2
  259. package/package.json +2 -2
  260. package/src/adapters/bidderFactory.js +7 -6
  261. package/src/adloader.js +0 -1
  262. package/src/native.js +6 -3
  263. package/test/spec/creative/nativeRenderer_spec.js +45 -10
  264. package/test/spec/libraries/mspa/activityControls_spec.js +63 -9
  265. package/test/spec/modules/33acrossIdSystem_spec.js +288 -2
  266. package/test/spec/modules/acuityadsBidAdapter_spec.js +49 -0
  267. package/test/spec/modules/adagioRtdProvider_spec.js +119 -3
  268. package/test/spec/modules/adlooxAdServerVideo_spec.js +0 -1
  269. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +31 -0
  270. package/test/spec/modules/blueBidAdapter_spec.js +91 -0
  271. package/test/spec/modules/consumableBidAdapter_spec.js +42 -0
  272. package/test/spec/modules/contxtfulRtdProvider_spec.js +37 -2
  273. package/test/spec/modules/eplanningBidAdapter_spec.js +74 -1
  274. package/test/spec/modules/equativBidAdapter_spec.js +5 -6
  275. package/test/spec/modules/excoBidAdapter_spec.js +33 -18
  276. package/test/spec/modules/illuminBidAdapter_spec.js +33 -18
  277. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -3
  278. package/test/spec/modules/ixBidAdapter_spec.js +68 -2
  279. package/test/spec/modules/kueezRtbBidAdapter_spec.js +33 -18
  280. package/test/spec/modules/liveIntentExternalIdSystem_spec.js +16 -6
  281. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +16 -6
  282. package/test/spec/modules/liveIntentIdSystem_spec.js +49 -6
  283. package/test/spec/modules/liveIntentRtdProvider_spec.js +116 -0
  284. package/test/spec/modules/minutemediaBidAdapter_spec.js +126 -6
  285. package/test/spec/modules/missenaBidAdapter_spec.js +12 -3
  286. package/test/spec/modules/omsBidAdapter_spec.js +78 -0
  287. package/test/spec/modules/openwebBidAdapter_spec.js +126 -6
  288. package/test/spec/modules/openxBidAdapter_spec.js +236 -8
  289. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +29 -36
  290. package/test/spec/modules/riseBidAdapter_spec.js +126 -6
  291. package/test/spec/modules/sharedIdSystem_spec.js +25 -1
  292. package/test/spec/modules/shinezBidAdapter_spec.js +133 -9
  293. package/test/spec/modules/shinezRtbBidAdapter_spec.js +33 -18
  294. package/test/spec/modules/stnBidAdapter_spec.js +126 -5
  295. package/test/spec/modules/symitriDapRtdProvider_spec.js +36 -0
  296. package/test/spec/modules/tagorasBidAdapter_spec.js +33 -18
  297. package/test/spec/modules/twistDigitalBidAdapter_spec.js +34 -18
  298. package/test/spec/modules/userId_spec.js +103 -2
  299. package/test/spec/modules/vidazooBidAdapter_spec.js +34 -18
  300. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +81 -0
  301. package/test/spec/modules/wurflRtdProvider_spec.js +8 -3
  302. package/test/spec/modules/yieldlabBidAdapter_spec.js +5 -5
  303. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +3 -2
  304. package/test/spec/native_spec.js +4 -2
  305. package/test/spec/unit/core/bidderFactory_spec.js +120 -43
@@ -1,35 +1,19 @@
1
- import {
2
- logWarn,
3
- logInfo,
4
- isArray,
5
- deepAccess,
6
- triggerPixel,
7
- } from '../src/utils.js';
8
- import { registerBidder } from '../src/adapters/bidderFactory.js';
9
- import { BANNER, VIDEO } from '../src/mediaTypes.js';
10
- import {
11
- getEndpoint,
12
- generateBidsParams,
13
- generateGeneralParams,
14
- buildBidResponse,
15
- } from '../libraries/riseUtils/index.js';
1
+ import {logWarn} from '../src/utils.js';
2
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
+ import {makeBaseSpec} from '../libraries/riseUtils/index.js';
16
4
 
17
- const SUPPORTED_AD_TYPES = [BANNER, VIDEO];
18
5
  const BIDDER_CODE = 'minutemedia';
19
- const ADAPTER_VERSION = '6.0.0';
20
- const TTL = 360;
21
- const DEFAULT_CURRENCY = 'USD';
22
6
  const BASE_URL = 'https://hb.minutemedia-prebid.com/';
7
+ const GVLID = 918;
23
8
  const MODES = {
24
9
  PRODUCTION: 'hb-mm-multi',
25
10
  TEST: 'hb-multi-mm-test'
26
11
  };
27
12
 
28
13
  export const spec = {
14
+ ...makeBaseSpec(BASE_URL, MODES),
29
15
  code: BIDDER_CODE,
30
- gvlid: 918,
31
- version: ADAPTER_VERSION,
32
- supportedMediaTypes: SUPPORTED_AD_TYPES,
16
+ gvlid: GVLID,
33
17
  isBidRequestValid: function (bidRequest) {
34
18
  if (!bidRequest.params) {
35
19
  logWarn('no params have been set to MinuteMedia adapter');
@@ -42,64 +26,6 @@ export const spec = {
42
26
  }
43
27
 
44
28
  return true;
45
- },
46
- buildRequests: function (validBidRequests, bidderRequest) {
47
- const combinedRequestsObject = {};
48
-
49
- const generalObject = validBidRequests[0];
50
- const testMode = generalObject.params.testMode;
51
-
52
- combinedRequestsObject.params = generateGeneralParams(generalObject, bidderRequest, ADAPTER_VERSION);
53
- combinedRequestsObject.bids = generateBidsParams(validBidRequests, bidderRequest);
54
-
55
- return {
56
- method: 'POST',
57
- url: getEndpoint(testMode, BASE_URL, MODES),
58
- data: combinedRequestsObject
59
- };
60
- },
61
- interpretResponse: function ({ body }) {
62
- const bidResponses = [];
63
-
64
- if (body.bids) {
65
- body.bids.forEach(adUnit => {
66
- const bidResponse = buildBidResponse(adUnit, DEFAULT_CURRENCY, TTL, VIDEO, BANNER);
67
- bidResponses.push(bidResponse);
68
- });
69
- }
70
-
71
- return bidResponses;
72
- },
73
- getUserSyncs: function (syncOptions, serverResponses) {
74
- const syncs = [];
75
- for (const response of serverResponses) {
76
- if (syncOptions.iframeEnabled && deepAccess(response, 'body.params.userSyncURL')) {
77
- syncs.push({
78
- type: 'iframe',
79
- url: deepAccess(response, 'body.params.userSyncURL')
80
- });
81
- }
82
- if (syncOptions.pixelEnabled && isArray(deepAccess(response, 'body.params.userSyncPixels'))) {
83
- const pixels = response.body.params.userSyncPixels.map(pixel => {
84
- return {
85
- type: 'image',
86
- url: pixel
87
- };
88
- });
89
- syncs.push(...pixels);
90
- }
91
- }
92
- return syncs;
93
- },
94
- onBidWon: function (bid) {
95
- if (bid == null) {
96
- return;
97
- }
98
-
99
- logInfo('onBidWon:', bid);
100
- if (bid.hasOwnProperty('nurl') && bid.nurl.length > 0) {
101
- triggerPixel(bid.nurl);
102
- }
103
29
  }
104
30
  };
105
31
 
@@ -13,7 +13,7 @@ Module that connects to MinuteMedia's demand sources.
13
13
 
14
14
  The MinuteMedia adapter requires setup and approval from the MinuteMedia. Please reach out to hb@minutemedia.com to create an MinuteMedia account.
15
15
 
16
- The adapter supports Video(instream) & Banner.
16
+ The adapter supports Video(instream), Banner, Native and multi-format bid requests.
17
17
 
18
18
  # Bid Parameters
19
19
  ## Video
@@ -12,6 +12,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
12
12
  import { getStorageManager } from '../src/storageManager.js';
13
13
  import { getCurrencyFromBidderRequest } from '../libraries/ortb2Utils/currency.js';
14
14
  import { isAutoplayEnabled } from '../libraries/autoplayDetection/autoplay.js';
15
+ import { normalizeBannerSizes } from '../libraries/sizeUtils/sizeUtils.js';
15
16
 
16
17
  /**
17
18
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -87,6 +88,7 @@ function toPayload(bidRequest, bidderRequest) {
87
88
  payload.coppa = bidderRequest?.ortb2?.regs?.coppa ? 1 : 0;
88
89
  payload.autoplay = isAutoplayEnabled() === true ? 1 : 0;
89
90
  payload.screen = { height: screen.height, width: screen.width };
91
+ payload.sizes = normalizeBannerSizes(bidRequest.mediaTypes.banner.sizes);
90
92
 
91
93
  return {
92
94
  method: 'POST',
@@ -7,7 +7,8 @@ import {getCreativeRendererSource} from '../src/creativeRenderers.js';
7
7
  function getRenderingDataHook(next, bidResponse, options) {
8
8
  if (isNativeResponse(bidResponse)) {
9
9
  next.bail({
10
- native: getNativeRenderingData(bidResponse, auctionManager.index.getAdUnit(bidResponse))
10
+ native: getNativeRenderingData(bidResponse, auctionManager.index.getAdUnit(bidResponse)),
11
+ rendererVersion: 2 // 9.28 fixed a rendering bug; this signals to PUC that the native renderer is safe to use
11
12
  })
12
13
  } else {
13
14
  next(bidResponse, options)
@@ -13,7 +13,7 @@ import {
13
13
  formatQS,
14
14
  } from '../src/utils.js';
15
15
  import {registerBidder} from '../src/adapters/bidderFactory.js';
16
- import {BANNER} from '../src/mediaTypes.js';
16
+ import { BANNER, VIDEO } from '../src/mediaTypes.js';
17
17
  import {ajax} from '../src/ajax.js';
18
18
  import {percentInView} from '../libraries/percentInView/percentInView.js';
19
19
  import {getUserSyncParams} from '../libraries/userSyncUtils/userSyncUtils.js';
@@ -27,7 +27,7 @@ export const spec = {
27
27
  code: BIDDER_CODE,
28
28
  aliases: ['brightcom', 'bcmssp'],
29
29
  gvlid: 883,
30
- supportedMediaTypes: [BANNER],
30
+ supportedMediaTypes: [BANNER, VIDEO],
31
31
  isBidRequestValid,
32
32
  buildRequests,
33
33
  interpretResponse,
@@ -39,7 +39,7 @@ export const spec = {
39
39
  function buildRequests(bidReqs, bidderRequest) {
40
40
  try {
41
41
  const impressions = bidReqs.map(bid => {
42
- let bidSizes = bid?.mediaTypes?.banner?.sizes || bid.sizes;
42
+ let bidSizes = bid?.mediaTypes?.banner?.sizes || bid?.mediaTypes?.video?.playerSize || bid.sizes;
43
43
  bidSizes = ((isArray(bidSizes) && isArray(bidSizes[0])) ? bidSizes : [bidSizes]);
44
44
  bidSizes = bidSizes.filter(size => isArray(size));
45
45
  const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)}));
@@ -52,18 +52,25 @@ function buildRequests(bidReqs, bidderRequest) {
52
52
 
53
53
  const imp = {
54
54
  id: bid.bidId,
55
- banner: {
56
- format: processedSizes,
57
- ext: {
58
- viewability: viewabilityAmountRounded,
59
- }
60
- },
61
55
  ext: {
62
56
  ...gpidData
63
57
  },
64
58
  tagid: String(bid.adUnitCode)
65
59
  };
66
60
 
61
+ if (bid?.mediaTypes?.video) {
62
+ imp.video = {
63
+ ...bid.mediaTypes.video,
64
+ }
65
+ } else {
66
+ imp.banner = {
67
+ format: processedSizes,
68
+ ext: {
69
+ viewability: viewabilityAmountRounded,
70
+ }
71
+ }
72
+ }
73
+
67
74
  const bidFloor = _getBidFloor(bid);
68
75
 
69
76
  if (bidFloor) {
@@ -158,7 +165,7 @@ function interpretResponse(serverResponse) {
158
165
  try {
159
166
  if (id && seatbid && seatbid.length > 0 && seatbid[0].bid && seatbid[0].bid.length > 0) {
160
167
  response = seatbid[0].bid.map(bid => {
161
- return {
168
+ const bidResponse = {
162
169
  requestId: bid.impid,
163
170
  cpm: parseFloat(bid.price),
164
171
  width: parseInt(bid.w),
@@ -166,13 +173,20 @@ function interpretResponse(serverResponse) {
166
173
  creativeId: bid.crid || bid.id,
167
174
  currency: 'USD',
168
175
  netRevenue: true,
169
- mediaType: BANNER,
170
176
  ad: _getAdMarkup(bid),
171
177
  ttl: 300,
172
178
  meta: {
173
179
  advertiserDomains: bid?.adomain || []
174
180
  }
175
181
  };
182
+
183
+ if (bid.mtype === 2) {
184
+ bidResponse.mediaType = VIDEO;
185
+ } else {
186
+ bidResponse.mediaType = BANNER;
187
+ }
188
+
189
+ return bidResponse;
176
190
  });
177
191
  }
178
192
  } catch (e) {
@@ -41,6 +41,21 @@ var adUnits = [
41
41
  publisherId: 2141020
42
42
  }
43
43
  }]
44
+ },
45
+ {
46
+ code: 'video-instream',
47
+ mediaTypes: {
48
+ video: {
49
+ context: 'instream',
50
+ playerSize: [640, 480]
51
+ }
52
+ },
53
+ bids: [{
54
+ bidder: 'oms',
55
+ params: {
56
+ publisherId: 2141020
57
+ }
58
+ }]
44
59
  }
45
60
  ]
46
61
  ```
@@ -1,35 +1,19 @@
1
- import {
2
- logWarn,
3
- logInfo,
4
- isArray,
5
- deepAccess,
6
- triggerPixel
7
- } from '../src/utils.js';
8
- import { registerBidder } from '../src/adapters/bidderFactory.js';
9
- import { BANNER, VIDEO } from '../src/mediaTypes.js';
10
- import {
11
- getEndpoint,
12
- generateBidsParams,
13
- generateGeneralParams,
14
- buildBidResponse,
15
- } from '../libraries/riseUtils/index.js';
1
+ import {logWarn} from '../src/utils.js';
2
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
+ import {makeBaseSpec} from '../libraries/riseUtils/index.js';
16
4
 
17
- const SUPPORTED_AD_TYPES = [BANNER, VIDEO];
18
5
  const BIDDER_CODE = 'openweb';
19
- const ADAPTER_VERSION = '6.0.0';
20
- const TTL = 360;
21
- const DEFAULT_CURRENCY = 'USD';
22
6
  const BASE_URL = 'https://hb.openwebmp.com/';
7
+ const GVLID = 280;
23
8
  const MODES = {
24
9
  PRODUCTION: 'hb-multi',
25
10
  TEST: 'hb-multi-test'
26
11
  };
27
12
 
28
13
  export const spec = {
14
+ ...makeBaseSpec(BASE_URL, MODES),
29
15
  code: BIDDER_CODE,
30
- gvlid: 280,
31
- version: ADAPTER_VERSION,
32
- supportedMediaTypes: SUPPORTED_AD_TYPES,
16
+ gvlid: GVLID,
33
17
  isBidRequestValid: function (bidRequest) {
34
18
  if (!bidRequest.params) {
35
19
  logWarn('no params have been set to OpenWeb adapter');
@@ -47,65 +31,6 @@ export const spec = {
47
31
  }
48
32
 
49
33
  return true;
50
- },
51
- buildRequests: function (validBidRequests, bidderRequest) {
52
- const combinedRequestsObject = {};
53
-
54
- // use data from the first bid, to create the general params for all bids
55
- const generalObject = validBidRequests[0];
56
- const testMode = generalObject.params.testMode;
57
-
58
- combinedRequestsObject.params = generateGeneralParams(generalObject, bidderRequest);
59
- combinedRequestsObject.bids = generateBidsParams(validBidRequests, bidderRequest);
60
-
61
- return {
62
- method: 'POST',
63
- url: getEndpoint(testMode, BASE_URL, MODES),
64
- data: combinedRequestsObject
65
- }
66
- },
67
- interpretResponse: function ({body}) {
68
- const bidResponses = [];
69
-
70
- if (body && body.bids && body.bids.length) {
71
- body.bids.forEach(adUnit => {
72
- const bidResponse = buildBidResponse(adUnit, DEFAULT_CURRENCY, TTL, VIDEO, BANNER);
73
- bidResponses.push(bidResponse);
74
- });
75
- }
76
-
77
- return bidResponses;
78
- },
79
- getUserSyncs: function (syncOptions, serverResponses) {
80
- const syncs = [];
81
- for (const response of serverResponses) {
82
- if (syncOptions.iframeEnabled && deepAccess(response, 'body.params.userSyncURL')) {
83
- syncs.push({
84
- type: 'iframe',
85
- url: deepAccess(response, 'body.params.userSyncURL')
86
- });
87
- }
88
- if (syncOptions.pixelEnabled && isArray(deepAccess(response, 'body.params.userSyncPixels'))) {
89
- const pixels = response.body.params.userSyncPixels.map(pixel => {
90
- return {
91
- type: 'image',
92
- url: pixel
93
- }
94
- });
95
- syncs.push(...pixels);
96
- }
97
- }
98
- return syncs;
99
- },
100
- onBidWon: function (bid) {
101
- if (bid == null) {
102
- return;
103
- }
104
-
105
- logInfo('onBidWon:', bid);
106
- if (bid.hasOwnProperty('nurl') && bid.nurl.length > 0) {
107
- triggerPixel(bid.nurl);
108
- }
109
34
  }
110
35
  };
111
36
 
@@ -13,7 +13,7 @@ Module that connects to OpenWeb's demand sources.
13
13
 
14
14
  The OpenWeb adapter requires setup and approval from OpenWeb. Please reach out to monetization@openweb.com to create an OpenWeb account.
15
15
 
16
- The adapter supports Video and Display demand.
16
+ The adapter supports Video(instream), Banner, Native and multi-format bid requests.
17
17
 
18
18
  # Bid Parameters
19
19
  ## Video
@@ -2,7 +2,7 @@ import {config} from '../src/config.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import * as utils from '../src/utils.js';
4
4
  import {mergeDeep} from '../src/utils.js';
5
- import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
+ import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
6
6
  import {ortbConverter} from '../libraries/ortbConverter/converter.js';
7
7
 
8
8
  const bidderConfig = 'hb_pb_ortb';
@@ -13,7 +13,7 @@ export const DEFAULT_PH = '2d1251ae-7f3a-47cf-bd2a-2f288854a0ba';
13
13
  export const spec = {
14
14
  code: 'openx',
15
15
  gvlid: 69,
16
- supportedMediaTypes: [BANNER, VIDEO],
16
+ supportedMediaTypes: [BANNER, VIDEO, NATIVE],
17
17
  isBidRequestValid,
18
18
  buildRequests,
19
19
  interpretResponse,
@@ -25,7 +25,12 @@ registerBidder(spec);
25
25
  const converter = ortbConverter({
26
26
  context: {
27
27
  netRevenue: true,
28
- ttl: 300
28
+ ttl: 300,
29
+ nativeRequest: {
30
+ eventtrackers: [
31
+ {event: 1, methods: [1, 2]},
32
+ ]
33
+ }
29
34
  },
30
35
  imp(buildImp, bidRequest, context) {
31
36
  const imp = buildImp(bidRequest, context);
@@ -158,8 +163,11 @@ function isBidRequestValid(bidRequest) {
158
163
 
159
164
  function buildRequests(bids, bidderRequest) {
160
165
  let videoBids = bids.filter(bid => isVideoBid(bid));
161
- let bannerBids = bids.filter(bid => isBannerBid(bid));
162
- let requests = bannerBids.length ? [createRequest(bannerBids, bidderRequest, BANNER)] : [];
166
+ let bannerAndNativeBids = bids.filter(bid => isBannerBid(bid) || isNativeBid(bid))
167
+ // In case of multi-format bids remove `video` from mediaTypes as for video a separate bid request is built
168
+ .map(bid => ({...bid, mediaTypes: {...bid.mediaTypes, video: undefined}}));
169
+
170
+ let requests = bannerAndNativeBids.length ? [createRequest(bannerAndNativeBids, bidderRequest, null)] : [];
163
171
  videoBids.forEach(bid => {
164
172
  requests.push(createRequest([bid], bidderRequest, VIDEO));
165
173
  });
@@ -178,8 +186,13 @@ function isVideoBid(bid) {
178
186
  return utils.deepAccess(bid, 'mediaTypes.video');
179
187
  }
180
188
 
189
+ function isNativeBid(bid) {
190
+ return utils.deepAccess(bid, 'mediaTypes.native');
191
+ }
192
+
181
193
  function isBannerBid(bid) {
182
- return utils.deepAccess(bid, 'mediaTypes.banner') || !isVideoBid(bid);
194
+ const isNotVideoOrNativeBid = !isVideoBid(bid) && !isNativeBid(bid)
195
+ return utils.deepAccess(bid, 'mediaTypes.banner') || isNotVideoOrNativeBid;
183
196
  }
184
197
 
185
198
  function interpretResponse(resp, req) {
@@ -34,6 +34,16 @@ Please note you should only include either openxBidAdapter or openxOrtbBidAdapte
34
34
  | `delDomain` | required | String | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net"
35
35
  | `video` | optional | OpenRTB video subtypes | Use of adUnit.mediaTypes.video is now preferred. | `{ video: {mimes: ['video/mp4']}`
36
36
 
37
+ ## Native
38
+
39
+ | Name | Scope | Type | Description | Example
40
+ | ---- | ----- | ---- | ----------- | -------
41
+ | `delDomain` or `platform` | required | String | OpenX delivery domain or platform id provided by your OpenX representative. | "PUBLISHER-d.openx.net" or "555not5a-real-plat-form-id0123456789"
42
+ | `unit` | required | String | OpenX ad unit ID provided by your OpenX representative. | "1611023122"
43
+ | `customParams` | optional | Object | User-defined targeting key-value pairs. customParams applies to a specific unit. | `{key1: "v1", key2: ["v2","v3"]}`
44
+ | `customFloor` | optional | Number | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50 <br/><br/> **WARNING:**<br/> Misuse of this parameter can impact revenue | 1.50
45
+ | `doNotTrack` | optional | Boolean | Prevents advertiser from using data for this user. <br/><br/> **WARNING:**<br/> Request-level setting. May impact revenue. | true
46
+ | `coppa` | optional | Boolean | Enables Child's Online Privacy Protection Act (COPPA) regulations. Use of `pbjs.setConfig({coppa: true});` is now preferred. | true
37
47
 
38
48
  # Example
39
49
  ```javascript
@@ -84,7 +94,42 @@ var adUnits = [
84
94
  mimes: ['video/x-ms-wmv, video/mp4'] // mediaTypes.video preferred
85
95
  }
86
96
  }
87
- }]p
97
+ }]
98
+ },
99
+ {
100
+ code: 'native1',
101
+ mediaTypes: {
102
+ native: {
103
+ ortb: {
104
+ ver: '1.2',
105
+ assets: [
106
+ {
107
+ required: 1,
108
+ img: {
109
+ type: 1,
110
+ hmin: 50
111
+ },
112
+ }, {
113
+ required: 1,
114
+ title: {
115
+ len: 80
116
+ }
117
+ }
118
+ ]
119
+ }
120
+ }
121
+ },
122
+ bids: [{
123
+ bidder: 'openx',
124
+ params: {
125
+ unit: '1611023124',
126
+ delDomain: 'PUBLISHER-d.openx.net',
127
+ customParams: {
128
+ key1: 'v1',
129
+ key2: ['v2', 'v3']
130
+ }
131
+ }
132
+ }]
88
133
  }
89
134
  ];
90
135
  ```
@@ -25,7 +25,7 @@ let styleParamsMap = {
25
25
  };
26
26
  export const spec = {
27
27
  code: BIDDER_CODE,
28
- aliases: ['oas', '152media'], // short code and customer aliases
28
+ aliases: ['oas', '152media', 'paradocs'], // short code and customer aliases
29
29
  isBidRequestValid: function (bid) {
30
30
  switch (true) {
31
31
  case !('params' in bid):
@@ -50,14 +50,15 @@ as well as enabling settings for specific use cases mentioned above (e.g. acbidd
50
50
 
51
51
  #### Context
52
52
 
53
- Permutive is not listed as a TCF vendor as all data collection is on behalf of the publisher and based on consent the publisher has received from the user.
54
- Rather than through the TCF framework, this consent is provided to Permutive when the user gives the relevant permissions on the publisher website which allow the Permutive SDK to run.
55
- This means that if GDPR enforcement is configured _and_ the user consent isn’t given for Permutive to fire, no cohorts will populate.
56
- As Prebid utilizes TCF vendor consent, for the Permutive RTD module to load, Permutive needs to be labeled within the Vendor Exceptions
53
+ While Permutive is listed as a TCF vendor (ID: 361), Permutive does not obtain consent directly from the TCF. As we act as a processor on behalf of our publishers consent is given to the Permutive SDK by the publisher, not by the [GDPR Consent Management Module](https://prebid-docs.atre.net/dev-docs/modules/consentManagement.html).
54
+
55
+ This means that if GDPR enforcement is configured within the Permutive SDK _and_ the user consent isn’t given for Permutive to fire, no cohorts will populate.
56
+
57
+ If you are also using the [TCF Control Module](https://docs.prebid.org/dev-docs/modules/tcfControl.html), in order to prevent Permutive from being blocked, it needs to be labeled within the Vendor Exceptions.
57
58
 
58
59
  #### Instructions
59
60
 
60
- 1. Publisher enables rules within Prebid GDPR module
61
+ 1. Publisher enables rules within Prebid.js configuration.
61
62
  2. Label Permutive as an exception, as shown below.
62
63
  ```javascript
63
64
  [
@@ -281,6 +281,31 @@ function isOWPubmaticBid(adapterName) {
281
281
  })
282
282
  }
283
283
 
284
+ function getFloorsCommonField (floorData) {
285
+ if (!floorData) return;
286
+ const { location, fetchStatus, floorProvider, modelVersion } = floorData;
287
+ return {
288
+ ffs: {
289
+ [FLOOR_VALUES.SUCCESS]: 1,
290
+ [FLOOR_VALUES.ERROR]: 2,
291
+ [FLOOR_VALUES.TIMEOUT]: 4,
292
+ undefined: 0
293
+ }[fetchStatus],
294
+ fsrc: {
295
+ [FLOOR_VALUES.FETCH]: 2,
296
+ [FLOOR_VALUES.NO_DATA]: 0,
297
+ [FLOOR_VALUES.AD_UNIT]: 1,
298
+ [FLOOR_VALUES.SET_CONFIG]: 1
299
+ }[location],
300
+ fp: floorProvider,
301
+ mv: modelVersion
302
+ }
303
+ }
304
+
305
+ function getFloorType(floorResponseData) {
306
+ return floorResponseData ? (floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
307
+ }
308
+
284
309
  function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
285
310
  highestBid = (highestBid && highestBid.length > 0) ? highestBid[0] : null;
286
311
  return Object.keys(adUnit.bids).reduce(function(partnerBids, bidId) {
@@ -325,6 +350,7 @@ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
325
350
  'ocpm': bid.bidResponse ? (bid.bidResponse.originalCpm || 0) : 0,
326
351
  'ocry': bid.bidResponse ? (bid.bidResponse.originalCurrency || CURRENCY_USD) : CURRENCY_USD,
327
352
  'frv': bid.bidResponse ? bid.bidResponse.floorData?.floorRuleValue : undefined,
353
+ 'fv': bid.bidResponse ? bid.bidResponse.floorData?.floorValue : undefined,
328
354
  'md': bid.bidResponse ? getMetadata(bid.bidResponse.meta) : undefined,
329
355
  'pb': pg || undefined
330
356
  });
@@ -403,9 +429,22 @@ function executeBidsLoggerCall(e, highestCpmBids) {
403
429
  outputObj['tgid'] = getTgId();
404
430
  outputObj['pbv'] = '$prebid.version$' || '-1';
405
431
 
406
- if (floorData && floorFetchStatus) {
407
- outputObj['fmv'] = floorData.floorRequestData ? floorData.floorRequestData.modelVersion || undefined : undefined;
408
- outputObj['ft'] = floorData.floorResponseData ? (floorData.floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
432
+ if (floorData) {
433
+ const floorRootValues = getFloorsCommonField(floorData?.floorRequestData);
434
+ if (floorRootValues) {
435
+ const { ffs, fsrc, fp, mv } = floorRootValues;
436
+ if (floorData?.floorRequestData) {
437
+ outputObj['ffs'] = ffs;
438
+ outputObj['fsrc'] = fsrc;
439
+ outputObj['fp'] = fp;
440
+ }
441
+ if (floorFetchStatus) {
442
+ outputObj['fmv'] = mv || undefined;
443
+ }
444
+ }
445
+ if (floorFetchStatus) {
446
+ outputObj['ft'] = getFloorType(floorData?.floorResponseData);
447
+ }
409
448
  }
410
449
 
411
450
  outputObj.s = Object.keys(auctionCache.adUnitCodes).reduce(function(slotsArray, adUnitId) {
@@ -421,22 +460,6 @@ function executeBidsLoggerCall(e, highestCpmBids) {
421
460
  'fskp': floorData && floorFetchStatus ? (floorData.floorRequestData ? (floorData.floorRequestData.skipped == false ? 0 : 1) : undefined) : undefined,
422
461
  'sid': generateUUID()
423
462
  };
424
- if (floorData?.floorRequestData) {
425
- const { location, fetchStatus, floorProvider } = floorData?.floorRequestData;
426
- slotObject.ffs = {
427
- [FLOOR_VALUES.SUCCESS]: 1,
428
- [FLOOR_VALUES.ERROR]: 2,
429
- [FLOOR_VALUES.TIMEOUT]: 4,
430
- undefined: 0
431
- }[fetchStatus];
432
- slotObject.fsrc = {
433
- [FLOOR_VALUES.FETCH]: 2,
434
- [FLOOR_VALUES.NO_DATA]: 2,
435
- [FLOOR_VALUES.AD_UNIT]: 1,
436
- [FLOOR_VALUES.SET_CONFIG]: 1
437
- }[location];
438
- slotObject.fp = floorProvider;
439
- }
440
463
  slotsArray.push(slotObject);
441
464
  return slotsArray;
442
465
  }, []);
@@ -509,6 +532,25 @@ function executeBidWonLoggerCall(auctionId, adUnitId) {
509
532
  pixelURL += '&orig=' + enc(getDomainFromUrl(referrer));
510
533
  pixelURL += '&ss=' + enc(isS2SBidder(winningBid.bidder));
511
534
  (fskp != undefined) && (pixelURL += '&fskp=' + enc(fskp));
535
+ if (floorData) {
536
+ const floorRootValues = getFloorsCommonField(floorData.floorRequestData);
537
+ const { fsrc, fp, mv } = floorRootValues || {};
538
+ const params = { fsrc, fp, fmv: mv };
539
+ Object.entries(params).forEach(([key, value]) => {
540
+ if (value !== undefined) {
541
+ pixelURL += `&${key}=${enc(value)}`;
542
+ }
543
+ });
544
+ const floorType = getFloorType(floorData.floorResponseData);
545
+ if (floorType !== undefined) {
546
+ pixelURL += '&ft=' + enc(floorType);
547
+ }
548
+ const floorRuleValue = winningBid?.bidResponse?.floorData?.floorRuleValue;
549
+ (floorRuleValue !== undefined) && (pixelURL += '&frv=' + enc(floorRuleValue));
550
+
551
+ const floorValue = winningBid?.bidResponse?.floorData?.floorValue;
552
+ (floorValue !== undefined) && (pixelURL += '&fv=' + enc(floorValue));
553
+ }
512
554
  pixelURL += '&af=' + enc(winningBid.bidResponse ? (winningBid.bidResponse.mediaType || undefined) : undefined);
513
555
 
514
556
  ajax(