prebid.js 9.4.1 → 9.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +31 -5
- package/.github/workflows/jscpd.yml +2 -2
- package/.github/workflows/linter.yml +107 -0
- package/creative/crossDomain.js +6 -3
- 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/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adagioRtdProvider.js +1 -1
- package/dist/adagioUtils.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adkernelUtils.js +1 -0
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admixerBidAdapter.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/advRedAnalyticsAdapter.js +1 -0
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.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/anonymisedRtdProvider.js +1 -1
- package/dist/apacdexBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/azerionedgeRtdProvider.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connatixBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contxtfulRtdProvider.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/currencyUtils.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +69 -8
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dfpAdpod.js +1 -1
- package/dist/dfpUtils.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eightPodAnalyticsAdapter.js +1 -1
- package/dist/eightPodBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fpdUtils.js +1 -0
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gptPreAuction.js +1 -1
- package/dist/gptUtils.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/growthCodeRtdProvider.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqAnalyticsAdapter.js +1 -0
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.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/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.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/missenaBidAdapter.js +1 -1
- package/dist/mobianRtdProvider.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +208 -199
- 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/optoutBidAdapter.js +1 -1
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/paapi.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/playdigoBidAdapter.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/programmaticaBidAdapter.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/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevatehealthBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/ringieraxelspringerBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/riseUtils.js +1 -0
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/schainSerializer.js +1 -0
- 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/sizeMapping.js +1 -1
- package/dist/sizeUtils.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/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stnBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/symitriDapRtdProvider.js +1 -0
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/targetVideoUtils.js +1 -0
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/telariaBidAdapter.js +1 -1
- package/dist/teqblazeUtils.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.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/uid2IdSystem_shared.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unrulyBidAdapter.js +1 -1
- package/dist/userAgentUtils.js +1 -0
- package/dist/utiqIdSystem.js +1 -1
- package/dist/vidazooUtils.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahooAdsBidAdapter.js +1 -1
- package/dist/yandexIdSystem.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/x-domain/creative.html +1 -1
- package/libraries/adkernelUtils/adkernelUtils.js +11 -0
- package/libraries/currencyUtils/floor.js +23 -0
- package/libraries/dfpUtils/dfpUtils.js +7 -0
- package/libraries/fpdUtils/deviceInfo.js +58 -0
- package/libraries/fpdUtils/pageInfo.js +73 -0
- package/libraries/gptUtils/gptUtils.js +23 -1
- package/libraries/riseUtils/index.js +330 -0
- package/libraries/schainSerializer/schainSerializer.js +24 -0
- package/libraries/sizeUtils/tranformSize.js +43 -0
- package/libraries/targetVideoUtils/bidderUtils.js +178 -0
- package/libraries/targetVideoUtils/constants.js +23 -0
- package/libraries/teqblazeUtils/bidderUtils.js +15 -11
- package/libraries/userAgentUtils/index.js +58 -0
- package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
- package/modules/.submodules.json +1 -0
- package/modules/33acrossAnalyticsAdapter.js +2 -0
- package/modules/adagioAnalyticsAdapter.js +101 -84
- package/modules/adagioAnalyticsAdapter.md +4 -0
- package/modules/adagioBidAdapter.js +5 -17
- package/modules/adagioRtdProvider.js +18 -4
- package/modules/adkernelAdnBidAdapter.js +1 -12
- package/modules/adkernelBidAdapter.js +4 -13
- package/modules/adlooxAnalyticsAdapter.js +1 -0
- package/modules/admixerBidAdapter.js +10 -6
- package/modules/admixerBidAdapter.md +7 -10
- package/modules/adtrgtmeBidAdapter.js +1 -1
- package/modules/advRedAnalyticsAdapter.js +198 -0
- package/modules/advRedAnalyticsAdapter.md +30 -0
- package/modules/aidemBidAdapter.js +2 -0
- package/modules/akamaiDapRtdProvider.js +19 -798
- package/modules/anonymisedRtdProvider.js +5 -1
- package/modules/anonymisedRtdProvider.md +1 -1
- package/modules/apacdexBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +56 -2
- package/modules/automatadAnalyticsAdapter.js +2 -0
- package/modules/azerionedgeRtdProvider.js +13 -3
- package/modules/azerionedgeRtdProvider.md +0 -17
- package/modules/bridBidAdapter.js +47 -47
- package/modules/cleanioRtdProvider.js +1 -0
- package/modules/concertBidAdapter.js +1 -1
- package/modules/connatixBidAdapter.js +36 -8
- package/modules/connectIdSystem.js +6 -2
- package/modules/contxtfulRtdProvider.js +20 -2
- package/modules/contxtfulRtdProvider.md +1 -0
- package/modules/craftBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/cwireBidAdapter.js +5 -1
- package/modules/dailymotionBidAdapter.js +85 -65
- package/modules/debugging/debugging.js +3 -0
- package/modules/dfpAdServerVideo.js +15 -33
- package/modules/dfpAdpod.js +2 -6
- package/modules/dgkeywordRtdProvider.js +2 -0
- package/modules/discoveryBidAdapter.js +26 -210
- package/modules/dspxBidAdapter.js +176 -54
- package/modules/eightPodAnalyticsAdapter.js +28 -34
- package/modules/eightPodBidAdapter.js +113 -57
- package/modules/fintezaAnalyticsAdapter.js +9 -4
- package/modules/goldbachBidAdapter.js +1 -1
- package/modules/gptPreAuction.js +63 -4
- package/modules/growthCodeAnalyticsAdapter.js +1 -1
- package/modules/growthCodeRtdProvider.js +1 -1
- package/modules/gumgumBidAdapter.js +14 -10
- package/modules/improvedigitalBidAdapter.js +1 -1
- package/modules/insticatorBidAdapter.js +35 -31
- package/modules/intentIqAnalyticsAdapter.js +234 -0
- package/modules/intentIqAnalyticsAdapter.md +27 -0
- package/modules/intentIqIdSystem.md +0 -0
- package/modules/jwplayerBidAdapter.js +1 -1
- package/modules/jwplayerRtdProvider.js +26 -6
- package/modules/jwplayerVideoProvider.js +6 -0
- package/modules/kargoBidAdapter.js +11 -14
- package/modules/kimberliteBidAdapter.js +24 -7
- package/modules/kimberliteBidAdapter.md +30 -1
- package/modules/mediafuseBidAdapter.js +1 -1
- package/modules/mediagoBidAdapter.js +7 -176
- package/modules/medianetBidAdapter.js +101 -40
- package/modules/mgidBidAdapter.js +3 -1
- package/modules/minutemediaBidAdapter.js +21 -398
- package/modules/mobianRtdProvider.js +16 -2
- package/modules/nextMillenniumBidAdapter.js +1 -27
- package/modules/nexx360BidAdapter.js +3 -2
- package/modules/nobidBidAdapter.js +1 -1
- package/modules/openwebBidAdapter.js +18 -396
- package/modules/optoutBidAdapter.js +1 -1
- package/modules/paapi.js +48 -35
- package/modules/permutiveRtdProvider.js +72 -22
- package/modules/playdigoBidAdapter.js +4 -2
- package/modules/prebidServerBidAdapter/index.js +4 -2
- package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
- package/modules/programmaticaBidAdapter.js +1 -1
- package/modules/publirBidAdapter.js +20 -273
- package/modules/pubmaticBidAdapter.js +12 -0
- package/modules/pubxaiAnalyticsAdapter.js +306 -164
- package/modules/relevatehealthBidAdapter.js +2 -1
- package/modules/resetdigitalBidAdapter.md +54 -45
- package/modules/richaudienceBidAdapter.js +1 -1
- package/modules/riseBidAdapter.js +19 -400
- package/modules/rtdModule/index.js +5 -3
- package/modules/shinezBidAdapter.js +17 -361
- package/modules/sirdataRtdProvider.js +2 -0
- package/modules/sizeMapping.js +2 -5
- package/modules/smaatoBidAdapter.js +18 -1
- package/modules/smarthubBidAdapter.js +45 -177
- package/modules/smilewantedBidAdapter.js +26 -22
- package/modules/snigelBidAdapter.js +1 -1
- package/modules/sonobiBidAdapter.js +5 -10
- package/modules/stnBidAdapter.js +22 -398
- package/modules/symitriDapRtdProvider.js +812 -0
- package/modules/symitriDapRtdProvider.md +49 -0
- package/modules/targetVideoBidAdapter.js +120 -152
- package/modules/targetVideoBidAdapter.md +20 -3
- package/modules/telariaBidAdapter.js +2 -32
- package/modules/uid2IdSystem_shared.js +51 -39
- package/modules/userId/eids.js +3 -0
- package/modules/utiqIdSystem.js +12 -10
- package/modules/validationFpdModule/index.js +22 -17
- package/modules/videojsVideoProvider.js +3 -0
- package/modules/visxBidAdapter.js +1 -1
- package/modules/winrBidAdapter.js +2 -27
- package/modules/yahooAdsBidAdapter.js +1 -1
- package/modules/yandexIdSystem.js +1 -1
- package/package.json +4 -4
- package/plugins/eslint/index.js +73 -45
- package/src/adloader.js +1 -0
- package/src/ajax.js +15 -0
- package/src/config.js +0 -4
- package/src/debugging.js +1 -0
- package/src/prebid.js +4 -0
- package/src/secureCreatives.js +1 -1
- package/src/storageManager.js +62 -73
- package/src/targeting.js +26 -20
- package/src/utils.js +9 -0
- package/test/pages/consent_mgt_gdpr.html +1 -1
- package/test/spec/ajax_spec.js +11 -0
- package/test/spec/creative/crossDomainCreative_spec.js +26 -9
- package/test/spec/fpd/gdpr_spec.js +1 -1
- package/test/spec/libraries/userAgentUtils_spec.js +109 -0
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +231 -141
- package/test/spec/modules/adagioBidAdapter_spec.js +32 -66
- package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
- package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
- package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
- package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
- package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
- package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
- package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
- package/test/spec/modules/connectIdSystem_spec.js +27 -28
- package/test/spec/modules/consentManagement_spec.js +1 -1
- package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
- package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
- package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
- package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
- package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
- package/test/spec/modules/gptPreAuction_spec.js +143 -1
- package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
- package/test/spec/modules/insticatorBidAdapter_spec.js +8 -1
- package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
- package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
- package/test/spec/modules/kargoBidAdapter_spec.js +7 -8
- package/test/spec/modules/kimberliteBidAdapter_spec.js +137 -65
- package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
- package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
- package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
- package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
- package/test/spec/modules/nexx360BidAdapter_spec.js +1 -1
- package/test/spec/modules/paapi_spec.js +177 -111
- package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
- package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
- package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
- package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
- package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
- package/test/spec/modules/smarthubBidAdapter_spec.js +6 -4
- package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
- package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
- package/test/spec/modules/yandexIdSystem_spec.js +6 -1
- package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
- package/test/spec/unit/core/storageManager_spec.js +68 -51
- package/test/spec/unit/pbjs_api_spec.js +11 -0
- package/test/spec/utils_spec.js +19 -0
- /package/src/utils/{gpdr.js → gdpr.js} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { deviceTypes, browserTypes, osTypes } from './userAgentTypes.enums.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get the approximate device type enum from the user agent
|
|
5
|
+
* @returns {number}
|
|
6
|
+
*/
|
|
7
|
+
export const getDeviceType = () => {
|
|
8
|
+
if (
|
|
9
|
+
/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(
|
|
10
|
+
navigator.userAgent.toLowerCase()
|
|
11
|
+
)
|
|
12
|
+
) return deviceTypes.TABLET;
|
|
13
|
+
if (
|
|
14
|
+
/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(
|
|
15
|
+
navigator.userAgent.toLowerCase()
|
|
16
|
+
)
|
|
17
|
+
) return deviceTypes.MOBILE;
|
|
18
|
+
return deviceTypes.DESKTOP;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Get the approximate browser type enum from the user agent (or vendor
|
|
23
|
+
* if available)
|
|
24
|
+
* @returns {number}
|
|
25
|
+
*/
|
|
26
|
+
export const getBrowser = () => {
|
|
27
|
+
if (/Edg/.test(navigator.userAgent)) return browserTypes.EDGE;
|
|
28
|
+
else if (
|
|
29
|
+
/Chrome/.test(navigator.userAgent) &&
|
|
30
|
+
/Google Inc/.test(navigator.vendor)
|
|
31
|
+
) return browserTypes.CHROME;
|
|
32
|
+
else if (navigator.userAgent.match('CriOS')) return browserTypes.CHROME;
|
|
33
|
+
else if (/Firefox/.test(navigator.userAgent)) return browserTypes.FIREFOX;
|
|
34
|
+
else if (
|
|
35
|
+
/Safari/.test(navigator.userAgent) &&
|
|
36
|
+
/Apple Computer/.test(navigator.vendor)
|
|
37
|
+
) return browserTypes.SAFARI;
|
|
38
|
+
else if (
|
|
39
|
+
/Trident/.test(navigator.userAgent) ||
|
|
40
|
+
/MSIE/.test(navigator.userAgent)
|
|
41
|
+
) return browserTypes.INTERNET_EXPLORER;
|
|
42
|
+
else return browserTypes.OTHER;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Get the approximate OS enum from the user agent (or app version,
|
|
47
|
+
* if available)
|
|
48
|
+
* @returns {number}
|
|
49
|
+
*/
|
|
50
|
+
export const getOS = () => {
|
|
51
|
+
if (navigator.userAgent.indexOf('Android') != -1) return osTypes.ANDROID;
|
|
52
|
+
if (navigator.userAgent.indexOf('like Mac') != -1) return osTypes.IOS;
|
|
53
|
+
if (navigator.userAgent.indexOf('Win') != -1) return osTypes.WINDOWS;
|
|
54
|
+
if (navigator.userAgent.indexOf('Mac') != -1) return osTypes.MAC;
|
|
55
|
+
if (navigator.userAgent.indexOf('Linux') != -1) return osTypes.LINUX;
|
|
56
|
+
if (navigator.appVersion.indexOf('X11') != -1) return osTypes.UNIX;
|
|
57
|
+
return osTypes.OTHER;
|
|
58
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const deviceTypes = Object.freeze({
|
|
2
|
+
DESKTOP: 0,
|
|
3
|
+
MOBILE: 1,
|
|
4
|
+
TABLET: 2,
|
|
5
|
+
})
|
|
6
|
+
export const browserTypes = Object.freeze({
|
|
7
|
+
CHROME: 0,
|
|
8
|
+
FIREFOX: 1,
|
|
9
|
+
SAFARI: 2,
|
|
10
|
+
EDGE: 3,
|
|
11
|
+
INTERNET_EXPLORER: 4,
|
|
12
|
+
OTHER: 5
|
|
13
|
+
})
|
|
14
|
+
export const osTypes = Object.freeze({
|
|
15
|
+
WINDOWS: 0,
|
|
16
|
+
MAC: 1,
|
|
17
|
+
LINUX: 2,
|
|
18
|
+
UNIX: 3,
|
|
19
|
+
IOS: 4,
|
|
20
|
+
ANDROID: 5,
|
|
21
|
+
OTHER: 6
|
|
22
|
+
})
|
package/modules/.submodules.json
CHANGED
|
@@ -629,6 +629,8 @@ function setCachedBidStatus(auctionId, bidId, status) {
|
|
|
629
629
|
* @param {string} endpoint URL
|
|
630
630
|
*/
|
|
631
631
|
function sendReport(report, endpoint) {
|
|
632
|
+
// TODO FIX THIS RULES VIOLATION
|
|
633
|
+
// eslint-disable-next-line
|
|
632
634
|
if (navigator.sendBeacon(endpoint, JSON.stringify(report))) {
|
|
633
635
|
log.info(`Analytics report sent to ${endpoint}`, report);
|
|
634
636
|
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* Analytics Adapter for Adagio
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
import { _ADAGIO, getBestWindowForAdagio } from '../libraries/adagioUtils/adagioUtils.js';
|
|
6
|
+
import { deepAccess, logError, logInfo, logWarn } from '../src/utils.js';
|
|
7
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
8
|
+
import { EVENTS } from '../src/constants.js';
|
|
5
9
|
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
6
10
|
import adapterManager from '../src/adapterManager.js';
|
|
7
|
-
import { EVENTS } from '../src/constants.js';
|
|
8
11
|
import { ajax } from '../src/ajax.js';
|
|
9
|
-
import { BANNER } from '../src/mediaTypes.js';
|
|
10
|
-
import { getWindowTop, getWindowSelf, deepAccess, logInfo, logError } from '../src/utils.js';
|
|
11
12
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
12
13
|
|
|
13
14
|
const emptyUrl = '';
|
|
@@ -19,6 +20,13 @@ const PREBID_VERSION = '$prebid.version$';
|
|
|
19
20
|
const ENDPOINT = 'https://c.4dex.io/pba.gif';
|
|
20
21
|
const CURRENCY_USD = 'USD';
|
|
21
22
|
const ADAGIO_CODE = 'adagio';
|
|
23
|
+
|
|
24
|
+
export const _internal = {
|
|
25
|
+
getAdagioNs: function() {
|
|
26
|
+
return _ADAGIO;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
22
30
|
const cache = {
|
|
23
31
|
auctions: {},
|
|
24
32
|
getAuction: function(auctionId, adUnitCode) {
|
|
@@ -48,34 +56,6 @@ const cache = {
|
|
|
48
56
|
};
|
|
49
57
|
const enc = window.encodeURIComponent;
|
|
50
58
|
|
|
51
|
-
/**
|
|
52
|
-
/* BEGIN ADAGIO.JS CODE
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
function canAccessTopWindow() {
|
|
56
|
-
try {
|
|
57
|
-
if (getWindowTop().location.href) {
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
} catch (error) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
function getCurrentWindow() {
|
|
66
|
-
return currentWindow;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
let currentWindow;
|
|
70
|
-
|
|
71
|
-
const adagioEnqueue = function adagioEnqueue(action, data) {
|
|
72
|
-
getCurrentWindow().ADAGIO.queue.push({ action, data, ts: Date.now() });
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* END ADAGIO.JS CODE
|
|
77
|
-
*/
|
|
78
|
-
|
|
79
59
|
/**
|
|
80
60
|
* UTILS FUNCTIONS
|
|
81
61
|
*/
|
|
@@ -150,6 +130,10 @@ function getCurrencyData(bid) {
|
|
|
150
130
|
* @param {Object} qp
|
|
151
131
|
*/
|
|
152
132
|
function sendRequest(qp) {
|
|
133
|
+
if (!qp.org_id || !qp.site) {
|
|
134
|
+
logInfo('request is missing org_id or site, skipping beacon.');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
153
137
|
// Removing null values
|
|
154
138
|
qp = Object.keys(qp).reduce((acc, key) => {
|
|
155
139
|
if (qp[key] !== null) {
|
|
@@ -194,37 +178,28 @@ function getTargetedAuctionId(bid) {
|
|
|
194
178
|
*/
|
|
195
179
|
|
|
196
180
|
function handlerAuctionInit(event) {
|
|
197
|
-
const w =
|
|
181
|
+
const w = getBestWindowForAdagio();
|
|
198
182
|
|
|
199
183
|
const prebidAuctionId = event.auctionId;
|
|
200
184
|
const adUnitCodes = removeDuplicates(event.adUnitCodes, adUnitCode => adUnitCode);
|
|
201
185
|
|
|
202
186
|
// Check if Adagio is on the bid requests.
|
|
203
|
-
// If not, we don't need to track the auction.
|
|
204
187
|
const adagioBidRequest = event.bidderRequests.find(bidRequest => isAdagio(bidRequest.bidderCode));
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
188
|
+
|
|
189
|
+
const rtdUid = deepAccess(adagioBidRequest, 'ortb2.site.ext.data.adg_rtd.uid');
|
|
190
|
+
cache.addPrebidAuctionIdRef(prebidAuctionId, rtdUid);
|
|
209
191
|
|
|
210
192
|
cache.auctions[prebidAuctionId] = {};
|
|
211
193
|
|
|
212
194
|
adUnitCodes.forEach(adUnitCode => {
|
|
195
|
+
// event.adUnits are splitted by mediatypes
|
|
213
196
|
const adUnits = event.adUnits.filter(adUnit => adUnit.code === adUnitCode);
|
|
214
197
|
|
|
215
|
-
// Get all bidders
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
);
|
|
220
|
-
|
|
221
|
-
// Check if Adagio is configured for the ad unit.
|
|
222
|
-
// If not, we don't need to track the ad unit.
|
|
223
|
-
const adagioBidder = bidders.find(bidder => isAdagio(bidder.bidder));
|
|
224
|
-
if (!adagioBidder) {
|
|
225
|
-
logInfo(`Adagio is not configured for ad unit '${adUnitCode}'`);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
198
|
+
// Get all bidders configured for the ad unit.
|
|
199
|
+
// AdUnits with the same code can have a different bidder list, aggregate all of them.
|
|
200
|
+
const biddersAggregate = adUnits.reduce((bidders, adUnit) => bidders.concat(adUnit.bids.map(bid => bid.bidder)), [])
|
|
201
|
+
// remove duplicates
|
|
202
|
+
const bidders = [...new Set(biddersAggregate)];
|
|
228
203
|
|
|
229
204
|
// Get all media types and banner sizes configured for the ad unit.
|
|
230
205
|
const mediaTypes = adUnits.map(adUnit => adUnit.mediaTypes);
|
|
@@ -239,45 +214,56 @@ function handlerAuctionInit(event) {
|
|
|
239
214
|
bannerSize => bannerSize
|
|
240
215
|
).sort();
|
|
241
216
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return;
|
|
217
|
+
const sortedBidderCodes = bidders.sort()
|
|
218
|
+
|
|
219
|
+
const bidSrcMapper = (bidder) => {
|
|
220
|
+
const request = event.bidderRequests.find(br => br.bidderCode === bidder)
|
|
221
|
+
return request ? request.bids[0].src : null
|
|
248
222
|
}
|
|
249
|
-
|
|
250
|
-
// We assume that all Adagio bids for a same adunit have the same params.
|
|
251
|
-
const params = adagioAdUnitBids[0].params;
|
|
223
|
+
const biddersSrc = sortedBidderCodes.map(bidSrcMapper).join(',');
|
|
252
224
|
|
|
253
|
-
|
|
254
|
-
|
|
225
|
+
// if adagio was involved in the auction we identified it with rtdUid, if not use the prebid auctionId
|
|
226
|
+
const auctionId = rtdUid || prebidAuctionId;
|
|
255
227
|
|
|
256
|
-
|
|
257
|
-
const adagioMediaTypes = removeDuplicates(
|
|
258
|
-
adagioAdUnitBids.map(bid => Object.keys(bid.mediaTypes)).flat(),
|
|
259
|
-
mediaTypeKey => mediaTypeKey
|
|
260
|
-
).flat().map(mediaType => getMediaTypeAlias(mediaType)).sort();
|
|
228
|
+
const adgRtdSession = deepAccess(event.bidderRequests[0], 'ortb2.site.ext.data.adg_rtd.session', {});
|
|
261
229
|
|
|
262
230
|
const qp = {
|
|
231
|
+
org_id: adagioAdapter.options.organizationId,
|
|
232
|
+
site: adagioAdapter.options.site,
|
|
263
233
|
v: 0,
|
|
264
234
|
pbjsv: PREBID_VERSION,
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
pv_id: params.pageviewId,
|
|
268
|
-
auct_id: adagioAuctionId,
|
|
235
|
+
pv_id: _internal.getAdagioNs().pageviewId,
|
|
236
|
+
auct_id: auctionId,
|
|
269
237
|
adu_code: adUnitCode,
|
|
270
238
|
url_dmn: w.location.hostname,
|
|
271
|
-
pgtyp: params.pagetype,
|
|
272
|
-
plcmt: params.placement,
|
|
273
|
-
t_n: params.testName || null,
|
|
274
|
-
t_v: params.testVersion || null,
|
|
275
239
|
mts: mediaTypesKeys.join(','),
|
|
276
240
|
ban_szs: bannerSizes.join(','),
|
|
277
|
-
bdrs:
|
|
278
|
-
|
|
241
|
+
bdrs: sortedBidderCodes.join(','),
|
|
242
|
+
pgtyp: deepAccess(event.bidderRequests[0], 'ortb2.site.ext.data.pagetype', null),
|
|
243
|
+
plcmt: deepAccess(adUnits[0], 'ortb2Imp.ext.data.placement', null),
|
|
244
|
+
t_n: adgRtdSession.testName || null,
|
|
245
|
+
t_v: adgRtdSession.testVersion || null,
|
|
246
|
+
s_id: adgRtdSession.id || null,
|
|
247
|
+
s_new: adgRtdSession.new || null,
|
|
248
|
+
bdrs_src: biddersSrc,
|
|
279
249
|
};
|
|
280
250
|
|
|
251
|
+
if (adagioBidRequest && adagioBidRequest.bids) {
|
|
252
|
+
const adagioAdUnitBids = adagioBidRequest.bids.filter(bid => bid.adUnitCode === adUnitCode);
|
|
253
|
+
if (adagioAdUnitBids.length > 0) {
|
|
254
|
+
// Get all media types requested for Adagio.
|
|
255
|
+
const adagioMediaTypes = removeDuplicates(
|
|
256
|
+
adagioAdUnitBids.map(bid => Object.keys(bid.mediaTypes)).flat(),
|
|
257
|
+
mediaTypeKey => mediaTypeKey
|
|
258
|
+
).flat().map(mediaType => getMediaTypeAlias(mediaType)).sort();
|
|
259
|
+
|
|
260
|
+
qp.adg_mts = adagioMediaTypes.join(',');
|
|
261
|
+
// for backward compatibility: if we didn't find organizationId & site but we have a bid from adagio we might still find it in params
|
|
262
|
+
qp.org_id = qp.org_id || adagioAdUnitBids[0].params.organizationId;
|
|
263
|
+
qp.site = qp.site || adagioAdUnitBids[0].params.site;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
281
267
|
cache.auctions[prebidAuctionId][adUnitCode] = qp;
|
|
282
268
|
sendNewBeacon(prebidAuctionId, adUnitCode);
|
|
283
269
|
});
|
|
@@ -324,13 +310,21 @@ function handlerAuctionEnd(event) {
|
|
|
324
310
|
return bid ? getCurrencyData(bid).netCpm : null
|
|
325
311
|
}
|
|
326
312
|
|
|
313
|
+
const perfNavigation = performance.getEntriesByType('navigation')[0];
|
|
314
|
+
|
|
327
315
|
cache.updateAuction(auctionId, adUnitCode, {
|
|
328
316
|
bdrs_bid: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidResponseMapper).join(','),
|
|
329
|
-
bdrs_cpm: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidCpmMapper).join(',')
|
|
317
|
+
bdrs_cpm: cache.getBiddersFromAuction(auctionId, adUnitCode).map(bidCpmMapper).join(','),
|
|
318
|
+
// check timings at the end of the auction to leave time to the browser to update it
|
|
319
|
+
dom_i: Math.round(perfNavigation['domInteractive']) || null,
|
|
320
|
+
dom_c: Math.round(perfNavigation['domComplete']) || null,
|
|
321
|
+
loa_e: Math.round(perfNavigation['loadEventEnd']) || null,
|
|
330
322
|
});
|
|
323
|
+
|
|
331
324
|
sendNewBeacon(auctionId, adUnitCode);
|
|
332
325
|
});
|
|
333
326
|
}
|
|
327
|
+
|
|
334
328
|
function handlerBidWon(event) {
|
|
335
329
|
let auctionId = getTargetedAuctionId(event);
|
|
336
330
|
|
|
@@ -345,6 +339,8 @@ function handlerBidWon(event) {
|
|
|
345
339
|
? cache.getAdagioAuctionId(event.auctionId)
|
|
346
340
|
: null);
|
|
347
341
|
|
|
342
|
+
const perfNavigation = performance.getEntriesByType('navigation')[0];
|
|
343
|
+
|
|
348
344
|
cache.updateAuction(auctionId, event.adUnitCode, {
|
|
349
345
|
win_bdr: event.bidder,
|
|
350
346
|
win_mt: getMediaTypeAlias(event.mediaType),
|
|
@@ -353,6 +349,11 @@ function handlerBidWon(event) {
|
|
|
353
349
|
win_net_cpm: currencyData.netCpm,
|
|
354
350
|
win_og_cpm: currencyData.orginalCpm,
|
|
355
351
|
|
|
352
|
+
// check timings at the end of the auction to leave time to the browser to update it
|
|
353
|
+
dom_i: Math.round(perfNavigation['domInteractive']) || null,
|
|
354
|
+
dom_c: Math.round(perfNavigation['domComplete']) || null,
|
|
355
|
+
loa_e: Math.round(perfNavigation['loadEventEnd']) || null,
|
|
356
|
+
|
|
356
357
|
// cache bid id
|
|
357
358
|
auct_id_c: adagioAuctionCacheId,
|
|
358
359
|
});
|
|
@@ -407,7 +408,11 @@ let adagioAdapter = Object.assign(adapter({ emptyUrl, analyticsType }), {
|
|
|
407
408
|
|
|
408
409
|
try {
|
|
409
410
|
if (typeof args !== 'undefined' && events.indexOf(eventType) !== -1) {
|
|
410
|
-
|
|
411
|
+
_internal.getAdagioNs().queue.push({
|
|
412
|
+
action: 'pb-analytics-event',
|
|
413
|
+
data: { eventName: eventType, args },
|
|
414
|
+
ts: Date.now()
|
|
415
|
+
});
|
|
411
416
|
}
|
|
412
417
|
} catch (error) {
|
|
413
418
|
logError('Error on Adagio Analytics Adapter - adagio.js', error);
|
|
@@ -418,14 +423,26 @@ let adagioAdapter = Object.assign(adapter({ emptyUrl, analyticsType }), {
|
|
|
418
423
|
adagioAdapter.originEnableAnalytics = adagioAdapter.enableAnalytics;
|
|
419
424
|
|
|
420
425
|
adagioAdapter.enableAnalytics = config => {
|
|
421
|
-
|
|
422
|
-
currentWindow = w;
|
|
426
|
+
_internal.getAdagioNs().versions.adagioAnalyticsAdapter = VERSION;
|
|
423
427
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
+
let modules = getGlobal().installedModules;
|
|
429
|
+
if (modules && (!modules.length || modules.indexOf('adagioRtdProvider') === -1 || modules.indexOf('rtdModule') === -1)) {
|
|
430
|
+
logError('Adagio Analytics Adapter requires rtdModule & adagioRtdProvider modules which are not installed. No beacon will be sent');
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
428
433
|
|
|
434
|
+
adagioAdapter.options = config.options || {};
|
|
435
|
+
if (!adagioAdapter.options.organizationId) {
|
|
436
|
+
logWarn('Adagio Analytics Adapter: organizationId is required and is missing will try to fallback on params.');
|
|
437
|
+
} else {
|
|
438
|
+
adagioAdapter.options.organizationId = adagioAdapter.options.organizationId.toString(); // allows publisher to pass it as a number
|
|
439
|
+
}
|
|
440
|
+
if (!adagioAdapter.options.site) {
|
|
441
|
+
logWarn('Adagio Analytics Adapter: site is required and is missing will try to fallback on params.');
|
|
442
|
+
} else if (typeof adagioAdapter.options.site !== 'string') {
|
|
443
|
+
logWarn('Adagio Analytics Adapter: site should be a string will try to fallback on params.');
|
|
444
|
+
adagioAdapter.options.site = undefined;
|
|
445
|
+
}
|
|
429
446
|
adagioAdapter.originEnableAnalytics(config);
|
|
430
447
|
}
|
|
431
448
|
|
|
@@ -20,11 +20,11 @@ import {
|
|
|
20
20
|
import { getRefererInfo, parseDomain } from '../src/refererDetection.js';
|
|
21
21
|
import { OUTSTREAM } from '../src/video.js';
|
|
22
22
|
import { Renderer } from '../src/Renderer.js';
|
|
23
|
+
import { _ADAGIO } from '../libraries/adagioUtils/adagioUtils.js';
|
|
23
24
|
import { config } from '../src/config.js';
|
|
24
25
|
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
25
26
|
import { find } from '../src/polyfill.js';
|
|
26
27
|
import { getGptSlotInfoForAdUnitCode } from '../libraries/gptUtils/gptUtils.js';
|
|
27
|
-
import { _ADAGIO } from '../libraries/adagioUtils/adagioUtils.js';
|
|
28
28
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
29
29
|
import { userSync } from '../src/userSync.js';
|
|
30
30
|
|
|
@@ -176,17 +176,6 @@ function _getUspConsent(bidderRequest) {
|
|
|
176
176
|
return (deepAccess(bidderRequest, 'uspConsent')) ? { uspConsent: bidderRequest.uspConsent } : false;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
function _getGppConsent(bidderRequest) {
|
|
180
|
-
let gpp = deepAccess(bidderRequest, 'gppConsent.gppString')
|
|
181
|
-
let gppSid = deepAccess(bidderRequest, 'gppConsent.applicableSections')
|
|
182
|
-
|
|
183
|
-
if (!gpp || !gppSid) {
|
|
184
|
-
gpp = deepAccess(bidderRequest, 'ortb2.regs.gpp', '')
|
|
185
|
-
gppSid = deepAccess(bidderRequest, 'ortb2.regs.gpp_sid', [])
|
|
186
|
-
}
|
|
187
|
-
return { gpp, gppSid }
|
|
188
|
-
}
|
|
189
|
-
|
|
190
179
|
function _getSchain(bidRequest) {
|
|
191
180
|
return deepAccess(bidRequest, 'schain');
|
|
192
181
|
}
|
|
@@ -559,7 +548,7 @@ export const spec = {
|
|
|
559
548
|
const gdprConsent = _getGdprConsent(bidderRequest) || {};
|
|
560
549
|
const uspConsent = _getUspConsent(bidderRequest) || {};
|
|
561
550
|
const coppa = _getCoppa();
|
|
562
|
-
const
|
|
551
|
+
const { gpp, gpp_sid: gppSid } = deepAccess(bidderRequest, 'ortb2.regs', {});
|
|
563
552
|
const schain = _getSchain(validBidRequests[0]);
|
|
564
553
|
const eids = _getEids(validBidRequests[0]) || [];
|
|
565
554
|
const syncEnabled = deepAccess(config.getConfig('userSync'), 'syncEnabled')
|
|
@@ -576,7 +565,7 @@ export const spec = {
|
|
|
576
565
|
sessionData.rnd = Math.random()
|
|
577
566
|
}
|
|
578
567
|
|
|
579
|
-
const aucId = deepAccess(
|
|
568
|
+
const aucId = deepAccess(bidderRequest, 'ortb2.site.ext.data.adg_rtd.uid') || generateUUID()
|
|
580
569
|
|
|
581
570
|
const adUnits = validBidRequests.map(rawBidRequest => {
|
|
582
571
|
const bidRequest = deepClone(rawBidRequest);
|
|
@@ -724,7 +713,6 @@ export const spec = {
|
|
|
724
713
|
// Those params are not sent to the server.
|
|
725
714
|
// They are used for further operations on analytics adapter.
|
|
726
715
|
validBidRequests.forEach(rawBidRequest => {
|
|
727
|
-
rawBidRequest.params.adagioAuctionId = aucId
|
|
728
716
|
rawBidRequest.params.pageviewId = pageviewId
|
|
729
717
|
});
|
|
730
718
|
|
|
@@ -748,8 +736,8 @@ export const spec = {
|
|
|
748
736
|
gdpr: gdprConsent,
|
|
749
737
|
coppa: coppa,
|
|
750
738
|
ccpa: uspConsent,
|
|
751
|
-
gpp:
|
|
752
|
-
gppSid:
|
|
739
|
+
gpp: gpp || '',
|
|
740
|
+
gppSid: gppSid || [],
|
|
753
741
|
dsa: dsa // populated if exists
|
|
754
742
|
},
|
|
755
743
|
schain: schain,
|
|
@@ -73,20 +73,34 @@ const _SESSION = (function() {
|
|
|
73
73
|
|
|
74
74
|
storage.getDataFromLocalStorage('adagio', (storageValue) => {
|
|
75
75
|
// session can be an empty object
|
|
76
|
-
const { rnd, new: isNew, vwSmplg, vwSmplgNxt, lastActivityTime } = _internal.getSessionFromLocalStorage(storageValue);
|
|
76
|
+
const { rnd, new: isNew = false, vwSmplg, vwSmplgNxt, lastActivityTime, id, testName, testVersion, initiator } = _internal.getSessionFromLocalStorage(storageValue);
|
|
77
|
+
|
|
78
|
+
// isNew can be `true` if the session has been initialized by the A/B test snippet (external)
|
|
79
|
+
const isNewSess = (initiator === 'snippet') ? isNew : isNewSession(lastActivityTime);
|
|
77
80
|
|
|
78
81
|
data.session = {
|
|
79
82
|
rnd,
|
|
80
|
-
new:
|
|
83
|
+
new: isNewSess, // legacy: `new` was used but the choosen name is not good.
|
|
81
84
|
// Don't use values if they are not defined.
|
|
82
85
|
...(vwSmplg !== undefined && { vwSmplg }),
|
|
83
86
|
...(vwSmplgNxt !== undefined && { vwSmplgNxt }),
|
|
84
|
-
...(lastActivityTime !== undefined && { lastActivityTime })
|
|
87
|
+
...(lastActivityTime !== undefined && { lastActivityTime }),
|
|
88
|
+
...(id !== undefined && { id }),
|
|
89
|
+
...(testName !== undefined && { testName }),
|
|
90
|
+
...(testVersion !== undefined && { testVersion }),
|
|
91
|
+
...(initiator !== undefined && { initiator }),
|
|
85
92
|
};
|
|
86
93
|
|
|
87
|
-
if (
|
|
94
|
+
// `initiator` is a pseudo flag used to know if the session has been initialized by the A/B test snippet (external).
|
|
95
|
+
// If the AB Test snippet has not been used, then `initiator` value is `adgjs` or `undefined`.
|
|
96
|
+
// The check on `testName` is used to ensure that the A/B test values are removed.
|
|
97
|
+
if (initiator !== 'snippet' && (isNewSess || testName)) {
|
|
88
98
|
data.session.new = true;
|
|
99
|
+
data.session.id = generateUUID();
|
|
89
100
|
data.session.rnd = Math.random();
|
|
101
|
+
// Ensure that the A/B test values are removed.
|
|
102
|
+
delete data.session.testName;
|
|
103
|
+
delete data.session.testVersion;
|
|
90
104
|
}
|
|
91
105
|
|
|
92
106
|
_internal.getAdagioNs().queue.push({
|
|
@@ -2,6 +2,7 @@ import {deepAccess, deepSetValue, isArray, isNumber, isStr, logInfo, parseSizesI
|
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
4
4
|
import {config} from '../src/config.js';
|
|
5
|
+
import {getBidFloor} from '../libraries/adkernelUtils/adkernelUtils.js'
|
|
5
6
|
|
|
6
7
|
const DEFAULT_ADKERNEL_DSP_DOMAIN = 'tag.adkernel.com';
|
|
7
8
|
const DEFAULT_MIMES = ['video/mp4', 'video/webm', 'application/x-shockwave-flash', 'application/javascript'];
|
|
@@ -143,18 +144,6 @@ function fillBidMeta(bid, tag) {
|
|
|
143
144
|
}
|
|
144
145
|
}
|
|
145
146
|
|
|
146
|
-
function getBidFloor(bid, mediaType, sizes) {
|
|
147
|
-
var floor;
|
|
148
|
-
var size = sizes.length === 1 ? sizes[0] : '*';
|
|
149
|
-
if (typeof bid.getFloor === 'function') {
|
|
150
|
-
const floorInfo = bid.getFloor({currency: 'USD', mediaType, size});
|
|
151
|
-
if (typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) {
|
|
152
|
-
floor = parseFloat(floorInfo.floor);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return floor;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
147
|
export const spec = {
|
|
159
148
|
code: 'adkernelAdn',
|
|
160
149
|
gvlid: GVLID,
|
|
@@ -20,6 +20,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
20
20
|
import {find} from '../src/polyfill.js';
|
|
21
21
|
import {config} from '../src/config.js';
|
|
22
22
|
import {getAdUnitSizes} from '../libraries/sizeUtils/sizeUtils.js';
|
|
23
|
+
import {getBidFloor} from '../libraries/adkernelUtils/adkernelUtils.js'
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* In case you're AdKernel whitelable platform's client who needs branded adapter to
|
|
@@ -95,7 +96,9 @@ export const spec = {
|
|
|
95
96
|
{code: 'headbidder'},
|
|
96
97
|
{code: 'digiad'},
|
|
97
98
|
{code: 'monetix'},
|
|
98
|
-
{code: 'hyperbrainz'}
|
|
99
|
+
{code: 'hyperbrainz'},
|
|
100
|
+
{code: 'voisetech'},
|
|
101
|
+
{code: 'global_sun'}
|
|
99
102
|
],
|
|
100
103
|
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
101
104
|
|
|
@@ -246,18 +249,6 @@ function groupImpressionsByHostZone(bidRequests, refererInfo) {
|
|
|
246
249
|
);
|
|
247
250
|
}
|
|
248
251
|
|
|
249
|
-
function getBidFloor(bid, mediaType, sizes) {
|
|
250
|
-
var floor;
|
|
251
|
-
var size = sizes.length === 1 ? sizes[0] : '*';
|
|
252
|
-
if (typeof bid.getFloor === 'function') {
|
|
253
|
-
const floorInfo = bid.getFloor({currency: 'USD', mediaType, size});
|
|
254
|
-
if (typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) {
|
|
255
|
-
floor = parseFloat(floorInfo.floor);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return floor;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
252
|
/**
|
|
262
253
|
* Builds rtb imp object(s) for single adunit
|
|
263
254
|
* @param bidRequest {BidRequest}
|
|
@@ -232,6 +232,7 @@ analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = function(auctionDetails) {
|
|
|
232
232
|
link.setAttribute('href', `${uri.protocol}://${uri.host}${uri.pathname}`);
|
|
233
233
|
link.setAttribute('rel', 'preload');
|
|
234
234
|
link.setAttribute('as', 'script');
|
|
235
|
+
// TODO fix rules violation
|
|
235
236
|
insertElement(link);
|
|
236
237
|
}
|
|
237
238
|
|
|
@@ -13,7 +13,7 @@ const ALIASES = [
|
|
|
13
13
|
{code: 'futureads', endpoint: 'https://ads.futureads.io/prebid.1.2.aspx'},
|
|
14
14
|
{code: 'smn', endpoint: 'https://ads.smn.rs/prebid.1.2.aspx'},
|
|
15
15
|
{code: 'admixeradx', endpoint: 'https://inv-nets.admixer.net/adxprebid.1.2.aspx'},
|
|
16
|
-
|
|
16
|
+
'rtbstack'
|
|
17
17
|
];
|
|
18
18
|
export const spec = {
|
|
19
19
|
code: BIDDER_CODE,
|
|
@@ -23,8 +23,8 @@ export const spec = {
|
|
|
23
23
|
* Determines whether or not the given bid request is valid.
|
|
24
24
|
*/
|
|
25
25
|
isBidRequestValid: function (bid) {
|
|
26
|
-
return bid.bidder === '
|
|
27
|
-
? !!bid.params.
|
|
26
|
+
return bid.bidder === 'rtbstack'
|
|
27
|
+
? !!bid.params.tagId
|
|
28
28
|
: !!bid.params.zone;
|
|
29
29
|
},
|
|
30
30
|
/**
|
|
@@ -51,8 +51,12 @@ export const spec = {
|
|
|
51
51
|
};
|
|
52
52
|
let endpointUrl;
|
|
53
53
|
if (bidderRequest) {
|
|
54
|
-
|
|
55
|
-
endpointUrl = config.getConfig(
|
|
54
|
+
// checks if there is specified any endpointUrl in bidder config
|
|
55
|
+
endpointUrl = config.getConfig('bidderURL');
|
|
56
|
+
if (!endpointUrl && bidderRequest.bidderCode === 'rtbstack') {
|
|
57
|
+
logError('The bidderUrl config is required for RTB Stack bids. Please set it with setBidderConfig() for "rtbstack".');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
56
60
|
// TODO: is 'page' the right value here?
|
|
57
61
|
if (bidderRequest.refererInfo?.page) {
|
|
58
62
|
payload.referrer = encodeURIComponent(bidderRequest.refererInfo.page);
|
|
@@ -82,7 +86,7 @@ export const spec = {
|
|
|
82
86
|
let urlForRequest = endpointUrl || getEndpointUrl(bidderRequest.bidderCode)
|
|
83
87
|
return {
|
|
84
88
|
method: 'POST',
|
|
85
|
-
url:
|
|
89
|
+
url: urlForRequest,
|
|
86
90
|
data: payload,
|
|
87
91
|
};
|
|
88
92
|
},
|