prebid.js 7.22.0 → 7.24.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 (314) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/aaxBlockmeterRtdProvider.js +1 -0
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/admaticBidAdapter.js +1 -0
  7. package/dist/adrelevantisBidAdapter.js +1 -1
  8. package/dist/adtrgtmeBidAdapter.js +1 -1
  9. package/dist/adxcgBidAdapter.js +1 -1
  10. package/dist/adyoulikeBidAdapter.js +1 -1
  11. package/dist/ajaBidAdapter.js +1 -1
  12. package/dist/amxBidAdapter.js +1 -1
  13. package/dist/amxIdSystem.js +1 -1
  14. package/dist/analyticsAdapter.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/audiencerunBidAdapter.js +1 -1
  19. package/dist/axonixBidAdapter.js +1 -1
  20. package/dist/bidViewability.js +1 -1
  21. package/dist/bidViewabilityIO.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/big-richmediaBidAdapter.js +1 -1
  24. package/dist/bluebillywigBidAdapter.js +1 -1
  25. package/dist/bridgewellBidAdapter.js +1 -1
  26. package/dist/brightMountainMediaBidAdapter.js +1 -1
  27. package/dist/browsiRtdProvider.js +1 -1
  28. package/dist/carodaBidAdapter.js +1 -1
  29. package/dist/chtnwBidAdapter.js +1 -0
  30. package/dist/cleanioRtdProvider.js +1 -1
  31. package/dist/concertBidAdapter.js +1 -1
  32. package/dist/connectIdSystem.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consentManagement.js +1 -1
  35. package/dist/consentManagementUsp.js +1 -1
  36. package/dist/consumableBidAdapter.js +1 -1
  37. package/dist/conversantBidAdapter.js +1 -1
  38. package/dist/craftBidAdapter.js +1 -1
  39. package/dist/criteoBidAdapter.js +1 -1
  40. package/dist/currency.js +1 -1
  41. package/dist/dependencies.json +19 -0
  42. package/dist/dfpAdServerVideo.js +1 -1
  43. package/dist/dgkeywordRtdProvider.js +1 -1
  44. package/dist/dspxBidAdapter.js +1 -1
  45. package/dist/eplanningBidAdapter.js +1 -1
  46. package/dist/finativeBidAdapter.js +1 -1
  47. package/dist/gdprEnforcement.js +1 -1
  48. package/dist/glimpseBidAdapter.js +1 -1
  49. package/dist/gmosspBidAdapter.js +1 -1
  50. package/dist/goldbachBidAdapter.js +1 -1
  51. package/dist/googleAnalyticsAdapter.js +1 -1
  52. package/dist/gridBidAdapter.js +1 -1
  53. package/dist/gridNMBidAdapter.js +1 -1
  54. package/dist/growthCodeIdSystem.js +1 -1
  55. package/dist/gumgumBidAdapter.js +1 -1
  56. package/dist/h12mediaBidAdapter.js +1 -1
  57. package/dist/id5AnalyticsAdapter.js +1 -1
  58. package/dist/id5IdSystem.js +1 -1
  59. package/dist/impactifyBidAdapter.js +1 -1
  60. package/dist/improvedigitalBidAdapter.js +1 -1
  61. package/dist/inmarBidAdapter.js +1 -1
  62. package/dist/insticatorBidAdapter.js +1 -1
  63. package/dist/instreamTracking.js +1 -1
  64. package/dist/ixBidAdapter.js +1 -1
  65. package/dist/jixieBidAdapter.js +1 -1
  66. package/dist/justpremiumBidAdapter.js +1 -1
  67. package/dist/jwplayerVideoProvider.js +1 -0
  68. package/dist/kargoBidAdapter.js +1 -1
  69. package/dist/konduitAnalyticsAdapter.js +1 -1
  70. package/dist/kueezBidAdapter.js +1 -1
  71. package/dist/kueezRtbBidAdapter.js +1 -0
  72. package/dist/lassoBidAdapter.js +1 -1
  73. package/dist/lifestreetBidAdapter.js +1 -1
  74. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  75. package/dist/logicadBidAdapter.js +1 -1
  76. package/dist/loglyliftBidAdapter.js +1 -1
  77. package/dist/magniteAnalyticsAdapter.js +1 -1
  78. package/dist/malltvAnalyticsAdapter.js +1 -1
  79. package/dist/marsmediaBidAdapter.js +1 -1
  80. package/dist/mediafuseBidAdapter.js +1 -1
  81. package/dist/mediakeysBidAdapter.js +1 -1
  82. package/dist/mediasquareBidAdapter.js +1 -1
  83. package/dist/mgidBidAdapter.js +1 -1
  84. package/dist/mgidRtdProvider.js +1 -0
  85. package/dist/minutemediaBidAdapter.js +1 -1
  86. package/dist/multibid.js +1 -1
  87. package/dist/not-for-prod/prebid.js +153 -141
  88. package/dist/oguryBidAdapter.js +1 -1
  89. package/dist/onetagBidAdapter.js +1 -1
  90. package/dist/ooloAnalyticsAdapter.js +1 -1
  91. package/dist/openxOrtbBidAdapter.js +1 -1
  92. package/dist/ortbConverter.js +1 -0
  93. package/dist/outbrainBidAdapter.js +1 -1
  94. package/dist/oxxionRtdProvider.js +1 -0
  95. package/dist/parrableIdSystem.js +1 -1
  96. package/dist/pbsExtensions.js +1 -0
  97. package/dist/permutiveRtdProvider.js +1 -1
  98. package/dist/pixfutureBidAdapter.js +1 -1
  99. package/dist/prebid-core.js +1 -1
  100. package/dist/prebidServerBidAdapter.js +1 -1
  101. package/dist/priceFloors.js +1 -1
  102. package/dist/pubCommonId.js +1 -1
  103. package/dist/publinkIdSystem.js +1 -1
  104. package/dist/pubmaticBidAdapter.js +1 -1
  105. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  106. package/dist/pxyzBidAdapter.js +1 -1
  107. package/dist/quantcastBidAdapter.js +1 -1
  108. package/dist/readpeakBidAdapter.js +1 -1
  109. package/dist/relaidoBidAdapter.js +1 -1
  110. package/dist/rhythmoneBidAdapter.js +1 -1
  111. package/dist/riseBidAdapter.js +1 -1
  112. package/dist/rtdModule.js +1 -1
  113. package/dist/rubiconAnalyticsAdapter.js +1 -1
  114. package/dist/rubiconBidAdapter.js +1 -1
  115. package/dist/schain.js +1 -1
  116. package/dist/seedingAllianceBidAdapter.js +1 -1
  117. package/dist/seedtagBidAdapter.js +1 -1
  118. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  119. package/dist/sharethroughBidAdapter.js +1 -1
  120. package/dist/shinezBidAdapter.js +1 -1
  121. package/dist/smaatoBidAdapter.js +1 -1
  122. package/dist/smartadserverBidAdapter.js +1 -1
  123. package/dist/smartxBidAdapter.js +1 -1
  124. package/dist/smilewantedBidAdapter.js +1 -1
  125. package/dist/sonobiBidAdapter.js +1 -1
  126. package/dist/sovrnAnalyticsAdapter.js +1 -1
  127. package/dist/sovrnBidAdapter.js +1 -1
  128. package/dist/spotxBidAdapter.js +1 -1
  129. package/dist/sspBCBidAdapter.js +1 -1
  130. package/dist/sublimeBidAdapter.js +1 -1
  131. package/dist/synacormediaBidAdapter.js +1 -1
  132. package/dist/targetVideoBidAdapter.js +1 -1
  133. package/dist/teadsBidAdapter.js +1 -1
  134. package/dist/teadsIdSystem.js +1 -1
  135. package/dist/trionBidAdapter.js +1 -1
  136. package/dist/tripleliftBidAdapter.js +1 -1
  137. package/dist/ttdBidAdapter.js +1 -1
  138. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  139. package/dist/underdogmediaBidAdapter.js +1 -1
  140. package/dist/undertoneBidAdapter.js +1 -1
  141. package/dist/userId.js +1 -1
  142. package/dist/vidazooBidAdapter.js +1 -1
  143. package/dist/video.js +1 -0
  144. package/dist/videoModule.js +1 -0
  145. package/dist/videobyteBidAdapter.js +1 -1
  146. package/dist/videojsVideoProvider.js +1 -0
  147. package/dist/visxBidAdapter.js +1 -1
  148. package/dist/vuukleBidAdapter.js +1 -1
  149. package/dist/widespaceBidAdapter.js +1 -1
  150. package/dist/winrBidAdapter.js +1 -1
  151. package/dist/yahoosspBidAdapter.js +1 -1
  152. package/dist/yieldmoBidAdapter.js +1 -1
  153. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  154. package/integrationExamples/gpt/mgidRtdProvider_example.html +143 -0
  155. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +98 -0
  156. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +89 -0
  157. package/integrationExamples/videoModule/jwplayer/eventListeners.html +244 -0
  158. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +122 -0
  159. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +80 -0
  160. package/integrationExamples/videoModule/jwplayer/playlist.html +122 -0
  161. package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +126 -0
  162. package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +132 -0
  163. package/integrationExamples/videoModule/videojs/eventListeners.html +238 -0
  164. package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +138 -0
  165. package/integrationExamples/videoModule/videojs/mediaMetadata.html +103 -0
  166. package/integrationExamples/videoModule/videojs/playlist.html +151 -0
  167. package/libraries/ortbConverter/README.md +378 -0
  168. package/libraries/ortbConverter/converter.js +135 -0
  169. package/libraries/ortbConverter/lib/composer.js +43 -0
  170. package/libraries/ortbConverter/lib/mergeProcessors.js +9 -0
  171. package/libraries/ortbConverter/lib/sizes.js +14 -0
  172. package/libraries/ortbConverter/processors/banner.js +40 -0
  173. package/libraries/ortbConverter/processors/default.js +167 -0
  174. package/libraries/ortbConverter/processors/mediaType.js +21 -0
  175. package/libraries/ortbConverter/processors/native.js +37 -0
  176. package/libraries/ortbConverter/processors/video.js +66 -0
  177. package/libraries/pbsExtensions/pbsExtensions.js +12 -0
  178. package/libraries/pbsExtensions/processors/aliases.js +17 -0
  179. package/libraries/pbsExtensions/processors/mediaType.js +23 -0
  180. package/libraries/pbsExtensions/processors/params.js +22 -0
  181. package/libraries/pbsExtensions/processors/pbs.js +99 -0
  182. package/libraries/pbsExtensions/processors/requestExtPrebid.js +30 -0
  183. package/libraries/pbsExtensions/processors/video.js +23 -0
  184. package/libraries/video/constants/enums.js +5 -0
  185. package/libraries/video/constants/events.js +97 -0
  186. package/libraries/video/constants/ortb.js +169 -0
  187. package/libraries/video/constants/vendorCodes.js +6 -0
  188. package/libraries/video/shared/eventHandler.js +18 -0
  189. package/libraries/video/shared/parentModule.js +82 -0
  190. package/libraries/video/shared/state.js +47 -0
  191. package/libraries/video/shared/vastXmlBuilder.js +77 -0
  192. package/libraries/video/shared/vastXmlEditor.js +115 -0
  193. package/modules/.submodules.json +7 -1
  194. package/modules/aaxBlockmeterRtdProvider.js +59 -0
  195. package/modules/aaxBlockmeterRtdProvider.md +48 -0
  196. package/modules/admaticBidAdapter.js +147 -0
  197. package/modules/admaticBidAdapter.md +48 -0
  198. package/modules/amxBidAdapter.js +1 -0
  199. package/modules/appnexusBidAdapter.js +38 -1
  200. package/modules/chtnwBidAdapter.js +110 -0
  201. package/modules/chtnwBidAdapter.md +31 -0
  202. package/modules/concertBidAdapter.js +44 -2
  203. package/modules/connectIdSystem.js +36 -23
  204. package/modules/connectIdSystem.md +3 -2
  205. package/modules/consentManagement.js +22 -1
  206. package/modules/consentManagementUsp.js +29 -7
  207. package/modules/criteoBidAdapter.js +25 -5
  208. package/modules/currency.js +9 -0
  209. package/modules/dgkeywordRtdProvider.js +3 -3
  210. package/modules/gridNMBidAdapter.js +10 -14
  211. package/modules/growthCodeIdSystem.js +9 -5
  212. package/modules/gumgumBidAdapter.js +4 -0
  213. package/modules/improvedigitalBidAdapter.js +191 -470
  214. package/modules/ixBidAdapter.js +54 -71
  215. package/modules/jwplayerVideoProvider.js +929 -0
  216. package/modules/jwplayerVideoProvider.md +25 -0
  217. package/modules/kargoBidAdapter.js +1 -1
  218. package/modules/kueezRtbBidAdapter.js +278 -0
  219. package/modules/kueezRtbBidAdapter.md +35 -0
  220. package/modules/magniteAnalyticsAdapter.js +6 -1
  221. package/modules/mgidRtdProvider.js +190 -0
  222. package/modules/mgidRtdProvider.md +51 -0
  223. package/modules/multibid/index.js +12 -0
  224. package/modules/openxOrtbBidAdapter.js +120 -275
  225. package/modules/oxxionRtdProvider.js +119 -0
  226. package/modules/oxxionRtdProvider.md +48 -0
  227. package/modules/permutiveRtdProvider.js +2 -1
  228. package/modules/permutiveRtdProvider.md +36 -1
  229. package/modules/prebidServerBidAdapter/index.js +19 -716
  230. package/modules/prebidServerBidAdapter/ortbConverter.js +274 -0
  231. package/modules/priceFloors.js +73 -1
  232. package/modules/pubmaticBidAdapter.js +21 -29
  233. package/modules/rtdModule/index.js +22 -1
  234. package/modules/schain.js +24 -1
  235. package/modules/spotxBidAdapter.js +16 -15
  236. package/modules/synacormediaBidAdapter.js +1 -1
  237. package/modules/teadsIdSystem.js +5 -0
  238. package/modules/tripleliftBidAdapter.js +1 -1
  239. package/modules/userId/eids.js +3 -10
  240. package/modules/userId/index.js +64 -6
  241. package/modules/videoModule/addingSubmodule.md +521 -0
  242. package/modules/videoModule/coreVideo.js +234 -0
  243. package/modules/videoModule/gamAdServerSubmodule.js +27 -0
  244. package/modules/videoModule/index.js +244 -0
  245. package/modules/videoModule/videoImpressionVerifier.js +206 -0
  246. package/modules/videojsVideoProvider.js +854 -0
  247. package/modules/videojsVideoProvider.md +17 -0
  248. package/package.json +12 -8
  249. package/src/adRendering.js +1 -1
  250. package/src/adapterManager.js +56 -7
  251. package/src/adloader.js +3 -1
  252. package/src/auction.js +6 -1
  253. package/src/events.js +5 -1
  254. package/src/pbjsORTB.js +35 -0
  255. package/src/prebid.js +137 -112
  256. package/src/targeting.js +10 -2
  257. package/src/utils/currency.js +16 -0
  258. package/src/utils.js +21 -0
  259. package/test/spec/auctionmanager_spec.js +15 -0
  260. package/test/spec/modules/aaxBlockmeter_spec.js +58 -0
  261. package/test/spec/modules/admaticBidAdapter_spec.js +46 -0
  262. package/test/spec/modules/chtnwBidAdapter_spec.js +105 -0
  263. package/test/spec/modules/concertBidAdapter_spec.js +56 -0
  264. package/test/spec/modules/connectIdSystem_spec.js +175 -5
  265. package/test/spec/modules/consentManagementUsp_spec.js +64 -18
  266. package/test/spec/modules/criteoBidAdapter_spec.js +28 -0
  267. package/test/spec/modules/dgkeywordRtdProvider_spec.js +3 -3
  268. package/test/spec/modules/eids_spec.js +10 -7
  269. package/test/spec/modules/ftrackIdSystem_spec.js +34 -22
  270. package/test/spec/modules/gumgumBidAdapter_spec.js +15 -0
  271. package/test/spec/modules/improvedigitalBidAdapter_spec.js +231 -211
  272. package/test/spec/modules/ixBidAdapter_spec.js +412 -350
  273. package/test/spec/modules/kueezRtbBidAdapter_spec.js +396 -0
  274. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +26 -0
  275. package/test/spec/modules/mgidRtdProvider_spec.js +366 -0
  276. package/test/spec/modules/openxOrtbBidAdapter_spec.js +77 -49
  277. package/test/spec/modules/oxxionRtdProvider_spec.js +142 -0
  278. package/test/spec/modules/permutiveRtdProvider_spec.js +64 -5
  279. package/test/spec/modules/prebidServerBidAdapter_spec.js +139 -137
  280. package/test/spec/modules/realTimeDataModule_spec.js +65 -0
  281. package/test/spec/modules/tripleliftBidAdapter_spec.js +14 -0
  282. package/test/spec/modules/userId_spec.js +67 -1
  283. package/test/spec/modules/videoModule/coreVideo_spec.js +98 -0
  284. package/test/spec/modules/videoModule/pbVideo_spec.js +362 -0
  285. package/test/spec/modules/videoModule/shared/parentModule_spec.js +73 -0
  286. package/test/spec/modules/videoModule/shared/state_spec.js +26 -0
  287. package/test/spec/modules/videoModule/shared/vastXmlBuilder_spec.js +103 -0
  288. package/test/spec/modules/videoModule/shared/vastXmlEditor_spec.js +209 -0
  289. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +846 -0
  290. package/test/spec/modules/videoModule/submodules/videojsVideoProvider_spec.js +391 -0
  291. package/test/spec/modules/videoModule/videoImpressionVerifier_spec.js +112 -0
  292. package/test/spec/ortbConverter/banner_spec.js +203 -0
  293. package/test/spec/ortbConverter/composer_spec.js +69 -0
  294. package/test/spec/ortbConverter/converter_spec.js +283 -0
  295. package/test/spec/ortbConverter/currency_spec.js +40 -0
  296. package/test/spec/ortbConverter/default_processors_spec.js +61 -0
  297. package/test/spec/ortbConverter/gdpr_spec.js +38 -0
  298. package/test/spec/ortbConverter/mediaTypes_spec.js +67 -0
  299. package/test/spec/ortbConverter/mergeProcessors_spec.js +59 -0
  300. package/test/spec/ortbConverter/multibid_spec.js +35 -0
  301. package/test/spec/ortbConverter/native_spec.js +95 -0
  302. package/test/spec/ortbConverter/pbjsORTB_spec.js +67 -0
  303. package/test/spec/ortbConverter/pbsExtensions/aliases_spec.js +57 -0
  304. package/test/spec/ortbConverter/pbsExtensions/params_spec.js +96 -0
  305. package/test/spec/ortbConverter/pbsExtensions/video_spec.js +52 -0
  306. package/test/spec/ortbConverter/priceFloors_spec.js +143 -0
  307. package/test/spec/ortbConverter/schain_spec.js +33 -0
  308. package/test/spec/ortbConverter/userId_spec.js +21 -0
  309. package/test/spec/ortbConverter/usp_spec.js +15 -0
  310. package/test/spec/ortbConverter/video_spec.js +189 -0
  311. package/test/spec/unit/core/adapterManager_spec.js +102 -0
  312. package/test/spec/unit/core/targeting_spec.js +34 -0
  313. package/test/spec/unit/pbjs_api_spec.js +124 -45
  314. package/test/spec/utils_spec.js +45 -1
@@ -4,9 +4,10 @@
4
4
  * information and make it available for any USP (CCPA) supported adapters to
5
5
  * read/pass this information to their system.
6
6
  */
7
- import {isFn, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
7
+ import {deepSetValue, isFn, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
8
8
  import {config} from '../src/config.js';
9
- import {uspDataHandler} from '../src/adapterManager.js';
9
+ import adapterManager, {uspDataHandler} from '../src/adapterManager.js';
10
+ import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
10
11
  import {timedAuctionHook} from '../src/utils/perfMetrics.js';
11
12
  import {getHook} from '../src/hook.js';
12
13
 
@@ -114,6 +115,11 @@ function lookupUspConsent({onSuccess, onError}) {
114
115
  USPAPI_VERSION,
115
116
  callbackHandler.consentDataCallback
116
117
  );
118
+ uspapiFunction(
119
+ 'registerDeletion',
120
+ USPAPI_VERSION,
121
+ adapterManager.callDataDeletionRequest
122
+ )
117
123
  } else {
118
124
  logInfo(
119
125
  'Detected USP CMP is outside the current iframe where Prebid.js is located, calling it now...'
@@ -123,12 +129,17 @@ function lookupUspConsent({onSuccess, onError}) {
123
129
  uspapiFrame,
124
130
  callbackHandler.consentDataCallback
125
131
  );
132
+ callUspApiWhileInIframe(
133
+ 'registerDeletion',
134
+ uspapiFrame,
135
+ adapterManager.callDataDeletionRequest
136
+ );
126
137
  }
127
138
 
139
+ let listening = false;
140
+
128
141
  function callUspApiWhileInIframe(commandName, uspapiFrame, moduleCallback) {
129
- /* Setup up a __uspapi function to do the postMessage and stash the callback.
130
- This function behaves, from the caller's perspective, identicially to the in-frame __uspapi call (although it is not synchronous) */
131
- window.__uspapi = function (cmd, ver, callback) {
142
+ function callUsp(cmd, ver, callback) {
132
143
  let callId = Math.random() + '';
133
144
  let msg = {
134
145
  __uspapiCall: {
@@ -143,10 +154,13 @@ function lookupUspConsent({onSuccess, onError}) {
143
154
  };
144
155
 
145
156
  /** when we get the return message, call the stashed callback */
146
- window.addEventListener('message', readPostMessageResponse, false);
157
+ if (!listening) {
158
+ window.addEventListener('message', readPostMessageResponse, false);
159
+ listening = true;
160
+ }
147
161
 
148
162
  // call uspapi
149
- window.__uspapi(commandName, USPAPI_VERSION, moduleCallback);
163
+ callUsp(commandName, USPAPI_VERSION, moduleCallback);
150
164
 
151
165
  function readPostMessageResponse(event) {
152
166
  const res = event && event.data && event.data.__uspapiReturn;
@@ -308,3 +322,11 @@ function enableConsentManagement(configFromUser = false) {
308
322
  config.getConfig('consentManagement', config => setConsentConfig(config.consentManagement));
309
323
 
310
324
  getHook('requestBids').before(requestBidsHook, 50);
325
+
326
+ export function setOrtbUsp(ortbRequest, bidderRequest) {
327
+ if (bidderRequest.uspConsent) {
328
+ deepSetValue(ortbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
329
+ }
330
+ }
331
+
332
+ registerOrtbProcessor({type: REQUEST, name: 'usp', fn: setOrtbUsp});
@@ -27,7 +27,7 @@ const LOG_PREFIX = 'Criteo: ';
27
27
  Unminified source code can be found in the privately shared repo: https://github.com/Prebid-org/prebid-js-external-js-criteo/blob/master/dist/prod.js
28
28
  */
29
29
  const FAST_BID_VERSION_PLACEHOLDER = '%FAST_BID_VERSION%';
30
- export const FAST_BID_VERSION_CURRENT = 130;
30
+ export const FAST_BID_VERSION_CURRENT = 132;
31
31
  const FAST_BID_VERSION_LATEST = 'latest';
32
32
  const FAST_BID_VERSION_NONE = 'none';
33
33
  const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
@@ -644,26 +644,46 @@ for (var i = 0; i < 10; ++i) {
644
644
  </script>`;
645
645
  }
646
646
 
647
+ function pickAvailableGetFloorFunc(bidRequest) {
648
+ if (bidRequest.getFloor) {
649
+ return bidRequest.getFloor;
650
+ }
651
+ if (bidRequest.params.bidFloor && bidRequest.params.bidFloorCur) {
652
+ try {
653
+ const floor = parseFloat(bidRequest.params.bidFloor);
654
+ return () => {
655
+ return {
656
+ currency: bidRequest.params.bidFloorCur,
657
+ floor: floor
658
+ };
659
+ };
660
+ } catch { }
661
+ }
662
+ return undefined;
663
+ }
664
+
647
665
  function enrichSlotWithFloors(slot, bidRequest) {
648
666
  try {
649
667
  const slotFloors = {};
650
668
 
651
- if (bidRequest.getFloor) {
669
+ const getFloor = pickAvailableGetFloorFunc(bidRequest);
670
+
671
+ if (getFloor) {
652
672
  if (bidRequest.mediaTypes?.banner) {
653
673
  slotFloors.banner = {};
654
674
  const bannerSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.banner.sizes'))
655
- bannerSizes.forEach(bannerSize => slotFloors.banner[parseSize(bannerSize).toString()] = bidRequest.getFloor({ size: bannerSize, mediaType: BANNER }));
675
+ bannerSizes.forEach(bannerSize => slotFloors.banner[parseSize(bannerSize).toString()] = getFloor({ size: bannerSize, mediaType: BANNER }));
656
676
  }
657
677
 
658
678
  if (bidRequest.mediaTypes?.video) {
659
679
  slotFloors.video = {};
660
680
  const videoSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'))
661
- videoSizes.forEach(videoSize => slotFloors.video[parseSize(videoSize).toString()] = bidRequest.getFloor({ size: videoSize, mediaType: VIDEO }));
681
+ videoSizes.forEach(videoSize => slotFloors.video[parseSize(videoSize).toString()] = getFloor({ size: videoSize, mediaType: VIDEO }));
662
682
  }
663
683
 
664
684
  if (bidRequest.mediaTypes?.native) {
665
685
  slotFloors.native = {};
666
- slotFloors.native['*'] = bidRequest.getFloor({ size: '*', mediaType: NATIVE });
686
+ slotFloors.native['*'] = getFloor({ size: '*', mediaType: NATIVE });
667
687
  }
668
688
 
669
689
  if (Object.keys(slotFloors).length > 0) {
@@ -5,6 +5,7 @@ import {ajax} from '../src/ajax.js';
5
5
  import {config} from '../src/config.js';
6
6
  import {getHook} from '../src/hook.js';
7
7
  import {defer} from '../src/utils/promise.js';
8
+ import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
8
9
  import {timedBidResponseHook} from '../src/utils/perfMetrics.js';
9
10
 
10
11
  const DEFAULT_CURRENCY_RATE_URL = 'https://cdn.jsdelivr.net/gh/prebid/currency-file@1/latest.json?date=$$TODAY$$';
@@ -314,3 +315,11 @@ function roundFloat(num, dec) {
314
315
  }
315
316
  return Math.round(num * d) / d;
316
317
  }
318
+
319
+ export function setOrtbCurrency(ortbRequest, bidderRequest, context) {
320
+ if (currencySupportEnabled) {
321
+ ortbRequest.cur = ortbRequest.cur || [context.currency || adServerCurrency];
322
+ }
323
+ }
324
+
325
+ registerOrtbProcessor({type: REQUEST, name: 'currency', fn: setOrtbCurrency});
@@ -41,7 +41,7 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
41
41
  } else {
42
42
  logMessage('[dgkeyword sub module] dgkeyword targets:', setKeywordTargetBidders);
43
43
  logMessage('[dgkeyword sub module] get targets from profile api start.');
44
- ajax(getProfileApiUrl(moduleConfig?.params?.url, moduleConfig?.params?.disableReadFpid), {
44
+ ajax(getProfileApiUrl(moduleConfig?.params?.url, moduleConfig?.params?.enableReadFpid), {
45
45
  success: function(response) {
46
46
  const res = JSON.parse(response);
47
47
  if (!isFinish) {
@@ -96,9 +96,9 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
96
96
  }
97
97
  }
98
98
 
99
- export function getProfileApiUrl(customeUrl, disableReadFpid) {
99
+ export function getProfileApiUrl(customeUrl, enableReadFpid) {
100
100
  const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1';
101
- const fpid = (disableReadFpid) ? '' : readFpidFromLocalStrage();
101
+ const fpid = (enableReadFpid) ? readFpidFromLocalStrage() : '';
102
102
  let url = customeUrl || URL;
103
103
  url = url + '?url=' + encodeURIComponent(window.location.href) + ((fpid) ? `&fpid=${fpid}` : '');
104
104
  return url;
@@ -34,8 +34,6 @@ const LOG_ERROR_MESS = {
34
34
  hasNoArrayOfBids: 'Seatbid from response has no array of bid objects - '
35
35
  };
36
36
 
37
- const VIDEO_KEYS = ['mimes', 'protocols', 'startdelay', 'placement', 'linearity', 'skip', 'skipmin', 'skipafter', 'sequence', 'battr', 'maxextended', 'minbitrate', 'maxbitrate', 'boxingallowed', 'playbackmethod', 'playbackend', 'delivery', 'pos', 'companionad', 'api', 'companiontype'];
38
-
39
37
  export const spec = {
40
38
  code: BIDDER_CODE,
41
39
  supportedMediaTypes: [ VIDEO ],
@@ -105,7 +103,7 @@ export const spec = {
105
103
  const impObj = {
106
104
  id: bidId.toString(),
107
105
  tagid: secid.toString(),
108
- video: createVideoForImp(video, sizes, mediaTypes && mediaTypes.video),
106
+ video: createVideoForImp(mergeDeep({}, video, mediaTypes && mediaTypes.video), sizes),
109
107
  ext: {
110
108
  divid: adUnitCode.toString()
111
109
  }
@@ -386,13 +384,7 @@ function createRenderer (bid, rendererParams) {
386
384
  return renderer;
387
385
  }
388
386
 
389
- function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes, bidVideo = {}) {
390
- VIDEO_KEYS.forEach((key) => {
391
- if (!(key in paramsVideo) && key in bidVideo) {
392
- paramsVideo[key] = bidVideo[key];
393
- }
394
- });
395
-
387
+ function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes) {
396
388
  if (size && isStr(size)) {
397
389
  const sizeArray = size.split('x');
398
390
  if (sizeArray.length === 2 && parseInt(sizeArray[0]) && parseInt(sizeArray[1])) {
@@ -402,7 +394,7 @@ function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes, bidVi
402
394
  }
403
395
 
404
396
  if (!paramsVideo.w || !paramsVideo.h) {
405
- const playerSizes = bidVideo.playerSize && bidVideo.playerSize.length === 2 ? bidVideo.playerSize : bidSizes;
397
+ const playerSizes = paramsVideo.playerSize && paramsVideo.playerSize.length === 2 ? paramsVideo.playerSize : bidSizes;
406
398
  if (playerSizes) {
407
399
  const playerSize = playerSizes[0];
408
400
  if (playerSize) {
@@ -411,9 +403,13 @@ function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes, bidVi
411
403
  }
412
404
  }
413
405
 
414
- const durationRangeSec = bidVideo.durationRangeSec || [];
415
- const minDur = mind || durationRangeSec[0] || bidVideo.minduration;
416
- const maxDur = maxd || durationRangeSec[1] || bidVideo.maxduration;
406
+ if (paramsVideo.playerSize) {
407
+ delete paramsVideo.playerSize;
408
+ }
409
+
410
+ const durationRangeSec = paramsVideo.durationRangeSec || [];
411
+ const minDur = mind || durationRangeSec[0] || paramsVideo.minduration;
412
+ const maxDur = maxd || durationRangeSec[1] || paramsVideo.maxduration;
417
413
 
418
414
  if (minDur) {
419
415
  paramsVideo.minduration = minDur;
@@ -10,7 +10,7 @@ import {ajax} from '../src/ajax.js';
10
10
  import { submodule } from '../src/hook.js'
11
11
  import { getStorageManager } from '../src/storageManager.js';
12
12
 
13
- const GCID_EXPIRY = 45;
13
+ const GCID_EXPIRY = 7;
14
14
  const MODULE_NAME = 'growthCodeId';
15
15
  const GC_DATA_KEY = '_gc_data';
16
16
  const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb?'
@@ -24,11 +24,15 @@ export const storage = getStorageManager({ gvlid: undefined, moduleName: MODULE_
24
24
  */
25
25
  export function readData(key) {
26
26
  try {
27
+ let payload
28
+ if (storage.cookiesAreEnabled()) {
29
+ payload = tryParse(storage.getCookie(key))
30
+ }
27
31
  if (storage.hasLocalStorage()) {
28
- return storage.getDataFromLocalStorage(key);
32
+ payload = tryParse(storage.getDataFromLocalStorage(key))
29
33
  }
30
- if (storage.cookiesAreEnabled()) {
31
- return storage.getCookie(key);
34
+ if ((payload.expire_at !== undefined) && (payload.expire_at > (Date.now() / 1000))) {
35
+ return payload
32
36
  }
33
37
  } catch (error) {
34
38
  logError(error);
@@ -122,7 +126,7 @@ export const growthCodeIdSubmodule = {
122
126
  }
123
127
 
124
128
  const resp = function(callback) {
125
- let gcData = tryParse(readData(GC_DATA_KEY));
129
+ let gcData = readData(GC_DATA_KEY);
126
130
  if (gcData) {
127
131
  callback(gcData);
128
132
  } else {
@@ -294,6 +294,7 @@ function buildRequests(validBidRequests, bidderRequest) {
294
294
  const gdprConsent = bidderRequest && bidderRequest.gdprConsent;
295
295
  const uspConsent = bidderRequest && bidderRequest.uspConsent;
296
296
  const timeout = config.getConfig('bidderTimeout');
297
+ const coppa = config.getConfig('coppa') === true ? 1 : 0;
297
298
  const topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page;
298
299
  _each(validBidRequests, bidRequest => {
299
300
  const {
@@ -386,6 +387,9 @@ function buildRequests(validBidRequests, bidderRequest) {
386
387
  if (uspConsent) {
387
388
  data.uspConsent = uspConsent;
388
389
  }
390
+ if (coppa) {
391
+ data.coppa = coppa;
392
+ }
389
393
  if (schain && schain.nodes) {
390
394
  data.schain = _serializeSupplyChainObj(schain);
391
395
  }