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
@@ -9,10 +9,13 @@ import {getStorageManager} from '../src/storageManager.js';
9
9
  import {submodule} from '../src/hook.js';
10
10
  import {isPlainObject, mergeDeep, logMessage, logError} from '../src/utils.js';
11
11
  import {MODULE_TYPE_RTD} from '../src/activities/modules.js';
12
-
12
+ /**
13
+ * @typedef {import('../modules/rtdModule/index.js').RtdSubmodule} RtdSubmodule
14
+ */
13
15
  export function createRtdProvider(moduleName) {
14
16
  const MODULE_NAME = 'realTimeData';
15
17
  const SUBMODULE_NAME = moduleName;
18
+ const GVLID = 1116;
16
19
 
17
20
  const storage = getStorageManager({ moduleType: MODULE_TYPE_RTD, moduleName: SUBMODULE_NAME });
18
21
  /**
@@ -106,6 +109,7 @@ export function createRtdProvider(moduleName) {
106
109
  /** @type {RtdSubmodule} */
107
110
  const rtdSubmodule = {
108
111
  name: SUBMODULE_NAME,
112
+ gvlid: GVLID,
109
113
  getBidRequestData: getRealTimeData,
110
114
  init: init
111
115
  };
@@ -8,7 +8,7 @@ Anonymised’s Real-time Data Provider automatically obtains segment IDs from th
8
8
  - Build the anonymisedRtd module into the Prebid.js package with:
9
9
 
10
10
  ```bash
11
- gulp build --modules=anonymisedRtdProvider,...
11
+ gulp build --modules=rtdModule,anonymisedRtdProvider,...
12
12
  ```
13
13
 
14
14
  - Use `setConfig` to instruct Prebid.js to initilaize the anonymisedRtdProvider module, as specified below.
@@ -1,7 +1,7 @@
1
1
  import { deepAccess, isPlainObject, isArray, replaceAuctionPrice, isFn, logError, deepClone } from '../src/utils.js';
2
2
  import { config } from '../src/config.js';
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
4
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
5
5
  import {parseDomain} from '../src/refererDetection.js';
6
6
  const BIDDER_CODE = 'apacdex';
7
7
  const ENDPOINT = 'https://useast.quantumdex.io/auction/pbjs'
@@ -15,7 +15,8 @@ import {
15
15
  logError,
16
16
  logInfo,
17
17
  logMessage,
18
- logWarn
18
+ logWarn,
19
+ mergeDeep
19
20
  } from '../src/utils.js';
20
21
  import {Renderer} from '../src/Renderer.js';
21
22
  import {config} from '../src/config.js';
@@ -25,7 +26,7 @@ import {find, includes} from '../src/polyfill.js';
25
26
  import {INSTREAM, OUTSTREAM} from '../src/video.js';
26
27
  import {getStorageManager} from '../src/storageManager.js';
27
28
  import {bidderSettings} from '../src/bidderSettings.js';
28
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
29
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
29
30
  import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
30
31
  import {APPNEXUS_CATEGORY_MAPPING} from '../libraries/categoryTranslationMapping/index.js';
31
32
  import {
@@ -103,6 +104,28 @@ const VIEWABILITY_URL_START = /\/\/cdn\.adnxs\.com\/v|\/\/cdn\.adnxs\-simple\.co
103
104
  const VIEWABILITY_FILE_NAME = 'trk.js';
104
105
  const GVLID = 32;
105
106
  const storage = getStorageManager({bidderCode: BIDDER_CODE});
107
+ // ORTB2 device types according to the OpenRTB specification
108
+ const ORTB2_DEVICE_TYPE = {
109
+ MOBILE_TABLET: 1,
110
+ PERSONAL_COMPUTER: 2,
111
+ CONNECTED_TV: 3,
112
+ PHONE: 4,
113
+ TABLET: 5,
114
+ CONNECTED_DEVICE: 6,
115
+ SET_TOP_BOX: 7,
116
+ OOH_DEVICE: 8
117
+ };
118
+ // Map of ORTB2 device types to AppNexus device types
119
+ const ORTB2_DEVICE_TYPE_MAP = new Map([
120
+ [ORTB2_DEVICE_TYPE.MOBILE_TABLET, 'Mobile/Tablet - General'],
121
+ [ORTB2_DEVICE_TYPE.PERSONAL_COMPUTER, 'Personal Computer'],
122
+ [ORTB2_DEVICE_TYPE.CONNECTED_TV, 'Connected TV'],
123
+ [ORTB2_DEVICE_TYPE.PHONE, 'Phone'],
124
+ [ORTB2_DEVICE_TYPE.TABLET, 'Tablet'],
125
+ [ORTB2_DEVICE_TYPE.CONNECTED_DEVICE, 'Connected Device'],
126
+ [ORTB2_DEVICE_TYPE.SET_TOP_BOX, 'Set Top Box'],
127
+ [ORTB2_DEVICE_TYPE.OOH_DEVICE, 'OOH Device'],
128
+ ]);
106
129
 
107
130
  export const spec = {
108
131
  code: BIDDER_CODE,
@@ -247,6 +270,12 @@ export const spec = {
247
270
  payload.app = appIdObj;
248
271
  }
249
272
 
273
+ // if present, convert and merge device object from ortb2 into `payload.device`
274
+ if (bidderRequest?.ortb2?.device) {
275
+ payload.device = payload.device || {};
276
+ mergeDeep(payload.device, convertORTB2DeviceDataToAppNexusDeviceObject(bidderRequest.ortb2.device));
277
+ }
278
+
250
279
  // grab the ortb2 keyword data (if it exists) and convert from the comma list string format to object format
251
280
  let ortb2 = deepClone(bidderRequest && bidderRequest.ortb2);
252
281
 
@@ -1196,4 +1225,29 @@ function getBidFloor(bid) {
1196
1225
  return null;
1197
1226
  }
1198
1227
 
1228
+ // Convert device data to a format that AppNexus expects
1229
+ function convertORTB2DeviceDataToAppNexusDeviceObject(ortb2DeviceData) {
1230
+ const _device = {
1231
+ useragent: ortb2DeviceData.ua,
1232
+ devicetype: ORTB2_DEVICE_TYPE_MAP.get(ortb2DeviceData.devicetype),
1233
+ make: ortb2DeviceData.make,
1234
+ model: ortb2DeviceData.model,
1235
+ os: ortb2DeviceData.os,
1236
+ os_version: ortb2DeviceData.osv,
1237
+ w: ortb2DeviceData.w,
1238
+ h: ortb2DeviceData.h,
1239
+ ppi: ortb2DeviceData.ppi,
1240
+ pxratio: ortb2DeviceData.pxratio,
1241
+ };
1242
+
1243
+ // filter out any empty values and return the object
1244
+ return Object.keys(_device)
1245
+ .reduce((r, key) => {
1246
+ if (_device[key]) {
1247
+ r[key] = _device[key];
1248
+ }
1249
+ return r;
1250
+ }, {});
1251
+ }
1252
+
1199
1253
  registerBidder(spec);
@@ -18,6 +18,8 @@ var isLoggingEnabled; var queuePointer = 0; var retryCount = 0; var timer = null
18
18
 
19
19
  const prettyLog = (level, text, isGroup = false, cb = () => {}) => {
20
20
  if (self.isLoggingEnabled === undefined) {
21
+ // TODO FIX THIS RULES VIOLATION
22
+ // eslint-disable-next-line prebid/no-global
21
23
  if (window.localStorage.getItem('__aggLoggingEnabled')) {
22
24
  self.isLoggingEnabled = true
23
25
  } else {
@@ -19,6 +19,8 @@ const REAL_TIME_MODULE = 'realTimeData';
19
19
  const SUBREAL_TIME_MODULE = 'azerionedge';
20
20
  export const STORAGE_KEY = 'ht-pa-v1-a';
21
21
 
22
+ const IMPROVEDIGITAL_GVLID = '253';
23
+
22
24
  export const storage = getStorageManager({
23
25
  moduleType: MODULE_TYPE_RTD,
24
26
  moduleName: SUBREAL_TIME_MODULE,
@@ -42,14 +44,21 @@ function getScriptURL(config) {
42
44
  * Attach script tag to DOM
43
45
  *
44
46
  * @param {Object} config
47
+ * @param {Object} userConsent
45
48
  *
46
49
  * @return {void}
47
50
  */
48
- export function attachScript(config) {
51
+ export function attachScript(config, userConsent) {
49
52
  const script = getScriptURL(config);
50
53
  loadExternalScript(script, SUBREAL_TIME_MODULE, () => {
51
54
  if (typeof window.azerionPublisherAudiences === 'function') {
52
- window.azerionPublisherAudiences(config.params?.process || {});
55
+ const publisherConfig = config.params?.process || {};
56
+ window.azerionPublisherAudiences({
57
+ ...publisherConfig,
58
+ gdprApplies: userConsent?.gdpr?.gdprApplies,
59
+ gdprConsent: userConsent?.gdpr?.consentString,
60
+ uspConsent: userConsent?.usp,
61
+ });
53
62
  }
54
63
  });
55
64
  }
@@ -106,7 +115,7 @@ export function setAudiencesToBidders(reqBidsConfigObj, config, audiences) {
106
115
  * @return {boolean}
107
116
  */
108
117
  function init(config, userConsent) {
109
- attachScript(config);
118
+ attachScript(config, userConsent);
110
119
  return true;
111
120
  }
112
121
 
@@ -138,6 +147,7 @@ export const azerionedgeSubmodule = {
138
147
  name: SUBREAL_TIME_MODULE,
139
148
  init: init,
140
149
  getBidRequestData: getBidRequestData,
150
+ gvlid: IMPROVEDIGITAL_GVLID,
141
151
  };
142
152
 
143
153
  submodule(REAL_TIME_MODULE, azerionedgeSubmodule);
@@ -79,23 +79,6 @@ provided to the module when the user gives the relevant permissions on the publi
79
79
  As Prebid.js utilizes TCF vendor consent for the RTD module to load, the module needs to be labeled
80
80
  within the Vendor Exceptions.
81
81
 
82
- ### Instructions
83
-
84
- If the Prebid GDPR enforcement is enabled, the module should be labeled
85
- as exception, as shown below:
86
-
87
- ```js
88
- [
89
- {
90
- purpose: 'storage',
91
- enforcePurpose: true,
92
- enforceVendor: true,
93
- vendorExceptions: ["azerionedge"]
94
- },
95
- ...
96
- ]
97
- ```
98
-
99
82
  ## Testing
100
83
 
101
84
  To view an example:
@@ -1,7 +1,7 @@
1
- import {createTrackPixelHtml, _each, deepAccess, getDefinedParams, parseGPTSingleSizeArrayToRtbSize} from '../src/utils.js';
1
+ import {_each, deepAccess, getDefinedParams, parseGPTSingleSizeArrayToRtbSize} from '../src/utils.js';
2
2
  import {VIDEO} from '../src/mediaTypes.js';
3
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
- import {getRefererInfo} from '../src/refererDetection.js';
4
+ import {getAd, getSiteObj} from '../libraries/targetVideoUtils/bidderUtils.js'
5
5
 
6
6
  /**
7
7
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -180,50 +180,50 @@ export const spec = {
180
180
 
181
181
  }
182
182
 
183
- /**
184
- * Helper function to get ad
185
- *
186
- * @param {object} bid The bid.
187
- * @return {object} ad object.
188
- */
189
- function getAd(bid) {
190
- let ad, adUrl, vastXml, vastUrl;
191
-
192
- switch (deepAccess(bid, 'ext.prebid.type')) {
193
- case VIDEO:
194
- if (bid.adm.substr(0, 4) === 'http') {
195
- vastUrl = bid.adm;
196
- } else {
197
- vastXml = bid.adm;
198
- };
199
- break;
200
- default:
201
- if (bid.adm && bid.nurl) {
202
- ad = bid.adm;
203
- ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
204
- } else if (bid.adm) {
205
- ad = bid.adm;
206
- } else if (bid.nurl) {
207
- adUrl = bid.nurl;
208
- };
209
- }
210
-
211
- return {ad, adUrl, vastXml, vastUrl};
212
- }
213
-
214
- /**
215
- * Helper function to get site object
216
- *
217
- * @return {object} siteObj.
218
- */
219
- function getSiteObj() {
220
- const refInfo = (getRefererInfo && getRefererInfo()) || {};
221
-
222
- return {
223
- page: refInfo.page,
224
- ref: refInfo.ref,
225
- domain: refInfo.domain
226
- };
227
- }
183
+ // /**
184
+ // * Helper function to get ad
185
+ // *
186
+ // * @param {object} bid The bid.
187
+ // * @return {object} ad object.
188
+ // */
189
+ // function getAd(bid) {
190
+ // let ad, adUrl, vastXml, vastUrl;
191
+
192
+ // switch (deepAccess(bid, 'ext.prebid.type')) {
193
+ // case VIDEO:
194
+ // if (bid.adm.substr(0, 4) === 'http') {
195
+ // vastUrl = bid.adm;
196
+ // } else {
197
+ // vastXml = bid.adm;
198
+ // };
199
+ // break;
200
+ // default:
201
+ // if (bid.adm && bid.nurl) {
202
+ // ad = bid.adm;
203
+ // ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
204
+ // } else if (bid.adm) {
205
+ // ad = bid.adm;
206
+ // } else if (bid.nurl) {
207
+ // adUrl = bid.nurl;
208
+ // };
209
+ // }
210
+
211
+ // return {ad, adUrl, vastXml, vastUrl};
212
+ // }
213
+
214
+ // /**
215
+ // * Helper function to get site object
216
+ // *
217
+ // * @return {object} siteObj.
218
+ // */
219
+ // function getSiteObj() {
220
+ // const refInfo = (getRefererInfo && getRefererInfo()) || {};
221
+
222
+ // return {
223
+ // page: refInfo.page,
224
+ // ref: refInfo.ref,
225
+ // domain: refInfo.domain
226
+ // };
227
+ // }
228
228
 
229
229
  registerBidder(spec);
@@ -43,6 +43,7 @@ let preloadStatus = 0;
43
43
  * @param {string} scriptURL The script URL to preload
44
44
  */
45
45
  function pageInitStepPreloadScript(scriptURL) {
46
+ // TODO: this bypasses adLoader
46
47
  const linkElement = document.createElement('link');
47
48
  linkElement.rel = 'preload';
48
49
  linkElement.as = 'script';
@@ -1,7 +1,7 @@
1
1
  import { logWarn, logMessage, debugTurnedOn, generateUUID, deepAccess } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { getStorageManager } from '../src/storageManager.js';
4
- import { hasPurpose1Consent } from '../src/utils/gpdr.js';
4
+ import { hasPurpose1Consent } from '../src/utils/gdpr.js';
5
5
 
6
6
  /**
7
7
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -11,7 +11,9 @@ import {
11
11
  } from '../src/utils.js';
12
12
 
13
13
  import {
14
+ ADPOD,
14
15
  BANNER,
16
+ VIDEO,
15
17
  } from '../src/mediaTypes.js';
16
18
 
17
19
  const BIDDER_CODE = 'connatix';
@@ -41,10 +43,28 @@ export function getBidFloor(bid) {
41
43
  }
42
44
  }
43
45
 
46
+ export function validateBanner(mediaTypes) {
47
+ if (!mediaTypes[BANNER]) {
48
+ return true;
49
+ }
50
+
51
+ const banner = deepAccess(mediaTypes, BANNER, {});
52
+ return (Boolean(banner.sizes) && isArray(mediaTypes[BANNER].sizes) && mediaTypes[BANNER].sizes.length > 0);
53
+ }
54
+
55
+ export function validateVideo(mediaTypes) {
56
+ const video = mediaTypes[VIDEO];
57
+ if (!video) {
58
+ return true;
59
+ }
60
+
61
+ return video.context !== ADPOD;
62
+ }
63
+
44
64
  export const spec = {
45
65
  code: BIDDER_CODE,
46
66
  gvlid: 143,
47
- supportedMediaTypes: [BANNER],
67
+ supportedMediaTypes: [BANNER, VIDEO],
48
68
 
49
69
  /*
50
70
  * Validate the bid request.
@@ -57,17 +77,24 @@ export const spec = {
57
77
  const params = deepAccess(bid, 'params', {});
58
78
  const bidder = deepAccess(bid, 'bidder');
59
79
 
60
- const banner = deepAccess(mediaTypes, BANNER, {});
61
-
62
80
  const hasBidId = Boolean(bidId);
63
81
  const isValidBidder = (bidder === BIDDER_CODE);
64
- const isValidSize = (Boolean(banner.sizes) && isArray(mediaTypes[BANNER].sizes) && mediaTypes[BANNER].sizes.length > 0);
65
- const hasSizes = mediaTypes[BANNER] ? isValidSize : false;
82
+ const hasMediaTypes = Boolean(mediaTypes) && (Boolean(mediaTypes[BANNER]) || Boolean(mediaTypes[VIDEO]));
83
+ const isValidBanner = validateBanner(mediaTypes);
84
+ const isValidVideo = validateVideo(mediaTypes);
66
85
  const hasRequiredBidParams = Boolean(params.placementId);
67
86
 
68
- const isValid = isValidBidder && hasBidId && hasSizes && hasRequiredBidParams;
87
+ const isValid = isValidBidder && hasBidId && hasMediaTypes && isValidBanner && isValidVideo && hasRequiredBidParams;
69
88
  if (!isValid) {
70
- logError(`Invalid bid request: isValidBidder: ${isValidBidder} hasBidId: ${hasBidId}, hasSizes: ${hasSizes}, hasRequiredBidParams: ${hasRequiredBidParams}`);
89
+ logError(
90
+ `Invalid bid request:
91
+ isValidBidder: ${isValidBidder},
92
+ hasBidId: ${hasBidId},
93
+ hasMediaTypes: ${hasMediaTypes},
94
+ isValidBanner: ${isValidBanner},
95
+ isValidVideo: ${isValidVideo},
96
+ hasRequiredBidParams: ${hasRequiredBidParams}`
97
+ );
71
98
  }
72
99
  return isValid;
73
100
  },
@@ -129,12 +156,13 @@ export const spec = {
129
156
  cpm: bidResponse.Cpm,
130
157
  ttl: bidResponse.Ttl || DEFAULT_MAX_TTL,
131
158
  currency: 'USD',
132
- mediaType: BANNER,
159
+ mediaType: bidResponse.VastXml ? VIDEO : BANNER,
133
160
  netRevenue: true,
134
161
  width: bidResponse.Width,
135
162
  height: bidResponse.Height,
136
163
  creativeId: bidResponse.CreativeId,
137
164
  ad: bidResponse.Ad,
165
+ vastXml: bidResponse.VastXml,
138
166
  referrer: referrer,
139
167
  }));
140
168
  },
@@ -313,11 +313,13 @@ export const connectIdSubmodule = {
313
313
 
314
314
  /**
315
315
  * Utility function that returns a boolean flag indicating if the user
316
- * has opeted out via the Yahoo easy-opt-out mechanism.
316
+ * has opted out via the Yahoo easy-opt-out mechanism.
317
317
  * @returns {Boolean}
318
318
  */
319
319
  userHasOptedOut() {
320
320
  try {
321
+ // TODO FIX THIS RULES VIOLATION
322
+ // eslint-disable-next-line
321
323
  return localStorage.getItem(OVERRIDE_OPT_OUT_KEY) === '1';
322
324
  } catch {
323
325
  return false;
@@ -17,12 +17,19 @@ import {
17
17
  isArray,
18
18
  } from '../src/utils.js';
19
19
  import { loadExternalScript } from '../src/adloader.js';
20
+ import { getStorageManager } from '../src/storageManager.js';
21
+ import { MODULE_TYPE_RTD } from '../src/activities/modules.js';
20
22
 
21
23
  const MODULE_NAME = 'contxtful';
22
24
  const MODULE = `${MODULE_NAME}RtdProvider`;
23
25
 
24
26
  const CONTXTFUL_RECEPTIVITY_DOMAIN = 'api.receptivity.io';
25
27
 
28
+ const storageManager = getStorageManager({
29
+ moduleType: MODULE_TYPE_RTD,
30
+ moduleName: MODULE_NAME
31
+ });
32
+
26
33
  let rxApi = null;
27
34
  let isFirstBidRequestCall = true;
28
35
 
@@ -35,8 +42,19 @@ function getRxEngineReceptivity(requester) {
35
42
  return rxApi?.receptivity(requester);
36
43
  }
37
44
 
45
+ function getItemFromSessionStorage(key) {
46
+ let value = null;
47
+ try {
48
+ // Use the Storage Manager
49
+ value = storageManager.getDataFromSessionStorage(key, null);
50
+ } catch (error) {
51
+ }
52
+
53
+ return value;
54
+ }
55
+
38
56
  function loadSessionReceptivity(requester) {
39
- let sessionStorageValue = sessionStorage.getItem(requester);
57
+ let sessionStorageValue = getItemFromSessionStorage(requester);
40
58
  if (!sessionStorageValue) {
41
59
  return null;
42
60
  }
@@ -54,7 +72,7 @@ function loadSessionReceptivity(requester) {
54
72
  } catch {
55
73
  return null;
56
74
  }
57
- };
75
+ }
58
76
 
59
77
  /**
60
78
  * Prepare a receptivity batch
@@ -63,6 +63,7 @@ pbjs.setConfig({
63
63
  }
64
64
  });
65
65
  ```
66
+
66
67
  ## Parameters
67
68
 
68
69
  | Name | Type | Scope | Description |
@@ -4,7 +4,7 @@ import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
4
4
  import {find, includes} from '../src/polyfill.js';
5
5
  import {getStorageManager} from '../src/storageManager.js';
6
6
  import {ajax} from '../src/ajax.js';
7
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
7
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
8
8
  import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
9
9
  import {getANKeywordParam} from '../libraries/appnexusUtils/anKeywords.js';
10
10
 
@@ -3,7 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
4
4
  import {getStorageManager} from '../src/storageManager.js';
5
5
  import {getRefererInfo} from '../src/refererDetection.js';
6
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
6
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
7
7
  import {Renderer} from '../src/Renderer.js';
8
8
  import {OUTSTREAM} from '../src/video.js';
9
9
  import {ajax} from '../src/ajax.js';
@@ -2,7 +2,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
2
  import {getStorageManager} from '../src/storageManager.js';
3
3
  import {BANNER} from '../src/mediaTypes.js';
4
4
  import {generateUUID, getParameterByName, isNumber, logError, logInfo} from '../src/utils.js';
5
- import {hasPurpose1Consent} from '../src/utils/gpdr.js';
5
+ import {hasPurpose1Consent} from '../src/utils/gdpr.js';
6
6
 
7
7
  /**
8
8
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -224,6 +224,8 @@ export const spec = {
224
224
  bid: bid
225
225
  }
226
226
  }
227
+ // TODO FIX THIS RULES VIOLATION
228
+ // eslint-disable-next-line prebid/no-member
227
229
  navigator.sendBeacon(EVENT_ENDPOINT, JSON.stringify(event))
228
230
  },
229
231
 
@@ -236,6 +238,8 @@ export const spec = {
236
238
  bidderRequest: bidderRequest
237
239
  }
238
240
  }
241
+ // TODO FIX THIS RULES VIOLATION
242
+ // eslint-disable-next-line prebid/no-member
239
243
  navigator.sendBeacon(EVENT_ENDPOINT, JSON.stringify(event))
240
244
  },
241
245