prebid.js 5.14.0 → 5.18.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 (397) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/allowedModules.js +2 -1
  5. package/integrationExamples/gpt/afpExample.html +242 -0
  6. package/integrationExamples/gpt/afpGamExample.html +152 -0
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +126 -0
  8. package/modules/.submodules.json +29 -27
  9. package/modules/33acrossBidAdapter.js +23 -20
  10. package/modules/a4gBidAdapter.js +3 -3
  11. package/modules/ablidaBidAdapter.js +2 -2
  12. package/modules/adWMGBidAdapter.js +4 -4
  13. package/modules/adagioAnalyticsAdapter.js +4 -4
  14. package/modules/adagioBidAdapter.js +85 -82
  15. package/modules/adbookpspBidAdapter.js +56 -54
  16. package/modules/adfBidAdapter.js +24 -16
  17. package/modules/adgenerationBidAdapter.js +42 -18
  18. package/modules/adhashBidAdapter.js +105 -0
  19. package/modules/adhashBidAdapter.md +1 -1
  20. package/modules/adkernelAdnAnalyticsAdapter.js +6 -6
  21. package/modules/adkernelAdnBidAdapter.js +23 -23
  22. package/modules/adkernelBidAdapter.js +49 -44
  23. package/modules/adlooxAdServerVideo.js +26 -26
  24. package/modules/adlooxAnalyticsAdapter.js +38 -35
  25. package/modules/adlooxRtdProvider.js +49 -46
  26. package/modules/admanBidAdapter.js +4 -4
  27. package/modules/admixerBidAdapter.js +13 -2
  28. package/modules/admixerIdSystem.js +4 -4
  29. package/modules/adnowBidAdapter.js +4 -4
  30. package/modules/adnuntiusBidAdapter.js +6 -5
  31. package/modules/adoceanBidAdapter.js +10 -10
  32. package/modules/adpartnerBidAdapter.js +3 -3
  33. package/modules/adpod.js +45 -42
  34. package/modules/adprimeBidAdapter.js +4 -4
  35. package/modules/adqueryBidAdapter.js +204 -0
  36. package/modules/adqueryBidAdapter.md +32 -0
  37. package/modules/adrelevantisBidAdapter.js +30 -27
  38. package/modules/adriverBidAdapter.js +13 -13
  39. package/modules/adtargetBidAdapter.js +24 -24
  40. package/modules/adtelligentBidAdapter.js +29 -29
  41. package/modules/adtrueBidAdapter.js +35 -35
  42. package/modules/aduptechBidAdapter.js +10 -10
  43. package/modules/advangelistsBidAdapter.js +14 -14
  44. package/modules/adxcgAnalyticsAdapter.js +5 -5
  45. package/modules/adxcgBidAdapter.js +56 -56
  46. package/modules/adxpremiumAnalyticsAdapter.js +17 -17
  47. package/modules/adyoulikeBidAdapter.js +11 -11
  48. package/modules/afpBidAdapter.js +166 -0
  49. package/modules/afpBidAdapter.md +348 -0
  50. package/modules/ajaBidAdapter.js +12 -12
  51. package/modules/akamaiDAPIdSystem.js +9 -9
  52. package/modules/aniviewBidAdapter.js +2 -2
  53. package/modules/aolBidAdapter.js +15 -14
  54. package/modules/apacdexBidAdapter.js +16 -16
  55. package/modules/appnexusBidAdapter.js +59 -59
  56. package/modules/apstreamBidAdapter.js +5 -5
  57. package/modules/asoBidAdapter.js +30 -30
  58. package/modules/astraoneBidAdapter.js +2 -2
  59. package/modules/atsAnalyticsAdapter.js +35 -30
  60. package/modules/audiencerunBidAdapter.js +15 -15
  61. package/modules/automatadBidAdapter.js +2 -2
  62. package/modules/axonixBidAdapter.js +7 -7
  63. package/modules/beachfrontBidAdapter.js +23 -23
  64. package/modules/beopBidAdapter.js +22 -22
  65. package/modules/bidViewabilityIO.js +7 -7
  66. package/modules/bidglassBidAdapter.js +8 -8
  67. package/modules/bidscubeBidAdapter.js +3 -3
  68. package/modules/bizzclickBidAdapter.js +10 -10
  69. package/modules/bliinkBidAdapter.js +58 -32
  70. package/modules/bliinkBidAdapter.md +29 -6
  71. package/modules/bluebillywigBidAdapter.js +30 -30
  72. package/modules/boldwinBidAdapter.js +4 -4
  73. package/modules/braveBidAdapter.js +5 -5
  74. package/modules/bridgewellBidAdapter.js +5 -5
  75. package/modules/brightMountainMediaBidAdapter.js +10 -10
  76. package/modules/brightcomBidAdapter.js +18 -18
  77. package/modules/britepoolIdSystem.js +7 -7
  78. package/modules/browsiRtdProvider.js +8 -8
  79. package/modules/bucksenseBidAdapter.js +9 -9
  80. package/modules/buzzoolaBidAdapter.js +4 -4
  81. package/modules/byDataAnalyticsAdapter.js +12 -12
  82. package/modules/ccxBidAdapter.js +38 -38
  83. package/modules/cleanmedianetBidAdapter.js +9 -9
  84. package/modules/clickforceBidAdapter.js +4 -4
  85. package/modules/cointrafficBidAdapter.js +4 -4
  86. package/modules/coinzillaBidAdapter.js +2 -2
  87. package/modules/colossussspBidAdapter.js +7 -3
  88. package/modules/concertAnalyticsAdapter.js +3 -3
  89. package/modules/concertBidAdapter.js +16 -17
  90. package/modules/connectadBidAdapter.js +13 -13
  91. package/modules/consentManagement.js +29 -28
  92. package/modules/consentManagementUsp.js +14 -14
  93. package/modules/consumableBidAdapter.js +3 -3
  94. package/modules/contentexchangeBidAdapter.js +5 -5
  95. package/modules/conversantBidAdapter.js +32 -31
  96. package/modules/cpmstarBidAdapter.js +8 -9
  97. package/modules/craftBidAdapter.js +10 -10
  98. package/modules/criteoBidAdapter.js +16 -16
  99. package/modules/criteoIdSystem.js +5 -5
  100. package/modules/currency.js +18 -18
  101. package/modules/cwireBidAdapter.js +272 -0
  102. package/modules/cwireBidAdapter.md +43 -0
  103. package/modules/datablocksBidAdapter.js +12 -12
  104. package/modules/deepintentBidAdapter.js +13 -13
  105. package/modules/dgkeywordRtdProvider.js +10 -11
  106. package/modules/districtmDMXBidAdapter.js +15 -15
  107. package/modules/dmdIdSystem.js +5 -5
  108. package/modules/docereeBidAdapter.js +9 -9
  109. package/modules/dspxBidAdapter.js +5 -5
  110. package/modules/ebdrBidAdapter.js +9 -9
  111. package/modules/emx_digitalBidAdapter.js +23 -23
  112. package/modules/enrichmentFpdModule.js +10 -9
  113. package/modules/eplanningAnalyticsAdapter.js +2 -2
  114. package/modules/eplanningBidAdapter.js +10 -10
  115. package/modules/etargetBidAdapter.js +4 -4
  116. package/modules/express.js +9 -10
  117. package/modules/fabrickIdSystem.js +6 -6
  118. package/modules/feedadBidAdapter.js +5 -5
  119. package/modules/fintezaAnalyticsAdapter.js +4 -4
  120. package/modules/flocIdSystem.js +5 -5
  121. package/modules/fluctBidAdapter.js +6 -5
  122. package/modules/freewheel-sspBidAdapter.js +6 -6
  123. package/modules/gamoshiBidAdapter.js +22 -22
  124. package/modules/gdprEnforcement.js +13 -14
  125. package/modules/getintentBidAdapter.js +3 -4
  126. package/modules/glimpseBidAdapter.js +160 -48
  127. package/modules/glimpseBidAdapter.md +11 -74
  128. package/modules/gmosspBidAdapter.js +17 -17
  129. package/modules/gnetBidAdapter.js +5 -5
  130. package/modules/googleAnalyticsAdapter.js +6 -6
  131. package/modules/gothamadsBidAdapter.js +9 -9
  132. package/modules/gptPreAuction.js +7 -7
  133. package/modules/gridBidAdapter.js +15 -16
  134. package/modules/gridNMBidAdapter.js +214 -63
  135. package/modules/growadvertisingBidAdapter.js +7 -8
  136. package/modules/gumgumBidAdapter.js +19 -13
  137. package/modules/h12mediaBidAdapter.js +12 -12
  138. package/modules/haloIdSystem.js +8 -8
  139. package/modules/hybridBidAdapter.js +7 -7
  140. package/modules/iasRtdProvider.js +79 -63
  141. package/modules/id5IdSystem.js +24 -24
  142. package/modules/idImportLibrary.js +35 -35
  143. package/modules/idxIdSystem.js +3 -3
  144. package/modules/impactifyBidAdapter.js +10 -10
  145. package/modules/improvedigitalBidAdapter.js +36 -36
  146. package/modules/imuIdSystem.js +6 -6
  147. package/modules/inmarBidAdapter.js +2 -2
  148. package/modules/innityBidAdapter.js +3 -3
  149. package/modules/inskinBidAdapter.js +14 -2
  150. package/modules/inskinBidAdapter.md +5 -4
  151. package/modules/instreamTracking.js +5 -5
  152. package/modules/integr8BidAdapter.js +4 -4
  153. package/modules/intentIqIdSystem.js +7 -7
  154. package/modules/interactiveOffersBidAdapter.js +5 -5
  155. package/modules/invibesBidAdapter.js +53 -19
  156. package/modules/invisiblyAnalyticsAdapter.js +5 -5
  157. package/modules/iqmBidAdapter.js +19 -19
  158. package/modules/iqzoneBidAdapter.js +5 -5
  159. package/modules/ixBidAdapter.js +73 -73
  160. package/modules/jixieBidAdapter.js +6 -6
  161. package/modules/justpremiumBidAdapter.js +5 -1
  162. package/modules/kargoBidAdapter.js +16 -9
  163. package/modules/kargoBidAdapter.md +20 -0
  164. package/modules/kinessoIdSystem.js +8 -8
  165. package/modules/koblerBidAdapter.js +12 -12
  166. package/modules/konduitAnalyticsAdapter.js +4 -4
  167. package/modules/konduitWrapper.js +14 -14
  168. package/modules/krushmediaBidAdapter.js +4 -4
  169. package/modules/kubientBidAdapter.js +5 -5
  170. package/modules/limelightDigitalBidAdapter.js +4 -4
  171. package/modules/liveIntentIdSystem.js +4 -5
  172. package/modules/livewrappedAnalyticsAdapter.js +27 -15
  173. package/modules/livewrappedBidAdapter.js +7 -7
  174. package/modules/liveyieldAnalyticsAdapter.js +13 -13
  175. package/modules/lockerdomeBidAdapter.js +2 -2
  176. package/modules/loganBidAdapter.js +4 -4
  177. package/modules/lotamePanoramaIdSystem.js +13 -13
  178. package/modules/lunamediahbBidAdapter.js +2 -2
  179. package/modules/madvertiseBidAdapter.js +3 -3
  180. package/modules/marsmediaBidAdapter.js +26 -26
  181. package/modules/mathildeadsBidAdapter.js +5 -5
  182. package/modules/mediaforceBidAdapter.js +11 -11
  183. package/modules/mediakeysBidAdapter.js +444 -53
  184. package/modules/mediakeysBidAdapter.md +108 -0
  185. package/modules/medianetAnalyticsAdapter.js +48 -125
  186. package/modules/medianetBidAdapter.js +38 -33
  187. package/modules/medianetRtdProvider.js +7 -7
  188. package/modules/merkleIdSystem.js +19 -19
  189. package/modules/mgidBidAdapter.js +50 -50
  190. package/modules/microadBidAdapter.js +3 -3
  191. package/modules/multibid/index.js +15 -13
  192. package/modules/mwOpenLinkIdSystem.js +7 -7
  193. package/modules/mytargetBidAdapter.js +112 -0
  194. package/modules/nativoBidAdapter.js +46 -31
  195. package/modules/nativoBidAdapter.md +0 -1
  196. package/modules/naveggIdSystem.js +3 -3
  197. package/modules/nextMillenniumBidAdapter.js +6 -6
  198. package/modules/nextrollBidAdapter.js +375 -0
  199. package/modules/nobidBidAdapter.js +12 -11
  200. package/modules/novatiqIdSystem.js +8 -8
  201. package/modules/oguryBidAdapter.js +22 -6
  202. package/modules/oneVideoBidAdapter.js +20 -20
  203. package/modules/onomagicBidAdapter.js +16 -16
  204. package/modules/ooloAnalyticsAdapter.js +13 -13
  205. package/modules/openwebBidAdapter.js +26 -26
  206. package/modules/openxAnalyticsAdapter.js +33 -33
  207. package/modules/openxBidAdapter.js +29 -29
  208. package/modules/operaadsBidAdapter.js +53 -53
  209. package/modules/optimeraRtdProvider.js +9 -9
  210. package/modules/optoutBidAdapter.js +3 -3
  211. package/modules/orbidderBidAdapter.js +3 -3
  212. package/modules/outbrainBidAdapter.js +13 -13
  213. package/modules/ozoneBidAdapter.js +131 -131
  214. package/modules/padsquadBidAdapter.js +4 -4
  215. package/modules/parrableIdSystem.js +17 -17
  216. package/modules/pixfutureBidAdapter.js +45 -25
  217. package/modules/pixfutureBidAdapter.md +127 -0
  218. package/modules/prebidServerBidAdapter/index.js +109 -105
  219. package/modules/prebidmanagerAnalyticsAdapter.js +7 -7
  220. package/modules/priceFloors.js +47 -47
  221. package/modules/proxistoreBidAdapter.js +6 -8
  222. package/modules/pubCommonId.js +11 -11
  223. package/modules/pubProvidedIdSystem.js +3 -3
  224. package/modules/publinkIdSystem.js +23 -7
  225. package/modules/publinkIdSystem.md +7 -2
  226. package/modules/pubmaticAnalyticsAdapter.js +16 -16
  227. package/modules/pubmaticBidAdapter.js +109 -93
  228. package/modules/pubmaticBidAdapter.md +1 -1
  229. package/modules/pubperfAnalyticsAdapter.js +3 -3
  230. package/modules/pubwiseAnalyticsAdapter.js +6 -6
  231. package/modules/pubwiseBidAdapter.js +23 -23
  232. package/modules/pubxBidAdapter.js +2 -2
  233. package/modules/pubxaiAnalyticsAdapter.js +7 -7
  234. package/modules/pulsepointBidAdapter.js +13 -13
  235. package/modules/pxyzBidAdapter.js +7 -7
  236. package/modules/quantcastBidAdapter.js +16 -16
  237. package/modules/radsBidAdapter.js +5 -5
  238. package/modules/realvuAnalyticsAdapter.js +5 -7
  239. package/modules/reconciliationRtdProvider.js +6 -6
  240. package/modules/relaidoBidAdapter.js +44 -38
  241. package/modules/resetdigitalBidAdapter.js +3 -4
  242. package/modules/revcontentBidAdapter.js +9 -9
  243. package/modules/rhythmoneBidAdapter.js +17 -16
  244. package/modules/richaudienceBidAdapter.js +9 -9
  245. package/modules/riseBidAdapter.js +26 -26
  246. package/modules/riseBidAdapter.md +1 -3
  247. package/modules/roxotAnalyticsAdapter.js +14 -14
  248. package/modules/rtbhouseBidAdapter.js +7 -7
  249. package/modules/rtbsapeBidAdapter.js +3 -4
  250. package/modules/rtdModule/index.js +3 -3
  251. package/modules/rubiconAnalyticsAdapter.js +82 -82
  252. package/modules/rubiconBidAdapter.js +72 -68
  253. package/modules/scaleableAnalyticsAdapter.js +2 -2
  254. package/modules/seedingAllianceBidAdapter.js +231 -0
  255. package/modules/seedtagBidAdapter.js +10 -10
  256. package/modules/sharedIdSystem.js +11 -11
  257. package/modules/sharethroughAnalyticsAdapter.js +8 -8
  258. package/modules/sharethroughBidAdapter.js +20 -27
  259. package/modules/showheroes-bsBidAdapter.js +23 -23
  260. package/modules/sigmoidAnalyticsAdapter.js +4 -5
  261. package/modules/sirdataRtdProvider.js +34 -34
  262. package/modules/sizeMappingV2.js +39 -39
  263. package/modules/slimcutBidAdapter.js +121 -0
  264. package/modules/smaatoBidAdapter.js +44 -44
  265. package/modules/smartadserverBidAdapter.js +7 -7
  266. package/modules/smartxBidAdapter.js +72 -72
  267. package/modules/smartyadsBidAdapter.js +2 -2
  268. package/modules/smilewantedBidAdapter.js +6 -6
  269. package/modules/sonobiAnalyticsAdapter.js +23 -23
  270. package/modules/sortableAnalyticsAdapter.js +5 -5
  271. package/modules/sortableBidAdapter.js +28 -28
  272. package/modules/sovrnAnalyticsAdapter.js +5 -5
  273. package/modules/sovrnBidAdapter.js +22 -22
  274. package/modules/spotxBidAdapter.js +97 -83
  275. package/modules/sspBCBidAdapter.js +216 -21
  276. package/modules/sspBCBidAdapter.md +1 -1
  277. package/modules/staqAnalyticsAdapter.js +9 -9
  278. package/modules/stroeerCoreBidAdapter.js +16 -16
  279. package/modules/sublimeBidAdapter.js +6 -6
  280. package/modules/talkadsBidAdapter.js +129 -0
  281. package/modules/talkadsBidAdapter.md +60 -0
  282. package/modules/tapadIdSystem.js +3 -3
  283. package/modules/tappxBidAdapter.js +63 -64
  284. package/modules/teadsBidAdapter.js +20 -20
  285. package/modules/telariaBidAdapter.js +17 -17
  286. package/modules/temedyaBidAdapter.js +4 -4
  287. package/modules/terceptAnalyticsAdapter.js +4 -4
  288. package/modules/theAdxBidAdapter.js +16 -16
  289. package/modules/timeoutRtdProvider.js +15 -15
  290. package/modules/tpmnBidAdapter.js +3 -3
  291. package/modules/trionBidAdapter.js +15 -15
  292. package/modules/tripleliftBidAdapter.js +27 -24
  293. package/modules/truereachBidAdapter.js +4 -4
  294. package/modules/trustxBidAdapter.js +22 -18
  295. package/modules/ucfunnelBidAdapter.js +3 -3
  296. package/modules/uid2IdSystem.js +6 -6
  297. package/modules/underdogmediaBidAdapter.js +4 -4
  298. package/modules/unicornBidAdapter.js +15 -15
  299. package/modules/unifiedIdSystem.js +4 -4
  300. package/modules/unrulyBidAdapter.js +16 -16
  301. package/modules/userId/eids.js +9 -9
  302. package/modules/userId/index.js +37 -35
  303. package/modules/validationFpdModule/index.js +15 -15
  304. package/modules/vdoaiBidAdapter.js +2 -2
  305. package/modules/verizonMediaIdSystem.js +5 -5
  306. package/modules/vidazooBidAdapter.js +5 -5
  307. package/modules/videobyteBidAdapter.js +24 -24
  308. package/modules/videoreachBidAdapter.js +7 -7
  309. package/modules/vidoomyBidAdapter.js +105 -22
  310. package/modules/viewdeosDXBidAdapter.js +17 -17
  311. package/modules/visxBidAdapter.js +21 -29
  312. package/modules/voxBidAdapter.js +7 -7
  313. package/modules/vuukleBidAdapter.js +2 -2
  314. package/modules/waardexBidAdapter.js +26 -26
  315. package/modules/weboramaRtdProvider.js +174 -0
  316. package/modules/weboramaRtdProvider.md +70 -0
  317. package/modules/winrBidAdapter.js +27 -27
  318. package/modules/wipesBidAdapter.js +2 -2
  319. package/modules/yahoosspBidAdapter.js +637 -0
  320. package/modules/yahoosspBidAdapter.md +795 -0
  321. package/modules/yieldlabBidAdapter.js +57 -12
  322. package/modules/yieldlabBidAdapter.md +16 -1
  323. package/modules/yieldliftBidAdapter.js +9 -9
  324. package/modules/yieldmoBidAdapter.js +64 -50
  325. package/modules/yieldoneAnalyticsAdapter.js +6 -6
  326. package/modules/yieldoneBidAdapter.js +11 -11
  327. package/modules/yuktamediaAnalyticsAdapter.js +15 -15
  328. package/modules/zeotapIdPlusIdSystem.js +2 -2
  329. package/modules/zetaBidAdapter.js +6 -6
  330. package/modules/zeta_global_sspBidAdapter.js +14 -14
  331. package/package.json +1 -1
  332. package/src/AnalyticsAdapter.js +6 -6
  333. package/src/Renderer.js +10 -8
  334. package/src/adapterManager.js +45 -42
  335. package/src/adloader.js +6 -6
  336. package/src/ajax.js +8 -9
  337. package/src/auction.js +26 -23
  338. package/src/bidfactory.js +2 -2
  339. package/src/config.js +52 -50
  340. package/src/cpmBucketManager.js +2 -2
  341. package/src/prebid.js +85 -81
  342. package/src/storageManager.js +5 -5
  343. package/src/targeting.js +25 -26
  344. package/src/userSync.js +35 -22
  345. package/src/videoCache.js +2 -2
  346. package/test/.eslintrc.js +2 -1
  347. package/test/spec/modules/adfBidAdapter_spec.js +55 -0
  348. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  349. package/test/spec/modules/adhashBidAdapter_spec.js +155 -0
  350. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  351. package/test/spec/modules/adqueryBidAdapter_spec.js +185 -0
  352. package/test/spec/modules/afpBidAdapter_spec.js +306 -0
  353. package/test/spec/modules/atsAnalyticsAdapter_spec.js +37 -2
  354. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  355. package/test/spec/modules/colossussspBidAdapter_spec.js +14 -6
  356. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  357. package/test/spec/modules/eplanningBidAdapter_spec.js +3 -3
  358. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  359. package/test/spec/modules/gridBidAdapter_spec.js +38 -2
  360. package/test/spec/modules/gridNMBidAdapter_spec.js +121 -47
  361. package/test/spec/modules/gumgumBidAdapter_spec.js +27 -6
  362. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  363. package/test/spec/modules/inskinBidAdapter_spec.js +10 -1
  364. package/test/spec/modules/invibesBidAdapter_spec.js +114 -2
  365. package/test/spec/modules/justpremiumBidAdapter_spec.js +16 -2
  366. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +33 -7
  367. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  368. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +39 -7
  369. package/test/spec/modules/medianetBidAdapter_spec.js +62 -1
  370. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  371. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  372. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  373. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  374. package/test/spec/modules/oguryBidAdapter_spec.js +120 -7
  375. package/test/spec/modules/publinkIdSystem_spec.js +42 -12
  376. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  377. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  378. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +100 -81
  379. package/test/spec/modules/rubiconAnalyticsSchema.json +5 -2
  380. package/test/spec/modules/seedingAllianceAdapter_spec.js +186 -0
  381. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  382. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  383. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  384. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  385. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  386. package/test/spec/modules/tappxBidAdapter_spec.js +39 -3
  387. package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -0
  388. package/test/spec/modules/trustxBidAdapter_spec.js +35 -2
  389. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  390. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  391. package/test/spec/modules/weboramaRtdProvider_spec.js +288 -0
  392. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  393. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  394. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  395. package/test/spec/unit/pbjs_api_spec.js +4 -0
  396. package/test/spec/userSync_spec.js +30 -2
  397. package/modules/turktelekomBidAdapter.md +0 -49
@@ -1,3 +1,4 @@
1
+ import { generateUUID, getParameterByName, logError, parseUrl, logInfo } from '../src/utils.js';
1
2
  import {ajaxBuilder} from '../src/ajax.js';
2
3
  import adapter from '../src/AnalyticsAdapter.js';
3
4
  import adapterManager from '../src/adapterManager.js';
@@ -11,13 +12,12 @@ const DEFAULT_EVENT_URL = 'https://endpoint.prebidmanager.com/endpoint'
11
12
  const analyticsType = 'endpoint';
12
13
  const analyticsName = 'Prebid Manager Analytics: ';
13
14
 
14
- var utils = require('../src/utils.js');
15
15
  var CONSTANTS = require('../src/constants.json');
16
16
  let ajax = ajaxBuilder(0);
17
17
 
18
18
  var _VERSION = 1;
19
19
  var initOptions = null;
20
- var _pageViewId = utils.generateUUID();
20
+ var _pageViewId = generateUUID();
21
21
  var _startAuction = 0;
22
22
  var _bidRequestTimeout = 0;
23
23
  let flushInterval;
@@ -76,7 +76,7 @@ function collectUtmTagData() {
76
76
  let pmUtmTags = {};
77
77
  try {
78
78
  utmTags.forEach(function (utmKey) {
79
- let utmValue = utils.getParameterByName(utmKey);
79
+ let utmValue = getParameterByName(utmKey);
80
80
  if (utmValue !== '') {
81
81
  newUtm = true;
82
82
  }
@@ -95,7 +95,7 @@ function collectUtmTagData() {
95
95
  });
96
96
  }
97
97
  } catch (e) {
98
- utils.logError(`${analyticsName}Error`, e);
98
+ logError(`${analyticsName}Error`, e);
99
99
  pmUtmTags['error_utm'] = 1;
100
100
  }
101
101
  return pmUtmTags;
@@ -106,7 +106,7 @@ function collectPageInfo() {
106
106
  domain: window.location.hostname,
107
107
  }
108
108
  if (document.referrer) {
109
- pageInfo.referrerDomain = utils.parseUrl(document.referrer).hostname;
109
+ pageInfo.referrerDomain = parseUrl(document.referrer).hostname;
110
110
  }
111
111
  return pageInfo;
112
112
  }
@@ -128,7 +128,7 @@ function flush() {
128
128
 
129
129
  ajax(
130
130
  initOptions.url,
131
- () => utils.logInfo(`${analyticsName} sent events batch`),
131
+ () => logInfo(`${analyticsName} sent events batch`),
132
132
  _VERSION + ':' + JSON.stringify(data),
133
133
  {
134
134
  contentType: 'text/plain',
@@ -215,7 +215,7 @@ function handleEvent(eventType, eventArgs) {
215
215
 
216
216
  function sendEvent(event) {
217
217
  _eventQueue.push(event);
218
- utils.logInfo(`${analyticsName}Event ${event.eventType}:`, event);
218
+ logInfo(`${analyticsName}Event ${event.eventType}:`, event);
219
219
 
220
220
  if (event.eventType === CONSTANTS.EVENTS.AUCTION_END) {
221
221
  flush();
@@ -1,6 +1,6 @@
1
+ import { parseUrl, deepAccess, parseGPTSingleSizeArray, getGptSlotInfoForAdUnitCode, deepSetValue, logWarn, deepClone, getParameterByName, generateUUID, logError, logInfo, isNumber, pick, debugTurnedOn } from '../src/utils.js';
1
2
  import { getGlobal } from '../src/prebidGlobal.js';
2
3
  import { config } from '../src/config.js';
3
- import * as utils from '../src/utils.js';
4
4
  import { ajaxBuilder } from '../src/ajax.js';
5
5
  import events from '../src/events.js';
6
6
  import CONSTANTS from '../src/constants.json';
@@ -60,13 +60,13 @@ function roundUp(number, precision) {
60
60
 
61
61
  let referrerHostname;
62
62
  function getHostNameFromReferer(referer) {
63
- referrerHostname = utils.parseUrl(referer, {noDecodeWholeURL: true}).hostname;
63
+ referrerHostname = parseUrl(referer, {noDecodeWholeURL: true}).hostname;
64
64
  return referrerHostname;
65
65
  }
66
66
 
67
67
  // First look into bidRequest!
68
68
  function getGptSlotFromBidRequest(bidRequest) {
69
- const isGam = utils.deepAccess(bidRequest, 'ortb2Imp.ext.data.adserver.name') === 'gam';
69
+ const isGam = deepAccess(bidRequest, 'ortb2Imp.ext.data.adserver.name') === 'gam';
70
70
  return isGam && bidRequest.ortb2Imp.ext.data.adserver.adslot;
71
71
  }
72
72
 
@@ -74,9 +74,9 @@ function getGptSlotFromBidRequest(bidRequest) {
74
74
  * @summary floor field types with their matching functions to resolve the actual matched value
75
75
  */
76
76
  export let fieldMatchingFunctions = {
77
- 'size': (bidRequest, bidResponse) => utils.parseGPTSingleSizeArray(bidResponse.size) || '*',
77
+ 'size': (bidRequest, bidResponse) => parseGPTSingleSizeArray(bidResponse.size) || '*',
78
78
  'mediaType': (bidRequest, bidResponse) => bidResponse.mediaType || 'banner',
79
- 'gptSlot': (bidRequest, bidResponse) => getGptSlotFromBidRequest(bidRequest) || utils.getGptSlotInfoForAdUnitCode(bidRequest.adUnitCode).gptSlot,
79
+ 'gptSlot': (bidRequest, bidResponse) => getGptSlotFromBidRequest(bidRequest) || getGptSlotInfoForAdUnitCode(bidRequest.adUnitCode).gptSlot,
80
80
  'domain': (bidRequest, bidResponse) => referrerHostname || getHostNameFromReferer(getRefererInfo().referer),
81
81
  'adUnitCode': (bidRequest, bidResponse) => bidRequest.adUnitCode
82
82
  }
@@ -101,17 +101,17 @@ function enumeratePossibleFieldValues(floorFields, bidObject, responseObject) {
101
101
  * Generates all possible rule matches and picks the first matching one.
102
102
  */
103
103
  export function getFirstMatchingFloor(floorData, bidObject, responseObject = {}) {
104
- let fieldValues = enumeratePossibleFieldValues(utils.deepAccess(floorData, 'schema.fields') || [], bidObject, responseObject);
104
+ let fieldValues = enumeratePossibleFieldValues(deepAccess(floorData, 'schema.fields') || [], bidObject, responseObject);
105
105
  if (!fieldValues.length) return { matchingFloor: floorData.default };
106
106
 
107
107
  // look to see if a request for this context was made already
108
108
  let matchingInput = fieldValues.map(field => field[0]).join('-');
109
109
  // if we already have gotten the matching rule from this matching input then use it! No need to look again
110
- let previousMatch = utils.deepAccess(floorData, `matchingInputs.${matchingInput}`);
110
+ let previousMatch = deepAccess(floorData, `matchingInputs.${matchingInput}`);
111
111
  if (previousMatch) {
112
112
  return {...previousMatch};
113
113
  }
114
- let allPossibleMatches = generatePossibleEnumerations(fieldValues, utils.deepAccess(floorData, 'schema.delimiter') || '|');
114
+ let allPossibleMatches = generatePossibleEnumerations(fieldValues, deepAccess(floorData, 'schema.delimiter') || '|');
115
115
  let matchingRule = find(allPossibleMatches, hashValue => floorData.values.hasOwnProperty(hashValue));
116
116
 
117
117
  let matchingData = {
@@ -122,7 +122,7 @@ export function getFirstMatchingFloor(floorData, bidObject, responseObject = {})
122
122
  };
123
123
  matchingData.matchingFloor = Math.max(matchingData.floorMin, matchingData.floorRuleValue);
124
124
  // save for later lookup if needed
125
- utils.deepSetValue(floorData, `matchingInputs.${matchingInput}`, {...matchingData});
125
+ deepSetValue(floorData, `matchingInputs.${matchingInput}`, {...matchingData});
126
126
  return matchingData;
127
127
  }
128
128
 
@@ -147,7 +147,7 @@ function generatePossibleEnumerations(arrayOfFields, delimiter) {
147
147
  * @summary If a the input bidder has a registered cpmadjustment it returns the input CPM after being adjusted
148
148
  */
149
149
  export function getBiddersCpmAdjustment(bidderName, inputCpm, bid = {}) {
150
- const adjustmentFunction = utils.deepAccess(getGlobal(), `bidderSettings.${bidderName}.bidCpmAdjustment`) || utils.deepAccess(getGlobal(), 'bidderSettings.standard.bidCpmAdjustment');
150
+ const adjustmentFunction = deepAccess(getGlobal(), `bidderSettings.${bidderName}.bidCpmAdjustment`) || deepAccess(getGlobal(), 'bidderSettings.standard.bidCpmAdjustment');
151
151
  if (adjustmentFunction) {
152
152
  return parseFloat(adjustmentFunction(inputCpm, {...bid, cpm: inputCpm}));
153
153
  }
@@ -167,9 +167,9 @@ export function calculateAdjustedFloor(oldFloor, newFloor) {
167
167
  * @summary gets the prebid set sizes depending on the input mediaType
168
168
  */
169
169
  const getMediaTypesSizes = {
170
- banner: (bid) => utils.deepAccess(bid, 'mediaTypes.banner.sizes') || [],
171
- video: (bid) => utils.deepAccess(bid, 'mediaTypes.video.playerSize') || [],
172
- native: (bid) => utils.deepAccess(bid, 'mediaTypes.native.image.sizes') ? [utils.deepAccess(bid, 'mediaTypes.native.image.sizes')] : []
170
+ banner: (bid) => deepAccess(bid, 'mediaTypes.banner.sizes') || [],
171
+ video: (bid) => deepAccess(bid, 'mediaTypes.video.playerSize') || [],
172
+ native: (bid) => deepAccess(bid, 'mediaTypes.native.image.sizes') ? [deepAccess(bid, 'mediaTypes.native.image.sizes')] : []
173
173
  }
174
174
 
175
175
  /**
@@ -208,7 +208,7 @@ export function getFloor(requestParams = {currency: 'USD', mediaType: '*', size:
208
208
  try {
209
209
  floorInfo.matchingFloor = getGlobal().convertCurrency(floorInfo.matchingFloor, floorData.data.currency, currency);
210
210
  } catch (err) {
211
- utils.logWarn(`${MODULE_NAME}: Unable to get currency conversion for getFloor for bidder ${bidRequest.bidder}. You must have currency module enabled with defaultRates in your currency config`);
211
+ logWarn(`${MODULE_NAME}: Unable to get currency conversion for getFloor for bidder ${bidRequest.bidder}. You must have currency module enabled with defaultRates in your currency config`);
212
212
  // since we were unable to convert to the bidders requested currency, we send back just the actual floors currency to them
213
213
  currency = floorData.data.currency;
214
214
  }
@@ -233,7 +233,7 @@ export function getFloor(requestParams = {currency: 'USD', mediaType: '*', size:
233
233
  * @summary Takes a floorsData object and converts it into a hash map with appropriate keys
234
234
  */
235
235
  export function getFloorsDataForAuction(floorData, adUnitCode) {
236
- let auctionFloorData = utils.deepClone(floorData);
236
+ let auctionFloorData = deepClone(floorData);
237
237
  auctionFloorData.schema.delimiter = floorData.schema.delimiter || '|';
238
238
  auctionFloorData.values = normalizeRulesForAuction(auctionFloorData, adUnitCode);
239
239
  // default the currency to USD if not passed in
@@ -296,10 +296,10 @@ export function updateAdUnitsForAuction(adUnits, floorData, auctionId) {
296
296
  skipped: floorData.skipped,
297
297
  skipRate: floorData.skipRate,
298
298
  floorMin: floorData.floorMin,
299
- modelVersion: utils.deepAccess(floorData, 'data.modelVersion'),
300
- modelWeight: utils.deepAccess(floorData, 'data.modelWeight'),
301
- modelTimestamp: utils.deepAccess(floorData, 'data.modelTimestamp'),
302
- location: utils.deepAccess(floorData, 'data.location', 'noData'),
299
+ modelVersion: deepAccess(floorData, 'data.modelVersion'),
300
+ modelWeight: deepAccess(floorData, 'data.modelWeight'),
301
+ modelTimestamp: deepAccess(floorData, 'data.modelTimestamp'),
302
+ location: deepAccess(floorData, 'data.location', 'noData'),
303
303
  floorProvider: floorData.floorProvider,
304
304
  fetchStatus: _floorsConfig.fetchStatus
305
305
  };
@@ -323,27 +323,27 @@ export function pickRandomModel(modelGroups, weightSum) {
323
323
  * @summary Updates the adUnits accordingly and returns the necessary floorsData for the current auction
324
324
  */
325
325
  export function createFloorsDataForAuction(adUnits, auctionId) {
326
- let resolvedFloorsData = utils.deepClone(_floorsConfig);
326
+ let resolvedFloorsData = deepClone(_floorsConfig);
327
327
  // if using schema 2 pick a model here:
328
- if (utils.deepAccess(resolvedFloorsData, 'data.floorsSchemaVersion') === 2) {
328
+ if (deepAccess(resolvedFloorsData, 'data.floorsSchemaVersion') === 2) {
329
329
  // merge the models specific stuff into the top level data settings (now it looks like floorsSchemaVersion 1!)
330
330
  let { modelGroups, ...rest } = resolvedFloorsData.data;
331
331
  resolvedFloorsData.data = Object.assign(rest, pickRandomModel(modelGroups, rest.modelWeightSum));
332
332
  }
333
333
 
334
334
  // if we do not have a floors data set, we will try to use data set on adUnits
335
- let useAdUnitData = Object.keys(utils.deepAccess(resolvedFloorsData, 'data.values') || {}).length === 0;
335
+ let useAdUnitData = Object.keys(deepAccess(resolvedFloorsData, 'data.values') || {}).length === 0;
336
336
  if (useAdUnitData) {
337
337
  resolvedFloorsData.data = getFloorDataFromAdUnits(adUnits);
338
338
  } else {
339
339
  resolvedFloorsData.data = getFloorsDataForAuction(resolvedFloorsData.data);
340
340
  }
341
341
  // if we still do not have a valid floor data then floors is not on for this auction, so skip
342
- if (Object.keys(utils.deepAccess(resolvedFloorsData, 'data.values') || {}).length === 0) {
342
+ if (Object.keys(deepAccess(resolvedFloorsData, 'data.values') || {}).length === 0) {
343
343
  resolvedFloorsData.skipped = true;
344
344
  } else {
345
345
  // determine the skip rate now
346
- const auctionSkipRate = utils.getParameterByName('pbjs_skipRate') || resolvedFloorsData.skipRate;
346
+ const auctionSkipRate = getParameterByName('pbjs_skipRate') || resolvedFloorsData.skipRate;
347
347
  const isSkipped = Math.random() * 100 < parseFloat(auctionSkipRate);
348
348
  resolvedFloorsData.skipped = isSkipped;
349
349
  }
@@ -364,7 +364,7 @@ export function continueAuction(hookConfig) {
364
364
  _delayedAuctions = _delayedAuctions.filter(auctionConfig => auctionConfig.timer !== hookConfig.timer);
365
365
 
366
366
  // We need to know the auctionId at this time. So we will use the passed in one or generate and set it ourselves
367
- hookConfig.reqBidsConfigObj.auctionId = hookConfig.reqBidsConfigObj.auctionId || utils.generateUUID();
367
+ hookConfig.reqBidsConfigObj.auctionId = hookConfig.reqBidsConfigObj.auctionId || generateUUID();
368
368
 
369
369
  // now we do what we need to with adUnits and save the data object to be used for getFloor and enforcement calls
370
370
  _floorDataForAuction[hookConfig.reqBidsConfigObj.auctionId] = createFloorsDataForAuction(hookConfig.reqBidsConfigObj.adUnits || getGlobal().adUnits, hookConfig.reqBidsConfigObj.auctionId);
@@ -378,7 +378,7 @@ function validateSchemaFields(fields) {
378
378
  if (Array.isArray(fields) && fields.length > 0 && fields.every(field => allowedFields.indexOf(field) !== -1)) {
379
379
  return true;
380
380
  }
381
- utils.logError(`${MODULE_NAME}: Fields recieved do not match allowed fields`);
381
+ logError(`${MODULE_NAME}: Fields recieved do not match allowed fields`);
382
382
  return false;
383
383
  }
384
384
 
@@ -406,7 +406,7 @@ function validateRules(floorsData, numFields, delimiter) {
406
406
 
407
407
  function modelIsValid(model) {
408
408
  // schema.fields has only allowed attributes
409
- if (!validateSchemaFields(utils.deepAccess(model, 'schema.fields'))) {
409
+ if (!validateSchemaFields(deepAccess(model, 'schema.fields'))) {
410
410
  return false;
411
411
  }
412
412
  return validateRules(model, model.schema.fields.length, model.schema.delimiter || '|')
@@ -446,7 +446,7 @@ export function isFloorsDataValid(floorsData) {
446
446
  }
447
447
  floorsData.floorsSchemaVersion = floorsData.floorsSchemaVersion || 1;
448
448
  if (typeof floorsSchemaValidation[floorsData.floorsSchemaVersion] !== 'function') {
449
- utils.logError(`${MODULE_NAME}: Unknown floorsSchemaVersion: `, floorsData.floorsSchemaVersion);
449
+ logError(`${MODULE_NAME}: Unknown floorsSchemaVersion: `, floorsData.floorsSchemaVersion);
450
450
  return false;
451
451
  }
452
452
  return floorsSchemaValidation[floorsData.floorsSchemaVersion](floorsData);
@@ -457,13 +457,13 @@ export function isFloorsDataValid(floorsData) {
457
457
  */
458
458
  export function parseFloorData(floorsData, location) {
459
459
  if (floorsData && typeof floorsData === 'object' && isFloorsDataValid(floorsData)) {
460
- utils.logInfo(`${MODULE_NAME}: A ${location} set the auction floor data set to `, floorsData);
460
+ logInfo(`${MODULE_NAME}: A ${location} set the auction floor data set to `, floorsData);
461
461
  return {
462
462
  ...floorsData,
463
463
  location
464
464
  };
465
465
  }
466
- utils.logError(`${MODULE_NAME}: The floors data did not contain correct values`, floorsData);
466
+ logError(`${MODULE_NAME}: The floors data did not contain correct values`, floorsData);
467
467
  }
468
468
 
469
469
  /**
@@ -484,7 +484,7 @@ export function requestBidsHook(fn, reqBidsConfigObj) {
484
484
  // If auction delay > 0 AND we are fetching -> Then wait until it finishes
485
485
  if (_floorsConfig.auctionDelay > 0 && fetching) {
486
486
  hookConfig.timer = setTimeout(() => {
487
- utils.logWarn(`${MODULE_NAME}: Fetch attempt did not return in time for auction`);
487
+ logWarn(`${MODULE_NAME}: Fetch attempt did not return in time for auction`);
488
488
  _floorsConfig.fetchStatus = 'timeout';
489
489
  continueAuction(hookConfig);
490
490
  }, _floorsConfig.auctionDelay);
@@ -526,7 +526,7 @@ export function handleFetchResponse(fetchResponse) {
526
526
  // set .data to it
527
527
  _floorsConfig.data = fetchData;
528
528
  // set skipRate override if necessary
529
- _floorsConfig.skipRate = utils.isNumber(fetchData.skipRate) ? fetchData.skipRate : _floorsConfig.skipRate;
529
+ _floorsConfig.skipRate = isNumber(fetchData.skipRate) ? fetchData.skipRate : _floorsConfig.skipRate;
530
530
  _floorsConfig.floorProvider = fetchData.floorProvider || _floorsConfig.floorProvider;
531
531
  }
532
532
 
@@ -537,7 +537,7 @@ export function handleFetchResponse(fetchResponse) {
537
537
  function handleFetchError(status) {
538
538
  fetching = false;
539
539
  _floorsConfig.fetchStatus = 'error';
540
- utils.logError(`${MODULE_NAME}: Fetch errored with: `, status);
540
+ logError(`${MODULE_NAME}: Fetch errored with: `, status);
541
541
 
542
542
  // if any auctions are waiting for fetch to finish, we need to continue them!
543
543
  resumeDelayedAuctions();
@@ -553,13 +553,13 @@ export function generateAndHandleFetch(floorEndpoint) {
553
553
  // default to GET and we only support GET for now
554
554
  let requestMethod = floorEndpoint.method || 'GET';
555
555
  if (requestMethod !== 'GET') {
556
- utils.logError(`${MODULE_NAME}: 'GET' is the only request method supported at this time!`);
556
+ logError(`${MODULE_NAME}: 'GET' is the only request method supported at this time!`);
557
557
  } else {
558
558
  ajax(floorEndpoint.url, { success: handleFetchResponse, error: handleFetchError }, null, { method: 'GET' });
559
559
  fetching = true;
560
560
  }
561
561
  } else if (fetching) {
562
- utils.logWarn(`${MODULE_NAME}: A fetch is already occuring. Skipping.`);
562
+ logWarn(`${MODULE_NAME}: A fetch is already occuring. Skipping.`);
563
563
  }
564
564
  }
565
565
 
@@ -580,14 +580,14 @@ function addFieldOverrides(overrides) {
580
580
  * @summary This is the function which controls what happens during a pbjs.setConfig({...floors: {}}) is called
581
581
  */
582
582
  export function handleSetFloorsConfig(config) {
583
- _floorsConfig = utils.pick(config, [
583
+ _floorsConfig = pick(config, [
584
584
  'floorMin',
585
585
  'enabled', enabled => enabled !== false, // defaults to true
586
586
  'auctionDelay', auctionDelay => auctionDelay || 0,
587
- 'floorProvider', floorProvider => utils.deepAccess(config, 'data.floorProvider', floorProvider),
587
+ 'floorProvider', floorProvider => deepAccess(config, 'data.floorProvider', floorProvider),
588
588
  'endpoint', endpoint => endpoint || {},
589
- 'skipRate', () => !isNaN(utils.deepAccess(config, 'data.skipRate')) ? config.data.skipRate : config.skipRate || 0,
590
- 'enforcement', enforcement => utils.pick(enforcement || {}, [
589
+ 'skipRate', () => !isNaN(deepAccess(config, 'data.skipRate')) ? config.data.skipRate : config.skipRate || 0,
590
+ 'enforcement', enforcement => pick(enforcement || {}, [
591
591
  'enforceJS', enforceJS => enforceJS !== false, // defaults to true
592
592
  'enforcePBS', enforcePBS => enforcePBS === true, // defaults to false
593
593
  'floorDeals', floorDeals => floorDeals === true, // defaults to false
@@ -613,11 +613,11 @@ export function handleSetFloorsConfig(config) {
613
613
  getGlobal().requestBids.before(requestBidsHook, 50);
614
614
  // if user has debug on then we want to allow the debugging module to run before this, assuming they are testing priceFloors
615
615
  // debugging is currently set at 5 priority
616
- getHook('addBidResponse').before(addBidResponseHook, utils.debugTurnedOn() ? 4 : 50);
616
+ getHook('addBidResponse').before(addBidResponseHook, debugTurnedOn() ? 4 : 50);
617
617
  addedFloorsHook = true;
618
618
  }
619
619
  } else {
620
- utils.logInfo(`${MODULE_NAME}: Turning off module`);
620
+ logInfo(`${MODULE_NAME}: Turning off module`);
621
621
 
622
622
  _floorsConfig = {};
623
623
  _floorDataForAuction = {};
@@ -653,8 +653,8 @@ function addFloorDataToBid(floorData, floorInfo, bid, adjustedCpm) {
653
653
  * @summary takes the enforcement flags and the bid itself and determines if it should be floored
654
654
  */
655
655
  function shouldFloorBid(floorData, floorInfo, bid) {
656
- let enforceJS = utils.deepAccess(floorData, 'enforcement.enforceJS') !== false;
657
- let shouldFloorDeal = utils.deepAccess(floorData, 'enforcement.floorDeals') === true || !bid.dealId;
656
+ let enforceJS = deepAccess(floorData, 'enforcement.enforceJS') !== false;
657
+ let shouldFloorDeal = deepAccess(floorData, 'enforcement.floorDeals') === true || !bid.dealId;
658
658
  let bidBelowFloor = bid.floorData.cpmAfterAdjustments < floorInfo.matchingFloor;
659
659
  return enforceJS && (bidBelowFloor && shouldFloorDeal);
660
660
  }
@@ -675,7 +675,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
675
675
  let floorInfo = getFirstMatchingFloor(floorData.data, {...matchingBidRequest}, {...bid, size: [bid.width, bid.height]});
676
676
 
677
677
  if (!floorInfo.matchingFloor) {
678
- utils.logWarn(`${MODULE_NAME}: unable to determine a matching price floor for bidResponse`, bid);
678
+ logWarn(`${MODULE_NAME}: unable to determine a matching price floor for bidResponse`, bid);
679
679
  return fn.call(this, adUnitCode, bid);
680
680
  }
681
681
 
@@ -691,7 +691,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
691
691
  try {
692
692
  adjustedCpm = getGlobal().convertCurrency(bid.cpm, bidResponseCurrency.toUpperCase(), floorCurrency);
693
693
  } catch (err) {
694
- utils.logError(`${MODULE_NAME}: Unable do get currency conversion for bidResponse to Floor Currency. Do you have Currency module enabled? ${bid}`);
694
+ logError(`${MODULE_NAME}: Unable do get currency conversion for bidResponse to Floor Currency. Do you have Currency module enabled? ${bid}`);
695
695
  return fn.call(this, adUnitCode, bid);
696
696
  }
697
697
  }
@@ -707,7 +707,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
707
707
  // bid fails floor -> throw it out
708
708
  // create basic bid no-bid with necessary data fro analytics adapters
709
709
  let flooredBid = createBid(CONSTANTS.STATUS.NO_BID, matchingBidRequest);
710
- Object.assign(flooredBid, utils.pick(bid, [
710
+ Object.assign(flooredBid, pick(bid, [
711
711
  'floorData',
712
712
  'width',
713
713
  'height',
@@ -720,7 +720,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
720
720
  flooredBid.status = CONSTANTS.BID_STATUS.BID_REJECTED;
721
721
  // if floor not met update bid with 0 cpm so it is not included downstream and marked as no-bid
722
722
  flooredBid.cpm = 0;
723
- utils.logWarn(`${MODULE_NAME}: ${flooredBid.bidderCode}'s Bid Response for ${adUnitCode} was rejected due to floor not met`, bid);
723
+ logWarn(`${MODULE_NAME}: ${flooredBid.bidderCode}'s Bid Response for ${adUnitCode} was rejected due to floor not met`, bid);
724
724
  return fn.call(this, adUnitCode, flooredBid);
725
725
  }
726
726
  return fn.call(this, adUnitCode, bid);
@@ -1,10 +1,11 @@
1
+ import { isFn, isPlainObject } from '../src/utils.js';
1
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
2
- import * as utils from '../src/utils.js';
3
3
 
4
4
  const BIDDER_CODE = 'proxistore';
5
5
  const PROXISTORE_VENDOR_ID = 418;
6
6
  const COOKIE_BASE_URL = 'https://abs.proxistore.com/v3/rtb/prebid/multi';
7
- const COOKIE_LESS_URL = 'https://abs.cookieless-proxistore.com/v3/rtb/prebid/multi';
7
+ const COOKIE_LESS_URL =
8
+ 'https://abs.cookieless-proxistore.com/v3/rtb/prebid/multi';
8
9
 
9
10
  function _createServerRequest(bidRequests, bidderRequest) {
10
11
  var sizeIds = [];
@@ -170,7 +171,7 @@ function interpretResponse(serverResponse, bidRequest) {
170
171
  }
171
172
 
172
173
  function _assignFloor(bid) {
173
- if (!utils.isFn(bid.getFloor)) {
174
+ if (!isFn(bid.getFloor)) {
174
175
  // eslint-disable-next-line no-console
175
176
  console.log(bid.params.bidFloor);
176
177
  return bid.params.bidFloor ? bid.params.bidFloor : null;
@@ -181,11 +182,7 @@ function _assignFloor(bid) {
181
182
  size: '*',
182
183
  });
183
184
 
184
- if (
185
- utils.isPlainObject(floor) &&
186
- !isNaN(floor.floor) &&
187
- floor.currency === 'EUR'
188
- ) {
185
+ if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'EUR') {
189
186
  return floor.floor;
190
187
  }
191
188
  return null;
@@ -196,6 +193,7 @@ export const spec = {
196
193
  isBidRequestValid: isBidRequestValid,
197
194
  buildRequests: buildRequests,
198
195
  interpretResponse: interpretResponse,
196
+ gvlid: PROXISTORE_VENDOR_ID,
199
197
  };
200
198
 
201
199
  registerBidder(spec);
@@ -3,7 +3,7 @@
3
3
  * stored in the page's domain. When the module is included, an id is generated if needed,
4
4
  * persisted as a cookie, and automatically appended to all the bidRequest as bid.crumbs.pubcid.
5
5
  */
6
- import * as utils from '../src/utils.js';
6
+ import { logMessage, parseUrl, buildUrl, triggerPixel, generateUUID, isArray } from '../src/utils.js';
7
7
  import { config } from '../src/config.js';
8
8
  import events from '../src/events.js';
9
9
  import CONSTANTS from '../src/constants.json';
@@ -44,7 +44,7 @@ export function setStorageItem(key, val, expires) {
44
44
 
45
45
  storage.setDataInLocalStorage(key, val);
46
46
  } catch (e) {
47
- utils.logMessage(e);
47
+ logMessage(e);
48
48
  }
49
49
  }
50
50
 
@@ -74,7 +74,7 @@ export function getStorageItem(key) {
74
74
  }
75
75
  }
76
76
  } catch (e) {
77
- utils.logMessage(e);
77
+ logMessage(e);
78
78
  }
79
79
 
80
80
  return val;
@@ -89,7 +89,7 @@ export function removeStorageItem(key) {
89
89
  storage.removeDataFromLocalStorage(key + EXP_SUFFIX);
90
90
  storage.removeDataFromLocalStorage(key);
91
91
  } catch (e) {
92
- utils.logMessage(e);
92
+ logMessage(e);
93
93
  }
94
94
  }
95
95
 
@@ -141,13 +141,13 @@ function queuePixelCallback(pixelUrl, id) {
141
141
  id = id || '';
142
142
 
143
143
  // Use pubcid as a cache buster
144
- const urlInfo = utils.parseUrl(pixelUrl);
144
+ const urlInfo = parseUrl(pixelUrl);
145
145
  urlInfo.search.id = encodeURIComponent('pubcid:' + id);
146
- const targetUrl = utils.buildUrl(urlInfo);
146
+ const targetUrl = buildUrl(urlInfo);
147
147
 
148
148
  events.on(CONSTANTS.EVENTS.AUCTION_END, function auctionEndHandler() {
149
149
  events.off(CONSTANTS.EVENTS.AUCTION_END, auctionEndHandler);
150
- utils.triggerPixel(targetUrl);
150
+ triggerPixel(targetUrl);
151
151
  });
152
152
 
153
153
  return true;
@@ -177,7 +177,7 @@ export function requestBidHook(next, config) {
177
177
  if (typeof window[PUB_COMMON] === 'object') {
178
178
  // If the page includes its own pubcid object, then use that instead.
179
179
  pubcid = window[PUB_COMMON].getId();
180
- utils.logMessage(PUB_COMMON + ': pubcid = ' + pubcid);
180
+ logMessage(PUB_COMMON + ': pubcid = ' + pubcid);
181
181
  } else {
182
182
  // Otherwise get the existing cookie
183
183
  pubcid = readValue(ID_NAME);
@@ -190,7 +190,7 @@ export function requestBidHook(next, config) {
190
190
  }
191
191
  // Generate a new id
192
192
  if (!pubcid) {
193
- pubcid = utils.generateUUID();
193
+ pubcid = generateUUID();
194
194
  }
195
195
  // Update the cookie/storage with the latest expiration date
196
196
  writeValue(ID_NAME, pubcid, pubcidConfig.interval);
@@ -205,14 +205,14 @@ export function requestBidHook(next, config) {
205
205
  }
206
206
  }
207
207
 
208
- utils.logMessage('pbjs: pubcid = ' + pubcid);
208
+ logMessage('pbjs: pubcid = ' + pubcid);
209
209
  }
210
210
 
211
211
  // Append pubcid to each bid object, which will be incorporated
212
212
  // into bid requests later.
213
213
  if (adUnits && pubcid) {
214
214
  adUnits.forEach((unit) => {
215
- if (unit.bids && utils.isArray(unit.bids)) {
215
+ if (unit.bids && isArray(unit.bids)) {
216
216
  unit.bids.forEach((bid) => {
217
217
  Object.assign(bid, {crumbs: {pubcid}});
218
218
  });
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import {submodule} from '../src/hook.js';
9
- import * as utils from '../src/utils.js';
9
+ import { logInfo, isArray } from '../src/utils.js';
10
10
 
11
11
  const MODULE_NAME = 'pubProvidedId';
12
12
 
@@ -27,7 +27,7 @@ export const pubProvidedIdSubmodule = {
27
27
  */
28
28
  decode(value) {
29
29
  const res = value ? {pubProvidedId: value} : undefined;
30
- utils.logInfo('PubProvidedId: Decoded value ' + JSON.stringify(res));
30
+ logInfo('PubProvidedId: Decoded value ' + JSON.stringify(res));
31
31
  return res;
32
32
  },
33
33
 
@@ -40,7 +40,7 @@ export const pubProvidedIdSubmodule = {
40
40
  getId(config) {
41
41
  const configParams = (config && config.params) || {};
42
42
  let res = [];
43
- if (utils.isArray(configParams.eids)) {
43
+ if (isArray(configParams.eids)) {
44
44
  res = res.concat(configParams.eids);
45
45
  }
46
46
  if (typeof configParams.eidsFunction === 'function') {
@@ -8,7 +8,7 @@
8
8
  import {submodule} from '../src/hook.js';
9
9
  import {getStorageManager} from '../src/storageManager.js';
10
10
  import {ajax} from '../src/ajax.js';
11
- import * as utils from '../src/utils.js';
11
+ import { parseUrl, buildUrl, logError } from '../src/utils.js';
12
12
  import {uspDataHandler} from '../src/adapterManager.js';
13
13
 
14
14
  const MODULE_NAME = 'publinkId';
@@ -18,24 +18,33 @@ const PUBLINK_S2S_COOKIE = '_publink_srv';
18
18
 
19
19
  export const storage = getStorageManager(GVLID);
20
20
 
21
+ function isHex(s) {
22
+ return /^[A-F0-9]+$/i.test(s);
23
+ }
24
+
21
25
  function publinkIdUrl(params, consentData) {
22
- let url = utils.parseUrl('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink');
26
+ let url = parseUrl('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink');
23
27
  url.search = {
24
28
  deh: params.e,
25
29
  mpn: 'Prebid.js',
26
30
  mpv: '$prebid.version$',
27
31
  };
32
+
28
33
  if (consentData) {
29
34
  url.search.gdpr = (consentData.gdprApplies) ? 1 : 0;
30
35
  url.search.gdpr_consent = consentData.consentString;
31
36
  }
32
37
 
38
+ if (params.site_id) { url.search.sid = params.site_id; }
39
+
40
+ if (params.api_key) { url.search.apikey = params.api_key; }
41
+
33
42
  const usPrivacyString = uspDataHandler.getConsentData();
34
43
  if (usPrivacyString && typeof usPrivacyString === 'string') {
35
44
  url.search.us_privacy = usPrivacyString;
36
45
  }
37
46
 
38
- return utils.buildUrl(url);
47
+ return buildUrl(url);
39
48
  }
40
49
 
41
50
  function makeCallback(config = {}, consentData) {
@@ -49,8 +58,13 @@ function makeCallback(config = {}, consentData) {
49
58
  }
50
59
  }
51
60
  };
61
+
52
62
  if (config.params && config.params.e) {
53
- ajax(publinkIdUrl(config.params, consentData), handleResponse, undefined, options);
63
+ if (isHex(config.params.e)) {
64
+ ajax(publinkIdUrl(config.params, consentData), handleResponse, undefined, options);
65
+ } else {
66
+ logError('params.e must be a hex string');
67
+ }
54
68
  }
55
69
  };
56
70
  }
@@ -73,7 +87,7 @@ function getlocalValue() {
73
87
  return obj.publink;
74
88
  }
75
89
  } catch (e) {
76
- utils.logError(e);
90
+ logError(e);
77
91
  }
78
92
  }
79
93
  }
@@ -96,11 +110,11 @@ export const publinkIdSubmodule = {
96
110
  /**
97
111
  * decode the stored id value for passing to bid requests
98
112
  * @function
99
- * @param {string} id encrypted userid
113
+ * @param {string} publinkId encrypted userid
100
114
  * @returns {{publinkId: string} | undefined}
101
115
  */
102
116
  decode(publinkId) {
103
- return {publink: publinkId};
117
+ return {publinkId: publinkId};
104
118
  },
105
119
 
106
120
  /**
@@ -108,6 +122,8 @@ export const publinkIdSubmodule = {
108
122
  * Use a publink cookie first if it is present, otherwise use prebids copy, if neither are available callout to get a new id
109
123
  * @function
110
124
  * @param {SubmoduleConfig} [config] Config object with params and storage properties
125
+ * @param {ConsentData|undefined} consentData GDPR consent
126
+ * @param {(Object|undefined)} storedId Previously cached id
111
127
  * @returns {IdResponse}
112
128
  */
113
129
  getId: function(config, consentData, storedId) {
@@ -7,7 +7,10 @@ Publink user id module
7
7
  | Param Name | Required | Type | Description | Example |
8
8
  | --- | --- | --- | --- | --- |
9
9
  | name | Yes | String | module identifier | `"publinkId"` |
10
- | params.e | Yes | String | hashed email address | `"e80b5017098950fc58aad83c8c14978e"` |
10
+ | params.e | Yes | String | hashed email address | `"7D320454942620664D96EF78ED4E3A2A"` |
11
+ | params.api_key | Yes | String | api key for access | `"7ab62359-bdc0-4095-b573-ef474fb55d24"` |
12
+ | params.site_id | Yes | String | site identifier | `"123456"` |
13
+
11
14
 
12
15
  ### Example configuration for Publink
13
16
  ```
@@ -20,7 +23,9 @@ pbjs.setConfig({
20
23
  type: "html5"
21
24
  },
22
25
  params: {
23
- e: "e80b5017098950fc58aad83c8c14978e", // example hashed email (md5)
26
+ e: "7D320454942620664D96EF78ED4E3A2A", // example hashed email (md5)
27
+ site_id: "123456", // provided by Epsilon
28
+ api_key: "7ab62359-bdc0-4095-b573-ef474fb55d2" // provided by Epsilon
24
29
  }
25
30
  }],
26
31
  }