prebid.js 7.42.0 → 7.43.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.
- package/.eslintrc.js +0 -1
- package/dist/1plusXRtdProvider.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/a4gBidAdapter.js +1 -1
- package/dist/aaxBlockmeterRtdProvider.js +1 -1
- package/dist/ablidaBidAdapter.js +1 -1
- package/dist/acuityAdsBidAdapter.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adWMGBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adhashBidAdapter.js +1 -1
- package/dist/adheseBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adkernelAdnBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/admaruBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admediaBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/admixerIdSystem.js +1 -1
- package/dist/adnowBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adnuntiusRtdProvider.js +1 -1
- package/dist/adoceanBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adotBidAdapter.js +1 -1
- package/dist/adpartnerBidAdapter.js +1 -1
- package/dist/adplusBidAdapter.js +1 -1
- package/dist/adpod.js +1 -1
- package/dist/adponeBidAdapter.js +1 -1
- package/dist/adprimeBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adrinoBidAdapter.js +1 -1
- package/dist/adriverBidAdapter.js +1 -1
- package/dist/adriverIdSystem.js +1 -1
- package/dist/adtargetBidAdapter.js +1 -1
- package/dist/adtelligentBidAdapter.js +1 -1
- package/dist/adtelligentIdSystem.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adtrueBidAdapter.js +1 -1
- package/dist/aduptechBidAdapter.js +1 -1
- package/dist/advangelistsBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/afpBidAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -1
- package/dist/airgridRtdProvider.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/akamaiDapRtdProvider.js +1 -1
- package/dist/alkimiBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aniviewBidAdapter.js +1 -1
- package/dist/aolBidAdapter.js +1 -1
- package/dist/apacdexBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appierBidAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appushBidAdapter.js +1 -1
- package/dist/apstreamBidAdapter.js +1 -1
- package/dist/arcspanRtdProvider.js +1 -1
- package/dist/asealBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/astraoneBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/automatadBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beachfrontBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/betweenBidAdapter.js +1 -1
- package/dist/beyondmediaBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidViewabilityIO.js +1 -1
- package/dist/biddoBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidscubeBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bizzclickBidAdapter.js +1 -1
- package/dist/bliinkBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/blueconicRtdProvider.js +1 -1
- package/dist/boldwinBidAdapter.js +1 -1
- package/dist/brandmetricsRtdProvider.js +1 -1
- package/dist/braveBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/brightcomBidAdapter.js +1 -1
- package/dist/brightcomSSPBidAdapter.js +1 -1
- package/dist/britepoolIdSystem.js +1 -1
- package/dist/browsiBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/bucksenseBidAdapter.js +1 -1
- package/dist/buzzoolaBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/c1xBidAdapter.js +1 -1
- package/dist/captifyRtdProvider.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/categoryTranslation.js +1 -1
- package/dist/ccxBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/cleanmedianetBidAdapter.js +1 -1
- package/dist/clickforceBidAdapter.js +1 -1
- package/dist/codefuelBidAdapter.js +1 -1
- package/dist/cointrafficBidAdapter.js +1 -1
- package/dist/coinzillaBidAdapter.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/compassBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/confiantRtdProvider.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementGpp.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contentexchangeBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/cpmstarBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/criteoIdSystem.js +1 -1
- package/dist/currency.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/czechAdIdSystem.js +1 -1
- package/dist/dacIdSystem.js +1 -1
- package/dist/dailyhuntBidAdapter.js +1 -1
- package/dist/dataControllerModule.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/datablocksBidAdapter.js +1 -1
- package/dist/datawrkzBidAdapter.js +1 -1
- package/dist/dchain.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/deepintentBidAdapter.js +1 -1
- package/dist/deepintentDpesIdSystem.js +1 -1
- package/dist/deltaprojectsBidAdapter.js +1 -1
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dianomiBidAdapter.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/displayioBidAdapter.js +1 -1
- package/dist/distroscaleBidAdapter.js +1 -1
- package/dist/dmdIdSystem.js +1 -1
- package/dist/docereeBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/e_volutionBidAdapter.js +1 -1
- package/dist/ebdrBidAdapter.js +1 -1
- package/dist/emx_digitalBidAdapter.js +1 -1
- package/dist/engageyaBidAdapter.js +1 -1
- package/dist/enrichmentFpdModule.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/etargetBidAdapter.js +1 -1
- package/dist/express.js +1 -1
- package/dist/fabrickIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fledgeForGpt.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/fpdModule.js +1 -1
- package/dist/freeWheelAdserverVideo.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gammaBidAdapter.js +1 -1
- package/dist/gamoshiBidAdapter.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -1
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/getintentBidAdapter.js +1 -1
- package/dist/gjirafaBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/globalsunBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/gnetBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gothamadsBidAdapter.js +1 -1
- package/dist/gptPreAuction.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growadvertisingBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/hadronIdSystem.js +1 -1
- package/dist/hadronRtdProvider.js +1 -1
- package/dist/holidBidAdapter.js +1 -1
- package/dist/hybridBidAdapter.js +1 -1
- package/dist/iasRtdProvider.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/idImportLibrary.js +1 -1
- package/dist/idWardRtdProvider.js +1 -1
- package/dist/identityLinkIdSystem.js +1 -1
- package/dist/idxBidAdapter.js +1 -1
- package/dist/idxIdSystem.js +1 -1
- package/dist/imRtdProvider.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/imuIdSystem.js +1 -1
- package/dist/incrxBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/innityBidAdapter.js +1 -1
- package/dist/inskinBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/instreamTracking.js +1 -1
- package/dist/integr8BidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/interactiveOffersBidAdapter.js +1 -1
- package/dist/intersectionRtdProvider.js +1 -1
- package/dist/invamiaBidAdapter.js +1 -1
- package/dist/invibesBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ipromBidAdapter.js +1 -1
- package/dist/iqmBidAdapter.js +1 -1
- package/dist/iqzoneBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justIdSystem.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/jwplayerVideoProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/koblerBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/konduitWrapper.js +1 -1
- package/dist/krushmediaBidAdapter.js +1 -1
- package/dist/kubientBidAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lemmaDigitalBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/livewrappedBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/lkqdBidAdapter.js +1 -1
- package/dist/lockerdomeBidAdapter.js +1 -1
- package/dist/loganBidAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/lunamediahbBidAdapter.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.js +1 -1
- package/dist/madvertiseBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/malltvBidAdapter.js +1 -1
- package/dist/mantisBidAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mass.js +1 -1
- package/dist/mathildeadsBidAdapter.js +1 -1
- package/dist/mediaforceBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/medianetRtdProvider.js +1 -1
- package/dist/mediasniperBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/merkleIdSystem.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/mgidRtdProvider.js +1 -1
- package/dist/microadBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobfoxpbBidAdapter.js +1 -1
- package/dist/multibid.js +1 -1
- package/dist/mwOpenLinkIdSystem.js +1 -1
- package/dist/my6senseBidAdapter.js +1 -1
- package/dist/mytargetBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/netIdSystem.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/newspassidBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nextrollBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +501 -501
- package/dist/novatiqIdSystem.js +1 -1
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/oneKeyIdSystem.js +1 -1
- package/dist/oneKeyRtdProvider.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/onomagicBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/open8BidAdapter.js +1 -1
- package/dist/openwebBidAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/openxOrtbBidAdapter.js +1 -1
- package/dist/operaadsBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/optimeraRtdProvider.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/optoutBidAdapter.js +1 -1
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/orbitsoftBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -1
- package/dist/otmBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionRtdProvider.js +1 -1
- package/dist/ozoneBidAdapter.js +1 -1
- package/dist/padsquadBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pilotxBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/priceFloors.js +1 -1
- package/dist/prismaBidAdapter.js +1 -1
- package/dist/proxistoreBidAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/pubgeniusBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubwiseBidAdapter.js +1 -1
- package/dist/pubxBidAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pulsepointBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/qwarryBidAdapter.js +1 -1
- package/dist/radsBidAdapter.js +1 -1
- package/dist/rakutenBidAdapter.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/reconciliationRtdProvider.js +1 -1
- package/dist/redtramBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevadRtdProvider.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/resetdigitalBidAdapter.js +1 -1
- package/dist/revcontentBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/richaudienceBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtbsapeBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/saambaaBidAdapter.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/scatteredBidAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/showheroes-bsBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/sirdataRtdProvider.js +1 -1
- package/dist/sizeMappingV2.js +1 -1
- package/dist/slimcutBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smarthubBidAdapter.js +1 -1
- package/dist/smarticoBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smartytechBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/snigelBidAdapter.js +1 -1
- package/dist/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/spotxBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/stroeerCoreBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/talkadsBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/telariaBidAdapter.js +1 -1
- package/dist/temedyaBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/theAdxBidAdapter.js +1 -1
- package/dist/timeoutRtdProvider.js +1 -1
- package/dist/tncIdSystem.js +1 -1
- package/dist/topicsFpdModule.js +1 -1
- package/dist/tpmnBidAdapter.js +1 -1
- package/dist/trafficgateBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/truereachBidAdapter.js +1 -1
- package/dist/trustpidSystem.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/ucfunnelBidAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unicornBidAdapter.js +1 -1
- package/dist/unifiedIdSystem.js +1 -1
- package/dist/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/validationFpdModule.js +1 -1
- package/dist/vdoaiBidAdapter.js +1 -1
- package/dist/ventesBidAdapter.js +1 -1
- package/dist/verizonMediaIdSystem.js +1 -1
- package/dist/vibrantmediaBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videoModule.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/videoheroesBidAdapter.js +1 -1
- package/dist/videojsVideoProvider.js +1 -1
- package/dist/videonowBidAdapter.js +1 -1
- package/dist/videoreachBidAdapter.js +1 -1
- package/dist/vidoomyBidAdapter.js +1 -1
- package/dist/viewability.js +1 -1
- package/dist/viewdeosDXBidAdapter.js +1 -1
- package/dist/viouslyBidAdapter.js +1 -1
- package/dist/viqeoBidAdapter.js +1 -1
- package/dist/visiblemeasuresBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vlybyBidAdapter.js +1 -1
- package/dist/voxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/waardexBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/welectBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/wipesBidAdapter.js +1 -1
- package/dist/xeBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldmoSyntheticInventoryModule.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yieldoneBidAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeotapIdPlusIdSystem.js +1 -1
- package/dist/zetaBidAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/dist/zeusPrimeRtdProvider.js +2 -2
- package/features.json +2 -1
- package/libraries/ortbConverter/processors/default.js +11 -8
- package/modules/adagioBidAdapter.js +41 -0
- package/modules/adagioBidAdapter.md +6 -0
- package/modules/addefendBidAdapter.js +2 -1
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/adpod.js +2 -3
- package/modules/adtelligentBidAdapter.js +8 -1
- package/modules/adxcgAnalyticsAdapter.js +2 -1
- package/modules/airgridRtdProvider.js +17 -7
- package/modules/atsAnalyticsAdapter.js +2 -1
- package/modules/concertBidAdapter.js +24 -41
- package/modules/consentManagement.js +2 -1
- package/modules/consentManagementGpp.js +2 -1
- package/modules/displayioBidAdapter.js +18 -8
- package/modules/express.js +7 -5
- package/modules/gumgumBidAdapter.js +2 -2
- package/modules/id5AnalyticsAdapter.js +2 -1
- package/modules/mabidderBidAdapter.js +3 -1
- package/modules/marsmediaAnalyticsAdapter.js +2 -1
- package/modules/medianetAnalyticsAdapter.js +124 -59
- package/modules/medianetBidAdapter.js +6 -5
- package/modules/orbidderBidAdapter.js +2 -1
- package/modules/permutiveRtdProvider.md +54 -84
- package/modules/pixfutureBidAdapter.js +2 -1
- package/modules/pubCommonId.js +3 -2
- package/modules/pubxaiAnalyticsAdapter.js +2 -1
- package/modules/rivrAnalyticsAdapter.js +2 -1
- package/modules/rtbhouseBidAdapter.js +10 -3
- package/modules/sizeMappingV2.js +1 -1
- package/modules/smaatoBidAdapter.js +16 -4
- package/modules/snigelBidAdapter.js +2 -1
- package/modules/sonobiBidAdapter.js +64 -1
- package/modules/tappxBidAdapter.js +2 -1
- package/modules/terceptAnalyticsAdapter.js +2 -1
- package/modules/userId/index.js +6 -5
- package/modules/yuktamediaAnalyticsAdapter.js +2 -1
- package/package.json +3 -1
- package/plugins/pbjsGlobals.js +16 -5
- package/src/Renderer.js +4 -1
- package/src/adapterManager.js +2 -2
- package/src/adapters/bidderFactory.js +46 -41
- package/src/auction.js +10 -5
- package/src/fpd/enrichment.js +1 -1
- package/src/prebid.js +96 -89
- package/src/prebidGlobal.js +14 -6
- package/src/storageManager.js +29 -76
- package/src/utils.js +5 -2
- package/test/spec/auctionmanager_spec.js +113 -105
- package/test/spec/modules/adagioBidAdapter_spec.js +70 -0
- package/test/spec/modules/adlooxAdServerVideo_spec.js +1 -0
- package/test/spec/modules/adtelligentBidAdapter_spec.js +11 -10
- package/test/spec/modules/airgridRtdProvider_spec.js +9 -3
- package/test/spec/modules/concertBidAdapter_spec.js +12 -81
- package/test/spec/modules/gumgumBidAdapter_spec.js +3 -3
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +127 -121
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +27 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +41 -39
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +53 -49
- package/test/spec/modules/prebidServerBidAdapter_spec.js +148 -133
- package/test/spec/modules/realvuAnalyticsAdapter_spec.js +1 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +23 -9
- package/test/spec/modules/rubiconBidAdapter_spec.js +767 -761
- package/test/spec/modules/sizeMappingV2_spec.js +4 -0
- package/test/spec/modules/smaatoBidAdapter_spec.js +32 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +13 -0
- package/test/spec/unit/core/adapterManager_spec.js +5 -2
- package/test/spec/unit/core/bidderFactory_spec.js +4 -0
- package/test/spec/unit/core/storageManager_spec.js +84 -34
- package/test/spec/unit/pbjs_api_spec.js +129 -121
|
@@ -1538,709 +1538,711 @@ describe('the rubicon adapter', function () {
|
|
|
1538
1538
|
});
|
|
1539
1539
|
});
|
|
1540
1540
|
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1546
|
-
bidderRequest.auctionStart + 100
|
|
1547
|
-
);
|
|
1548
|
-
|
|
1549
|
-
let [request] = spec.buildRequests(bidderRequest.bids, syncAddFPDToBidderRequest(bidderRequest));
|
|
1550
|
-
let post = request.data;
|
|
1551
|
-
|
|
1552
|
-
expect(post).to.have.property('imp');
|
|
1553
|
-
// .with.length.of(1);
|
|
1554
|
-
let imp = post.imp[0];
|
|
1555
|
-
expect(imp.id).to.equal(bidderRequest.bids[0].adUnitCode);
|
|
1556
|
-
expect(imp.exp).to.equal(undefined); // now undefined
|
|
1557
|
-
expect(imp.video.w).to.equal(640);
|
|
1558
|
-
expect(imp.video.h).to.equal(480);
|
|
1559
|
-
expect(imp.video.pos).to.equal(1);
|
|
1560
|
-
expect(imp.video.minduration).to.equal(15);
|
|
1561
|
-
expect(imp.video.maxduration).to.equal(30);
|
|
1562
|
-
expect(imp.video.startdelay).to.equal(0);
|
|
1563
|
-
expect(imp.video.skip).to.equal(1);
|
|
1564
|
-
expect(imp.video.skipafter).to.equal(15);
|
|
1565
|
-
expect(imp.ext.prebid.bidder.rubicon.video.playerWidth).to.equal(640);
|
|
1566
|
-
expect(imp.ext.prebid.bidder.rubicon.video.playerHeight).to.equal(480);
|
|
1567
|
-
expect(imp.ext.prebid.bidder.rubicon.video.size_id).to.equal(201);
|
|
1568
|
-
expect(imp.ext.prebid.bidder.rubicon.video.language).to.equal('en');
|
|
1569
|
-
// Also want it to be in post.site.content.language
|
|
1570
|
-
expect(imp.ext.prebid.bidder.rubicon.video.skip).to.equal(1);
|
|
1571
|
-
expect(imp.ext.prebid.bidder.rubicon.video.skipafter).to.equal(15);
|
|
1572
|
-
expect(post.ext.prebid.auctiontimestamp).to.equal(1472239426000);
|
|
1573
|
-
// should contain version
|
|
1574
|
-
expect(post.ext.prebid.channel).to.deep.equal({name: 'pbjs', version: $$PREBID_GLOBAL$$.version});
|
|
1575
|
-
expect(post.user.ext.consent).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==');
|
|
1576
|
-
// EIDs should exist
|
|
1577
|
-
expect(post.user.ext).to.have.property('eids').that.is.an('array');
|
|
1578
|
-
// LiveIntent should exist
|
|
1579
|
-
expect(post.user.ext.eids[0].source).to.equal('liveintent.com');
|
|
1580
|
-
expect(post.user.ext.eids[0].uids[0].id).to.equal('0000-1111-2222-3333');
|
|
1581
|
-
expect(post.user.ext.eids[0].uids[0].atype).to.equal(3);
|
|
1582
|
-
expect(post.user.ext.eids[0]).to.have.property('ext').that.is.an('object');
|
|
1583
|
-
expect(post.user.ext.eids[0].ext).to.have.property('segments').that.is.an('array');
|
|
1584
|
-
expect(post.user.ext.eids[0].ext.segments[0]).to.equal('segA');
|
|
1585
|
-
expect(post.user.ext.eids[0].ext.segments[1]).to.equal('segB');
|
|
1586
|
-
// LiveRamp should exist
|
|
1587
|
-
expect(post.user.ext.eids[1].source).to.equal('liveramp.com');
|
|
1588
|
-
expect(post.user.ext.eids[1].uids[0].id).to.equal('1111-2222-3333-4444');
|
|
1589
|
-
expect(post.user.ext.eids[1].uids[0].atype).to.equal(3);
|
|
1590
|
-
// UnifiedId should exist
|
|
1591
|
-
expect(post.user.ext.eids[2].source).to.equal('adserver.org');
|
|
1592
|
-
expect(post.user.ext.eids[2].uids[0].atype).to.equal(1);
|
|
1593
|
-
expect(post.user.ext.eids[2].uids[0].id).to.equal('3000');
|
|
1594
|
-
// PubCommonId should exist
|
|
1595
|
-
expect(post.user.ext.eids[3].source).to.equal('pubcid.org');
|
|
1596
|
-
expect(post.user.ext.eids[3].uids[0].atype).to.equal(1);
|
|
1597
|
-
expect(post.user.ext.eids[3].uids[0].id).to.equal('4000');
|
|
1598
|
-
// example should exist
|
|
1599
|
-
expect(post.user.ext.eids[4].source).to.equal('example.com');
|
|
1600
|
-
expect(post.user.ext.eids[4].uids[0].id).to.equal('333333');
|
|
1601
|
-
// id-partner.com
|
|
1602
|
-
expect(post.user.ext.eids[5].source).to.equal('id-partner.com');
|
|
1603
|
-
expect(post.user.ext.eids[5].uids[0].id).to.equal('4444444');
|
|
1604
|
-
// CriteoId should exist
|
|
1605
|
-
expect(post.user.ext.eids[6].source).to.equal('criteo.com');
|
|
1606
|
-
expect(post.user.ext.eids[6].uids[0].id).to.equal('1111');
|
|
1607
|
-
expect(post.user.ext.eids[6].uids[0].atype).to.equal(1);
|
|
1608
|
-
|
|
1609
|
-
expect(post.regs.ext.gdpr).to.equal(1);
|
|
1610
|
-
expect(post.regs.ext.us_privacy).to.equal('1NYN');
|
|
1611
|
-
expect(post).to.have.property('ext').that.is.an('object');
|
|
1612
|
-
expect(post.ext.prebid.targeting.includewinners).to.equal(true);
|
|
1613
|
-
expect(post.ext.prebid).to.have.property('cache').that.is.an('object');
|
|
1614
|
-
expect(post.ext.prebid.cache).to.have.property('vastxml').that.is.an('object');
|
|
1615
|
-
expect(post.ext.prebid.cache.vastxml).to.have.property('returnCreative').that.is.an('boolean');
|
|
1616
|
-
expect(post.ext.prebid.cache.vastxml.returnCreative).to.equal(false);
|
|
1617
|
-
expect(post.ext.prebid.bidders.rubicon.integration).to.equal(PBS_INTEGRATION);
|
|
1618
|
-
});
|
|
1619
|
-
|
|
1620
|
-
describe('ortb2imp sent to video bids', function () {
|
|
1621
|
-
beforeEach(function () {
|
|
1622
|
-
// initialize
|
|
1623
|
-
if (bidderRequest.bids[0].hasOwnProperty('ortb2Imp')) {
|
|
1624
|
-
delete bidderRequest.bids[0].ortb2Imp;
|
|
1625
|
-
}
|
|
1626
|
-
});
|
|
1627
|
-
|
|
1628
|
-
it('should add ortb values to video requests', function () {
|
|
1541
|
+
if (FEATURES.VIDEO) {
|
|
1542
|
+
describe('for video requests', function () {
|
|
1543
|
+
it('should make a well-formed video request', function () {
|
|
1629
1544
|
createVideoBidderRequest();
|
|
1630
1545
|
|
|
1631
1546
|
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1632
1547
|
bidderRequest.auctionStart + 100
|
|
1633
1548
|
);
|
|
1634
1549
|
|
|
1635
|
-
|
|
1636
|
-
ext: {
|
|
1637
|
-
gpid: '/test/gpid',
|
|
1638
|
-
data: {
|
|
1639
|
-
pbadslot: '/test/pbadslot'
|
|
1640
|
-
},
|
|
1641
|
-
prebid: {
|
|
1642
|
-
storedauctionresponse: {
|
|
1643
|
-
id: 'sample_video_response'
|
|
1644
|
-
}
|
|
1645
|
-
}
|
|
1646
|
-
}
|
|
1647
|
-
}
|
|
1648
|
-
|
|
1649
|
-
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1550
|
+
let [request] = spec.buildRequests(bidderRequest.bids, syncAddFPDToBidderRequest(bidderRequest));
|
|
1650
1551
|
let post = request.data;
|
|
1651
1552
|
|
|
1652
1553
|
expect(post).to.have.property('imp');
|
|
1653
1554
|
// .with.length.of(1);
|
|
1654
1555
|
let imp = post.imp[0];
|
|
1655
|
-
expect(imp.
|
|
1656
|
-
expect(imp.
|
|
1657
|
-
expect(imp.
|
|
1658
|
-
|
|
1659
|
-
|
|
1556
|
+
expect(imp.id).to.equal(bidderRequest.bids[0].adUnitCode);
|
|
1557
|
+
expect(imp.exp).to.equal(undefined); // now undefined
|
|
1558
|
+
expect(imp.video.w).to.equal(640);
|
|
1559
|
+
expect(imp.video.h).to.equal(480);
|
|
1560
|
+
expect(imp.video.pos).to.equal(1);
|
|
1561
|
+
expect(imp.video.minduration).to.equal(15);
|
|
1562
|
+
expect(imp.video.maxduration).to.equal(30);
|
|
1563
|
+
expect(imp.video.startdelay).to.equal(0);
|
|
1564
|
+
expect(imp.video.skip).to.equal(1);
|
|
1565
|
+
expect(imp.video.skipafter).to.equal(15);
|
|
1566
|
+
expect(imp.ext.prebid.bidder.rubicon.video.playerWidth).to.equal(640);
|
|
1567
|
+
expect(imp.ext.prebid.bidder.rubicon.video.playerHeight).to.equal(480);
|
|
1568
|
+
expect(imp.ext.prebid.bidder.rubicon.video.size_id).to.equal(201);
|
|
1569
|
+
expect(imp.ext.prebid.bidder.rubicon.video.language).to.equal('en');
|
|
1570
|
+
// Also want it to be in post.site.content.language
|
|
1571
|
+
expect(imp.ext.prebid.bidder.rubicon.video.skip).to.equal(1);
|
|
1572
|
+
expect(imp.ext.prebid.bidder.rubicon.video.skipafter).to.equal(15);
|
|
1573
|
+
expect(post.ext.prebid.auctiontimestamp).to.equal(1472239426000);
|
|
1574
|
+
// should contain version
|
|
1575
|
+
expect(post.ext.prebid.channel).to.deep.equal({name: 'pbjs', version: $$PREBID_GLOBAL$$.version});
|
|
1576
|
+
expect(post.user.ext.consent).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==');
|
|
1577
|
+
// EIDs should exist
|
|
1578
|
+
expect(post.user.ext).to.have.property('eids').that.is.an('array');
|
|
1579
|
+
// LiveIntent should exist
|
|
1580
|
+
expect(post.user.ext.eids[0].source).to.equal('liveintent.com');
|
|
1581
|
+
expect(post.user.ext.eids[0].uids[0].id).to.equal('0000-1111-2222-3333');
|
|
1582
|
+
expect(post.user.ext.eids[0].uids[0].atype).to.equal(3);
|
|
1583
|
+
expect(post.user.ext.eids[0]).to.have.property('ext').that.is.an('object');
|
|
1584
|
+
expect(post.user.ext.eids[0].ext).to.have.property('segments').that.is.an('array');
|
|
1585
|
+
expect(post.user.ext.eids[0].ext.segments[0]).to.equal('segA');
|
|
1586
|
+
expect(post.user.ext.eids[0].ext.segments[1]).to.equal('segB');
|
|
1587
|
+
// LiveRamp should exist
|
|
1588
|
+
expect(post.user.ext.eids[1].source).to.equal('liveramp.com');
|
|
1589
|
+
expect(post.user.ext.eids[1].uids[0].id).to.equal('1111-2222-3333-4444');
|
|
1590
|
+
expect(post.user.ext.eids[1].uids[0].atype).to.equal(3);
|
|
1591
|
+
// UnifiedId should exist
|
|
1592
|
+
expect(post.user.ext.eids[2].source).to.equal('adserver.org');
|
|
1593
|
+
expect(post.user.ext.eids[2].uids[0].atype).to.equal(1);
|
|
1594
|
+
expect(post.user.ext.eids[2].uids[0].id).to.equal('3000');
|
|
1595
|
+
// PubCommonId should exist
|
|
1596
|
+
expect(post.user.ext.eids[3].source).to.equal('pubcid.org');
|
|
1597
|
+
expect(post.user.ext.eids[3].uids[0].atype).to.equal(1);
|
|
1598
|
+
expect(post.user.ext.eids[3].uids[0].id).to.equal('4000');
|
|
1599
|
+
// example should exist
|
|
1600
|
+
expect(post.user.ext.eids[4].source).to.equal('example.com');
|
|
1601
|
+
expect(post.user.ext.eids[4].uids[0].id).to.equal('333333');
|
|
1602
|
+
// id-partner.com
|
|
1603
|
+
expect(post.user.ext.eids[5].source).to.equal('id-partner.com');
|
|
1604
|
+
expect(post.user.ext.eids[5].uids[0].id).to.equal('4444444');
|
|
1605
|
+
// CriteoId should exist
|
|
1606
|
+
expect(post.user.ext.eids[6].source).to.equal('criteo.com');
|
|
1607
|
+
expect(post.user.ext.eids[6].uids[0].id).to.equal('1111');
|
|
1608
|
+
expect(post.user.ext.eids[6].uids[0].atype).to.equal(1);
|
|
1609
|
+
|
|
1610
|
+
expect(post.regs.ext.gdpr).to.equal(1);
|
|
1611
|
+
expect(post.regs.ext.us_privacy).to.equal('1NYN');
|
|
1612
|
+
expect(post).to.have.property('ext').that.is.an('object');
|
|
1613
|
+
expect(post.ext.prebid.targeting.includewinners).to.equal(true);
|
|
1614
|
+
expect(post.ext.prebid).to.have.property('cache').that.is.an('object');
|
|
1615
|
+
expect(post.ext.prebid.cache).to.have.property('vastxml').that.is.an('object');
|
|
1616
|
+
expect(post.ext.prebid.cache.vastxml).to.have.property('returnCreative').that.is.an('boolean');
|
|
1617
|
+
expect(post.ext.prebid.cache.vastxml.returnCreative).to.equal(false);
|
|
1618
|
+
expect(post.ext.prebid.bidders.rubicon.integration).to.equal(PBS_INTEGRATION);
|
|
1619
|
+
});
|
|
1620
|
+
|
|
1621
|
+
describe('ortb2imp sent to video bids', function () {
|
|
1622
|
+
beforeEach(function () {
|
|
1623
|
+
// initialize
|
|
1624
|
+
if (bidderRequest.bids[0].hasOwnProperty('ortb2Imp')) {
|
|
1625
|
+
delete bidderRequest.bids[0].ortb2Imp;
|
|
1626
|
+
}
|
|
1627
|
+
});
|
|
1660
1628
|
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
// default getFloor response is empty object so should not break and not send hard_floor
|
|
1664
|
-
bidderRequest.bids[0].getFloor = () => getFloorResponse;
|
|
1665
|
-
sinon.spy(bidderRequest.bids[0], 'getFloor');
|
|
1629
|
+
it('should add ortb values to video requests', function () {
|
|
1630
|
+
createVideoBidderRequest();
|
|
1666
1631
|
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1632
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1633
|
+
bidderRequest.auctionStart + 100
|
|
1634
|
+
);
|
|
1670
1635
|
|
|
1671
|
-
|
|
1636
|
+
bidderRequest.bids[0].ortb2Imp = {
|
|
1637
|
+
ext: {
|
|
1638
|
+
gpid: '/test/gpid',
|
|
1639
|
+
data: {
|
|
1640
|
+
pbadslot: '/test/pbadslot'
|
|
1641
|
+
},
|
|
1642
|
+
prebid: {
|
|
1643
|
+
storedauctionresponse: {
|
|
1644
|
+
id: 'sample_video_response'
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
1672
1649
|
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
bidderRequest.bids[0].getFloor.calledWith({
|
|
1676
|
-
currency: 'USD',
|
|
1677
|
-
mediaType: '*',
|
|
1678
|
-
size: '*'
|
|
1679
|
-
})
|
|
1680
|
-
).to.be.true;
|
|
1650
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1651
|
+
let post = request.data;
|
|
1681
1652
|
|
|
1682
|
-
|
|
1683
|
-
|
|
1653
|
+
expect(post).to.have.property('imp');
|
|
1654
|
+
// .with.length.of(1);
|
|
1655
|
+
let imp = post.imp[0];
|
|
1656
|
+
expect(imp.ext.gpid).to.equal('/test/gpid');
|
|
1657
|
+
expect(imp.ext.data.pbadslot).to.equal('/test/pbadslot');
|
|
1658
|
+
expect(imp.ext.prebid.storedauctionresponse.id).to.equal('sample_video_response');
|
|
1659
|
+
});
|
|
1660
|
+
});
|
|
1684
1661
|
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1662
|
+
it('should correctly set bidfloor on imp when getfloor in scope', function () {
|
|
1663
|
+
createVideoBidderRequest();
|
|
1664
|
+
// default getFloor response is empty object so should not break and not send hard_floor
|
|
1665
|
+
bidderRequest.bids[0].getFloor = () => getFloorResponse;
|
|
1666
|
+
sinon.spy(bidderRequest.bids[0], 'getFloor');
|
|
1689
1667
|
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
expect(request.data.imp[0].bidfloor).to.be.undefined;
|
|
1668
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1669
|
+
bidderRequest.auctionStart + 100
|
|
1670
|
+
);
|
|
1694
1671
|
|
|
1695
|
-
|
|
1696
|
-
getFloorResponse = {currency: 'USD', floor: '1.23'};
|
|
1697
|
-
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1698
|
-
expect(request.data.imp[0].bidfloor).to.equal(1.23);
|
|
1672
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1699
1673
|
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1674
|
+
// make sure banner bid called with right stuff
|
|
1675
|
+
expect(
|
|
1676
|
+
bidderRequest.bids[0].getFloor.calledWith({
|
|
1677
|
+
currency: 'USD',
|
|
1678
|
+
mediaType: '*',
|
|
1679
|
+
size: '*'
|
|
1680
|
+
})
|
|
1681
|
+
).to.be.true;
|
|
1705
1682
|
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
// default getFloor response is empty object so should not break and not send hard_floor
|
|
1709
|
-
bidderRequest.bids[0].getFloor = () => {
|
|
1710
|
-
throw new Error('An exception!');
|
|
1711
|
-
};
|
|
1712
|
-
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1713
|
-
bidderRequest.auctionStart + 100
|
|
1714
|
-
);
|
|
1683
|
+
// not an object should work and not send
|
|
1684
|
+
expect(request.data.imp[0].bidfloor).to.be.undefined;
|
|
1715
1685
|
|
|
1716
|
-
|
|
1686
|
+
// make it respond with a non USD floor should not send it
|
|
1687
|
+
getFloorResponse = {currency: 'EUR', floor: 1.0};
|
|
1688
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1689
|
+
expect(request.data.imp[0].bidfloor).to.be.undefined;
|
|
1717
1690
|
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1691
|
+
// make it respond with a non USD floor should not send it
|
|
1692
|
+
getFloorResponse = {currency: 'EUR'};
|
|
1693
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1694
|
+
expect(request.data.imp[0].bidfloor).to.be.undefined;
|
|
1721
1695
|
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1696
|
+
// make it respond with USD floor and string floor
|
|
1697
|
+
getFloorResponse = {currency: 'USD', floor: '1.23'};
|
|
1698
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1699
|
+
expect(request.data.imp[0].bidfloor).to.equal(1.23);
|
|
1726
1700
|
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1701
|
+
// make it respond with USD floor and num floor
|
|
1702
|
+
getFloorResponse = {currency: 'USD', floor: 1.23};
|
|
1703
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1704
|
+
expect(request.data.imp[0].bidfloor).to.equal(1.23);
|
|
1705
|
+
});
|
|
1733
1706
|
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1707
|
+
it('should continue with auction if getFloor throws error', function () {
|
|
1708
|
+
createVideoBidderRequest();
|
|
1709
|
+
// default getFloor response is empty object so should not break and not send hard_floor
|
|
1710
|
+
bidderRequest.bids[0].getFloor = () => {
|
|
1711
|
+
throw new Error('An exception!');
|
|
1712
|
+
};
|
|
1713
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1714
|
+
bidderRequest.auctionStart + 100
|
|
1715
|
+
);
|
|
1737
1716
|
|
|
1738
|
-
|
|
1739
|
-
expect(request.data.imp[0].ext.prebid.bidder).to.have.property('superRubicon').that.is.an('object');
|
|
1740
|
-
expect(request.data.imp[0].ext.prebid.bidder).to.not.haveOwnProperty('rubicon');
|
|
1741
|
-
});
|
|
1717
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1742
1718
|
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1719
|
+
// should have an imp
|
|
1720
|
+
expect(request.data.imp).to.exist.and.to.be.a('array');
|
|
1721
|
+
expect(request.data.imp).to.have.lengthOf(1);
|
|
1746
1722
|
|
|
1747
|
-
|
|
1748
|
-
|
|
1723
|
+
// should be NO bidFloor
|
|
1724
|
+
expect(request.data.imp[0].bidfloor).to.be.undefined;
|
|
1725
|
+
expect(request.data.imp[0].bidfloorcur).to.be.undefined;
|
|
1726
|
+
});
|
|
1749
1727
|
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
expect(newRequest.data.ext.prebid.floors).to.deep.equal({ enabled: false });
|
|
1757
|
-
});
|
|
1728
|
+
it('should add alias name to PBS Request', function () {
|
|
1729
|
+
createVideoBidderRequest();
|
|
1730
|
+
adapterManager.aliasRegistry['superRubicon'] = 'rubicon';
|
|
1731
|
+
bidderRequest.bidderCode = 'superRubicon';
|
|
1732
|
+
bidderRequest.bids[0].bidder = 'superRubicon';
|
|
1733
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1758
1734
|
|
|
1759
|
-
|
|
1760
|
-
|
|
1735
|
+
// should have the aliases object sent to PBS
|
|
1736
|
+
expect(request.data.ext.prebid).to.haveOwnProperty('aliases');
|
|
1737
|
+
expect(request.data.ext.prebid.aliases).to.deep.equal({superRubicon: 'rubicon'});
|
|
1761
1738
|
|
|
1762
|
-
|
|
1763
|
-
bidder
|
|
1764
|
-
|
|
1765
|
-
}
|
|
1766
|
-
bidder: 'bidderB',
|
|
1767
|
-
maxBids: 2
|
|
1768
|
-
}];
|
|
1769
|
-
const expected = [{
|
|
1770
|
-
bidder: 'bidderA',
|
|
1771
|
-
maxbids: 2
|
|
1772
|
-
}, {
|
|
1773
|
-
bidder: 'bidderB',
|
|
1774
|
-
maxbids: 2
|
|
1775
|
-
}];
|
|
1739
|
+
// should have the imp ext bidder params be under the alias name not rubicon superRubicon
|
|
1740
|
+
expect(request.data.imp[0].ext.prebid.bidder).to.have.property('superRubicon').that.is.an('object');
|
|
1741
|
+
expect(request.data.imp[0].ext.prebid.bidder).to.not.haveOwnProperty('rubicon');
|
|
1742
|
+
});
|
|
1776
1743
|
|
|
1777
|
-
|
|
1744
|
+
it('should add floors flag correctly to PBS Request', function () {
|
|
1745
|
+
createVideoBidderRequest();
|
|
1746
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1778
1747
|
|
|
1779
|
-
|
|
1748
|
+
// should not pass if undefined
|
|
1749
|
+
expect(request.data.ext.prebid.floors).to.be.undefined;
|
|
1780
1750
|
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1751
|
+
// should pass it as false
|
|
1752
|
+
bidderRequest.bids[0].floorData = {
|
|
1753
|
+
skipped: false,
|
|
1754
|
+
location: 'fetch',
|
|
1755
|
+
}
|
|
1756
|
+
let [newRequest] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1757
|
+
expect(newRequest.data.ext.prebid.floors).to.deep.equal({ enabled: false });
|
|
1758
|
+
});
|
|
1785
1759
|
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
$$PREBID_GLOBAL$$.installedModules = [];
|
|
1789
|
-
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1790
|
-
let payload = request.data;
|
|
1760
|
+
it('should add multibid configuration to PBS Request', function () {
|
|
1761
|
+
createVideoBidderRequest();
|
|
1791
1762
|
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1763
|
+
const multibid = [{
|
|
1764
|
+
bidder: 'bidderA',
|
|
1765
|
+
maxBids: 2
|
|
1766
|
+
}, {
|
|
1767
|
+
bidder: 'bidderB',
|
|
1768
|
+
maxBids: 2
|
|
1769
|
+
}];
|
|
1770
|
+
const expected = [{
|
|
1771
|
+
bidder: 'bidderA',
|
|
1772
|
+
maxbids: 2
|
|
1773
|
+
}, {
|
|
1774
|
+
bidder: 'bidderB',
|
|
1775
|
+
maxbids: 2
|
|
1776
|
+
}];
|
|
1777
|
+
|
|
1778
|
+
config.setConfig({multibid: multibid});
|
|
1795
1779
|
|
|
1796
|
-
|
|
1797
|
-
createVideoBidderRequest();
|
|
1798
|
-
$$PREBID_GLOBAL$$.installedModules = ['rubiconBidAdapter', 'rubiconAnalyticsAdapter'];
|
|
1799
|
-
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1800
|
-
let payload = request.data;
|
|
1780
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1801
1781
|
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1782
|
+
// should have the aliases object sent to PBS
|
|
1783
|
+
expect(request.data.ext.prebid).to.haveOwnProperty('multibid');
|
|
1784
|
+
expect(request.data.ext.prebid.multibid).to.deep.equal(expected);
|
|
1785
|
+
});
|
|
1805
1786
|
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1787
|
+
it('should pass client analytics to PBS endpoint if all modules included', function () {
|
|
1788
|
+
createVideoBidderRequest();
|
|
1789
|
+
$$PREBID_GLOBAL$$.installedModules = [];
|
|
1790
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1791
|
+
let payload = request.data;
|
|
1811
1792
|
|
|
1812
|
-
|
|
1813
|
-
|
|
1793
|
+
expect(payload.ext.prebid.analytics).to.not.be.undefined;
|
|
1794
|
+
expect(payload.ext.prebid.analytics).to.deep.equal({'rubicon': {'client-analytics': true}});
|
|
1795
|
+
});
|
|
1814
1796
|
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1797
|
+
it('should pass client analytics to PBS endpoint if rubicon analytics adapter is included', function () {
|
|
1798
|
+
createVideoBidderRequest();
|
|
1799
|
+
$$PREBID_GLOBAL$$.installedModules = ['rubiconBidAdapter', 'rubiconAnalyticsAdapter'];
|
|
1800
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1801
|
+
let payload = request.data;
|
|
1820
1802
|
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
});
|
|
1803
|
+
expect(payload.ext.prebid.analytics).to.not.be.undefined;
|
|
1804
|
+
expect(payload.ext.prebid.analytics).to.deep.equal({'rubicon': {'client-analytics': true}});
|
|
1805
|
+
});
|
|
1825
1806
|
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1807
|
+
it('should not pass client analytics to PBS endpoint if rubicon analytics adapter is not included', function () {
|
|
1808
|
+
createVideoBidderRequest();
|
|
1809
|
+
$$PREBID_GLOBAL$$.installedModules = ['rubiconBidAdapter'];
|
|
1810
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1811
|
+
let payload = request.data;
|
|
1830
1812
|
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
// bidderFactory stringifies request body before sending so removes undefined attributes:
|
|
1834
|
-
expect(imp.exp).to.equal(undefined);
|
|
1835
|
-
});
|
|
1813
|
+
expect(payload.ext.prebid.analytics).to.be.undefined;
|
|
1814
|
+
});
|
|
1836
1815
|
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
expect(post.tmax).to.equal(3333);
|
|
1843
|
-
});
|
|
1816
|
+
it('should send video exp param correctly when set', function () {
|
|
1817
|
+
createVideoBidderRequest();
|
|
1818
|
+
config.setConfig({s2sConfig: {defaultTtl: 600}});
|
|
1819
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1820
|
+
let post = request.data;
|
|
1844
1821
|
|
|
1845
|
-
|
|
1846
|
-
|
|
1822
|
+
// should exp set to the right value according to config
|
|
1823
|
+
let imp = post.imp[0];
|
|
1824
|
+
expect(imp.exp).to.equal(600);
|
|
1825
|
+
});
|
|
1847
1826
|
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1827
|
+
it('should not send video exp at all if not set in s2sConfig config', function () {
|
|
1828
|
+
createVideoBidderRequest();
|
|
1829
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1830
|
+
let post = request.data;
|
|
1851
1831
|
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1832
|
+
// should exp set to the right value according to config
|
|
1833
|
+
let imp = post.imp[0];
|
|
1834
|
+
// bidderFactory stringifies request body before sending so removes undefined attributes:
|
|
1835
|
+
expect(imp.exp).to.equal(undefined);
|
|
1836
|
+
});
|
|
1855
1837
|
|
|
1856
|
-
bidderRequest
|
|
1857
|
-
|
|
1858
|
-
|
|
1838
|
+
it('should send tmax as the bidderRequest timeout value', function () {
|
|
1839
|
+
createVideoBidderRequest();
|
|
1840
|
+
bidderRequest.timeout = 3333;
|
|
1841
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1842
|
+
let post = request.data;
|
|
1843
|
+
expect(post.tmax).to.equal(3333);
|
|
1844
|
+
});
|
|
1859
1845
|
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
expect(request.data.imp[0].bidfloor).to.equal(0);
|
|
1846
|
+
it('should send correct bidfloor to PBS', function () {
|
|
1847
|
+
createVideoBidderRequest();
|
|
1863
1848
|
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1849
|
+
bidderRequest.bids[0].params.floor = 0.1;
|
|
1850
|
+
let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1851
|
+
expect(request.data.imp[0].bidfloor).to.equal(0.1);
|
|
1867
1852
|
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
});
|
|
1853
|
+
bidderRequest.bids[0].params.floor = 5.5;
|
|
1854
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1855
|
+
expect(request.data.imp[0].bidfloor).to.equal(5.5);
|
|
1872
1856
|
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
positionBidderRequest.bids[0].mediaTypes.video.pos = 1;
|
|
1877
|
-
let [request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1878
|
-
expect(request.data.imp[0].video.pos).to.equal(1);
|
|
1879
|
-
|
|
1880
|
-
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1881
|
-
positionBidderRequest.bids[0].params.position = undefined;
|
|
1882
|
-
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1883
|
-
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1884
|
-
expect(request.data.imp[0].video.pos).to.equal(undefined);
|
|
1885
|
-
|
|
1886
|
-
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1887
|
-
positionBidderRequest.bids[0].params.position = 'atf'
|
|
1888
|
-
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1889
|
-
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1890
|
-
expect(request.data.imp[0].video.pos).to.equal(1);
|
|
1891
|
-
|
|
1892
|
-
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1893
|
-
positionBidderRequest.bids[0].params.position = 'btf';
|
|
1894
|
-
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1895
|
-
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1896
|
-
expect(request.data.imp[0].video.pos).to.equal(3);
|
|
1897
|
-
|
|
1898
|
-
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1899
|
-
positionBidderRequest.bids[0].params.position = 'foobar';
|
|
1900
|
-
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1901
|
-
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1902
|
-
expect(request.data.imp[0].video.pos).to.equal(undefined);
|
|
1903
|
-
});
|
|
1857
|
+
bidderRequest.bids[0].params.floor = '1.7';
|
|
1858
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1859
|
+
expect(request.data.imp[0].bidfloor).to.equal(1.7);
|
|
1904
1860
|
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1861
|
+
bidderRequest.bids[0].params.floor = 0;
|
|
1862
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1863
|
+
expect(request.data.imp[0].bidfloor).to.equal(0);
|
|
1864
|
+
|
|
1865
|
+
bidderRequest.bids[0].params.floor = undefined;
|
|
1866
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1867
|
+
expect(request.data.imp[0]).to.not.haveOwnProperty('bidfloor');
|
|
1868
|
+
|
|
1869
|
+
bidderRequest.bids[0].params.floor = null;
|
|
1870
|
+
[request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
1871
|
+
expect(request.data.imp[0]).to.not.haveOwnProperty('bidfloor');
|
|
1872
|
+
});
|
|
1873
|
+
|
|
1874
|
+
it('should send request with proper ad position', function () {
|
|
1875
|
+
createVideoBidderRequest();
|
|
1876
|
+
let positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1877
|
+
positionBidderRequest.bids[0].mediaTypes.video.pos = 1;
|
|
1878
|
+
let [request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1879
|
+
expect(request.data.imp[0].video.pos).to.equal(1);
|
|
1880
|
+
|
|
1881
|
+
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1882
|
+
positionBidderRequest.bids[0].params.position = undefined;
|
|
1883
|
+
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1884
|
+
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1885
|
+
expect(request.data.imp[0].video.pos).to.equal(undefined);
|
|
1886
|
+
|
|
1887
|
+
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1888
|
+
positionBidderRequest.bids[0].params.position = 'atf'
|
|
1889
|
+
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1890
|
+
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1891
|
+
expect(request.data.imp[0].video.pos).to.equal(1);
|
|
1892
|
+
|
|
1893
|
+
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1894
|
+
positionBidderRequest.bids[0].params.position = 'btf';
|
|
1895
|
+
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1896
|
+
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1897
|
+
expect(request.data.imp[0].video.pos).to.equal(3);
|
|
1898
|
+
|
|
1899
|
+
positionBidderRequest = utils.deepClone(bidderRequest);
|
|
1900
|
+
positionBidderRequest.bids[0].params.position = 'foobar';
|
|
1901
|
+
positionBidderRequest.bids[0].mediaTypes.video.pos = undefined;
|
|
1902
|
+
[request] = spec.buildRequests(positionBidderRequest.bids, positionBidderRequest);
|
|
1903
|
+
expect(request.data.imp[0].video.pos).to.equal(undefined);
|
|
1904
|
+
});
|
|
1905
|
+
|
|
1906
|
+
it('should properly enforce video.context to be either instream or outstream', function () {
|
|
1907
|
+
let bid = bidderRequest.bids[0];
|
|
1908
|
+
bid.mediaTypes = {
|
|
1909
|
+
video: {
|
|
1910
|
+
context: 'instream',
|
|
1911
|
+
mimes: ['video/mp4', 'video/x-ms-wmv'],
|
|
1912
|
+
protocols: [2, 5],
|
|
1913
|
+
maxduration: 30,
|
|
1914
|
+
linearity: 1,
|
|
1915
|
+
api: [2]
|
|
1916
|
+
}
|
|
1915
1917
|
}
|
|
1916
|
-
|
|
1917
|
-
bid.params.video = {};
|
|
1918
|
+
bid.params.video = {};
|
|
1918
1919
|
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1920
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1921
|
+
bidderRequest.auctionStart + 100
|
|
1922
|
+
);
|
|
1922
1923
|
|
|
1923
|
-
|
|
1924
|
-
|
|
1924
|
+
const bidRequestCopy = utils.deepClone(bidderRequest.bids[0]);
|
|
1925
|
+
expect(spec.isBidRequestValid(bidRequestCopy)).to.equal(true);
|
|
1925
1926
|
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1927
|
+
// change context to outstream, still true
|
|
1928
|
+
bidRequestCopy.mediaTypes.video.context = 'outstream';
|
|
1929
|
+
expect(spec.isBidRequestValid(bidRequestCopy)).to.equal(true);
|
|
1929
1930
|
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1931
|
+
// change context to random, false now
|
|
1932
|
+
bidRequestCopy.mediaTypes.video.context = 'random';
|
|
1933
|
+
expect(spec.isBidRequestValid(bidRequestCopy)).to.equal(false);
|
|
1933
1934
|
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1935
|
+
// change context to undefined, still false
|
|
1936
|
+
bidRequestCopy.mediaTypes.video.context = undefined;
|
|
1937
|
+
expect(spec.isBidRequestValid(bidRequestCopy)).to.equal(false);
|
|
1937
1938
|
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1939
|
+
// remove context, still false
|
|
1940
|
+
delete bidRequestCopy.mediaTypes.video.context;
|
|
1941
|
+
expect(spec.isBidRequestValid(bidRequestCopy)).to.equal(false);
|
|
1942
|
+
});
|
|
1942
1943
|
|
|
1943
|
-
|
|
1944
|
-
|
|
1944
|
+
it('should enforce the new required mediaTypes.video params', function () {
|
|
1945
|
+
createVideoBidderRequest();
|
|
1945
1946
|
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1947
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1948
|
+
bidderRequest.auctionStart + 100
|
|
1949
|
+
);
|
|
1949
1950
|
|
|
1950
|
-
|
|
1951
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(true);
|
|
1951
1952
|
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1953
|
+
// change mimes to a non array, no good
|
|
1954
|
+
createVideoBidderRequest();
|
|
1955
|
+
bidderRequest.bids[0].mediaTypes.video.mimes = 'video/mp4';
|
|
1956
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1956
1957
|
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1958
|
+
// delete mimes, no good
|
|
1959
|
+
createVideoBidderRequest();
|
|
1960
|
+
delete bidderRequest.bids[0].mediaTypes.video.mimes;
|
|
1961
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1961
1962
|
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1963
|
+
// change protocols to an int not array of ints, no good
|
|
1964
|
+
createVideoBidderRequest();
|
|
1965
|
+
bidderRequest.bids[0].mediaTypes.video.protocols = 1;
|
|
1966
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1966
1967
|
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1968
|
+
// delete protocols, no good
|
|
1969
|
+
createVideoBidderRequest();
|
|
1970
|
+
delete bidderRequest.bids[0].mediaTypes.video.protocols;
|
|
1971
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1971
1972
|
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1973
|
+
// change linearity to an string, no good
|
|
1974
|
+
createVideoBidderRequest();
|
|
1975
|
+
bidderRequest.bids[0].mediaTypes.video.linearity = 'string';
|
|
1976
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1976
1977
|
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1978
|
+
// delete linearity, no good
|
|
1979
|
+
createVideoBidderRequest();
|
|
1980
|
+
delete bidderRequest.bids[0].mediaTypes.video.linearity;
|
|
1981
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1981
1982
|
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1983
|
+
// change api to an string, no good
|
|
1984
|
+
createVideoBidderRequest();
|
|
1985
|
+
bidderRequest.bids[0].mediaTypes.video.api = 'string';
|
|
1986
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1986
1987
|
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1988
|
+
// delete api, no good
|
|
1989
|
+
createVideoBidderRequest();
|
|
1990
|
+
delete bidderRequest.bids[0].mediaTypes.video.api;
|
|
1991
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(false);
|
|
1992
|
+
});
|
|
1992
1993
|
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1994
|
+
it('bid request is valid when video context is outstream', function () {
|
|
1995
|
+
createVideoBidderRequestOutstream();
|
|
1996
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
1997
|
+
bidderRequest.auctionStart + 100
|
|
1998
|
+
);
|
|
1998
1999
|
|
|
1999
|
-
|
|
2000
|
+
const bidRequestCopy = utils.deepClone(bidderRequest);
|
|
2000
2001
|
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2002
|
+
let [request] = spec.buildRequests(bidRequestCopy.bids, bidRequestCopy);
|
|
2003
|
+
expect(spec.isBidRequestValid(bidderRequest.bids[0])).to.equal(true);
|
|
2004
|
+
expect(request.data.imp[0].ext.prebid.bidder.rubicon.video.size_id).to.equal(203);
|
|
2005
|
+
});
|
|
2005
2006
|
|
|
2006
|
-
|
|
2007
|
+
it('should send banner request when outstream or instream video included but no rubicon video obect is present', function () {
|
|
2007
2008
|
// add banner and video mediaTypes
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2009
|
+
bidderRequest.mediaTypes = {
|
|
2010
|
+
banner: {
|
|
2011
|
+
sizes: [[300, 250]]
|
|
2012
|
+
},
|
|
2013
|
+
video: {
|
|
2014
|
+
context: 'outstream'
|
|
2015
|
+
}
|
|
2016
|
+
};
|
|
2017
|
+
// no video object in rubicon params, so we should see one call made for banner
|
|
2017
2018
|
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2019
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2020
|
+
bidderRequest.auctionStart + 100
|
|
2021
|
+
);
|
|
2021
2022
|
|
|
2022
|
-
|
|
2023
|
+
let requests = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
2023
2024
|
|
|
2024
|
-
|
|
2025
|
-
|
|
2025
|
+
expect(requests.length).to.equal(1);
|
|
2026
|
+
expect(requests[0].url).to.equal('https://fastlane.rubiconproject.com/a/api/fastlane.json');
|
|
2026
2027
|
|
|
2027
|
-
|
|
2028
|
+
bidderRequest.mediaTypes.video.context = 'instream';
|
|
2028
2029
|
|
|
2029
|
-
|
|
2030
|
+
requests = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
2030
2031
|
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2032
|
+
expect(requests.length).to.equal(1);
|
|
2033
|
+
expect(requests[0].url).to.equal('https://fastlane.rubiconproject.com/a/api/fastlane.json');
|
|
2034
|
+
});
|
|
2034
2035
|
|
|
2035
|
-
|
|
2036
|
-
|
|
2036
|
+
it('should send request as banner when invalid video bid in multiple mediaType bidRequest', function () {
|
|
2037
|
+
createVideoBidderRequestNoVideo();
|
|
2037
2038
|
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2039
|
+
let bid = bidderRequest.bids[0];
|
|
2040
|
+
bid.mediaTypes.banner = {
|
|
2041
|
+
sizes: [[300, 250]]
|
|
2042
|
+
};
|
|
2042
2043
|
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2044
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2045
|
+
bidderRequest.auctionStart + 100
|
|
2046
|
+
);
|
|
2046
2047
|
|
|
2047
|
-
|
|
2048
|
+
const bidRequestCopy = utils.deepClone(bidderRequest);
|
|
2048
2049
|
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2050
|
+
let requests = spec.buildRequests(bidRequestCopy.bids, bidRequestCopy);
|
|
2051
|
+
expect(requests.length).to.equal(1);
|
|
2052
|
+
expect(requests[0].url).to.equal('https://fastlane.rubiconproject.com/a/api/fastlane.json');
|
|
2053
|
+
});
|
|
2053
2054
|
|
|
2054
|
-
|
|
2055
|
-
|
|
2055
|
+
it('should include coppa flag in video bid request', () => {
|
|
2056
|
+
createVideoBidderRequest();
|
|
2056
2057
|
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2058
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2059
|
+
bidderRequest.auctionStart + 100
|
|
2060
|
+
);
|
|
2060
2061
|
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2062
|
+
sandbox.stub(config, 'getConfig').callsFake(key => {
|
|
2063
|
+
const config = {
|
|
2064
|
+
'coppa': true
|
|
2065
|
+
};
|
|
2066
|
+
return config[key];
|
|
2067
|
+
});
|
|
2068
|
+
const [request] = spec.buildRequests(bidderRequest.bids, syncAddFPDToBidderRequest(bidderRequest));
|
|
2069
|
+
expect(request.data.regs.coppa).to.equal(1);
|
|
2066
2070
|
});
|
|
2067
|
-
const [request] = spec.buildRequests(bidderRequest.bids, syncAddFPDToBidderRequest(bidderRequest));
|
|
2068
|
-
expect(request.data.regs.coppa).to.equal(1);
|
|
2069
|
-
});
|
|
2070
2071
|
|
|
2071
|
-
|
|
2072
|
-
|
|
2072
|
+
it('should include first party data', () => {
|
|
2073
|
+
createVideoBidderRequest();
|
|
2073
2074
|
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2075
|
+
const site = {
|
|
2076
|
+
ext: {
|
|
2077
|
+
data: {
|
|
2078
|
+
page: 'home'
|
|
2079
|
+
}
|
|
2080
|
+
},
|
|
2081
|
+
content: {
|
|
2082
|
+
data: [{foo: 'bar'}]
|
|
2083
|
+
},
|
|
2084
|
+
keywords: 'e,f',
|
|
2085
|
+
rating: '4-star',
|
|
2081
2086
|
data: [{foo: 'bar'}]
|
|
2082
|
-
}
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
yob: '1984',
|
|
2096
|
-
geo: {country: 'ca'},
|
|
2097
|
-
data: [{foo: 'bar'}]
|
|
2098
|
-
};
|
|
2087
|
+
};
|
|
2088
|
+
const user = {
|
|
2089
|
+
ext: {
|
|
2090
|
+
data: {
|
|
2091
|
+
age: 31
|
|
2092
|
+
}
|
|
2093
|
+
},
|
|
2094
|
+
keywords: 'd',
|
|
2095
|
+
gender: 'M',
|
|
2096
|
+
yob: '1984',
|
|
2097
|
+
geo: {country: 'ca'},
|
|
2098
|
+
data: [{foo: 'bar'}]
|
|
2099
|
+
};
|
|
2099
2100
|
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2101
|
+
const ortb2 = {
|
|
2102
|
+
site,
|
|
2103
|
+
user
|
|
2104
|
+
};
|
|
2104
2105
|
|
|
2105
|
-
|
|
2106
|
+
const [request] = spec.buildRequests(bidderRequest.bids.map((b) => ({...b, ortb2})), bidderRequest);
|
|
2106
2107
|
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2108
|
+
const expected = {
|
|
2109
|
+
site: Object.assign({}, site, {keywords: bidderRequest.bids[0].params.keywords.join(',')}),
|
|
2110
|
+
user: Object.assign({}, user),
|
|
2111
|
+
siteData: Object.assign({}, site.ext.data, bidderRequest.bids[0].params.inventory),
|
|
2112
|
+
userData: Object.assign({}, user.ext.data, bidderRequest.bids[0].params.visitor),
|
|
2113
|
+
};
|
|
2113
2114
|
|
|
2114
|
-
|
|
2115
|
-
|
|
2115
|
+
delete request.data.site.page;
|
|
2116
|
+
delete request.data.site.content.language;
|
|
2116
2117
|
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2118
|
+
expect(request.data.site.keywords).to.deep.equal('a,b,c');
|
|
2119
|
+
expect(request.data.user.keywords).to.deep.equal('d');
|
|
2120
|
+
expect(request.data.site.ext.data).to.deep.equal(expected.siteData);
|
|
2121
|
+
expect(request.data.user.ext.data).to.deep.equal(expected.userData);
|
|
2122
|
+
});
|
|
2122
2123
|
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2124
|
+
it('should include pbadslot in bid request', function () {
|
|
2125
|
+
createVideoBidderRequest();
|
|
2126
|
+
bidderRequest.bids[0].ortb2Imp = {
|
|
2127
|
+
ext: {
|
|
2128
|
+
data: {
|
|
2129
|
+
pbadslot: '1234567890'
|
|
2130
|
+
}
|
|
2129
2131
|
}
|
|
2130
2132
|
}
|
|
2131
|
-
}
|
|
2132
2133
|
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2134
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2135
|
+
bidderRequest.auctionStart + 100
|
|
2136
|
+
);
|
|
2136
2137
|
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2138
|
+
const [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
2139
|
+
expect(request.data.imp[0].ext.data.pbadslot).to.equal('1234567890');
|
|
2140
|
+
});
|
|
2140
2141
|
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2142
|
+
it('should NOT include storedrequests in pbs payload', function () {
|
|
2143
|
+
createVideoBidderRequest();
|
|
2144
|
+
bidderRequest.bids[0].ortb2 = {
|
|
2145
|
+
ext: {
|
|
2146
|
+
prebid: {
|
|
2147
|
+
storedrequest: 'no-send-top-level-sr'
|
|
2148
|
+
}
|
|
2147
2149
|
}
|
|
2148
2150
|
}
|
|
2149
|
-
}
|
|
2150
2151
|
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2152
|
+
bidderRequest.bids[0].ortb2Imp = {
|
|
2153
|
+
ext: {
|
|
2154
|
+
prebid: {
|
|
2155
|
+
storedrequest: 'no-send-imp-sr'
|
|
2156
|
+
}
|
|
2155
2157
|
}
|
|
2156
2158
|
}
|
|
2157
|
-
}
|
|
2158
2159
|
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2160
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2161
|
+
bidderRequest.auctionStart + 100
|
|
2162
|
+
);
|
|
2162
2163
|
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2164
|
+
const [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
2165
|
+
expect(request.data.ext.prebid.storedrequest).to.be.undefined;
|
|
2166
|
+
expect(request.data.imp[0].ext.prebid.storedrequest).to.be.undefined;
|
|
2167
|
+
});
|
|
2167
2168
|
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2169
|
+
it('should include GAM ad unit in bid request', function () {
|
|
2170
|
+
createVideoBidderRequest();
|
|
2171
|
+
bidderRequest.bids[0].ortb2Imp = {
|
|
2172
|
+
ext: {
|
|
2173
|
+
data: {
|
|
2174
|
+
adserver: {
|
|
2175
|
+
adslot: '1234567890',
|
|
2176
|
+
name: 'adServerName1'
|
|
2177
|
+
}
|
|
2176
2178
|
}
|
|
2177
2179
|
}
|
|
2178
|
-
}
|
|
2179
|
-
};
|
|
2180
|
+
};
|
|
2180
2181
|
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2182
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2183
|
+
bidderRequest.auctionStart + 100
|
|
2184
|
+
);
|
|
2184
2185
|
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2186
|
+
const [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
2187
|
+
expect(request.data.imp[0].ext.data.adserver.adslot).to.equal('1234567890');
|
|
2188
|
+
expect(request.data.imp[0].ext.data.adserver.name).to.equal('adServerName1');
|
|
2189
|
+
});
|
|
2189
2190
|
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2191
|
+
it('should use the integration type provided in the config instead of the default', () => {
|
|
2192
|
+
createVideoBidderRequest();
|
|
2193
|
+
config.setConfig({rubicon: {int_type: 'testType'}});
|
|
2194
|
+
const [request] = spec.buildRequests(bidderRequest.bids, bidderRequest);
|
|
2195
|
+
expect(request.data.ext.prebid.bidders.rubicon.integration).to.equal('testType');
|
|
2196
|
+
});
|
|
2196
2197
|
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2198
|
+
it('should pass the user.id provided in the config', function () {
|
|
2199
|
+
config.setConfig({user: {id: '123'}});
|
|
2200
|
+
createVideoBidderRequest();
|
|
2200
2201
|
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2202
|
+
sandbox.stub(Date, 'now').callsFake(() =>
|
|
2203
|
+
bidderRequest.auctionStart + 100
|
|
2204
|
+
);
|
|
2205
|
+
|
|
2206
|
+
let [request] = spec.buildRequests(bidderRequest.bids, syncAddFPDToBidderRequest(bidderRequest));
|
|
2207
|
+
let post = request.data;
|
|
2208
|
+
|
|
2209
|
+
expect(post).to.have.property('imp')
|
|
2210
|
+
// .with.length.of(1);
|
|
2211
|
+
let imp = post.imp[0];
|
|
2212
|
+
expect(imp.id).to.equal(bidderRequest.bids[0].adUnitCode);
|
|
2213
|
+
expect(imp.exp).to.equal(undefined);
|
|
2214
|
+
expect(imp.video.w).to.equal(640);
|
|
2215
|
+
expect(imp.video.h).to.equal(480);
|
|
2216
|
+
expect(imp.video.pos).to.equal(1);
|
|
2217
|
+
expect(imp.video.minduration).to.equal(15);
|
|
2218
|
+
expect(imp.video.maxduration).to.equal(30);
|
|
2219
|
+
expect(imp.video.startdelay).to.equal(0);
|
|
2220
|
+
expect(imp.video.skip).to.equal(1);
|
|
2221
|
+
expect(imp.video.skipafter).to.equal(15);
|
|
2222
|
+
expect(imp.ext.prebid.bidder.rubicon.video.playerWidth).to.equal(640);
|
|
2223
|
+
expect(imp.ext.prebid.bidder.rubicon.video.playerHeight).to.equal(480);
|
|
2224
|
+
expect(imp.ext.prebid.bidder.rubicon.video.language).to.equal('en');
|
|
2225
|
+
|
|
2226
|
+
// Also want it to be in post.site.content.language
|
|
2227
|
+
expect(post.site.content.language).to.equal('en');
|
|
2228
|
+
expect(post.ext.prebid.auctiontimestamp).to.equal(1472239426000);
|
|
2229
|
+
expect(post.user.ext.consent).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==');
|
|
2230
|
+
|
|
2231
|
+
// Config user.id
|
|
2232
|
+
expect(post.user.id).to.equal('123');
|
|
2233
|
+
|
|
2234
|
+
expect(post.regs.ext.gdpr).to.equal(1);
|
|
2235
|
+
expect(post.regs.ext.us_privacy).to.equal('1NYN');
|
|
2236
|
+
expect(post).to.have.property('ext').that.is.an('object');
|
|
2237
|
+
expect(post.ext.prebid.targeting.includewinners).to.equal(true);
|
|
2238
|
+
expect(post.ext.prebid).to.have.property('cache').that.is.an('object');
|
|
2239
|
+
expect(post.ext.prebid.cache).to.have.property('vastxml').that.is.an('object');
|
|
2240
|
+
expect(post.ext.prebid.cache.vastxml).to.have.property('returnCreative').that.is.an('boolean');
|
|
2241
|
+
expect(post.ext.prebid.cache.vastxml.returnCreative).to.equal(false);
|
|
2242
|
+
expect(post.ext.prebid.bidders.rubicon.integration).to.equal(PBS_INTEGRATION);
|
|
2243
|
+
})
|
|
2244
|
+
});
|
|
2245
|
+
}
|
|
2244
2246
|
|
|
2245
2247
|
describe('combineSlotUrlParams', function () {
|
|
2246
2248
|
it('should combine an array of slot url params', function () {
|
|
@@ -3208,64 +3210,66 @@ describe('the rubicon adapter', function () {
|
|
|
3208
3210
|
});
|
|
3209
3211
|
});
|
|
3210
3212
|
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
3213
|
+
if (FEATURES.VIDEO) {
|
|
3214
|
+
describe('for video', function () {
|
|
3215
|
+
beforeEach(function () {
|
|
3216
|
+
createVideoBidderRequest();
|
|
3217
|
+
});
|
|
3215
3218
|
|
|
3216
|
-
|
|
3217
|
-
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
},
|
|
3234
|
-
prebid: {
|
|
3235
|
-
targeting: {
|
|
3236
|
-
hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'
|
|
3219
|
+
it('should register a successful bid', function () {
|
|
3220
|
+
let response = {
|
|
3221
|
+
cur: 'USD',
|
|
3222
|
+
seatbid: [{
|
|
3223
|
+
bid: [{
|
|
3224
|
+
id: '0',
|
|
3225
|
+
impid: '/19968336/header-bid-tag-0',
|
|
3226
|
+
adomain: ['test.com'],
|
|
3227
|
+
price: 2,
|
|
3228
|
+
crid: '4259970',
|
|
3229
|
+
ext: {
|
|
3230
|
+
bidder: {
|
|
3231
|
+
rp: {
|
|
3232
|
+
mime: 'application/javascript',
|
|
3233
|
+
size_id: 201,
|
|
3234
|
+
advid: 12345
|
|
3235
|
+
}
|
|
3237
3236
|
},
|
|
3238
|
-
|
|
3237
|
+
prebid: {
|
|
3238
|
+
targeting: {
|
|
3239
|
+
hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'
|
|
3240
|
+
},
|
|
3241
|
+
type: 'video'
|
|
3242
|
+
}
|
|
3239
3243
|
}
|
|
3240
|
-
}
|
|
3244
|
+
}],
|
|
3245
|
+
group: 0,
|
|
3246
|
+
seat: 'rubicon'
|
|
3241
3247
|
}],
|
|
3242
|
-
|
|
3243
|
-
seat: 'rubicon'
|
|
3244
|
-
}],
|
|
3245
|
-
};
|
|
3248
|
+
};
|
|
3246
3249
|
|
|
3247
|
-
|
|
3250
|
+
const request = converter.toORTB({bidderRequest, bidRequests: bidderRequest.bids});
|
|
3248
3251
|
|
|
3249
|
-
|
|
3252
|
+
let bids = spec.interpretResponse({body: response}, {data: request});
|
|
3250
3253
|
|
|
3251
|
-
|
|
3254
|
+
expect(bids).to.be.lengthOf(1);
|
|
3252
3255
|
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3256
|
+
expect(bids[0].seatBidId).to.equal('0');
|
|
3257
|
+
expect(bids[0].creativeId).to.equal('4259970');
|
|
3258
|
+
expect(bids[0].cpm).to.equal(2);
|
|
3259
|
+
expect(bids[0].ttl).to.equal(300);
|
|
3260
|
+
expect(bids[0].netRevenue).to.equal(true);
|
|
3261
|
+
expect(bids[0].adserverTargeting).to.deep.equal({hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'});
|
|
3262
|
+
expect(bids[0].mediaType).to.equal('video');
|
|
3263
|
+
expect(bids[0].meta.mediaType).to.equal('video');
|
|
3264
|
+
expect(String(bids[0].meta.advertiserDomains)).to.equal('test.com');
|
|
3265
|
+
expect(bids[0].meta.advertiserId).to.equal(12345);
|
|
3266
|
+
expect(bids[0].bidderCode).to.equal('rubicon');
|
|
3267
|
+
expect(bids[0].currency).to.equal('USD');
|
|
3268
|
+
expect(bids[0].width).to.equal(640);
|
|
3269
|
+
expect(bids[0].height).to.equal(480);
|
|
3270
|
+
});
|
|
3267
3271
|
});
|
|
3268
|
-
}
|
|
3272
|
+
}
|
|
3269
3273
|
|
|
3270
3274
|
if (FEATURES.NATIVE) {
|
|
3271
3275
|
describe('for native', () => {
|
|
@@ -3279,152 +3283,154 @@ describe('the rubicon adapter', function () {
|
|
|
3279
3283
|
});
|
|
3280
3284
|
}
|
|
3281
3285
|
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3286
|
+
if (FEATURES.VIDEO) {
|
|
3287
|
+
describe('for outstream video', function () {
|
|
3288
|
+
const sandbox = sinon.createSandbox();
|
|
3289
|
+
beforeEach(function () {
|
|
3290
|
+
createVideoBidderRequestOutstream();
|
|
3291
|
+
config.setConfig({rubicon: {
|
|
3292
|
+
rendererConfig: {
|
|
3293
|
+
align: 'left',
|
|
3294
|
+
closeButton: true
|
|
3295
|
+
},
|
|
3296
|
+
rendererUrl: 'https://example.test/renderer.js'
|
|
3297
|
+
}});
|
|
3298
|
+
window.MagniteApex = {
|
|
3299
|
+
renderAd: function() {
|
|
3300
|
+
return null;
|
|
3301
|
+
}
|
|
3296
3302
|
}
|
|
3297
|
-
}
|
|
3298
|
-
});
|
|
3303
|
+
});
|
|
3299
3304
|
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3305
|
+
afterEach(function () {
|
|
3306
|
+
sandbox.restore();
|
|
3307
|
+
delete window.MagniteApex;
|
|
3308
|
+
});
|
|
3304
3309
|
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
},
|
|
3323
|
-
prebid: {
|
|
3324
|
-
targeting: {
|
|
3325
|
-
hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'
|
|
3310
|
+
it('should register a successful bid', function () {
|
|
3311
|
+
let response = {
|
|
3312
|
+
cur: 'USD',
|
|
3313
|
+
seatbid: [{
|
|
3314
|
+
bid: [{
|
|
3315
|
+
id: '0',
|
|
3316
|
+
impid: '/19968336/header-bid-tag-0',
|
|
3317
|
+
adomain: ['test.com'],
|
|
3318
|
+
price: 2,
|
|
3319
|
+
crid: '4259970',
|
|
3320
|
+
ext: {
|
|
3321
|
+
bidder: {
|
|
3322
|
+
rp: {
|
|
3323
|
+
mime: 'application/javascript',
|
|
3324
|
+
size_id: 201,
|
|
3325
|
+
advid: 12345
|
|
3326
|
+
}
|
|
3326
3327
|
},
|
|
3327
|
-
|
|
3328
|
+
prebid: {
|
|
3329
|
+
targeting: {
|
|
3330
|
+
hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'
|
|
3331
|
+
},
|
|
3332
|
+
type: 'video'
|
|
3333
|
+
}
|
|
3328
3334
|
}
|
|
3329
|
-
}
|
|
3335
|
+
}],
|
|
3336
|
+
group: 0,
|
|
3337
|
+
seat: 'rubicon'
|
|
3330
3338
|
}],
|
|
3331
|
-
|
|
3332
|
-
seat: 'rubicon'
|
|
3333
|
-
}],
|
|
3334
|
-
};
|
|
3335
|
-
|
|
3336
|
-
const request = converter.toORTB({bidderRequest, bidRequests: bidderRequest.bids});
|
|
3337
|
-
|
|
3338
|
-
let bids = spec.interpretResponse({body: response}, { data: request });
|
|
3339
|
-
|
|
3340
|
-
expect(bids).to.be.lengthOf(1);
|
|
3341
|
-
|
|
3342
|
-
expect(bids[0].seatBidId).to.equal('0');
|
|
3343
|
-
expect(bids[0].creativeId).to.equal('4259970');
|
|
3344
|
-
expect(bids[0].cpm).to.equal(2);
|
|
3345
|
-
expect(bids[0].ttl).to.equal(300);
|
|
3346
|
-
expect(bids[0].netRevenue).to.equal(true);
|
|
3347
|
-
expect(bids[0].adserverTargeting).to.deep.equal({hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'});
|
|
3348
|
-
expect(bids[0].mediaType).to.equal('video');
|
|
3349
|
-
expect(bids[0].meta.mediaType).to.equal('video');
|
|
3350
|
-
expect(String(bids[0].meta.advertiserDomains)).to.equal('test.com');
|
|
3351
|
-
expect(bids[0].meta.advertiserId).to.equal(12345);
|
|
3352
|
-
expect(bids[0].bidderCode).to.equal('rubicon');
|
|
3353
|
-
expect(bids[0].currency).to.equal('USD');
|
|
3354
|
-
expect(bids[0].width).to.equal(640);
|
|
3355
|
-
expect(bids[0].height).to.equal(320);
|
|
3356
|
-
// check custom renderer
|
|
3357
|
-
expect(typeof bids[0].renderer).to.equal('object');
|
|
3358
|
-
expect(bids[0].renderer.getConfig()).to.deep.equal({
|
|
3359
|
-
align: 'left',
|
|
3360
|
-
closeButton: true
|
|
3361
|
-
});
|
|
3362
|
-
expect(bids[0].renderer.url).to.equal('https://example.test/renderer.js');
|
|
3363
|
-
});
|
|
3339
|
+
};
|
|
3364
3340
|
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3341
|
+
const request = converter.toORTB({bidderRequest, bidRequests: bidderRequest.bids});
|
|
3342
|
+
|
|
3343
|
+
let bids = spec.interpretResponse({body: response}, { data: request });
|
|
3344
|
+
|
|
3345
|
+
expect(bids).to.be.lengthOf(1);
|
|
3346
|
+
|
|
3347
|
+
expect(bids[0].seatBidId).to.equal('0');
|
|
3348
|
+
expect(bids[0].creativeId).to.equal('4259970');
|
|
3349
|
+
expect(bids[0].cpm).to.equal(2);
|
|
3350
|
+
expect(bids[0].ttl).to.equal(300);
|
|
3351
|
+
expect(bids[0].netRevenue).to.equal(true);
|
|
3352
|
+
expect(bids[0].adserverTargeting).to.deep.equal({hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'});
|
|
3353
|
+
expect(bids[0].mediaType).to.equal('video');
|
|
3354
|
+
expect(bids[0].meta.mediaType).to.equal('video');
|
|
3355
|
+
expect(String(bids[0].meta.advertiserDomains)).to.equal('test.com');
|
|
3356
|
+
expect(bids[0].meta.advertiserId).to.equal(12345);
|
|
3357
|
+
expect(bids[0].bidderCode).to.equal('rubicon');
|
|
3358
|
+
expect(bids[0].currency).to.equal('USD');
|
|
3359
|
+
expect(bids[0].width).to.equal(640);
|
|
3360
|
+
expect(bids[0].height).to.equal(320);
|
|
3361
|
+
// check custom renderer
|
|
3362
|
+
expect(typeof bids[0].renderer).to.equal('object');
|
|
3363
|
+
expect(bids[0].renderer.getConfig()).to.deep.equal({
|
|
3364
|
+
align: 'left',
|
|
3365
|
+
closeButton: true
|
|
3366
|
+
});
|
|
3367
|
+
expect(bids[0].renderer.url).to.equal('https://example.test/renderer.js');
|
|
3368
|
+
});
|
|
3369
|
+
|
|
3370
|
+
it('should render ad with Magnite renderer', function () {
|
|
3371
|
+
let response = {
|
|
3372
|
+
cur: 'USD',
|
|
3373
|
+
seatbid: [{
|
|
3374
|
+
bid: [{
|
|
3375
|
+
id: '0',
|
|
3376
|
+
impid: '/19968336/header-bid-tag-0',
|
|
3377
|
+
adomain: ['test.com'],
|
|
3378
|
+
price: 2,
|
|
3379
|
+
crid: '4259970',
|
|
3380
|
+
ext: {
|
|
3381
|
+
bidder: {
|
|
3382
|
+
rp: {
|
|
3383
|
+
mime: 'application/javascript',
|
|
3384
|
+
size_id: 201,
|
|
3385
|
+
advid: 12345
|
|
3386
|
+
}
|
|
3387
|
+
},
|
|
3388
|
+
prebid: {
|
|
3389
|
+
targeting: {
|
|
3390
|
+
hb_uuid: '0c498f63-5111-4bed-98e2-9be7cb932a64'
|
|
3391
|
+
},
|
|
3392
|
+
type: 'video'
|
|
3381
3393
|
}
|
|
3382
3394
|
},
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
type: 'video'
|
|
3388
|
-
}
|
|
3389
|
-
},
|
|
3390
|
-
nurl: 'https://test.com/vast.xml'
|
|
3395
|
+
nurl: 'https://test.com/vast.xml'
|
|
3396
|
+
}],
|
|
3397
|
+
group: 0,
|
|
3398
|
+
seat: 'rubicon'
|
|
3391
3399
|
}],
|
|
3392
|
-
|
|
3393
|
-
seat: 'rubicon'
|
|
3394
|
-
}],
|
|
3395
|
-
};
|
|
3396
|
-
|
|
3397
|
-
const request = converter.toORTB({bidderRequest, bidRequests: bidderRequest.bids});
|
|
3398
|
-
|
|
3399
|
-
sinon.spy(window.MagniteApex, 'renderAd');
|
|
3400
|
+
};
|
|
3400
3401
|
|
|
3401
|
-
|
|
3402
|
-
const bid = bids[0];
|
|
3403
|
-
bid.adUnitCode = 'outstream_video1_placement';
|
|
3404
|
-
const adUnit = document.createElement('div');
|
|
3405
|
-
adUnit.id = bid.adUnitCode;
|
|
3406
|
-
document.body.appendChild(adUnit);
|
|
3402
|
+
const request = converter.toORTB({bidderRequest, bidRequests: bidderRequest.bids});
|
|
3407
3403
|
|
|
3408
|
-
|
|
3404
|
+
sinon.spy(window.MagniteApex, 'renderAd');
|
|
3409
3405
|
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3406
|
+
let bids = spec.interpretResponse({body: response}, {data: request});
|
|
3407
|
+
const bid = bids[0];
|
|
3408
|
+
bid.adUnitCode = 'outstream_video1_placement';
|
|
3409
|
+
const adUnit = document.createElement('div');
|
|
3410
|
+
adUnit.id = bid.adUnitCode;
|
|
3411
|
+
document.body.appendChild(adUnit);
|
|
3412
|
+
|
|
3413
|
+
bid.renderer.render(bid);
|
|
3414
|
+
|
|
3415
|
+
const renderCall = window.MagniteApex.renderAd.getCall(0);
|
|
3416
|
+
expect(renderCall.args[0]).to.deep.equal({
|
|
3417
|
+
closeButton: true,
|
|
3418
|
+
collapse: true,
|
|
3419
|
+
height: 320,
|
|
3420
|
+
label: undefined,
|
|
3421
|
+
placement: {
|
|
3422
|
+
align: 'left',
|
|
3423
|
+
attachTo: adUnit,
|
|
3424
|
+
position: 'append',
|
|
3425
|
+
},
|
|
3426
|
+
vastUrl: 'https://test.com/vast.xml',
|
|
3427
|
+
width: 640
|
|
3428
|
+
});
|
|
3429
|
+
// cleanup
|
|
3430
|
+
adUnit.parentNode.removeChild(adUnit);
|
|
3423
3431
|
});
|
|
3424
|
-
// cleanup
|
|
3425
|
-
adUnit.parentNode.removeChild(adUnit);
|
|
3426
3432
|
});
|
|
3427
|
-
}
|
|
3433
|
+
}
|
|
3428
3434
|
|
|
3429
3435
|
describe('config with integration type', () => {
|
|
3430
3436
|
it('should use the integration type provided in the config instead of the default', () => {
|