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,8 +1,9 @@
1
- import * as utils from '../src/utils.js'
1
+ import { _each, isPlainObject, isArray, deepAccess } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js'
3
3
  import find from 'core-js-pure/features/array/find.js'
4
4
  import { VIDEO, BANNER } from '../src/mediaTypes.js'
5
5
  import { Renderer } from '../src/Renderer.js'
6
+ import { config } from '../src/config.js';
6
7
 
7
8
  const ENDPOINT = 'https://ad.yieldlab.net'
8
9
  const BIDDER_CODE = 'yieldlab'
@@ -36,7 +37,7 @@ export const spec = {
36
37
  json: true
37
38
  }
38
39
 
39
- utils._each(validBidRequests, function (bid) {
40
+ _each(validBidRequests, function (bid) {
40
41
  adslotIds.push(bid.params.adslotId)
41
42
  if (bid.params.targeting) {
42
43
  query.t = createTargetingString(bid.params.targeting)
@@ -44,14 +45,19 @@ export const spec = {
44
45
  if (bid.userIdAsEids && Array.isArray(bid.userIdAsEids)) {
45
46
  query.ids = createUserIdString(bid.userIdAsEids)
46
47
  }
47
- if (bid.params.customParams && utils.isPlainObject(bid.params.customParams)) {
48
+ if (bid.params.customParams && isPlainObject(bid.params.customParams)) {
48
49
  for (let prop in bid.params.customParams) {
49
50
  query[prop] = bid.params.customParams[prop]
50
51
  }
51
52
  }
52
- if (bid.schain && utils.isPlainObject(bid.schain) && Array.isArray(bid.schain.nodes)) {
53
+ if (bid.schain && isPlainObject(bid.schain) && Array.isArray(bid.schain.nodes)) {
53
54
  query.schain = createSchainString(bid.schain)
54
55
  }
56
+
57
+ const iabContent = getContentObject(bid)
58
+ if (iabContent) {
59
+ query.iab_content = createIabContentString(iabContent)
60
+ }
55
61
  })
56
62
 
57
63
  if (bidderRequest) {
@@ -98,13 +104,14 @@ export const spec = {
98
104
  })
99
105
 
100
106
  if (matchedBid) {
101
- const adUnitSize = bidRequest.sizes.length === 2 && !utils.isArray(bidRequest.sizes[0]) ? bidRequest.sizes : bidRequest.sizes[0]
107
+ const adUnitSize = bidRequest.sizes.length === 2 && !isArray(bidRequest.sizes[0]) ? bidRequest.sizes : bidRequest.sizes[0]
102
108
  const adSize = bidRequest.params.adSize !== undefined ? parseSize(bidRequest.params.adSize) : (matchedBid.adsize !== undefined) ? parseSize(matchedBid.adsize) : adUnitSize
103
109
  const extId = bidRequest.params.extId !== undefined ? '&id=' + bidRequest.params.extId : ''
104
110
  const adType = matchedBid.adtype !== undefined ? matchedBid.adtype : ''
105
111
  const gdprApplies = reqParams.gdpr ? '&gdpr=' + reqParams.gdpr : ''
106
112
  const gdprConsent = reqParams.consent ? '&consent=' + reqParams.consent : ''
107
113
  const pvId = matchedBid.pvid !== undefined ? '&pvid=' + matchedBid.pvid : ''
114
+ const iabContent = reqParams.iab_content ? '&iab_content=' + reqParams.iab_content : ''
108
115
 
109
116
  const bidResponse = {
110
117
  requestId: bidRequest.bidId,
@@ -117,7 +124,7 @@ export const spec = {
117
124
  netRevenue: false,
118
125
  ttl: BID_RESPONSE_TTL_SEC,
119
126
  referrer: '',
120
- ad: `<script src="${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}"></script>`,
127
+ ad: `<script src="${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}${iabContent}"></script>`,
121
128
  meta: {
122
129
  advertiserDomains: (matchedBid.advertiser) ? matchedBid.advertiser : 'n/a'
123
130
  }
@@ -130,7 +137,7 @@ export const spec = {
130
137
  bidResponse.height = playersize[1]
131
138
  }
132
139
  bidResponse.mediaType = VIDEO
133
- bidResponse.vastUrl = `${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}`
140
+ bidResponse.vastUrl = `${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}${iabContent}`
134
141
  if (isOutstream(bidRequest)) {
135
142
  const renderer = Renderer.install({
136
143
  id: bidRequest.bidId,
@@ -156,7 +163,7 @@ export const spec = {
156
163
  * @returns {Boolean}
157
164
  */
158
165
  function isVideo (format, adtype) {
159
- return utils.deepAccess(format, 'mediaTypes.video') && adtype.toLowerCase() === 'video'
166
+ return deepAccess(format, 'mediaTypes.video') && adtype.toLowerCase() === 'video'
160
167
  }
161
168
 
162
169
  /**
@@ -165,7 +172,7 @@ function isVideo (format, adtype) {
165
172
  * @returns {Boolean}
166
173
  */
167
174
  function isOutstream (format) {
168
- let context = utils.deepAccess(format, 'mediaTypes.video.context')
175
+ let context = deepAccess(format, 'mediaTypes.video.context')
169
176
  return (context === 'outstream')
170
177
  }
171
178
 
@@ -175,8 +182,8 @@ function isOutstream (format) {
175
182
  * @returns {Array}
176
183
  */
177
184
  function getPlayerSize (format) {
178
- let playerSize = utils.deepAccess(format, 'mediaTypes.video.playerSize')
179
- return (playerSize && utils.isArray(playerSize[0])) ? playerSize[0] : playerSize
185
+ let playerSize = deepAccess(format, 'mediaTypes.video.playerSize')
186
+ return (playerSize && isArray(playerSize[0])) ? playerSize[0] : playerSize
180
187
  }
181
188
 
182
189
  /**
@@ -211,7 +218,7 @@ function createQueryString (obj) {
211
218
  for (var p in obj) {
212
219
  if (obj.hasOwnProperty(p)) {
213
220
  let val = obj[p]
214
- if (p !== 'schain') {
221
+ if (p !== 'schain' && p !== 'iab_content') {
215
222
  str.push(encodeURIComponent(p) + '=' + encodeURIComponent(val))
216
223
  } else {
217
224
  str.push(p + '=' + val)
@@ -253,6 +260,44 @@ function createSchainString (schain) {
253
260
  return `${ver},${complete}${nodesString}`
254
261
  }
255
262
 
263
+ /**
264
+ * Get content object from bid request
265
+ * First get content from bidder params;
266
+ * If not provided in bidder params, get from first party data under 'ortb2.site.content' or 'ortb2.app.content'
267
+ * @param {Object} bid
268
+ * @returns {Object}
269
+ */
270
+ function getContentObject(bid) {
271
+ if (bid.params.iabContent && isPlainObject(bid.params.iabContent)) {
272
+ return bid.params.iabContent
273
+ }
274
+
275
+ const globalContent = config.getConfig('ortb2.site') ? config.getConfig('ortb2.site.content')
276
+ : config.getConfig('ortb2.app.content')
277
+ if (globalContent && isPlainObject(globalContent)) {
278
+ return globalContent
279
+ }
280
+ return undefined
281
+ }
282
+
283
+ /**
284
+ * Creates a string for iab_content object
285
+ * @param {Object} iabContent
286
+ * @returns {String}
287
+ */
288
+ function createIabContentString(iabContent) {
289
+ const arrKeys = ['keywords', 'cat']
290
+ let str = []
291
+ for (let key in iabContent) {
292
+ if (iabContent.hasOwnProperty(key)) {
293
+ const value = (arrKeys.indexOf(key) !== -1 && Array.isArray(iabContent[key]))
294
+ ? iabContent[key].map(node => encodeURIComponent(node)).join('|') : encodeURIComponent(iabContent[key])
295
+ str.push(''.concat(key, ':', value))
296
+ }
297
+ }
298
+ return encodeURIComponent(str.join(','))
299
+ }
300
+
256
301
  /**
257
302
  * Encodes URI Component with exlamation mark included. Needed for schain object.
258
303
  * @param {String} str
@@ -25,7 +25,22 @@ Module that connects to Yieldlab's demand sources
25
25
  key1: "value1",
26
26
  key2: "value2"
27
27
  },
28
- extId: "abc"
28
+ extId: "abc",
29
+ iabContent: {
30
+ id: "some_id",
31
+ episode: "1",
32
+ title: "some title",
33
+ series: "some series",
34
+ season: "s1",
35
+ artist: "John Doe",
36
+ genre: "some genre",
37
+ isrc: "CC-XXX-YY-NNNNN",
38
+ url: "http://foo_url.de",
39
+ cat: ["IAB1-1", "IAB1-2", "IAB2-10"],
40
+ context: "7",
41
+ keywords: ["k1", "k2"],
42
+ live: "0"
43
+ }
29
44
  }
30
45
  }]
31
46
  }, {
@@ -1,5 +1,5 @@
1
+ import { deepSetValue, logInfo, deepAccess } from '../src/utils.js';
1
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
2
- import * as utils from '../src/utils.js';
3
3
  import {BANNER} from '../src/mediaTypes.js';
4
4
 
5
5
  const ENDPOINT_URL = 'https://x.yieldlift.com/auction';
@@ -58,18 +58,18 @@ export const spec = {
58
58
 
59
59
  // adding schain object
60
60
  if (validBidRequests[0].schain) {
61
- utils.deepSetValue(openrtbRequest, 'source.ext.schain', validBidRequests[0].schain);
61
+ deepSetValue(openrtbRequest, 'source.ext.schain', validBidRequests[0].schain);
62
62
  }
63
63
 
64
64
  // Attaching GDPR Consent Params
65
65
  if (bidderRequest.gdprConsent) {
66
- utils.deepSetValue(openrtbRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
67
- utils.deepSetValue(openrtbRequest, 'regs.ext.gdpr', (bidderRequest.gdprConsent.gdprApplies ? 1 : 0));
66
+ deepSetValue(openrtbRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
67
+ deepSetValue(openrtbRequest, 'regs.ext.gdpr', (bidderRequest.gdprConsent.gdprApplies ? 1 : 0));
68
68
  }
69
69
 
70
70
  // CCPA
71
71
  if (bidderRequest.uspConsent) {
72
- utils.deepSetValue(openrtbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
72
+ deepSetValue(openrtbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
73
73
  }
74
74
 
75
75
  const payloadString = JSON.stringify(openrtbRequest);
@@ -102,12 +102,12 @@ export const spec = {
102
102
  })
103
103
  })
104
104
  } else {
105
- utils.logInfo('yieldlift.interpretResponse :: no valid responses to interpret');
105
+ logInfo('yieldlift.interpretResponse :: no valid responses to interpret');
106
106
  }
107
107
  return bidResponses;
108
108
  },
109
109
  getUserSyncs: function (syncOptions, serverResponses) {
110
- utils.logInfo('yieldlift.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses);
110
+ logInfo('yieldlift.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses);
111
111
  let syncs = [];
112
112
 
113
113
  if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) {
@@ -115,7 +115,7 @@ export const spec = {
115
115
  }
116
116
 
117
117
  serverResponses.forEach(resp => {
118
- const userSync = utils.deepAccess(resp, 'body.ext.usersync');
118
+ const userSync = deepAccess(resp, 'body.ext.usersync');
119
119
  if (userSync) {
120
120
  let syncDetails = [];
121
121
  Object.keys(userSync).forEach(key => {
@@ -139,7 +139,7 @@ export const spec = {
139
139
  }
140
140
  }
141
141
  });
142
- utils.logInfo('yieldlift.getUserSyncs result=%o', syncs);
142
+ logInfo('yieldlift.getUserSyncs result=%o', syncs);
143
143
  return syncs;
144
144
  },
145
145
 
@@ -1,9 +1,10 @@
1
- import * as utils from '../src/utils.js';
1
+ import { isNumber, isStr, isInteger, isBoolean, isArray, isEmpty, isArrayOfNums, getWindowTop, parseQueryStringParameters, parseUrl, deepSetValue, deepAccess, logError } from '../src/utils.js';
2
2
  import { BANNER, VIDEO } from '../src/mediaTypes.js';
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
4
  import { Renderer } from '../src/Renderer.js';
5
5
  import includes from 'core-js-pure/features/array/includes';
6
6
  import find from 'core-js-pure/features/array/find.js';
7
+ import { createEidsArray } from './userId/eids.js';
7
8
 
8
9
  const BIDDER_CODE = 'yieldmo';
9
10
  const CURRENCY = 'USD';
@@ -15,7 +16,7 @@ const OUTSTREAM_VIDEO_PLAYER_URL = 'https://prebid-outstream.yieldmo.com/bundle.
15
16
  const OPENRTB_VIDEO_BIDPARAMS = ['mimes', 'startdelay', 'placement', 'startdelay', 'skipafter', 'protocols', 'api',
16
17
  'playbackmethod', 'maxduration', 'minduration', 'pos', 'skip', 'skippable'];
17
18
  const OPENRTB_VIDEO_SITEPARAMS = ['name', 'domain', 'cat', 'keywords'];
18
- const LOCAL_WINDOW = utils.getWindowTop();
19
+ const LOCAL_WINDOW = getWindowTop();
19
20
  const DEFAULT_PLAYBACK_METHOD = 2;
20
21
  const DEFAULT_START_DELAY = 0;
21
22
  const VAST_TIMEOUT = 15000;
@@ -46,8 +47,8 @@ export const spec = {
46
47
  buildRequests: function (bidRequests, bidderRequest) {
47
48
  const bannerBidRequests = bidRequests.filter(request => hasBannerMediaType(request));
48
49
  const videoBidRequests = bidRequests.filter(request => hasVideoMediaType(request));
49
-
50
50
  let serverRequests = [];
51
+ const eids = getEids(bidRequests[0]) || [];
51
52
  if (bannerBidRequests.length > 0) {
52
53
  let serverRequest = {
53
54
  pbav: '$prebid.version$',
@@ -63,10 +64,10 @@ export const spec = {
63
64
  h: LOCAL_WINDOW.innerHeight,
64
65
  userConsent: JSON.stringify({
65
66
  // case of undefined, stringify will remove param
66
- gdprApplies: utils.deepAccess(bidderRequest, 'gdprConsent.gdprApplies') || '',
67
- cmp: utils.deepAccess(bidderRequest, 'gdprConsent.consentString') || ''
67
+ gdprApplies: deepAccess(bidderRequest, 'gdprConsent.gdprApplies') || '',
68
+ cmp: deepAccess(bidderRequest, 'gdprConsent.consentString') || ''
68
69
  }),
69
- us_privacy: utils.deepAccess(bidderRequest, 'uspConsent') || ''
70
+ us_privacy: deepAccess(bidderRequest, 'uspConsent') || ''
70
71
  };
71
72
 
72
73
  const mtp = window.navigator.maxTouchPoints;
@@ -93,14 +94,17 @@ export const spec = {
93
94
  if (request.schain) {
94
95
  serverRequest.schain = JSON.stringify(request.schain);
95
96
  }
96
- if (utils.deepAccess(request, 'params.lr_env')) {
97
+ if (deepAccess(request, 'params.lr_env')) {
97
98
  serverRequest.ats_envelope = request.params.lr_env;
98
99
  }
99
100
  });
100
101
  serverRequest.p = '[' + serverRequest.p.toString() + ']';
101
102
 
103
+ if (eids.length) {
104
+ serverRequest.eids = JSON.stringify(eids);
105
+ };
102
106
  // check if url exceeded max length
103
- const url = `${BANNER_SERVER_ENDPOINT}?${utils.parseQueryStringParameters(serverRequest)}`;
107
+ const url = `${BANNER_SERVER_ENDPOINT}?${parseQueryStringParameters(serverRequest)}`;
104
108
  let extraCharacters = url.length - MAX_BANNER_REQUEST_URL_LENGTH;
105
109
  if (extraCharacters > 0) {
106
110
  for (let i = 0; i < BANNER_REQUEST_PROPERTIES_TO_REDUCE.length; i++) {
@@ -121,6 +125,9 @@ export const spec = {
121
125
 
122
126
  if (videoBidRequests.length > 0) {
123
127
  const serverRequest = openRtbRequest(videoBidRequests, bidderRequest);
128
+ if (eids.length) {
129
+ serverRequest.user = { eids };
130
+ };
124
131
  serverRequests.push({
125
132
  method: 'POST',
126
133
  url: VIDEO_SERVER_ENDPOINT,
@@ -167,14 +174,14 @@ registerBidder(spec);
167
174
  * @param {BidRequest} bidRequest bid request
168
175
  */
169
176
  function hasBannerMediaType(bidRequest) {
170
- return !!utils.deepAccess(bidRequest, 'mediaTypes.banner');
177
+ return !!deepAccess(bidRequest, 'mediaTypes.banner');
171
178
  }
172
179
 
173
180
  /**
174
181
  * @param {BidRequest} bidRequest bid request
175
182
  */
176
183
  function hasVideoMediaType(bidRequest) {
177
- return !!utils.deepAccess(bidRequest, 'mediaTypes.video');
184
+ return !!deepAccess(bidRequest, 'mediaTypes.video');
178
185
  }
179
186
 
180
187
  /**
@@ -182,7 +189,7 @@ function hasVideoMediaType(bidRequest) {
182
189
  * @param request bid request
183
190
  */
184
191
  function addPlacement(request) {
185
- const gpid = utils.deepAccess(request, 'ortb2Imp.ext.data.pbadslot');
192
+ const gpid = deepAccess(request, 'ortb2Imp.ext.data.pbadslot');
186
193
  const placementInfo = {
187
194
  placement_id: request.adUnitCode,
188
195
  callback_id: request.bidId,
@@ -231,7 +238,7 @@ function createNewBannerBid(response) {
231
238
  * @param bidRequest server request
232
239
  */
233
240
  function createNewVideoBid(response, bidRequest) {
234
- const imp = find((utils.deepAccess(bidRequest, 'data.imp') || []), imp => imp.id === response.impid);
241
+ const imp = find((deepAccess(bidRequest, 'data.imp') || []), imp => imp.id === response.impid);
235
242
 
236
243
  let result = {
237
244
  requestId: imp.id,
@@ -310,7 +317,7 @@ function getPageDescription() {
310
317
  * @returns an id if there is one, or undefined
311
318
  */
312
319
  function getId(request, idType) {
313
- return (typeof utils.deepAccess(request, 'userId') === 'object') ? request.userId[idType] : undefined;
320
+ return (typeof deepAccess(request, 'userId') === 'object') ? request.userId[idType] : undefined;
314
321
  }
315
322
 
316
323
  /**
@@ -348,7 +355,7 @@ function openRtbRequest(bidRequests, bidderRequest) {
348
355
  * @return Object OpenRTB's 'imp' (impression) object
349
356
  */
350
357
  function openRtbImpression(bidRequest) {
351
- const gpid = utils.deepAccess(bidRequest, 'ortb2Imp.ext.data.pbadslot');
358
+ const gpid = deepAccess(bidRequest, 'ortb2Imp.ext.data.pbadslot');
352
359
  const size = extractPlayerSize(bidRequest);
353
360
  const imp = {
354
361
  id: bidRequest.bidId,
@@ -364,12 +371,12 @@ function openRtbImpression(bidRequest) {
364
371
  }
365
372
  };
366
373
 
367
- const mediaTypesParams = utils.deepAccess(bidRequest, 'mediaTypes.video');
374
+ const mediaTypesParams = deepAccess(bidRequest, 'mediaTypes.video');
368
375
  Object.keys(mediaTypesParams)
369
376
  .filter(param => includes(OPENRTB_VIDEO_BIDPARAMS, param))
370
377
  .forEach(param => imp.video[param] = mediaTypesParams[param]);
371
378
 
372
- const videoParams = utils.deepAccess(bidRequest, 'params.video');
379
+ const videoParams = deepAccess(bidRequest, 'params.video');
373
380
  Object.keys(videoParams)
374
381
  .filter(param => includes(OPENRTB_VIDEO_BIDPARAMS, param))
375
382
  .forEach(param => imp.video[param] = videoParams[param]);
@@ -403,10 +410,10 @@ function getBidFloor(bidRequest, mediaType) {
403
410
  * @return [number, number] || null Player's width and height, or undefined otherwise.
404
411
  */
405
412
  function extractPlayerSize(bidRequest) {
406
- const sizeArr = utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize');
407
- if (utils.isArrayOfNums(sizeArr, 2)) {
413
+ const sizeArr = deepAccess(bidRequest, 'mediaTypes.video.playerSize');
414
+ if (isArrayOfNums(sizeArr, 2)) {
408
415
  return sizeArr;
409
- } else if (utils.isArray(sizeArr) && utils.isArrayOfNums(sizeArr[0], 2)) {
416
+ } else if (isArray(sizeArr) && isArrayOfNums(sizeArr[0], 2)) {
410
417
  return sizeArr[0];
411
418
  }
412
419
  return null;
@@ -420,8 +427,8 @@ function extractPlayerSize(bidRequest) {
420
427
  function openRtbSite(bidRequest, bidderRequest) {
421
428
  let result = {};
422
429
 
423
- const loc = utils.parseUrl(utils.deepAccess(bidderRequest, 'refererInfo.referer'));
424
- if (!utils.isEmpty(loc)) {
430
+ const loc = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer'));
431
+ if (!isEmpty(loc)) {
425
432
  result.page = `${loc.protocol}://${loc.hostname}${loc.pathname}`;
426
433
  }
427
434
 
@@ -434,7 +441,7 @@ function openRtbSite(bidRequest, bidderRequest) {
434
441
  result.keywords = keywords.content;
435
442
  }
436
443
 
437
- const siteParams = utils.deepAccess(bidRequest, 'params.site');
444
+ const siteParams = deepAccess(bidRequest, 'params.site');
438
445
  if (siteParams) {
439
446
  Object.keys(siteParams)
440
447
  .filter(param => includes(OPENRTB_VIDEO_SITEPARAMS, param))
@@ -447,14 +454,10 @@ function openRtbSite(bidRequest, bidderRequest) {
447
454
  * @return Object OpenRTB's 'device' object
448
455
  */
449
456
  function openRtbDevice(bidRequest) {
450
- const ip = utils.deepAccess(bidRequest, 'params.device.ip');
451
457
  const deviceObj = {
452
458
  ua: navigator.userAgent,
453
459
  language: (navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage),
454
460
  };
455
- if (ip) {
456
- deviceObj.ip = ip;
457
- }
458
461
  return deviceObj;
459
462
  }
460
463
 
@@ -466,12 +469,12 @@ function openRtbDevice(bidRequest) {
466
469
  function populateOpenRtbGdpr(openRtbRequest, bidderRequest) {
467
470
  const gdpr = bidderRequest.gdprConsent;
468
471
  if (gdpr && 'gdprApplies' in gdpr) {
469
- utils.deepSetValue(openRtbRequest, 'regs.ext.gdpr', gdpr.gdprApplies ? 1 : 0);
470
- utils.deepSetValue(openRtbRequest, 'user.ext.consent', gdpr.consentString);
472
+ deepSetValue(openRtbRequest, 'regs.ext.gdpr', gdpr.gdprApplies ? 1 : 0);
473
+ deepSetValue(openRtbRequest, 'user.ext.consent', gdpr.consentString);
471
474
  }
472
- const uspConsent = utils.deepAccess(bidderRequest, 'uspConsent');
475
+ const uspConsent = deepAccess(bidderRequest, 'uspConsent');
473
476
  if (uspConsent) {
474
- utils.deepSetValue(openRtbRequest, 'regs.ext.us_privacy', uspConsent);
477
+ deepSetValue(openRtbRequest, 'regs.ext.us_privacy', uspConsent);
475
478
  }
476
479
  }
477
480
 
@@ -504,8 +507,8 @@ function validateVideoParams(bid) {
504
507
  if (fieldPath.indexOf('video') === 0) {
505
508
  const valueFieldPath = 'params.' + fieldPath;
506
509
  const mediaFieldPath = 'mediaTypes.' + fieldPath;
507
- const valueParams = utils.deepAccess(bid, valueFieldPath);
508
- const mediaTypesParams = utils.deepAccess(bid, mediaFieldPath);
510
+ const valueParams = deepAccess(bid, valueFieldPath);
511
+ const mediaTypesParams = deepAccess(bid, mediaFieldPath);
509
512
  const hasValidValueParams = validateCb(valueParams);
510
513
  const hasValidMediaTypesParams = validateCb(mediaTypesParams);
511
514
 
@@ -517,7 +520,7 @@ function validateVideoParams(bid) {
517
520
  }
518
521
  return valueParams || mediaTypesParams;
519
522
  } else {
520
- const value = utils.deepAccess(bid, fieldPath);
523
+ const value = deepAccess(bid, fieldPath);
521
524
  if (!validateCb(value)) {
522
525
  errorCb(fieldPath, value, errorCbParam);
523
526
  }
@@ -526,16 +529,16 @@ function validateVideoParams(bid) {
526
529
  }
527
530
 
528
531
  try {
529
- validate('video.context', val => !utils.isEmpty(val), paramRequired);
532
+ validate('video.context', val => !isEmpty(val), paramRequired);
530
533
 
531
- validate('params.placementId', val => !utils.isEmpty(val), paramRequired);
534
+ validate('params.placementId', val => !isEmpty(val), paramRequired);
532
535
 
533
- validate('video.playerSize', val => utils.isArrayOfNums(val, 2) ||
534
- (utils.isArray(val) && val.every(v => utils.isArrayOfNums(v, 2))),
536
+ validate('video.playerSize', val => isArrayOfNums(val, 2) ||
537
+ (isArray(val) && val.every(v => isArrayOfNums(v, 2))),
535
538
  paramInvalid, 'array of 2 integers, ex: [640,480] or [[640,480]]');
536
539
 
537
540
  validate('video.mimes', val => isDefined(val), paramRequired);
538
- validate('video.mimes', val => utils.isArray(val) && val.every(v => utils.isStr(v)), paramInvalid,
541
+ validate('video.mimes', val => isArray(val) && val.every(v => isStr(v)), paramInvalid,
539
542
  'array of strings, ex: ["video/mp4"]');
540
543
 
541
544
  const placement = validate('video.placement', val => isDefined(val), paramRequired);
@@ -543,33 +546,33 @@ function validateVideoParams(bid) {
543
546
  if (placement === 1) {
544
547
  validate('video.startdelay', val => isDefined(val),
545
548
  (field, v) => paramRequired(field, v, 'placement == 1'));
546
- validate('video.startdelay', val => utils.isNumber(val), paramInvalid, 'number, ex: 5');
549
+ validate('video.startdelay', val => isNumber(val), paramInvalid, 'number, ex: 5');
547
550
  }
548
551
 
549
552
  validate('video.protocols', val => isDefined(val), paramRequired);
550
- validate('video.protocols', val => utils.isArrayOfNums(val) && val.every(v => (v >= 1 && v <= 6)),
553
+ validate('video.protocols', val => isArrayOfNums(val) && val.every(v => (v >= 1 && v <= 6)),
551
554
  paramInvalid, 'array of numbers, ex: [2,3]');
552
555
 
553
556
  validate('video.api', val => isDefined(val), paramRequired);
554
- validate('video.api', val => utils.isArrayOfNums(val) && val.every(v => (v >= 1 && v <= 6)),
557
+ validate('video.api', val => isArrayOfNums(val) && val.every(v => (v >= 1 && v <= 6)),
555
558
  paramInvalid, 'array of numbers, ex: [2,3]');
556
559
 
557
- validate('video.playbackmethod', val => !isDefined(val) || utils.isArrayOfNums(val), paramInvalid,
560
+ validate('video.playbackmethod', val => !isDefined(val) || isArrayOfNums(val), paramInvalid,
558
561
  'array of integers, ex: [2,6]');
559
562
 
560
563
  validate('video.maxduration', val => isDefined(val), paramRequired);
561
- validate('video.maxduration', val => utils.isInteger(val), paramInvalid);
562
- validate('video.minduration', val => !isDefined(val) || utils.isNumber(val), paramInvalid);
563
- validate('video.skippable', val => !isDefined(val) || utils.isBoolean(val), paramInvalid);
564
- validate('video.skipafter', val => !isDefined(val) || utils.isNumber(val), paramInvalid);
565
- validate('video.pos', val => !isDefined(val) || utils.isNumber(val), paramInvalid);
566
- validate('params.badv', val => !isDefined(val) || utils.isArray(val), paramInvalid,
564
+ validate('video.maxduration', val => isInteger(val), paramInvalid);
565
+ validate('video.minduration', val => !isDefined(val) || isNumber(val), paramInvalid);
566
+ validate('video.skippable', val => !isDefined(val) || isBoolean(val), paramInvalid);
567
+ validate('video.skipafter', val => !isDefined(val) || isNumber(val), paramInvalid);
568
+ validate('video.pos', val => !isDefined(val) || isNumber(val), paramInvalid);
569
+ validate('params.badv', val => !isDefined(val) || isArray(val), paramInvalid,
567
570
  'array of strings, ex: ["ford.com","pepsi.com"]');
568
- validate('params.bcat', val => !isDefined(val) || utils.isArray(val), paramInvalid,
571
+ validate('params.bcat', val => !isDefined(val) || isArray(val), paramInvalid,
569
572
  'array of strings, ex: ["IAB1-5","IAB1-6"]');
570
573
  return true;
571
574
  } catch (e) {
572
- utils.logError(e.message);
575
+ logError(e.message);
573
576
  return false;
574
577
  }
575
578
  }
@@ -595,3 +598,14 @@ function shortcutProperty(extraCharacters, target, propertyName) {
595
598
 
596
599
  return charactersLeft;
597
600
  }
601
+
602
+ /**
603
+ * Creates and returnes eids arr using createEidsArray from './userId/eids.js' module;
604
+ * @param {Object} openRtbRequest OpenRTB's request as a cource of userId.
605
+ * @return array of eids objects
606
+ */
607
+ function getEids(bidRequest) {
608
+ if (deepAccess(bidRequest, 'userId')) {
609
+ return createEidsArray(bidRequest.userId) || [];
610
+ }
611
+ };
@@ -1,10 +1,10 @@
1
+ import { isArray, deepClone } from '../src/utils.js';
1
2
  import {ajax} from '../src/ajax.js';
2
3
  import adapter from '../src/AnalyticsAdapter.js';
3
4
  import CONSTANTS from '../src/constants.json';
4
5
  import adapterManager from '../src/adapterManager.js';
5
6
  import { targeting } from '../src/targeting.js';
6
7
  import { auctionManager } from '../src/auctionManager.js';
7
- import * as utils from '../src/utils.js';
8
8
 
9
9
  const ANALYTICS_CODE = 'yieldone';
10
10
  const analyticsType = 'endpoint';
@@ -42,7 +42,7 @@ function makeAdUnitNameMap() {
42
42
  }
43
43
 
44
44
  function addAdUnitNameForArray(ar, map) {
45
- if (utils.isArray(ar)) {
45
+ if (isArray(ar)) {
46
46
  ar.forEach((it) => { addAdUnitName(it, map) });
47
47
  }
48
48
  }
@@ -51,14 +51,14 @@ function addAdUnitName(params, map) {
51
51
  if (params.adUnitCode && map[params.adUnitCode]) {
52
52
  params.adUnitName = map[params.adUnitCode];
53
53
  }
54
- if (utils.isArray(params.adUnits)) {
54
+ if (isArray(params.adUnits)) {
55
55
  params.adUnits.forEach((adUnit) => {
56
56
  if (adUnit.code && map[adUnit.code]) {
57
57
  adUnit.name = map[adUnit.code];
58
58
  }
59
59
  });
60
60
  }
61
- if (utils.isArray(params.adUnitCodes)) {
61
+ if (isArray(params.adUnitCodes)) {
62
62
  params.adUnitNames = params.adUnitCodes.map((code) => map[code]);
63
63
  }
64
64
  ['bids', 'bidderRequests', 'bidsReceived', 'noBids'].forEach((it) => {
@@ -71,13 +71,13 @@ const yieldoneAnalytics = Object.assign(adapter({analyticsType}), {
71
71
  track({eventType, args = {}}) {
72
72
  if (eventType === CONSTANTS.EVENTS.BID_REQUESTED) {
73
73
  const reqBidderId = `${args.bidderCode}_${args.auctionId}`;
74
- requestedBidders[reqBidderId] = utils.deepClone(args);
74
+ requestedBidders[reqBidderId] = deepClone(args);
75
75
  requestedBidders[reqBidderId].bids = [];
76
76
  args.bids.forEach((bid) => {
77
77
  requestedBids[`${bid.bidId}_${bid.auctionId}`] = bid;
78
78
  });
79
79
  }
80
- if (eventType === CONSTANTS.EVENTS.BID_TIMEOUT && utils.isArray(args)) {
80
+ if (eventType === CONSTANTS.EVENTS.BID_TIMEOUT && isArray(args)) {
81
81
  const eventsStorage = yieldoneAnalytics.eventsStorage;
82
82
  const reqBidders = {};
83
83
  args.forEach((bid) => {
@@ -1,4 +1,4 @@
1
- import * as utils from '../src/utils.js';
1
+ import { deepAccess, isEmpty, parseSizesInput, isStr, logWarn } from '../src/utils.js';
2
2
  import {config} from '../src/config.js';
3
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
4
  import { Renderer } from '../src/Renderer.js';
@@ -40,21 +40,21 @@ export const spec = {
40
40
  t: 'i'
41
41
  };
42
42
 
43
- const videoMediaType = utils.deepAccess(bidRequest, 'mediaTypes.video');
44
- if ((utils.isEmpty(bidRequest.mediaType) && utils.isEmpty(bidRequest.mediaTypes)) ||
43
+ const videoMediaType = deepAccess(bidRequest, 'mediaTypes.video');
44
+ if ((isEmpty(bidRequest.mediaType) && isEmpty(bidRequest.mediaTypes)) ||
45
45
  (bidRequest.mediaType === BANNER || (bidRequest.mediaTypes && bidRequest.mediaTypes[BANNER]))) {
46
- const sizes = utils.deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes;
47
- payload.sz = utils.parseSizesInput(sizes).join(',');
46
+ const sizes = deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes;
47
+ payload.sz = parseSizesInput(sizes).join(',');
48
48
  } else if (bidRequest.mediaType === VIDEO || videoMediaType) {
49
- const sizes = utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize') || bidRequest.sizes;
50
- const size = utils.parseSizesInput(sizes)[0];
49
+ const sizes = deepAccess(bidRequest, 'mediaTypes.video.playerSize') || bidRequest.sizes;
50
+ const size = parseSizesInput(sizes)[0];
51
51
  payload.w = size.split('x')[0];
52
52
  payload.h = size.split('x')[1];
53
53
  }
54
54
 
55
55
  // LiveRampID
56
- const idlEnv = utils.deepAccess(bidRequest, 'userId.idl_env');
57
- if (utils.isStr(idlEnv) && !utils.isEmpty(idlEnv)) {
56
+ const idlEnv = deepAccess(bidRequest, 'userId.idl_env');
57
+ if (isStr(idlEnv) && !isEmpty(idlEnv)) {
58
58
  payload.lr_env = idlEnv;
59
59
  }
60
60
 
@@ -177,7 +177,7 @@ function newRenderer(response) {
177
177
  try {
178
178
  renderer.setRender(outstreamRender);
179
179
  } catch (err) {
180
- utils.logWarn('Prebid Error calling setRender on newRenderer', err);
180
+ logWarn('Prebid Error calling setRender on newRenderer', err);
181
181
  }
182
182
 
183
183
  return renderer;
@@ -199,7 +199,7 @@ function newCmerRenderer(response) {
199
199
  try {
200
200
  renderer.setRender(cmerRender);
201
201
  } catch (err) {
202
- utils.logWarn('Prebid Error calling setRender on newRenderer', err);
202
+ logWarn('Prebid Error calling setRender on newRenderer', err);
203
203
  }
204
204
 
205
205
  return renderer;