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
@@ -0,0 +1,290 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from 'modules/nextrollBidAdapter.js';
3
+ import * as utils from 'src/utils.js';
4
+ import { deepClone } from '../../../src/utils';
5
+
6
+ describe('nextrollBidAdapter', function() {
7
+ let utilsMock;
8
+ beforeEach(function () {
9
+ utilsMock = sinon.mock(utils);
10
+ });
11
+
12
+ afterEach(function() {
13
+ global.NextRoll = undefined;
14
+ utilsMock.restore();
15
+ });
16
+
17
+ let validBid = {
18
+ bidder: 'nextroll',
19
+ adUnitCode: 'adunit-code',
20
+ bidId: 'bid_id',
21
+ sizes: [[300, 200]],
22
+ params: {
23
+ bidfloor: 1,
24
+ zoneId: 'zone1',
25
+ publisherId: 'publisher_id'
26
+ }
27
+ };
28
+ let bidWithoutValidId = { id: '' };
29
+ let bidWithoutId = { params: { zoneId: 'zone1' } };
30
+
31
+ describe('nativeBidRequest', () => {
32
+ it('validates native spec', () => {
33
+ let nativeAdUnit = [{
34
+ bidder: 'nextroll',
35
+ adUnitCode: 'adunit-code',
36
+ bidId: 'bid_id',
37
+ mediaTypes: {
38
+ native: {
39
+ title: {required: true, len: 80},
40
+ image: {required: true, sizes: [728, 90]},
41
+ sponsoredBy: {required: false, len: 20},
42
+ clickUrl: {required: true},
43
+ body: {required: true, len: 25},
44
+ icon: {required: true, sizes: [50, 50], aspect_ratios: [{ratio_height: 3, ratio_width: 4}]},
45
+ someRandomAsset: {required: false, len: 100} // This should be ignored
46
+ }
47
+ },
48
+ params: {
49
+ bidfloor: 1,
50
+ zoneId: 'zone1',
51
+ publisherId: 'publisher_id'
52
+ }
53
+ }];
54
+
55
+ let request = spec.buildRequests(nativeAdUnit)
56
+ let assets = request[0].data.imp.native.request.native.assets
57
+
58
+ let excptedAssets = [
59
+ {id: 1, required: 1, title: {len: 80}},
60
+ {id: 2, required: 1, img: {w: 728, h: 90, wmin: 1, hmin: 1, type: 3}},
61
+ {id: 3, required: 1, img: {w: 50, h: 50, wmin: 4, hmin: 3, type: 1}},
62
+ {id: 5, required: 0, data: {len: 20, type: 1}},
63
+ {id: 6, required: 1, data: {len: 25, type: 2}}
64
+ ]
65
+ expect(assets).to.be.deep.equal(excptedAssets)
66
+ })
67
+ })
68
+
69
+ describe('isBidRequestValid', function() {
70
+ it('validates the bids correctly when the bid has an id', function() {
71
+ expect(spec.isBidRequestValid(validBid)).to.be.true;
72
+ });
73
+
74
+ it('validates the bids correcly when the bid does not have an id', function() {
75
+ expect(spec.isBidRequestValid(bidWithoutValidId)).to.be.false;
76
+ expect(spec.isBidRequestValid(bidWithoutId)).to.be.false;
77
+ });
78
+ });
79
+
80
+ describe('buildRequests', function() {
81
+ it('builds the same amount of requests as valid requests it takes', function() {
82
+ expect(spec.buildRequests([validBid, validBid], {})).to.be.lengthOf(2);
83
+ });
84
+
85
+ it('doest not build a request when there is no valid requests', function () {
86
+ expect(spec.buildRequests([], {})).to.be.lengthOf(0);
87
+ });
88
+
89
+ it('builds a request with POST method', function () {
90
+ expect(spec.buildRequests([validBid], {})[0].method).to.equal('POST');
91
+ });
92
+
93
+ it('builds a request with cookies method', function () {
94
+ expect(spec.buildRequests([validBid], {})[0].options.withCredentials).to.be.true;
95
+ });
96
+
97
+ it('builds a request with id, url and imp object', function () {
98
+ const request = spec.buildRequests([validBid], {})[0];
99
+ expect(request.data.id).to.be.an('string').that.is.not.empty;
100
+ expect(request.url).to.equal('https://d.adroll.com/bid/prebid/');
101
+ expect(request.data.imp).to.exist.and.to.be.a('object');
102
+ });
103
+
104
+ it('builds a request with site and device information', function () {
105
+ const request = spec.buildRequests([validBid], {})[0];
106
+
107
+ expect(request.data.site).to.exist.and.to.be.a('object');
108
+ expect(request.data.device).to.exist.and.to.be.a('object');
109
+ });
110
+
111
+ it('builds a request with a complete imp object', function () {
112
+ const request = spec.buildRequests([validBid], {})[0];
113
+
114
+ expect(request.data.imp.id).to.equal('bid_id');
115
+ expect(request.data.imp.bidfloor).to.be.equal(1);
116
+ expect(request.data.imp.banner).to.exist.and.to.be.a('object');
117
+ expect(request.data.imp.ext.zone.id).to.be.equal('zone1');
118
+ });
119
+
120
+ it('builds a request with the correct floor object', function () {
121
+ // bidfloor is defined, getFloor isn't
122
+ let bid = deepClone(validBid);
123
+ let request = spec.buildRequests([bid], {})[0];
124
+ expect(request.data.imp.bidfloor).to.be.equal(1);
125
+
126
+ // bidfloor not defined, getFloor not defined
127
+ bid = deepClone(validBid);
128
+ bid.params.bidfloor = null;
129
+ request = spec.buildRequests([bid], {})[0];
130
+ expect(request.data.imp.bidfloor).to.not.exist;
131
+
132
+ // bidfloor defined, getFloor defined, use getFloor
133
+ let getFloorResponse = { currency: 'USD', floor: 3 };
134
+ bid = deepClone(validBid);
135
+ bid.getFloor = () => getFloorResponse;
136
+ request = spec.buildRequests([bid], {})[0];
137
+
138
+ expect(request.data.imp.bidfloor).to.exist.and.to.equal(3);
139
+ });
140
+
141
+ it('includes the sizes into the request correctly', function () {
142
+ const bannerObject = spec.buildRequests([validBid], {})[0].data.imp.banner;
143
+
144
+ expect(bannerObject.format).to.exist;
145
+ expect(bannerObject.format).to.be.lengthOf(1);
146
+ expect(bannerObject.format[0].w).to.be.equal(300);
147
+ expect(bannerObject.format[0].h).to.be.equal(200);
148
+ });
149
+
150
+ it('sets the CCPA consent string', function () {
151
+ const us_privacy = '1YYY';
152
+ const request = spec.buildRequests([validBid], {'uspConsent': us_privacy})[0];
153
+
154
+ expect(request.data.regs.ext.us_privacy).to.be.equal(us_privacy);
155
+ });
156
+ });
157
+
158
+ describe('interpretResponse', function () {
159
+ let responseBody = {
160
+ id: 'bidresponse_id',
161
+ dealId: 'deal_id',
162
+ seatbid: [
163
+ {
164
+ bid: [
165
+ {
166
+ price: 1.2,
167
+ w: 300,
168
+ h: 200,
169
+ crid: 'crid1',
170
+ adm: 'adm1'
171
+ }
172
+ ]
173
+ },
174
+ {
175
+ bid: [
176
+ {
177
+ price: 2.1,
178
+ w: 250,
179
+ h: 300,
180
+ crid: 'crid2',
181
+ adm: 'adm2'
182
+ }
183
+ ]
184
+ }
185
+ ]
186
+ };
187
+
188
+ it('returns an empty list when there is no response body', function () {
189
+ expect(spec.interpretResponse({}, {})).to.be.eql([]);
190
+ });
191
+
192
+ it('builds the same amount of responses as server responses it receives', function () {
193
+ expect(spec.interpretResponse({body: responseBody}, {})).to.be.lengthOf(2);
194
+ });
195
+
196
+ it('builds a response with the expected fields', function () {
197
+ const response = spec.interpretResponse({body: responseBody}, {})[0];
198
+
199
+ expect(response.requestId).to.be.equal('bidresponse_id');
200
+ expect(response.cpm).to.be.equal(1.2);
201
+ expect(response.width).to.be.equal(300);
202
+ expect(response.height).to.be.equal(200);
203
+ expect(response.creativeId).to.be.equal('crid1');
204
+ expect(response.dealId).to.be.equal('deal_id');
205
+ expect(response.currency).to.be.equal('USD');
206
+ expect(response.netRevenue).to.be.equal(true);
207
+ expect(response.ttl).to.be.equal(300);
208
+ expect(response.ad).to.be.equal('adm1');
209
+ });
210
+ });
211
+
212
+ describe('interpret native response', () => {
213
+ let clickUrl = 'https://clickurl.com/with/some/path'
214
+ let titleText = 'Some title'
215
+ let imgW = 300
216
+ let imgH = 250
217
+ let imgUrl = 'https://clickurl.com/img.png'
218
+ let brandText = 'Some Brand'
219
+ let impUrl = 'https://clickurl.com/imptracker'
220
+
221
+ let responseBody = {
222
+ body: {
223
+ id: 'bidresponse_id',
224
+ seatbid: [{
225
+ bid: [{
226
+ price: 1.2,
227
+ crid: 'crid1',
228
+ adm: {
229
+ link: {url: clickUrl},
230
+ assets: [
231
+ {id: 1, title: {text: titleText}},
232
+ {id: 2, img: {w: imgW, h: imgH, url: imgUrl}},
233
+ {id: 5, data: {value: brandText}}
234
+ ],
235
+ imptrackers: [impUrl]
236
+ }
237
+ }]
238
+ }]
239
+ }
240
+ };
241
+
242
+ it('Should interpret response', () => {
243
+ let response = spec.interpretResponse(utils.deepClone(responseBody))
244
+ let expectedResponse = {
245
+ clickUrl: clickUrl,
246
+ impressionTrackers: [impUrl],
247
+ privacyLink: 'https://info.evidon.com/pub_info/573',
248
+ privacyIcon: 'https://c.betrad.com/pub/icon1.png',
249
+ title: titleText,
250
+ image: {url: imgUrl, width: imgW, height: imgH},
251
+ sponsoredBy: brandText,
252
+ clickTrackers: [],
253
+ jstracker: []
254
+ }
255
+
256
+ expect(response[0].native).to.be.deep.equal(expectedResponse)
257
+ })
258
+
259
+ it('Should interpret all assets', () => {
260
+ let allAssetsResponse = utils.deepClone(responseBody)
261
+ let iconUrl = imgUrl + '?icon=true', iconW = 10, iconH = 15
262
+ let logoUrl = imgUrl + '?logo=true', logoW = 20, logoH = 25
263
+ let bodyText = 'Some body text'
264
+
265
+ allAssetsResponse.body.seatbid[0].bid[0].adm.assets.push(...[
266
+ {id: 3, img: {w: iconW, h: iconH, url: iconUrl}},
267
+ {id: 4, img: {w: logoW, h: logoH, url: logoUrl}},
268
+ {id: 6, data: {value: bodyText}}
269
+ ])
270
+
271
+ let response = spec.interpretResponse(allAssetsResponse)
272
+ let expectedResponse = {
273
+ clickUrl: clickUrl,
274
+ impressionTrackers: [impUrl],
275
+ jstracker: [],
276
+ clickTrackers: [],
277
+ privacyLink: 'https://info.evidon.com/pub_info/573',
278
+ privacyIcon: 'https://c.betrad.com/pub/icon1.png',
279
+ title: titleText,
280
+ image: {url: imgUrl, width: imgW, height: imgH},
281
+ icon: {url: iconUrl, width: iconW, height: iconH},
282
+ logo: {url: logoUrl, width: logoW, height: logoH},
283
+ body: bodyText,
284
+ sponsoredBy: brandText
285
+ }
286
+
287
+ expect(response[0].native).to.be.deep.equal(expectedResponse)
288
+ })
289
+ })
290
+ });
@@ -2,6 +2,7 @@ import { expect } from 'chai';
2
2
  import * as utils from 'src/utils.js';
3
3
  import { spec } from 'modules/nobidBidAdapter.js';
4
4
  import { newBidder } from 'src/adapters/bidderFactory.js';
5
+ import { config } from 'src/config.js';
5
6
  import * as bidderFactory from 'src/adapters/bidderFactory.js';
6
7
 
7
8
  describe('Nobid Adapter', function () {
@@ -50,6 +51,70 @@ describe('Nobid Adapter', function () {
50
51
  });
51
52
  });
52
53
 
54
+ describe('Request with ORTB2', function () {
55
+ const SITE_ID = 2;
56
+ const REFERER = 'https://www.examplereferer.com';
57
+ const BIDDER_CODE = 'duration';
58
+ let bidRequests = [
59
+ {
60
+ 'bidder': BIDDER_CODE,
61
+ 'params': {
62
+ 'siteId': SITE_ID
63
+ },
64
+ 'adUnitCode': 'adunit-code',
65
+ 'sizes': [[300, 250]],
66
+ 'bidId': '30b31c1838de1e',
67
+ 'bidderRequestId': '22edbae2733bf6',
68
+ 'auctionId': '1d1a030790a475',
69
+ }
70
+ ];
71
+
72
+ let bidderRequest = {
73
+ refererInfo: {referer: REFERER}, bidderCode: BIDDER_CODE
74
+ }
75
+
76
+ const siteName = 'example';
77
+ const siteDomain = 'page.example.com';
78
+ const sitePage = 'https://page.example.com/here.html';
79
+ const siteRef = 'https://ref.example.com';
80
+ const siteKeywords = 'power tools, drills';
81
+ const siteSearch = 'drill';
82
+ const siteCat = 'IAB2';
83
+ const siteSectionCat = 'IAB2-2';
84
+ const sitePageCat = 'IAB2-12';
85
+
86
+ it('ortb2 should exist', function () {
87
+ config.setConfig({
88
+ ortb2: {
89
+ site: {
90
+ name: siteName,
91
+ domain: siteDomain,
92
+ cat: [ siteCat ],
93
+ sectioncat: [ siteSectionCat ],
94
+ pagecat: [ sitePageCat ],
95
+ page: sitePage,
96
+ ref: siteRef,
97
+ keywords: siteKeywords,
98
+ search: siteSearch
99
+ }
100
+ }
101
+ });
102
+ const request = spec.buildRequests(bidRequests, bidderRequest);
103
+ let payload = JSON.parse(request.data);
104
+ payload = JSON.parse(JSON.stringify(payload));
105
+ expect(payload.sid).to.equal(SITE_ID);
106
+ expect(payload.ortb2.site.name).to.equal(siteName);
107
+ expect(payload.ortb2.site.domain).to.equal(siteDomain);
108
+ expect(payload.ortb2.site.page).to.equal(sitePage);
109
+ expect(payload.ortb2.site.ref).to.equal(siteRef);
110
+ expect(payload.ortb2.site.keywords).to.equal(siteKeywords);
111
+ expect(payload.ortb2.site.search).to.equal(siteSearch);
112
+ expect(payload.ortb2.site.cat[0]).to.equal(siteCat);
113
+ expect(payload.ortb2.site.sectioncat[0]).to.equal(siteSectionCat);
114
+ expect(payload.ortb2.site.pagecat[0]).to.equal(sitePageCat);
115
+ });
116
+ });
117
+
53
118
  describe('isDurationBidRequestValid', function () {
54
119
  const SITE_ID = 2;
55
120
  const REFERER = 'https://www.examplereferer.com';
@@ -255,7 +320,6 @@ describe('Nobid Adapter', function () {
255
320
  expect(payload.a).to.exist;
256
321
  expect(payload.t).to.exist;
257
322
  expect(payload.tz).to.exist;
258
- expect(payload.r).to.exist.and.to.equal('100x100');
259
323
  expect(payload.lang).to.exist;
260
324
  expect(payload.ref).to.exist;
261
325
  expect(payload.a[0].d).to.exist.and.to.equal('adunit-code');
@@ -2,7 +2,8 @@ import { expect } from 'chai';
2
2
  import { spec } from 'modules/oguryBidAdapter';
3
3
  import { deepClone } from 'src/utils.js';
4
4
 
5
- const BID_HOST = 'https://mweb-hb.presage.io/api/header-bidding-request';
5
+ const BID_URL = 'https://mweb-hb.presage.io/api/header-bidding-request';
6
+ const TIMEOUT_URL = 'https://ms-ads-monitoring-events.presage.io/bid_timeout'
6
7
 
7
8
  describe('OguryBidAdapter', function () {
8
9
  let bidRequests;
@@ -118,28 +119,110 @@ describe('OguryBidAdapter', function () {
118
119
  };
119
120
  });
120
121
 
121
- it('should return syncs array with an element of type image', () => {
122
+ it('should return sync array with two elements of type image', () => {
122
123
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
123
124
 
124
- expect(userSyncs).to.have.lengthOf(1);
125
+ expect(userSyncs).to.have.lengthOf(2);
125
126
  expect(userSyncs[0].type).to.equal('image');
126
127
  expect(userSyncs[0].url).to.contain('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch');
128
+ expect(userSyncs[1].type).to.equal('image');
129
+ expect(userSyncs[1].url).to.contain('https://ms-cookie-sync.presage.io/ttd/init-sync');
127
130
  });
128
131
 
129
- it('should set the source as query param', () => {
132
+ it('should set the same source as query param', () => {
130
133
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
131
134
  expect(userSyncs[0].url).to.contain('source=prebid');
135
+ expect(userSyncs[1].url).to.contain('source=prebid');
132
136
  });
133
137
 
134
138
  it('should set the tcString as query param', () => {
135
139
  const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
136
140
  expect(userSyncs[0].url).to.contain(`iab_string=${gdprConsent.consentString}`);
141
+ expect(userSyncs[1].url).to.contain(`iab_string=${gdprConsent.consentString}`);
137
142
  });
138
143
 
139
144
  it('should return an empty array when pixel is disable', () => {
140
145
  syncOptions.pixelEnabled = false;
141
146
  expect(spec.getUserSyncs(syncOptions, [], gdprConsent)).to.have.lengthOf(0);
142
147
  });
148
+
149
+ it('should return sync array with two elements of type image when consentString is undefined', () => {
150
+ gdprConsent = {
151
+ gdprApplies: true,
152
+ consentString: undefined
153
+ };
154
+
155
+ const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
156
+ expect(userSyncs).to.have.lengthOf(2);
157
+ expect(userSyncs[0].type).to.equal('image');
158
+ expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
159
+ expect(userSyncs[1].type).to.equal('image');
160
+ expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
161
+ });
162
+
163
+ it('should return sync array with two elements of type image when consentString is null', () => {
164
+ gdprConsent = {
165
+ gdprApplies: true,
166
+ consentString: null
167
+ };
168
+
169
+ const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
170
+ expect(userSyncs).to.have.lengthOf(2);
171
+ expect(userSyncs[0].type).to.equal('image');
172
+ expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
173
+ expect(userSyncs[1].type).to.equal('image');
174
+ expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
175
+ });
176
+
177
+ it('should return sync array with two elements of type image when gdprConsent is undefined', () => {
178
+ gdprConsent = undefined;
179
+
180
+ const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
181
+ expect(userSyncs).to.have.lengthOf(2);
182
+ expect(userSyncs[0].type).to.equal('image');
183
+ expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
184
+ expect(userSyncs[1].type).to.equal('image');
185
+ expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
186
+ });
187
+
188
+ it('should return sync array with two elements of type image when gdprConsent is null', () => {
189
+ gdprConsent = null;
190
+
191
+ const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
192
+ expect(userSyncs).to.have.lengthOf(2);
193
+ expect(userSyncs[0].type).to.equal('image');
194
+ expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
195
+ expect(userSyncs[1].type).to.equal('image');
196
+ expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
197
+ });
198
+
199
+ it('should return sync array with two elements of type image when gdprConsent is null and gdprApplies is false', () => {
200
+ gdprConsent = {
201
+ gdprApplies: false,
202
+ consentString: null
203
+ };
204
+
205
+ const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
206
+ expect(userSyncs).to.have.lengthOf(2);
207
+ expect(userSyncs[0].type).to.equal('image');
208
+ expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
209
+ expect(userSyncs[1].type).to.equal('image');
210
+ expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
211
+ });
212
+
213
+ it('should return sync array with two elements of type image when gdprConsent is empty string and gdprApplies is false', () => {
214
+ gdprConsent = {
215
+ gdprApplies: false,
216
+ consentString: ''
217
+ };
218
+
219
+ const userSyncs = spec.getUserSyncs(syncOptions, [], gdprConsent);
220
+ expect(userSyncs).to.have.lengthOf(2);
221
+ expect(userSyncs[0].type).to.equal('image');
222
+ expect(userSyncs[0].url).to.equal('https://ms-cookie-sync.presage.io/v1/init-sync/bid-switch?iab_string=&source=prebid')
223
+ expect(userSyncs[1].type).to.equal('image');
224
+ expect(userSyncs[1].url).to.equal('https://ms-cookie-sync.presage.io/ttd/init-sync?iab_string=&source=prebid')
225
+ });
143
226
  });
144
227
 
145
228
  describe('buildRequests', function () {
@@ -177,6 +260,7 @@ describe('OguryBidAdapter', function () {
177
260
  site: {
178
261
  id: bidRequests[0].params.assetKey,
179
262
  domain: window.location.hostname,
263
+ page: window.location.href
180
264
  },
181
265
  user: {
182
266
  ext: {
@@ -189,7 +273,7 @@ describe('OguryBidAdapter', function () {
189
273
  const validBidRequests = deepClone(bidRequests)
190
274
 
191
275
  const request = spec.buildRequests(validBidRequests, bidderRequest);
192
- expect(request.url).to.equal(BID_HOST);
276
+ expect(request.url).to.equal(BID_URL);
193
277
  expect(request.method).to.equal('POST');
194
278
  });
195
279
 
@@ -387,11 +471,11 @@ describe('OguryBidAdapter', function () {
387
471
  })
388
472
 
389
473
  afterEach(function() {
390
- xhr.restore();
474
+ xhr.restore()
391
475
  })
392
476
 
393
477
  it('Should not create nurl request if bid is undefined', function() {
394
- spec.onBidWon();
478
+ spec.onBidWon()
395
479
  expect(requests.length).to.equal(0);
396
480
  })
397
481
 
@@ -407,4 +491,33 @@ describe('OguryBidAdapter', function () {
407
491
  expect(requests[0].method).to.equal('GET')
408
492
  })
409
493
  })
494
+
495
+ describe('onTimeout', function () {
496
+ let xhr;
497
+ let requests;
498
+
499
+ beforeEach(function() {
500
+ xhr = sinon.useFakeXMLHttpRequest();
501
+ requests = [];
502
+ xhr.onCreate = (xhr) => {
503
+ requests.push(xhr);
504
+ };
505
+ })
506
+
507
+ afterEach(function() {
508
+ xhr.restore()
509
+ })
510
+
511
+ it('should send notification on bid timeout', function() {
512
+ const bid = {
513
+ ad: '<img style="width: 300px; height: 250px;" src="https://assets.afcdn.com/recipe/20190529/93153_w1024h768c1cx2220cy1728cxt0cyt0cxb4441cyb3456.jpg" alt="cookies" />',
514
+ cpm: 3
515
+ }
516
+ spec.onTimeout(bid);
517
+ expect(requests).to.not.be.undefined;
518
+ expect(requests.length).to.equal(1);
519
+ expect(requests[0].url).to.equal(TIMEOUT_URL);
520
+ expect(requests[0].method).to.equal('POST');
521
+ })
522
+ });
410
523
  });
@@ -3,6 +3,7 @@ import {getStorageManager} from '../../../src/storageManager';
3
3
  import {server} from 'test/mocks/xhr.js';
4
4
  import sinon from 'sinon';
5
5
  import {uspDataHandler} from '../../../src/adapterManager';
6
+ import {parseUrl} from '../../../src/utils';
6
7
 
7
8
  export const storage = getStorageManager(24);
8
9
  const TEST_COOKIE_VALUE = 'cookievalue';
@@ -10,7 +11,7 @@ describe('PublinkIdSystem', () => {
10
11
  describe('decode', () => {
11
12
  it('decode', () => {
12
13
  const result = publinkIdSubmodule.decode(TEST_COOKIE_VALUE);
13
- expect(result).deep.equals({publink: TEST_COOKIE_VALUE});
14
+ expect(result).deep.equals({publinkId: TEST_COOKIE_VALUE});
14
15
  });
15
16
  });
16
17
 
@@ -69,6 +70,7 @@ describe('PublinkIdSystem', () => {
69
70
  expect(result).to.exist;
70
71
  expect(result.callback).to.be.a('function');
71
72
  });
73
+
72
74
  it('Use local copy', () => {
73
75
  const result = publinkIdSubmodule.getId({}, undefined, TEST_COOKIE_VALUE);
74
76
  expect(result).to.be.undefined;
@@ -82,14 +84,22 @@ describe('PublinkIdSystem', () => {
82
84
  });
83
85
 
84
86
  it('Fetch with consent data', () => {
85
- const config = {storage: {type: 'cookie'}, params: {e: 'hashedemailvalue'}};
87
+ const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7', site_id: '102030'}};
86
88
  const consentData = {gdprApplies: 1, consentString: 'myconsentstring'};
87
89
  let submoduleCallback = publinkIdSubmodule.getId(config, consentData).callback;
88
90
  submoduleCallback(callbackSpy);
89
91
 
90
- let request = server.requests[0];
91
- request.url = request.url.replace(':443', '');
92
- expect(request.url).to.equal('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink?deh=hashedemailvalue&mpn=Prebid.js&mpv=$prebid.version$&gdpr=1&gdpr_consent=myconsentstring');
92
+ const request = server.requests[0];
93
+ const parsed = parseUrl(request.url);
94
+
95
+ expect(parsed.hostname).to.equal('proc.ad.cpe.dotomi.com');
96
+ expect(parsed.pathname).to.equal('/cvx/client/sync/publink');
97
+ expect(parsed.search.mpn).to.equal('Prebid.js');
98
+ expect(parsed.search.mpv).to.equal('$prebid.version$');
99
+ expect(parsed.search.gdpr).to.equal('1');
100
+ expect(parsed.search.gdpr_consent).to.equal('myconsentstring');
101
+ expect(parsed.search.sid).to.equal('102030');
102
+ expect(parsed.search.apikey).to.be.undefined;
93
103
 
94
104
  request.respond(200, {}, JSON.stringify(serverResponse));
95
105
  expect(callbackSpy.calledOnce).to.be.true;
@@ -97,16 +107,30 @@ describe('PublinkIdSystem', () => {
97
107
  });
98
108
 
99
109
  it('server doesnt respond', () => {
100
- const config = {storage: {type: 'cookie'}, params: {e: 'hashedemailvalue'}};
110
+ const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7'}};
101
111
  let submoduleCallback = publinkIdSubmodule.getId(config).callback;
102
112
  submoduleCallback(callbackSpy);
103
113
 
104
114
  let request = server.requests[0];
105
- request.url = request.url.replace(':443', '');
106
- expect(request.url).to.equal('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink?deh=hashedemailvalue&mpn=Prebid.js&mpv=$prebid.version$');
115
+ const parsed = parseUrl(request.url);
116
+
117
+ expect(parsed.hostname).to.equal('proc.ad.cpe.dotomi.com');
118
+ expect(parsed.pathname).to.equal('/cvx/client/sync/publink');
119
+ expect(parsed.search.mpn).to.equal('Prebid.js');
120
+ expect(parsed.search.mpv).to.equal('$prebid.version$');
107
121
 
108
122
  request.respond(204, {}, JSON.stringify(serverResponse));
109
- expect(callbackSpy.calledOnce).to.be.false;
123
+ expect(callbackSpy.called).to.be.false;
124
+ });
125
+
126
+ it('reject plain email address', () => {
127
+ const config = {storage: {type: 'cookie'}, params: {e: 'tester@test.com'}};
128
+ const consentData = {gdprApplies: 1, consentString: 'myconsentstring'};
129
+ let submoduleCallback = publinkIdSubmodule.getId(config, consentData).callback;
130
+ submoduleCallback(callbackSpy);
131
+
132
+ expect(server.requests).to.have.lengthOf(0);
133
+ expect(callbackSpy.called).to.be.false;
110
134
  });
111
135
  });
112
136
 
@@ -122,13 +146,19 @@ describe('PublinkIdSystem', () => {
122
146
  });
123
147
 
124
148
  it('Fetch with usprivacy data', () => {
125
- const config = {storage: {type: 'cookie'}, params: {e: 'hashedemailvalue'}};
149
+ const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7', api_key: 'abcdefg'}};
126
150
  let submoduleCallback = publinkIdSubmodule.getId(config).callback;
127
151
  submoduleCallback(callbackSpy);
128
152
 
129
153
  let request = server.requests[0];
130
- request.url = request.url.replace(':443', '');
131
- expect(request.url).to.equal('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink?deh=hashedemailvalue&mpn=Prebid.js&mpv=$prebid.version$&us_privacy=1YNN');
154
+ const parsed = parseUrl(request.url);
155
+
156
+ expect(parsed.hostname).to.equal('proc.ad.cpe.dotomi.com');
157
+ expect(parsed.pathname).to.equal('/cvx/client/sync/publink');
158
+ expect(parsed.search.mpn).to.equal('Prebid.js');
159
+ expect(parsed.search.mpv).to.equal('$prebid.version$');
160
+ expect(parsed.search.us_privacy).to.equal('1YNN');
161
+ expect(parsed.search.apikey).to.equal('abcdefg');
132
162
 
133
163
  request.respond(200, {}, JSON.stringify(serverResponse));
134
164
  expect(callbackSpy.calledOnce).to.be.true;