prebid.js 5.14.0 → 5.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/Dockerfile +11 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.devcontainer/postCreate.sh +6 -0
- package/allowedModules.js +2 -1
- package/integrationExamples/gpt/afpExample.html +242 -0
- package/integrationExamples/gpt/afpGamExample.html +152 -0
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +126 -0
- package/modules/.submodules.json +29 -27
- package/modules/33acrossBidAdapter.js +23 -20
- package/modules/a4gBidAdapter.js +3 -3
- package/modules/ablidaBidAdapter.js +2 -2
- package/modules/adWMGBidAdapter.js +4 -4
- package/modules/adagioAnalyticsAdapter.js +4 -4
- package/modules/adagioBidAdapter.js +85 -82
- package/modules/adbookpspBidAdapter.js +56 -54
- package/modules/adfBidAdapter.js +24 -16
- package/modules/adgenerationBidAdapter.js +42 -18
- package/modules/adhashBidAdapter.js +105 -0
- package/modules/adhashBidAdapter.md +1 -1
- package/modules/adkernelAdnAnalyticsAdapter.js +6 -6
- package/modules/adkernelAdnBidAdapter.js +23 -23
- package/modules/adkernelBidAdapter.js +49 -44
- package/modules/adlooxAdServerVideo.js +26 -26
- package/modules/adlooxAnalyticsAdapter.js +38 -35
- package/modules/adlooxRtdProvider.js +49 -46
- package/modules/admanBidAdapter.js +4 -4
- package/modules/admixerBidAdapter.js +13 -2
- package/modules/admixerIdSystem.js +4 -4
- package/modules/adnowBidAdapter.js +4 -4
- package/modules/adnuntiusBidAdapter.js +6 -5
- package/modules/adoceanBidAdapter.js +10 -10
- package/modules/adpartnerBidAdapter.js +3 -3
- package/modules/adpod.js +45 -42
- package/modules/adprimeBidAdapter.js +4 -4
- package/modules/adqueryBidAdapter.js +204 -0
- package/modules/adqueryBidAdapter.md +32 -0
- package/modules/adrelevantisBidAdapter.js +30 -27
- package/modules/adriverBidAdapter.js +13 -13
- package/modules/adtargetBidAdapter.js +24 -24
- package/modules/adtelligentBidAdapter.js +29 -29
- package/modules/adtrueBidAdapter.js +35 -35
- package/modules/aduptechBidAdapter.js +10 -10
- package/modules/advangelistsBidAdapter.js +14 -14
- package/modules/adxcgAnalyticsAdapter.js +5 -5
- package/modules/adxcgBidAdapter.js +56 -56
- package/modules/adxpremiumAnalyticsAdapter.js +17 -17
- package/modules/adyoulikeBidAdapter.js +11 -11
- package/modules/afpBidAdapter.js +166 -0
- package/modules/afpBidAdapter.md +348 -0
- package/modules/ajaBidAdapter.js +12 -12
- package/modules/akamaiDAPIdSystem.js +9 -9
- package/modules/aniviewBidAdapter.js +2 -2
- package/modules/aolBidAdapter.js +15 -14
- package/modules/apacdexBidAdapter.js +16 -16
- package/modules/appnexusBidAdapter.js +59 -59
- package/modules/apstreamBidAdapter.js +5 -5
- package/modules/asoBidAdapter.js +30 -30
- package/modules/astraoneBidAdapter.js +2 -2
- package/modules/atsAnalyticsAdapter.js +35 -30
- package/modules/audiencerunBidAdapter.js +15 -15
- package/modules/automatadBidAdapter.js +2 -2
- package/modules/axonixBidAdapter.js +7 -7
- package/modules/beachfrontBidAdapter.js +23 -23
- package/modules/beopBidAdapter.js +22 -22
- package/modules/bidViewabilityIO.js +7 -7
- package/modules/bidglassBidAdapter.js +8 -8
- package/modules/bidscubeBidAdapter.js +3 -3
- package/modules/bizzclickBidAdapter.js +10 -10
- package/modules/bliinkBidAdapter.js +58 -32
- package/modules/bliinkBidAdapter.md +29 -6
- package/modules/bluebillywigBidAdapter.js +30 -30
- package/modules/boldwinBidAdapter.js +4 -4
- package/modules/braveBidAdapter.js +5 -5
- package/modules/bridgewellBidAdapter.js +5 -5
- package/modules/brightMountainMediaBidAdapter.js +10 -10
- package/modules/brightcomBidAdapter.js +18 -18
- package/modules/britepoolIdSystem.js +7 -7
- package/modules/browsiRtdProvider.js +8 -8
- package/modules/bucksenseBidAdapter.js +9 -9
- package/modules/buzzoolaBidAdapter.js +4 -4
- package/modules/byDataAnalyticsAdapter.js +12 -12
- package/modules/ccxBidAdapter.js +38 -38
- package/modules/cleanmedianetBidAdapter.js +9 -9
- package/modules/clickforceBidAdapter.js +4 -4
- package/modules/cointrafficBidAdapter.js +4 -4
- package/modules/coinzillaBidAdapter.js +2 -2
- package/modules/colossussspBidAdapter.js +7 -3
- package/modules/concertAnalyticsAdapter.js +3 -3
- package/modules/concertBidAdapter.js +16 -17
- package/modules/connectadBidAdapter.js +13 -13
- package/modules/consentManagement.js +29 -28
- package/modules/consentManagementUsp.js +14 -14
- package/modules/consumableBidAdapter.js +3 -3
- package/modules/contentexchangeBidAdapter.js +5 -5
- package/modules/conversantBidAdapter.js +32 -31
- package/modules/cpmstarBidAdapter.js +8 -9
- package/modules/craftBidAdapter.js +10 -10
- package/modules/criteoBidAdapter.js +16 -16
- package/modules/criteoIdSystem.js +5 -5
- package/modules/currency.js +18 -18
- package/modules/cwireBidAdapter.js +272 -0
- package/modules/cwireBidAdapter.md +43 -0
- package/modules/datablocksBidAdapter.js +12 -12
- package/modules/deepintentBidAdapter.js +13 -13
- package/modules/dgkeywordRtdProvider.js +10 -11
- package/modules/districtmDMXBidAdapter.js +15 -15
- package/modules/dmdIdSystem.js +5 -5
- package/modules/docereeBidAdapter.js +9 -9
- package/modules/dspxBidAdapter.js +5 -5
- package/modules/ebdrBidAdapter.js +9 -9
- package/modules/emx_digitalBidAdapter.js +23 -23
- package/modules/enrichmentFpdModule.js +10 -9
- package/modules/eplanningAnalyticsAdapter.js +2 -2
- package/modules/eplanningBidAdapter.js +10 -10
- package/modules/etargetBidAdapter.js +4 -4
- package/modules/express.js +9 -10
- package/modules/fabrickIdSystem.js +6 -6
- package/modules/feedadBidAdapter.js +5 -5
- package/modules/fintezaAnalyticsAdapter.js +4 -4
- package/modules/flocIdSystem.js +5 -5
- package/modules/fluctBidAdapter.js +6 -5
- package/modules/freewheel-sspBidAdapter.js +6 -6
- package/modules/gamoshiBidAdapter.js +22 -22
- package/modules/gdprEnforcement.js +13 -14
- package/modules/getintentBidAdapter.js +3 -4
- package/modules/glimpseBidAdapter.js +160 -48
- package/modules/glimpseBidAdapter.md +11 -74
- package/modules/gmosspBidAdapter.js +17 -17
- package/modules/gnetBidAdapter.js +5 -5
- package/modules/googleAnalyticsAdapter.js +6 -6
- package/modules/gothamadsBidAdapter.js +9 -9
- package/modules/gptPreAuction.js +7 -7
- package/modules/gridBidAdapter.js +15 -16
- package/modules/gridNMBidAdapter.js +214 -63
- package/modules/growadvertisingBidAdapter.js +7 -8
- package/modules/gumgumBidAdapter.js +19 -13
- package/modules/h12mediaBidAdapter.js +12 -12
- package/modules/haloIdSystem.js +8 -8
- package/modules/hybridBidAdapter.js +7 -7
- package/modules/iasRtdProvider.js +79 -63
- package/modules/id5IdSystem.js +24 -24
- package/modules/idImportLibrary.js +35 -35
- package/modules/idxIdSystem.js +3 -3
- package/modules/impactifyBidAdapter.js +10 -10
- package/modules/improvedigitalBidAdapter.js +36 -36
- package/modules/imuIdSystem.js +6 -6
- package/modules/inmarBidAdapter.js +2 -2
- package/modules/innityBidAdapter.js +3 -3
- package/modules/inskinBidAdapter.js +14 -2
- package/modules/inskinBidAdapter.md +5 -4
- package/modules/instreamTracking.js +5 -5
- package/modules/integr8BidAdapter.js +4 -4
- package/modules/intentIqIdSystem.js +7 -7
- package/modules/interactiveOffersBidAdapter.js +5 -5
- package/modules/invibesBidAdapter.js +53 -19
- package/modules/invisiblyAnalyticsAdapter.js +5 -5
- package/modules/iqmBidAdapter.js +19 -19
- package/modules/iqzoneBidAdapter.js +5 -5
- package/modules/ixBidAdapter.js +73 -73
- package/modules/jixieBidAdapter.js +6 -6
- package/modules/justpremiumBidAdapter.js +5 -1
- package/modules/kargoBidAdapter.js +16 -9
- package/modules/kargoBidAdapter.md +20 -0
- package/modules/kinessoIdSystem.js +8 -8
- package/modules/koblerBidAdapter.js +12 -12
- package/modules/konduitAnalyticsAdapter.js +4 -4
- package/modules/konduitWrapper.js +14 -14
- package/modules/krushmediaBidAdapter.js +4 -4
- package/modules/kubientBidAdapter.js +5 -5
- package/modules/limelightDigitalBidAdapter.js +4 -4
- package/modules/liveIntentIdSystem.js +4 -5
- package/modules/livewrappedAnalyticsAdapter.js +27 -15
- package/modules/livewrappedBidAdapter.js +7 -7
- package/modules/liveyieldAnalyticsAdapter.js +13 -13
- package/modules/lockerdomeBidAdapter.js +2 -2
- package/modules/loganBidAdapter.js +4 -4
- package/modules/lotamePanoramaIdSystem.js +13 -13
- package/modules/lunamediahbBidAdapter.js +2 -2
- package/modules/madvertiseBidAdapter.js +3 -3
- package/modules/marsmediaBidAdapter.js +26 -26
- package/modules/mathildeadsBidAdapter.js +5 -5
- package/modules/mediaforceBidAdapter.js +11 -11
- package/modules/mediakeysBidAdapter.js +444 -53
- package/modules/mediakeysBidAdapter.md +108 -0
- package/modules/medianetAnalyticsAdapter.js +48 -125
- package/modules/medianetBidAdapter.js +38 -33
- package/modules/medianetRtdProvider.js +7 -7
- package/modules/merkleIdSystem.js +19 -19
- package/modules/mgidBidAdapter.js +50 -50
- package/modules/microadBidAdapter.js +3 -3
- package/modules/multibid/index.js +15 -13
- package/modules/mwOpenLinkIdSystem.js +7 -7
- package/modules/mytargetBidAdapter.js +112 -0
- package/modules/nativoBidAdapter.js +46 -31
- package/modules/nativoBidAdapter.md +0 -1
- package/modules/naveggIdSystem.js +3 -3
- package/modules/nextMillenniumBidAdapter.js +6 -6
- package/modules/nextrollBidAdapter.js +375 -0
- package/modules/nobidBidAdapter.js +12 -11
- package/modules/novatiqIdSystem.js +8 -8
- package/modules/oguryBidAdapter.js +22 -6
- package/modules/oneVideoBidAdapter.js +20 -20
- package/modules/onomagicBidAdapter.js +16 -16
- package/modules/ooloAnalyticsAdapter.js +13 -13
- package/modules/openwebBidAdapter.js +26 -26
- package/modules/openxAnalyticsAdapter.js +33 -33
- package/modules/openxBidAdapter.js +29 -29
- package/modules/operaadsBidAdapter.js +53 -53
- package/modules/optimeraRtdProvider.js +9 -9
- package/modules/optoutBidAdapter.js +3 -3
- package/modules/orbidderBidAdapter.js +3 -3
- package/modules/outbrainBidAdapter.js +13 -13
- package/modules/ozoneBidAdapter.js +131 -131
- package/modules/padsquadBidAdapter.js +4 -4
- package/modules/parrableIdSystem.js +17 -17
- package/modules/pixfutureBidAdapter.js +45 -25
- package/modules/pixfutureBidAdapter.md +127 -0
- package/modules/prebidServerBidAdapter/index.js +109 -105
- package/modules/prebidmanagerAnalyticsAdapter.js +7 -7
- package/modules/priceFloors.js +47 -47
- package/modules/proxistoreBidAdapter.js +6 -8
- package/modules/pubCommonId.js +11 -11
- package/modules/pubProvidedIdSystem.js +3 -3
- package/modules/publinkIdSystem.js +23 -7
- package/modules/publinkIdSystem.md +7 -2
- package/modules/pubmaticAnalyticsAdapter.js +16 -16
- package/modules/pubmaticBidAdapter.js +109 -93
- package/modules/pubmaticBidAdapter.md +1 -1
- package/modules/pubperfAnalyticsAdapter.js +3 -3
- package/modules/pubwiseAnalyticsAdapter.js +6 -6
- package/modules/pubwiseBidAdapter.js +23 -23
- package/modules/pubxBidAdapter.js +2 -2
- package/modules/pubxaiAnalyticsAdapter.js +7 -7
- package/modules/pulsepointBidAdapter.js +13 -13
- package/modules/pxyzBidAdapter.js +7 -7
- package/modules/quantcastBidAdapter.js +16 -16
- package/modules/radsBidAdapter.js +5 -5
- package/modules/realvuAnalyticsAdapter.js +5 -7
- package/modules/reconciliationRtdProvider.js +6 -6
- package/modules/relaidoBidAdapter.js +44 -38
- package/modules/resetdigitalBidAdapter.js +3 -4
- package/modules/revcontentBidAdapter.js +9 -9
- package/modules/rhythmoneBidAdapter.js +17 -16
- package/modules/richaudienceBidAdapter.js +9 -9
- package/modules/riseBidAdapter.js +26 -26
- package/modules/riseBidAdapter.md +1 -3
- package/modules/roxotAnalyticsAdapter.js +14 -14
- package/modules/rtbhouseBidAdapter.js +7 -7
- package/modules/rtbsapeBidAdapter.js +3 -4
- package/modules/rtdModule/index.js +3 -3
- package/modules/rubiconAnalyticsAdapter.js +82 -82
- package/modules/rubiconBidAdapter.js +72 -68
- package/modules/scaleableAnalyticsAdapter.js +2 -2
- package/modules/seedingAllianceBidAdapter.js +231 -0
- package/modules/seedtagBidAdapter.js +10 -10
- package/modules/sharedIdSystem.js +11 -11
- package/modules/sharethroughAnalyticsAdapter.js +8 -8
- package/modules/sharethroughBidAdapter.js +20 -27
- package/modules/showheroes-bsBidAdapter.js +23 -23
- package/modules/sigmoidAnalyticsAdapter.js +4 -5
- package/modules/sirdataRtdProvider.js +34 -34
- package/modules/sizeMappingV2.js +39 -39
- package/modules/slimcutBidAdapter.js +121 -0
- package/modules/smaatoBidAdapter.js +44 -44
- package/modules/smartadserverBidAdapter.js +7 -7
- package/modules/smartxBidAdapter.js +72 -72
- package/modules/smartyadsBidAdapter.js +2 -2
- package/modules/smilewantedBidAdapter.js +6 -6
- package/modules/sonobiAnalyticsAdapter.js +23 -23
- package/modules/sortableAnalyticsAdapter.js +5 -5
- package/modules/sortableBidAdapter.js +28 -28
- package/modules/sovrnAnalyticsAdapter.js +5 -5
- package/modules/sovrnBidAdapter.js +22 -22
- package/modules/spotxBidAdapter.js +97 -83
- package/modules/sspBCBidAdapter.js +216 -21
- package/modules/sspBCBidAdapter.md +1 -1
- package/modules/staqAnalyticsAdapter.js +9 -9
- package/modules/stroeerCoreBidAdapter.js +16 -16
- package/modules/sublimeBidAdapter.js +6 -6
- package/modules/talkadsBidAdapter.js +129 -0
- package/modules/talkadsBidAdapter.md +60 -0
- package/modules/tapadIdSystem.js +3 -3
- package/modules/tappxBidAdapter.js +63 -64
- package/modules/teadsBidAdapter.js +20 -20
- package/modules/telariaBidAdapter.js +17 -17
- package/modules/temedyaBidAdapter.js +4 -4
- package/modules/terceptAnalyticsAdapter.js +4 -4
- package/modules/theAdxBidAdapter.js +16 -16
- package/modules/timeoutRtdProvider.js +15 -15
- package/modules/tpmnBidAdapter.js +3 -3
- package/modules/trionBidAdapter.js +15 -15
- package/modules/tripleliftBidAdapter.js +27 -24
- package/modules/truereachBidAdapter.js +4 -4
- package/modules/trustxBidAdapter.js +22 -18
- package/modules/ucfunnelBidAdapter.js +3 -3
- package/modules/uid2IdSystem.js +6 -6
- package/modules/underdogmediaBidAdapter.js +4 -4
- package/modules/unicornBidAdapter.js +15 -15
- package/modules/unifiedIdSystem.js +4 -4
- package/modules/unrulyBidAdapter.js +16 -16
- package/modules/userId/eids.js +9 -9
- package/modules/userId/index.js +37 -35
- package/modules/validationFpdModule/index.js +15 -15
- package/modules/vdoaiBidAdapter.js +2 -2
- package/modules/verizonMediaIdSystem.js +5 -5
- package/modules/vidazooBidAdapter.js +5 -5
- package/modules/videobyteBidAdapter.js +24 -24
- package/modules/videoreachBidAdapter.js +7 -7
- package/modules/vidoomyBidAdapter.js +105 -22
- package/modules/viewdeosDXBidAdapter.js +17 -17
- package/modules/visxBidAdapter.js +21 -29
- package/modules/voxBidAdapter.js +7 -7
- package/modules/vuukleBidAdapter.js +2 -2
- package/modules/waardexBidAdapter.js +26 -26
- package/modules/weboramaRtdProvider.js +174 -0
- package/modules/weboramaRtdProvider.md +70 -0
- package/modules/winrBidAdapter.js +27 -27
- package/modules/wipesBidAdapter.js +2 -2
- package/modules/yahoosspBidAdapter.js +637 -0
- package/modules/yahoosspBidAdapter.md +795 -0
- package/modules/yieldlabBidAdapter.js +57 -12
- package/modules/yieldlabBidAdapter.md +16 -1
- package/modules/yieldliftBidAdapter.js +9 -9
- package/modules/yieldmoBidAdapter.js +64 -50
- package/modules/yieldoneAnalyticsAdapter.js +6 -6
- package/modules/yieldoneBidAdapter.js +11 -11
- package/modules/yuktamediaAnalyticsAdapter.js +15 -15
- package/modules/zeotapIdPlusIdSystem.js +2 -2
- package/modules/zetaBidAdapter.js +6 -6
- package/modules/zeta_global_sspBidAdapter.js +14 -14
- package/package.json +1 -1
- package/src/AnalyticsAdapter.js +6 -6
- package/src/Renderer.js +10 -8
- package/src/adapterManager.js +45 -42
- package/src/adloader.js +6 -6
- package/src/ajax.js +8 -9
- package/src/auction.js +26 -23
- package/src/bidfactory.js +2 -2
- package/src/config.js +52 -50
- package/src/cpmBucketManager.js +2 -2
- package/src/prebid.js +85 -81
- package/src/storageManager.js +5 -5
- package/src/targeting.js +25 -26
- package/src/userSync.js +35 -22
- package/src/videoCache.js +2 -2
- package/test/.eslintrc.js +2 -1
- package/test/spec/modules/adfBidAdapter_spec.js +55 -0
- package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
- package/test/spec/modules/adhashBidAdapter_spec.js +155 -0
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
- package/test/spec/modules/adqueryBidAdapter_spec.js +185 -0
- package/test/spec/modules/afpBidAdapter_spec.js +306 -0
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +37 -2
- package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
- package/test/spec/modules/colossussspBidAdapter_spec.js +14 -6
- package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
- package/test/spec/modules/eplanningBidAdapter_spec.js +3 -3
- package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
- package/test/spec/modules/gridBidAdapter_spec.js +38 -2
- package/test/spec/modules/gridNMBidAdapter_spec.js +121 -47
- package/test/spec/modules/gumgumBidAdapter_spec.js +27 -6
- package/test/spec/modules/iasRtdProvider_spec.js +71 -6
- package/test/spec/modules/inskinBidAdapter_spec.js +10 -1
- package/test/spec/modules/invibesBidAdapter_spec.js +114 -2
- package/test/spec/modules/justpremiumBidAdapter_spec.js +16 -2
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +33 -7
- package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +39 -7
- package/test/spec/modules/medianetBidAdapter_spec.js +62 -1
- package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
- package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
- package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +120 -7
- package/test/spec/modules/publinkIdSystem_spec.js +42 -12
- package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +100 -81
- package/test/spec/modules/rubiconAnalyticsSchema.json +5 -2
- package/test/spec/modules/seedingAllianceAdapter_spec.js +186 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
- package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
- package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
- package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
- package/test/spec/modules/tappxBidAdapter_spec.js +39 -3
- package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +35 -2
- package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
- package/test/spec/modules/visxBidAdapter_spec.js +48 -4
- package/test/spec/modules/weboramaRtdProvider_spec.js +288 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
- package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
- package/test/spec/unit/pbjs_api_spec.js +4 -0
- package/test/spec/userSync_spec.js +30 -2
- package/modules/turktelekomBidAdapter.md +0 -49
|
@@ -11,7 +11,10 @@ import { auctionManager } from '../src/auctionManager.js';
|
|
|
11
11
|
import { AUCTION_COMPLETED } from '../src/auction.js';
|
|
12
12
|
import { EVENTS } from '../src/constants.json';
|
|
13
13
|
import find from 'core-js-pure/features/array/find.js';
|
|
14
|
-
import
|
|
14
|
+
import {
|
|
15
|
+
deepAccess, logInfo, isPlainObject, logError, isStr, isNumber, getGptSlotInfoForAdUnitCode,
|
|
16
|
+
isFn, mergeDeep, logMessage, insertElement, logWarn, getUniqueIdentifierStr, parseUrl
|
|
17
|
+
} from '../src/utils.js';
|
|
15
18
|
|
|
16
19
|
const MODULE = 'adlooxAnalyticsAdapter';
|
|
17
20
|
|
|
@@ -45,7 +48,7 @@ MACRO['creatype'] = function(b, c) {
|
|
|
45
48
|
};
|
|
46
49
|
MACRO['pbadslot'] = function(b, c) {
|
|
47
50
|
const adUnit = find(auctionManager.getAdUnits(), a => b.adUnitCode === a.code);
|
|
48
|
-
return
|
|
51
|
+
return deepAccess(adUnit, 'ortb2Imp.ext.data.pbadslot') || getGptSlotInfoForAdUnitCode(b.adUnitCode).gptSlot || b.adUnitCode;
|
|
49
52
|
};
|
|
50
53
|
MACRO['pbAdSlot'] = MACRO['pbadslot']; // legacy
|
|
51
54
|
|
|
@@ -66,7 +69,7 @@ let analyticsAdapter = Object.assign(adapter({ analyticsType: 'endpoint' }), {
|
|
|
66
69
|
track({ eventType, args }) {
|
|
67
70
|
if (!analyticsAdapter[`handle_${eventType}`]) return;
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
logInfo(MODULE, 'track', eventType, args);
|
|
70
73
|
|
|
71
74
|
analyticsAdapter[`handle_${eventType}`](args);
|
|
72
75
|
}
|
|
@@ -78,45 +81,45 @@ analyticsAdapter.originEnableAnalytics = analyticsAdapter.enableAnalytics;
|
|
|
78
81
|
analyticsAdapter.enableAnalytics = function(config) {
|
|
79
82
|
analyticsAdapter.context = null;
|
|
80
83
|
|
|
81
|
-
|
|
84
|
+
logInfo(MODULE, 'config', config);
|
|
82
85
|
|
|
83
|
-
if (!
|
|
84
|
-
|
|
86
|
+
if (!isPlainObject(config.options)) {
|
|
87
|
+
logError(MODULE, 'missing options');
|
|
85
88
|
return;
|
|
86
89
|
}
|
|
87
|
-
if (!(config.options.js === undefined ||
|
|
88
|
-
|
|
90
|
+
if (!(config.options.js === undefined || isStr(config.options.js))) {
|
|
91
|
+
logError(MODULE, 'invalid js options value');
|
|
89
92
|
return;
|
|
90
93
|
}
|
|
91
|
-
if (!(config.options.toselector === undefined ||
|
|
92
|
-
|
|
94
|
+
if (!(config.options.toselector === undefined || isFn(config.options.toselector))) {
|
|
95
|
+
logError(MODULE, 'invalid toselector options value');
|
|
93
96
|
return;
|
|
94
97
|
}
|
|
95
|
-
if (!
|
|
96
|
-
|
|
98
|
+
if (!isStr(config.options.client)) {
|
|
99
|
+
logError(MODULE, 'invalid client options value');
|
|
97
100
|
return;
|
|
98
101
|
}
|
|
99
|
-
if (!
|
|
100
|
-
|
|
102
|
+
if (!isNumber(config.options.clientid)) {
|
|
103
|
+
logError(MODULE, 'invalid clientid options value');
|
|
101
104
|
return;
|
|
102
105
|
}
|
|
103
|
-
if (!
|
|
104
|
-
|
|
106
|
+
if (!isNumber(config.options.tagid)) {
|
|
107
|
+
logError(MODULE, 'invalid tagid options value');
|
|
105
108
|
return;
|
|
106
109
|
}
|
|
107
|
-
if (!
|
|
108
|
-
|
|
110
|
+
if (!isNumber(config.options.platformid)) {
|
|
111
|
+
logError(MODULE, 'invalid platformid options value');
|
|
109
112
|
return;
|
|
110
113
|
}
|
|
111
|
-
if (!(config.options.params === undefined ||
|
|
112
|
-
|
|
114
|
+
if (!(config.options.params === undefined || isPlainObject(config.options.params))) {
|
|
115
|
+
logError(MODULE, 'invalid params options value');
|
|
113
116
|
return;
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
analyticsAdapter.context = {
|
|
117
120
|
js: config.options.js || URL_JS,
|
|
118
121
|
toselector: config.options.toselector || function(bid) {
|
|
119
|
-
let code =
|
|
122
|
+
let code = getGptSlotInfoForAdUnitCode(bid.adUnitCode).divId || bid.adUnitCode;
|
|
120
123
|
// https://mathiasbynens.be/notes/css-escapes
|
|
121
124
|
code = code.replace(/^\d/, '\\3$& ');
|
|
122
125
|
return `#${code}`
|
|
@@ -128,7 +131,7 @@ analyticsAdapter.enableAnalytics = function(config) {
|
|
|
128
131
|
params: []
|
|
129
132
|
};
|
|
130
133
|
|
|
131
|
-
config.options.params =
|
|
134
|
+
config.options.params = mergeDeep({}, PARAMS_DEFAULT, config.options.params || {});
|
|
132
135
|
Object
|
|
133
136
|
.keys(config.options.params)
|
|
134
137
|
.forEach(k => {
|
|
@@ -180,15 +183,15 @@ analyticsAdapter.url = function(url, args, bid) {
|
|
|
180
183
|
|
|
181
184
|
let n = args.length;
|
|
182
185
|
while (n-- > 0) {
|
|
183
|
-
if (
|
|
186
|
+
if (isFn(args[n][1])) {
|
|
184
187
|
try {
|
|
185
188
|
args[n][1] = args[n][1](bid);
|
|
186
189
|
} catch (_) {
|
|
187
|
-
|
|
190
|
+
logError(MODULE, 'macro', args[n][0], _.message);
|
|
188
191
|
args[n][1] = `ERROR: ${_.message}`;
|
|
189
192
|
}
|
|
190
193
|
}
|
|
191
|
-
if (
|
|
194
|
+
if (isStr(args[n][1])) {
|
|
192
195
|
args[n][1] = macros(args[n][1]);
|
|
193
196
|
}
|
|
194
197
|
}
|
|
@@ -200,20 +203,20 @@ analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = function(auctionDetails) {
|
|
|
200
203
|
if (!(auctionDetails.auctionStatus == AUCTION_COMPLETED && auctionDetails.bidsReceived.length > 0)) return;
|
|
201
204
|
analyticsAdapter[`handle_${EVENTS.AUCTION_END}`] = NOOP;
|
|
202
205
|
|
|
203
|
-
|
|
206
|
+
logMessage(MODULE, 'preloading verification JS');
|
|
204
207
|
|
|
205
|
-
const uri =
|
|
208
|
+
const uri = parseUrl(analyticsAdapter.url(`${analyticsAdapter.context.js}#`));
|
|
206
209
|
|
|
207
210
|
const link = document.createElement('link');
|
|
208
211
|
link.setAttribute('href', `${uri.protocol}://${uri.host}${uri.pathname}`);
|
|
209
212
|
link.setAttribute('rel', 'preload');
|
|
210
213
|
link.setAttribute('as', 'script');
|
|
211
|
-
|
|
214
|
+
insertElement(link);
|
|
212
215
|
}
|
|
213
216
|
|
|
214
217
|
analyticsAdapter[`handle_${EVENTS.BID_WON}`] = function(bid) {
|
|
215
|
-
if (
|
|
216
|
-
|
|
218
|
+
if (deepAccess(bid, 'ext.adloox.video.adserver')) {
|
|
219
|
+
logMessage(MODULE, `measuring '${bid.mediaType}' ad unit code '${bid.adUnitCode}' via Ad Server module`);
|
|
217
220
|
return;
|
|
218
221
|
}
|
|
219
222
|
|
|
@@ -223,11 +226,11 @@ analyticsAdapter[`handle_${EVENTS.BID_WON}`] = function(bid) {
|
|
|
223
226
|
el = document.querySelector(sl);
|
|
224
227
|
} catch (_) { }
|
|
225
228
|
if (!el) {
|
|
226
|
-
|
|
229
|
+
logWarn(MODULE, `unable to find ad unit code '${bid.adUnitCode}' slot using selector '${sl}' (use options.toselector to change), ignoring`);
|
|
227
230
|
return;
|
|
228
231
|
}
|
|
229
232
|
|
|
230
|
-
|
|
233
|
+
logMessage(MODULE, `measuring '${bid.mediaType}' unit at '${bid.adUnitCode}'`);
|
|
231
234
|
|
|
232
235
|
const params = analyticsAdapter.context.params.concat([
|
|
233
236
|
[ 'tagid', '%%tagid%%' ],
|
|
@@ -257,7 +260,7 @@ export const COMMAND = {
|
|
|
257
260
|
TRACK: 'track'
|
|
258
261
|
};
|
|
259
262
|
export function command(cmd, data, callback0) {
|
|
260
|
-
const cid =
|
|
263
|
+
const cid = getUniqueIdentifierStr();
|
|
261
264
|
const callback = function() {
|
|
262
265
|
delete COMMAND_QUEUE[cid];
|
|
263
266
|
if (callback0) callback0.apply(null, arguments);
|
|
@@ -268,7 +271,7 @@ export function command(cmd, data, callback0) {
|
|
|
268
271
|
function commandProcess(cid) {
|
|
269
272
|
const { cmd, data, callback } = COMMAND_QUEUE[cid];
|
|
270
273
|
|
|
271
|
-
|
|
274
|
+
logInfo(MODULE, 'command', cmd, data);
|
|
272
275
|
|
|
273
276
|
switch (cmd) {
|
|
274
277
|
case COMMAND.CONFIG:
|
|
@@ -292,7 +295,7 @@ function commandProcess(cid) {
|
|
|
292
295
|
callback(); // drain queue
|
|
293
296
|
break;
|
|
294
297
|
default:
|
|
295
|
-
|
|
298
|
+
logWarn(MODULE, 'command unknown', cmd);
|
|
296
299
|
// do not callback as arguments are unknown and to aid debugging
|
|
297
300
|
}
|
|
298
301
|
}
|
|
@@ -16,7 +16,10 @@ import { config as _config } from '../src/config.js';
|
|
|
16
16
|
import { submodule } from '../src/hook.js';
|
|
17
17
|
import { ajax } from '../src/ajax.js';
|
|
18
18
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
19
|
-
import
|
|
19
|
+
import {
|
|
20
|
+
getAdUnitSizes, logInfo, isPlainObject, logError, isStr, isInteger, isArray, isBoolean, mergeDeep, deepAccess,
|
|
21
|
+
_each, deepSetValue, logWarn, getGptSlotInfoForAdUnitCode
|
|
22
|
+
} from '../src/utils.js';
|
|
20
23
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
21
24
|
|
|
22
25
|
const MODULE_NAME = 'adloox';
|
|
@@ -49,7 +52,7 @@ function atf(adUnit, cb) {
|
|
|
49
52
|
// Google's advice is to collapse slots on no fill but
|
|
50
53
|
// we have to cater to clients that grow slots on fill
|
|
51
54
|
const rect = (function(rect) {
|
|
52
|
-
const sizes =
|
|
55
|
+
const sizes = getAdUnitSizes(adUnit);
|
|
53
56
|
|
|
54
57
|
if (sizes.length == 0) return false;
|
|
55
58
|
// interstitial (0x0, 1x1)
|
|
@@ -141,54 +144,54 @@ function atf(adUnit, cb) {
|
|
|
141
144
|
}
|
|
142
145
|
|
|
143
146
|
function init(config, userConsent) {
|
|
144
|
-
|
|
147
|
+
logInfo(MODULE, 'init', config, userConsent);
|
|
145
148
|
|
|
146
|
-
if (!
|
|
147
|
-
|
|
149
|
+
if (!isPlainObject(config)) {
|
|
150
|
+
logError(MODULE, 'missing config');
|
|
148
151
|
return false;
|
|
149
152
|
}
|
|
150
153
|
if (config.params === undefined) config.params = {};
|
|
151
|
-
if (!(
|
|
152
|
-
|
|
154
|
+
if (!(isPlainObject(config.params))) {
|
|
155
|
+
logError(MODULE, 'invalid params');
|
|
153
156
|
return false;
|
|
154
157
|
}
|
|
155
|
-
if (!(config.params.api_origin === undefined ||
|
|
156
|
-
|
|
158
|
+
if (!(config.params.api_origin === undefined || isStr(config.params.api_origin))) {
|
|
159
|
+
logError(MODULE, 'invalid api_origin params value');
|
|
157
160
|
return false;
|
|
158
161
|
}
|
|
159
|
-
if (!(config.params.imps === undefined || (
|
|
160
|
-
|
|
162
|
+
if (!(config.params.imps === undefined || (isInteger(config.params.imps) && config.params.imps > 0))) {
|
|
163
|
+
logError(MODULE, 'invalid imps params value');
|
|
161
164
|
return false;
|
|
162
165
|
}
|
|
163
|
-
if (!(config.params.freqcap_ip === undefined || (
|
|
164
|
-
|
|
166
|
+
if (!(config.params.freqcap_ip === undefined || (isInteger(config.params.freqcap_ip) && config.params.freqcap_ip >= 0))) {
|
|
167
|
+
logError(MODULE, 'invalid freqcap_ip params value');
|
|
165
168
|
return false;
|
|
166
169
|
}
|
|
167
|
-
if (!(config.params.freqcap_ipua === undefined || (
|
|
168
|
-
|
|
170
|
+
if (!(config.params.freqcap_ipua === undefined || (isInteger(config.params.freqcap_ipua) && config.params.freqcap_ipua >= 0))) {
|
|
171
|
+
logError(MODULE, 'invalid freqcap_ipua params value');
|
|
169
172
|
return false;
|
|
170
173
|
}
|
|
171
|
-
if (!(config.params.thresholds === undefined || (
|
|
172
|
-
|
|
174
|
+
if (!(config.params.thresholds === undefined || (isArray(config.params.thresholds) && config.params.thresholds.every(x => isInteger(x) && x > 0 && x <= 100)))) {
|
|
175
|
+
logError(MODULE, 'invalid thresholds params value');
|
|
173
176
|
return false;
|
|
174
177
|
}
|
|
175
|
-
if (!(config.params.slotinpath === undefined ||
|
|
176
|
-
|
|
178
|
+
if (!(config.params.slotinpath === undefined || isBoolean(config.params.slotinpath))) {
|
|
179
|
+
logError(MODULE, 'invalid slotinpath params value');
|
|
177
180
|
return false;
|
|
178
181
|
}
|
|
179
182
|
// legacy/deprecated configuration code path
|
|
180
|
-
if (!(config.params.params === undefined || (
|
|
181
|
-
|
|
183
|
+
if (!(config.params.params === undefined || (isPlainObject(config.params.params) && isInteger(config.params.params.clientid) && isInteger(config.params.params.tagid) && isInteger(config.params.params.platformid)))) {
|
|
184
|
+
logError(MODULE, 'invalid subsection params block');
|
|
182
185
|
return false;
|
|
183
186
|
}
|
|
184
187
|
|
|
185
188
|
config.params.thresholds = config.params.thresholds || [ 50, 60, 70, 80, 90 ];
|
|
186
189
|
|
|
187
190
|
function analyticsConfigCallback(data) {
|
|
188
|
-
config =
|
|
191
|
+
config = mergeDeep(config.params, data);
|
|
189
192
|
}
|
|
190
193
|
if (config.params.params) {
|
|
191
|
-
|
|
194
|
+
logWarn(MODULE, `legacy/deprecated configuration (please migrate to ${MODULE_NAME}AnalyticsAdapter)`);
|
|
192
195
|
analyticsConfigCallback(config.params.params);
|
|
193
196
|
} else {
|
|
194
197
|
analyticsCommand(COMMAND.CONFIG, null, analyticsConfigCallback);
|
|
@@ -200,8 +203,8 @@ function init(config, userConsent) {
|
|
|
200
203
|
function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
201
204
|
// gptPreAuction runs *after* RTD so pbadslot may not be populated... (╯°□°)╯ ┻━┻
|
|
202
205
|
const adUnits = (reqBidsConfigObj.adUnits || getGlobal().adUnits).map(adUnit => {
|
|
203
|
-
let path =
|
|
204
|
-
if (!path) path =
|
|
206
|
+
let path = deepAccess(adUnit, 'ortb2Imp.ext.data.pbadslot');
|
|
207
|
+
if (!path) path = getGptSlotInfoForAdUnitCode(adUnit.code).gptSlot;
|
|
205
208
|
return {
|
|
206
209
|
path: path,
|
|
207
210
|
unit: adUnit
|
|
@@ -219,33 +222,33 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
219
222
|
const dataSite = _config.getConfig('ortb2.site.ext.data') || {};
|
|
220
223
|
const dataUser = _config.getConfig('ortb2.user.ext.data') || {};
|
|
221
224
|
|
|
222
|
-
|
|
225
|
+
_each(response, (v0, k0) => {
|
|
223
226
|
if (k0 == '_') return;
|
|
224
227
|
const k = SEGMENT_HISTORIC[k0] || k0;
|
|
225
228
|
const v = val(v0, k0);
|
|
226
|
-
|
|
229
|
+
deepSetValue(k == k0 ? dataUser : dataSite, `${MODULE_NAME}_rtd.${k}`, v);
|
|
227
230
|
});
|
|
228
|
-
|
|
231
|
+
deepSetValue(dataSite, `${MODULE_NAME}_rtd.ok`, true);
|
|
229
232
|
|
|
230
|
-
|
|
231
|
-
|
|
233
|
+
deepSetValue(ortb2, 'site.ext.data', dataSite);
|
|
234
|
+
deepSetValue(ortb2, 'user.ext.data', dataUser);
|
|
232
235
|
_config.setConfig({ ortb2 });
|
|
233
236
|
|
|
234
237
|
adUnits.forEach((adUnit, i) => {
|
|
235
|
-
|
|
238
|
+
_each(response['_'][i], (v0, k0) => {
|
|
236
239
|
const k = SEGMENT_HISTORIC[k0] || k0;
|
|
237
240
|
const v = val(v0, k0);
|
|
238
|
-
|
|
241
|
+
deepSetValue(adUnit.unit, `ortb2Imp.ext.data.${MODULE_NAME}_rtd.${k}`, v);
|
|
239
242
|
});
|
|
240
243
|
});
|
|
241
244
|
};
|
|
242
245
|
|
|
243
|
-
//
|
|
246
|
+
// mergeDeep does not handle merging deep arrays... (╯°□°)╯ ┻━┻
|
|
244
247
|
function mergeDeep(target, ...sources) {
|
|
245
248
|
function emptyValue(v) {
|
|
246
|
-
if (
|
|
249
|
+
if (isPlainObject(v)) {
|
|
247
250
|
return {};
|
|
248
|
-
} else if (
|
|
251
|
+
} else if (isArray(v)) {
|
|
249
252
|
return [];
|
|
250
253
|
} else {
|
|
251
254
|
return undefined;
|
|
@@ -255,12 +258,12 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
255
258
|
if (!sources.length) return target;
|
|
256
259
|
const source = sources.shift();
|
|
257
260
|
|
|
258
|
-
if (
|
|
261
|
+
if (isPlainObject(target) && isPlainObject(source)) {
|
|
259
262
|
Object.keys(source).forEach(key => {
|
|
260
263
|
if (!(key in target)) target[key] = emptyValue(source[key]);
|
|
261
264
|
target[key] = target[key] !== undefined ? mergeDeep(target[key], source[key]) : source[key];
|
|
262
265
|
});
|
|
263
|
-
} else if (
|
|
266
|
+
} else if (isArray(target) && isArray(source)) {
|
|
264
267
|
source.forEach((v, i) => {
|
|
265
268
|
if (!(i in target)) target[i] = emptyValue(v);
|
|
266
269
|
target[i] = target[i] !== undefined ? mergeDeep(target[i], v) : v;
|
|
@@ -294,7 +297,7 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
294
297
|
];
|
|
295
298
|
|
|
296
299
|
if (!adUnits.length) {
|
|
297
|
-
|
|
300
|
+
logWarn(MODULE, 'no suitable adUnits (missing pbadslot?)');
|
|
298
301
|
}
|
|
299
302
|
const atfQueue = [];
|
|
300
303
|
adUnits.map((adUnit, i) => {
|
|
@@ -307,7 +310,7 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
307
310
|
atf(adUnit.unit, function(x) {
|
|
308
311
|
let viewable = document.visibilityState === undefined || document.visibilityState == 'visible';
|
|
309
312
|
try { viewable = viewable && top.document.hasFocus() } catch (_) {}
|
|
310
|
-
|
|
313
|
+
logInfo(MODULE, `atf code=${adUnit.unit.code} has area=${x}, viewable=${viewable}`);
|
|
311
314
|
const atfList = []; atfList[i] = { atf: parseInt(x * 100) };
|
|
312
315
|
response = mergeDeep(response, { _: atfList });
|
|
313
316
|
semaphoreInc(-1);
|
|
@@ -336,12 +339,12 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
336
339
|
throw false;
|
|
337
340
|
}
|
|
338
341
|
} catch (_) {
|
|
339
|
-
|
|
342
|
+
logError(MODULE, 'unexpected response');
|
|
340
343
|
}
|
|
341
344
|
semaphoreInc(-1);
|
|
342
345
|
},
|
|
343
346
|
error: function(statusText, q) {
|
|
344
|
-
|
|
347
|
+
logError(MODULE, 'request failed');
|
|
345
348
|
semaphoreInc(-1);
|
|
346
349
|
}
|
|
347
350
|
});
|
|
@@ -350,8 +353,8 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
|
350
353
|
|
|
351
354
|
function getTargetingData(adUnitArray, config, userConsent) {
|
|
352
355
|
function targetingNormalise(v) {
|
|
353
|
-
if (
|
|
354
|
-
if (
|
|
356
|
+
if (isArray(v) && v.length == 0) return undefined;
|
|
357
|
+
if (isBoolean(v)) v = ~~v;
|
|
355
358
|
if (!v) return undefined; // empty string and zero
|
|
356
359
|
return v;
|
|
357
360
|
}
|
|
@@ -363,14 +366,14 @@ function getTargetingData(adUnitArray, config, userConsent) {
|
|
|
363
366
|
return getGlobal().adUnits.filter(adUnit => includes(adUnitArray, adUnit.code)).reduce((a, adUnit) => {
|
|
364
367
|
a[adUnit.code] = {};
|
|
365
368
|
|
|
366
|
-
|
|
369
|
+
_each(dataSite, (v0, k) => {
|
|
367
370
|
if (includes(SEGMENT_HISTORIC_VALUES, k)) return; // ignore site average viewability
|
|
368
371
|
const v = targetingNormalise(v0);
|
|
369
372
|
if (v) a[adUnit.code][ADSERVER_TARGETING_PREFIX + k] = v;
|
|
370
373
|
});
|
|
371
374
|
|
|
372
|
-
const adUnitSegments =
|
|
373
|
-
|
|
375
|
+
const adUnitSegments = deepAccess(adUnit, `ortb2Imp.ext.data.${MODULE_NAME}_rtd`, {});
|
|
376
|
+
_each(Object.assign({}, dataUser, adUnitSegments), (v0, k) => {
|
|
374
377
|
const v = targetingNormalise(v0);
|
|
375
378
|
if (v) a[adUnit.code][ADSERVER_TARGETING_PREFIX + k] = v;
|
|
376
379
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
2
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
3
|
-
import
|
|
3
|
+
import { isFn, deepAccess, logMessage } from '../src/utils.js';
|
|
4
4
|
|
|
5
5
|
const BIDDER_CODE = 'adman';
|
|
6
6
|
const AD_URL = 'https://pub.admanmedia.com/?c=o&m=multi';
|
|
@@ -24,8 +24,8 @@ function isBidResponseValid(bid) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function getBidFloor(bid) {
|
|
27
|
-
if (!
|
|
28
|
-
return
|
|
27
|
+
if (!isFn(bid.getFloor)) {
|
|
28
|
+
return deepAccess(bid, 'params.bidfloor', 0);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
try {
|
|
@@ -69,7 +69,7 @@ export const spec = {
|
|
|
69
69
|
winTop = window.top;
|
|
70
70
|
} catch (e) {
|
|
71
71
|
location = winTop.location;
|
|
72
|
-
|
|
72
|
+
logMessage(e);
|
|
73
73
|
};
|
|
74
74
|
let placements = [];
|
|
75
75
|
let request = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { logError } from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {config} from '../src/config.js';
|
|
4
4
|
|
|
@@ -19,9 +19,20 @@ export const spec = {
|
|
|
19
19
|
* Make a server request from the list of BidRequests.
|
|
20
20
|
*/
|
|
21
21
|
buildRequests: function (validRequest, bidderRequest) {
|
|
22
|
+
let w;
|
|
23
|
+
let docRef;
|
|
24
|
+
do {
|
|
25
|
+
w = w ? w.parent : window;
|
|
26
|
+
try {
|
|
27
|
+
docRef = w.document.referrer;
|
|
28
|
+
} catch (e) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
} while (w !== window.top);
|
|
22
32
|
const payload = {
|
|
23
33
|
imps: [],
|
|
24
34
|
ortb2: config.getConfig('ortb2'),
|
|
35
|
+
docReferrer: docRef,
|
|
25
36
|
};
|
|
26
37
|
let endpointUrl;
|
|
27
38
|
if (bidderRequest) {
|
|
@@ -61,7 +72,7 @@ export const spec = {
|
|
|
61
72
|
const {body: {ads = []} = {}} = serverResponse;
|
|
62
73
|
ads.forEach((ad) => bidResponses.push(ad));
|
|
63
74
|
} catch (e) {
|
|
64
|
-
|
|
75
|
+
logError(e);
|
|
65
76
|
}
|
|
66
77
|
return bidResponses;
|
|
67
78
|
},
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @requires module:modules/userId
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import
|
|
8
|
+
import { logError, logInfo } from '../src/utils.js'
|
|
9
9
|
import { ajax } from '../src/ajax.js';
|
|
10
10
|
import { submodule } from '../src/hook.js';
|
|
11
11
|
import {getStorageManager} from '../src/storageManager.js';
|
|
@@ -43,13 +43,13 @@ export const admixerIdSubmodule = {
|
|
|
43
43
|
getId(config, consentData) {
|
|
44
44
|
const {e, p, pid} = (config && config.params) || {};
|
|
45
45
|
if (!pid || typeof pid !== 'string') {
|
|
46
|
-
|
|
46
|
+
logError('admixerId submodule requires partner id to be defined');
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
const gdpr = (consentData && typeof consentData.gdprApplies === 'boolean' && consentData.gdprApplies) ? 1 : 0;
|
|
50
50
|
const consentString = gdpr ? consentData.consentString : '';
|
|
51
51
|
if (gdpr && !consentString) {
|
|
52
|
-
|
|
52
|
+
logInfo('Consent string is required to call admixer id.');
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
55
|
const url = `https://inv-nets.admixer.net/cntcm.aspx?ssp=${pid}${e ? `&e=${e}` : ''}${p ? `&p=${p}` : ''}${consentString ? `&cs=${consentString}` : ''}`;
|
|
@@ -83,7 +83,7 @@ function retrieveVisitorId(url, callback) {
|
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
error: error => {
|
|
86
|
-
|
|
86
|
+
logInfo(`admixerId: fetch encountered an error`, error);
|
|
87
87
|
callback();
|
|
88
88
|
}
|
|
89
89
|
}, undefined, { method: 'GET', withCredentials: true });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
2
|
import { NATIVE, BANNER } from '../src/mediaTypes.js';
|
|
3
|
-
import
|
|
3
|
+
import { parseSizesInput, deepAccess, parseQueryStringParameters } from '../src/utils.js';
|
|
4
4
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
5
5
|
|
|
6
6
|
const BIDDER_CODE = 'adnow';
|
|
@@ -61,13 +61,13 @@ export const spec = {
|
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
if (mediaType === BANNER) {
|
|
64
|
-
data.sizes =
|
|
64
|
+
data.sizes = parseSizesInput(
|
|
65
65
|
req.mediaTypes && req.mediaTypes.banner && req.mediaTypes.banner.sizes
|
|
66
66
|
).join('|')
|
|
67
67
|
} else {
|
|
68
68
|
data.width = data.height = 200;
|
|
69
69
|
|
|
70
|
-
let sizes =
|
|
70
|
+
let sizes = deepAccess(req, 'mediaTypes.native.image.sizes', []);
|
|
71
71
|
|
|
72
72
|
if (sizes.length > 0) {
|
|
73
73
|
const size = Array.isArray(sizes[0]) ? sizes[0] : sizes;
|
|
@@ -81,7 +81,7 @@ export const spec = {
|
|
|
81
81
|
return {
|
|
82
82
|
method: 'GET',
|
|
83
83
|
url: ENDPOINT,
|
|
84
|
-
data:
|
|
84
|
+
data: parseQueryStringParameters(data),
|
|
85
85
|
options: {
|
|
86
86
|
withCredentials: false,
|
|
87
87
|
crossOrigin: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
2
|
import { BANNER } from '../src/mediaTypes.js';
|
|
3
|
-
import
|
|
3
|
+
import { isStr, deepAccess } from '../src/utils.js';
|
|
4
4
|
import { config } from '../src/config.js';
|
|
5
5
|
import { getStorageManager } from '../src/storageManager.js';
|
|
6
6
|
|
|
@@ -9,12 +9,12 @@ const ENDPOINT_URL = 'https://ads.adnuntius.delivery/i';
|
|
|
9
9
|
const GVLID = 855;
|
|
10
10
|
|
|
11
11
|
const checkSegment = function (segment) {
|
|
12
|
-
if (
|
|
12
|
+
if (isStr(segment)) return segment;
|
|
13
13
|
if (segment.id) return segment.id
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
const getSegmentsFromOrtb = function (ortb2) {
|
|
17
|
-
const userData =
|
|
17
|
+
const userData = deepAccess(ortb2, 'user.data');
|
|
18
18
|
let segments = [];
|
|
19
19
|
if (userData) {
|
|
20
20
|
userData.forEach(userdat => {
|
|
@@ -59,8 +59,8 @@ export const spec = {
|
|
|
59
59
|
const usi = getUsi(adnMeta, ortb2, bidderRequest)
|
|
60
60
|
const segments = getSegmentsFromOrtb(ortb2);
|
|
61
61
|
const tzo = new Date().getTimezoneOffset();
|
|
62
|
-
const gdprApplies =
|
|
63
|
-
const consentString =
|
|
62
|
+
const gdprApplies = deepAccess(bidderRequest, 'gdprConsent.gdprApplies');
|
|
63
|
+
const consentString = deepAccess(bidderRequest, 'gdprConsent.consentString');
|
|
64
64
|
|
|
65
65
|
request.push('tzo=' + tzo)
|
|
66
66
|
request.push('format=json')
|
|
@@ -112,6 +112,7 @@ export const spec = {
|
|
|
112
112
|
height: Number(ad.creativeHeight),
|
|
113
113
|
creativeId: ad.creativeId,
|
|
114
114
|
currency: (ad.bid) ? ad.bid.currency : 'EUR',
|
|
115
|
+
dealId: ad.dealId || '',
|
|
115
116
|
meta: {
|
|
116
117
|
advertiserDomains: (ad.destinationUrls.destination) ? [ad.destinationUrls.destination.split('/')[2]] : []
|
|
117
118
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { _each, parseSizesInput, isStr, isArray } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
|
|
4
4
|
const BIDDER_CODE = 'adocean';
|
|
5
5
|
|
|
6
6
|
function buildEndpointUrl(emiter, payloadMap) {
|
|
7
7
|
const payload = [];
|
|
8
|
-
|
|
8
|
+
_each(payloadMap, function(v, k) {
|
|
9
9
|
payload.push(k + '=' + encodeURIComponent(v));
|
|
10
10
|
});
|
|
11
11
|
|
|
@@ -26,12 +26,12 @@ function buildRequest(masterBidRequests, masterId, gdprConsent) {
|
|
|
26
26
|
|
|
27
27
|
const bidIdMap = {};
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
_each(masterBidRequests, function(bid, slaveId) {
|
|
30
30
|
if (!emiter) {
|
|
31
31
|
emiter = bid.params.emiter;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
const slaveSizes =
|
|
34
|
+
const slaveSizes = parseSizesInput(bid.mediaTypes.banner.sizes).join('_');
|
|
35
35
|
const rawSlaveId = bid.params.slaveId.replace('adocean', '');
|
|
36
36
|
payload.aosspsizes.push(rawSlaveId + '~' + slaveSizes);
|
|
37
37
|
|
|
@@ -95,7 +95,7 @@ export const spec = {
|
|
|
95
95
|
|
|
96
96
|
isBidRequestValid: function(bid) {
|
|
97
97
|
const requiredParams = ['slaveId', 'masterId', 'emiter'];
|
|
98
|
-
if (requiredParams.some(name => !
|
|
98
|
+
if (requiredParams.some(name => !isStr(bid.params[name]) || !bid.params[name].length)) {
|
|
99
99
|
return false;
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -106,12 +106,12 @@ export const spec = {
|
|
|
106
106
|
const bidRequestsByMaster = {};
|
|
107
107
|
let requests = [];
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
_each(validBidRequests, function(bidRequest) {
|
|
110
110
|
assignToMaster(bidRequest, bidRequestsByMaster);
|
|
111
111
|
});
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
_each(bidRequestsByMaster, function(masterRequests, masterId) {
|
|
114
|
+
_each(masterRequests, function(instanceRequests) {
|
|
115
115
|
requests.push(buildRequest(instanceRequests, masterId, bidderRequest.gdprConsent));
|
|
116
116
|
});
|
|
117
117
|
});
|
|
@@ -122,8 +122,8 @@ export const spec = {
|
|
|
122
122
|
interpretResponse: function(serverResponse, bidRequest) {
|
|
123
123
|
let bids = [];
|
|
124
124
|
|
|
125
|
-
if (
|
|
126
|
-
|
|
125
|
+
if (isArray(serverResponse.body)) {
|
|
126
|
+
_each(serverResponse.body, function(placementResponse) {
|
|
127
127
|
interpretResponse(placementResponse, bidRequest, bids);
|
|
128
128
|
});
|
|
129
129
|
}
|