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
@@ -130,76 +130,96 @@ export const spec = {
130
130
  * @param {BidderRequest} bidderRequest
131
131
  * @return ServerRequest Info describing the request to the server.
132
132
  */
133
- buildRequests: (validBidRequests = [], bidderRequest) => validBidRequests.map(bid => ({
134
- method: 'POST',
135
- url: 'https://pb.dmxleo.com',
136
- data: {
137
- pbv: '$prebid.version$',
138
- bidder_request: {
139
- gdprConsent: {
140
- apiVersion: deepAccess(bidderRequest, 'gdprConsent.apiVersion', 1),
141
- consentString: deepAccess(bidderRequest, 'gdprConsent.consentString', ''),
142
- // Cast boolean in any case (eg: if value is int) to ensure type
143
- gdprApplies: !!deepAccess(bidderRequest, 'gdprConsent.gdprApplies'),
144
- },
145
- refererInfo: {
146
- page: deepAccess(bidderRequest, 'refererInfo.page', ''),
133
+ buildRequests: function(validBidRequests = [], bidderRequest) {
134
+ // check consent to be able to read user cookie
135
+ const allowCookieReading =
136
+ // No GDPR applies
137
+ !deepAccess(bidderRequest, 'gdprConsent.gdprApplies') ||
138
+ // OR GDPR applies and we have global consent
139
+ deepAccess(bidderRequest, 'gdprConsent.vendorData.hasGlobalConsent') === true ||
140
+ (
141
+ // Vendor consent
142
+ deepAccess(bidderRequest, 'gdprConsent.vendorData.vendor.consents.573') === true &&
143
+ // Purposes
144
+ [1, 3, 4].every(v => deepAccess(bidderRequest, `gdprConsent.vendorData.purpose.consents.${v}`) === true) &&
145
+ // Flexible purposes
146
+ [2, 7, 9, 10].every(v =>
147
+ deepAccess(bidderRequest, `gdprConsent.vendorData.purpose.consents.${v}`) === true ||
148
+ deepAccess(bidderRequest, `gdprConsent.vendorData.purpose.legitimateInterests.${v}`) === true
149
+ )
150
+ );
151
+
152
+ return validBidRequests.map(bid => ({
153
+ method: 'POST',
154
+ url: 'https://pb.dmxleo.com',
155
+ data: {
156
+ pbv: '$prebid.version$',
157
+ bidder_request: {
158
+ gdprConsent: {
159
+ apiVersion: deepAccess(bidderRequest, 'gdprConsent.apiVersion', 1),
160
+ consentString: deepAccess(bidderRequest, 'gdprConsent.consentString', ''),
161
+ // Cast boolean in any case (eg: if value is int) to ensure type
162
+ gdprApplies: !!deepAccess(bidderRequest, 'gdprConsent.gdprApplies'),
163
+ },
164
+ refererInfo: {
165
+ page: deepAccess(bidderRequest, 'refererInfo.page', ''),
166
+ },
167
+ uspConsent: deepAccess(bidderRequest, 'uspConsent', ''),
168
+ gppConsent: {
169
+ gppString: deepAccess(bidderRequest, 'gppConsent.gppString') ||
170
+ deepAccess(bidderRequest, 'ortb2.regs.gpp', ''),
171
+ applicableSections: deepAccess(bidderRequest, 'gppConsent.applicableSections') ||
172
+ deepAccess(bidderRequest, 'ortb2.regs.gpp_sid', []),
173
+ },
147
174
  },
148
- uspConsent: deepAccess(bidderRequest, 'uspConsent', ''),
149
- gppConsent: {
150
- gppString: deepAccess(bidderRequest, 'gppConsent.gppString') ||
151
- deepAccess(bidderRequest, 'ortb2.regs.gpp', ''),
152
- applicableSections: deepAccess(bidderRequest, 'gppConsent.applicableSections') ||
153
- deepAccess(bidderRequest, 'ortb2.regs.gpp_sid', []),
175
+ config: {
176
+ api_key: bid.params.apiKey
154
177
  },
155
- },
156
- config: {
157
- api_key: bid.params.apiKey
158
- },
159
- // Cast boolean in any case (value should be 0 or 1) to ensure type
160
- coppa: !!deepAccess(bidderRequest, 'ortb2.regs.coppa'),
161
- // In app context, we need to retrieve additional informations
162
- ...(!deepAccess(bidderRequest, 'ortb2.site') && !!deepAccess(bidderRequest, 'ortb2.app') ? {
163
- appBundle: deepAccess(bidderRequest, 'ortb2.app.bundle', ''),
164
- appStoreUrl: deepAccess(bidderRequest, 'ortb2.app.storeurl', ''),
165
- } : {}),
166
- ...(deepAccess(bidderRequest, 'ortb2.device') ? {
167
- device: {
168
- lmt: deepAccess(bidderRequest, 'ortb2.device.lmt', null),
169
- ifa: deepAccess(bidderRequest, 'ortb2.device.ifa', ''),
170
- atts: deepAccess(bidderRequest, 'ortb2.device.ext.atts', 0),
171
- },
172
- } : {}),
173
- request: {
174
- adUnitCode: deepAccess(bid, 'adUnitCode', ''),
175
- auctionId: deepAccess(bid, 'auctionId', ''),
176
- bidId: deepAccess(bid, 'bidId', ''),
177
- mediaTypes: {
178
- video: {
179
- api: bid.mediaTypes?.[VIDEO]?.api || [],
180
- mimes: bid.mediaTypes?.[VIDEO]?.mimes || [],
181
- minduration: bid.mediaTypes?.[VIDEO]?.minduration || 0,
182
- maxduration: bid.mediaTypes?.[VIDEO]?.maxduration || 0,
183
- playbackmethod: bid.mediaTypes?.[VIDEO]?.playbackmethod || [],
184
- plcmt: bid.mediaTypes?.[VIDEO]?.plcmt || 1, // Fallback to instream considering logic of `isBidRequestValid`
185
- protocols: bid.mediaTypes?.[VIDEO]?.protocols || [],
186
- skip: bid.mediaTypes?.[VIDEO]?.skip || 0,
187
- skipafter: bid.mediaTypes?.[VIDEO]?.skipafter || 0,
188
- skipmin: bid.mediaTypes?.[VIDEO]?.skipmin || 0,
189
- startdelay: bid.mediaTypes?.[VIDEO]?.startdelay || 0,
190
- w: bid.mediaTypes?.[VIDEO]?.w || 0,
191
- h: bid.mediaTypes?.[VIDEO]?.h || 0,
178
+ // Cast boolean in any case (value should be 0 or 1) to ensure type
179
+ coppa: !!deepAccess(bidderRequest, 'ortb2.regs.coppa'),
180
+ // In app context, we need to retrieve additional informations
181
+ ...(!deepAccess(bidderRequest, 'ortb2.site') && !!deepAccess(bidderRequest, 'ortb2.app') ? {
182
+ appBundle: deepAccess(bidderRequest, 'ortb2.app.bundle', ''),
183
+ appStoreUrl: deepAccess(bidderRequest, 'ortb2.app.storeurl', ''),
184
+ } : {}),
185
+ ...(deepAccess(bidderRequest, 'ortb2.device') ? {
186
+ device: {
187
+ lmt: deepAccess(bidderRequest, 'ortb2.device.lmt', null),
188
+ ifa: deepAccess(bidderRequest, 'ortb2.device.ifa', ''),
189
+ atts: deepAccess(bidderRequest, 'ortb2.device.ext.atts', 0),
190
+ },
191
+ } : {}),
192
+ request: {
193
+ adUnitCode: deepAccess(bid, 'adUnitCode', ''),
194
+ auctionId: deepAccess(bid, 'auctionId', ''),
195
+ bidId: deepAccess(bid, 'bidId', ''),
196
+ mediaTypes: {
197
+ video: {
198
+ api: bid.mediaTypes?.[VIDEO]?.api || [],
199
+ mimes: bid.mediaTypes?.[VIDEO]?.mimes || [],
200
+ minduration: bid.mediaTypes?.[VIDEO]?.minduration || 0,
201
+ maxduration: bid.mediaTypes?.[VIDEO]?.maxduration || 0,
202
+ playbackmethod: bid.mediaTypes?.[VIDEO]?.playbackmethod || [],
203
+ plcmt: bid.mediaTypes?.[VIDEO]?.plcmt,
204
+ protocols: bid.mediaTypes?.[VIDEO]?.protocols || [],
205
+ skip: bid.mediaTypes?.[VIDEO]?.skip || 0,
206
+ skipafter: bid.mediaTypes?.[VIDEO]?.skipafter || 0,
207
+ skipmin: bid.mediaTypes?.[VIDEO]?.skipmin || 0,
208
+ startdelay: bid.mediaTypes?.[VIDEO]?.startdelay,
209
+ w: bid.mediaTypes?.[VIDEO]?.w || 0,
210
+ h: bid.mediaTypes?.[VIDEO]?.h || 0,
211
+ },
192
212
  },
213
+ sizes: bid.sizes || [],
193
214
  },
194
- sizes: bid.sizes || [],
215
+ video_metadata: getVideoMetadata(bid, bidderRequest),
195
216
  },
196
- video_metadata: getVideoMetadata(bid, bidderRequest),
197
- },
198
- options: {
199
- withCredentials: true,
200
- crossOrigin: true,
201
- },
202
- })),
217
+ options: {
218
+ withCredentials: allowCookieReading,
219
+ crossOrigin: true,
220
+ },
221
+ }));
222
+ },
203
223
 
204
224
  /**
205
225
  * Map the response from the server into a list of bids.
@@ -31,6 +31,7 @@ export function disableDebugging({hook, logger}) {
31
31
  }
32
32
  }
33
33
 
34
+ // eslint-disable-next-line prebid/no-global
34
35
  function saveDebuggingConfig(debugConfig, {sessionStorage = window.sessionStorage, DEBUG_KEY} = {}) {
35
36
  if (!debugConfig.enabled) {
36
37
  try {
@@ -49,6 +50,7 @@ function saveDebuggingConfig(debugConfig, {sessionStorage = window.sessionStorag
49
50
  }
50
51
  }
51
52
 
53
+ // eslint-disable-next-line prebid/no-global
52
54
  export function getConfig(debugging, {getStorage = () => window.sessionStorage, DEBUG_KEY, config, hook, logger} = {}) {
53
55
  if (debugging == null) return;
54
56
  let sessionStorage;
@@ -70,6 +72,7 @@ export function getConfig(debugging, {getStorage = () => window.sessionStorage,
70
72
  export function sessionLoader({DEBUG_KEY, storage, config, hook, logger}) {
71
73
  let overrides;
72
74
  try {
75
+ // eslint-disable-next-line prebid/no-global
73
76
  storage = storage || window.sessionStorage;
74
77
  overrides = JSON.parse(storage.getItem(DEBUG_KEY));
75
78
  } catch (e) {
@@ -2,8 +2,18 @@
2
2
  * This module adds [DFP support]{@link https://www.doubleclickbygoogle.com/} for Video to Prebid.
3
3
  */
4
4
 
5
- import {registerVideoSupport} from '../src/adServerManager.js';
6
- import {targeting} from '../src/targeting.js';
5
+ import { DEFAULT_DFP_PARAMS, DFP_ENDPOINT, setGdprConsent } from '../libraries/dfpUtils/dfpUtils.js';
6
+ import { getSignals } from '../libraries/gptUtils/gptUtils.js';
7
+ import { registerVideoSupport } from '../src/adServerManager.js';
8
+ import { gdprDataHandler } from '../src/adapterManager.js';
9
+ import { getPPID } from '../src/adserver.js';
10
+ import { auctionManager } from '../src/auctionManager.js';
11
+ import { config } from '../src/config.js';
12
+ import { EVENTS } from '../src/constants.js';
13
+ import * as events from '../src/events.js';
14
+ import { getHook } from '../src/hook.js';
15
+ import { getRefererInfo } from '../src/refererDetection.js';
16
+ import { targeting } from '../src/targeting.js';
7
17
  import {
8
18
  buildUrl,
9
19
  deepAccess,
@@ -12,19 +22,8 @@ import {
12
22
  isNumber,
13
23
  logError,
14
24
  parseSizesInput,
15
- parseUrl,
16
- uniques
25
+ parseUrl
17
26
  } from '../src/utils.js';
18
- import {config} from '../src/config.js';
19
- import {getHook} from '../src/hook.js';
20
- import {auctionManager} from '../src/auctionManager.js';
21
- import {gdprDataHandler} from '../src/adapterManager.js';
22
- import * as events from '../src/events.js';
23
- import {EVENTS} from '../src/constants.js';
24
- import {getPPID} from '../src/adserver.js';
25
- import {getRefererInfo} from '../src/refererDetection.js';
26
- import {CLIENT_SECTIONS} from '../src/fpd/oneClient.js';
27
- import {DEFAULT_DFP_PARAMS, DFP_ENDPOINT} from '../libraries/dfpUtils/dfpUtils.js';
28
27
  /**
29
28
  * @typedef {Object} DfpVideoParams
30
29
  *
@@ -115,11 +114,7 @@ export function buildDfpVideoUrl(options) {
115
114
  const descriptionUrl = getDescriptionUrl(bid, options, 'params');
116
115
  if (descriptionUrl) { queryParams.description_url = descriptionUrl; }
117
116
  const gdprConsent = gdprDataHandler.getConsentData();
118
- if (gdprConsent) {
119
- if (typeof gdprConsent.gdprApplies === 'boolean') { queryParams.gdpr = Number(gdprConsent.gdprApplies); }
120
- if (gdprConsent.consentString) { queryParams.gdpr_consent = gdprConsent.consentString; }
121
- if (gdprConsent.addtlConsent) { queryParams.addtl_consent = gdprConsent.addtlConsent; }
122
- }
117
+ setGdprConsent(gdprConsent, queryParams);
123
118
 
124
119
  if (!queryParams.ppid) {
125
120
  const ppid = getPPID();
@@ -171,20 +166,7 @@ export function buildDfpVideoUrl(options) {
171
166
  const fpd = auctionManager.index.getBidRequest(options.bid || {})?.ortb2 ??
172
167
  auctionManager.index.getAuction(options.bid || {})?.getFPD()?.global;
173
168
 
174
- function getSegments(sections, segtax) {
175
- return sections
176
- .flatMap(section => deepAccess(fpd, section) || [])
177
- .filter(datum => datum.ext?.segtax === segtax)
178
- .flatMap(datum => datum.segment?.map(seg => seg.id))
179
- .filter(ob => ob)
180
- .filter(uniques)
181
- }
182
-
183
- const signals = Object.entries({
184
- IAB_AUDIENCE_1_1: getSegments(['user.data'], 4),
185
- IAB_CONTENT_2_2: getSegments(CLIENT_SECTIONS.map(section => `${section}.content.data`), 6)
186
- }).map(([taxonomy, values]) => values.length ? {taxonomy, values} : null)
187
- .filter(ob => ob);
169
+ const signals = getSignals(fpd);
188
170
 
189
171
  if (signals.length) {
190
172
  queryParams.ppsj = btoa(JSON.stringify({
@@ -1,7 +1,7 @@
1
1
  import {submodule} from '../src/hook.js';
2
2
  import {buildUrl, deepAccess, formatQS, logError, parseSizesInput} from '../src/utils.js';
3
3
  import {auctionManager} from '../src/auctionManager.js';
4
- import {DEFAULT_DFP_PARAMS, DFP_ENDPOINT} from '../libraries/dfpUtils/dfpUtils.js';
4
+ import {DEFAULT_DFP_PARAMS, DFP_ENDPOINT, setGdprConsent} from '../libraries/dfpUtils/dfpUtils.js';
5
5
  import {gdprDataHandler} from '../src/consentHandler.js';
6
6
  import {registerVideoSupport} from '../src/adServerManager.js';
7
7
 
@@ -79,11 +79,7 @@ export function buildAdpodVideoUrl({code, params, callback} = {}) {
79
79
  );
80
80
 
81
81
  const gdprConsent = gdprDataHandler.getConsentData();
82
- if (gdprConsent) {
83
- if (typeof gdprConsent.gdprApplies === 'boolean') { queryParams.gdpr = Number(gdprConsent.gdprApplies); }
84
- if (gdprConsent.consentString) { queryParams.gdpr_consent = gdprConsent.consentString; }
85
- if (gdprConsent.addtlConsent) { queryParams.addtl_consent = gdprConsent.addtlConsent; }
86
- }
82
+ setGdprConsent(gdprConsent, queryParams);
87
83
 
88
84
  const masterTag = buildUrl({
89
85
  ...DFP_ENDPOINT,
@@ -101,6 +101,8 @@ export function getProfileApiUrl(customeUrl, enableReadFpid) {
101
101
 
102
102
  export function readFpidFromLocalStrage() {
103
103
  try {
104
+ // TODO: use storageManager
105
+ // eslint-disable-next-line prebid/no-global
104
106
  const fpid = window.localStorage.getItem('ope_fpid');
105
107
  if (fpid) {
106
108
  return fpid;
@@ -3,6 +3,10 @@ import { getStorageManager } from '../src/storageManager.js';
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
4
  import { BANNER, NATIVE } from '../src/mediaTypes.js';
5
5
  import { getHLen, getHC, getDM } from '../src/fpd/navigator.js';
6
+ import { getPageTitle, getPageDescription, getPageKeywords, getConnectionDownLink, getReferrer } from '../libraries/fpdUtils/pageInfo.js';
7
+ import { getDevice, getScreenSize } from '../libraries/fpdUtils/deviceInfo.js';
8
+ import { getBidFloor } from '../libraries/currencyUtils/floor.js';
9
+ import { transformSizes, normalAdSize } from '../libraries/sizeUtils/tranformSize.js';
6
10
 
7
11
  /**
8
12
  * @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
@@ -22,6 +26,9 @@ const MEDIATYPE = [BANNER, NATIVE];
22
26
  const COOKIE_KEY_SSPPID = '_ss_pp_id';
23
27
  export const COOKIE_KEY_MGUID = '__mguid_';
24
28
  const COOKIE_KEY_PMGUID = '__pmguid_';
29
+ const COOKIE_KEY_PBUID = 'pub_pp_tag';
30
+ const STORAGE_KEY_FTUID = 'fluct_ppUUIDv4';
31
+ const STORAGE_KEY_IMUID = '__im_ppid';
25
32
  const COOKIE_RETENTION_TIME = 365 * 24 * 60 * 60 * 1000; // 1 year
26
33
  const COOKY_SYNC_IFRAME_URL = 'https://asset.popin.cc/js/cookieSync.html';
27
34
  export const THIRD_PARTY_COOKIE_ORIGIN = 'https://asset.popin.cc';
@@ -68,64 +75,6 @@ const NATIVERET = {
68
75
  ext: {},
69
76
  };
70
77
 
71
- /**
72
- * get page title111
73
- * @returns {string}
74
- */
75
-
76
- export function getPageTitle(win = window) {
77
- try {
78
- const ogTitle = win.top.document.querySelector('meta[property="og:title"]')
79
- return win.top.document.title || (ogTitle && ogTitle.content) || '';
80
- } catch (e) {
81
- const ogTitle = document.querySelector('meta[property="og:title"]')
82
- return document.title || (ogTitle && ogTitle.content) || '';
83
- }
84
- }
85
-
86
- /**
87
- * get page description
88
- * @returns {string}
89
- */
90
- export function getPageDescription(win = window) {
91
- let element;
92
-
93
- try {
94
- element = win.top.document.querySelector('meta[name="description"]') ||
95
- win.top.document.querySelector('meta[property="og:description"]')
96
- } catch (e) {
97
- element = document.querySelector('meta[name="description"]') ||
98
- document.querySelector('meta[property="og:description"]')
99
- }
100
-
101
- return (element && element.content) || '';
102
- }
103
-
104
- /**
105
- * get page keywords
106
- * @returns {string}
107
- */
108
- export function getPageKeywords(win = window) {
109
- let element;
110
-
111
- try {
112
- element = win.top.document.querySelector('meta[name="keywords"]');
113
- } catch (e) {
114
- element = document.querySelector('meta[name="keywords"]');
115
- }
116
-
117
- return (element && element.content) || '';
118
- }
119
-
120
- /**
121
- * get connection downlink
122
- * @returns {number}
123
- */
124
- export function getConnectionDownLink(win = window) {
125
- const nav = win.navigator || {};
126
- return nav && nav.connection && nav.connection.downlink >= 0 ? nav.connection.downlink.toString() : undefined;
127
- }
128
-
129
78
  /**
130
79
  * get pmg uid
131
80
  * 获取并生成用户的id
@@ -140,7 +89,7 @@ export const getPmgUID = () => {
140
89
  }
141
90
  // Extend the expiration time of pmguid
142
91
  try {
143
- storage.setCookie(COOKIE_KEY_PMGUID, pmgUid, getCurrentTimeToUTCString());
92
+ storage.setCookie(COOKIE_KEY_PMGUID, pmgUid, getCookieTimeToUTCString());
144
93
  } catch (e) {}
145
94
  return pmgUid;
146
95
  };
@@ -166,150 +115,14 @@ function getKv(obj, ...keys) {
166
115
  return o;
167
116
  }
168
117
 
169
- /**
170
- * get device
171
- * @return {boolean}
172
- */
173
- function getDevice() {
174
- let check = false;
175
- (function (a) {
176
- let reg1 = new RegExp(
177
- [
178
- '(android|bbd+|meego)',
179
- '.+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
180
- '|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone',
181
- '|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap',
182
- '|windows ce|xda|xiino|android|ipad|playbook|silk',
183
- ].join(''),
184
- 'i'
185
- );
186
- let reg2 = new RegExp(
187
- [
188
- '1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)',
189
- '|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )',
190
- '|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell',
191
- '|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)',
192
- '|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene',
193
- '|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c',
194
- '|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom',
195
- '|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)',
196
- '|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)',
197
- '|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]',
198
- '|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)',
199
- '|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio',
200
- '|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms',
201
- '|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al',
202
- '|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)',
203
- '|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|',
204
- 'v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)',
205
- '|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-',
206
- '|your|zeto|zte-',
207
- ].join(''),
208
- 'i'
209
- );
210
- if (reg1.test(a) || reg2.test(a.substr(0, 4))) {
211
- check = true;
212
- }
213
- })(navigator.userAgent || navigator.vendor || window.opera);
214
- return check;
215
- }
216
-
217
- /**
218
- * get BidFloor
219
- * @param {*} bid
220
- * @param {*} mediaType
221
- * @param {*} sizes
222
- * @returns
223
- */
224
- function getBidFloor(bid) {
225
- if (!utils.isFn(bid.getFloor)) {
226
- return utils.deepAccess(bid, 'params.bidfloor', 0);
227
- }
228
-
229
- try {
230
- const bidFloor = bid.getFloor({
231
- currency: 'USD',
232
- mediaType: '*',
233
- size: '*',
234
- });
235
- return bidFloor.floor;
236
- } catch (_) {
237
- return 0;
238
- }
239
- }
240
-
241
- /**
242
- * get sizes for rtb
243
- * @param {Array|Object} requestSizes
244
- * @return {Object}
245
- */
246
- function transformSizes(requestSizes) {
247
- let sizes = [];
248
- let sizeObj = {};
249
-
250
- if (
251
- utils.isArray(requestSizes) &&
252
- requestSizes.length === 2 &&
253
- !utils.isArray(requestSizes[0])
254
- ) {
255
- sizeObj.width = parseInt(requestSizes[0], 10);
256
- sizeObj.height = parseInt(requestSizes[1], 10);
257
- sizes.push(sizeObj);
258
- } else if (typeof requestSizes === 'object') {
259
- for (let i = 0; i < requestSizes.length; i++) {
260
- let size = requestSizes[i];
261
- sizeObj = {};
262
- sizeObj.width = parseInt(size[0], 10);
263
- sizeObj.height = parseInt(size[1], 10);
264
- sizes.push(sizeObj);
265
- }
266
- }
267
-
268
- return sizes;
269
- }
270
-
271
118
  // Support sizes
272
- const popInAdSize = [
273
- { w: 300, h: 250 },
274
- { w: 300, h: 600 },
275
- { w: 728, h: 90 },
276
- { w: 970, h: 250 },
277
- { w: 320, h: 50 },
278
- { w: 160, h: 600 },
279
- { w: 320, h: 180 },
280
- { w: 320, h: 100 },
281
- { w: 336, h: 280 },
282
- ];
283
-
284
- /**
285
- * get screen size
286
- *
287
- * @returns {Array} eg: "['widthxheight']"
288
- */
289
- function getScreenSize() {
290
- return utils.parseSizesInput([window.screen.width, window.screen.height]);
291
- }
119
+ const popInAdSize = normalAdSize;
292
120
 
293
121
  /**
294
- * @param {BidRequest} bidRequest
295
- * @param bidderRequest
296
- * @returns {string}
297
- */
298
- function getReferrer(bidRequest = {}, bidderRequest = {}) {
299
- let pageUrl;
300
- if (bidRequest.params && bidRequest.params.referrer) {
301
- pageUrl = bidRequest.params.referrer;
302
- } else {
303
- pageUrl = utils.deepAccess(bidderRequest, 'refererInfo.page');
304
- }
305
- return pageUrl;
306
- }
307
-
308
- /**
309
- * get current time to UTC string
122
+ * get cookie time to UTC string
310
123
  * @returns utc string
311
124
  */
312
- export function getCurrentTimeToUTCString() {
125
+ export function getCookieTimeToUTCString() {
313
126
  const date = new Date();
314
127
  date.setTime(date.getTime() + COOKIE_RETENTION_TIME);
315
128
  return date.toUTCString();
@@ -382,9 +195,8 @@ function getItems(validBidRequests, bidderRequest) {
382
195
  }
383
196
  }
384
197
  if (!matchSize) {
385
- matchSize = sizes[0]
386
- ? { h: sizes[0].height || 0, w: sizes[0].width || 0 }
387
- : { h: 0, w: 0 };
198
+ const { height = 0, width = 0 } = sizes[0] || {};
199
+ matchSize = { h: height, w: width };
388
200
  }
389
201
  ret = {
390
202
  id: id,
@@ -424,7 +236,7 @@ export const buildUTMTagData = (url) => {
424
236
  });
425
237
  UTMValue = JSON.parse(storage.getCookie(UTM_KEY) || '{}');
426
238
  Object.assign(UTMValue, UTMParams);
427
- storage.setCookie(UTM_KEY, JSON.stringify(UTMValue), getCurrentTimeToUTCString());
239
+ storage.setCookie(UTM_KEY, JSON.stringify(UTMValue), getCookieTimeToUTCString());
428
240
  }
429
241
 
430
242
  /**
@@ -435,10 +247,10 @@ export const buildUTMTagData = (url) => {
435
247
  * @return {Object}
436
248
  */
437
249
  function getParam(validBidRequests, bidderRequest) {
438
- const pubcid = utils.deepAccess(validBidRequests[0], 'crumbs.pubcid');
439
250
  const sharedid =
440
251
  utils.deepAccess(validBidRequests[0], 'userId.sharedid.id') ||
441
- utils.deepAccess(validBidRequests[0], 'userId.pubcid');
252
+ utils.deepAccess(validBidRequests[0], 'userId.pubcid') ||
253
+ utils.deepAccess(validBidRequests[0], 'crumbs.pubcid');
442
254
  const eids = validBidRequests[0].userIdAsEids || validBidRequests[0].userId;
443
255
 
444
256
  let isMobile = getDevice() ? 1 : 0;
@@ -466,10 +278,13 @@ function getParam(validBidRequests, bidderRequest) {
466
278
  firstPartyData,
467
279
  ssppid: storage.getCookie(COOKIE_KEY_SSPPID) || undefined,
468
280
  pmguid: getPmgUID(),
281
+ ssftUid: storage.getDataFromLocalStorage(STORAGE_KEY_FTUID) || undefined,
282
+ ssimUid: storage.getDataFromLocalStorage(STORAGE_KEY_IMUID) || undefined,
283
+ sspbid: storage.getCookie(COOKIE_KEY_PBUID) || undefined,
469
284
  tpData,
470
285
  utm: storage.getCookie(UTM_KEY),
471
286
  page: {
472
- title: title ? title.slice(0, 100) : undefined,
287
+ title: title ? title.slice(0, 150) : undefined,
473
288
  desc: desc ? desc.slice(0, 300) : undefined,
474
289
  keywords: keywords ? keywords.slice(0, 100) : undefined,
475
290
  hLen: getHLen(),
@@ -504,7 +319,7 @@ function getParam(validBidRequests, bidderRequest) {
504
319
  ext,
505
320
  user: {
506
321
  buyeruid: storage.getCookie(COOKIE_KEY_MGUID) || undefined,
507
- id: sharedid || pubcid,
322
+ id: sharedid,
508
323
  },
509
324
  tmax: timeout,
510
325
  site: {
@@ -565,14 +380,15 @@ export const spec = {
565
380
  * @return ServerRequest Info describing the request to the server.
566
381
  */
567
382
  buildRequests: function (validBidRequests, bidderRequest) {
568
- if (!globals['token']) return;
383
+ const pbToken = globals['token'];
384
+ if (!pbToken) return;
569
385
 
570
386
  let payload = getParam(validBidRequests, bidderRequest);
571
-
572
387
  const payloadString = JSON.stringify(payload);
388
+
573
389
  return {
574
390
  method: 'POST',
575
- url: ENDPOINT_URL + globals['token'],
391
+ url: `${ENDPOINT_URL}${pbToken}`,
576
392
  data: payloadString,
577
393
  };
578
394
  },
@@ -696,7 +512,7 @@ export const spec = {
696
512
 
697
513
  const response = event.data;
698
514
  if (!response.optout && response.mguid) {
699
- storage.setCookie(COOKIE_KEY_MGUID, response.mguid, getCurrentTimeToUTCString());
515
+ storage.setCookie(COOKIE_KEY_MGUID, response.mguid, getCookieTimeToUTCString());
700
516
  }
701
517
  }, true);
702
518
  return [