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,19 +1,19 @@
1
- import * as utils from '../src/utils.js';
2
- import { registerBidder } from '../src/adapters/bidderFactory.js';
3
- import { BANNER } from '../src/mediaTypes.js';
1
+ import { deepAccess, isEmpty } from '../src/utils.js'
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js'
3
+ import { BANNER } from '../src/mediaTypes.js'
4
4
  // import { config } from 'src/config'
5
5
 
6
- const BIDDER_CODE = 'nativo';
7
- const BIDDER_ENDPOINT = 'https://exchange.postrelease.com/prebid';
6
+ const BIDDER_CODE = 'nativo'
7
+ const BIDDER_ENDPOINT = 'https://exchange.postrelease.com/prebid'
8
8
 
9
- const GVLID = 263;
9
+ const GVLID = 263
10
10
 
11
- const TIME_TO_LIVE = 360;
11
+ const TIME_TO_LIVE = 360
12
12
 
13
- const SUPPORTED_AD_TYPES = [BANNER];
13
+ const SUPPORTED_AD_TYPES = [BANNER]
14
14
 
15
- const bidRequestMap = {};
16
- const adUnitsRequested = {};
15
+ const bidRequestMap = {}
16
+ const adUnitsRequested = {}
17
17
 
18
18
  // Prebid adapter referrence doc: https://docs.prebid.org/dev-docs/bidder-adaptor.html
19
19
 
@@ -30,7 +30,7 @@ export const spec = {
30
30
  * @return boolean True if this is a valid bid, and false otherwise.
31
31
  */
32
32
  isBidRequestValid: function (bid) {
33
- return bid.params && !!bid.params.placementId
33
+ return true
34
34
  },
35
35
 
36
36
  /**
@@ -42,27 +42,37 @@ export const spec = {
42
42
  * @return ServerRequest Info describing the request to the server.
43
43
  */
44
44
  buildRequests: function (validBidRequests, bidderRequest) {
45
- const placementIds = []
45
+ const placementIds = new Set()
46
46
  const placmentBidIdMap = {}
47
47
  let placementId, pageUrl
48
48
  validBidRequests.forEach((request) => {
49
- pageUrl = pageUrl || request.params.url // Use the first url value found
50
- placementId = request.params.placementId
51
- placementIds.push(placementId)
52
- placmentBidIdMap[placementId] = {
49
+ pageUrl = deepAccess(
50
+ request,
51
+ 'params.url',
52
+ bidderRequest.refererInfo.referer
53
+ )
54
+ placementId = deepAccess(request, 'params.placementId')
55
+
56
+ if (placementId) {
57
+ placementIds.add(placementId)
58
+ }
59
+
60
+ var key = placementId || request.adUnitCode
61
+ placmentBidIdMap[key] = {
53
62
  bidId: request.bidId,
54
63
  size: getLargestSize(request.sizes),
55
64
  }
56
65
  })
57
66
  bidRequestMap[bidderRequest.bidderRequestId] = placmentBidIdMap
58
67
 
59
- if (!pageUrl) pageUrl = bidderRequest.refererInfo.referer
60
-
61
68
  // Build adUnit data
62
69
  const adUnitData = {
63
70
  adUnits: validBidRequests.map((adUnit) => {
64
71
  // Track if we've already requested for this ad unit code
65
- adUnitsRequested[adUnit.adUnitCode] = adUnitsRequested[adUnit.adUnitCode] !== undefined ? adUnitsRequested[adUnit.adUnitCode]++ : 0
72
+ adUnitsRequested[adUnit.adUnitCode] =
73
+ adUnitsRequested[adUnit.adUnitCode] !== undefined
74
+ ? adUnitsRequested[adUnit.adUnitCode] + 1
75
+ : 0
66
76
  return {
67
77
  adUnitCode: adUnit.adUnitCode,
68
78
  mediaTypes: adUnit.mediaTypes,
@@ -72,7 +82,6 @@ export const spec = {
72
82
 
73
83
  // Build QS Params
74
84
  let params = [
75
- { key: 'ntv_ptd', value: placementIds.toString() },
76
85
  { key: 'ntv_pb_rid', value: bidderRequest.bidderRequestId },
77
86
  {
78
87
  key: 'ntv_ppc',
@@ -80,14 +89,18 @@ export const spec = {
80
89
  },
81
90
  {
82
91
  key: 'ntv_dbr',
83
- value: btoa(JSON.stringify(adUnitsRequested))
92
+ value: btoa(JSON.stringify(adUnitsRequested)),
84
93
  },
85
94
  {
86
95
  key: 'ntv_url',
87
96
  value: encodeURIComponent(pageUrl),
88
- }
97
+ },
89
98
  ]
90
99
 
100
+ if (placementIds.size > 0) {
101
+ params.unshift({ key: 'ntv_ptd', value: [...placementIds].join(',') })
102
+ }
103
+
91
104
  if (bidderRequest.gdprConsent) {
92
105
  // Put on the beginning of the qs param array
93
106
  params.unshift({
@@ -120,7 +133,7 @@ export const spec = {
120
133
  */
121
134
  interpretResponse: function (response, request) {
122
135
  // If the bid response was empty, return []
123
- if (!response || !response.body || utils.isEmpty(response.body)) return []
136
+ if (!response || !response.body || isEmpty(response.body)) return []
124
137
 
125
138
  try {
126
139
  const body =
@@ -135,7 +148,7 @@ export const spec = {
135
148
  let bidResponse, adUnit
136
149
  seatbids.forEach((seatbid) => {
137
150
  seatbid.bid.forEach((bid) => {
138
- adUnit = this.getRequestId(body.id, bid.impid)
151
+ adUnit = this.getAdUnitData(body.id, bid)
139
152
  bidResponse = {
140
153
  requestId: adUnit.bidId,
141
154
  cpm: bid.price,
@@ -216,7 +229,7 @@ export const spec = {
216
229
  let body
217
230
  serverResponses.forEach((response) => {
218
231
  // If the bid response was empty, return []
219
- if (!response || !response.body || utils.isEmpty(response.body)) {
232
+ if (!response || !response.body || isEmpty(response.body)) {
220
233
  return syncs
221
234
  }
222
235
 
@@ -268,14 +281,16 @@ export const spec = {
268
281
  /**
269
282
  * Maps Prebid's bidId to Nativo's placementId values per unique bidderRequestId
270
283
  * @param {String} bidderRequestId - The unique ID value associated with the bidderRequest
271
- * @param {String} placementId - The placement ID value from Nativo
284
+ * @param {Object} bid - The placement ID value from Nativo
272
285
  * @returns {String} - The bidId value associated with the corresponding placementId
273
286
  */
274
- getRequestId: function (bidderRequestId, placementId) {
275
- return (
276
- bidRequestMap[bidderRequestId] &&
277
- bidRequestMap[bidderRequestId][placementId]
278
- )
287
+ getAdUnitData: function (bidderRequestId, bid) {
288
+ var data = deepAccess(bidRequestMap, `${bidderRequestId}.${bid.impid}`)
289
+
290
+ if (data) return data
291
+
292
+ var unitCode = deepAccess(bid, 'ext.ad_unit_id')
293
+ return deepAccess(bidRequestMap, `${bidderRequestId}.${unitCode}`)
279
294
  },
280
295
  }
281
296
  registerBidder(spec)
@@ -29,7 +29,6 @@ var adUnits = [
29
29
  bids: [{
30
30
  bidder: 'nativo',
31
31
  params: {
32
- placementId: 1125609,
33
32
  url: 'https://test-sites.internal.nativo.net/testing/prebid_adpater.html'
34
33
  }
35
34
  }]
@@ -4,7 +4,7 @@
4
4
  * @module modules/naveggId
5
5
  * @requires module:modules/userId
6
6
  */
7
- import * as utils from '../src/utils.js'
7
+ import { isStr, isPlainObject, logError } from '../src/utils.js';
8
8
  import { submodule } from '../src/hook.js';
9
9
  import { getStorageManager } from '../src/storageManager.js';
10
10
 
@@ -58,7 +58,7 @@ export const naveggIdSubmodule = {
58
58
  * @return { Object | string | undefined }
59
59
  */
60
60
  decode(value) {
61
- const naveggIdVal = value ? utils.isStr(value) ? value : utils.isPlainObject(value) ? value.id : undefined : undefined;
61
+ const naveggIdVal = value ? isStr(value) ? value : isPlainObject(value) ? value.id : undefined : undefined;
62
62
  return naveggIdVal ? {
63
63
  'naveggId': naveggIdVal
64
64
  } : undefined;
@@ -81,7 +81,7 @@ export const naveggIdSubmodule = {
81
81
  try {
82
82
  return { id: naveggIdString };
83
83
  } catch (error) {
84
- utils.logError(error);
84
+ logError(error);
85
85
  }
86
86
  }
87
87
  return undefined;
@@ -1,5 +1,5 @@
1
+ import { isStr, _each, getBidIdParameter } 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 BIDDER_CODE = 'nextMillennium';
@@ -12,20 +12,20 @@ export const spec = {
12
12
 
13
13
  isBidRequestValid: function(bid) {
14
14
  return !!(
15
- bid.params.placement_id && utils.isStr(bid.params.placement_id)
15
+ bid.params.placement_id && isStr(bid.params.placement_id)
16
16
  );
17
17
  },
18
18
 
19
19
  buildRequests: function(validBidRequests, bidderRequest) {
20
20
  const requests = [];
21
21
 
22
- utils._each(validBidRequests, function(bid) {
22
+ _each(validBidRequests, function(bid) {
23
23
  const postBody = {
24
24
  'id': bid.auctionId,
25
25
  'ext': {
26
26
  'prebid': {
27
27
  'storedrequest': {
28
- 'id': utils.getBidIdParameter('placement_id', bid.params)
28
+ 'id': getBidIdParameter('placement_id', bid.params)
29
29
  }
30
30
  }
31
31
  }
@@ -60,8 +60,8 @@ export const spec = {
60
60
  const response = serverResponse.body;
61
61
  const bidResponses = [];
62
62
 
63
- utils._each(response.seatbid, (resp) => {
64
- utils._each(resp.bid, (bid) => {
63
+ _each(response.seatbid, (resp) => {
64
+ _each(resp.bid, (bid) => {
65
65
  bidResponses.push({
66
66
  requestId: bidRequest.bidId,
67
67
  cpm: bid.price,
@@ -0,0 +1,375 @@
1
+ import {
2
+ deepAccess,
3
+ parseUrl,
4
+ isNumber,
5
+ getBidIdParameter,
6
+ isPlainObject,
7
+ isFn,
8
+ isStr,
9
+ replaceAuctionPrice,
10
+ isArray,
11
+ } from '../src/utils.js';
12
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
13
+ import { BANNER, NATIVE } from '../src/mediaTypes.js';
14
+
15
+ import find from 'core-js-pure/features/array/find.js';
16
+
17
+ const BIDDER_CODE = 'nextroll';
18
+ const BIDDER_ENDPOINT = 'https://d.adroll.com/bid/prebid/';
19
+ const ADAPTER_VERSION = 5;
20
+
21
+ export const spec = {
22
+ code: BIDDER_CODE,
23
+ supportedMediaTypes: [BANNER, NATIVE],
24
+
25
+ /**
26
+ * Determines whether or not the given bid request is valid.
27
+ *
28
+ * @param {BidRequest} bid The bid params to validate.
29
+ * @return boolean True if this is a valid bid, and false otherwise.
30
+ */
31
+ isBidRequestValid: function (bidRequest) {
32
+ return bidRequest !== undefined && !!bidRequest.params && !!bidRequest.bidId;
33
+ },
34
+
35
+ /**
36
+ * Make a server request from the list of BidRequests.
37
+ *
38
+ * @param {validBidRequests[]} - an array of bids
39
+ * @return ServerRequest Info describing the request to the server.
40
+ */
41
+ buildRequests: function (validBidRequests, bidderRequest) {
42
+ let topLocation = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer'));
43
+
44
+ return validBidRequests.map((bidRequest) => {
45
+ return {
46
+ method: 'POST',
47
+ options: {
48
+ withCredentials: true,
49
+ },
50
+ url: BIDDER_ENDPOINT,
51
+ data: {
52
+ id: bidRequest.bidId,
53
+ imp: {
54
+ id: bidRequest.bidId,
55
+ bidfloor: _getFloor(bidRequest),
56
+ banner: _getBanner(bidRequest),
57
+ native: _getNative(deepAccess(bidRequest, 'mediaTypes.native')),
58
+ ext: {
59
+ zone: {
60
+ id: getBidIdParameter('zoneId', bidRequest.params)
61
+ },
62
+ nextroll: {
63
+ adapter_version: ADAPTER_VERSION
64
+ }
65
+ }
66
+ },
67
+
68
+ user: _getUser(validBidRequests),
69
+ site: _getSite(bidRequest, topLocation),
70
+ seller: _getSeller(bidRequest),
71
+ device: _getDevice(bidRequest),
72
+ regs: _getRegs(bidderRequest)
73
+ }
74
+ };
75
+ });
76
+ },
77
+
78
+ /**
79
+ * Unpack the response from the server into a list of bids.
80
+ *
81
+ * @param {ServerResponse} serverResponse A successful response from the server.
82
+ * @return {Bid[]} An array of bids which were nested inside the server.
83
+ */
84
+ interpretResponse: function (serverResponse, bidRequest) {
85
+ if (!serverResponse.body) {
86
+ return [];
87
+ } else {
88
+ let response = serverResponse.body
89
+ let bids = response.seatbid.reduce((acc, seatbid) => acc.concat(seatbid.bid), []);
90
+ return bids.map((bid) => _buildResponse(response, bid));
91
+ }
92
+ }
93
+ }
94
+
95
+ function _getBanner(bidRequest) {
96
+ let sizes = _getSizes(bidRequest);
97
+ if (sizes === undefined) return undefined;
98
+ return {format: sizes};
99
+ }
100
+
101
+ function _getNative(mediaTypeNative) {
102
+ if (mediaTypeNative === undefined) return undefined;
103
+ let assets = _getNativeAssets(mediaTypeNative);
104
+ if (assets === undefined || assets.length == 0) return undefined;
105
+ return {
106
+ request: {
107
+ native: {
108
+ assets: assets
109
+ }
110
+ }
111
+ };
112
+ }
113
+
114
+ /*
115
+ id: Unique numeric id for the asset
116
+ kind: OpenRTB kind of asset. Supported: title, img and data.
117
+ key: Name of property that comes in the mediaType.native object.
118
+ type: OpenRTB type for that spefic kind of asset.
119
+ required: Overrides the asset required field configured, only overrides when is true.
120
+ */
121
+ const NATIVE_ASSET_MAP = [
122
+ {id: 1, kind: 'title', key: 'title', required: true},
123
+ {id: 2, kind: 'img', key: 'image', type: 3, required: true},
124
+ {id: 3, kind: 'img', key: 'icon', type: 1},
125
+ {id: 4, kind: 'img', key: 'logo', type: 2},
126
+ {id: 5, kind: 'data', key: 'sponsoredBy', type: 1},
127
+ {id: 6, kind: 'data', key: 'body', type: 2}
128
+ ];
129
+
130
+ const ASSET_KIND_MAP = {
131
+ title: _getTitleAsset,
132
+ img: _getImageAsset,
133
+ data: _getDataAsset,
134
+ };
135
+
136
+ function _getAsset(mediaTypeNative, assetMap) {
137
+ const asset = mediaTypeNative[assetMap.key];
138
+ if (asset === undefined) return undefined;
139
+ const assetFunc = ASSET_KIND_MAP[assetMap.kind];
140
+ return {
141
+ id: assetMap.id,
142
+ required: (assetMap.required || !!asset.required) ? 1 : 0,
143
+ [assetMap.kind]: assetFunc(asset, assetMap)
144
+ };
145
+ }
146
+
147
+ function _getTitleAsset(title, _assetMap) {
148
+ return {len: title.len || 0};
149
+ }
150
+
151
+ function _getMinAspectRatio(aspectRatio, property) {
152
+ if (!isPlainObject(aspectRatio)) return 1;
153
+
154
+ const ratio = aspectRatio['ratio_' + property];
155
+ const min = aspectRatio['min_' + property];
156
+
157
+ if (isNumber(ratio)) return ratio;
158
+ if (isNumber(min)) return min;
159
+
160
+ return 1;
161
+ }
162
+
163
+ function _getImageAsset(image, assetMap) {
164
+ const sizes = image.sizes;
165
+ const aspectRatio = image.aspect_ratios ? image.aspect_ratios[0] : undefined;
166
+
167
+ return {
168
+ type: assetMap.type,
169
+ w: (sizes ? sizes[0] : undefined),
170
+ h: (sizes ? sizes[1] : undefined),
171
+ wmin: _getMinAspectRatio(aspectRatio, 'width'),
172
+ hmin: _getMinAspectRatio(aspectRatio, 'height'),
173
+ };
174
+ }
175
+
176
+ function _getDataAsset(data, assetMap) {
177
+ return {
178
+ type: assetMap.type,
179
+ len: data.len || 0
180
+ };
181
+ }
182
+
183
+ function _getNativeAssets(mediaTypeNative) {
184
+ return NATIVE_ASSET_MAP
185
+ .map(assetMap => _getAsset(mediaTypeNative, assetMap))
186
+ .filter(asset => asset !== undefined);
187
+ }
188
+
189
+ function _getUser(requests) {
190
+ const id = deepAccess(requests, '0.userId.nextrollId');
191
+ if (id === undefined) {
192
+ return;
193
+ }
194
+
195
+ return {
196
+ ext: {
197
+ eid: [{
198
+ 'source': 'nextroll',
199
+ id
200
+ }]
201
+ }
202
+ };
203
+ }
204
+
205
+ function _getFloor(bidRequest) {
206
+ if (!isFn(bidRequest.getFloor)) {
207
+ return (bidRequest.params.bidfloor) ? bidRequest.params.bidfloor : null;
208
+ }
209
+
210
+ let floor = bidRequest.getFloor({
211
+ currency: 'USD',
212
+ mediaType: '*',
213
+ size: '*'
214
+ });
215
+
216
+ if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'USD') {
217
+ return floor.floor;
218
+ }
219
+ return null;
220
+ }
221
+
222
+ function _buildResponse(bidResponse, bid) {
223
+ let response = {
224
+ requestId: bidResponse.id,
225
+ cpm: bid.price,
226
+ width: bid.w,
227
+ height: bid.h,
228
+ creativeId: bid.crid,
229
+ dealId: bidResponse.dealId,
230
+ currency: 'USD',
231
+ netRevenue: true,
232
+ ttl: 300,
233
+ meta: {
234
+ advertiserDomains: bidResponse.adomain || []
235
+ }
236
+ };
237
+ if (isStr(bid.adm)) {
238
+ response.mediaType = BANNER;
239
+ response.ad = replaceAuctionPrice(bid.adm, bid.price);
240
+ } else {
241
+ response.mediaType = NATIVE;
242
+ response.native = _getNativeResponse(bid.adm, bid.price);
243
+ }
244
+ return response;
245
+ }
246
+
247
+ const privacyLink = 'https://info.evidon.com/pub_info/573';
248
+ const privacyIcon = 'https://c.betrad.com/pub/icon1.png';
249
+
250
+ function _getNativeResponse(adm, price) {
251
+ let baseResponse = {
252
+ clickTrackers: (adm.link && adm.link.clicktrackers) || [],
253
+ jstracker: adm.jstracker || [],
254
+ clickUrl: replaceAuctionPrice(adm.link.url, price),
255
+ impressionTrackers: adm.imptrackers.map(impTracker => replaceAuctionPrice(impTracker, price)),
256
+ privacyLink: privacyLink,
257
+ privacyIcon: privacyIcon
258
+ };
259
+ return adm.assets.reduce((accResponse, asset) => {
260
+ const assetMaps = NATIVE_ASSET_MAP.filter(assetMap => assetMap.id === asset.id && asset[assetMap.kind] !== undefined);
261
+ if (assetMaps.length === 0) return accResponse;
262
+ const assetMap = assetMaps[0];
263
+ accResponse[assetMap.key] = _getAssetResponse(asset, assetMap);
264
+ return accResponse;
265
+ }, baseResponse);
266
+ }
267
+
268
+ function _getAssetResponse(asset, assetMap) {
269
+ switch (assetMap.kind) {
270
+ case 'title':
271
+ return asset.title.text;
272
+
273
+ case 'img':
274
+ return {
275
+ url: asset.img.url,
276
+ width: asset.img.w,
277
+ height: asset.img.h
278
+ };
279
+
280
+ case 'data':
281
+ return asset.data.value;
282
+ }
283
+ }
284
+
285
+ function _getSite(bidRequest, topLocation) {
286
+ return {
287
+ page: topLocation.href,
288
+ domain: topLocation.hostname,
289
+ publisher: {
290
+ id: getBidIdParameter('publisherId', bidRequest.params)
291
+ }
292
+ };
293
+ }
294
+
295
+ function _getSeller(bidRequest) {
296
+ return {
297
+ id: getBidIdParameter('sellerId', bidRequest.params)
298
+ };
299
+ }
300
+
301
+ function _getSizes(bidRequest) {
302
+ if (!isArray(bidRequest.sizes)) {
303
+ return undefined;
304
+ }
305
+ return bidRequest.sizes.filter(_isValidSize).map(size => {
306
+ return {
307
+ w: size[0],
308
+ h: size[1]
309
+ }
310
+ });
311
+ }
312
+
313
+ function _isValidSize(size) {
314
+ const isNumber = x => typeof x === 'number';
315
+ return (size.length === 2 && isNumber(size[0]) && isNumber(size[1]));
316
+ }
317
+
318
+ function _getDevice(_bidRequest) {
319
+ return {
320
+ ua: navigator.userAgent,
321
+ language: navigator['language'],
322
+ os: _getOs(navigator.userAgent.toLowerCase()),
323
+ osv: _getOsVersion(navigator.userAgent)
324
+ };
325
+ }
326
+
327
+ function _getRegs(bidderRequest) {
328
+ if (!bidderRequest || !bidderRequest.uspConsent) {
329
+ return undefined;
330
+ }
331
+ return {
332
+ ext: {
333
+ us_privacy: bidderRequest.uspConsent
334
+ }
335
+ };
336
+ }
337
+
338
+ function _getOs(userAgent) {
339
+ const osTable = {
340
+ 'android': /android/i,
341
+ 'ios': /iphone|ipad/i,
342
+ 'mac': /mac/i,
343
+ 'linux': /linux/i,
344
+ 'windows': /windows/i
345
+ };
346
+
347
+ return find(Object.keys(osTable), os => {
348
+ if (userAgent.match(osTable[os])) {
349
+ return os;
350
+ }
351
+ }) || 'etc';
352
+ }
353
+
354
+ function _getOsVersion(userAgent) {
355
+ const clientStrings = [
356
+ { s: 'Android', r: /Android/ },
357
+ { s: 'iOS', r: /(iPhone|iPad|iPod)/ },
358
+ { s: 'Mac OS X', r: /Mac OS X/ },
359
+ { s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
360
+ { s: 'Linux', r: /(Linux|X11)/ },
361
+ { s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/ },
362
+ { s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ },
363
+ { s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ },
364
+ { s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ },
365
+ { s: 'Windows Vista', r: /Windows NT 6.0/ },
366
+ { s: 'Windows Server 2003', r: /Windows NT 5.2/ },
367
+ { s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ },
368
+ { s: 'UNIX', r: /UNIX/ },
369
+ { s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }
370
+ ];
371
+ let cs = find(clientStrings, cs => cs.r.test(userAgent));
372
+ return cs ? cs.s : 'unknown';
373
+ }
374
+
375
+ registerBidder(spec);
@@ -1,4 +1,4 @@
1
- import * as utils from '../src/utils.js';
1
+ import { logInfo, deepAccess, logWarn, isArray, getParameterByName } from '../src/utils.js';
2
2
  import { config } from '../src/config.js';
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
4
  import { BANNER, VIDEO } from '../src/mediaTypes.js';
@@ -7,14 +7,14 @@ import { getStorageManager } from '../src/storageManager.js';
7
7
  const GVLID = 816;
8
8
  const BIDDER_CODE = 'nobid';
9
9
  const storage = getStorageManager(GVLID, BIDDER_CODE);
10
- window.nobidVersion = '1.3.1';
10
+ window.nobidVersion = '1.3.2';
11
11
  window.nobid = window.nobid || {};
12
12
  window.nobid.bidResponses = window.nobid.bidResponses || {};
13
13
  window.nobid.timeoutTotal = 0;
14
14
  window.nobid.bidWonTotal = 0;
15
15
  window.nobid.refreshCount = 0;
16
16
  function log(msg, obj) {
17
- utils.logInfo('-NoBid- ' + msg, obj)
17
+ logInfo('-NoBid- ' + msg, obj)
18
18
  }
19
19
  function nobidSetCookie(cname, cvalue, hours) {
20
20
  var d = new Date();
@@ -29,7 +29,7 @@ function nobidHasPurpose1Consent(bidderRequest) {
29
29
  let result = true;
30
30
  if (bidderRequest && bidderRequest.gdprConsent) {
31
31
  if (bidderRequest.gdprConsent.gdprApplies && bidderRequest.gdprConsent.apiVersion === 2) {
32
- result = !!(utils.deepAccess(bidderRequest.gdprConsent, 'vendorData.purpose.consents.1') === true);
32
+ result = !!(deepAccess(bidderRequest.gdprConsent, 'vendorData.purpose.consents.1') === true);
33
33
  }
34
34
  }
35
35
  return result;
@@ -112,11 +112,11 @@ function nobidBuildRequests(bids, bidderRequest) {
112
112
  var height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
113
113
  return `${width}x${height}`;
114
114
  } catch (e) {
115
- utils.logWarn('Could not parse screen dimensions, error details:', e);
115
+ logWarn('Could not parse screen dimensions, error details:', e);
116
116
  }
117
117
  }
118
118
  var getEIDs = function(eids) {
119
- if (utils.isArray(eids) && eids.length > 0) {
119
+ if (isArray(eids) && eids.length > 0) {
120
120
  let src = [];
121
121
  eids.forEach((eid) => {
122
122
  let ids = [];
@@ -150,8 +150,9 @@ function nobidBuildRequests(bids, bidderRequest) {
150
150
  if (sch) state['schain'] = sch;
151
151
  const cop = coppa();
152
152
  if (cop) state['coppa'] = cop;
153
- const eids = getEIDs(utils.deepAccess(bids, '0.userIdAsEids'));
153
+ const eids = getEIDs(deepAccess(bids, '0.userIdAsEids'));
154
154
  if (eids && eids.length > 0) state['eids'] = eids;
155
+ if (config && config.getConfig('ortb2')) state['ortb2'] = config.getConfig('ortb2');
155
156
  return state;
156
157
  }
157
158
  function newAdunit(adunitObject, adunits) {
@@ -228,8 +229,8 @@ function nobidBuildRequests(bids, bidderRequest) {
228
229
  var placementId = bid.params['placementId'];
229
230
 
230
231
  var adType = 'banner';
231
- const videoMediaType = utils.deepAccess(bid, 'mediaTypes.video');
232
- const context = utils.deepAccess(bid, 'mediaTypes.video.context');
232
+ const videoMediaType = deepAccess(bid, 'mediaTypes.video');
233
+ const context = deepAccess(bid, 'mediaTypes.video.context');
233
234
  if (bid.mediaType === VIDEO || (videoMediaType && (context === 'instream' || context === 'outstream'))) {
234
235
  adType = 'video';
235
236
  }
@@ -363,7 +364,7 @@ export const spec = {
363
364
  buildRequests: function(validBidRequests, bidderRequest) {
364
365
  function resolveEndpoint() {
365
366
  var ret = 'https://ads.servenobid.com/';
366
- var env = (typeof utils.getParameterByName === 'function') && (utils.getParameterByName('nobid-env'));
367
+ var env = (typeof getParameterByName === 'function') && (getParameterByName('nobid-env'));
367
368
  if (!env) ret = 'https://ads.servenobid.com/';
368
369
  else if (env == 'beta') ret = 'https://beta.servenobid.com/';
369
370
  else if (env == 'dev') ret = '//localhost:8282/';
@@ -448,7 +449,7 @@ export const spec = {
448
449
  }
449
450
  return syncs;
450
451
  } else {
451
- utils.logWarn('-NoBid- Please enable iframe based user sync.', syncOptions);
452
+ logWarn('-NoBid- Please enable iframe based user sync.', syncOptions);
452
453
  return [];
453
454
  }
454
455
  },