prebid.js 7.43.0 → 7.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/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/acuityAdsBidAdapter.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/admixerIdSystem.js +1 -1
- package/dist/adnuntiusBidAdapter.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/adriverIdSystem.js +1 -1
- package/dist/adsinteractiveBidAdapter.js +1 -0
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.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/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appushBidAdapter.js +1 -1
- package/dist/apstreamBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bedigitechBidAdapter.js +1 -0
- package/dist/beyondmediaBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/blueconicRtdProvider.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/browsiRtdProvider.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/coinzillaBidAdapter.js +1 -1
- package/dist/compassBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.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/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/criteoIdSystem.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/czechAdIdSystem.js +1 -1
- package/dist/dacIdSystem.js +1 -1
- package/dist/deepintentDpesIdSystem.js +1 -1
- package/dist/dependencies.json +15 -0
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/domainOverrideToRootDomain.js +1 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.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/freewheel-sspBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/globalsunBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/gnetBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -0
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.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/id5IdSystem.js +1 -1
- package/dist/idWardRtdProvider.js +1 -1
- package/dist/identityLinkIdSystem.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/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/invibesBidAdapter.js +1 -1
- package/dist/iqzoneBidAdapter.js +1 -1
- package/dist/ivsBidAdapter.js +1 -0
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/koblerBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.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/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mathildeadsBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/medianetBidAdapter.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/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/mwOpenLinkIdSystem.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +232 -227
- package/dist/novatiqIdSystem.js +1 -1
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/onomagicBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.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/ortbConverter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/permutiveRtdProvider.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/pubCommonId.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.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/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smarthubBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.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/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/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.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/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/validationFpdModule.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/videoheroesBidAdapter.js +1 -1
- package/dist/vidoomyBidAdapter.js +1 -1
- package/dist/visiblemeasuresBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.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/yieldmoBidAdapter.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/zeta_global_sspBidAdapter.js +1 -1
- package/libraries/domainOverrideToRootDomain/index.js +39 -0
- package/libraries/ortbConverter/converter.js +3 -2
- package/modules/33acrossIdSystem.js +5 -2
- package/modules/acuityAdsBidAdapter.js +1 -1
- package/modules/adagioBidAdapter.js +3 -4
- package/modules/adkernelAdnAnalyticsAdapter.js +4 -2
- package/modules/admixerIdSystem.js +4 -2
- package/modules/adnuntiusBidAdapter.js +1 -1
- package/modules/adqueryBidAdapter.js +1 -1
- package/modules/adqueryIdSystem.js +2 -1
- package/modules/adrinoBidAdapter.js +24 -16
- package/modules/adriverIdSystem.js +3 -2
- package/modules/adsinteractiveBidAdapter.js +144 -0
- package/modules/adsinteractiveBidAdapter.md +31 -0
- package/modules/adyoulikeBidAdapter.js +2 -3
- package/modules/aidemBidAdapter.js +5 -0
- package/modules/airgridRtdProvider.js +4 -2
- package/modules/ajaBidAdapter.js +38 -16
- package/modules/akamaiDapRtdProvider.js +2 -1
- package/modules/amxBidAdapter.js +12 -10
- package/modules/amxIdSystem.js +23 -20
- package/modules/amxIdSystem.md +7 -7
- package/modules/appnexusBidAdapter.js +8 -8
- package/modules/appushBidAdapter.js +1 -1
- package/modules/apstreamBidAdapter.js +1 -1
- package/modules/atsAnalyticsAdapter.js +4 -2
- package/modules/audiencerunBidAdapter.js +9 -10
- package/modules/bedigitechBidAdapter.js +67 -0
- package/modules/bedigitechBidAdapter.md +32 -0
- package/modules/beyondmediaBidAdapter.js +1 -1
- package/modules/bluebillywigBidAdapter.js +2 -4
- package/modules/blueconicRtdProvider.js +2 -1
- package/modules/braveBidAdapter.js +1 -1
- package/modules/brightcomBidAdapter.js +1 -2
- package/modules/brightcomSSPBidAdapter.js +1 -2
- package/modules/browsiRtdProvider.js +4 -2
- package/modules/byDataAnalyticsAdapter.js +6 -3
- package/modules/coinzillaBidAdapter.js +1 -2
- package/modules/compassBidAdapter.js +1 -1
- package/modules/concertBidAdapter.js +14 -7
- package/modules/connectIdSystem.js +96 -21
- package/modules/connectIdSystem.md +6 -5
- package/modules/connectadBidAdapter.js +2 -4
- package/modules/contentexchangeBidAdapter.js +1 -1
- package/modules/craftBidAdapter.js +29 -24
- package/modules/criteoBidAdapter.js +4 -2
- package/modules/criteoIdSystem.js +6 -2
- package/modules/czechAdIdSystem.js +3 -2
- package/modules/dacIdSystem.js +4 -3
- package/modules/deepintentDpesIdSystem.js +3 -2
- package/modules/discoveryBidAdapter.js +1 -1
- package/modules/dspxBidAdapter.js +223 -15
- package/modules/fintezaAnalyticsAdapter.js +5 -3
- package/modules/fledgeForGpt.js +54 -6
- package/modules/freewheel-sspBidAdapter.js +8 -0
- package/modules/ftrackIdSystem.js +6 -6
- package/modules/gdprEnforcement.js +56 -68
- package/modules/glimpseBidAdapter.js +2 -6
- package/modules/globalsunBidAdapter.js +1 -1
- package/modules/gnetBidAdapter.js +1 -2
- package/modules/gravitoIdSystem.js +5 -3
- package/modules/greenbidsAnalyticsAdapter.js +181 -0
- package/modules/greenbidsAnalyticsAdapter.md +23 -0
- package/modules/gridBidAdapter.js +14 -8
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +3 -2
- package/modules/growthCodeIdSystem.js +21 -17
- package/modules/gumgumBidAdapter.js +8 -18
- package/modules/hadronAnalyticsAdapter.js +5 -3
- package/modules/hadronIdSystem.js +3 -1
- package/modules/hadronRtdProvider.js +4 -2
- package/modules/id5IdSystem.js +4 -2
- package/modules/idWardRtdProvider.js +2 -1
- package/modules/identityLinkIdSystem.js +5 -2
- package/modules/idxIdSystem.js +3 -2
- package/modules/imRtdProvider.js +3 -1
- package/modules/impactifyBidAdapter.js +2 -4
- package/modules/imuIdSystem.js +6 -3
- package/modules/insticatorBidAdapter.js +1 -1
- package/modules/intentIqIdSystem.js +3 -2
- package/modules/invibesBidAdapter.js +1 -1
- package/modules/iqzoneBidAdapter.js +1 -1
- package/modules/ivsBidAdapter.js +85 -0
- package/modules/ivsBidAdapter.md +34 -0
- package/modules/ixBidAdapter.js +43 -106
- package/modules/jixieBidAdapter.js +3 -6
- package/modules/jwplayerVideoProvider.js +25 -32
- package/modules/kargoBidAdapter.js +1 -1
- package/modules/koblerBidAdapter.js +1 -2
- package/modules/kueezBidAdapter.js +1 -1
- package/modules/kueezRtbBidAdapter.js +1 -1
- package/modules/liveIntentIdSystem.js +11 -2
- package/modules/lotamePanoramaIdSystem.js +3 -2
- package/modules/luponmediaBidAdapter.js +1 -1
- package/modules/magniteAnalyticsAdapter.js +101 -9
- package/modules/mathildeadsBidAdapter.js +1 -1
- package/modules/mediafuseBidAdapter.js +1 -1
- package/modules/mediagoBidAdapter.js +1 -1
- package/modules/mediakeysBidAdapter.js +2 -3
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/merkleIdSystem.js +2 -1
- package/modules/mgidBidAdapter.js +179 -27
- package/modules/mgidRtdProvider.js +3 -1
- package/modules/minutemediaBidAdapter.js +1 -1
- package/modules/minutemediaplusBidAdapter.js +1 -1
- package/modules/mwOpenLinkIdSystem.js +3 -2
- package/modules/naveggIdSystem.js +3 -2
- package/modules/nexx360BidAdapter.js +0 -1
- package/modules/nobidBidAdapter.js +1 -1
- package/modules/novatiqIdSystem.js +6 -3
- package/modules/oguryBidAdapter.js +3 -2
- package/modules/onetagBidAdapter.js +1 -1
- package/modules/onomagicBidAdapter.js +1 -2
- package/modules/openxBidAdapter.js +192 -563
- package/modules/openxBidAdapter.md +22 -20
- package/modules/openxOrtbBidAdapter.js +24 -10
- package/modules/openxOrtbBidAdapter.md +11 -8
- package/modules/operaadsBidAdapter.js +1 -1
- package/modules/parrableIdSystem.js +4 -2
- package/modules/permutiveRtdProvider.js +2 -1
- package/modules/prebidServerBidAdapter/index.js +9 -3
- package/modules/prebidServerBidAdapter/ortbConverter.js +12 -2
- package/modules/prebidmanagerAnalyticsAdapter.js +3 -2
- package/modules/pubCommonId.js +6 -3
- package/modules/publinkIdSystem.js +2 -1
- package/modules/pubmaticAnalyticsAdapter.js +12 -1
- package/modules/pubmaticBidAdapter.js +193 -223
- package/modules/pubwiseAnalyticsAdapter.js +5 -3
- package/modules/pubxBidAdapter.js +5 -2
- package/modules/quantcastBidAdapter.js +1 -1
- package/modules/quantcastIdSystem.js +5 -3
- package/modules/realvuAnalyticsAdapter.js +6 -3
- package/modules/riseBidAdapter.js +1 -1
- package/modules/roxotAnalyticsAdapter.js +5 -2
- package/modules/rtbhouseBidAdapter.js +5 -3
- package/modules/rtdModule/index.js +3 -0
- package/modules/rubiconAnalyticsAdapter.js +3 -2
- package/modules/rubiconBidAdapter.js +1 -0
- package/modules/sharedIdSystem.js +16 -36
- package/modules/sharethroughBidAdapter.js +2 -3
- package/modules/shinezBidAdapter.js +1 -1
- package/modules/sigmoidAnalyticsAdapter.js +4 -2
- package/modules/smartadserverBidAdapter.js +2 -3
- package/modules/smarthubBidAdapter.js +1 -1
- package/modules/sovrnBidAdapter.js +2 -3
- package/modules/staqAnalyticsAdapter.js +5 -3
- package/modules/stroeerCoreBidAdapter.js +3 -2
- package/modules/synacormediaBidAdapter.js +1 -3
- package/modules/taboolaBidAdapter.js +4 -2
- package/modules/teadsBidAdapter.js +1 -1
- package/modules/teadsIdSystem.js +2 -1
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/truereachBidAdapter.js +1 -2
- package/modules/trustpidSystem.js +3 -2
- package/modules/ttdBidAdapter.js +11 -5
- package/modules/uid2IdSystem.js +3 -2
- package/modules/undertoneBidAdapter.js +1 -0
- package/modules/userId/eids.js +18 -0
- package/modules/userId/eids.md +16 -0
- package/modules/userId/index.js +5 -2
- package/modules/validationFpdModule/index.js +3 -2
- package/modules/vidazooBidAdapter.js +14 -5
- package/modules/videoheroesBidAdapter.js +1 -1
- package/modules/vidoomyBidAdapter.js +51 -2
- package/modules/visiblemeasuresBidAdapter.js +1 -1
- package/modules/vrtcalBidAdapter.js +1 -1
- package/modules/weboramaRtdProvider.js +3 -1
- package/modules/yieldmoBidAdapter.js +2 -3
- package/modules/yieldoneBidAdapter.js +1 -1
- package/modules/yuktamediaAnalyticsAdapter.js +4 -2
- package/modules/zeotapIdPlusIdSystem.js +3 -2
- package/modules/zeta_global_sspBidAdapter.js +3 -0
- package/package.json +1 -1
- package/plugins/eslint/validateImports.js +13 -14
- package/plugins/pbjsGlobals.js +3 -1
- package/src/Renderer.js +2 -1
- package/src/activities/modules.js +5 -0
- package/src/adapterManager.js +4 -8
- package/src/adapters/bidderFactory.js +30 -16
- package/src/consentHandler.js +42 -0
- package/src/native.js +5 -1
- package/src/refererDetection.js +39 -21
- package/src/secureCreatives.js +2 -2
- package/src/storageManager.js +33 -47
- package/src/userSync.js +7 -4
- package/test/spec/auctionmanager_spec.js +2 -2
- package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
- package/test/spec/modules/33acrossIdSystem_spec.js +1 -1
- package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +11 -17
- package/test/spec/modules/admixerIdSystem_spec.js +0 -3
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -6
- package/test/spec/modules/adrinoBidAdapter_spec.js +65 -34
- package/test/spec/modules/adsinteractiveBidAdapter_spec.js +207 -0
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -11
- package/test/spec/modules/aidemBidAdapter_spec.js +72 -8
- package/test/spec/modules/amxBidAdapter_spec.js +4 -1
- package/test/spec/modules/amxIdSystem_spec.js +13 -26
- package/test/spec/modules/appushBidAdapter_spec.js +2 -1
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +2 -2
- package/test/spec/modules/audiencerunBidAdapter_spec.js +8 -11
- package/test/spec/modules/bedigitechBidAdapter_spec.js +145 -0
- package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
- package/test/spec/modules/bluebillywigBidAdapter_spec.js +1 -3
- package/test/spec/modules/compassBidAdapter_spec.js +2 -1
- package/test/spec/modules/concertBidAdapter_spec.js +3 -8
- package/test/spec/modules/connectIdSystem_spec.js +420 -242
- package/test/spec/modules/connectadBidAdapter_spec.js +11 -3
- package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
- package/test/spec/modules/criteoBidAdapter_spec.js +29 -0
- package/test/spec/modules/criteoIdSystem_spec.js +38 -0
- package/test/spec/modules/datablocksBidAdapter_spec.js +0 -1
- package/test/spec/modules/dspxBidAdapter_spec.js +184 -13
- package/test/spec/modules/eids_spec.js +30 -0
- package/test/spec/modules/fledge_spec.js +173 -2
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
- package/test/spec/modules/gdprEnforcement_spec.js +134 -164
- package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
- package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +418 -0
- package/test/spec/modules/gridBidAdapter_spec.js +9 -5
- package/test/spec/modules/growthCodeIdSystem_spec.js +2 -1
- package/test/spec/modules/id5IdSystem_spec.js +41 -4
- package/test/spec/modules/identityLinkIdSystem_spec.js +2 -2
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +10 -3
- package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
- package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
- package/test/spec/modules/ixBidAdapter_spec.js +84 -71
- package/test/spec/modules/jixieBidAdapter_spec.js +42 -60
- package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
- package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
- package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
- package/test/spec/modules/mediakeysBidAdapter_spec.js +12 -16
- package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
- package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
- package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +108 -50
- package/test/spec/modules/prebidServerBidAdapter_spec.js +68 -2
- package/test/spec/modules/publinkIdSystem_spec.js +3 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +67 -10
- package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
- package/test/spec/modules/realTimeDataModule_spec.js +22 -0
- package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +5 -5
- package/test/spec/modules/rubiconBidAdapter_spec.js +2 -1
- package/test/spec/modules/sharedIdSystem_spec.js +0 -46
- package/test/spec/modules/sharethroughBidAdapter_spec.js +99 -22
- package/test/spec/modules/smartadserverBidAdapter_spec.js +74 -12
- package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
- package/test/spec/modules/sovrnBidAdapter_spec.js +25 -6
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +13 -18
- package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
- package/test/spec/modules/taboolaBidAdapter_spec.js +101 -0
- package/test/spec/modules/ttdBidAdapter_spec.js +25 -7
- package/test/spec/modules/userId_spec.js +68 -0
- package/test/spec/modules/vidazooBidAdapter_spec.js +13 -0
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
- package/test/spec/modules/vidoomyBidAdapter_spec.js +68 -0
- package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
- package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
- package/test/spec/modules/yieldmoBidAdapter_spec.js +18 -2
- package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +3 -2
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +8 -0
- package/test/spec/refererDetection_spec.js +56 -1
- package/test/spec/renderer_spec.js +1 -2
- package/test/spec/unit/core/adapterManager_spec.js +21 -58
- package/test/spec/unit/core/bidderFactory_spec.js +28 -10
- package/test/spec/unit/core/consentHandler_spec.js +29 -1
- package/test/spec/unit/core/storageManager_spec.js +31 -21
- package/test/spec/userSync_spec.js +2 -1
|
@@ -11,7 +11,13 @@ import {getHook} from '../src/hook.js';
|
|
|
11
11
|
import {validateStorageEnforcement} from '../src/storageManager.js';
|
|
12
12
|
import * as events from '../src/events.js';
|
|
13
13
|
import CONSTANTS from '../src/constants.json';
|
|
14
|
-
import {VENDORLESS_GVLID} from '../src/consentHandler.js';
|
|
14
|
+
import {GDPR_GVLIDS, VENDORLESS_GVLID} from '../src/consentHandler.js';
|
|
15
|
+
import {
|
|
16
|
+
MODULE_TYPE_ANALYTICS,
|
|
17
|
+
MODULE_TYPE_BIDDER,
|
|
18
|
+
MODULE_TYPE_CORE, MODULE_TYPE_RTD,
|
|
19
|
+
MODULE_TYPE_UID
|
|
20
|
+
} from '../src/activities/modules.js';
|
|
15
21
|
|
|
16
22
|
export const STRICT_STORAGE_ENFORCEMENT = 'strictStorageEnforcement';
|
|
17
23
|
|
|
@@ -49,77 +55,56 @@ const analyticsBlocked = [];
|
|
|
49
55
|
let hooksAdded = false;
|
|
50
56
|
let strictStorageEnforcement = false;
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
const GVLID_LOOKUP_PRIORITY = [
|
|
59
|
+
MODULE_TYPE_BIDDER,
|
|
60
|
+
MODULE_TYPE_UID,
|
|
61
|
+
MODULE_TYPE_ANALYTICS,
|
|
62
|
+
MODULE_TYPE_RTD
|
|
63
|
+
];
|
|
58
64
|
|
|
59
65
|
/**
|
|
60
|
-
*
|
|
61
|
-
* If modules of different types have the same moduleCode: For example, 'appnexus' is the code for both Bid adapter and Analytics adapter,
|
|
62
|
-
* then, we assume that their GVL IDs are same. This function first checks if GVL ID is defined for a Bid adapter, if not found, tries to find User ID
|
|
63
|
-
* submodule's GVL ID, if not found, tries to find Analytics adapter's GVL ID. In this process, as soon as it finds a GVL ID, it returns it
|
|
64
|
-
* without going to the next check.
|
|
65
|
-
* @param {{string|Object}} - module
|
|
66
|
-
* @return {number} - GVL ID
|
|
66
|
+
* Retrieve a module's GVL ID.
|
|
67
67
|
*/
|
|
68
|
-
export function getGvlid(
|
|
69
|
-
|
|
70
|
-
if (module) {
|
|
68
|
+
export function getGvlid(moduleType, moduleName, fallbackFn) {
|
|
69
|
+
if (moduleName) {
|
|
71
70
|
// Check user defined GVL Mapping in pbjs.setConfig()
|
|
72
71
|
const gvlMapping = config.getConfig('gvlMapping');
|
|
73
72
|
|
|
74
|
-
// For USER ID Module, we pass the submodule object itself as the "module" parameter, this check is required to grab the module code
|
|
75
|
-
const moduleCode = typeof module === 'string' ? module : module.name;
|
|
76
|
-
|
|
77
73
|
// Return GVL ID from user defined gvlMapping
|
|
78
|
-
if (gvlMapping && gvlMapping[
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
74
|
+
if (gvlMapping && gvlMapping[moduleName]) {
|
|
75
|
+
return gvlMapping[moduleName];
|
|
76
|
+
} else if (moduleType === MODULE_TYPE_CORE) {
|
|
77
|
+
return VENDORLESS_GVLID;
|
|
78
|
+
} else {
|
|
79
|
+
let {gvlid, modules} = GDPR_GVLIDS.get(moduleName);
|
|
80
|
+
if (gvlid == null && Object.keys(modules).length > 0) {
|
|
81
|
+
// this behavior is for backwards compatibility; if multiple modules with the same
|
|
82
|
+
// name declare different GVL IDs, pick the bidder's first, then userId, then analytics
|
|
83
|
+
for (const type of GVLID_LOOKUP_PRIORITY) {
|
|
84
|
+
if (modules.hasOwnProperty(type)) {
|
|
85
|
+
gvlid = modules[type];
|
|
86
|
+
if (type !== moduleType && !fallbackFn) {
|
|
87
|
+
logWarn(`Multiple GVL IDs found for module '${moduleName}'; using the ${type} module's ID (${gvlid}) instead of the ${moduleType}'s ID (${modules[moduleType]})`)
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (gvlid == null && fallbackFn) {
|
|
94
|
+
gvlid = fallbackFn();
|
|
95
|
+
}
|
|
96
|
+
return gvlid || null;
|
|
100
97
|
}
|
|
101
98
|
}
|
|
102
|
-
return
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Returns GVL ID for an userId submodule. If an userId submodules does not have an associated GVL ID, it returns 'null'.
|
|
107
|
-
* @param {Object} userIdModule
|
|
108
|
-
* @return {number} GVL ID
|
|
109
|
-
*/
|
|
110
|
-
function getGvlidForUserIdModule(userIdModule) {
|
|
111
|
-
return (typeof userIdModule === 'object' ? userIdModule.gvlid : null);
|
|
99
|
+
return null;
|
|
112
100
|
}
|
|
113
101
|
|
|
114
102
|
/**
|
|
115
|
-
*
|
|
116
|
-
* @param {string} code - 'provider' property on the analytics adapter config
|
|
117
|
-
* @param {{}} config - analytics configuration object
|
|
118
|
-
* @return {number} GVL ID
|
|
103
|
+
* Retrieve GVL IDs that are dynamically set on analytics adapters.
|
|
119
104
|
*/
|
|
120
|
-
function
|
|
105
|
+
export function getGvlidFromAnalyticsAdapter(code, config) {
|
|
121
106
|
const adapter = adapterManager.getAnalyticsAdapter(code);
|
|
122
|
-
return
|
|
107
|
+
return ((gvlid) => {
|
|
123
108
|
if (typeof gvlid !== 'function') return gvlid;
|
|
124
109
|
try {
|
|
125
110
|
return gvlid.call(adapter.adapter, config);
|
|
@@ -185,30 +170,33 @@ export function validateRules(rule, consentData, currentModule, gvlId) {
|
|
|
185
170
|
|
|
186
171
|
/**
|
|
187
172
|
* This hook checks whether module has permission to access device or not. Device access include cookie and local storage
|
|
173
|
+
*
|
|
188
174
|
* @param {Function} fn reference to original function (used by hook logic)
|
|
189
|
-
* @param {
|
|
175
|
+
* @param {string} moduleType type of the module
|
|
190
176
|
* @param {string=} moduleName name of the module
|
|
191
177
|
* @param result
|
|
178
|
+
* @param validate
|
|
192
179
|
*/
|
|
193
|
-
export function deviceAccessHook(fn,
|
|
180
|
+
export function deviceAccessHook(fn, moduleType, moduleName, result, {validate = validateRules} = {}) {
|
|
194
181
|
result = Object.assign({}, {
|
|
195
182
|
hasEnforcementHook: true
|
|
196
183
|
});
|
|
197
184
|
if (!hasDeviceAccess()) {
|
|
198
185
|
logWarn('Device access is disabled by Publisher');
|
|
199
186
|
result.valid = false;
|
|
200
|
-
} else if (
|
|
187
|
+
} else if (moduleType === MODULE_TYPE_CORE && !strictStorageEnforcement) {
|
|
201
188
|
// for vendorless (core) storage, do not enforce rules unless strictStorageEnforcement is set
|
|
202
189
|
result.valid = true;
|
|
203
190
|
} else {
|
|
204
191
|
const consentData = gdprDataHandler.getConsentData();
|
|
192
|
+
let gvlid;
|
|
205
193
|
if (shouldEnforce(consentData, 1, moduleName)) {
|
|
206
194
|
const curBidder = config.getCurrentBidder();
|
|
207
195
|
// Bidders have a copy of storage object with bidder code binded. Aliases will also pass the same bidder code when invoking storage functions and hence if alias tries to access device we will try to grab the gvl id for alias instead of original bidder
|
|
208
196
|
if (curBidder && (curBidder !== moduleName) && adapterManager.aliasRegistry[curBidder] === moduleName) {
|
|
209
|
-
gvlid = getGvlid(curBidder);
|
|
197
|
+
gvlid = getGvlid(moduleType, curBidder);
|
|
210
198
|
} else {
|
|
211
|
-
gvlid = getGvlid(moduleName)
|
|
199
|
+
gvlid = getGvlid(moduleType, moduleName)
|
|
212
200
|
}
|
|
213
201
|
const curModule = moduleName || curBidder;
|
|
214
202
|
let isAllowed = validate(purpose1Rule, consentData, curModule, gvlid,);
|
|
@@ -223,7 +211,7 @@ export function deviceAccessHook(fn, gvlid, moduleName, result, {validate = vali
|
|
|
223
211
|
result.valid = true;
|
|
224
212
|
}
|
|
225
213
|
}
|
|
226
|
-
fn.call(this,
|
|
214
|
+
fn.call(this, moduleType, moduleName, result);
|
|
227
215
|
}
|
|
228
216
|
|
|
229
217
|
/**
|
|
@@ -235,7 +223,7 @@ export function userSyncHook(fn, ...args) {
|
|
|
235
223
|
const consentData = gdprDataHandler.getConsentData();
|
|
236
224
|
const curBidder = config.getCurrentBidder();
|
|
237
225
|
if (shouldEnforce(consentData, 1, curBidder)) {
|
|
238
|
-
const gvlid = getGvlid(curBidder);
|
|
226
|
+
const gvlid = getGvlid(MODULE_TYPE_BIDDER, curBidder);
|
|
239
227
|
let isAllowed = validateRules(purpose1Rule, consentData, curBidder, gvlid);
|
|
240
228
|
if (isAllowed) {
|
|
241
229
|
fn.call(this, ...args);
|
|
@@ -257,8 +245,8 @@ export function userSyncHook(fn, ...args) {
|
|
|
257
245
|
export function userIdHook(fn, submodules, consentData) {
|
|
258
246
|
if (shouldEnforce(consentData, 1, 'User ID')) {
|
|
259
247
|
let userIdModules = submodules.map((submodule) => {
|
|
260
|
-
const gvlid = getGvlid(submodule.submodule);
|
|
261
248
|
const moduleName = submodule.submodule.name;
|
|
249
|
+
const gvlid = getGvlid(MODULE_TYPE_UID, moduleName);
|
|
262
250
|
let isAllowed = validateRules(purpose1Rule, consentData, moduleName, gvlid);
|
|
263
251
|
if (isAllowed) {
|
|
264
252
|
return submodule;
|
|
@@ -286,7 +274,7 @@ export function makeBidRequestsHook(fn, adUnits, ...args) {
|
|
|
286
274
|
adUnits.forEach(adUnit => {
|
|
287
275
|
adUnit.bids = adUnit.bids.filter(bid => {
|
|
288
276
|
const currBidder = bid.bidder;
|
|
289
|
-
const gvlId = getGvlid(currBidder);
|
|
277
|
+
const gvlId = getGvlid(MODULE_TYPE_BIDDER, currBidder);
|
|
290
278
|
if (includes(biddersBlocked, currBidder)) return false;
|
|
291
279
|
const isAllowed = !!validateRules(purpose2Rule, consentData, currBidder, gvlId);
|
|
292
280
|
if (!isAllowed) {
|
|
@@ -316,7 +304,7 @@ export function enableAnalyticsHook(fn, config) {
|
|
|
316
304
|
}
|
|
317
305
|
config = config.filter(conf => {
|
|
318
306
|
const analyticsAdapterCode = conf.provider;
|
|
319
|
-
const gvlid = getGvlid(analyticsAdapterCode, conf);
|
|
307
|
+
const gvlid = getGvlid(MODULE_TYPE_ANALYTICS, analyticsAdapterCode, () => getGvlidFromAnalyticsAdapter(analyticsAdapterCode, conf));
|
|
320
308
|
const isAllowed = !!validateRules(purpose7Rule, consentData, analyticsAdapterCode, gvlid);
|
|
321
309
|
if (!isAllowed) {
|
|
322
310
|
analyticsBlocked.push(analyticsAdapterCode);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
-
import { config } from '../src/config.js';
|
|
3
2
|
import { BANNER } from '../src/mediaTypes.js';
|
|
4
3
|
import { getStorageManager } from '../src/storageManager.js';
|
|
5
4
|
import {
|
|
@@ -12,10 +11,7 @@ import {
|
|
|
12
11
|
|
|
13
12
|
const GVLID = 1012;
|
|
14
13
|
const BIDDER_CODE = 'glimpse';
|
|
15
|
-
const storageManager = getStorageManager({
|
|
16
|
-
gvlid: GVLID,
|
|
17
|
-
bidderCode: BIDDER_CODE,
|
|
18
|
-
});
|
|
14
|
+
const storageManager = getStorageManager({bidderCode: BIDDER_CODE});
|
|
19
15
|
const ENDPOINT = 'https://market.glimpsevault.io/public/v1/prebid';
|
|
20
16
|
const LOCAL_STORAGE_KEY = {
|
|
21
17
|
vault: {
|
|
@@ -102,7 +98,7 @@ function getReferer(bidderRequest) {
|
|
|
102
98
|
function buildQuery(bidderRequest) {
|
|
103
99
|
let url = appendQueryParam(ENDPOINT, 'ver', '$prebid.version$');
|
|
104
100
|
|
|
105
|
-
const timeout =
|
|
101
|
+
const timeout = bidderRequest.timeout;
|
|
106
102
|
url = appendQueryParam(url, 'tmax', timeout);
|
|
107
103
|
|
|
108
104
|
if (gdprApplies(bidderRequest)) {
|
|
@@ -155,7 +155,7 @@ export const spec = {
|
|
|
155
155
|
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
156
156
|
ccpa: bidderRequest.uspConsent || undefined,
|
|
157
157
|
gdpr: bidderRequest.gdprConsent || undefined,
|
|
158
|
-
tmax:
|
|
158
|
+
tmax: bidderRequest.timeout
|
|
159
159
|
};
|
|
160
160
|
|
|
161
161
|
const len = validBidRequests.length;
|
|
@@ -4,10 +4,9 @@ import { BANNER } from '../src/mediaTypes.js';
|
|
|
4
4
|
import { getStorageManager } from '../src/storageManager.js';
|
|
5
5
|
import {ajax} from '../src/ajax.js';
|
|
6
6
|
|
|
7
|
-
const storage = getStorageManager();
|
|
8
|
-
|
|
9
7
|
const BIDDER_CODE = 'gnet';
|
|
10
8
|
const ENDPOINT = 'https://service.gnetrtb.com/api';
|
|
9
|
+
const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
11
10
|
|
|
12
11
|
export const spec = {
|
|
13
12
|
code: BIDDER_CODE,
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { submodule } from '../src/hook.js';
|
|
9
|
-
import {
|
|
9
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
10
|
+
import {MODULE_TYPE_UID} from '../src/activities/modules.js';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
const MODULE_NAME = 'gravitompId';
|
|
13
|
+
export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME});
|
|
12
14
|
|
|
13
15
|
export const cookieKey = 'gravitompId';
|
|
14
16
|
|
|
@@ -17,7 +19,7 @@ export const gravitoIdSystemSubmodule = {
|
|
|
17
19
|
* used to link submodule with config
|
|
18
20
|
* @type {string}
|
|
19
21
|
*/
|
|
20
|
-
name:
|
|
22
|
+
name: MODULE_NAME,
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
25
|
* performs action to obtain id
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import {ajax} from '../src/ajax.js';
|
|
2
|
+
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
3
|
+
import CONSTANTS from '../src/constants.json';
|
|
4
|
+
import adapterManager from '../src/adapterManager.js';
|
|
5
|
+
import {deepClone, logError, logInfo} from '../src/utils.js';
|
|
6
|
+
|
|
7
|
+
const analyticsType = 'endpoint';
|
|
8
|
+
|
|
9
|
+
export const ANALYTICS_VERSION = '1.0.0';
|
|
10
|
+
|
|
11
|
+
const ANALYTICS_SERVER = 'https://europe-west2-greenbids-357713.cloudfunctions.net/publisher-analytics-endpoint';
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
EVENTS: {
|
|
15
|
+
AUCTION_END,
|
|
16
|
+
BID_TIMEOUT,
|
|
17
|
+
}
|
|
18
|
+
} = CONSTANTS;
|
|
19
|
+
|
|
20
|
+
export const BIDDER_STATUS = {
|
|
21
|
+
BID: 'bid',
|
|
22
|
+
NO_BID: 'noBid',
|
|
23
|
+
TIMEOUT: 'timeout'
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const analyticsOptions = {};
|
|
27
|
+
|
|
28
|
+
export const parseBidderCode = function (bid) {
|
|
29
|
+
let bidderCode = bid.bidderCode || bid.bidder;
|
|
30
|
+
return bidderCode.toLowerCase();
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const greenbidsAnalyticsAdapter = Object.assign(adapter({ANALYTICS_SERVER, analyticsType}), {
|
|
34
|
+
|
|
35
|
+
cachedAuctions: {},
|
|
36
|
+
|
|
37
|
+
initConfig(config) {
|
|
38
|
+
/**
|
|
39
|
+
* Required option: pbuid
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
*/
|
|
42
|
+
analyticsOptions.options = deepClone(config.options);
|
|
43
|
+
if (typeof config.options.pbuid !== 'string' || config.options.pbuid.length < 1) {
|
|
44
|
+
logError('"options.pbuid" is required.');
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
analyticsOptions.sampled = true;
|
|
48
|
+
if (typeof config.options.sampling === 'number') {
|
|
49
|
+
analyticsOptions.sampled = Math.random() < parseFloat(config.options.sampling);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
analyticsOptions.pbuid = config.options.pbuid
|
|
53
|
+
analyticsOptions.server = ANALYTICS_SERVER;
|
|
54
|
+
return true;
|
|
55
|
+
},
|
|
56
|
+
sendEventMessage(endPoint, data) {
|
|
57
|
+
logInfo(`AJAX: ${endPoint}: ` + JSON.stringify(data));
|
|
58
|
+
|
|
59
|
+
ajax(`${analyticsOptions.server}${endPoint}`, null, JSON.stringify(data), {
|
|
60
|
+
contentType: 'application/json'
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
createCommonMessage(auctionId) {
|
|
64
|
+
return {
|
|
65
|
+
version: ANALYTICS_VERSION,
|
|
66
|
+
auctionId: auctionId,
|
|
67
|
+
referrer: window.location.href,
|
|
68
|
+
sampling: analyticsOptions.options.sampling,
|
|
69
|
+
prebid: '$prebid.version$',
|
|
70
|
+
pbuid: analyticsOptions.pbuid,
|
|
71
|
+
adUnits: [],
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
serializeBidResponse(bid, status) {
|
|
75
|
+
return {
|
|
76
|
+
bidder: bid.bidder,
|
|
77
|
+
isTimeout: (status === BIDDER_STATUS.TIMEOUT),
|
|
78
|
+
hasBid: (status === BIDDER_STATUS.BID),
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
addBidResponseToMessage(message, bid, status) {
|
|
82
|
+
const adUnitCode = bid.adUnitCode.toLowerCase();
|
|
83
|
+
const adUnitIndex = message.adUnits.findIndex((adUnit) => {
|
|
84
|
+
return adUnit.code === adUnitCode;
|
|
85
|
+
});
|
|
86
|
+
if (adUnitIndex === -1) {
|
|
87
|
+
logError('Trying to add to non registered adunit');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const bidderIndex = message.adUnits[adUnitIndex].bidders.findIndex((bidder) => {
|
|
91
|
+
return bidder.bidder === bid.bidder;
|
|
92
|
+
});
|
|
93
|
+
if (bidderIndex === -1) {
|
|
94
|
+
message.adUnits[adUnitIndex].bidders.push(this.serializeBidResponse(bid, status));
|
|
95
|
+
} else {
|
|
96
|
+
if (status === BIDDER_STATUS.BID) {
|
|
97
|
+
message.adUnits[adUnitIndex].bidders[bidderIndex].hasBid = true;
|
|
98
|
+
} else if (status === BIDDER_STATUS.TIMEOUT) {
|
|
99
|
+
message.adUnits[adUnitIndex].bidders[bidderIndex].isTimeout = true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
createBidMessage(auctionEndArgs, timeoutBids) {
|
|
104
|
+
logInfo(auctionEndArgs)
|
|
105
|
+
const {auctionId, timestamp, auctionEnd, adUnits, bidsReceived, noBids} = auctionEndArgs;
|
|
106
|
+
const message = this.createCommonMessage(auctionId);
|
|
107
|
+
|
|
108
|
+
message.auctionElapsed = (auctionEnd - timestamp);
|
|
109
|
+
|
|
110
|
+
adUnits.forEach((adUnit) => {
|
|
111
|
+
const adUnitCode = adUnit.code.toLowerCase();
|
|
112
|
+
message.adUnits.push({
|
|
113
|
+
code: adUnitCode,
|
|
114
|
+
mediaTypes: {
|
|
115
|
+
...(adUnit.mediaTypes.banner !== undefined) && {banner: adUnit.mediaTypes.banner},
|
|
116
|
+
...(adUnit.mediaTypes.video !== undefined) && {video: adUnit.mediaTypes.video},
|
|
117
|
+
...(adUnit.mediaTypes.native !== undefined) && {native: adUnit.mediaTypes.native}
|
|
118
|
+
},
|
|
119
|
+
bidders: [],
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// We enrich noBid then bids, then timeouts, because in case of a timeout, one response from a bidder
|
|
124
|
+
// Can be in the 3 arrays, and we want that case reflected in the call
|
|
125
|
+
noBids.forEach(bid => this.addBidResponseToMessage(message, bid, BIDDER_STATUS.NO_BID));
|
|
126
|
+
|
|
127
|
+
bidsReceived.forEach(bid => this.addBidResponseToMessage(message, bid, BIDDER_STATUS.BID));
|
|
128
|
+
|
|
129
|
+
timeoutBids.forEach(bid => this.addBidResponseToMessage(message, bid, BIDDER_STATUS.TIMEOUT));
|
|
130
|
+
|
|
131
|
+
return message;
|
|
132
|
+
},
|
|
133
|
+
getCachedAuction(auctionId) {
|
|
134
|
+
this.cachedAuctions[auctionId] = this.cachedAuctions[auctionId] || {
|
|
135
|
+
timeoutBids: [],
|
|
136
|
+
};
|
|
137
|
+
return this.cachedAuctions[auctionId];
|
|
138
|
+
},
|
|
139
|
+
handleAuctionEnd(auctionEndArgs) {
|
|
140
|
+
const cachedAuction = this.getCachedAuction(auctionEndArgs.auctionId);
|
|
141
|
+
this.sendEventMessage('/',
|
|
142
|
+
this.createBidMessage(auctionEndArgs, cachedAuction.timeoutBids)
|
|
143
|
+
);
|
|
144
|
+
},
|
|
145
|
+
handleBidTimeout(timeoutBids) {
|
|
146
|
+
timeoutBids.forEach((bid) => {
|
|
147
|
+
const cachedAuction = this.getCachedAuction(bid.auctionId);
|
|
148
|
+
cachedAuction.timeoutBids.push(bid);
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
track({eventType, args}) {
|
|
152
|
+
if (analyticsOptions.sampled) {
|
|
153
|
+
switch (eventType) {
|
|
154
|
+
case BID_TIMEOUT:
|
|
155
|
+
this.handleBidTimeout(args);
|
|
156
|
+
break;
|
|
157
|
+
case AUCTION_END:
|
|
158
|
+
this.handleAuctionEnd(args);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
getAnalyticsOptions() {
|
|
164
|
+
return analyticsOptions;
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
greenbidsAnalyticsAdapter.originEnableAnalytics = greenbidsAnalyticsAdapter.enableAnalytics;
|
|
169
|
+
|
|
170
|
+
greenbidsAnalyticsAdapter.enableAnalytics = function(config) {
|
|
171
|
+
this.initConfig(config);
|
|
172
|
+
logInfo('loading greenbids analytics');
|
|
173
|
+
greenbidsAnalyticsAdapter.originEnableAnalytics(config);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
adapterManager.registerAnalyticsAdapter({
|
|
177
|
+
adapter: greenbidsAnalyticsAdapter,
|
|
178
|
+
code: 'greenbids'
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
export default greenbidsAnalyticsAdapter;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Greenbids Analytics Adapter
|
|
5
|
+
Module Type: Analytics Adapter
|
|
6
|
+
Maintainer: jb@greenbids.ai
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Analytics adapter for Greenbids
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
{
|
|
17
|
+
provider: 'greenbids',
|
|
18
|
+
options: {
|
|
19
|
+
pbuid: "PBUID_FROM_GREENBIDS"
|
|
20
|
+
sampling: 1.0
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
```
|
|
@@ -31,7 +31,7 @@ const TIME_TO_LIVE = 360;
|
|
|
31
31
|
const USER_ID_KEY = 'tmguid';
|
|
32
32
|
const GVLID = 686;
|
|
33
33
|
const RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js';
|
|
34
|
-
export const storage = getStorageManager({
|
|
34
|
+
export const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
35
35
|
|
|
36
36
|
const LOG_ERROR_MESS = {
|
|
37
37
|
noAuid: 'Bid from response has no auid parameter - ',
|
|
@@ -93,7 +93,7 @@ export const spec = {
|
|
|
93
93
|
let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo, gppConsent} = bidderRequest || {};
|
|
94
94
|
|
|
95
95
|
const referer = refererInfo ? encodeURIComponent(refererInfo.page) : '';
|
|
96
|
-
const tmax = timeout
|
|
96
|
+
const tmax = timeout;
|
|
97
97
|
const imp = [];
|
|
98
98
|
const bidsMap = {};
|
|
99
99
|
const requests = [];
|
|
@@ -145,12 +145,18 @@ export const spec = {
|
|
|
145
145
|
if (ortb2Imp.instl) {
|
|
146
146
|
impObj.instl = ortb2Imp.instl;
|
|
147
147
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (
|
|
151
|
-
impObj.ext.
|
|
152
|
-
|
|
153
|
-
|
|
148
|
+
|
|
149
|
+
if (ortb2Imp.ext) {
|
|
150
|
+
if (ortb2Imp.ext.data) {
|
|
151
|
+
impObj.ext.data = ortb2Imp.ext.data;
|
|
152
|
+
if (impObj.ext.data.adserver && impObj.ext.data.adserver.adslot) {
|
|
153
|
+
impObj.ext.gpid = impObj.ext.data.adserver.adslot.toString();
|
|
154
|
+
} else if (ortb2Imp.ext.data.pbadslot) {
|
|
155
|
+
impObj.ext.gpid = ortb2Imp.ext.data.pbadslot.toString();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (ortb2Imp.ext.gpid) {
|
|
159
|
+
impObj.ext.gpid = ortb2Imp.ext.gpid.toString();
|
|
154
160
|
}
|
|
155
161
|
}
|
|
156
162
|
}
|
|
@@ -135,7 +135,7 @@ export const spec = {
|
|
|
135
135
|
reqSource.ext.schain = schain;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
const bidderTimeout =
|
|
138
|
+
const bidderTimeout = timeout;
|
|
139
139
|
const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
|
|
140
140
|
|
|
141
141
|
const request = {
|
|
@@ -6,15 +6,16 @@ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
|
6
6
|
import adapterManager from '../src/adapterManager.js';
|
|
7
7
|
import * as utils from '../src/utils.js';
|
|
8
8
|
import CONSTANTS from '../src/constants.json';
|
|
9
|
-
import {
|
|
9
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
10
10
|
import {getRefererInfo} from '../src/refererDetection.js';
|
|
11
11
|
import {logError, logInfo} from '../src/utils.js';
|
|
12
|
+
import {MODULE_TYPE_ANALYTICS} from '../src/activities/modules.js';
|
|
12
13
|
|
|
13
14
|
const MODULE_NAME = 'growthCodeAnalytics';
|
|
14
15
|
const DEFAULT_PID = 'INVALID_PID'
|
|
15
16
|
const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb/analytics'
|
|
16
17
|
|
|
17
|
-
export const storage = getStorageManager();
|
|
18
|
+
export const storage = getStorageManager({moduleType: MODULE_TYPE_ANALYTICS, moduleName: MODULE_NAME});
|
|
18
19
|
|
|
19
20
|
let sessionId = utils.generateUUID();
|
|
20
21
|
|
|
@@ -8,14 +8,15 @@
|
|
|
8
8
|
import {logError, logInfo, tryAppendQueryString} from '../src/utils.js';
|
|
9
9
|
import {ajax} from '../src/ajax.js';
|
|
10
10
|
import { submodule } from '../src/hook.js'
|
|
11
|
-
import {
|
|
11
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
12
|
+
import {MODULE_TYPE_UID} from '../src/activities/modules.js';
|
|
12
13
|
|
|
13
|
-
const GCID_EXPIRY = 7;
|
|
14
14
|
const MODULE_NAME = 'growthCodeId';
|
|
15
15
|
const GC_DATA_KEY = '_gc_data';
|
|
16
|
+
const GCID_KEY = 'gcid';
|
|
16
17
|
const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb?'
|
|
17
18
|
|
|
18
|
-
export const storage = getStorageManager({
|
|
19
|
+
export const storage = getStorageManager({ moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME });
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Read GrowthCode data from cookie or local storage
|
|
@@ -25,14 +26,16 @@ export const storage = getStorageManager({ gvlid: undefined, moduleName: MODULE_
|
|
|
25
26
|
export function readData(key) {
|
|
26
27
|
try {
|
|
27
28
|
let payload
|
|
28
|
-
if (storage.cookiesAreEnabled()) {
|
|
29
|
-
payload = tryParse(storage.getCookie(key))
|
|
29
|
+
if (storage.cookiesAreEnabled(null)) {
|
|
30
|
+
payload = tryParse(storage.getCookie(key, null))
|
|
30
31
|
}
|
|
31
32
|
if (storage.hasLocalStorage()) {
|
|
32
|
-
payload = tryParse(storage.getDataFromLocalStorage(key))
|
|
33
|
+
payload = tryParse(storage.getDataFromLocalStorage(key, null))
|
|
33
34
|
}
|
|
34
|
-
if (
|
|
35
|
-
|
|
35
|
+
if (payload !== undefined) {
|
|
36
|
+
if (payload.expire_at > (Date.now() / 1000)) {
|
|
37
|
+
return payload
|
|
38
|
+
}
|
|
36
39
|
}
|
|
37
40
|
} catch (error) {
|
|
38
41
|
logError(error);
|
|
@@ -50,12 +53,8 @@ function storeData(key, value) {
|
|
|
50
53
|
logInfo(MODULE_NAME + ': storing data: key=' + key + ' value=' + value);
|
|
51
54
|
|
|
52
55
|
if (value) {
|
|
53
|
-
if (storage.hasLocalStorage()) {
|
|
54
|
-
storage.setDataInLocalStorage(key, value);
|
|
55
|
-
}
|
|
56
|
-
const expiresStr = (new Date(Date.now() + (GCID_EXPIRY * (60 * 60 * 24 * 1000)))).toUTCString();
|
|
57
|
-
if (storage.cookiesAreEnabled()) {
|
|
58
|
-
storage.setCookie(key, value, expiresStr, 'LAX');
|
|
56
|
+
if (storage.hasLocalStorage(null)) {
|
|
57
|
+
storage.setDataInLocalStorage(key, value, null);
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
60
|
} catch (error) {
|
|
@@ -69,11 +68,15 @@ function storeData(key, value) {
|
|
|
69
68
|
* @param {object|null}
|
|
70
69
|
*/
|
|
71
70
|
function tryParse(data) {
|
|
71
|
+
let payload;
|
|
72
72
|
try {
|
|
73
|
-
|
|
73
|
+
payload = JSON.parse(data);
|
|
74
|
+
if (payload == null) {
|
|
75
|
+
return undefined
|
|
76
|
+
}
|
|
77
|
+
return payload
|
|
74
78
|
} catch (err) {
|
|
75
|
-
|
|
76
|
-
return null;
|
|
79
|
+
return undefined;
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
|
|
@@ -149,6 +152,7 @@ export const growthCodeIdSubmodule = {
|
|
|
149
152
|
// If response is a valid json and should save is true
|
|
150
153
|
if (respJson) {
|
|
151
154
|
storeData(GC_DATA_KEY, JSON.stringify(respJson))
|
|
155
|
+
storeData(GCID_KEY, respJson.gc_id);
|
|
152
156
|
callback(respJson);
|
|
153
157
|
} else {
|
|
154
158
|
callback();
|