prebid.js 8.43.0 → 8.45.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/README.md +7 -1
- package/creative/constants.js +7 -7
- package/creative/renderers/display/constants.js +2 -2
- package/creative/renderers/native/constants.js +2 -2
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.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/adnuntiusBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adpod.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.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/agmaAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/asteriobidAnalyticsAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/automatadAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidViewabilityIO.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/brandmetricsRtdProvider.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/chunk-paapi.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/confiantRtdProvider.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/creative-renderer-native.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/currency.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -0
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/datawrkzBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/dependencies.json +3 -3
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dsaControl.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -1
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/holidBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/illuminBidAdapter.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/instreamTracking.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.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/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/loyalBidAdapter.js +1 -0
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafilterRtdProvider.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/multibid.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +242 -239
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openwebBidAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionAnalyticsAdapter.js +1 -1
- package/dist/oxxionRtdProvider.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pgamsspBidAdapter.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pirIdSystem.js +1 -0
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/priceFloors.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/publirBidAdapter.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/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/qortexRtdProvider.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/shinezRtbBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/sirdataRtdProvider.js +1 -1
- package/dist/sizeMapping.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.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/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/stnBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tagorasBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.js +1 -1
- package/dist/topicsFpdModule.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videoModule.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexAnalyticsAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/gulpfile.js +9 -1
- package/integrationExamples/gpt/adnuntius_example.html +7 -1
- package/integrationExamples/gpt/azerionedgeRtdProvider_example.html +3 -3
- package/integrationExamples/gpt/top-level-paapi/decisionLogic.js +57 -0
- package/integrationExamples/gpt/top-level-paapi/tl_paapi_example.html +188 -0
- package/integrationExamples/gpt/x-domain/creative.html +1 -1
- package/integrationExamples/{gpt → realTimeData}/jwplayerRtdProvider_example.html +28 -42
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +4 -4
- package/libraries/creative-renderer-native/renderer.js +1 -1
- package/modules/33acrossAnalyticsAdapter.js +2 -4
- package/modules/33acrossIdSystem.js +1 -1
- package/modules/adWMGAnalyticsAdapter.js +9 -11
- package/modules/adagioAnalyticsAdapter.js +49 -46
- package/modules/adkernelAdnAnalyticsAdapter.js +8 -8
- package/modules/adkernelBidAdapter.js +23 -102
- package/modules/adlooxAdServerVideo.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +4 -4
- package/modules/adnuntiusBidAdapter.js +50 -32
- package/modules/adomikAnalyticsAdapter.js +7 -7
- package/modules/adpod.js +3 -3
- package/modules/adxcgAnalyticsAdapter.js +10 -10
- package/modules/adxpremiumAnalyticsAdapter.js +8 -10
- package/modules/agmaAnalyticsAdapter.js +6 -7
- package/modules/appierAnalyticsAdapter.js +5 -7
- package/modules/appnexusBidAdapter.js +1 -0
- package/modules/asteriobidAnalyticsAdapter.js +14 -14
- package/modules/atsAnalyticsAdapter.js +4 -4
- package/modules/automatadAnalyticsAdapter.js +20 -20
- package/modules/azerionedgeRtdProvider.md +4 -2
- package/modules/bidViewability.js +3 -3
- package/modules/bidViewabilityIO.js +3 -3
- package/modules/bidwatchAnalyticsAdapter.js +7 -9
- package/modules/brandmetricsRtdProvider.js +6 -6
- package/modules/browsiRtdProvider.js +3 -3
- package/modules/byDataAnalyticsAdapter.js +3 -3
- package/modules/cleanioRtdProvider.js +3 -3
- package/modules/concertAnalyticsAdapter.js +5 -7
- package/modules/confiantRtdProvider.js +2 -2
- package/modules/conversantAnalyticsAdapter.js +2 -4
- package/modules/criteoBidAdapter.js +53 -10
- package/modules/currency.js +7 -7
- package/modules/dailymotionBidAdapter.js +139 -0
- package/modules/dailymotionBidAdapter.md +140 -0
- package/modules/datawrkzBidAdapter.js +4 -4
- package/modules/debugging/pbsInterceptor.js +2 -2
- package/modules/dfpAdServerVideo.js +2 -2
- package/modules/discoveryBidAdapter.js +21 -0
- package/modules/dsaControl.js +5 -5
- package/modules/eplanningAnalyticsAdapter.js +8 -8
- package/modules/fintezaAnalyticsAdapter.js +5 -5
- package/modules/gdprEnforcement.js +3 -3
- package/modules/geoedgeRtdProvider.js +2 -2
- package/modules/greenbidsAnalyticsAdapter.js +13 -10
- package/modules/greenbidsRtdProvider.js +2 -2
- package/modules/gridBidAdapter.js +2 -2
- package/modules/growthCodeAnalyticsAdapter.js +14 -14
- package/modules/gumgumBidAdapter.js +4 -1
- package/modules/hadronAnalyticsAdapter.js +14 -14
- package/modules/holidBidAdapter.js +2 -2
- package/modules/id5AnalyticsAdapter.js +7 -9
- package/modules/improvedigitalBidAdapter.js +2 -1
- package/modules/insticatorBidAdapter.js +137 -27
- package/modules/instreamTracking.js +4 -4
- package/modules/invisiblyAnalyticsAdapter.js +15 -17
- package/modules/ixBidAdapter.js +3 -3
- package/modules/jwplayerRtdProvider.js +93 -26
- package/modules/jwplayerRtdProvider.md +23 -2
- package/modules/kargoAnalyticsAdapter.js +3 -3
- package/modules/kargoBidAdapter.js +26 -31
- package/modules/konduitAnalyticsAdapter.js +13 -13
- package/modules/lassoBidAdapter.js +11 -2
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/liveIntentAnalyticsAdapter.js +2 -2
- package/modules/livewrappedAnalyticsAdapter.js +10 -10
- package/modules/loyalBidAdapter.js +190 -0
- package/modules/loyalBidAdapter.md +79 -0
- package/modules/magniteAnalyticsAdapter.js +25 -23
- package/modules/malltvAnalyticsAdapter.js +4 -6
- package/modules/mediafilterRtdProvider.js +2 -2
- package/modules/medianetAnalyticsAdapter.js +12 -12
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/multibid/index.js +2 -2
- package/modules/neuwoRtdProvider.js +2 -2
- package/modules/nextMillenniumBidAdapter.js +4 -4
- package/modules/nobidAnalyticsAdapter.js +9 -11
- package/modules/ooloAnalyticsAdapter.js +2 -2
- package/modules/oxxionAnalyticsAdapter.js +7 -9
- package/modules/paapi.js +20 -6
- package/modules/permutiveRtdProvider.js +21 -2
- package/modules/pgamsspBidAdapter.js +26 -3
- package/modules/pirIdSystem.js +62 -0
- package/modules/pirIdSystem.md +27 -0
- package/modules/prebidServerBidAdapter/index.js +8 -8
- package/modules/prebidServerBidAdapter/ortbConverter.js +3 -3
- package/modules/prebidmanagerAnalyticsAdapter.js +14 -14
- package/modules/priceFloors.js +10 -5
- package/modules/pubmaticAnalyticsAdapter.js +32 -22
- package/modules/pubmaticBidAdapter.js +1 -17
- package/modules/pubwiseAnalyticsAdapter.js +11 -11
- package/modules/pubxaiAnalyticsAdapter.js +6 -6
- package/modules/qortexRtdProvider.js +2 -2
- package/modules/roxotAnalyticsAdapter.js +8 -10
- package/modules/rtdModule/index.js +7 -7
- package/modules/scaleableAnalyticsAdapter.js +5 -5
- package/modules/seedtagBidAdapter.js +12 -3
- package/modules/sigmoidAnalyticsAdapter.js +7 -7
- package/modules/sirdataRtdProvider.js +2 -0
- package/modules/smaatoBidAdapter.js +1 -2
- package/modules/sonobiAnalyticsAdapter.js +10 -12
- package/modules/sonobiBidAdapter.js +2 -5
- package/modules/sovrnAnalyticsAdapter.js +7 -9
- package/modules/sovrnBidAdapter.js +1 -1
- package/modules/staqAnalyticsAdapter.js +9 -9
- package/modules/teadsBidAdapter.js +2 -0
- package/modules/terceptAnalyticsAdapter.js +7 -7
- package/modules/topicsFpdModule.js +3 -0
- package/modules/topicsFpdModule.md +4 -0
- package/modules/ucfunnelAnalyticsAdapter.js +5 -7
- package/modules/userId/index.js +3 -3
- package/modules/videoModule/index.js +4 -4
- package/modules/yandexAnalyticsAdapter.js +2 -2
- package/modules/yieldoneAnalyticsAdapter.js +7 -7
- package/modules/yuktamediaAnalyticsAdapter.js +9 -9
- package/modules/zeta_global_sspAnalyticsAdapter.js +5 -5
- package/modules/zeta_global_sspBidAdapter.js +8 -1
- package/package.json +1 -1
- package/src/adRendering.js +15 -15
- package/src/adUnits.js +9 -21
- package/src/adapterManager.js +23 -13
- package/src/adapters/bidderFactory.js +8 -8
- package/src/auction.js +26 -28
- package/src/auctionManager.js +4 -4
- package/src/bidderSettings.js +2 -2
- package/src/config.js +2 -2
- package/src/constants.js +190 -0
- package/src/events.js +3 -3
- package/src/native.js +6 -8
- package/src/prebid.js +6 -10
- package/src/secureCreatives.js +5 -5
- package/src/targeting.js +13 -13
- package/src/utils.js +4 -4
- package/test/fixtures/fixtures.js +44 -44
- package/test/helpers/analytics.js +6 -6
- package/test/spec/AnalyticsAdapter_spec.js +3 -3
- package/test/spec/auctionmanager_spec.js +82 -82
- package/test/spec/modules/33acrossAnalyticsAdapter_spec.js +1 -2
- package/test/spec/modules/33acrossIdSystem_spec.js +3 -3
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +14 -14
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +79 -55
- package/test/spec/modules/adkernelAdnAnalytics_spec.js +6 -6
- package/test/spec/modules/adkernelBidAdapter_spec.js +63 -24
- package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +10 -7
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/adxcgAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/agmaAnalyticsAdapter_spec.js +18 -14
- package/test/spec/modules/appierAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/asteriobidAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +8 -8
- package/test/spec/modules/automatadAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
- package/test/spec/modules/bidViewability_spec.js +4 -4
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +7 -6
- package/test/spec/modules/byDataAnalyticsAdapter_spec.js +5 -4
- package/test/spec/modules/cleanioRtdProvider_spec.js +6 -6
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +7 -6
- package/test/spec/modules/confiantRtdProvider_spec.js +2 -2
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +61 -61
- package/test/spec/modules/criteoBidAdapter_spec.js +112 -6
- package/test/spec/modules/currency_spec.js +6 -6
- package/test/spec/modules/dailymotionBidAdapter_spec.js +369 -0
- package/test/spec/modules/discoveryBidAdapter_spec.js +35 -1
- package/test/spec/modules/dsaControl_spec.js +4 -4
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +20 -13
- package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +5 -5
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/geoedgeRtdProvider_spec.js +37 -37
- package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +15 -2
- package/test/spec/modules/greenbidsRtdProvider_spec.js +2 -2
- package/test/spec/modules/gridBidAdapter_spec.js +3 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/gumgumBidAdapter_spec.js +23 -0
- package/test/spec/modules/hadronAnalyticsAdapter_spec.js +3 -3
- package/test/spec/modules/id5AnalyticsAdapter_spec.js +5 -5
- package/test/spec/modules/id5IdSystem_spec.js +2 -2
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -3
- package/test/spec/modules/insticatorBidAdapter_spec.js +275 -22
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +40 -40
- package/test/spec/modules/jwplayerRtdProvider_spec.js +672 -29
- package/test/spec/modules/kargoAnalyticsAdapter_spec.js +3 -3
- package/test/spec/modules/kargoBidAdapter_spec.js +36 -0
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +13 -13
- package/test/spec/modules/lassoBidAdapter_spec.js +1 -0
- package/test/spec/modules/lemmaDigitalBidAdapter_spec.js +1 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +16 -1
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -3
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +15 -20
- package/test/spec/modules/loyalBidAdapter_spec .js +375 -0
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +31 -15
- package/test/spec/modules/malltvAnalyticsAdapter_spec.js +3 -3
- package/test/spec/modules/mediafilterRtdProvider_spec.js +2 -2
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +3 -3
- package/test/spec/modules/nobidAnalyticsAdapter_spec.js +23 -23
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +33 -33
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +0 -1
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/paapi_spec.js +40 -14
- package/test/spec/modules/permutiveRtdProvider_spec.js +29 -1
- package/test/spec/modules/pgamsspBidAdapter_spec.js +50 -4
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +9 -9
- package/test/spec/modules/pirIdSystem_spec.js +77 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +7 -7
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/priceFloors_spec.js +6 -5
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +12 -14
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +0 -1
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +14 -14
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/qortexRtdProvider_spec.js +2 -2
- package/test/spec/modules/realTimeDataModule_spec.js +9 -9
- package/test/spec/modules/relevantAnalyticsAdapter_spec.js +3 -3
- package/test/spec/modules/relevantdigitalBidAdapter_spec.js +2 -2
- package/test/spec/modules/rivrAnalyticsAdapter_spec.js +4 -4
- package/test/spec/modules/roxotAnalyticsAdapter_spec.js +25 -25
- package/test/spec/modules/scaleableAnalyticsAdapter_spec.js +5 -5
- package/test/spec/modules/seedtagBidAdapter_spec.js +56 -3
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +0 -1
- package/test/spec/modules/sonobiAnalyticsAdapter_spec.js +8 -7
- package/test/spec/modules/sonobiBidAdapter_spec.js +4 -6
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/sovrnBidAdapter_spec.js +5 -5
- package/test/spec/modules/staqAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/teadsBidAdapter_spec.js +35 -0
- package/test/spec/modules/terceptAnalyticsAdapter_spec.js +7 -7
- package/test/spec/modules/trionBidAdapter_spec.js +1 -1
- package/test/spec/modules/ucfunnelAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/userId_spec.js +4 -4
- package/test/spec/modules/videoModule/pbVideo_spec.js +3 -3
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +22 -21
- package/test/spec/modules/yuktamediaAnalyticsAdapter_spec.js +33 -32
- package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +8 -8
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +1 -1
- package/test/spec/native_spec.js +19 -19
- package/test/spec/unit/adRendering_spec.js +14 -14
- package/test/spec/unit/adUnits_spec.js +1 -1
- package/test/spec/unit/core/adapterManager_spec.js +99 -59
- package/test/spec/unit/core/bidderFactory_spec.js +6 -6
- package/test/spec/unit/core/targeting_spec.js +47 -47
- package/test/spec/unit/pbjs_api_spec.js +81 -81
- package/test/spec/unit/secureCreatives_spec.js +27 -27
- package/test/spec/utils_spec.js +2 -2
- package/src/constants.json +0 -196
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
6
6
|
import adapterManager from '../src/adapterManager.js';
|
|
7
|
-
import
|
|
7
|
+
import { EVENTS } from '../src/constants.js';
|
|
8
8
|
import { ajax } from '../src/ajax.js';
|
|
9
9
|
import { BANNER } from '../src/mediaTypes.js';
|
|
10
10
|
import { getWindowTop, getWindowSelf, deepAccess, logInfo, logError } from '../src/utils.js';
|
|
@@ -12,11 +12,13 @@ import { getGlobal } from '../src/prebidGlobal.js';
|
|
|
12
12
|
|
|
13
13
|
const emptyUrl = '';
|
|
14
14
|
const analyticsType = 'endpoint';
|
|
15
|
-
const events = Object.keys(
|
|
15
|
+
const events = Object.keys(EVENTS).map(key => EVENTS[key]);
|
|
16
16
|
const ADAGIO_GVLID = 617;
|
|
17
17
|
const VERSION = '3.0.0';
|
|
18
18
|
const PREBID_VERSION = '$prebid.version$';
|
|
19
19
|
const ENDPOINT = 'https://c.4dex.io/pba.gif';
|
|
20
|
+
const CURRENCY_USD = 'USD';
|
|
21
|
+
const ADAGIO_CODE = 'adagio';
|
|
20
22
|
const cache = {
|
|
21
23
|
auctions: {},
|
|
22
24
|
getAuction: function(auctionId, adUnitCode) {
|
|
@@ -92,17 +94,11 @@ function removeDuplicates(arr, getKey) {
|
|
|
92
94
|
});
|
|
93
95
|
};
|
|
94
96
|
|
|
95
|
-
function
|
|
96
|
-
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
function isAdagio(value) {
|
|
100
|
-
if (!value) {
|
|
97
|
+
function isAdagio(alias) {
|
|
98
|
+
if (!alias) {
|
|
101
99
|
return false
|
|
102
100
|
}
|
|
103
|
-
|
|
104
|
-
return value.toLowerCase().includes('adagio') ||
|
|
105
|
-
getAdapterNameForAlias(value).toLowerCase().includes('adagio');
|
|
101
|
+
return (alias + adapterManager.aliasRegistry[alias]).toLowerCase().includes(ADAGIO_CODE);
|
|
106
102
|
};
|
|
107
103
|
|
|
108
104
|
function getMediaTypeAlias(mediaType) {
|
|
@@ -129,6 +125,26 @@ function addKeyPrefix(obj, prefix) {
|
|
|
129
125
|
}, {});
|
|
130
126
|
}
|
|
131
127
|
|
|
128
|
+
function getUsdCpm(cpm, currency) {
|
|
129
|
+
let netCpm = cpm
|
|
130
|
+
|
|
131
|
+
if (typeof currency === 'string' && currency.toUpperCase() !== CURRENCY_USD) {
|
|
132
|
+
if (typeof getGlobal().convertCurrency === 'function') {
|
|
133
|
+
netCpm = parseFloat(Number(getGlobal().convertCurrency(cpm, currency, CURRENCY_USD))).toFixed(3);
|
|
134
|
+
} else {
|
|
135
|
+
netCpm = null
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return netCpm
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function getCurrencyData(bid) {
|
|
142
|
+
return {
|
|
143
|
+
netCpm: getUsdCpm(bid.cpm, bid.currency),
|
|
144
|
+
orginalCpm: getUsdCpm(bid.originalCpm, bid.originalCurrency)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
132
148
|
/**
|
|
133
149
|
* sendRequest to Adagio. It filter null values and encode each query param.
|
|
134
150
|
* @param {Object} qp
|
|
@@ -258,7 +274,7 @@ function handlerAuctionInit(event) {
|
|
|
258
274
|
t_v: params.testVersion || null,
|
|
259
275
|
mts: mediaTypesKeys.join(','),
|
|
260
276
|
ban_szs: bannerSizes.join(','),
|
|
261
|
-
bdrs: bidders.map(bidder =>
|
|
277
|
+
bdrs: bidders.map(bidder => bidder.bidder).sort().join(','),
|
|
262
278
|
adg_mts: adagioMediaTypes.join(',')
|
|
263
279
|
};
|
|
264
280
|
|
|
@@ -299,15 +315,22 @@ function handlerAuctionEnd(event) {
|
|
|
299
315
|
|
|
300
316
|
const adUnitCodes = cache.getAllAdUnitCodes(auctionId);
|
|
301
317
|
adUnitCodes.forEach(adUnitCode => {
|
|
302
|
-
const
|
|
318
|
+
const bidResponseMapper = (bidder) => {
|
|
319
|
+
const bid = event.bidsReceived.find(bid => bid.adUnitCode === adUnitCode && bid.bidder === bidder)
|
|
320
|
+
return bid ? '1' : '0'
|
|
321
|
+
}
|
|
322
|
+
const bidCpmMapper = (bidder) => {
|
|
323
|
+
const bid = event.bidsReceived.find(bid => bid.adUnitCode === adUnitCode && bid.bidder === bidder)
|
|
324
|
+
return bid ? getCurrencyData(bid).netCpm : null
|
|
325
|
+
}
|
|
303
326
|
|
|
304
327
|
cache.updateAuction(auctionId, adUnitCode, {
|
|
305
|
-
bdrs_bid: cache.getBiddersFromAuction(auctionId, adUnitCode).map(
|
|
328
|
+
bdrs_bid: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidResponseMapper).join(','),
|
|
329
|
+
bdrs_cpm: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidCpmMapper).join(',')
|
|
306
330
|
});
|
|
307
331
|
sendNewBeacon(auctionId, adUnitCode);
|
|
308
332
|
});
|
|
309
333
|
}
|
|
310
|
-
|
|
311
334
|
function handlerBidWon(event) {
|
|
312
335
|
let auctionId = getTargetedAuctionId(event);
|
|
313
336
|
|
|
@@ -315,20 +338,7 @@ function handlerBidWon(event) {
|
|
|
315
338
|
return;
|
|
316
339
|
}
|
|
317
340
|
|
|
318
|
-
|
|
319
|
-
let ogCurRateToUSD = (event.originalCurrency === 'USD') ? 1 : null;
|
|
320
|
-
try {
|
|
321
|
-
if (typeof getGlobal().convertCurrency === 'function') {
|
|
322
|
-
// Currency module is loaded, we can calculate the conversion rate.
|
|
323
|
-
|
|
324
|
-
// Get the conversion rate from the original currency to USD.
|
|
325
|
-
ogCurRateToUSD = getGlobal().convertCurrency(1, event.originalCurrency, 'USD');
|
|
326
|
-
// Get the conversion rate from the ad server currency to USD.
|
|
327
|
-
adsCurRateToUSD = getGlobal().convertCurrency(1, event.currency, 'USD');
|
|
328
|
-
}
|
|
329
|
-
} catch (error) {
|
|
330
|
-
logError('Error on Adagio Analytics Adapter - handlerBidWon', error);
|
|
331
|
-
}
|
|
341
|
+
const currencyData = getCurrencyData(event)
|
|
332
342
|
|
|
333
343
|
const adagioAuctionCacheId = (
|
|
334
344
|
(event.latestTargetedAuctionId && event.latestTargetedAuctionId !== event.auctionId)
|
|
@@ -336,19 +346,12 @@ function handlerBidWon(event) {
|
|
|
336
346
|
: null);
|
|
337
347
|
|
|
338
348
|
cache.updateAuction(auctionId, event.adUnitCode, {
|
|
339
|
-
win_bdr:
|
|
349
|
+
win_bdr: event.bidder,
|
|
340
350
|
win_mt: getMediaTypeAlias(event.mediaType),
|
|
341
351
|
win_ban_sz: event.mediaType === BANNER ? `${event.width}x${event.height}` : null,
|
|
342
352
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
cur: event.currency,
|
|
346
|
-
cur_rate: adsCurRateToUSD,
|
|
347
|
-
|
|
348
|
-
// original currency from bidder
|
|
349
|
-
og_cpm: event.originalCpm,
|
|
350
|
-
og_cur: event.originalCurrency,
|
|
351
|
-
og_cur_rate: ogCurRateToUSD,
|
|
353
|
+
win_net_cpm: currencyData.netCpm,
|
|
354
|
+
win_og_cpm: currencyData.orginalCpm,
|
|
352
355
|
|
|
353
356
|
// cache bid id
|
|
354
357
|
auct_id_c: adagioAuctionCacheId,
|
|
@@ -380,22 +383,22 @@ let adagioAdapter = Object.assign(adapter({ emptyUrl, analyticsType }), {
|
|
|
380
383
|
|
|
381
384
|
try {
|
|
382
385
|
switch (eventType) {
|
|
383
|
-
case
|
|
386
|
+
case EVENTS.AUCTION_INIT:
|
|
384
387
|
handlerAuctionInit(args);
|
|
385
388
|
break;
|
|
386
|
-
case
|
|
389
|
+
case EVENTS.BID_RESPONSE:
|
|
387
390
|
handlerBidResponse(args);
|
|
388
391
|
break;
|
|
389
|
-
case
|
|
392
|
+
case EVENTS.AUCTION_END:
|
|
390
393
|
handlerAuctionEnd(args);
|
|
391
394
|
break;
|
|
392
|
-
case
|
|
395
|
+
case EVENTS.BID_WON:
|
|
393
396
|
handlerBidWon(args);
|
|
394
397
|
break;
|
|
395
398
|
// AD_RENDER_SUCCEEDED seems redundant with BID_WON.
|
|
396
399
|
// case CONSTANTS.EVENTS.AD_RENDER_SUCCEEDED:
|
|
397
|
-
case
|
|
398
|
-
handlerAdRender(args, eventType ===
|
|
400
|
+
case EVENTS.AD_RENDER_FAILED:
|
|
401
|
+
handlerAdRender(args, eventType === EVENTS.AD_RENDER_SUCCEEDED);
|
|
399
402
|
break;
|
|
400
403
|
}
|
|
401
404
|
} catch (error) {
|
|
@@ -428,7 +431,7 @@ adagioAdapter.enableAnalytics = config => {
|
|
|
428
431
|
|
|
429
432
|
adapterManager.registerAnalyticsAdapter({
|
|
430
433
|
adapter: adagioAdapter,
|
|
431
|
-
code:
|
|
434
|
+
code: ADAGIO_CODE,
|
|
432
435
|
gvlid: ADAGIO_GVLID,
|
|
433
436
|
});
|
|
434
437
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
2
|
-
import
|
|
2
|
+
import {EVENTS} from '../src/constants.js';
|
|
3
3
|
import adapterManager from '../src/adapterManager.js';
|
|
4
4
|
import { logError, parseUrl, _each } from '../src/utils.js';
|
|
5
5
|
import {ajax} from '../src/ajax.js';
|
|
@@ -51,26 +51,26 @@ let analyticsAdapter = Object.assign(adapter({analyticsType: 'endpoint'}),
|
|
|
51
51
|
}
|
|
52
52
|
let handler = null;
|
|
53
53
|
switch (eventType) {
|
|
54
|
-
case
|
|
54
|
+
case EVENTS.AUCTION_INIT:
|
|
55
55
|
if (analyticsAdapter.context.queue) {
|
|
56
56
|
analyticsAdapter.context.queue.init();
|
|
57
57
|
}
|
|
58
58
|
initPrivacy(analyticsAdapter.context.requestTemplate, args.bidderRequests);
|
|
59
59
|
handler = trackAuctionInit;
|
|
60
60
|
break;
|
|
61
|
-
case
|
|
61
|
+
case EVENTS.BID_REQUESTED:
|
|
62
62
|
handler = trackBidRequest;
|
|
63
63
|
break;
|
|
64
|
-
case
|
|
64
|
+
case EVENTS.BID_RESPONSE:
|
|
65
65
|
handler = trackBidResponse;
|
|
66
66
|
break;
|
|
67
|
-
case
|
|
67
|
+
case EVENTS.BID_WON:
|
|
68
68
|
handler = trackBidWon;
|
|
69
69
|
break;
|
|
70
|
-
case
|
|
70
|
+
case EVENTS.BID_TIMEOUT:
|
|
71
71
|
handler = trackBidTimeout;
|
|
72
72
|
break;
|
|
73
|
-
case
|
|
73
|
+
case EVENTS.AUCTION_END:
|
|
74
74
|
handler = trackAuctionEnd;
|
|
75
75
|
break;
|
|
76
76
|
}
|
|
@@ -79,7 +79,7 @@ let analyticsAdapter = Object.assign(adapter({analyticsType: 'endpoint'}),
|
|
|
79
79
|
if (analyticsAdapter.context.queue) {
|
|
80
80
|
analyticsAdapter.context.queue.push(events);
|
|
81
81
|
}
|
|
82
|
-
if (eventType ===
|
|
82
|
+
if (eventType === EVENTS.AUCTION_END) {
|
|
83
83
|
sendAll();
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
_each,
|
|
3
|
-
cleanObj,
|
|
4
3
|
contains,
|
|
5
4
|
createTrackPixelHtml,
|
|
6
5
|
deepAccess,
|
|
@@ -20,7 +19,6 @@ import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
|
20
19
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
21
20
|
import {find} from '../src/polyfill.js';
|
|
22
21
|
import {config} from '../src/config.js';
|
|
23
|
-
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
|
|
24
22
|
import {getAdUnitSizes} from '../libraries/sizeUtils/sizeUtils.js';
|
|
25
23
|
|
|
26
24
|
/**
|
|
@@ -39,7 +37,7 @@ const VIDEO_FPD = ['battr', 'pos'];
|
|
|
39
37
|
const NATIVE_FPD = ['battr', 'api'];
|
|
40
38
|
const BANNER_PARAMS = ['pos'];
|
|
41
39
|
const BANNER_FPD = ['btype', 'battr', 'pos', 'api'];
|
|
42
|
-
const VERSION = '1.
|
|
40
|
+
const VERSION = '1.7';
|
|
43
41
|
const SYNC_IFRAME = 1;
|
|
44
42
|
const SYNC_IMAGE = 2;
|
|
45
43
|
const SYNC_TYPES = {
|
|
@@ -48,34 +46,17 @@ const SYNC_TYPES = {
|
|
|
48
46
|
};
|
|
49
47
|
const GVLID = 14;
|
|
50
48
|
|
|
51
|
-
const NATIVE_MODEL = [
|
|
52
|
-
{name: 'title', assetType: 'title'},
|
|
53
|
-
{name: 'icon', assetType: 'img', type: 1},
|
|
54
|
-
{name: 'image', assetType: 'img', type: 3},
|
|
55
|
-
{name: 'body', assetType: 'data', type: 2},
|
|
56
|
-
{name: 'body2', assetType: 'data', type: 10},
|
|
57
|
-
{name: 'sponsoredBy', assetType: 'data', type: 1},
|
|
58
|
-
{name: 'phone', assetType: 'data', type: 8},
|
|
59
|
-
{name: 'address', assetType: 'data', type: 9},
|
|
60
|
-
{name: 'price', assetType: 'data', type: 6},
|
|
61
|
-
{name: 'salePrice', assetType: 'data', type: 7},
|
|
62
|
-
{name: 'cta', assetType: 'data', type: 12},
|
|
63
|
-
{name: 'rating', assetType: 'data', type: 3},
|
|
64
|
-
{name: 'downloads', assetType: 'data', type: 5},
|
|
65
|
-
{name: 'likes', assetType: 'data', type: 4},
|
|
66
|
-
{name: 'displayUrl', assetType: 'data', type: 11}
|
|
67
|
-
];
|
|
68
|
-
|
|
69
|
-
const NATIVE_INDEX = NATIVE_MODEL.reduce((acc, val, idx) => {
|
|
70
|
-
acc[val.name] = {id: idx, ...val};
|
|
71
|
-
return acc;
|
|
72
|
-
}, {});
|
|
73
|
-
|
|
74
49
|
const MULTI_FORMAT_SUFFIX = '__mf';
|
|
75
50
|
const MULTI_FORMAT_SUFFIX_BANNER = 'b' + MULTI_FORMAT_SUFFIX;
|
|
76
51
|
const MULTI_FORMAT_SUFFIX_VIDEO = 'v' + MULTI_FORMAT_SUFFIX;
|
|
77
52
|
const MULTI_FORMAT_SUFFIX_NATIVE = 'n' + MULTI_FORMAT_SUFFIX;
|
|
78
53
|
|
|
54
|
+
const MEDIA_TYPES = {
|
|
55
|
+
BANNER: 1,
|
|
56
|
+
VIDEO: 2,
|
|
57
|
+
NATIVE: 4
|
|
58
|
+
};
|
|
59
|
+
|
|
79
60
|
/**
|
|
80
61
|
* Adapter for requesting bids from AdKernel white-label display platform
|
|
81
62
|
*/
|
|
@@ -139,9 +120,6 @@ export const spec = {
|
|
|
139
120
|
* @returns {ServerRequest[]}
|
|
140
121
|
*/
|
|
141
122
|
buildRequests: function (bidRequests, bidderRequest) {
|
|
142
|
-
// convert Native ORTB definition to old-style prebid native definition
|
|
143
|
-
bidRequests = convertOrtbRequestToProprietaryNative(bidRequests);
|
|
144
|
-
|
|
145
123
|
let impGroups = groupImpressionsByHostZone(bidRequests, bidderRequest.refererInfo);
|
|
146
124
|
let requests = [];
|
|
147
125
|
let schain = bidRequests[0].schain;
|
|
@@ -187,19 +165,21 @@ export const spec = {
|
|
|
187
165
|
if (prBid.requestId.endsWith(MULTI_FORMAT_SUFFIX)) {
|
|
188
166
|
prBid.requestId = stripMultiformatSuffix(prBid.requestId);
|
|
189
167
|
}
|
|
190
|
-
if (
|
|
168
|
+
if (rtbBid.mtype === MEDIA_TYPES.BANNER) {
|
|
191
169
|
prBid.mediaType = BANNER;
|
|
192
170
|
prBid.width = rtbBid.w;
|
|
193
171
|
prBid.height = rtbBid.h;
|
|
194
172
|
prBid.ad = formatAdMarkup(rtbBid);
|
|
195
|
-
} else if (
|
|
173
|
+
} else if (rtbBid.mtype === MEDIA_TYPES.VIDEO) {
|
|
196
174
|
prBid.mediaType = VIDEO;
|
|
197
175
|
prBid.vastUrl = rtbBid.nurl;
|
|
198
176
|
prBid.width = imp.video.w;
|
|
199
177
|
prBid.height = imp.video.h;
|
|
200
|
-
} else if (
|
|
178
|
+
} else if (rtbBid.mtype === MEDIA_TYPES.NATIVE) {
|
|
201
179
|
prBid.mediaType = NATIVE;
|
|
202
|
-
prBid.native =
|
|
180
|
+
prBid.native = {
|
|
181
|
+
ortb: buildNativeAd(rtbBid.adm)
|
|
182
|
+
};
|
|
203
183
|
}
|
|
204
184
|
if (isStr(rtbBid.dealid)) {
|
|
205
185
|
prBid.dealId = rtbBid.dealid;
|
|
@@ -345,11 +325,9 @@ function buildImps(bidRequest, secure) {
|
|
|
345
325
|
} else {
|
|
346
326
|
typedImp = imp;
|
|
347
327
|
}
|
|
348
|
-
let nativeRequest = buildNativeRequest(mediaTypes.native);
|
|
349
328
|
typedImp.native = {
|
|
350
329
|
...getDefinedParamsOrEmpty(bidRequest.ortb2Imp, NATIVE_FPD),
|
|
351
|
-
|
|
352
|
-
request: JSON.stringify(nativeRequest)
|
|
330
|
+
request: JSON.stringify(bidRequest.nativeOrtbRequest)
|
|
353
331
|
};
|
|
354
332
|
initImpBidfloor(typedImp, bidRequest, sizes, isMultiformat ? '*' : NATIVE);
|
|
355
333
|
result.push(typedImp);
|
|
@@ -371,51 +349,6 @@ function getDefinedParamsOrEmpty(object, params) {
|
|
|
371
349
|
return getDefinedParams(object, params);
|
|
372
350
|
}
|
|
373
351
|
|
|
374
|
-
/**
|
|
375
|
-
* Builds native request from native adunit
|
|
376
|
-
*/
|
|
377
|
-
function buildNativeRequest(nativeReq) {
|
|
378
|
-
let request = {ver: '1.1', assets: []};
|
|
379
|
-
for (let k of Object.keys(nativeReq)) {
|
|
380
|
-
let v = nativeReq[k];
|
|
381
|
-
let desc = NATIVE_INDEX[k];
|
|
382
|
-
if (desc === undefined) {
|
|
383
|
-
continue;
|
|
384
|
-
}
|
|
385
|
-
let assetRoot = {
|
|
386
|
-
id: desc.id,
|
|
387
|
-
required: ~~v.required,
|
|
388
|
-
};
|
|
389
|
-
if (desc.assetType === 'img') {
|
|
390
|
-
assetRoot[desc.assetType] = buildImageAsset(desc, v);
|
|
391
|
-
} else if (desc.assetType === 'data') {
|
|
392
|
-
assetRoot.data = cleanObj({type: desc.type, len: v.len});
|
|
393
|
-
} else if (desc.assetType === 'title') {
|
|
394
|
-
assetRoot.title = {len: v.len || 90};
|
|
395
|
-
} else {
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
request.assets.push(assetRoot);
|
|
399
|
-
}
|
|
400
|
-
return request;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
/**
|
|
404
|
-
* Builds image asset request
|
|
405
|
-
*/
|
|
406
|
-
function buildImageAsset(desc, val) {
|
|
407
|
-
let img = {
|
|
408
|
-
type: desc.type
|
|
409
|
-
};
|
|
410
|
-
if (val.sizes) {
|
|
411
|
-
[img.w, img.h] = val.sizes;
|
|
412
|
-
} else if (val.aspect_ratios) {
|
|
413
|
-
img.wmin = val.aspect_ratios[0].min_width;
|
|
414
|
-
img.hmin = val.aspect_ratios[0].min_height;
|
|
415
|
-
}
|
|
416
|
-
return cleanObj(img);
|
|
417
|
-
}
|
|
418
|
-
|
|
419
352
|
/**
|
|
420
353
|
* Checks if configuration allows specified sync method
|
|
421
354
|
* @param syncRule {Object}
|
|
@@ -540,12 +473,11 @@ function makeRegulations(bidderRequest) {
|
|
|
540
473
|
* @returns
|
|
541
474
|
*/
|
|
542
475
|
function makeBaseRequest(bidderRequest, imps, fpd) {
|
|
543
|
-
let {timeout} = bidderRequest;
|
|
544
476
|
let request = {
|
|
545
477
|
'id': bidderRequest.bidderRequestId,
|
|
546
478
|
'imp': imps,
|
|
547
479
|
'at': 1,
|
|
548
|
-
'tmax': parseInt(timeout)
|
|
480
|
+
'tmax': parseInt(bidderRequest.timeout)
|
|
549
481
|
};
|
|
550
482
|
if (!isEmpty(fpd.bcat)) {
|
|
551
483
|
request.bcat = fpd.bcat;
|
|
@@ -665,26 +597,15 @@ function validateNativeImageSize(img) {
|
|
|
665
597
|
}
|
|
666
598
|
|
|
667
599
|
/**
|
|
668
|
-
* Creates native ad for native 1.
|
|
600
|
+
* Creates native ad for native 1.2 response
|
|
669
601
|
*/
|
|
670
|
-
function buildNativeAd(
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
};
|
|
678
|
-
_each(assets, asset => {
|
|
679
|
-
let assetName = NATIVE_MODEL[asset.id].name;
|
|
680
|
-
let assetType = NATIVE_MODEL[asset.id].assetType;
|
|
681
|
-
nativeAd[assetName] = asset[assetType].text || asset[assetType].value || cleanObj({
|
|
682
|
-
url: asset[assetType].url,
|
|
683
|
-
width: asset[assetType].w,
|
|
684
|
-
height: asset[assetType].h
|
|
685
|
-
});
|
|
686
|
-
});
|
|
687
|
-
return cleanObj(nativeAd);
|
|
602
|
+
function buildNativeAd(adm) {
|
|
603
|
+
let resp = JSON.parse(adm);
|
|
604
|
+
// temporary workaround for top-level native object wrapper
|
|
605
|
+
if ('native' in resp) {
|
|
606
|
+
resp = resp.native;
|
|
607
|
+
}
|
|
608
|
+
return resp;
|
|
688
609
|
}
|
|
689
610
|
|
|
690
611
|
function stripMultiformatSuffix(impid) {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { registerVideoSupport } from '../src/adServerManager.js';
|
|
10
10
|
import { command as analyticsCommand, COMMAND } from './adlooxAnalyticsAdapter.js';
|
|
11
11
|
import { ajax } from '../src/ajax.js';
|
|
12
|
-
import
|
|
12
|
+
import { EVENTS } from '../src/constants.js';
|
|
13
13
|
import { targeting } from '../src/targeting.js';
|
|
14
14
|
import { logInfo, isFn, logError, isPlainObject, isStr, isBoolean, deepSetValue, deepClone, timestamp, logWarn } from '../src/utils.js';
|
|
15
15
|
|
|
@@ -74,7 +74,7 @@ function track(options, callback) {
|
|
|
74
74
|
bid.ext.adloox.video.adserver = false;
|
|
75
75
|
|
|
76
76
|
analyticsCommand(COMMAND.TRACK, {
|
|
77
|
-
eventType:
|
|
77
|
+
eventType: EVENTS.BID_WON,
|
|
78
78
|
args: bid
|
|
79
79
|
});
|
|
80
80
|
}
|
|
@@ -9,7 +9,7 @@ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
|
9
9
|
import {loadExternalScript} from '../src/adloader.js';
|
|
10
10
|
import {auctionManager} from '../src/auctionManager.js';
|
|
11
11
|
import {AUCTION_COMPLETED} from '../src/auction.js';
|
|
12
|
-
import
|
|
12
|
+
import {EVENTS} from '../src/constants.js';
|
|
13
13
|
import {find} from '../src/polyfill.js';
|
|
14
14
|
import {getRefererInfo} from '../src/refererDetection.js';
|
|
15
15
|
import {
|
|
@@ -220,9 +220,9 @@ analyticsAdapter.url = function(url, args, bid) {
|
|
|
220
220
|
return url + a2qs(args);
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
analyticsAdapter[`handle_${
|
|
223
|
+
analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = function(auctionDetails) {
|
|
224
224
|
if (!(auctionDetails.auctionStatus == AUCTION_COMPLETED && auctionDetails.bidsReceived.length > 0)) return;
|
|
225
|
-
analyticsAdapter[`handle_${
|
|
225
|
+
analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = NOOP;
|
|
226
226
|
|
|
227
227
|
logMessage(MODULE, 'preloading verification JS');
|
|
228
228
|
|
|
@@ -235,7 +235,7 @@ analyticsAdapter[`handle_${CONSTANTS.EVENTS.AUCTION_END}`] = function(auctionDet
|
|
|
235
235
|
insertElement(link);
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
analyticsAdapter[`handle_${
|
|
238
|
+
analyticsAdapter[`handle_${EVENTS.BID_WON}`] = function(bid) {
|
|
239
239
|
if (deepAccess(bid, 'ext.adloox.video.adserver')) {
|
|
240
240
|
logMessage(MODULE, `measuring '${bid.mediaType}' ad unit code '${bid.adUnitCode}' via Ad Server module`);
|
|
241
241
|
return;
|
|
@@ -15,7 +15,8 @@ const GVLID = 855;
|
|
|
15
15
|
const DEFAULT_VAST_VERSION = 'vast4'
|
|
16
16
|
const MAXIMUM_DEALS_LIMIT = 5;
|
|
17
17
|
const VALID_BID_TYPES = ['netBid', 'grossBid'];
|
|
18
|
-
const
|
|
18
|
+
const METADATA_KEY = 'adn.metaData';
|
|
19
|
+
const METADATA_KEY_SEPARATOR = '@@@';
|
|
19
20
|
|
|
20
21
|
export const misc = {
|
|
21
22
|
getUnixTimestamp: function (addDays, asMinutes) {
|
|
@@ -28,23 +29,28 @@ const storageTool = (function () {
|
|
|
28
29
|
const storage = getStorageManager({ bidderCode: BIDDER_CODE });
|
|
29
30
|
let metaInternal;
|
|
30
31
|
|
|
31
|
-
const
|
|
32
|
+
const getMetaDataFromLocalStorage = function (pNetwork) {
|
|
32
33
|
if (!storage.localStorageIsEnabled()) {
|
|
33
34
|
return [];
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
let parsedJson;
|
|
37
38
|
try {
|
|
38
|
-
parsedJson = JSON.parse(storage.getDataFromLocalStorage(
|
|
39
|
+
parsedJson = JSON.parse(storage.getDataFromLocalStorage(METADATA_KEY));
|
|
39
40
|
} catch (e) {
|
|
40
41
|
return [];
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
let network = pNetwork;
|
|
45
|
+
if (Array.isArray(pNetwork)) {
|
|
46
|
+
network = (pNetwork.find((p) => p.network) || {}).network;
|
|
47
|
+
}
|
|
48
|
+
|
|
43
49
|
let filteredEntries = parsedJson ? parsedJson.filter((datum) => {
|
|
44
50
|
if (datum.key === 'voidAuIds' && Array.isArray(datum.value)) {
|
|
45
51
|
return true;
|
|
46
52
|
}
|
|
47
|
-
return datum.key && datum.value && datum.exp && datum.exp > misc.getUnixTimestamp();
|
|
53
|
+
return datum.key && datum.value && datum.exp && datum.exp > misc.getUnixTimestamp() && (!network || network === datum.network);
|
|
48
54
|
}) : [];
|
|
49
55
|
const voidAuIdsEntry = filteredEntries.find(entry => entry.key === 'voidAuIds');
|
|
50
56
|
if (voidAuIdsEntry) {
|
|
@@ -57,7 +63,7 @@ const storageTool = (function () {
|
|
|
57
63
|
return filteredEntries;
|
|
58
64
|
};
|
|
59
65
|
|
|
60
|
-
const setMetaInternal = function (
|
|
66
|
+
const setMetaInternal = function (apiRespMetadata, network) {
|
|
61
67
|
if (!storage.localStorageIsEnabled()) {
|
|
62
68
|
return;
|
|
63
69
|
}
|
|
@@ -74,41 +80,48 @@ const storageTool = (function () {
|
|
|
74
80
|
return notNewExistingAuIds.concat(apiIdsArray) || [];
|
|
75
81
|
}
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
// use the metadata key separator to distinguish the same key for different networks.
|
|
84
|
+
const metaAsObj = getMetaDataFromLocalStorage().reduce((a, entry) => ({ ...a, [entry.key + METADATA_KEY_SEPARATOR + (entry.network ? entry.network : '')]: { value: entry.value, exp: entry.exp, network: entry.network } }), {});
|
|
85
|
+
for (const key in apiRespMetadata) {
|
|
79
86
|
if (key !== 'voidAuIds') {
|
|
80
|
-
metaAsObj[key] = {
|
|
81
|
-
value:
|
|
82
|
-
exp: misc.getUnixTimestamp(100)
|
|
87
|
+
metaAsObj[key + METADATA_KEY_SEPARATOR + network] = {
|
|
88
|
+
value: apiRespMetadata[key],
|
|
89
|
+
exp: misc.getUnixTimestamp(100),
|
|
90
|
+
network: network
|
|
83
91
|
}
|
|
84
92
|
}
|
|
85
93
|
}
|
|
86
|
-
const currentAuIds = updateVoidAuIds(metaAsObj.voidAuIds || [],
|
|
94
|
+
const currentAuIds = updateVoidAuIds(metaAsObj.voidAuIds || [], apiRespMetadata.voidAuIds);
|
|
87
95
|
if (currentAuIds.length > 0) {
|
|
88
96
|
metaAsObj.voidAuIds = { value: currentAuIds };
|
|
89
97
|
}
|
|
90
98
|
const metaDataForSaving = Object.entries(metaAsObj).map((entrySet) => {
|
|
91
|
-
if (entrySet
|
|
99
|
+
if (entrySet.length !== 2) {
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
const key = entrySet[0].split(METADATA_KEY_SEPARATOR)[0];
|
|
103
|
+
if (key === 'voidAuIds') {
|
|
92
104
|
return {
|
|
93
|
-
key:
|
|
105
|
+
key: key,
|
|
94
106
|
value: entrySet[1].value
|
|
95
107
|
};
|
|
96
108
|
}
|
|
97
109
|
return {
|
|
98
|
-
key:
|
|
110
|
+
key: key,
|
|
99
111
|
value: entrySet[1].value,
|
|
100
|
-
exp: entrySet[1].exp
|
|
112
|
+
exp: entrySet[1].exp,
|
|
113
|
+
network: entrySet[1].network
|
|
101
114
|
}
|
|
102
|
-
});
|
|
103
|
-
storage.setDataInLocalStorage(
|
|
115
|
+
}).filter(entry => entry.key);
|
|
116
|
+
storage.setDataInLocalStorage(METADATA_KEY, JSON.stringify(metaDataForSaving));
|
|
104
117
|
};
|
|
105
118
|
|
|
106
|
-
const getUsi = function (meta, ortb2,
|
|
119
|
+
const getUsi = function (meta, ortb2, bidParams) {
|
|
107
120
|
// Fetch user id from parameters.
|
|
108
|
-
for (let i = 0; i <
|
|
109
|
-
const
|
|
110
|
-
if (
|
|
111
|
-
return
|
|
121
|
+
for (let i = 0; i < bidParams.length; i++) {
|
|
122
|
+
const bidParam = bidParams[i];
|
|
123
|
+
if (bidParam.userId) {
|
|
124
|
+
return bidParam.userId;
|
|
112
125
|
}
|
|
113
126
|
}
|
|
114
127
|
if (ortb2 && ortb2.user && ortb2.user.id) {
|
|
@@ -136,8 +149,11 @@ const storageTool = (function () {
|
|
|
136
149
|
return {
|
|
137
150
|
refreshStorage: function (bidderRequest) {
|
|
138
151
|
const ortb2 = bidderRequest.ortb2 || {};
|
|
139
|
-
|
|
140
|
-
|
|
152
|
+
const bidParams = (bidderRequest.bids || []).map((b) => {
|
|
153
|
+
return b.params ? b.params : {};
|
|
154
|
+
});
|
|
155
|
+
metaInternal = getMetaDataFromLocalStorage(bidParams).reduce((a, entry) => ({ ...a, [entry.key]: entry.value }), {});
|
|
156
|
+
metaInternal.usi = getUsi(metaInternal, ortb2, bidParams);
|
|
141
157
|
if (!metaInternal.usi) {
|
|
142
158
|
delete metaInternal.usi;
|
|
143
159
|
}
|
|
@@ -148,15 +164,17 @@ const storageTool = (function () {
|
|
|
148
164
|
}
|
|
149
165
|
metaInternal.segments = getSegmentsFromOrtb(ortb2);
|
|
150
166
|
},
|
|
151
|
-
saveToStorage: function (serverData) {
|
|
152
|
-
setMetaInternal(serverData);
|
|
167
|
+
saveToStorage: function (serverData, network) {
|
|
168
|
+
setMetaInternal(serverData, network);
|
|
153
169
|
},
|
|
154
170
|
getUrlRelatedData: function () {
|
|
171
|
+
// getting the URL information is theoretically not network-specific
|
|
155
172
|
const { segments, usi, voidAuIdsArray } = metaInternal;
|
|
156
173
|
return { segments, usi, voidAuIdsArray };
|
|
157
174
|
},
|
|
158
|
-
getPayloadRelatedData: function () {
|
|
159
|
-
|
|
175
|
+
getPayloadRelatedData: function (network) {
|
|
176
|
+
// getting the payload data should be network-specific
|
|
177
|
+
const { segments, usi, userId, voidAuIdsArray, voidAuIds, ...payloadRelatedData } = getMetaDataFromLocalStorage(network).reduce((a, entry) => ({...a, [entry.key]: entry.value}), {});
|
|
160
178
|
return payloadRelatedData;
|
|
161
179
|
}
|
|
162
180
|
};
|
|
@@ -182,7 +200,7 @@ export const spec = {
|
|
|
182
200
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
183
201
|
const queryParamsAndValues = [];
|
|
184
202
|
queryParamsAndValues.push('tzo=' + new Date().getTimezoneOffset())
|
|
185
|
-
queryParamsAndValues.push('format=
|
|
203
|
+
queryParamsAndValues.push('format=prebid')
|
|
186
204
|
const gdprApplies = deepAccess(bidderRequest, 'gdprConsent.gdprApplies');
|
|
187
205
|
const consentString = deepAccess(bidderRequest, 'gdprConsent.consentString');
|
|
188
206
|
if (gdprApplies !== undefined) {
|
|
@@ -223,7 +241,7 @@ export const spec = {
|
|
|
223
241
|
networks[network].adUnits = networks[network].adUnits || [];
|
|
224
242
|
if (bidderRequest && bidderRequest.refererInfo) networks[network].context = bidderRequest.refererInfo.page;
|
|
225
243
|
|
|
226
|
-
const payloadRelatedData = storageTool.getPayloadRelatedData();
|
|
244
|
+
const payloadRelatedData = storageTool.getPayloadRelatedData(bid.params.network);
|
|
227
245
|
if (Object.keys(payloadRelatedData).length > 0) {
|
|
228
246
|
networks[network].metaData = payloadRelatedData;
|
|
229
247
|
}
|
|
@@ -239,7 +257,7 @@ export const spec = {
|
|
|
239
257
|
}
|
|
240
258
|
|
|
241
259
|
const requests = [];
|
|
242
|
-
const networkKeys = Object.keys(networks)
|
|
260
|
+
const networkKeys = Object.keys(networks);
|
|
243
261
|
for (let j = 0; j < networkKeys.length; j++) {
|
|
244
262
|
const network = networkKeys[j];
|
|
245
263
|
if (network.indexOf('_video') > -1) { queryParamsAndValues.push('tt=' + DEFAULT_VAST_VERSION) }
|
|
@@ -257,7 +275,7 @@ export const spec = {
|
|
|
257
275
|
|
|
258
276
|
interpretResponse: function (serverResponse, bidRequest) {
|
|
259
277
|
if (serverResponse.body.metaData) {
|
|
260
|
-
storageTool.saveToStorage(serverResponse.body.metaData);
|
|
278
|
+
storageTool.saveToStorage(serverResponse.body.metaData, serverResponse.body.network);
|
|
261
279
|
}
|
|
262
280
|
const adUnits = serverResponse.body.adUnits;
|
|
263
281
|
|