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
package/src/targeting.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
uniques, isGptPubadsDefined, getHighestCpm, getOldestHighestCpmBid, groupBy, isAdUnitCodeMatchingSlot, timestamp,
|
|
3
|
+
deepAccess, deepClone, logError, logWarn, logInfo, isFn, isArray, logMessage, isStr
|
|
4
|
+
} from './utils.js';
|
|
2
5
|
import { config } from './config.js';
|
|
3
6
|
import { NATIVE_TARGETING_KEYS } from './native.js';
|
|
4
7
|
import { auctionManager } from './auctionManager.js';
|
|
@@ -8,7 +11,6 @@ import { hook } from './hook.js';
|
|
|
8
11
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
9
12
|
import find from 'core-js-pure/features/array/find.js';
|
|
10
13
|
|
|
11
|
-
const utils = require('./utils.js');
|
|
12
14
|
var CONSTANTS = require('./constants.json');
|
|
13
15
|
|
|
14
16
|
var pbTargetingKeys = [];
|
|
@@ -122,13 +124,13 @@ export function newTargeting(auctionManager) {
|
|
|
122
124
|
const adUnitCodes = getAdUnitCodes(adUnitCode);
|
|
123
125
|
const adUnits = auctionManager.getAdUnits().filter(adUnit => includes(adUnitCodes, adUnit.code));
|
|
124
126
|
window.googletag.pubads().getSlots().forEach(slot => {
|
|
125
|
-
let customSlotMatchingFunc =
|
|
127
|
+
let customSlotMatchingFunc = isFn(customSlotMatching) && customSlotMatching(slot);
|
|
126
128
|
pbTargetingKeys.forEach(function(key) {
|
|
127
129
|
// reset only registered adunits
|
|
128
130
|
adUnits.forEach(function(unit) {
|
|
129
131
|
if (unit.code === slot.getAdUnitPath() ||
|
|
130
132
|
unit.code === slot.getSlotElementId() ||
|
|
131
|
-
(
|
|
133
|
+
(isFn(customSlotMatchingFunc) && customSlotMatchingFunc(unit.code))) {
|
|
132
134
|
slot.setTargeting(key, null);
|
|
133
135
|
}
|
|
134
136
|
});
|
|
@@ -160,7 +162,7 @@ export function newTargeting(auctionManager) {
|
|
|
160
162
|
*/
|
|
161
163
|
function bidShouldBeAddedToTargeting(bid, adUnitCodes) {
|
|
162
164
|
return bid.adserverTargeting && adUnitCodes &&
|
|
163
|
-
((
|
|
165
|
+
((isArray(adUnitCodes) && includes(adUnitCodes, bid.adUnitCode)) ||
|
|
164
166
|
(typeof adUnitCodes === 'string' && bid.adUnitCode === adUnitCodes));
|
|
165
167
|
};
|
|
166
168
|
|
|
@@ -379,21 +381,18 @@ export function newTargeting(auctionManager) {
|
|
|
379
381
|
targeting.setTargetingForGPT = function(targetingConfig, customSlotMatching) {
|
|
380
382
|
window.googletag.pubads().getSlots().forEach(slot => {
|
|
381
383
|
Object.keys(targetingConfig).filter(customSlotMatching ? customSlotMatching(slot) : isAdUnitCodeMatchingSlot(slot))
|
|
382
|
-
.forEach(targetId =>
|
|
384
|
+
.forEach(targetId => {
|
|
383
385
|
Object.keys(targetingConfig[targetId]).forEach(key => {
|
|
384
|
-
let
|
|
385
|
-
if (typeof
|
|
386
|
-
|
|
386
|
+
let value = targetingConfig[targetId][key];
|
|
387
|
+
if (typeof value === 'string' && value.indexOf(',') !== -1) {
|
|
388
|
+
// due to the check the array will be formed only if string has ',' else plain string will be assigned as value
|
|
389
|
+
value = value.split(',');
|
|
387
390
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
slot.setTargeting(key, value);
|
|
394
|
-
});
|
|
395
|
-
})
|
|
396
|
-
)
|
|
391
|
+
targetingConfig[targetId][key] = value;
|
|
392
|
+
});
|
|
393
|
+
logMessage(`Attempting to set targeting-map for slot: ${slot.getSlotElementId()} with targeting-map:`, targetingConfig[targetId]);
|
|
394
|
+
slot.updateTargetingFromMap(targetingConfig[targetId])
|
|
395
|
+
})
|
|
397
396
|
})
|
|
398
397
|
};
|
|
399
398
|
|
|
@@ -405,7 +404,7 @@ export function newTargeting(auctionManager) {
|
|
|
405
404
|
function getAdUnitCodes(adUnitCode) {
|
|
406
405
|
if (typeof adUnitCode === 'string') {
|
|
407
406
|
return [adUnitCode];
|
|
408
|
-
} else if (
|
|
407
|
+
} else if (isArray(adUnitCode)) {
|
|
409
408
|
return adUnitCode;
|
|
410
409
|
}
|
|
411
410
|
return auctionManager.getAdUnitCodes() || [];
|
|
@@ -455,14 +454,14 @@ export function newTargeting(auctionManager) {
|
|
|
455
454
|
try {
|
|
456
455
|
targeting.resetPresetTargetingAST(adUnitCodes);
|
|
457
456
|
} catch (e) {
|
|
458
|
-
|
|
457
|
+
logError('unable to reset targeting for AST' + e)
|
|
459
458
|
}
|
|
460
459
|
|
|
461
460
|
Object.keys(astTargeting).forEach(targetId =>
|
|
462
461
|
Object.keys(astTargeting[targetId]).forEach(key => {
|
|
463
|
-
|
|
462
|
+
logMessage(`Attempting to set targeting for targetId: ${targetId} key: ${key} value: ${astTargeting[targetId][key]}`);
|
|
464
463
|
// setKeywords supports string and array as value
|
|
465
|
-
if (
|
|
464
|
+
if (isStr(astTargeting[targetId][key]) || isArray(astTargeting[targetId][key])) {
|
|
466
465
|
let keywordsObj = {};
|
|
467
466
|
let regex = /pt[0-9]/;
|
|
468
467
|
if (key.search(regex) < 0) {
|
|
@@ -527,7 +526,7 @@ export function newTargeting(auctionManager) {
|
|
|
527
526
|
function mergeAdServerTargeting(acc, bid, index, arr) {
|
|
528
527
|
function concatTargetingValue(key) {
|
|
529
528
|
return function(currentBidElement) {
|
|
530
|
-
if (!
|
|
529
|
+
if (!isArray(currentBidElement.adserverTargeting[key])) {
|
|
531
530
|
currentBidElement.adserverTargeting[key] = [currentBidElement.adserverTargeting[key]];
|
|
532
531
|
}
|
|
533
532
|
currentBidElement.adserverTargeting[key] = currentBidElement.adserverTargeting[key].concat(bid.adserverTargeting[key]).filter(uniques);
|
|
@@ -634,8 +633,8 @@ export function newTargeting(auctionManager) {
|
|
|
634
633
|
|
|
635
634
|
return Object.keys(aut)
|
|
636
635
|
.map(function(key) {
|
|
637
|
-
if (
|
|
638
|
-
if (!
|
|
636
|
+
if (isStr(aut[key])) aut[key] = aut[key].split(',').map(s => s.trim());
|
|
637
|
+
if (!isArray(aut[key])) aut[key] = [ aut[key] ];
|
|
639
638
|
return { [key]: aut[key] };
|
|
640
639
|
});
|
|
641
640
|
}
|
|
@@ -648,7 +647,7 @@ export function newTargeting(auctionManager) {
|
|
|
648
647
|
}
|
|
649
648
|
|
|
650
649
|
targeting.isApntagDefined = function() {
|
|
651
|
-
if (window.apntag &&
|
|
650
|
+
if (window.apntag && isFn(window.apntag.setKeywords)) {
|
|
652
651
|
return true;
|
|
653
652
|
}
|
|
654
653
|
};
|
package/src/userSync.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
deepClone, isPlainObject, logError, shuffle, logMessage, triggerPixel, insertUserSyncIframe, isArray,
|
|
3
|
+
logWarn, isStr, isSafariBrowser
|
|
4
|
+
} from './utils.js';
|
|
2
5
|
import { config } from './config.js';
|
|
3
6
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
4
7
|
import { getCoreStorageManager } from './storageManager.js';
|
|
@@ -18,7 +21,7 @@ export const USERSYNC_DEFAULT_CONFIG = {
|
|
|
18
21
|
|
|
19
22
|
// Set userSync default values
|
|
20
23
|
config.setDefaults({
|
|
21
|
-
'userSync':
|
|
24
|
+
'userSync': deepClone(USERSYNC_DEFAULT_CONFIG)
|
|
22
25
|
});
|
|
23
26
|
|
|
24
27
|
const storage = getCoreStorageManager('usersync');
|
|
@@ -54,7 +57,7 @@ export function newUserSync(userSyncDependencies) {
|
|
|
54
57
|
// if userSync.filterSettings does not contain image/all configs, merge in default image config to ensure image pixels are fired
|
|
55
58
|
if (conf.userSync) {
|
|
56
59
|
let fs = conf.userSync.filterSettings;
|
|
57
|
-
if (
|
|
60
|
+
if (isPlainObject(fs)) {
|
|
58
61
|
if (!fs.image && !fs.all) {
|
|
59
62
|
conf.userSync.filterSettings.image = {
|
|
60
63
|
bidders: '*',
|
|
@@ -91,12 +94,12 @@ export function newUserSync(userSyncDependencies) {
|
|
|
91
94
|
}
|
|
92
95
|
|
|
93
96
|
try {
|
|
94
|
-
// Image pixels
|
|
95
|
-
fireImagePixels();
|
|
96
97
|
// Iframe syncs
|
|
97
98
|
loadIframes();
|
|
99
|
+
// Image pixels
|
|
100
|
+
fireImagePixels();
|
|
98
101
|
} catch (e) {
|
|
99
|
-
return
|
|
102
|
+
return logError('Error firing user syncs', e);
|
|
100
103
|
}
|
|
101
104
|
// Reset the user sync queue
|
|
102
105
|
queue = getDefaultQueue();
|
|
@@ -106,7 +109,7 @@ export function newUserSync(userSyncDependencies) {
|
|
|
106
109
|
// Randomize the order of the pixels before firing
|
|
107
110
|
// This is to avoid giving any bidder who has registered multiple syncs
|
|
108
111
|
// any preferential treatment and balancing them out
|
|
109
|
-
|
|
112
|
+
shuffle(queue).forEach((sync) => {
|
|
110
113
|
fn(sync);
|
|
111
114
|
hasFiredBidder.add(sync[0]);
|
|
112
115
|
});
|
|
@@ -123,9 +126,9 @@ export function newUserSync(userSyncDependencies) {
|
|
|
123
126
|
}
|
|
124
127
|
forEachFire(queue.image, (sync) => {
|
|
125
128
|
let [bidderName, trackingPixelUrl] = sync;
|
|
126
|
-
|
|
129
|
+
logMessage(`Invoking image pixel user sync for bidder: ${bidderName}`);
|
|
127
130
|
// Create image object and add the src url
|
|
128
|
-
|
|
131
|
+
triggerPixel(trackingPixelUrl);
|
|
129
132
|
});
|
|
130
133
|
}
|
|
131
134
|
|
|
@@ -138,11 +141,21 @@ export function newUserSync(userSyncDependencies) {
|
|
|
138
141
|
if (!(permittedPixels.iframe)) {
|
|
139
142
|
return;
|
|
140
143
|
}
|
|
144
|
+
|
|
141
145
|
forEachFire(queue.iframe, (sync) => {
|
|
142
146
|
let [bidderName, iframeUrl] = sync;
|
|
143
|
-
|
|
147
|
+
logMessage(`Invoking iframe user sync for bidder: ${bidderName}`);
|
|
144
148
|
// Insert iframe into DOM
|
|
145
|
-
|
|
149
|
+
insertUserSyncIframe(iframeUrl);
|
|
150
|
+
// for a bidder, if iframe sync is present then remove image pixel
|
|
151
|
+
removeImagePixelsForBidder(queue, bidderName);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function removeImagePixelsForBidder(queue, iframeSyncBidderName) {
|
|
156
|
+
queue.image = queue.image.filter(imageSync => {
|
|
157
|
+
let imageSyncBidderName = imageSync[0];
|
|
158
|
+
return imageSyncBidderName !== iframeSyncBidderName
|
|
146
159
|
});
|
|
147
160
|
}
|
|
148
161
|
|
|
@@ -177,21 +190,21 @@ export function newUserSync(userSyncDependencies) {
|
|
|
177
190
|
*/
|
|
178
191
|
publicApi.registerSync = (type, bidder, url) => {
|
|
179
192
|
if (hasFiredBidder.has(bidder)) {
|
|
180
|
-
return
|
|
193
|
+
return logMessage(`already fired syncs for "${bidder}", ignoring registerSync call`);
|
|
181
194
|
}
|
|
182
|
-
if (!usConfig.syncEnabled || !
|
|
183
|
-
return
|
|
195
|
+
if (!usConfig.syncEnabled || !isArray(queue[type])) {
|
|
196
|
+
return logWarn(`User sync type "${type}" not supported`);
|
|
184
197
|
}
|
|
185
198
|
if (!bidder) {
|
|
186
|
-
return
|
|
199
|
+
return logWarn(`Bidder is required for registering sync`);
|
|
187
200
|
}
|
|
188
201
|
if (usConfig.syncsPerBidder !== 0 && Number(numAdapterBids[bidder]) >= usConfig.syncsPerBidder) {
|
|
189
|
-
return
|
|
202
|
+
return logWarn(`Number of user syncs exceeded for "${bidder}"`);
|
|
190
203
|
}
|
|
191
204
|
|
|
192
205
|
const canBidderRegisterSync = publicApi.canBidderRegisterSync(type, bidder);
|
|
193
206
|
if (!canBidderRegisterSync) {
|
|
194
|
-
return
|
|
207
|
+
return logWarn(`Bidder "${bidder}" not permitted to register their "${type}" userSync pixels.`);
|
|
195
208
|
}
|
|
196
209
|
|
|
197
210
|
// the bidder's pixel has passed all checks and is allowed to register
|
|
@@ -238,7 +251,7 @@ export function newUserSync(userSyncDependencies) {
|
|
|
238
251
|
*/
|
|
239
252
|
function isFilterConfigValid(filterConfig, type) {
|
|
240
253
|
if (filterConfig.all && filterConfig[type]) {
|
|
241
|
-
|
|
254
|
+
logWarn(`Detected presence of the "filterSettings.all" and "filterSettings.${type}" in userSync config. You cannot mix "all" with "iframe/image" configs; they are mutually exclusive.`);
|
|
242
255
|
return false;
|
|
243
256
|
}
|
|
244
257
|
|
|
@@ -255,12 +268,12 @@ export function newUserSync(userSyncDependencies) {
|
|
|
255
268
|
let biddersField = activeConfig.bidders;
|
|
256
269
|
|
|
257
270
|
if (filterField && filterField !== 'include' && filterField !== 'exclude') {
|
|
258
|
-
|
|
271
|
+
logWarn(`UserSync "filterSettings.${activeConfigName}.filter" setting '${filterField}' is not a valid option; use either 'include' or 'exclude'.`);
|
|
259
272
|
return false;
|
|
260
273
|
}
|
|
261
274
|
|
|
262
|
-
if (biddersField !== '*' && !(Array.isArray(biddersField) && biddersField.length > 0 && biddersField.every(bidderInList =>
|
|
263
|
-
|
|
275
|
+
if (biddersField !== '*' && !(Array.isArray(biddersField) && biddersField.length > 0 && biddersField.every(bidderInList => isStr(bidderInList) && bidderInList !== '*'))) {
|
|
276
|
+
logWarn(`Detected an invalid setup in userSync "filterSettings.${activeConfigName}.bidders"; use either '*' (to represent all bidders) or an array of bidders.`);
|
|
264
277
|
return false;
|
|
265
278
|
}
|
|
266
279
|
|
|
@@ -302,7 +315,7 @@ export function newUserSync(userSyncDependencies) {
|
|
|
302
315
|
return publicApi;
|
|
303
316
|
}
|
|
304
317
|
|
|
305
|
-
const browserSupportsCookies = !
|
|
318
|
+
const browserSupportsCookies = !isSafariBrowser() && storage.cookiesAreEnabled();
|
|
306
319
|
|
|
307
320
|
export const userSync = newUserSync({
|
|
308
321
|
config: config.getConfig('userSync'),
|
package/src/videoCache.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import { ajax } from './ajax.js';
|
|
13
13
|
import { config } from './config.js';
|
|
14
|
-
import
|
|
14
|
+
import { isPlainObject } from './utils.js';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* @typedef {object} CacheableUrlBid
|
|
@@ -73,7 +73,7 @@ function toStorageRequest(bid) {
|
|
|
73
73
|
payload.bidid = bid.requestId;
|
|
74
74
|
payload.aid = bid.auctionId;
|
|
75
75
|
// function has a thisArg set to bidderRequest for accessing the auctionStart
|
|
76
|
-
if (
|
|
76
|
+
if (isPlainObject(this) && this.hasOwnProperty('auctionStart')) {
|
|
77
77
|
payload.timestamp = this.auctionStart;
|
|
78
78
|
}
|
|
79
79
|
}
|
package/test/.eslintrc.js
CHANGED
|
@@ -331,6 +331,61 @@ describe('Adf adapter', function () {
|
|
|
331
331
|
}
|
|
332
332
|
});
|
|
333
333
|
|
|
334
|
+
describe('price floors', function () {
|
|
335
|
+
it('should not add if floors module not configured', function () {
|
|
336
|
+
const validBidRequests = [{ bidId: 'bidId', params: {mid: 1000}, mediaTypes: {video: {}} }];
|
|
337
|
+
let imp = getRequestImps(validBidRequests)[0];
|
|
338
|
+
|
|
339
|
+
assert.equal(imp.bidfloor, undefined);
|
|
340
|
+
assert.equal(imp.bidfloorcur, undefined);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
it('should not add if floor price not defined', function () {
|
|
344
|
+
const validBidRequests = [ getBidWithFloor() ];
|
|
345
|
+
let imp = getRequestImps(validBidRequests)[0];
|
|
346
|
+
|
|
347
|
+
assert.equal(imp.bidfloor, undefined);
|
|
348
|
+
assert.equal(imp.bidfloorcur, 'USD');
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
it('should request floor price in adserver currency', function () {
|
|
352
|
+
config.setConfig({ currency: { adServerCurrency: 'DKK' } });
|
|
353
|
+
const validBidRequests = [ getBidWithFloor() ];
|
|
354
|
+
let imp = getRequestImps(validBidRequests)[0];
|
|
355
|
+
|
|
356
|
+
assert.equal(imp.bidfloor, undefined);
|
|
357
|
+
assert.equal(imp.bidfloorcur, 'DKK');
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it('should add correct floor values', function () {
|
|
361
|
+
const expectedFloors = [ 1, 1.3, 0.5 ];
|
|
362
|
+
const validBidRequests = expectedFloors.map(getBidWithFloor);
|
|
363
|
+
let imps = getRequestImps(validBidRequests);
|
|
364
|
+
|
|
365
|
+
expectedFloors.forEach((floor, index) => {
|
|
366
|
+
assert.equal(imps[index].bidfloor, floor);
|
|
367
|
+
assert.equal(imps[index].bidfloorcur, 'USD');
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
function getBidWithFloor(floor) {
|
|
372
|
+
return {
|
|
373
|
+
params: { mid: 1 },
|
|
374
|
+
mediaTypes: { video: {} },
|
|
375
|
+
getFloor: ({ currency }) => {
|
|
376
|
+
return {
|
|
377
|
+
currency: currency,
|
|
378
|
+
floor
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function getRequestImps(validBidRequests) {
|
|
385
|
+
return JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp;
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
|
|
334
389
|
describe('multiple media types', function () {
|
|
335
390
|
it('should use single media type for bidding', function () {
|
|
336
391
|
let validBidRequests = [{
|