prebid.js 7.18.0 → 7.20.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 (313) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adWMGAnalyticsAdapter.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adfBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  10. package/dist/adkernelBidAdapter.js +1 -1
  11. package/dist/adlooxAdServerVideo.js +1 -1
  12. package/dist/adlooxAnalyticsAdapter.js +1 -1
  13. package/dist/adlooxRtdProvider.js +1 -1
  14. package/dist/adomikAnalyticsAdapter.js +1 -1
  15. package/dist/adqueryIdSystem.js +1 -1
  16. package/dist/adrelevantisBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgAnalyticsAdapter.js +1 -1
  19. package/dist/adxcgBidAdapter.js +1 -1
  20. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  21. package/dist/ajaBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/aolBidAdapter.js +1 -1
  25. package/dist/appierAnalyticsAdapter.js +1 -1
  26. package/dist/appnexusBidAdapter.js +1 -1
  27. package/dist/asoBidAdapter.js +1 -1
  28. package/dist/atsAnalyticsAdapter.js +1 -1
  29. package/dist/axonixBidAdapter.js +1 -1
  30. package/dist/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +1 -1
  31. package/dist/bidViewability.js +1 -1
  32. package/dist/bidglassBidAdapter.js +1 -1
  33. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  34. package/dist/big-richmediaBidAdapter.js +1 -1
  35. package/dist/bridgewellBidAdapter.js +1 -1
  36. package/dist/brightMountainMediaBidAdapter.js +1 -1
  37. package/dist/byDataAnalyticsAdapter.js +1 -1
  38. package/dist/carodaBidAdapter.js +1 -1
  39. package/dist/categoryTranslation.js +1 -1
  40. package/dist/cleanioRtdProvider.js +1 -1
  41. package/dist/colossussspBidAdapter.js +1 -1
  42. package/dist/concertAnalyticsAdapter.js +1 -1
  43. package/dist/concertBidAdapter.js +1 -1
  44. package/dist/connectIdSystem.js +1 -1
  45. package/dist/connectadBidAdapter.js +1 -1
  46. package/dist/consentManagement.js +1 -1
  47. package/dist/consentManagementUsp.js +1 -1
  48. package/dist/consumableBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -0
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/currency.js +1 -1
  54. package/dist/datablocksAnalyticsAdapter.js +1 -1
  55. package/dist/dchain.js +1 -1
  56. package/dist/debugging-standalone.js +1 -1
  57. package/dist/debugging.js +1 -1
  58. package/dist/dependencies.json +9 -0
  59. package/dist/dfpAdServerVideo.js +1 -1
  60. package/dist/dgkeywordRtdProvider.js +1 -1
  61. package/dist/dianomiBidAdapter.js +1 -1
  62. package/dist/dspxBidAdapter.js +1 -1
  63. package/dist/enrichmentFpdModule.js +1 -1
  64. package/dist/eplanningAnalyticsAdapter.js +1 -1
  65. package/dist/eplanningBidAdapter.js +1 -1
  66. package/dist/finativeBidAdapter.js +1 -1
  67. package/dist/fintezaAnalyticsAdapter.js +1 -1
  68. package/dist/fpd.js +1 -0
  69. package/dist/ftrackIdSystem.js +1 -1
  70. package/dist/gdprEnforcement.js +1 -1
  71. package/dist/glimpseBidAdapter.js +1 -1
  72. package/dist/gmosspBidAdapter.js +1 -1
  73. package/dist/goldbachBidAdapter.js +1 -1
  74. package/dist/googleAnalyticsAdapter.js +1 -1
  75. package/dist/gridBidAdapter.js +1 -1
  76. package/dist/gridNMBidAdapter.js +1 -1
  77. package/dist/gumgumBidAdapter.js +1 -1
  78. package/dist/h12mediaBidAdapter.js +1 -1
  79. package/dist/hadronAnalyticsAdapter.js +1 -1
  80. package/dist/id5AnalyticsAdapter.js +1 -1
  81. package/dist/id5IdSystem.js +1 -1
  82. package/dist/improvedigitalBidAdapter.js +1 -1
  83. package/dist/inmarBidAdapter.js +1 -1
  84. package/dist/insticatorBidAdapter.js +1 -1
  85. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  86. package/dist/ixBidAdapter.js +1 -1
  87. package/dist/justpremiumBidAdapter.js +1 -1
  88. package/dist/kargoAnalyticsAdapter.js +1 -1
  89. package/dist/kinessoIdSystem.js +1 -1
  90. package/dist/konduitAnalyticsAdapter.js +1 -1
  91. package/dist/kueezBidAdapter.js +1 -1
  92. package/dist/lassoBidAdapter.js +1 -1
  93. package/dist/lifestreetBidAdapter.js +1 -1
  94. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  95. package/dist/liveIntentIdSystem.js +1 -1
  96. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  97. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  98. package/dist/logicadBidAdapter.js +1 -1
  99. package/dist/loglyliftBidAdapter.js +1 -1
  100. package/dist/lotamePanoramaIdSystem.js +1 -1
  101. package/dist/magniteAnalyticsAdapter.js +1 -0
  102. package/dist/malltvAnalyticsAdapter.js +1 -1
  103. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  104. package/dist/marsmediaBidAdapter.js +1 -1
  105. package/dist/mass.js +1 -1
  106. package/dist/mediafuseBidAdapter.js +1 -1
  107. package/dist/mediakeysBidAdapter.js +1 -1
  108. package/dist/medianetAnalyticsAdapter.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/multibid.js +1 -1
  113. package/dist/nativoBidAdapter.js +1 -1
  114. package/dist/not-for-prod/prebid.js +198 -194
  115. package/dist/oguryBidAdapter.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/openxAnalyticsAdapter.js +1 -1
  119. package/dist/optimonAnalyticsAdapter.js +1 -1
  120. package/dist/outbrainBidAdapter.js +1 -1
  121. package/dist/parrableIdSystem.js +1 -1
  122. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  123. package/dist/pixfutureBidAdapter.js +1 -1
  124. package/dist/prebid-core.js +2 -2
  125. package/dist/prebidServerBidAdapter.js +1 -1
  126. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  127. package/dist/priceFloors.js +1 -1
  128. package/dist/publinkIdSystem.js +1 -1
  129. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  130. package/dist/pubmaticBidAdapter.js +1 -1
  131. package/dist/pubperfAnalyticsAdapter.js +1 -1
  132. package/dist/pubstackAnalyticsAdapter.js +1 -1
  133. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  134. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  135. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/quantcastBidAdapter.js +1 -1
  138. package/dist/quantcastIdSystem.js +1 -1
  139. package/dist/readpeakBidAdapter.js +1 -1
  140. package/dist/realvuAnalyticsAdapter.js +1 -1
  141. package/dist/relaidoBidAdapter.js +1 -1
  142. package/dist/relevantAnalyticsAdapter.js +1 -1
  143. package/dist/rhythmoneBidAdapter.js +1 -1
  144. package/dist/riseBidAdapter.js +1 -1
  145. package/dist/rivrAnalyticsAdapter.js +1 -1
  146. package/dist/roxotAnalyticsAdapter.js +1 -1
  147. package/dist/rtdModule.js +1 -1
  148. package/dist/rubiconAnalyticsAdapter.js +1 -1
  149. package/dist/rubiconBidAdapter.js +1 -1
  150. package/dist/s2sTesting.js +1 -1
  151. package/dist/scaleableAnalyticsAdapter.js +1 -1
  152. package/dist/schain.js +1 -1
  153. package/dist/seedingAllianceBidAdapter.js +1 -1
  154. package/dist/seedtagBidAdapter.js +1 -1
  155. package/dist/sharedIdSystem.js +1 -1
  156. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  157. package/dist/sharethroughBidAdapter.js +1 -1
  158. package/dist/shinezBidAdapter.js +1 -1
  159. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  160. package/dist/smaatoBidAdapter.js +1 -1
  161. package/dist/smartadserverBidAdapter.js +1 -1
  162. package/dist/smartxBidAdapter.js +1 -1
  163. package/dist/smilewantedBidAdapter.js +1 -1
  164. package/dist/sonobiAnalyticsAdapter.js +1 -1
  165. package/dist/sonobiBidAdapter.js +1 -1
  166. package/dist/sovrnAnalyticsAdapter.js +1 -1
  167. package/dist/sovrnBidAdapter.js +1 -1
  168. package/dist/sspBCBidAdapter.js +1 -1
  169. package/dist/staqAnalyticsAdapter.js +1 -1
  170. package/dist/sublimeBidAdapter.js +1 -1
  171. package/dist/synacormediaBidAdapter.js +1 -1
  172. package/dist/taboolaBidAdapter.js +1 -1
  173. package/dist/tapadIdSystem.js +1 -1
  174. package/dist/targetVideoBidAdapter.js +1 -1
  175. package/dist/teadsBidAdapter.js +1 -1
  176. package/dist/teadsIdSystem.js +1 -0
  177. package/dist/terceptAnalyticsAdapter.js +1 -1
  178. package/dist/trionBidAdapter.js +1 -1
  179. package/dist/tripleliftBidAdapter.js +1 -1
  180. package/dist/ttdBidAdapter.js +1 -1
  181. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  182. package/dist/underdogmediaBidAdapter.js +1 -1
  183. package/dist/undertoneBidAdapter.js +1 -1
  184. package/dist/userId.js +1 -1
  185. package/dist/vidazooBidAdapter.js +1 -1
  186. package/dist/videobyteBidAdapter.js +1 -1
  187. package/dist/visxBidAdapter.js +1 -1
  188. package/dist/vrtcalBidAdapter.js +1 -1
  189. package/dist/vuukleBidAdapter.js +1 -1
  190. package/dist/weboramaRtdProvider.js +1 -1
  191. package/dist/widespaceBidAdapter.js +1 -1
  192. package/dist/winrBidAdapter.js +1 -1
  193. package/dist/yahoosspBidAdapter.js +1 -1
  194. package/dist/yandexBidAdapter.js +1 -1
  195. package/dist/yieldmoBidAdapter.js +1 -1
  196. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  197. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  198. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  199. package/libraries/fpd/sua.js +98 -0
  200. package/modules/.submodules.json +1 -0
  201. package/modules/adfBidAdapter.js +1 -1
  202. package/modules/adkernelAdnBidAdapter.js +1 -0
  203. package/modules/adkernelBidAdapter.js +2 -2
  204. package/modules/adqueryIdSystem.js +8 -8
  205. package/modules/adxcgBidAdapter.js +1 -1
  206. package/modules/amxBidAdapter.js +1 -1
  207. package/modules/aolBidAdapter.js +25 -2
  208. package/modules/appnexusBidAdapter.js +19 -2
  209. package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
  210. package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
  211. package/modules/categoryTranslation.js +4 -4
  212. package/modules/cleanioRtdProvider.js +3 -4
  213. package/modules/colossussspBidAdapter.js +2 -1
  214. package/modules/connectIdSystem.js +16 -1
  215. package/modules/conversantAnalyticsAdapter.js +560 -0
  216. package/modules/conversantAnalyticsAdapter.md +47 -0
  217. package/modules/criteoBidAdapter.js +1 -1
  218. package/modules/currency.js +11 -11
  219. package/modules/dchain.js +2 -2
  220. package/modules/debugging/bidInterceptor.js +2 -2
  221. package/modules/debugging/debugging.js +10 -2
  222. package/modules/debugging/legacy.js +2 -2
  223. package/modules/dgkeywordRtdProvider.js +21 -3
  224. package/modules/dianomiBidAdapter.js +1 -1
  225. package/modules/enrichmentFpdModule.js +33 -14
  226. package/modules/eplanningBidAdapter.js +48 -2
  227. package/modules/finativeBidAdapter.js +1 -1
  228. package/modules/gridBidAdapter.js +187 -117
  229. package/modules/improvedigitalBidAdapter.js +2 -2
  230. package/modules/ixBidAdapter.js +94 -23
  231. package/modules/liveIntentIdSystem.js +39 -5
  232. package/modules/lotamePanoramaIdSystem.js +10 -6
  233. package/modules/magniteAnalyticsAdapter.js +902 -0
  234. package/modules/magniteAnalyticsAdapter.md +18 -0
  235. package/modules/mass.js +2 -2
  236. package/modules/mediakeysBidAdapter.js +6 -1
  237. package/modules/mediakeysBidAdapter.md +50 -40
  238. package/modules/multibid/index.js +5 -5
  239. package/modules/nativoBidAdapter.js +1 -1
  240. package/modules/pixfutureBidAdapter.js +46 -15
  241. package/modules/prebidServerBidAdapter/index.js +54 -19
  242. package/modules/priceFloors.js +8 -22
  243. package/modules/readpeakBidAdapter.js +1 -1
  244. package/modules/rubiconAnalyticsAdapter.js +14 -9
  245. package/modules/rubiconBidAdapter.js +2 -3
  246. package/modules/seedingAllianceBidAdapter.js +1 -1
  247. package/modules/sharethroughBidAdapter.js +1 -1
  248. package/modules/taboolaBidAdapter.js +5 -5
  249. package/modules/talkadsBidAdapter.js +1 -0
  250. package/modules/teadsIdSystem.js +234 -0
  251. package/modules/teadsIdSystem.md +22 -0
  252. package/modules/truereachBidAdapter.js +1 -0
  253. package/modules/ttdBidAdapter.js +1 -1
  254. package/modules/userId/index.js +21 -14
  255. package/modules/vrtcalBidAdapter.js +7 -1
  256. package/modules/vuukleBidAdapter.js +34 -3
  257. package/modules/yahoosspBidAdapter.js +4 -2
  258. package/modules/yandexBidAdapter.js +31 -8
  259. package/package.json +2 -2
  260. package/src/adapterManager.js +2 -4
  261. package/src/adapters/bidderFactory.js +13 -11
  262. package/src/auction.js +140 -69
  263. package/src/constants.json +8 -0
  264. package/src/cpmBucketManager.js +22 -3
  265. package/src/native.js +1 -5
  266. package/src/prebid.js +5 -6
  267. package/src/targeting.js +31 -14
  268. package/test/fixtures/fixtures.js +2 -1
  269. package/test/spec/auctionmanager_spec.js +109 -21
  270. package/test/spec/cpmBucketManager_spec.js +239 -177
  271. package/test/spec/fpd/sua_spec.js +244 -0
  272. package/test/spec/modules/adfBidAdapter_spec.js +2 -3
  273. package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
  274. package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
  275. package/test/spec/modules/amxBidAdapter_spec.js +3 -2
  276. package/test/spec/modules/aolBidAdapter_spec.js +42 -9
  277. package/test/spec/modules/appnexusBidAdapter_spec.js +24 -0
  278. package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
  279. package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
  280. package/test/spec/modules/connectIdSystem_spec.js +20 -0
  281. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
  282. package/test/spec/modules/currency_spec.js +14 -6
  283. package/test/spec/modules/debugging_mod_spec.js +9 -0
  284. package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
  285. package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
  286. package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
  287. package/test/spec/modules/eplanningBidAdapter_spec.js +285 -1
  288. package/test/spec/modules/fpdModule_spec.js +9 -0
  289. package/test/spec/modules/gridBidAdapter_spec.js +87 -31
  290. package/test/spec/modules/ixBidAdapter_spec.js +221 -2
  291. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
  292. package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
  293. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +0 -1
  294. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +1942 -0
  295. package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
  296. package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
  297. package/test/spec/modules/prebidServerBidAdapter_spec.js +202 -15
  298. package/test/spec/modules/priceFloors_spec.js +5 -5
  299. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +2 -3
  300. package/test/spec/modules/seedtagBidAdapter_spec.js +15 -18
  301. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  302. package/test/spec/modules/taboolaBidAdapter_spec.js +112 -13
  303. package/test/spec/modules/teadsIdSystem_spec.js +271 -0
  304. package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
  305. package/test/spec/modules/userId_spec.js +39 -4
  306. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -1
  307. package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
  308. package/test/spec/modules/yahoosspBidAdapter_spec.js +48 -1
  309. package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
  310. package/test/spec/native_spec.js +5 -0
  311. package/test/spec/unit/core/bidderFactory_spec.js +66 -11
  312. package/test/spec/unit/core/targeting_spec.js +28 -9
  313. package/test/spec/unit/pbjs_api_spec.js +48 -2
@@ -126,7 +126,7 @@ Object.assign(BidInterceptor.prototype, {
126
126
  Object.entries(ref).forEach(([key, val]) => {
127
127
  if (typeof val === 'function') {
128
128
  result[key] = val(...args);
129
- } else if (typeof val === 'object') {
129
+ } else if (val != null && typeof val === 'object') {
130
130
  result[key] = replFn({args, ref: val})
131
131
  } else {
132
132
  result[key] = val;
@@ -138,7 +138,7 @@ Object.assign(BidInterceptor.prototype, {
138
138
  return (bid, ...args) => {
139
139
  const response = this.responseDefaults(bid);
140
140
  mergeDeep(response, replFn({args: [bid, ...args]}));
141
- if (!response.ad) {
141
+ if (!response.hasOwnProperty('ad') && !response.hasOwnProperty('adUrl')) {
142
142
  response.ad = this.defaultAd(bid, response);
143
143
  }
144
144
  response.isDebug = true;
@@ -49,9 +49,17 @@ function saveDebuggingConfig(debugConfig, {sessionStorage = window.sessionStorag
49
49
  }
50
50
  }
51
51
 
52
- export function getConfig(debugging, {sessionStorage = window.sessionStorage, DEBUG_KEY, config, hook, logger} = {}) {
52
+ export function getConfig(debugging, {getStorage = () => window.sessionStorage, DEBUG_KEY, config, hook, logger} = {}) {
53
53
  if (debugging == null) return;
54
- saveDebuggingConfig(debugging, {sessionStorage, DEBUG_KEY});
54
+ let sessionStorage;
55
+ try {
56
+ sessionStorage = getStorage();
57
+ } catch (e) {
58
+ logger.logError(`sessionStorage is not available: debugging configuration will not persist on page reload`, e);
59
+ }
60
+ if (sessionStorage != null) {
61
+ saveDebuggingConfig(debugging, {sessionStorage, DEBUG_KEY});
62
+ }
55
63
  if (!debugging.enabled) {
56
64
  disableDebugging({hook, logger});
57
65
  } else {
@@ -54,7 +54,7 @@ export function applyBidOverrides(overrideObj, bidObj, bidType, logger) {
54
54
  }, bidObj);
55
55
  }
56
56
 
57
- export function addBidResponseHook(next, adUnitCode, bid) {
57
+ export function addBidResponseHook(next, adUnitCode, bid, reject) {
58
58
  const {overrides, logger} = this;
59
59
 
60
60
  if (bidderExcluded(overrides.bidders, bid.bidderCode)) {
@@ -70,7 +70,7 @@ export function addBidResponseHook(next, adUnitCode, bid) {
70
70
  });
71
71
  }
72
72
 
73
- next(adUnitCode, bid);
73
+ next(adUnitCode, bid, reject);
74
74
  }
75
75
 
76
76
  export function addBidderRequestsHook(next, bidderRequests) {
@@ -20,10 +20,8 @@ import { getGlobal } from '../src/prebidGlobal.js';
20
20
  * @param {Object} userConsent
21
21
  */
22
22
  export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, userConsent) {
23
- const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1?url=';
24
23
  const PROFILE_TIMEOUT_MS = 1000;
25
24
  const timeout = (moduleConfig && moduleConfig.params && moduleConfig.params.timeout && Number(moduleConfig.params.timeout) > 0) ? Number(moduleConfig.params.timeout) : PROFILE_TIMEOUT_MS;
26
- const url = (moduleConfig && moduleConfig.params && moduleConfig.params.url) ? moduleConfig.params.url : URL + encodeURIComponent(window.location.href);
27
25
  const adUnits = reqBidsConfigObj.adUnits || getGlobal().adUnits;
28
26
  callback = (function(cb) {
29
27
  let done = false;
@@ -43,7 +41,7 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
43
41
  } else {
44
42
  logMessage('[dgkeyword sub module] dgkeyword targets:', setKeywordTargetBidders);
45
43
  logMessage('[dgkeyword sub module] get targets from profile api start.');
46
- ajax(url, {
44
+ ajax(getProfileApiUrl(moduleConfig?.params?.url, moduleConfig?.params?.disableReadFpid), {
47
45
  success: function(response) {
48
46
  const res = JSON.parse(response);
49
47
  if (!isFinish) {
@@ -98,6 +96,26 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
98
96
  }
99
97
  }
100
98
 
99
+ export function getProfileApiUrl(customeUrl, disableReadFpid) {
100
+ const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1';
101
+ const fpid = (disableReadFpid) ? '' : readFpidFromLocalStrage();
102
+ let url = customeUrl || URL;
103
+ url = url + '?url=' + encodeURIComponent(window.location.href) + ((fpid) ? `&fpid=${fpid}` : '');
104
+ return url;
105
+ }
106
+
107
+ export function readFpidFromLocalStrage() {
108
+ try {
109
+ const fpid = window.localStorage.getItem('ope_fpid');
110
+ if (fpid) {
111
+ return fpid;
112
+ }
113
+ return null;
114
+ } catch (error) {
115
+ return null;
116
+ }
117
+ }
118
+
101
119
  /**
102
120
  * get all bidder which hava {dgkeyword: true} in params
103
121
  * @param {Object} adUnits
@@ -112,7 +112,7 @@ export const spec = {
112
112
  setOnAny(validBidRequests, 'params.pt') ||
113
113
  setOnAny(validBidRequests, 'params.priceType') ||
114
114
  'net';
115
- const tid = validBidRequests[0].transactionId;
115
+ const tid = bidderRequest.auctionId;
116
116
  const currency = getConfig('currency.adServerCurrency');
117
117
  const cur = currency && [currency];
118
118
  const eids = setOnAny(validBidRequests, 'userIdAsEids');
@@ -7,11 +7,15 @@ import { timestamp, mergeDeep } from '../src/utils.js';
7
7
  import { submodule } from '../src/hook.js';
8
8
  import {getRefererInfo, parseDomain} from '../src/refererDetection.js';
9
9
  import { getCoreStorageManager } from '../src/storageManager.js';
10
+ import {GreedyPromise} from '../src/utils/promise.js';
11
+ import {getHighEntropySUA, getLowEntropySUA} from '../libraries/fpd/sua.js';
10
12
 
11
- let ortb2 = {};
13
+ let ortb2;
12
14
  let win = (window === window.top) ? window : window.top;
13
15
  export const coreStorage = getCoreStorageManager('enrichmentFpd');
14
16
 
17
+ export const sua = {he: getHighEntropySUA, le: getLowEntropySUA};
18
+
15
19
  /**
16
20
  * Find the root domain
17
21
  * @param {string|undefined} fullDomain
@@ -124,6 +128,17 @@ function setKeywords() {
124
128
  if (keywords && keywords.content) mergeDeep(ortb2, { site: { keywords: keywords.content.replace(/\s/g, '') } });
125
129
  }
126
130
 
131
+ function setDeviceSua(hints) {
132
+ let data = Array.isArray(hints) && hints.length === 0
133
+ ? GreedyPromise.resolve(sua.le())
134
+ : sua.he(hints);
135
+ return data.then((sua) => {
136
+ if (sua != null) {
137
+ mergeDeep(ortb2, {device: {sua}});
138
+ }
139
+ })
140
+ }
141
+
127
142
  /**
128
143
  * Checks the Global Privacy Control status, and if exists and is true, merges into regs.ext.gpc
129
144
  */
@@ -137,30 +152,34 @@ function setGpc() {
137
152
  /**
138
153
  * Resets modules global ortb2 data
139
154
  */
140
- const resetOrtb2 = () => { ortb2 = {} };
155
+ export const resetEnrichments = () => { ortb2 = null };
141
156
 
142
- function runEnrichments() {
157
+ function runEnrichments(fpdConf) {
143
158
  setReferer();
144
159
  setPage();
145
160
  setDomain();
146
161
  setDimensions();
147
162
  setKeywords();
148
163
  setGpc();
149
-
150
- return ortb2;
164
+ return setDeviceSua(fpdConf.uaHints).then(() => ortb2);
151
165
  }
152
166
 
153
- /**
154
- * Sets default values to ortb2 if exists and adds currency and ortb2 setConfig callbacks on init
155
- */
156
167
  export function processFpd(fpdConf, {global}) {
157
- resetOrtb2();
158
-
159
- return {
160
- global: (!fpdConf.skipEnrichments) ? mergeDeep(runEnrichments(), global) : global
161
- };
168
+ if (fpdConf.skipEnrichments) {
169
+ return {global};
170
+ } else {
171
+ let ready;
172
+ if (ortb2 == null) {
173
+ ortb2 = {};
174
+ ready = runEnrichments(fpdConf);
175
+ } else {
176
+ ready = GreedyPromise.resolve();
177
+ }
178
+ return ready.then(() => ({
179
+ global: mergeDeep({}, ortb2, global)
180
+ }))
181
+ }
162
182
  }
163
-
164
183
  /** @type {firstPartyDataSubmodule} */
165
184
  export const enrichmentsSubmodule = {
166
185
  name: 'enrichments',
@@ -2,6 +2,7 @@ import {getWindowSelf, isEmpty, parseSizesInput, isGptPubadsDefined, isSlotMatch
2
2
  import {getGlobal} from '../src/prebidGlobal.js';
3
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
4
  import {getStorageManager} from '../src/storageManager.js';
5
+ import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
6
 
6
7
  const BIDDER_CODE = 'eplanning';
7
8
  export const storage = getStorageManager({bidderCode: BIDDER_CODE});
@@ -19,9 +20,14 @@ const STORAGE_VIEW_PREFIX = 'pbvi_';
19
20
  const mobileUserAgent = isMobileUserAgent();
20
21
  const PRIORITY_ORDER_FOR_MOBILE_SIZES_ASC = ['1x1', '300x50', '320x50', '300x250'];
21
22
  const PRIORITY_ORDER_FOR_DESKTOP_SIZES_ASC = ['1x1', '970x90', '970x250', '160x600', '300x600', '728x90', '300x250'];
23
+ const VAST_INSTREAM = 1;
24
+ const VAST_OUTSTREAM = 2;
25
+ const VAST_VERSION_DEFAULT = 3;
26
+ const DEFAULT_SIZE_VAST = '640x480';
22
27
 
23
28
  export const spec = {
24
29
  code: BIDDER_CODE,
30
+ supportedMediaTypes: [BANNER, VIDEO],
25
31
 
26
32
  isBidRequestValid: function(bid) {
27
33
  return Boolean(bid.params.ci) || Boolean(bid.params.t);
@@ -86,6 +92,10 @@ export const spec = {
86
92
  params['e_' + id] = (typeof userIds[id] === 'object') ? encodeURIComponent(JSON.stringify(userIds[id])) : encodeURIComponent(userIds[id]);
87
93
  }
88
94
  }
95
+ if (spaces.impType) {
96
+ params.vctx = spaces.impType & VAST_INSTREAM ? VAST_INSTREAM : VAST_OUTSTREAM;
97
+ params.vv = VAST_VERSION_DEFAULT;
98
+ }
89
99
  }
90
100
 
91
101
  return {
@@ -108,7 +118,6 @@ export const spec = {
108
118
  cpm: ad.pr,
109
119
  width: ad.w,
110
120
  height: ad.h,
111
- ad: ad.adm,
112
121
  ttl: TTL,
113
122
  creativeId: ad.crid,
114
123
  netRevenue: NET_REVENUE,
@@ -119,6 +128,13 @@ export const spec = {
119
128
  advertiserDomains: ad.adom
120
129
  };
121
130
  }
131
+ if (isVastResponse(ad)) {
132
+ bidResponse.vastXml = ad.adm;
133
+ bidResponse.mediaTypes = VIDEO;
134
+ } else {
135
+ bidResponse.ad = ad.adm;
136
+ }
137
+
122
138
  bidResponses.push(bidResponse);
123
139
  });
124
140
  }
@@ -236,17 +252,42 @@ function getSpacesStruct(bids) {
236
252
  return e;
237
253
  }
238
254
 
255
+ function getFirstSizeVast(sizes) {
256
+ if (sizes == undefined || !Array.isArray(sizes)) {
257
+ return undefined;
258
+ }
259
+
260
+ let size = Array.isArray(sizes[0]) ? sizes[0] : sizes;
261
+
262
+ return (Array.isArray(size) && size.length == 2) ? size : undefined;
263
+ }
264
+
239
265
  function cleanName(name) {
240
266
  return name.replace(/_|\.|-|\//g, '').replace(/\)\(|\(|\)|:/g, '_').replace(/^_+|_+$/g, '');
241
267
  }
242
268
 
243
269
  function getSpaces(bidRequests, ml) {
270
+ let impType = bidRequests.reduce((previousBits, bid) => (bid.mediaTypes && bid.mediaTypes[VIDEO]) ? (bid.mediaTypes[VIDEO].context == 'outstream' ? (previousBits | 2) : (previousBits | 1)) : previousBits, 0);
271
+ // Only one type of auction is supported at a time
272
+ if (impType) {
273
+ bidRequests = bidRequests.filter((bid) => bid.mediaTypes && bid.mediaTypes[VIDEO] && (impType & VAST_INSTREAM ? (!bid.mediaTypes[VIDEO].context || bid.mediaTypes[VIDEO].context == 'instream') : (bid.mediaTypes[VIDEO].context == 'outstream')));
274
+ }
275
+
244
276
  let spacesStruct = getSpacesStruct(bidRequests);
245
- let es = {str: '', vs: '', map: {}};
277
+ let es = {str: '', vs: '', map: {}, impType: impType};
246
278
  es.str = Object.keys(spacesStruct).map(size => spacesStruct[size].map((bid, i) => {
247
279
  es.vs += getVs(bid);
248
280
 
249
281
  let name;
282
+
283
+ if (impType) {
284
+ let firstSize = getFirstSizeVast(bid.mediaTypes[VIDEO].playerSize);
285
+ let sizeVast = firstSize ? firstSize.join('x') : DEFAULT_SIZE_VAST;
286
+ name = 'video_' + sizeVast + '_' + i;
287
+ es.map[name] = bid.bidId;
288
+ return name + ':' + sizeVast + ';1';
289
+ }
290
+
250
291
  if (ml) {
251
292
  name = cleanName(bid.adUnitCode);
252
293
  } else {
@@ -462,4 +503,9 @@ function registerAuction(storageID) {
462
503
 
463
504
  return true;
464
505
  }
506
+
507
+ function isVastResponse(bid) {
508
+ return bid.adm.match(/^(<VAST)|(<VideoAdServingTemplate)/gmi);
509
+ }
510
+
465
511
  registerBidder(spec);
@@ -63,7 +63,7 @@ export const spec = {
63
63
  // convert Native ORTB definition to old-style prebid native definition
64
64
  validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
65
65
  const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net';
66
- const tid = validBidRequests[0].transactionId;
66
+ const tid = bidderRequest.auctionId;
67
67
  const cur = [config.getConfig('currency.adServerCurrency') || DEFAULT_CUR];
68
68
  let url = bidderRequest.refererInfo.referer;
69
69