prebid.js 9.4.0 → 9.5.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 (363) hide show
  1. package/.eslintrc.js +31 -5
  2. package/.github/workflows/jscpd.yml +2 -2
  3. package/.github/workflows/linter.yml +107 -0
  4. package/creative/crossDomain.js +6 -3
  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/adagioAnalyticsAdapter.js +1 -1
  10. package/dist/adagioBidAdapter.js +1 -1
  11. package/dist/adagioRtdProvider.js +1 -1
  12. package/dist/adagioUtils.js +1 -1
  13. package/dist/addefendBidAdapter.js +1 -1
  14. package/dist/adgenerationBidAdapter.js +1 -1
  15. package/dist/adkernelAdnBidAdapter.js +1 -1
  16. package/dist/adkernelBidAdapter.js +1 -1
  17. package/dist/adkernelUtils.js +1 -0
  18. package/dist/adlooxRtdProvider.js +1 -1
  19. package/dist/admixerBidAdapter.js +1 -1
  20. package/dist/adqueryBidAdapter.js +1 -1
  21. package/dist/adrelevantisBidAdapter.js +1 -1
  22. package/dist/adstirBidAdapter.js +1 -1
  23. package/dist/adtrgtmeBidAdapter.js +1 -1
  24. package/dist/advRedAnalyticsAdapter.js +1 -0
  25. package/dist/adxcgAnalyticsAdapter.js +1 -1
  26. package/dist/adxcgBidAdapter.js +1 -1
  27. package/dist/adyoulikeBidAdapter.js +1 -1
  28. package/dist/agmaAnalyticsAdapter.js +1 -1
  29. package/dist/ajaBidAdapter.js +1 -1
  30. package/dist/akamaiDapRtdProvider.js +1 -1
  31. package/dist/amxBidAdapter.js +1 -1
  32. package/dist/amxIdSystem.js +1 -1
  33. package/dist/anonymisedRtdProvider.js +1 -1
  34. package/dist/apacdexBidAdapter.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/axonixBidAdapter.js +1 -1
  39. package/dist/azerionedgeRtdProvider.js +1 -1
  40. package/dist/bidglassBidAdapter.js +1 -1
  41. package/dist/big-richmediaBidAdapter.js +1 -1
  42. package/dist/bridBidAdapter.js +1 -1
  43. package/dist/bridgewellBidAdapter.js +1 -1
  44. package/dist/brightMountainMediaBidAdapter.js +1 -1
  45. package/dist/carodaBidAdapter.js +1 -1
  46. package/dist/chtnwBidAdapter.js +1 -1
  47. package/dist/chunk-core.js +1 -1
  48. package/dist/concertBidAdapter.js +1 -1
  49. package/dist/connatixBidAdapter.js +1 -1
  50. package/dist/connectadBidAdapter.js +1 -1
  51. package/dist/consumableBidAdapter.js +1 -1
  52. package/dist/contxtfulRtdProvider.js +1 -1
  53. package/dist/conversantAnalyticsAdapter.js +1 -1
  54. package/dist/conversantBidAdapter.js +1 -1
  55. package/dist/craftBidAdapter.js +1 -1
  56. package/dist/criteoBidAdapter.js +1 -1
  57. package/dist/currencyUtils.js +1 -1
  58. package/dist/cwireBidAdapter.js +1 -1
  59. package/dist/dailymotionBidAdapter.js +1 -1
  60. package/dist/debugging-standalone.js +1 -1
  61. package/dist/dependencies.json +43 -7
  62. package/dist/dfpAdServerVideo.js +1 -1
  63. package/dist/dfpAdpod.js +1 -1
  64. package/dist/dfpUtils.js +1 -1
  65. package/dist/discoveryBidAdapter.js +1 -1
  66. package/dist/dspxBidAdapter.js +1 -1
  67. package/dist/dxkultureBidAdapter.js +1 -1
  68. package/dist/eightPodAnalyticsAdapter.js +1 -1
  69. package/dist/eightPodBidAdapter.js +1 -1
  70. package/dist/eplanningBidAdapter.js +1 -1
  71. package/dist/euidIdSystem.js +1 -1
  72. package/dist/exadsBidAdapter.js +1 -1
  73. package/dist/feedadBidAdapter.js +1 -1
  74. package/dist/finativeBidAdapter.js +1 -1
  75. package/dist/fintezaAnalyticsAdapter.js +1 -1
  76. package/dist/fpdUtils.js +1 -0
  77. package/dist/freewheel-sspBidAdapter.js +1 -1
  78. package/dist/gmosspBidAdapter.js +1 -1
  79. package/dist/goldbachBidAdapter.js +1 -1
  80. package/dist/gptPreAuction.js +1 -1
  81. package/dist/gptUtils.js +1 -1
  82. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  83. package/dist/greenbidsRtdProvider.js +1 -1
  84. package/dist/gridBidAdapter.js +1 -1
  85. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  86. package/dist/growthCodeRtdProvider.js +1 -1
  87. package/dist/gumgumBidAdapter.js +1 -1
  88. package/dist/h12mediaBidAdapter.js +1 -1
  89. package/dist/hypelabBidAdapter.js +1 -1
  90. package/dist/id5AnalyticsAdapter.js +1 -1
  91. package/dist/id5IdSystem.js +1 -1
  92. package/dist/imdsBidAdapter.js +1 -1
  93. package/dist/improvedigitalBidAdapter.js +1 -1
  94. package/dist/insticatorBidAdapter.js +1 -1
  95. package/dist/intentIqAnalyticsAdapter.js +1 -0
  96. package/dist/ixBidAdapter.js +1 -1
  97. package/dist/jixieBidAdapter.js +1 -1
  98. package/dist/justpremiumBidAdapter.js +1 -1
  99. package/dist/jwplayerBidAdapter.js +1 -1
  100. package/dist/jwplayerRtdProvider.js +1 -1
  101. package/dist/kargoBidAdapter.js +1 -1
  102. package/dist/kimberliteBidAdapter.js +1 -1
  103. package/dist/konduitAnalyticsAdapter.js +1 -1
  104. package/dist/kueezBidAdapter.js +1 -1
  105. package/dist/lassoBidAdapter.js +1 -1
  106. package/dist/lifestreetBidAdapter.js +1 -1
  107. package/dist/liveIntentIdSystem.js +1 -1
  108. package/dist/logicadBidAdapter.js +1 -1
  109. package/dist/loglyliftBidAdapter.js +1 -1
  110. package/dist/luceadBidAdapter.js +1 -1
  111. package/dist/mabidderBidAdapter.js +1 -1
  112. package/dist/magniteAnalyticsAdapter.js +1 -1
  113. package/dist/malltvAnalyticsAdapter.js +1 -1
  114. package/dist/marsmediaBidAdapter.js +1 -1
  115. package/dist/mediafuseBidAdapter.js +1 -1
  116. package/dist/mediagoBidAdapter.js +1 -1
  117. package/dist/medianetAnalyticsAdapter.js +1 -1
  118. package/dist/medianetBidAdapter.js +1 -1
  119. package/dist/mediasquareBidAdapter.js +1 -1
  120. package/dist/mgidBidAdapter.js +1 -1
  121. package/dist/minutemediaBidAdapter.js +1 -1
  122. package/dist/missenaBidAdapter.js +1 -1
  123. package/dist/mobianRtdProvider.js +1 -1
  124. package/dist/nextMillenniumBidAdapter.js +1 -1
  125. package/dist/nexx360BidAdapter.js +1 -1
  126. package/dist/nobidAnalyticsAdapter.js +1 -1
  127. package/dist/nobidBidAdapter.js +1 -1
  128. package/dist/not-for-prod/prebid.js +201 -193
  129. package/dist/oguryBidAdapter.js +1 -1
  130. package/dist/onetagBidAdapter.js +1 -1
  131. package/dist/ooloAnalyticsAdapter.js +1 -1
  132. package/dist/openwebBidAdapter.js +1 -1
  133. package/dist/openxBidAdapter.js +1 -1
  134. package/dist/optidigitalBidAdapter.js +1 -1
  135. package/dist/optoutBidAdapter.js +1 -1
  136. package/dist/orbidderBidAdapter.js +1 -1
  137. package/dist/outbrainBidAdapter.js +1 -1
  138. package/dist/paapi.js +1 -1
  139. package/dist/permutiveRtdProvider.js +1 -1
  140. package/dist/pixfutureBidAdapter.js +1 -1
  141. package/dist/playdigoBidAdapter.js +1 -1
  142. package/dist/prebidServerBidAdapter.js +1 -1
  143. package/dist/programmaticaBidAdapter.js +1 -1
  144. package/dist/publinkIdSystem.js +1 -1
  145. package/dist/publirBidAdapter.js +1 -1
  146. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  147. package/dist/pubmaticBidAdapter.js +1 -1
  148. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  149. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  150. package/dist/pxyzBidAdapter.js +1 -1
  151. package/dist/quantcastBidAdapter.js +1 -1
  152. package/dist/readpeakBidAdapter.js +1 -1
  153. package/dist/relaidoBidAdapter.js +1 -1
  154. package/dist/relevatehealthBidAdapter.js +1 -1
  155. package/dist/retailspotBidAdapter.js +1 -1
  156. package/dist/rhythmoneBidAdapter.js +1 -1
  157. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  158. package/dist/riseBidAdapter.js +1 -1
  159. package/dist/rubiconBidAdapter.js +1 -1
  160. package/dist/schainSerializer.js +1 -0
  161. package/dist/seedingAllianceBidAdapter.js +1 -1
  162. package/dist/seedtagBidAdapter.js +1 -1
  163. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  164. package/dist/sharethroughBidAdapter.js +1 -1
  165. package/dist/shinezBidAdapter.js +1 -1
  166. package/dist/sizeMapping.js +1 -1
  167. package/dist/sizeUtils.js +1 -1
  168. package/dist/smaatoBidAdapter.js +1 -1
  169. package/dist/smartadserverBidAdapter.js +1 -1
  170. package/dist/smartxBidAdapter.js +1 -1
  171. package/dist/smilewantedBidAdapter.js +1 -1
  172. package/dist/snigelBidAdapter.js +1 -1
  173. package/dist/sonobiBidAdapter.js +1 -1
  174. package/dist/sovrnBidAdapter.js +1 -1
  175. package/dist/sspBCBidAdapter.js +1 -1
  176. package/dist/stnBidAdapter.js +1 -1
  177. package/dist/stvBidAdapter.js +1 -1
  178. package/dist/sublimeBidAdapter.js +1 -1
  179. package/dist/symitriDapRtdProvider.js +1 -0
  180. package/dist/taboolaBidAdapter.js +1 -1
  181. package/dist/tappxBidAdapter.js +1 -1
  182. package/dist/targetVideoBidAdapter.js +1 -1
  183. package/dist/targetVideoUtils.js +1 -0
  184. package/dist/teadsBidAdapter.js +1 -1
  185. package/dist/terceptAnalyticsAdapter.js +1 -1
  186. package/dist/themoneytizerBidAdapter.js +1 -1
  187. package/dist/trionBidAdapter.js +1 -1
  188. package/dist/tripleliftBidAdapter.js +1 -1
  189. package/dist/ttdBidAdapter.js +1 -1
  190. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  191. package/dist/uid2IdSystem.js +1 -1
  192. package/dist/underdogmediaBidAdapter.js +1 -1
  193. package/dist/undertoneBidAdapter.js +1 -1
  194. package/dist/unrulyBidAdapter.js +1 -1
  195. package/dist/userAgentUtils.js +1 -0
  196. package/dist/utiqIdSystem.js +1 -1
  197. package/dist/vidazooUtils.js +1 -1
  198. package/dist/videobyteBidAdapter.js +1 -1
  199. package/dist/visxBidAdapter.js +1 -1
  200. package/dist/vuukleBidAdapter.js +1 -1
  201. package/dist/widespaceBidAdapter.js +1 -1
  202. package/dist/winrBidAdapter.js +1 -1
  203. package/dist/yahooAdsBidAdapter.js +1 -1
  204. package/dist/yandexIdSystem.js +1 -1
  205. package/dist/yieldmoBidAdapter.js +1 -1
  206. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  207. package/integrationExamples/gpt/x-domain/creative.html +1 -1
  208. package/libraries/adkernelUtils/adkernelUtils.js +11 -0
  209. package/libraries/currencyUtils/floor.js +23 -0
  210. package/libraries/dfpUtils/dfpUtils.js +7 -0
  211. package/libraries/fpdUtils/deviceInfo.js +58 -0
  212. package/libraries/fpdUtils/pageInfo.js +73 -0
  213. package/libraries/gptUtils/gptUtils.js +23 -1
  214. package/libraries/schainSerializer/schainSerializer.js +24 -0
  215. package/libraries/sizeUtils/tranformSize.js +43 -0
  216. package/libraries/targetVideoUtils/bidderUtils.js +178 -0
  217. package/libraries/targetVideoUtils/constants.js +23 -0
  218. package/libraries/userAgentUtils/index.js +58 -0
  219. package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
  220. package/modules/.submodules.json +1 -0
  221. package/modules/33acrossAnalyticsAdapter.js +2 -0
  222. package/modules/adagioBidAdapter.js +1 -1
  223. package/modules/adagioRtdProvider.js +18 -4
  224. package/modules/adkernelAdnBidAdapter.js +1 -12
  225. package/modules/adkernelBidAdapter.js +4 -13
  226. package/modules/adlooxAnalyticsAdapter.js +1 -0
  227. package/modules/admixerBidAdapter.js +10 -6
  228. package/modules/admixerBidAdapter.md +7 -10
  229. package/modules/adtrgtmeBidAdapter.js +1 -1
  230. package/modules/advRedAnalyticsAdapter.js +198 -0
  231. package/modules/advRedAnalyticsAdapter.md +30 -0
  232. package/modules/akamaiDapRtdProvider.js +19 -798
  233. package/modules/anonymisedRtdProvider.js +5 -1
  234. package/modules/anonymisedRtdProvider.md +1 -1
  235. package/modules/apacdexBidAdapter.js +1 -1
  236. package/modules/appnexusBidAdapter.js +56 -2
  237. package/modules/automatadAnalyticsAdapter.js +2 -0
  238. package/modules/azerionedgeRtdProvider.js +13 -3
  239. package/modules/azerionedgeRtdProvider.md +0 -17
  240. package/modules/bridBidAdapter.js +47 -47
  241. package/modules/cleanioRtdProvider.js +1 -0
  242. package/modules/concertBidAdapter.js +1 -1
  243. package/modules/connatixBidAdapter.js +36 -8
  244. package/modules/connectIdSystem.js +3 -1
  245. package/modules/contxtfulRtdProvider.js +20 -2
  246. package/modules/contxtfulRtdProvider.md +1 -0
  247. package/modules/craftBidAdapter.js +1 -1
  248. package/modules/criteoBidAdapter.js +1 -1
  249. package/modules/cwireBidAdapter.js +5 -1
  250. package/modules/dailymotionBidAdapter.js +85 -65
  251. package/modules/debugging/debugging.js +3 -0
  252. package/modules/dfpAdServerVideo.js +15 -33
  253. package/modules/dfpAdpod.js +2 -6
  254. package/modules/dgkeywordRtdProvider.js +2 -0
  255. package/modules/discoveryBidAdapter.js +26 -210
  256. package/modules/dspxBidAdapter.js +176 -54
  257. package/modules/eightPodAnalyticsAdapter.js +28 -34
  258. package/modules/eightPodBidAdapter.js +113 -57
  259. package/modules/fintezaAnalyticsAdapter.js +9 -4
  260. package/modules/goldbachBidAdapter.js +1 -1
  261. package/modules/gptPreAuction.js +63 -4
  262. package/modules/growthCodeAnalyticsAdapter.js +1 -1
  263. package/modules/growthCodeRtdProvider.js +1 -1
  264. package/modules/gumgumBidAdapter.js +14 -10
  265. package/modules/improvedigitalBidAdapter.js +1 -1
  266. package/modules/intentIqAnalyticsAdapter.js +234 -0
  267. package/modules/intentIqAnalyticsAdapter.md +27 -0
  268. package/modules/intentIqIdSystem.md +0 -0
  269. package/modules/jwplayerBidAdapter.js +1 -1
  270. package/modules/jwplayerRtdProvider.js +26 -6
  271. package/modules/jwplayerVideoProvider.js +6 -0
  272. package/modules/mediafuseBidAdapter.js +1 -1
  273. package/modules/mediagoBidAdapter.js +7 -176
  274. package/modules/medianetBidAdapter.js +101 -40
  275. package/modules/mgidBidAdapter.js +3 -1
  276. package/modules/mobianRtdProvider.js +16 -2
  277. package/modules/nextMillenniumBidAdapter.js +1 -27
  278. package/modules/nobidBidAdapter.js +1 -1
  279. package/modules/optoutBidAdapter.js +1 -1
  280. package/modules/paapi.js +48 -35
  281. package/modules/permutiveRtdProvider.js +72 -22
  282. package/modules/playdigoBidAdapter.js +4 -2
  283. package/modules/prebidServerBidAdapter/index.js +4 -2
  284. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
  285. package/modules/programmaticaBidAdapter.js +1 -1
  286. package/modules/pubmaticBidAdapter.js +12 -0
  287. package/modules/pubxaiAnalyticsAdapter.js +306 -164
  288. package/modules/relevatehealthBidAdapter.js +2 -1
  289. package/modules/richaudienceBidAdapter.js +1 -1
  290. package/modules/rtdModule/index.js +5 -3
  291. package/modules/sirdataRtdProvider.js +2 -0
  292. package/modules/sizeMapping.js +2 -5
  293. package/modules/smaatoBidAdapter.js +18 -1
  294. package/modules/smilewantedBidAdapter.js +26 -22
  295. package/modules/snigelBidAdapter.js +1 -1
  296. package/modules/sonobiBidAdapter.js +5 -10
  297. package/modules/symitriDapRtdProvider.js +812 -0
  298. package/modules/symitriDapRtdProvider.md +49 -0
  299. package/modules/targetVideoBidAdapter.js +120 -152
  300. package/modules/targetVideoBidAdapter.md +20 -3
  301. package/modules/userId/eids.js +3 -0
  302. package/modules/utiqIdSystem.js +12 -10
  303. package/modules/validationFpdModule/index.js +22 -17
  304. package/modules/videojsVideoProvider.js +3 -0
  305. package/modules/visxBidAdapter.js +1 -1
  306. package/modules/winrBidAdapter.js +2 -27
  307. package/modules/yahooAdsBidAdapter.js +1 -1
  308. package/modules/yandexIdSystem.js +1 -1
  309. package/package.json +4 -4
  310. package/plugins/eslint/index.js +73 -45
  311. package/src/adRendering.js +7 -3
  312. package/src/adloader.js +1 -0
  313. package/src/ajax.js +15 -0
  314. package/src/config.js +0 -4
  315. package/src/debugging.js +1 -0
  316. package/src/secureCreatives.js +1 -1
  317. package/src/storageManager.js +62 -73
  318. package/src/targeting.js +26 -20
  319. package/src/utils.js +9 -0
  320. package/test/pages/banner_sync.html +97 -0
  321. package/test/pages/consent_mgt_gdpr.html +1 -1
  322. package/test/spec/ajax_spec.js +11 -0
  323. package/test/spec/creative/crossDomainCreative_spec.js +26 -9
  324. package/test/spec/e2e/banner/basic_banner_ad.spec.js +20 -14
  325. package/test/spec/fpd/gdpr_spec.js +1 -1
  326. package/test/spec/libraries/userAgentUtils_spec.js +109 -0
  327. package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
  328. package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
  329. package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
  330. package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
  331. package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
  332. package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
  333. package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
  334. package/test/spec/modules/consentManagement_spec.js +1 -1
  335. package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
  336. package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
  337. package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
  338. package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
  339. package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
  340. package/test/spec/modules/gptPreAuction_spec.js +143 -1
  341. package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
  342. package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
  343. package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
  344. package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
  345. package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
  346. package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
  347. package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
  348. package/test/spec/modules/paapi_spec.js +177 -111
  349. package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
  350. package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
  351. package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
  352. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  353. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
  354. package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
  355. package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
  356. package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
  357. package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
  358. package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
  359. package/test/spec/modules/yandexIdSystem_spec.js +6 -1
  360. package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
  361. package/test/spec/unit/core/storageManager_spec.js +68 -51
  362. package/test/spec/utils_spec.js +19 -0
  363. /package/src/utils/{gpdr.js → gdpr.js} +0 -0
@@ -70,7 +70,8 @@ function initFirstVisit() {
70
70
  let cookies;
71
71
 
72
72
  try {
73
- cookies = parseCookies(document.cookie);
73
+ // TODO: commented out because of rule violations
74
+ cookies = {} // parseCookies(document.cookie);
74
75
  } catch (a) {
75
76
  cookies = {};
76
77
  }
@@ -91,7 +92,8 @@ function initFirstVisit() {
91
92
 
92
93
  return visitDate;
93
94
  }
94
-
95
+ // TODO: commented out because of rule violations
96
+ /*
95
97
  function trim(string) {
96
98
  if (string.trim) {
97
99
  return string.trim();
@@ -130,6 +132,7 @@ function parseCookies(cookie) {
130
132
 
131
133
  return values;
132
134
  }
135
+ */
133
136
 
134
137
  function getRandAsStr(digits) {
135
138
  let str = '';
@@ -172,7 +175,8 @@ function initSession() {
172
175
  let isNew = false;
173
176
 
174
177
  try {
175
- cookies = parseCookies(document.cookie);
178
+ // TODO: commented out because of rule violations
179
+ cookies = {} // parseCookies(document.cookie);
176
180
  } catch (a) {
177
181
  cookies = {};
178
182
  }
@@ -263,7 +267,8 @@ function getTrackRequestLastTime() {
263
267
  );
264
268
  }
265
269
 
266
- cookie = parseCookies(document.cookie);
270
+ // TODO: commented out because of rule violations
271
+ cookie = {} // parseCookies(document.cookie);
267
272
  cookie = cookie[ TRACK_TIME_KEY ];
268
273
  if (cookie) {
269
274
  return parseInt(cookie, 10);
@@ -21,7 +21,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
21
21
  import {ADPOD, BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
22
22
  import {find, includes} from '../src/polyfill.js';
23
23
  import {INSTREAM, OUTSTREAM} from '../src/video.js';
24
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
24
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
25
25
  import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
26
26
  import {APPNEXUS_CATEGORY_MAPPING} from '../libraries/categoryTranslationMapping/index.js';
27
27
  import {getANKeywordParam} from '../libraries/appnexusUtils/anKeywords.js';
@@ -1,19 +1,68 @@
1
+ import { getSignals as getSignalsFn, getSegments as getSegmentsFn, taxonomies } from '../libraries/gptUtils/gptUtils.js';
2
+ import { auctionManager } from '../src/auctionManager.js';
3
+ import { config } from '../src/config.js';
4
+ import { TARGETING_KEYS } from '../src/constants.js';
5
+ import { getHook } from '../src/hook.js';
6
+ import { find } from '../src/polyfill.js';
1
7
  import {
2
8
  deepAccess,
9
+ deepSetValue,
3
10
  isAdUnitCodeMatchingSlot,
4
11
  isGptPubadsDefined,
5
12
  logInfo,
13
+ logWarn,
6
14
  pick,
7
- deepSetValue, logWarn
15
+ uniques
8
16
  } from '../src/utils.js';
9
- import {config} from '../src/config.js';
10
- import {getHook} from '../src/hook.js';
11
- import {find} from '../src/polyfill.js';
12
17
 
13
18
  const MODULE_NAME = 'GPT Pre-Auction';
14
19
  export let _currentConfig = {};
15
20
  let hooksAdded = false;
16
21
 
22
+ export function getSegments(fpd, sections, segtax) {
23
+ return getSegmentsFn(fpd, sections, segtax);
24
+ }
25
+
26
+ export function getSignals(fpd) {
27
+ return getSignalsFn(fpd);
28
+ }
29
+
30
+ export function getSignalsArrayByAuctionsIds(auctionIds, index = auctionManager.index) {
31
+ const signals = auctionIds
32
+ .map(auctionId => index.getAuction({ auctionId })?.getFPD()?.global)
33
+ .map(getSignals)
34
+ .filter(fpd => fpd);
35
+
36
+ return signals;
37
+ }
38
+
39
+ export function getSignalsIntersection(signals) {
40
+ const result = {};
41
+ taxonomies.forEach((taxonomy) => {
42
+ const allValues = signals
43
+ .flatMap(x => x)
44
+ .filter(x => x.taxonomy === taxonomy)
45
+ .map(x => x.values);
46
+ result[taxonomy] = allValues.length ? (
47
+ allValues.reduce((commonElements, subArray) => {
48
+ return commonElements.filter(element => subArray.includes(element));
49
+ })
50
+ ) : []
51
+ result[taxonomy] = { values: result[taxonomy] };
52
+ })
53
+ return result;
54
+ }
55
+
56
+ export function getAuctionsIdsFromTargeting(targeting, am = auctionManager) {
57
+ return Object.values(targeting)
58
+ .flatMap(x => Object.entries(x))
59
+ .filter((entry) => entry[0] === TARGETING_KEYS.AD_ID || entry[0].startsWith(TARGETING_KEYS.AD_ID + '_'))
60
+ .flatMap(entry => entry[1])
61
+ .map(adId => am.findBidByAdId(adId)?.auctionId)
62
+ .filter(id => id != null)
63
+ .filter(uniques);
64
+ }
65
+
17
66
  export const appendGptSlots = adUnits => {
18
67
  const { customGptSlotMatching } = _currentConfig;
19
68
 
@@ -153,6 +202,14 @@ export const makeBidRequestsHook = (fn, adUnits, ...args) => {
153
202
  return fn.call(this, adUnits, ...args);
154
203
  };
155
204
 
205
+ const setPpsConfigFromTargetingSet = (next, targetingSet) => {
206
+ // set gpt config
207
+ const auctionsIds = getAuctionsIdsFromTargeting(targetingSet);
208
+ const signals = getSignalsIntersection(getSignalsArrayByAuctionsIds(auctionsIds));
209
+ window.googletag.setConfig && window.googletag.setConfig({pps: { taxonomies: signals }});
210
+ next(targetingSet);
211
+ };
212
+
156
213
  const handleSetGptConfig = moduleConfig => {
157
214
  _currentConfig = pick(moduleConfig, [
158
215
  'enabled', enabled => enabled !== false,
@@ -166,12 +223,14 @@ const handleSetGptConfig = moduleConfig => {
166
223
  if (_currentConfig.enabled) {
167
224
  if (!hooksAdded) {
168
225
  getHook('makeBidRequests').before(makeBidRequestsHook);
226
+ getHook('targetingDone').after(setPpsConfigFromTargetingSet)
169
227
  hooksAdded = true;
170
228
  }
171
229
  } else {
172
230
  logInfo(`${MODULE_NAME}: Turning off module`);
173
231
  _currentConfig = {};
174
232
  getHook('makeBidRequests').getHooks({hook: makeBidRequestsHook}).remove();
233
+ getHook('targetingDone').getHooks({hook: setPpsConfigFromTargetingSet}).remove();
175
234
  hooksAdded = false;
176
235
  }
177
236
  };
@@ -140,7 +140,7 @@ function logToServer() {
140
140
  if (pid === DEFAULT_PID) return;
141
141
  if (eventQueue.length >= 1) {
142
142
  // Get the correct GCID
143
- let gcid = localStorage.getItem('gcid')
143
+ let gcid = storage.getDataFromLocalStorage('gcid');
144
144
 
145
145
  let data = {
146
146
  session: sessionId,
@@ -75,7 +75,7 @@ function callServer(configParams, items, expiresAt, userConsent) {
75
75
  storage.removeDataFromLocalStorage(RTD_EXPIRE_KEY, null)
76
76
  }
77
77
  if ((items === null) && (isNaN(expiresAt))) {
78
- let gcid = localStorage.getItem('gcid')
78
+ let gcid = storage.getDataFromLocalStorage('gcid')
79
79
 
80
80
  let url = configParams.url ? configParams.url : ENDPOINT_URL;
81
81
  url = tryAppendQueryString(url, 'pid', configParams.pid);
@@ -215,11 +215,12 @@ function _getVidParams(attributes) {
215
215
  }
216
216
 
217
217
  /**
218
- * Gets bidfloor
219
- * @param {Object} mediaTypes
220
- * @param {Number} bidfloor
221
- * @param {Object} bid
222
- * @returns {Number} floor
218
+ * Retrieves the bid floor value, which is the minimum acceptable bid for an ad unit.
219
+ * This function calculates the bid floor based on the given media types and other bidding parameters.
220
+ * @param {Object} mediaTypes - The media types specified for the bid, which might influence floor calculations.
221
+ * @param {number} staticBidFloor - The default or static bid floor set for the bid.
222
+ * @param {Object} bid - The bid object which may contain a method to get dynamic floor values.
223
+ * @returns {Object} An object containing the calculated bid floor and its currency.
223
224
  */
224
225
  function _getFloor(mediaTypes, staticBidFloor, bid) {
225
226
  const curMediaType = Object.keys(mediaTypes)[0] || 'banner';
@@ -290,10 +291,10 @@ function getEids(userId) {
290
291
  }
291
292
 
292
293
  /**
293
- * Make a server request from the list of BidRequests.
294
- *
295
- * @param {validBidRequests[]} - an array of bids
296
- * @return ServerRequest Info describing the request to the server.
294
+ * Builds requests for bids.
295
+ * @param {validBidRequests[]} validBidRequests - An array of valid bid requests.
296
+ * @param {Object} bidderRequest - The bidder's request information.
297
+ * @returns {Object[]} An array of server requests.
297
298
  */
298
299
  function buildRequests(validBidRequests, bidderRequest) {
299
300
  const bids = [];
@@ -316,6 +317,7 @@ function buildRequests(validBidRequests, bidderRequest) {
316
317
  const { currency, floor } = _getFloor(mediaTypes, params.bidfloor, bidRequest);
317
318
  const eids = getEids(userId);
318
319
  const gpid = deepAccess(ortb2Imp, 'ext.gpid') || deepAccess(ortb2Imp, 'ext.data.pbadslot');
320
+ const paapiEligible = deepAccess(ortb2Imp, 'ext.ae') === 1
319
321
  let sizes = [1, 1];
320
322
  let data = {};
321
323
  data.displaymanager = 'Prebid.js - gumgum';
@@ -402,7 +404,9 @@ function buildRequests(validBidRequests, bidderRequest) {
402
404
  } else { // legacy params
403
405
  data = { ...data, ...handleLegacyParams(params, sizes) };
404
406
  }
405
-
407
+ if (paapiEligible) {
408
+ data.ae = paapiEligible
409
+ }
406
410
  if (gdprConsent) {
407
411
  data.gdprApplies = gdprConsent.gdprApplies ? 1 : 0;
408
412
  }
@@ -3,7 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {config} from '../src/config.js';
4
4
  import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
5
5
  import {Renderer} from '../src/Renderer.js';
6
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
6
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
7
7
  import {ortbConverter} from '../libraries/ortbConverter/converter.js';
8
8
  /**
9
9
  * See https://github.com/prebid/Prebid.js/pull/8827 for details on linting exception
@@ -0,0 +1,234 @@
1
+ import { logInfo, logError } from '../src/utils.js';
2
+ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
3
+ import adapterManager from '../src/adapterManager.js';
4
+ import { ajax } from '../src/ajax.js';
5
+ import { getStorageManager } from '../src/storageManager.js';
6
+ import { config } from '../src/config.js';
7
+ import { EVENTS } from '../src/constants.js';
8
+ import { MODULE_TYPE_ANALYTICS } from '../src/activities/modules.js';
9
+
10
+ const MODULE_NAME = 'iiqAnalytics'
11
+ const analyticsType = 'endpoint';
12
+ const defaultUrl = 'https://reports.intentiq.com/report';
13
+ const storage = getStorageManager({ moduleType: MODULE_TYPE_ANALYTICS, moduleName: MODULE_NAME });
14
+ const prebidVersion = '$prebid.version$';
15
+ export const REPORTER_ID = Date.now() + '_' + getRandom(0, 1000);
16
+
17
+ const FIRST_PARTY_KEY = '_iiq_fdata';
18
+ const FIRST_PARTY_DATA_KEY = '_iiq_fdata';
19
+ const JSVERSION = 0.1
20
+
21
+ const PARAMS_NAMES = {
22
+ abTestGroup: 'abGroup',
23
+ pbPauseUntil: 'pbPauseUntil',
24
+ pbMonitoringEnabled: 'pbMonitoringEnabled',
25
+ isInTestGroup: 'isInTestGroup',
26
+ enhanceRequests: 'enhanceRequests',
27
+ wasSubscribedForPrebid: 'wasSubscribedForPrebid',
28
+ hadEids: 'hadEids',
29
+ ABTestingConfigurationSource: 'ABTestingConfigurationSource',
30
+ lateConfiguration: 'lateConfiguration',
31
+ jsversion: 'jsversion',
32
+ eidsNames: 'eidsNames',
33
+ requestRtt: 'rtt',
34
+ clientType: 'clientType',
35
+ adserverDeviceType: 'AdserverDeviceType',
36
+ terminationCause: 'terminationCause',
37
+ callCount: 'callCount',
38
+ manualCallCount: 'mcc',
39
+ pubprovidedidsFailedToregister: 'ppcc',
40
+ noDataCount: 'noDataCount',
41
+ profile: 'profile',
42
+ isProfileDeterministic: 'pidDeterministic',
43
+ siteId: 'sid',
44
+ hadEidsInLocalStorage: 'idls',
45
+ auctionStartTime: 'ast',
46
+ eidsReadTime: 'eidt',
47
+ agentId: 'aid',
48
+ auctionEidsLength: 'aeidln',
49
+ wasServerCalled: 'wsrvcll',
50
+ referrer: 'vrref',
51
+ isInBrowserBlacklist: 'inbbl',
52
+ prebidVersion: 'pbjsver',
53
+ partnerId: 'partnerId'
54
+ };
55
+
56
+ let iiqAnalyticsAnalyticsAdapter = Object.assign(adapter({ defaultUrl, analyticsType }), {
57
+ initOptions: {
58
+ lsValueInitialized: false,
59
+ partner: null,
60
+ fpid: null,
61
+ currentGroup: null,
62
+ dataInLs: null,
63
+ eidl: null,
64
+ lsIdsInitialized: false,
65
+ manualReport: false
66
+ },
67
+ track({ eventType, args }) {
68
+ switch (eventType) {
69
+ case BID_WON:
70
+ bidWon(args);
71
+ break;
72
+ default:
73
+ break;
74
+ }
75
+ }
76
+ });
77
+
78
+ // Events needed
79
+ const {
80
+ BID_WON
81
+ } = EVENTS;
82
+
83
+ function readData(key) {
84
+ try {
85
+ if (storage.hasLocalStorage()) {
86
+ return storage.getDataFromLocalStorage(key);
87
+ }
88
+ if (storage.cookiesAreEnabled()) {
89
+ return storage.getCookie(key);
90
+ }
91
+ } catch (error) {
92
+ logError(error);
93
+ }
94
+ }
95
+
96
+ function initLsValues() {
97
+ if (iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized) return;
98
+ iiqAnalyticsAnalyticsAdapter.initOptions.fpid = JSON.parse(readData(FIRST_PARTY_KEY));
99
+ let iiqArr = config.getConfig('userSync.userIds').filter(m => m.name == 'intentIqId');
100
+ if (iiqArr && iiqArr.length > 0) iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized = true;
101
+ if (!iiqArr) iiqArr = [];
102
+ if (iiqArr.length == 0) {
103
+ iiqArr.push({
104
+ 'params': {
105
+ 'partner': -1,
106
+ 'group': 'U'
107
+ }
108
+ })
109
+ }
110
+ if (iiqArr && iiqArr.length > 0) {
111
+ if (iiqArr[0].params && iiqArr[0].params.partner && !isNaN(iiqArr[0].params.partner)) {
112
+ iiqAnalyticsAnalyticsAdapter.initOptions.partner = iiqArr[0].params.partner;
113
+ iiqAnalyticsAnalyticsAdapter.initOptions.currentGroup = iiqAnalyticsAnalyticsAdapter.initOptions.fpid.group;
114
+ }
115
+ }
116
+ }
117
+
118
+ function initReadLsIds() {
119
+ if (isNaN(iiqAnalyticsAnalyticsAdapter.initOptions.partner) || iiqAnalyticsAnalyticsAdapter.initOptions.partner == -1) return;
120
+ try {
121
+ iiqAnalyticsAnalyticsAdapter.initOptions.dataInLs = null;
122
+ let iData = readData(FIRST_PARTY_DATA_KEY + '_' + iiqAnalyticsAnalyticsAdapter.initOptions.partner)
123
+ if (iData) {
124
+ iiqAnalyticsAnalyticsAdapter.initOptions.lsIdsInitialized = true;
125
+ let pData = JSON.parse(iData);
126
+ iiqAnalyticsAnalyticsAdapter.initOptions.dataInLs = pData.data;
127
+ iiqAnalyticsAnalyticsAdapter.initOptions.eidl = pData.eidl || -1;
128
+ }
129
+ } catch (e) {
130
+ logError(e)
131
+ }
132
+ }
133
+
134
+ function bidWon(args) {
135
+ if (!iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized) { initLsValues(); }
136
+ if (iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized && !iiqAnalyticsAnalyticsAdapter.initOptions.lsIdsInitialized) { initReadLsIds(); }
137
+ if (!iiqAnalyticsAnalyticsAdapter.initOptions.manualReport) {
138
+ ajax(constructFullUrl(preparePayload(args, true)), undefined, null, { method: 'GET' });
139
+ }
140
+
141
+ logInfo('IIQ ANALYTICS -> BID WON')
142
+ }
143
+
144
+ function getRandom(start, end) {
145
+ return Math.floor((Math.random() * (end - start + 1)) + start);
146
+ }
147
+
148
+ export function preparePayload(data) {
149
+ let result = getDefaultDataObject();
150
+
151
+ result[PARAMS_NAMES.partnerId] = iiqAnalyticsAnalyticsAdapter.initOptions.partner;
152
+ result[PARAMS_NAMES.prebidVersion] = prebidVersion;
153
+ result[PARAMS_NAMES.referrer] = getReferrer();
154
+
155
+ result[PARAMS_NAMES.abTestGroup] = iiqAnalyticsAnalyticsAdapter.initOptions.currentGroup;
156
+
157
+ result[PARAMS_NAMES.isInTestGroup] = iiqAnalyticsAnalyticsAdapter.initOptions.currentGroup == 'A';
158
+
159
+ result[PARAMS_NAMES.agentId] = REPORTER_ID;
160
+
161
+ fillPrebidEventData(data, result);
162
+
163
+ fillEidsData(result);
164
+
165
+ return result;
166
+ }
167
+
168
+ function fillEidsData(result) {
169
+ if (iiqAnalyticsAnalyticsAdapter.initOptions.lsIdsInitialized) {
170
+ result[PARAMS_NAMES.hadEidsInLocalStorage] = iiqAnalyticsAnalyticsAdapter.initOptions.eidl && iiqAnalyticsAnalyticsAdapter.initOptions.eidl > 0;
171
+ result[PARAMS_NAMES.auctionEidsLength] = iiqAnalyticsAnalyticsAdapter.initOptions.eidl || -1;
172
+ }
173
+ }
174
+
175
+ function fillPrebidEventData(eventData, result) {
176
+ if (eventData.bidderCode) { result.bidderCode = eventData.bidderCode; }
177
+ if (eventData.cpm) { result.cpm = eventData.cpm; }
178
+ if (eventData.currency) { result.currency = eventData.currency; }
179
+ if (eventData.originalCpm) { result.originalCpm = eventData.originalCpm; }
180
+ if (eventData.originalCurrency) { result.originalCurrency = eventData.originalCurrency; }
181
+ if (eventData.status) { result.status = eventData.status; }
182
+ if (eventData.auctionId) { result.prebidAuctionId = eventData.auctionId; }
183
+
184
+ result.biddingPlatformId = 1;
185
+ result.partnerAuctionId = 'BW';
186
+ }
187
+
188
+ function getDefaultDataObject() {
189
+ return {
190
+ 'inbbl': false,
191
+ 'pbjsver': prebidVersion,
192
+ 'partnerAuctionId': 'BW',
193
+ 'reportSource': 'pbjs',
194
+ 'abGroup': 'U',
195
+ 'jsversion': JSVERSION,
196
+ 'partnerId': -1,
197
+ 'biddingPlatformId': 1,
198
+ 'idls': false,
199
+ 'ast': -1,
200
+ 'aeidln': -1
201
+ }
202
+ }
203
+
204
+ function constructFullUrl(data) {
205
+ let report = []
206
+ data = btoa(JSON.stringify(data))
207
+ report.push(data)
208
+ return defaultUrl + '?pid=' + iiqAnalyticsAnalyticsAdapter.initOptions.partner +
209
+ '&mct=1' +
210
+ ((iiqAnalyticsAnalyticsAdapter.initOptions && iiqAnalyticsAnalyticsAdapter.initOptions.fpid)
211
+ ? '&iiqid=' + encodeURIComponent(iiqAnalyticsAnalyticsAdapter.initOptions.fpid.pcid) : '') +
212
+ '&agid=' + REPORTER_ID +
213
+ '&jsver=' + JSVERSION +
214
+ '&vrref=' + getReferrer() +
215
+ '&source=pbjs' +
216
+ '&payload=' + JSON.stringify(report)
217
+ }
218
+
219
+ export function getReferrer() {
220
+ return document.referrer;
221
+ }
222
+
223
+ iiqAnalyticsAnalyticsAdapter.originEnableAnalytics = iiqAnalyticsAnalyticsAdapter.enableAnalytics;
224
+
225
+ iiqAnalyticsAnalyticsAdapter.enableAnalytics = function (myConfig) {
226
+ iiqAnalyticsAnalyticsAdapter.originEnableAnalytics(myConfig); // call the base class function
227
+ };
228
+
229
+ adapterManager.registerAnalyticsAdapter({
230
+ adapter: iiqAnalyticsAnalyticsAdapter,
231
+ code: MODULE_NAME
232
+ });
233
+
234
+ export default iiqAnalyticsAnalyticsAdapter;
@@ -0,0 +1,27 @@
1
+ # Overview
2
+
3
+ Module Name: iiqAnalytics
4
+ Module Type: Analytics Adapter
5
+ Maintainer: julian@intentiq.com
6
+
7
+ # Description
8
+
9
+ By using this Intent IQ adapter, you will be able to obtain comprehensive analytics and metrics regarding the performance of the Intent IQ Unified ID module. This includes how the module impacts your revenue, CPMs, and fill rates related to bidders and domains.
10
+
11
+ ## Intent IQ Universal ID Registration
12
+
13
+ No registration for this module is required.
14
+
15
+ ## Intent IQ Universal IDConfiguration
16
+
17
+ <B>IMPORTANT</B>: only effective when Intent IQ Universal ID module is installed and configured. [(How-To)](https://docs.prebid.org/dev-docs/modules/userid-submodules/intentiq.html)
18
+
19
+ No additional configuration for this module is required. We will use the configuration provided for Intent IQ Universal IQ module.
20
+
21
+ #### Example Configuration
22
+
23
+ ```js
24
+ pbjs.enableAnalytics({
25
+ provider: 'iiqAnalytics'
26
+ });
27
+ ```
File without changes
@@ -2,7 +2,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
2
  import { VIDEO } from '../src/mediaTypes.js';
3
3
  import { isArray, isFn, deepAccess, deepSetValue, getDNT, logError, logWarn } from '../src/utils.js';
4
4
  import { config } from '../src/config.js';
5
- import { hasPurpose1Consent } from '../src/utils/gpdr.js';
5
+ import { hasPurpose1Consent } from '../src/utils/gdpr.js';
6
6
 
7
7
  const BIDDER_CODE = 'jwplayer';
8
8
  const BASE_URL = 'https://vpb-server.jwplayer.com/';
@@ -12,7 +12,7 @@
12
12
  import {submodule} from '../src/hook.js';
13
13
  import {config} from '../src/config.js';
14
14
  import {ajaxBuilder} from '../src/ajax.js';
15
- import {deepAccess, logError} from '../src/utils.js';
15
+ import { deepAccess, logError, logWarn } from '../src/utils.js'
16
16
  import {find} from '../src/polyfill.js';
17
17
  import {getGlobal} from '../src/prebidGlobal.js';
18
18
 
@@ -429,17 +429,37 @@ export function addTargetingToBid(bid, targeting) {
429
429
  bid.rtd = Object.assign({}, rtd, jwRtd);
430
430
  }
431
431
 
432
- function getPlayer(playerDivId) {
432
+ export function getPlayer(playerDivId) {
433
433
  const jwplayer = window.jwplayer;
434
434
  if (!jwplayer) {
435
435
  logError(SUBMODULE_NAME + '.js was not found on page');
436
436
  return;
437
437
  }
438
438
 
439
- const player = jwplayer(playerDivId);
440
- if (!player || !player.getPlaylist) {
441
- logError('player ID did not match any players');
439
+ let player = jwplayer(playerDivId);
440
+ if (player && player.getPlaylist) {
441
+ return player;
442
+ }
443
+
444
+ const playerOnPageCount = document.getElementsByClassName('jwplayer').length;
445
+ if (playerOnPageCount === 0) {
446
+ logError('No JWPlayer instances have been detected on the page');
442
447
  return;
443
448
  }
444
- return player;
449
+
450
+ let errorMessage = `player Div ID ${playerDivId} did not match any players.`;
451
+
452
+ // If there are multiple instances on the page, we cannot guess which one should be targeted.
453
+ if (playerOnPageCount > 1) {
454
+ logError(errorMessage);
455
+ return;
456
+ }
457
+
458
+ player = jwplayer();
459
+ if (player && player.getPlaylist) {
460
+ logWarn(`${errorMessage} Targeting player Div ID ${player.id} instead`);
461
+ return player;
462
+ }
463
+
464
+ logError(errorMessage);
445
465
  }
@@ -12,6 +12,12 @@ import stateFactory from '../libraries/video/shared/state.js';
12
12
  import { JWPLAYER_VENDOR } from '../libraries/video/constants/vendorCodes.js';
13
13
  import { getEventHandler } from '../libraries/video/shared/eventHandler.js';
14
14
  import { submodule } from '../src/hook.js';
15
+ /**
16
+ * @typedef {import('../libraries/video/constants/ortb.js').OrtbVideoParams} OrtbVideoParams
17
+ * @typedef {import('../libraries/video/shared/state.js').State} State
18
+ * @typedef {import('../modules/videoModule/coreVideo.js').VideoProvider} VideoProvider
19
+ * @typedef {import('../modules/videoModule/coreVideo.js').videoProviderConfig} videoProviderConfig
20
+ */
15
21
 
16
22
  /**
17
23
  * @constructor
@@ -24,7 +24,7 @@ import {find, includes} from '../src/polyfill.js';
24
24
  import {INSTREAM, OUTSTREAM} from '../src/video.js';
25
25
  import {getStorageManager} from '../src/storageManager.js';
26
26
  import {bidderSettings} from '../src/bidderSettings.js';
27
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
27
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
28
28
  import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
29
29
  import {APPNEXUS_CATEGORY_MAPPING} from '../libraries/categoryTranslationMapping/index.js';
30
30
  import {