prebid.js 8.43.0 → 8.45.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 (501) hide show
  1. package/README.md +7 -1
  2. package/creative/constants.js +7 -7
  3. package/creative/renderers/display/constants.js +2 -2
  4. package/creative/renderers/native/constants.js +2 -2
  5. package/dist/33acrossAnalyticsAdapter.js +1 -1
  6. package/dist/33acrossBidAdapter.js +1 -1
  7. package/dist/33acrossIdSystem.js +1 -1
  8. package/dist/BTBidAdapter.js +1 -1
  9. package/dist/adWMGAnalyticsAdapter.js +1 -1
  10. package/dist/adagioAnalyticsAdapter.js +1 -1
  11. package/dist/adagioBidAdapter.js +1 -1
  12. package/dist/adbookpspBidAdapter.js +1 -1
  13. package/dist/adgenerationBidAdapter.js +1 -1
  14. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  15. package/dist/adkernelBidAdapter.js +1 -1
  16. package/dist/adlooxAdServerVideo.js +1 -1
  17. package/dist/adlooxAnalyticsAdapter.js +1 -1
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/adnuntiusBidAdapter.js +1 -1
  20. package/dist/adomikAnalyticsAdapter.js +1 -1
  21. package/dist/adpod.js +1 -1
  22. package/dist/adqueryBidAdapter.js +1 -1
  23. package/dist/adrelevantisBidAdapter.js +1 -1
  24. package/dist/adstirBidAdapter.js +1 -1
  25. package/dist/adtrgtmeBidAdapter.js +1 -1
  26. package/dist/adxcgAnalyticsAdapter.js +1 -1
  27. package/dist/adxcgBidAdapter.js +1 -1
  28. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  29. package/dist/adyoulikeBidAdapter.js +1 -1
  30. package/dist/agmaAnalyticsAdapter.js +1 -1
  31. package/dist/ajaBidAdapter.js +1 -1
  32. package/dist/amxBidAdapter.js +1 -1
  33. package/dist/amxIdSystem.js +1 -1
  34. package/dist/analyticsAdapter.js +1 -1
  35. package/dist/appierAnalyticsAdapter.js +1 -1
  36. package/dist/appnexusBidAdapter.js +1 -1
  37. package/dist/asoBidAdapter.js +1 -1
  38. package/dist/asteriobidAnalyticsAdapter.js +1 -1
  39. package/dist/atsAnalyticsAdapter.js +1 -1
  40. package/dist/automatadAnalyticsAdapter.js +1 -1
  41. package/dist/axonixBidAdapter.js +1 -1
  42. package/dist/bidViewability.js +1 -1
  43. package/dist/bidViewabilityIO.js +1 -1
  44. package/dist/bidglassBidAdapter.js +1 -1
  45. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  46. package/dist/big-richmediaBidAdapter.js +1 -1
  47. package/dist/brandmetricsRtdProvider.js +1 -1
  48. package/dist/bridBidAdapter.js +1 -1
  49. package/dist/bridgewellBidAdapter.js +1 -1
  50. package/dist/brightMountainMediaBidAdapter.js +1 -1
  51. package/dist/browsiRtdProvider.js +1 -1
  52. package/dist/byDataAnalyticsAdapter.js +1 -1
  53. package/dist/carodaBidAdapter.js +1 -1
  54. package/dist/chtnwBidAdapter.js +1 -1
  55. package/dist/chunk-core.js +1 -1
  56. package/dist/chunk-paapi.js +1 -1
  57. package/dist/cleanioRtdProvider.js +1 -1
  58. package/dist/concertAnalyticsAdapter.js +1 -1
  59. package/dist/concertBidAdapter.js +1 -1
  60. package/dist/confiantRtdProvider.js +1 -1
  61. package/dist/connectadBidAdapter.js +1 -1
  62. package/dist/consentManagementUsp.js +1 -1
  63. package/dist/consumableBidAdapter.js +1 -1
  64. package/dist/conversantAnalyticsAdapter.js +1 -1
  65. package/dist/conversantBidAdapter.js +1 -1
  66. package/dist/craftBidAdapter.js +1 -1
  67. package/dist/creative-renderer-native.js +1 -1
  68. package/dist/criteoBidAdapter.js +1 -1
  69. package/dist/currency.js +1 -1
  70. package/dist/cwireBidAdapter.js +1 -1
  71. package/dist/dailymotionBidAdapter.js +1 -0
  72. package/dist/datablocksAnalyticsAdapter.js +1 -1
  73. package/dist/datawrkzBidAdapter.js +1 -1
  74. package/dist/debugging-standalone.js +1 -1
  75. package/dist/debugging.js +1 -1
  76. package/dist/dependencies.json +3 -3
  77. package/dist/dfpAdServerVideo.js +1 -1
  78. package/dist/discoveryBidAdapter.js +1 -1
  79. package/dist/dsaControl.js +1 -1
  80. package/dist/dspxBidAdapter.js +1 -1
  81. package/dist/dxkultureBidAdapter.js +1 -1
  82. package/dist/eplanningAnalyticsAdapter.js +1 -1
  83. package/dist/eplanningBidAdapter.js +1 -1
  84. package/dist/euidIdSystem.js +1 -1
  85. package/dist/feedadBidAdapter.js +1 -1
  86. package/dist/finativeBidAdapter.js +1 -1
  87. package/dist/fintezaAnalyticsAdapter.js +1 -1
  88. package/dist/freewheel-sspBidAdapter.js +1 -1
  89. package/dist/gdprEnforcement.js +1 -1
  90. package/dist/genericAnalyticsAdapter.js +1 -1
  91. package/dist/geoedgeRtdProvider.js +1 -1
  92. package/dist/gmosspBidAdapter.js +1 -1
  93. package/dist/goldbachBidAdapter.js +1 -1
  94. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  95. package/dist/greenbidsRtdProvider.js +1 -1
  96. package/dist/gridBidAdapter.js +1 -1
  97. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  98. package/dist/gumgumBidAdapter.js +1 -1
  99. package/dist/h12mediaBidAdapter.js +1 -1
  100. package/dist/hadronAnalyticsAdapter.js +1 -1
  101. package/dist/holidBidAdapter.js +1 -1
  102. package/dist/hypelabBidAdapter.js +1 -1
  103. package/dist/id5AnalyticsAdapter.js +1 -1
  104. package/dist/id5IdSystem.js +1 -1
  105. package/dist/illuminBidAdapter.js +1 -1
  106. package/dist/imdsBidAdapter.js +1 -1
  107. package/dist/improvedigitalBidAdapter.js +1 -1
  108. package/dist/insticatorBidAdapter.js +1 -1
  109. package/dist/instreamTracking.js +1 -1
  110. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  111. package/dist/ixBidAdapter.js +1 -1
  112. package/dist/jixieBidAdapter.js +1 -1
  113. package/dist/justpremiumBidAdapter.js +1 -1
  114. package/dist/jwplayerRtdProvider.js +1 -1
  115. package/dist/kargoAnalyticsAdapter.js +1 -1
  116. package/dist/kargoBidAdapter.js +1 -1
  117. package/dist/kimberliteBidAdapter.js +1 -1
  118. package/dist/konduitAnalyticsAdapter.js +1 -1
  119. package/dist/kueezBidAdapter.js +1 -1
  120. package/dist/kueezRtbBidAdapter.js +1 -1
  121. package/dist/lassoBidAdapter.js +1 -1
  122. package/dist/lifestreetBidAdapter.js +1 -1
  123. package/dist/limelightDigitalBidAdapter.js +1 -1
  124. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  125. package/dist/liveIntentIdSystem.js +1 -1
  126. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  127. package/dist/logicadBidAdapter.js +1 -1
  128. package/dist/loglyliftBidAdapter.js +1 -1
  129. package/dist/loyalBidAdapter.js +1 -0
  130. package/dist/luceadBidAdapter.js +1 -1
  131. package/dist/magniteAnalyticsAdapter.js +1 -1
  132. package/dist/malltvAnalyticsAdapter.js +1 -1
  133. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  134. package/dist/marsmediaBidAdapter.js +1 -1
  135. package/dist/mediafilterRtdProvider.js +1 -1
  136. package/dist/mediafuseBidAdapter.js +1 -1
  137. package/dist/medianetAnalyticsAdapter.js +1 -1
  138. package/dist/medianetBidAdapter.js +1 -1
  139. package/dist/mediasquareBidAdapter.js +1 -1
  140. package/dist/mgidBidAdapter.js +1 -1
  141. package/dist/minutemediaBidAdapter.js +1 -1
  142. package/dist/minutemediaplusBidAdapter.js +1 -1
  143. package/dist/missenaBidAdapter.js +1 -1
  144. package/dist/multibid.js +1 -1
  145. package/dist/neuwoRtdProvider.js +1 -1
  146. package/dist/nextMillenniumBidAdapter.js +1 -1
  147. package/dist/nexx360BidAdapter.js +1 -1
  148. package/dist/nobidAnalyticsAdapter.js +1 -1
  149. package/dist/not-for-prod/prebid.js +242 -239
  150. package/dist/oguryBidAdapter.js +1 -1
  151. package/dist/onetagBidAdapter.js +1 -1
  152. package/dist/ooloAnalyticsAdapter.js +1 -1
  153. package/dist/openwebBidAdapter.js +1 -1
  154. package/dist/openxBidAdapter.js +1 -1
  155. package/dist/optidigitalBidAdapter.js +1 -1
  156. package/dist/optimonAnalyticsAdapter.js +1 -1
  157. package/dist/outbrainBidAdapter.js +1 -1
  158. package/dist/oxxionAnalyticsAdapter.js +1 -1
  159. package/dist/oxxionRtdProvider.js +1 -1
  160. package/dist/parrableIdSystem.js +1 -1
  161. package/dist/pbsExtensions.js +1 -1
  162. package/dist/permutiveRtdProvider.js +1 -1
  163. package/dist/pgamsspBidAdapter.js +1 -1
  164. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  165. package/dist/pirIdSystem.js +1 -0
  166. package/dist/pixfutureBidAdapter.js +1 -1
  167. package/dist/prebidServerBidAdapter.js +1 -1
  168. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  169. package/dist/priceFloors.js +1 -1
  170. package/dist/publinkIdSystem.js +1 -1
  171. package/dist/publirBidAdapter.js +1 -1
  172. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  173. package/dist/pubmaticBidAdapter.js +1 -1
  174. package/dist/pubperfAnalyticsAdapter.js +1 -1
  175. package/dist/pubstackAnalyticsAdapter.js +1 -1
  176. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  177. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  178. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  179. package/dist/pxyzBidAdapter.js +1 -1
  180. package/dist/qortexRtdProvider.js +1 -1
  181. package/dist/quantcastBidAdapter.js +1 -1
  182. package/dist/readpeakBidAdapter.js +1 -1
  183. package/dist/relaidoBidAdapter.js +1 -1
  184. package/dist/relevantAnalyticsAdapter.js +1 -1
  185. package/dist/retailspotBidAdapter.js +1 -1
  186. package/dist/rhythmoneBidAdapter.js +1 -1
  187. package/dist/riseBidAdapter.js +1 -1
  188. package/dist/rivrAnalyticsAdapter.js +1 -1
  189. package/dist/roxotAnalyticsAdapter.js +1 -1
  190. package/dist/rtdModule.js +1 -1
  191. package/dist/rubiconBidAdapter.js +1 -1
  192. package/dist/s2sTesting.js +1 -1
  193. package/dist/scaleableAnalyticsAdapter.js +1 -1
  194. package/dist/schain.js +1 -1
  195. package/dist/seedingAllianceBidAdapter.js +1 -1
  196. package/dist/seedtagBidAdapter.js +1 -1
  197. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  198. package/dist/sharethroughBidAdapter.js +1 -1
  199. package/dist/shinezBidAdapter.js +1 -1
  200. package/dist/shinezRtbBidAdapter.js +1 -1
  201. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  202. package/dist/sirdataRtdProvider.js +1 -1
  203. package/dist/sizeMapping.js +1 -1
  204. package/dist/smaatoBidAdapter.js +1 -1
  205. package/dist/smartadserverBidAdapter.js +1 -1
  206. package/dist/smartxBidAdapter.js +1 -1
  207. package/dist/smilewantedBidAdapter.js +1 -1
  208. package/dist/sonobiAnalyticsAdapter.js +1 -1
  209. package/dist/sonobiBidAdapter.js +1 -1
  210. package/dist/sovrnAnalyticsAdapter.js +1 -1
  211. package/dist/sovrnBidAdapter.js +1 -1
  212. package/dist/sspBCBidAdapter.js +1 -1
  213. package/dist/staqAnalyticsAdapter.js +1 -1
  214. package/dist/stnBidAdapter.js +1 -1
  215. package/dist/stvBidAdapter.js +1 -1
  216. package/dist/sublimeBidAdapter.js +1 -1
  217. package/dist/taboolaBidAdapter.js +1 -1
  218. package/dist/tagorasBidAdapter.js +1 -1
  219. package/dist/targetVideoBidAdapter.js +1 -1
  220. package/dist/teadsBidAdapter.js +1 -1
  221. package/dist/terceptAnalyticsAdapter.js +1 -1
  222. package/dist/themoneytizerBidAdapter.js +1 -1
  223. package/dist/topicsFpdModule.js +1 -1
  224. package/dist/trionBidAdapter.js +1 -1
  225. package/dist/tripleliftBidAdapter.js +1 -1
  226. package/dist/ttdBidAdapter.js +1 -1
  227. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  228. package/dist/uid2IdSystem.js +1 -1
  229. package/dist/underdogmediaBidAdapter.js +1 -1
  230. package/dist/undertoneBidAdapter.js +1 -1
  231. package/dist/unrulyBidAdapter.js +1 -1
  232. package/dist/userId.js +1 -1
  233. package/dist/vidazooBidAdapter.js +1 -1
  234. package/dist/videoModule.js +1 -1
  235. package/dist/videobyteBidAdapter.js +1 -1
  236. package/dist/visxBidAdapter.js +1 -1
  237. package/dist/vuukleBidAdapter.js +1 -1
  238. package/dist/weboramaRtdProvider.js +1 -1
  239. package/dist/widespaceBidAdapter.js +1 -1
  240. package/dist/winrBidAdapter.js +1 -1
  241. package/dist/yahoosspBidAdapter.js +1 -1
  242. package/dist/yandexAnalyticsAdapter.js +1 -1
  243. package/dist/yieldmoBidAdapter.js +1 -1
  244. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  245. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  246. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  247. package/dist/zeta_global_sspBidAdapter.js +1 -1
  248. package/gulpfile.js +9 -1
  249. package/integrationExamples/gpt/adnuntius_example.html +7 -1
  250. package/integrationExamples/gpt/azerionedgeRtdProvider_example.html +3 -3
  251. package/integrationExamples/gpt/top-level-paapi/decisionLogic.js +57 -0
  252. package/integrationExamples/gpt/top-level-paapi/tl_paapi_example.html +188 -0
  253. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  254. package/integrationExamples/{gpt → realTimeData}/jwplayerRtdProvider_example.html +28 -42
  255. package/libraries/analyticsAdapter/AnalyticsAdapter.js +4 -4
  256. package/libraries/creative-renderer-native/renderer.js +1 -1
  257. package/modules/33acrossAnalyticsAdapter.js +2 -4
  258. package/modules/33acrossIdSystem.js +1 -1
  259. package/modules/adWMGAnalyticsAdapter.js +9 -11
  260. package/modules/adagioAnalyticsAdapter.js +49 -46
  261. package/modules/adkernelAdnAnalyticsAdapter.js +8 -8
  262. package/modules/adkernelBidAdapter.js +23 -102
  263. package/modules/adlooxAdServerVideo.js +2 -2
  264. package/modules/adlooxAnalyticsAdapter.js +4 -4
  265. package/modules/adnuntiusBidAdapter.js +50 -32
  266. package/modules/adomikAnalyticsAdapter.js +7 -7
  267. package/modules/adpod.js +3 -3
  268. package/modules/adxcgAnalyticsAdapter.js +10 -10
  269. package/modules/adxpremiumAnalyticsAdapter.js +8 -10
  270. package/modules/agmaAnalyticsAdapter.js +6 -7
  271. package/modules/appierAnalyticsAdapter.js +5 -7
  272. package/modules/appnexusBidAdapter.js +1 -0
  273. package/modules/asteriobidAnalyticsAdapter.js +14 -14
  274. package/modules/atsAnalyticsAdapter.js +4 -4
  275. package/modules/automatadAnalyticsAdapter.js +20 -20
  276. package/modules/azerionedgeRtdProvider.md +4 -2
  277. package/modules/bidViewability.js +3 -3
  278. package/modules/bidViewabilityIO.js +3 -3
  279. package/modules/bidwatchAnalyticsAdapter.js +7 -9
  280. package/modules/brandmetricsRtdProvider.js +6 -6
  281. package/modules/browsiRtdProvider.js +3 -3
  282. package/modules/byDataAnalyticsAdapter.js +3 -3
  283. package/modules/cleanioRtdProvider.js +3 -3
  284. package/modules/concertAnalyticsAdapter.js +5 -7
  285. package/modules/confiantRtdProvider.js +2 -2
  286. package/modules/conversantAnalyticsAdapter.js +2 -4
  287. package/modules/criteoBidAdapter.js +53 -10
  288. package/modules/currency.js +7 -7
  289. package/modules/dailymotionBidAdapter.js +139 -0
  290. package/modules/dailymotionBidAdapter.md +140 -0
  291. package/modules/datawrkzBidAdapter.js +4 -4
  292. package/modules/debugging/pbsInterceptor.js +2 -2
  293. package/modules/dfpAdServerVideo.js +2 -2
  294. package/modules/discoveryBidAdapter.js +21 -0
  295. package/modules/dsaControl.js +5 -5
  296. package/modules/eplanningAnalyticsAdapter.js +8 -8
  297. package/modules/fintezaAnalyticsAdapter.js +5 -5
  298. package/modules/gdprEnforcement.js +3 -3
  299. package/modules/geoedgeRtdProvider.js +2 -2
  300. package/modules/greenbidsAnalyticsAdapter.js +13 -10
  301. package/modules/greenbidsRtdProvider.js +2 -2
  302. package/modules/gridBidAdapter.js +2 -2
  303. package/modules/growthCodeAnalyticsAdapter.js +14 -14
  304. package/modules/gumgumBidAdapter.js +4 -1
  305. package/modules/hadronAnalyticsAdapter.js +14 -14
  306. package/modules/holidBidAdapter.js +2 -2
  307. package/modules/id5AnalyticsAdapter.js +7 -9
  308. package/modules/improvedigitalBidAdapter.js +2 -1
  309. package/modules/insticatorBidAdapter.js +137 -27
  310. package/modules/instreamTracking.js +4 -4
  311. package/modules/invisiblyAnalyticsAdapter.js +15 -17
  312. package/modules/ixBidAdapter.js +3 -3
  313. package/modules/jwplayerRtdProvider.js +93 -26
  314. package/modules/jwplayerRtdProvider.md +23 -2
  315. package/modules/kargoAnalyticsAdapter.js +3 -3
  316. package/modules/kargoBidAdapter.js +26 -31
  317. package/modules/konduitAnalyticsAdapter.js +13 -13
  318. package/modules/lassoBidAdapter.js +11 -2
  319. package/modules/limelightDigitalBidAdapter.js +2 -1
  320. package/modules/liveIntentAnalyticsAdapter.js +2 -2
  321. package/modules/livewrappedAnalyticsAdapter.js +10 -10
  322. package/modules/loyalBidAdapter.js +190 -0
  323. package/modules/loyalBidAdapter.md +79 -0
  324. package/modules/magniteAnalyticsAdapter.js +25 -23
  325. package/modules/malltvAnalyticsAdapter.js +4 -6
  326. package/modules/mediafilterRtdProvider.js +2 -2
  327. package/modules/medianetAnalyticsAdapter.js +12 -12
  328. package/modules/medianetBidAdapter.js +1 -1
  329. package/modules/multibid/index.js +2 -2
  330. package/modules/neuwoRtdProvider.js +2 -2
  331. package/modules/nextMillenniumBidAdapter.js +4 -4
  332. package/modules/nobidAnalyticsAdapter.js +9 -11
  333. package/modules/ooloAnalyticsAdapter.js +2 -2
  334. package/modules/oxxionAnalyticsAdapter.js +7 -9
  335. package/modules/paapi.js +20 -6
  336. package/modules/permutiveRtdProvider.js +21 -2
  337. package/modules/pgamsspBidAdapter.js +26 -3
  338. package/modules/pirIdSystem.js +62 -0
  339. package/modules/pirIdSystem.md +27 -0
  340. package/modules/prebidServerBidAdapter/index.js +8 -8
  341. package/modules/prebidServerBidAdapter/ortbConverter.js +3 -3
  342. package/modules/prebidmanagerAnalyticsAdapter.js +14 -14
  343. package/modules/priceFloors.js +10 -5
  344. package/modules/pubmaticAnalyticsAdapter.js +32 -22
  345. package/modules/pubmaticBidAdapter.js +1 -17
  346. package/modules/pubwiseAnalyticsAdapter.js +11 -11
  347. package/modules/pubxaiAnalyticsAdapter.js +6 -6
  348. package/modules/qortexRtdProvider.js +2 -2
  349. package/modules/roxotAnalyticsAdapter.js +8 -10
  350. package/modules/rtdModule/index.js +7 -7
  351. package/modules/scaleableAnalyticsAdapter.js +5 -5
  352. package/modules/seedtagBidAdapter.js +12 -3
  353. package/modules/sigmoidAnalyticsAdapter.js +7 -7
  354. package/modules/sirdataRtdProvider.js +2 -0
  355. package/modules/smaatoBidAdapter.js +1 -2
  356. package/modules/sonobiAnalyticsAdapter.js +10 -12
  357. package/modules/sonobiBidAdapter.js +2 -5
  358. package/modules/sovrnAnalyticsAdapter.js +7 -9
  359. package/modules/sovrnBidAdapter.js +1 -1
  360. package/modules/staqAnalyticsAdapter.js +9 -9
  361. package/modules/teadsBidAdapter.js +2 -0
  362. package/modules/terceptAnalyticsAdapter.js +7 -7
  363. package/modules/topicsFpdModule.js +3 -0
  364. package/modules/topicsFpdModule.md +4 -0
  365. package/modules/ucfunnelAnalyticsAdapter.js +5 -7
  366. package/modules/userId/index.js +3 -3
  367. package/modules/videoModule/index.js +4 -4
  368. package/modules/yandexAnalyticsAdapter.js +2 -2
  369. package/modules/yieldoneAnalyticsAdapter.js +7 -7
  370. package/modules/yuktamediaAnalyticsAdapter.js +9 -9
  371. package/modules/zeta_global_sspAnalyticsAdapter.js +5 -5
  372. package/modules/zeta_global_sspBidAdapter.js +8 -1
  373. package/package.json +1 -1
  374. package/src/adRendering.js +15 -15
  375. package/src/adUnits.js +9 -21
  376. package/src/adapterManager.js +23 -13
  377. package/src/adapters/bidderFactory.js +8 -8
  378. package/src/auction.js +26 -28
  379. package/src/auctionManager.js +4 -4
  380. package/src/bidderSettings.js +2 -2
  381. package/src/config.js +2 -2
  382. package/src/constants.js +190 -0
  383. package/src/events.js +3 -3
  384. package/src/native.js +6 -8
  385. package/src/prebid.js +6 -10
  386. package/src/secureCreatives.js +5 -5
  387. package/src/targeting.js +13 -13
  388. package/src/utils.js +4 -4
  389. package/test/fixtures/fixtures.js +44 -44
  390. package/test/helpers/analytics.js +6 -6
  391. package/test/spec/AnalyticsAdapter_spec.js +3 -3
  392. package/test/spec/auctionmanager_spec.js +82 -82
  393. package/test/spec/modules/33acrossAnalyticsAdapter_spec.js +1 -2
  394. package/test/spec/modules/33acrossIdSystem_spec.js +3 -3
  395. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +14 -14
  396. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +79 -55
  397. package/test/spec/modules/adkernelAdnAnalytics_spec.js +6 -6
  398. package/test/spec/modules/adkernelBidAdapter_spec.js +63 -24
  399. package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
  400. package/test/spec/modules/adnuntiusBidAdapter_spec.js +10 -7
  401. package/test/spec/modules/adomikAnalyticsAdapter_spec.js +7 -7
  402. package/test/spec/modules/adxcgAnalyticsAdapter_spec.js +7 -7
  403. package/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js +7 -7
  404. package/test/spec/modules/agmaAnalyticsAdapter_spec.js +18 -14
  405. package/test/spec/modules/appierAnalyticsAdapter_spec.js +1 -1
  406. package/test/spec/modules/asteriobidAnalyticsAdapter_spec.js +2 -2
  407. package/test/spec/modules/atsAnalyticsAdapter_spec.js +8 -8
  408. package/test/spec/modules/automatadAnalyticsAdapter_spec.js +2 -2
  409. package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
  410. package/test/spec/modules/bidViewability_spec.js +4 -4
  411. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +7 -6
  412. package/test/spec/modules/byDataAnalyticsAdapter_spec.js +5 -4
  413. package/test/spec/modules/cleanioRtdProvider_spec.js +6 -6
  414. package/test/spec/modules/concertAnalyticsAdapter_spec.js +7 -6
  415. package/test/spec/modules/confiantRtdProvider_spec.js +2 -2
  416. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +61 -61
  417. package/test/spec/modules/criteoBidAdapter_spec.js +112 -6
  418. package/test/spec/modules/currency_spec.js +6 -6
  419. package/test/spec/modules/dailymotionBidAdapter_spec.js +369 -0
  420. package/test/spec/modules/discoveryBidAdapter_spec.js +35 -1
  421. package/test/spec/modules/dsaControl_spec.js +4 -4
  422. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +20 -13
  423. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +5 -5
  424. package/test/spec/modules/genericAnalyticsAdapter_spec.js +2 -2
  425. package/test/spec/modules/geoedgeRtdProvider_spec.js +37 -37
  426. package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +15 -2
  427. package/test/spec/modules/greenbidsRtdProvider_spec.js +2 -2
  428. package/test/spec/modules/gridBidAdapter_spec.js +3 -1
  429. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +2 -2
  430. package/test/spec/modules/gumgumBidAdapter_spec.js +23 -0
  431. package/test/spec/modules/hadronAnalyticsAdapter_spec.js +3 -3
  432. package/test/spec/modules/id5AnalyticsAdapter_spec.js +5 -5
  433. package/test/spec/modules/id5IdSystem_spec.js +2 -2
  434. package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -3
  435. package/test/spec/modules/insticatorBidAdapter_spec.js +275 -22
  436. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +40 -40
  437. package/test/spec/modules/jwplayerRtdProvider_spec.js +672 -29
  438. package/test/spec/modules/kargoAnalyticsAdapter_spec.js +3 -3
  439. package/test/spec/modules/kargoBidAdapter_spec.js +36 -0
  440. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +13 -13
  441. package/test/spec/modules/lassoBidAdapter_spec.js +1 -0
  442. package/test/spec/modules/lemmaDigitalBidAdapter_spec.js +1 -1
  443. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +16 -1
  444. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -3
  445. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +15 -20
  446. package/test/spec/modules/loyalBidAdapter_spec .js +375 -0
  447. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +31 -15
  448. package/test/spec/modules/malltvAnalyticsAdapter_spec.js +3 -3
  449. package/test/spec/modules/mediafilterRtdProvider_spec.js +2 -2
  450. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +3 -3
  451. package/test/spec/modules/nobidAnalyticsAdapter_spec.js +23 -23
  452. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +33 -33
  453. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +0 -1
  454. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +7 -7
  455. package/test/spec/modules/paapi_spec.js +40 -14
  456. package/test/spec/modules/permutiveRtdProvider_spec.js +29 -1
  457. package/test/spec/modules/pgamsspBidAdapter_spec.js +50 -4
  458. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +9 -9
  459. package/test/spec/modules/pirIdSystem_spec.js +77 -0
  460. package/test/spec/modules/prebidServerBidAdapter_spec.js +7 -7
  461. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +2 -2
  462. package/test/spec/modules/priceFloors_spec.js +6 -5
  463. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +12 -14
  464. package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
  465. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +0 -1
  466. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +14 -14
  467. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +7 -7
  468. package/test/spec/modules/qortexRtdProvider_spec.js +2 -2
  469. package/test/spec/modules/realTimeDataModule_spec.js +9 -9
  470. package/test/spec/modules/relevantAnalyticsAdapter_spec.js +3 -3
  471. package/test/spec/modules/relevantdigitalBidAdapter_spec.js +2 -2
  472. package/test/spec/modules/rivrAnalyticsAdapter_spec.js +4 -4
  473. package/test/spec/modules/roxotAnalyticsAdapter_spec.js +25 -25
  474. package/test/spec/modules/scaleableAnalyticsAdapter_spec.js +5 -5
  475. package/test/spec/modules/seedtagBidAdapter_spec.js +56 -3
  476. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +0 -1
  477. package/test/spec/modules/sonobiAnalyticsAdapter_spec.js +8 -7
  478. package/test/spec/modules/sonobiBidAdapter_spec.js +4 -6
  479. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +2 -2
  480. package/test/spec/modules/sovrnBidAdapter_spec.js +5 -5
  481. package/test/spec/modules/staqAnalyticsAdapter_spec.js +7 -7
  482. package/test/spec/modules/teadsBidAdapter_spec.js +35 -0
  483. package/test/spec/modules/terceptAnalyticsAdapter_spec.js +7 -7
  484. package/test/spec/modules/trionBidAdapter_spec.js +1 -1
  485. package/test/spec/modules/ucfunnelAnalyticsAdapter_spec.js +1 -1
  486. package/test/spec/modules/userId_spec.js +4 -4
  487. package/test/spec/modules/videoModule/pbVideo_spec.js +3 -3
  488. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +22 -21
  489. package/test/spec/modules/yuktamediaAnalyticsAdapter_spec.js +33 -32
  490. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +8 -8
  491. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +1 -1
  492. package/test/spec/native_spec.js +19 -19
  493. package/test/spec/unit/adRendering_spec.js +14 -14
  494. package/test/spec/unit/adUnits_spec.js +1 -1
  495. package/test/spec/unit/core/adapterManager_spec.js +99 -59
  496. package/test/spec/unit/core/bidderFactory_spec.js +6 -6
  497. package/test/spec/unit/core/targeting_spec.js +47 -47
  498. package/test/spec/unit/pbjs_api_spec.js +81 -81
  499. package/test/spec/unit/secureCreatives_spec.js +27 -27
  500. package/test/spec/utils_spec.js +2 -2
  501. package/src/constants.json +0 -196
@@ -11,6 +11,7 @@ import {
11
11
  getContentSegments,
12
12
  getVatFromCache,
13
13
  getVatFromPlayer,
14
+ setOverrides,
14
15
  jwplayerSubmodule
15
16
  } from 'modules/jwplayerRtdProvider.js';
16
17
  import {server} from 'test/mocks/xhr.js';
@@ -47,7 +48,9 @@ describe('jwplayerRtdProvider', function() {
47
48
  playlist: [
48
49
  {
49
50
  file: 'test.mp4',
50
- jwpseg: validSegments
51
+ jwpseg: validSegments,
52
+ title: 'test',
53
+ description: 'this is a test'
51
54
  }
52
55
  ]
53
56
  })
@@ -57,7 +60,44 @@ describe('jwplayerRtdProvider', function() {
57
60
 
58
61
  const validTargeting = {
59
62
  segments: validSegments,
60
- mediaID: testIdForSuccess
63
+ mediaID: testIdForSuccess,
64
+ mediaUrl: 'test.mp4',
65
+ title: 'test',
66
+ description: 'this is a test'
67
+ };
68
+
69
+ expect(targetingInfo).to.deep.equal(validTargeting);
70
+ });
71
+
72
+ it('should obtain file from sources', function () {
73
+ request.respond(
74
+ 200,
75
+ responseHeader,
76
+ JSON.stringify({
77
+ playlist: [
78
+ {
79
+ sources: [{
80
+ label: 'missing file',
81
+ }, {
82
+ file: 'source.mp4',
83
+ label: 'valid file'
84
+ }],
85
+ jwpseg: validSegments,
86
+ title: 'test',
87
+ description: 'this is a test'
88
+ }
89
+ ]
90
+ })
91
+ );
92
+
93
+ const targetingInfo = getVatFromCache(testIdForSuccess);
94
+
95
+ const validTargeting = {
96
+ segments: validSegments,
97
+ mediaID: testIdForSuccess,
98
+ mediaUrl: 'source.mp4',
99
+ title: 'test',
100
+ description: 'this is a test'
61
101
  };
62
102
 
63
103
  expect(targetingInfo).to.deep.equal(validTargeting);
@@ -82,16 +122,12 @@ describe('jwplayerRtdProvider', function() {
82
122
  expect(targetingInfo).to.be.null;
83
123
  });
84
124
 
85
- it('should not write to cache when segments are absent', function() {
125
+ it('should not write to cache when playlist is empty', function() {
86
126
  request.respond(
87
127
  200,
88
128
  responseHeader,
89
129
  JSON.stringify({
90
- playlist: [
91
- {
92
- file: 'test.mp4'
93
- }
94
- ]
130
+ playlist: []
95
131
  })
96
132
  );
97
133
  const targetingInfo = getVatFromCache(testIdForFailure);
@@ -150,26 +186,41 @@ describe('jwplayerRtdProvider', function() {
150
186
  describe('When jwplayer.js is on page', function () {
151
187
  const playlistItemWithSegmentMock = {
152
188
  mediaid: mediaIdWithSegment,
189
+ title: 'Media With Segment',
190
+ description: 'The media has segments',
191
+ file: 'mediaWithSegments.mp4',
153
192
  jwpseg: validSegments
154
193
  };
155
194
 
156
195
  const targetingForMediaWithSegment = {
157
196
  segments: validSegments,
158
- mediaID: mediaIdWithSegment
197
+ mediaID: mediaIdWithSegment,
198
+ title: 'Media With Segment',
199
+ description: 'The media has segments',
200
+ mediaUrl: 'mediaWithSegments.mp4',
159
201
  };
160
202
 
161
203
  const playlistItemNoSegmentMock = {
162
- mediaid: mediaIdNoSegment
204
+ mediaid: mediaIdNoSegment,
205
+ title: 'Media Without Segment',
206
+ description: 'The media has no segments',
207
+ file: 'mediaWithoutSegments.mp4',
163
208
  };
164
209
 
165
210
  const currentItemSegments = ['test_seg_3', 'test_seg_4'];
166
211
  const currentPlaylistItemMock = {
167
212
  mediaid: mediaIdForCurrentItem,
168
- jwpseg: currentItemSegments
213
+ jwpseg: currentItemSegments,
214
+ title: 'Current Item',
215
+ description: 'The current playlist item',
216
+ file: 'currentItem.mp4',
169
217
  };
170
218
  const targetingForCurrentItem = {
171
219
  segments: currentItemSegments,
172
- mediaID: mediaIdForCurrentItem
220
+ mediaID: mediaIdForCurrentItem,
221
+ title: 'Current Item',
222
+ description: 'The current playlist item',
223
+ mediaUrl: 'currentItem.mp4',
173
224
  };
174
225
 
175
226
  const playerInstanceMock = {
@@ -199,23 +250,23 @@ describe('jwplayerRtdProvider', function() {
199
250
  expect(targeting).to.be.null;
200
251
  });
201
252
 
202
- it('returns segments when media ID matches a playlist item with segments', function () {
253
+ it('returns targeting when media ID matches a playlist item', function () {
203
254
  const targeting = getVatFromPlayer(validPlayerID, mediaIdWithSegment);
204
255
  expect(targeting).to.deep.equal(targetingForMediaWithSegment);
205
256
  });
206
257
 
207
- it('caches segments when media ID matches a playist item with segments', function () {
258
+ it('caches item when media ID matches a valid playist item', function () {
208
259
  getVatFromPlayer(validPlayerID, mediaIdWithSegment);
209
260
  const vat = getVatFromCache(mediaIdWithSegment);
210
- expect(vat.segments).to.deep.equal(validSegments);
261
+ expect(vat).to.deep.equal(targetingForMediaWithSegment);
211
262
  });
212
263
 
213
- it('returns segments of current item when media ID is missing', function () {
264
+ it('returns targeting of current item when media ID is missing', function () {
214
265
  const targeting = getVatFromPlayer(validPlayerID);
215
266
  expect(targeting).to.deep.equal(targetingForCurrentItem);
216
267
  });
217
268
 
218
- it('caches segments from the current item', function () {
269
+ it('caches metadata from the current item', function () {
219
270
  getVatFromPlayer(validPlayerID);
220
271
 
221
272
  window.jwplayer = null;
@@ -225,10 +276,11 @@ describe('jwplayerRtdProvider', function() {
225
276
 
226
277
  it('returns undefined segments when segments are absent', function () {
227
278
  const targeting = getVatFromPlayer(validPlayerID, mediaIdNoSegment);
228
- expect(targeting).to.deep.equal({
229
- mediaID: mediaIdNoSegment,
230
- segments: undefined
231
- });
279
+ expect(targeting.segments).to.be.undefined;
280
+ expect(targeting.mediaID).to.equal(mediaIdNoSegment);
281
+ expect(targeting.title).to.equal('Media Without Segment');
282
+ expect(targeting.description).to.equal('The media has no segments');
283
+ expect(targeting.mediaUrl).to.equal('mediaWithoutSegments.mp4');
232
284
  });
233
285
 
234
286
  describe('Get Bid Request Data', function () {
@@ -489,7 +541,9 @@ describe('jwplayerRtdProvider', function() {
489
541
  playlist: [
490
542
  {
491
543
  file: 'test.mp4',
492
- jwpseg: validSegments
544
+ jwpseg: validSegments,
545
+ title: 'test title',
546
+ description: 'test description',
493
547
  }
494
548
  ]
495
549
  })
@@ -498,6 +552,9 @@ describe('jwplayerRtdProvider', function() {
498
552
  expect(ortb2Fragments.global).to.have.property('site');
499
553
  expect(ortb2Fragments.global.site).to.have.property('content');
500
554
  expect(ortb2Fragments.global.site.content).to.have.property('id', 'jw_' + testIdForSuccess);
555
+ expect(ortb2Fragments.global.site.content).to.have.property('url', 'test.mp4');
556
+ expect(ortb2Fragments.global.site.content).to.have.property('title', 'test title');
557
+ expect(ortb2Fragments.global.site.content.ext).to.have.property('description', 'test description');
501
558
  expect(ortb2Fragments.global.site.content).to.have.property('data');
502
559
  const data = ortb2Fragments.global.site.content.data;
503
560
  expect(data).to.have.length(1);
@@ -742,6 +799,15 @@ describe('jwplayerRtdProvider', function() {
742
799
  });
743
800
 
744
801
  describe(' Add Ortb Site Content', function () {
802
+ beforeEach(() => {
803
+ setOverrides({
804
+ overrideContentId: 'always',
805
+ overrideContentUrl: 'whenEmpty',
806
+ overrideContentTitle: 'whenEmpty',
807
+ overrideContentDescription: 'whenEmpty'
808
+ });
809
+ });
810
+
745
811
  it('should maintain object structure when id and data params are empty', function () {
746
812
  const ortb2 = {
747
813
  site: {
@@ -766,9 +832,15 @@ describe('jwplayerRtdProvider', function() {
766
832
  it('should create a structure compliant with the oRTB 2 spec', function() {
767
833
  const ortb2 = {}
768
834
  const expectedId = 'expectedId';
835
+ const expectedUrl = 'expectedUrl';
836
+ const expectedTitle = 'expectedTitle';
837
+ const expectedDescription = 'expectedDescription';
769
838
  const expectedData = { datum: 'datum' };
770
- addOrtbSiteContent(ortb2, expectedId, expectedData);
839
+ addOrtbSiteContent(ortb2, expectedId, expectedData, expectedTitle, expectedDescription, expectedUrl);
771
840
  expect(ortb2).to.have.nested.property('site.content.id', expectedId);
841
+ expect(ortb2).to.have.nested.property('site.content.url', expectedUrl);
842
+ expect(ortb2).to.have.nested.property('site.content.title', expectedTitle);
843
+ expect(ortb2).to.have.nested.property('site.content.ext.description', expectedDescription);
772
844
  expect(ortb2).to.have.nested.property('site.content.data');
773
845
  expect(ortb2.site.content.data[0]).to.be.deep.equal(expectedData);
774
846
  });
@@ -777,11 +849,14 @@ describe('jwplayerRtdProvider', function() {
777
849
  const ortb2 = {
778
850
  site: {
779
851
  content: {
780
- id: 'oldId'
852
+ id: 'oldId',
853
+ ext: {
854
+ random_field: 'randomField'
855
+ }
781
856
  },
782
857
  random: {
783
858
  random_sub: 'randomSub'
784
- }
859
+ },
785
860
  },
786
861
  app: {
787
862
  content: {
@@ -791,23 +866,30 @@ describe('jwplayerRtdProvider', function() {
791
866
  };
792
867
 
793
868
  const expectedId = 'expectedId';
869
+ const expectedUrl = 'expectedUrl';
870
+ const expectedTitle = 'expectedTitle';
871
+ const expectedDescription = 'expectedDescription';
794
872
  const expectedData = { datum: 'datum' };
795
- addOrtbSiteContent(ortb2, expectedId, expectedData);
873
+ addOrtbSiteContent(ortb2, expectedId, expectedData, expectedTitle, expectedDescription, expectedUrl);
796
874
  expect(ortb2).to.have.nested.property('site.random.random_sub', 'randomSub');
797
875
  expect(ortb2).to.have.nested.property('app.content.id', 'appId');
876
+ expect(ortb2).to.have.nested.property('site.content.ext.random_field', 'randomField');
798
877
  expect(ortb2).to.have.nested.property('site.content.id', expectedId);
878
+ expect(ortb2).to.have.nested.property('site.content.url', expectedUrl);
879
+ expect(ortb2).to.have.nested.property('site.content.title', expectedTitle);
880
+ expect(ortb2).to.have.nested.property('site.content.ext.description', expectedDescription);
799
881
  expect(ortb2).to.have.nested.property('site.content.data');
800
882
  expect(ortb2.site.content.data[0]).to.be.deep.equal(expectedData);
801
883
  });
802
884
 
803
- it('should set content id', function () {
885
+ it('should set content id by default when absent from ortb2', function () {
804
886
  const ortb2 = {};
805
887
  const expectedId = 'expectedId';
806
888
  addOrtbSiteContent(ortb2, expectedId);
807
889
  expect(ortb2).to.have.nested.property('site.content.id', expectedId);
808
890
  });
809
891
 
810
- it('should override content id', function () {
892
+ it('should override content id by default', function () {
811
893
  const ortb2 = {
812
894
  site: {
813
895
  content: {
@@ -821,7 +903,7 @@ describe('jwplayerRtdProvider', function() {
821
903
  expect(ortb2).to.have.nested.property('site.content.id', expectedId);
822
904
  });
823
905
 
824
- it('should keep previous content id when not set', function () {
906
+ it('should keep previous content id when new value is not available', function () {
825
907
  const previousId = 'oldId';
826
908
  const ortb2 = {
827
909
  site: {
@@ -836,6 +918,122 @@ describe('jwplayerRtdProvider', function() {
836
918
  expect(ortb2).to.have.nested.property('site.content.id', previousId);
837
919
  });
838
920
 
921
+ it('should override content id when override is always', function () {
922
+ setOverrides({
923
+ overrideContentId: 'always',
924
+ });
925
+
926
+ const ortb2 = {
927
+ site: {
928
+ content: {
929
+ id: 'oldId'
930
+ }
931
+ }
932
+ };
933
+
934
+ const expectedId = 'expectedId';
935
+ addOrtbSiteContent(ortb2, expectedId);
936
+ expect(ortb2).to.have.nested.property('site.content.id', expectedId);
937
+ });
938
+
939
+ it('should keep previous content id when override is always and new value is not available', function () {
940
+ setOverrides({
941
+ overrideContentId: 'always',
942
+ });
943
+
944
+ const ortb2 = {
945
+ site: {
946
+ content: {
947
+ id: 'oldId'
948
+ }
949
+ }
950
+ };
951
+
952
+ addOrtbSiteContent(ortb2);
953
+ expect(ortb2).to.have.nested.property('site.content.id', 'oldId');
954
+ });
955
+
956
+ it('should populate content id when override is whenEmpty and value is empty', function () {
957
+ setOverrides({
958
+ overrideContentId: 'whenEmpty',
959
+ });
960
+
961
+ const ortb2 = {
962
+ site: {
963
+ content: {
964
+ }
965
+ }
966
+ };
967
+
968
+ addOrtbSiteContent(ortb2, 'newId');
969
+ expect(ortb2).to.have.nested.property('site.content.id', 'newId');
970
+ });
971
+
972
+ it('should keep previous content id when override is whenEmpty and value is already populated', function () {
973
+ setOverrides({
974
+ overrideContentId: 'whenEmpty',
975
+ });
976
+
977
+ const ortb2 = {
978
+ site: {
979
+ content: {
980
+ id: 'oldId'
981
+ }
982
+ }
983
+ };
984
+
985
+ addOrtbSiteContent(ortb2, 'newId');
986
+ expect(ortb2).to.have.nested.property('site.content.id', 'oldId');
987
+ });
988
+
989
+ it('should keep previous content id when override is whenEmpty and new value is not available', function () {
990
+ setOverrides({
991
+ overrideContentId: 'whenEmpty',
992
+ });
993
+
994
+ const ortb2 = {
995
+ site: {
996
+ content: {
997
+ }
998
+ }
999
+ };
1000
+
1001
+ addOrtbSiteContent(ortb2);
1002
+ expect(ortb2.site.content.id).to.be.undefined;
1003
+ });
1004
+
1005
+ it('should keep previous content id when overrideContentId is set to never', function () {
1006
+ setOverrides({
1007
+ overrideContentId: 'never',
1008
+ });
1009
+
1010
+ const ortb2 = {
1011
+ site: {
1012
+ content: {
1013
+ id: 'oldId'
1014
+ }
1015
+ }
1016
+ };
1017
+
1018
+ addOrtbSiteContent(ortb2, 'newId');
1019
+ expect(ortb2).to.have.nested.property('site.content.id', 'oldId');
1020
+ });
1021
+
1022
+ it('should not populate content id when override is set to never', function () {
1023
+ setOverrides({
1024
+ overrideContentId: 'never',
1025
+ });
1026
+
1027
+ const ortb2 = {
1028
+ site: {
1029
+ content: {}
1030
+ }
1031
+ };
1032
+
1033
+ addOrtbSiteContent(ortb2, 'newId');
1034
+ expect(ortb2.site.content.id).to.be.undefined;
1035
+ });
1036
+
839
1037
  it('should set content data', function () {
840
1038
  const ortb2 = {};
841
1039
  const expectedData = { datum: 'datum' };
@@ -878,6 +1076,451 @@ describe('jwplayerRtdProvider', function() {
878
1076
  expect(ortb2.site.content.data[0]).to.be.deep.equal(expectedData);
879
1077
  expect(ortb2).to.have.nested.property('site.content.id', expectedId);
880
1078
  });
1079
+
1080
+ it('should set content title by default when absent from ortb2', function () {
1081
+ const ortb2 = {};
1082
+ const expectedTitle = 'expectedTitle';
1083
+ addOrtbSiteContent(ortb2, null, null, expectedTitle);
1084
+ expect(ortb2).to.have.nested.property('site.content.title', expectedTitle);
1085
+ });
1086
+
1087
+ it('should keep previous content title by default when already defined', function () {
1088
+ const ortb2 = {
1089
+ site: {
1090
+ content: {
1091
+ title: 'oldTitle'
1092
+ }
1093
+ }
1094
+ };
1095
+
1096
+ addOrtbSiteContent(ortb2, null, null, 'newTitle');
1097
+ expect(ortb2).to.have.nested.property('site.content.title', 'oldTitle');
1098
+ });
1099
+
1100
+ it('should keep previous content title by default when new value is not available', function () {
1101
+ const ortb2 = {
1102
+ site: {
1103
+ content: {
1104
+ title: 'oldTitle',
1105
+ data: [{ datum: 'first_datum' }]
1106
+ }
1107
+ }
1108
+ };
1109
+
1110
+ addOrtbSiteContent(ortb2, null, { datum: 'new_datum' });
1111
+ expect(ortb2).to.have.nested.property('site.content.title', 'oldTitle');
1112
+ });
1113
+
1114
+ it('should override content title when override is always', function () {
1115
+ setOverrides({
1116
+ overrideContentTitle: 'always',
1117
+ });
1118
+
1119
+ const ortb2 = {
1120
+ site: {
1121
+ content: {
1122
+ title: 'oldTitle'
1123
+ }
1124
+ }
1125
+ };
1126
+
1127
+ addOrtbSiteContent(ortb2, null, null, 'newTitle');
1128
+ expect(ortb2).to.have.nested.property('site.content.title', 'newTitle');
1129
+ });
1130
+
1131
+ it('should keep previous content title when override is always and new value is not available', function () {
1132
+ setOverrides({
1133
+ overrideContentTitle: 'always',
1134
+ });
1135
+
1136
+ const ortb2 = {
1137
+ site: {
1138
+ content: {
1139
+ title: 'oldTitle'
1140
+ }
1141
+ }
1142
+ };
1143
+
1144
+ addOrtbSiteContent(ortb2);
1145
+ expect(ortb2).to.have.nested.property('site.content.title', 'oldTitle');
1146
+ });
1147
+
1148
+ it('should populate content title when override is whenEmpty and value is empty', function () {
1149
+ setOverrides({
1150
+ overrideContentTitle: 'whenEmpty',
1151
+ });
1152
+
1153
+ const ortb2 = {
1154
+ site: {
1155
+ content: {
1156
+ }
1157
+ }
1158
+ };
1159
+
1160
+ addOrtbSiteContent(ortb2, null, null, 'newTitle');
1161
+ expect(ortb2).to.have.nested.property('site.content.title', 'newTitle');
1162
+ });
1163
+
1164
+ it('should keep previous content title when override is whenEmpty and value is already populated', function () {
1165
+ setOverrides({
1166
+ overrideContentTitle: 'whenEmpty',
1167
+ });
1168
+
1169
+ const ortb2 = {
1170
+ site: {
1171
+ content: {
1172
+ title: 'oldTitle'
1173
+ }
1174
+ }
1175
+ };
1176
+
1177
+ addOrtbSiteContent(ortb2, null, null, 'newTitle');
1178
+ expect(ortb2).to.have.nested.property('site.content.title', 'oldTitle');
1179
+ });
1180
+
1181
+ it('should keep previous content title when override is whenEmpty and new value is not available', function () {
1182
+ setOverrides({
1183
+ overrideContentTitle: 'whenEmpty',
1184
+ });
1185
+
1186
+ const ortb2 = {
1187
+ site: {
1188
+ content: {
1189
+ }
1190
+ }
1191
+ };
1192
+
1193
+ addOrtbSiteContent(ortb2);
1194
+ expect(ortb2.site.content.title).to.be.undefined;
1195
+ });
1196
+
1197
+ it('should keep previous content title when override is set to never', function () {
1198
+ setOverrides({
1199
+ overrideContentTitle: 'never',
1200
+ });
1201
+
1202
+ const ortb2 = {
1203
+ site: {
1204
+ content: {
1205
+ title: 'oldTitle'
1206
+ }
1207
+ }
1208
+ };
1209
+
1210
+ addOrtbSiteContent(ortb2, null, null, 'newTitle');
1211
+ expect(ortb2).to.have.nested.property('site.content.title', 'oldTitle');
1212
+ });
1213
+
1214
+ it('should not populate content title when override is set to never', function () {
1215
+ setOverrides({
1216
+ overrideContentTitle: 'never',
1217
+ });
1218
+
1219
+ const ortb2 = {
1220
+ site: {
1221
+ content: {}
1222
+ }
1223
+ };
1224
+
1225
+ addOrtbSiteContent(ortb2, null, null, 'newTitle');
1226
+ expect(ortb2.site.content.title).to.be.undefined;
1227
+ });
1228
+
1229
+ it('should set content description by default when absent from ortb2', function () {
1230
+ const ortb2 = {};
1231
+ const expectedDescription = 'expectedDescription';
1232
+ addOrtbSiteContent(ortb2, null, null, null, expectedDescription);
1233
+ expect(ortb2).to.have.nested.property('site.content.ext.description', expectedDescription);
1234
+ });
1235
+
1236
+ it('should keep previous content description by default when already defined', function () {
1237
+ const ortb2 = {
1238
+ site: {
1239
+ content: {
1240
+ ext: {
1241
+ description: 'oldDescription'
1242
+ }
1243
+ }
1244
+ }
1245
+ };
1246
+
1247
+ addOrtbSiteContent(ortb2, null, null, null, 'newDescription');
1248
+ expect(ortb2).to.have.nested.property('site.content.ext.description', 'oldDescription');
1249
+ });
1250
+
1251
+ it('should override content description when override is always', function () {
1252
+ setOverrides({
1253
+ overrideContentDescription: 'always',
1254
+ });
1255
+
1256
+ const ortb2 = {
1257
+ site: {
1258
+ content: {
1259
+ ext: {
1260
+ description: 'oldDescription'
1261
+ }
1262
+ }
1263
+ }
1264
+ };
1265
+
1266
+ addOrtbSiteContent(ortb2, null, null, null, 'newDescription');
1267
+ expect(ortb2).to.have.nested.property('site.content.ext.description', 'newDescription');
1268
+ });
1269
+
1270
+ it('should keep previous content description when override is always and new value is not available', function () {
1271
+ setOverrides({
1272
+ overrideContentDescription: 'always',
1273
+ });
1274
+
1275
+ const ortb2 = {
1276
+ site: {
1277
+ content: {
1278
+ ext: {
1279
+ description: 'oldDescription'
1280
+ }
1281
+ }
1282
+ }
1283
+ };
1284
+
1285
+ addOrtbSiteContent(ortb2);
1286
+ expect(ortb2).to.have.nested.property('site.content.ext.description', 'oldDescription');
1287
+ });
1288
+
1289
+ it('should populate content description when override is whenEmpty and value is empty', function () {
1290
+ setOverrides({
1291
+ overrideContentDescription: 'whenEmpty',
1292
+ });
1293
+
1294
+ const ortb2 = {
1295
+ site: {
1296
+ content: {
1297
+ }
1298
+ }
1299
+ };
1300
+
1301
+ addOrtbSiteContent(ortb2, null, null, null, 'newDescription');
1302
+ expect(ortb2).to.have.nested.property('site.content.ext.description', 'newDescription');
1303
+ });
1304
+
1305
+ it('should keep previous content description when override is whenEmpty and value is already populated', function () {
1306
+ setOverrides({
1307
+ overrideContentDescription: 'whenEmpty',
1308
+ });
1309
+
1310
+ const ortb2 = {
1311
+ site: {
1312
+ content: {
1313
+ ext: {
1314
+ description: 'oldDescription'
1315
+ }
1316
+ }
1317
+ }
1318
+ };
1319
+
1320
+ addOrtbSiteContent(ortb2, null, null, null, 'newDescription');
1321
+ expect(ortb2).to.have.nested.property('site.content.ext.description', 'oldDescription');
1322
+ });
1323
+
1324
+ it('should keep previous content description when override is whenEmpty and new value is not available', function () {
1325
+ setOverrides({
1326
+ overrideContentDescription: 'whenEmpty',
1327
+ });
1328
+
1329
+ const ortb2 = {
1330
+ site: {
1331
+ content: {
1332
+ }
1333
+ }
1334
+ };
1335
+
1336
+ addOrtbSiteContent(ortb2);
1337
+ expect(ortb2.site.content.ext).to.be.undefined;
1338
+ });
1339
+
1340
+ it('should keep previous content description when override is set to never', function () {
1341
+ setOverrides({
1342
+ overrideContentDescription: 'never',
1343
+ });
1344
+
1345
+ const ortb2 = {
1346
+ site: {
1347
+ content: {
1348
+ ext: {
1349
+ description: 'oldDescription'
1350
+ }
1351
+ }
1352
+ }
1353
+ };
1354
+
1355
+ addOrtbSiteContent(ortb2, null, null, null, 'newDescription');
1356
+ expect(ortb2).to.have.nested.property('site.content.ext.description', 'oldDescription');
1357
+ });
1358
+
1359
+ it('should not populate content description when override is set to never', function () {
1360
+ setOverrides({
1361
+ overrideContentDescription: 'never',
1362
+ });
1363
+
1364
+ const ortb2 = {
1365
+ site: {
1366
+ content: {}
1367
+ }
1368
+ };
1369
+
1370
+ addOrtbSiteContent(ortb2);
1371
+ expect(ortb2.site.content.ext).to.be.undefined;
1372
+ });
1373
+
1374
+ it('should set content url by default when absent from ortb2', function () {
1375
+ const ortb2 = {};
1376
+ const expectedUrl = 'expectedUrl';
1377
+ addOrtbSiteContent(ortb2, null, null, null, null, expectedUrl);
1378
+ expect(ortb2).to.have.nested.property('site.content.url', expectedUrl);
1379
+ });
1380
+
1381
+ it('should keep previous content url by default when new value is not available', function () {
1382
+ const ortb2 = {
1383
+ site: {
1384
+ content: {
1385
+ url: 'oldUrl',
1386
+ data: [{ datum: 'first_datum' }]
1387
+ }
1388
+ }
1389
+ };
1390
+
1391
+ addOrtbSiteContent(ortb2, null, { datum: 'new_datum' });
1392
+ expect(ortb2).to.have.nested.property('site.content.url', 'oldUrl');
1393
+ });
1394
+
1395
+ it('should keep previous content url by default when already defined', function () {
1396
+ const ortb2 = {
1397
+ site: {
1398
+ content: {
1399
+ url: 'oldUrl',
1400
+ }
1401
+ }
1402
+ };
1403
+
1404
+ addOrtbSiteContent(ortb2, null, null, null, null, 'newUrl');
1405
+ expect(ortb2).to.have.nested.property('site.content.url', 'oldUrl');
1406
+ });
1407
+
1408
+ it('should override content url when override is always', function () {
1409
+ setOverrides({
1410
+ overrideContentUrl: 'always',
1411
+ });
1412
+
1413
+ const ortb2 = {
1414
+ site: {
1415
+ content: {
1416
+ url: 'oldUrl',
1417
+ }
1418
+ }
1419
+ };
1420
+
1421
+ const expectedUrl = 'expectedUrl';
1422
+ addOrtbSiteContent(ortb2, null, null, null, null, expectedUrl);
1423
+ expect(ortb2).to.have.nested.property('site.content.url', expectedUrl);
1424
+ });
1425
+
1426
+ it('should keep previous content url when override is always and new value is not available', function () {
1427
+ setOverrides({
1428
+ overrideContentUrl: 'always',
1429
+ });
1430
+
1431
+ const ortb2 = {
1432
+ site: {
1433
+ content: {
1434
+ url: 'oldUrl',
1435
+ }
1436
+ }
1437
+ };
1438
+
1439
+ addOrtbSiteContent(ortb2);
1440
+ expect(ortb2).to.have.nested.property('site.content.url', 'oldUrl');
1441
+ });
1442
+
1443
+ it('should populate content url when override is whenEmpty and value is empty', function () {
1444
+ setOverrides({
1445
+ overrideContentUrl: 'whenEmpty',
1446
+ });
1447
+
1448
+ const ortb2 = {
1449
+ site: {
1450
+ content: {
1451
+ }
1452
+ }
1453
+ };
1454
+
1455
+ const expectedUrl = 'expectedUrl';
1456
+ addOrtbSiteContent(ortb2, null, null, null, null, expectedUrl);
1457
+ expect(ortb2).to.have.nested.property('site.content.url', expectedUrl);
1458
+ });
1459
+
1460
+ it('should keep previous content url when override is whenEmpty and value is already populated', function () {
1461
+ setOverrides({
1462
+ overrideContentUrl: 'whenEmpty',
1463
+ });
1464
+
1465
+ const ortb2 = {
1466
+ site: {
1467
+ content: {
1468
+ url: 'oldUrl',
1469
+ }
1470
+ }
1471
+ };
1472
+
1473
+ addOrtbSiteContent(ortb2, null, null, null, null, 'newUrl');
1474
+ expect(ortb2).to.have.nested.property('site.content.url', 'oldUrl');
1475
+ });
1476
+
1477
+ it('should keep previous content url when override is whenEmpty and new value is not available', function () {
1478
+ setOverrides({
1479
+ overrideContentUrl: 'whenEmpty',
1480
+ });
1481
+
1482
+ const ortb2 = {
1483
+ site: {
1484
+ content: {
1485
+ }
1486
+ }
1487
+ };
1488
+
1489
+ addOrtbSiteContent(ortb2);
1490
+ expect(ortb2.site.content.url).to.be.undefined;
1491
+ });
1492
+
1493
+ it('should keep previous content url when override is set to never', function () {
1494
+ setOverrides({
1495
+ overrideContentUrl: 'never',
1496
+ });
1497
+
1498
+ const ortb2 = {
1499
+ site: {
1500
+ content: {
1501
+ url: 'oldUrl',
1502
+ }
1503
+ }
1504
+ };
1505
+
1506
+ addOrtbSiteContent(ortb2, null, null, null, null, 'newUrl');
1507
+ expect(ortb2).to.have.nested.property('site.content.url', 'oldUrl');
1508
+ });
1509
+
1510
+ it('should not populate content url when override is set to never', function () {
1511
+ setOverrides({
1512
+ overrideContentUrl: 'never',
1513
+ });
1514
+
1515
+ const ortb2 = {
1516
+ site: {
1517
+ content: {}
1518
+ }
1519
+ };
1520
+
1521
+ addOrtbSiteContent(ortb2, null, null, null, null, 'newUrl');
1522
+ expect(ortb2.site.content.url).to.be.undefined;
1523
+ });
881
1524
  });
882
1525
 
883
1526
  describe('Add Targeting to Bid', function () {