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
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { _each, isPlainObject, isArray, deepAccess } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
3
|
import find from 'core-js-pure/features/array/find.js'
|
|
4
4
|
import { VIDEO, BANNER } from '../src/mediaTypes.js'
|
|
5
5
|
import { Renderer } from '../src/Renderer.js'
|
|
6
|
+
import { config } from '../src/config.js';
|
|
6
7
|
|
|
7
8
|
const ENDPOINT = 'https://ad.yieldlab.net'
|
|
8
9
|
const BIDDER_CODE = 'yieldlab'
|
|
@@ -36,7 +37,7 @@ export const spec = {
|
|
|
36
37
|
json: true
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
_each(validBidRequests, function (bid) {
|
|
40
41
|
adslotIds.push(bid.params.adslotId)
|
|
41
42
|
if (bid.params.targeting) {
|
|
42
43
|
query.t = createTargetingString(bid.params.targeting)
|
|
@@ -44,14 +45,19 @@ export const spec = {
|
|
|
44
45
|
if (bid.userIdAsEids && Array.isArray(bid.userIdAsEids)) {
|
|
45
46
|
query.ids = createUserIdString(bid.userIdAsEids)
|
|
46
47
|
}
|
|
47
|
-
if (bid.params.customParams &&
|
|
48
|
+
if (bid.params.customParams && isPlainObject(bid.params.customParams)) {
|
|
48
49
|
for (let prop in bid.params.customParams) {
|
|
49
50
|
query[prop] = bid.params.customParams[prop]
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
|
-
if (bid.schain &&
|
|
53
|
+
if (bid.schain && isPlainObject(bid.schain) && Array.isArray(bid.schain.nodes)) {
|
|
53
54
|
query.schain = createSchainString(bid.schain)
|
|
54
55
|
}
|
|
56
|
+
|
|
57
|
+
const iabContent = getContentObject(bid)
|
|
58
|
+
if (iabContent) {
|
|
59
|
+
query.iab_content = createIabContentString(iabContent)
|
|
60
|
+
}
|
|
55
61
|
})
|
|
56
62
|
|
|
57
63
|
if (bidderRequest) {
|
|
@@ -98,13 +104,14 @@ export const spec = {
|
|
|
98
104
|
})
|
|
99
105
|
|
|
100
106
|
if (matchedBid) {
|
|
101
|
-
const adUnitSize = bidRequest.sizes.length === 2 && !
|
|
107
|
+
const adUnitSize = bidRequest.sizes.length === 2 && !isArray(bidRequest.sizes[0]) ? bidRequest.sizes : bidRequest.sizes[0]
|
|
102
108
|
const adSize = bidRequest.params.adSize !== undefined ? parseSize(bidRequest.params.adSize) : (matchedBid.adsize !== undefined) ? parseSize(matchedBid.adsize) : adUnitSize
|
|
103
109
|
const extId = bidRequest.params.extId !== undefined ? '&id=' + bidRequest.params.extId : ''
|
|
104
110
|
const adType = matchedBid.adtype !== undefined ? matchedBid.adtype : ''
|
|
105
111
|
const gdprApplies = reqParams.gdpr ? '&gdpr=' + reqParams.gdpr : ''
|
|
106
112
|
const gdprConsent = reqParams.consent ? '&consent=' + reqParams.consent : ''
|
|
107
113
|
const pvId = matchedBid.pvid !== undefined ? '&pvid=' + matchedBid.pvid : ''
|
|
114
|
+
const iabContent = reqParams.iab_content ? '&iab_content=' + reqParams.iab_content : ''
|
|
108
115
|
|
|
109
116
|
const bidResponse = {
|
|
110
117
|
requestId: bidRequest.bidId,
|
|
@@ -117,7 +124,7 @@ export const spec = {
|
|
|
117
124
|
netRevenue: false,
|
|
118
125
|
ttl: BID_RESPONSE_TTL_SEC,
|
|
119
126
|
referrer: '',
|
|
120
|
-
ad: `<script src="${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}"></script>`,
|
|
127
|
+
ad: `<script src="${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}${iabContent}"></script>`,
|
|
121
128
|
meta: {
|
|
122
129
|
advertiserDomains: (matchedBid.advertiser) ? matchedBid.advertiser : 'n/a'
|
|
123
130
|
}
|
|
@@ -130,7 +137,7 @@ export const spec = {
|
|
|
130
137
|
bidResponse.height = playersize[1]
|
|
131
138
|
}
|
|
132
139
|
bidResponse.mediaType = VIDEO
|
|
133
|
-
bidResponse.vastUrl = `${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}`
|
|
140
|
+
bidResponse.vastUrl = `${ENDPOINT}/d/${matchedBid.id}/${bidRequest.params.supplyId}/?ts=${timestamp}${extId}${gdprApplies}${gdprConsent}${pvId}${iabContent}`
|
|
134
141
|
if (isOutstream(bidRequest)) {
|
|
135
142
|
const renderer = Renderer.install({
|
|
136
143
|
id: bidRequest.bidId,
|
|
@@ -156,7 +163,7 @@ export const spec = {
|
|
|
156
163
|
* @returns {Boolean}
|
|
157
164
|
*/
|
|
158
165
|
function isVideo (format, adtype) {
|
|
159
|
-
return
|
|
166
|
+
return deepAccess(format, 'mediaTypes.video') && adtype.toLowerCase() === 'video'
|
|
160
167
|
}
|
|
161
168
|
|
|
162
169
|
/**
|
|
@@ -165,7 +172,7 @@ function isVideo (format, adtype) {
|
|
|
165
172
|
* @returns {Boolean}
|
|
166
173
|
*/
|
|
167
174
|
function isOutstream (format) {
|
|
168
|
-
let context =
|
|
175
|
+
let context = deepAccess(format, 'mediaTypes.video.context')
|
|
169
176
|
return (context === 'outstream')
|
|
170
177
|
}
|
|
171
178
|
|
|
@@ -175,8 +182,8 @@ function isOutstream (format) {
|
|
|
175
182
|
* @returns {Array}
|
|
176
183
|
*/
|
|
177
184
|
function getPlayerSize (format) {
|
|
178
|
-
let playerSize =
|
|
179
|
-
return (playerSize &&
|
|
185
|
+
let playerSize = deepAccess(format, 'mediaTypes.video.playerSize')
|
|
186
|
+
return (playerSize && isArray(playerSize[0])) ? playerSize[0] : playerSize
|
|
180
187
|
}
|
|
181
188
|
|
|
182
189
|
/**
|
|
@@ -211,7 +218,7 @@ function createQueryString (obj) {
|
|
|
211
218
|
for (var p in obj) {
|
|
212
219
|
if (obj.hasOwnProperty(p)) {
|
|
213
220
|
let val = obj[p]
|
|
214
|
-
if (p !== 'schain') {
|
|
221
|
+
if (p !== 'schain' && p !== 'iab_content') {
|
|
215
222
|
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(val))
|
|
216
223
|
} else {
|
|
217
224
|
str.push(p + '=' + val)
|
|
@@ -253,6 +260,44 @@ function createSchainString (schain) {
|
|
|
253
260
|
return `${ver},${complete}${nodesString}`
|
|
254
261
|
}
|
|
255
262
|
|
|
263
|
+
/**
|
|
264
|
+
* Get content object from bid request
|
|
265
|
+
* First get content from bidder params;
|
|
266
|
+
* If not provided in bidder params, get from first party data under 'ortb2.site.content' or 'ortb2.app.content'
|
|
267
|
+
* @param {Object} bid
|
|
268
|
+
* @returns {Object}
|
|
269
|
+
*/
|
|
270
|
+
function getContentObject(bid) {
|
|
271
|
+
if (bid.params.iabContent && isPlainObject(bid.params.iabContent)) {
|
|
272
|
+
return bid.params.iabContent
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const globalContent = config.getConfig('ortb2.site') ? config.getConfig('ortb2.site.content')
|
|
276
|
+
: config.getConfig('ortb2.app.content')
|
|
277
|
+
if (globalContent && isPlainObject(globalContent)) {
|
|
278
|
+
return globalContent
|
|
279
|
+
}
|
|
280
|
+
return undefined
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Creates a string for iab_content object
|
|
285
|
+
* @param {Object} iabContent
|
|
286
|
+
* @returns {String}
|
|
287
|
+
*/
|
|
288
|
+
function createIabContentString(iabContent) {
|
|
289
|
+
const arrKeys = ['keywords', 'cat']
|
|
290
|
+
let str = []
|
|
291
|
+
for (let key in iabContent) {
|
|
292
|
+
if (iabContent.hasOwnProperty(key)) {
|
|
293
|
+
const value = (arrKeys.indexOf(key) !== -1 && Array.isArray(iabContent[key]))
|
|
294
|
+
? iabContent[key].map(node => encodeURIComponent(node)).join('|') : encodeURIComponent(iabContent[key])
|
|
295
|
+
str.push(''.concat(key, ':', value))
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return encodeURIComponent(str.join(','))
|
|
299
|
+
}
|
|
300
|
+
|
|
256
301
|
/**
|
|
257
302
|
* Encodes URI Component with exlamation mark included. Needed for schain object.
|
|
258
303
|
* @param {String} str
|
|
@@ -25,7 +25,22 @@ Module that connects to Yieldlab's demand sources
|
|
|
25
25
|
key1: "value1",
|
|
26
26
|
key2: "value2"
|
|
27
27
|
},
|
|
28
|
-
extId: "abc"
|
|
28
|
+
extId: "abc",
|
|
29
|
+
iabContent: {
|
|
30
|
+
id: "some_id",
|
|
31
|
+
episode: "1",
|
|
32
|
+
title: "some title",
|
|
33
|
+
series: "some series",
|
|
34
|
+
season: "s1",
|
|
35
|
+
artist: "John Doe",
|
|
36
|
+
genre: "some genre",
|
|
37
|
+
isrc: "CC-XXX-YY-NNNNN",
|
|
38
|
+
url: "http://foo_url.de",
|
|
39
|
+
cat: ["IAB1-1", "IAB1-2", "IAB2-10"],
|
|
40
|
+
context: "7",
|
|
41
|
+
keywords: ["k1", "k2"],
|
|
42
|
+
live: "0"
|
|
43
|
+
}
|
|
29
44
|
}
|
|
30
45
|
}]
|
|
31
46
|
}, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { deepSetValue, logInfo, deepAccess } from '../src/utils.js';
|
|
1
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
-
import * as utils from '../src/utils.js';
|
|
3
3
|
import {BANNER} from '../src/mediaTypes.js';
|
|
4
4
|
|
|
5
5
|
const ENDPOINT_URL = 'https://x.yieldlift.com/auction';
|
|
@@ -58,18 +58,18 @@ export const spec = {
|
|
|
58
58
|
|
|
59
59
|
// adding schain object
|
|
60
60
|
if (validBidRequests[0].schain) {
|
|
61
|
-
|
|
61
|
+
deepSetValue(openrtbRequest, 'source.ext.schain', validBidRequests[0].schain);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
// Attaching GDPR Consent Params
|
|
65
65
|
if (bidderRequest.gdprConsent) {
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
deepSetValue(openrtbRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
|
|
67
|
+
deepSetValue(openrtbRequest, 'regs.ext.gdpr', (bidderRequest.gdprConsent.gdprApplies ? 1 : 0));
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// CCPA
|
|
71
71
|
if (bidderRequest.uspConsent) {
|
|
72
|
-
|
|
72
|
+
deepSetValue(openrtbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
const payloadString = JSON.stringify(openrtbRequest);
|
|
@@ -102,12 +102,12 @@ export const spec = {
|
|
|
102
102
|
})
|
|
103
103
|
})
|
|
104
104
|
} else {
|
|
105
|
-
|
|
105
|
+
logInfo('yieldlift.interpretResponse :: no valid responses to interpret');
|
|
106
106
|
}
|
|
107
107
|
return bidResponses;
|
|
108
108
|
},
|
|
109
109
|
getUserSyncs: function (syncOptions, serverResponses) {
|
|
110
|
-
|
|
110
|
+
logInfo('yieldlift.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses);
|
|
111
111
|
let syncs = [];
|
|
112
112
|
|
|
113
113
|
if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) {
|
|
@@ -115,7 +115,7 @@ export const spec = {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
serverResponses.forEach(resp => {
|
|
118
|
-
const userSync =
|
|
118
|
+
const userSync = deepAccess(resp, 'body.ext.usersync');
|
|
119
119
|
if (userSync) {
|
|
120
120
|
let syncDetails = [];
|
|
121
121
|
Object.keys(userSync).forEach(key => {
|
|
@@ -139,7 +139,7 @@ export const spec = {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
});
|
|
142
|
-
|
|
142
|
+
logInfo('yieldlift.getUserSyncs result=%o', syncs);
|
|
143
143
|
return syncs;
|
|
144
144
|
},
|
|
145
145
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { isNumber, isStr, isInteger, isBoolean, isArray, isEmpty, isArrayOfNums, getWindowTop, parseQueryStringParameters, parseUrl, deepSetValue, deepAccess, logError } from '../src/utils.js';
|
|
2
2
|
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { Renderer } from '../src/Renderer.js';
|
|
5
5
|
import includes from 'core-js-pure/features/array/includes';
|
|
6
6
|
import find from 'core-js-pure/features/array/find.js';
|
|
7
|
+
import { createEidsArray } from './userId/eids.js';
|
|
7
8
|
|
|
8
9
|
const BIDDER_CODE = 'yieldmo';
|
|
9
10
|
const CURRENCY = 'USD';
|
|
@@ -15,7 +16,7 @@ const OUTSTREAM_VIDEO_PLAYER_URL = 'https://prebid-outstream.yieldmo.com/bundle.
|
|
|
15
16
|
const OPENRTB_VIDEO_BIDPARAMS = ['mimes', 'startdelay', 'placement', 'startdelay', 'skipafter', 'protocols', 'api',
|
|
16
17
|
'playbackmethod', 'maxduration', 'minduration', 'pos', 'skip', 'skippable'];
|
|
17
18
|
const OPENRTB_VIDEO_SITEPARAMS = ['name', 'domain', 'cat', 'keywords'];
|
|
18
|
-
const LOCAL_WINDOW =
|
|
19
|
+
const LOCAL_WINDOW = getWindowTop();
|
|
19
20
|
const DEFAULT_PLAYBACK_METHOD = 2;
|
|
20
21
|
const DEFAULT_START_DELAY = 0;
|
|
21
22
|
const VAST_TIMEOUT = 15000;
|
|
@@ -46,8 +47,8 @@ export const spec = {
|
|
|
46
47
|
buildRequests: function (bidRequests, bidderRequest) {
|
|
47
48
|
const bannerBidRequests = bidRequests.filter(request => hasBannerMediaType(request));
|
|
48
49
|
const videoBidRequests = bidRequests.filter(request => hasVideoMediaType(request));
|
|
49
|
-
|
|
50
50
|
let serverRequests = [];
|
|
51
|
+
const eids = getEids(bidRequests[0]) || [];
|
|
51
52
|
if (bannerBidRequests.length > 0) {
|
|
52
53
|
let serverRequest = {
|
|
53
54
|
pbav: '$prebid.version$',
|
|
@@ -63,10 +64,10 @@ export const spec = {
|
|
|
63
64
|
h: LOCAL_WINDOW.innerHeight,
|
|
64
65
|
userConsent: JSON.stringify({
|
|
65
66
|
// case of undefined, stringify will remove param
|
|
66
|
-
gdprApplies:
|
|
67
|
-
cmp:
|
|
67
|
+
gdprApplies: deepAccess(bidderRequest, 'gdprConsent.gdprApplies') || '',
|
|
68
|
+
cmp: deepAccess(bidderRequest, 'gdprConsent.consentString') || ''
|
|
68
69
|
}),
|
|
69
|
-
us_privacy:
|
|
70
|
+
us_privacy: deepAccess(bidderRequest, 'uspConsent') || ''
|
|
70
71
|
};
|
|
71
72
|
|
|
72
73
|
const mtp = window.navigator.maxTouchPoints;
|
|
@@ -93,14 +94,17 @@ export const spec = {
|
|
|
93
94
|
if (request.schain) {
|
|
94
95
|
serverRequest.schain = JSON.stringify(request.schain);
|
|
95
96
|
}
|
|
96
|
-
if (
|
|
97
|
+
if (deepAccess(request, 'params.lr_env')) {
|
|
97
98
|
serverRequest.ats_envelope = request.params.lr_env;
|
|
98
99
|
}
|
|
99
100
|
});
|
|
100
101
|
serverRequest.p = '[' + serverRequest.p.toString() + ']';
|
|
101
102
|
|
|
103
|
+
if (eids.length) {
|
|
104
|
+
serverRequest.eids = JSON.stringify(eids);
|
|
105
|
+
};
|
|
102
106
|
// check if url exceeded max length
|
|
103
|
-
const url = `${BANNER_SERVER_ENDPOINT}?${
|
|
107
|
+
const url = `${BANNER_SERVER_ENDPOINT}?${parseQueryStringParameters(serverRequest)}`;
|
|
104
108
|
let extraCharacters = url.length - MAX_BANNER_REQUEST_URL_LENGTH;
|
|
105
109
|
if (extraCharacters > 0) {
|
|
106
110
|
for (let i = 0; i < BANNER_REQUEST_PROPERTIES_TO_REDUCE.length; i++) {
|
|
@@ -121,6 +125,9 @@ export const spec = {
|
|
|
121
125
|
|
|
122
126
|
if (videoBidRequests.length > 0) {
|
|
123
127
|
const serverRequest = openRtbRequest(videoBidRequests, bidderRequest);
|
|
128
|
+
if (eids.length) {
|
|
129
|
+
serverRequest.user = { eids };
|
|
130
|
+
};
|
|
124
131
|
serverRequests.push({
|
|
125
132
|
method: 'POST',
|
|
126
133
|
url: VIDEO_SERVER_ENDPOINT,
|
|
@@ -167,14 +174,14 @@ registerBidder(spec);
|
|
|
167
174
|
* @param {BidRequest} bidRequest bid request
|
|
168
175
|
*/
|
|
169
176
|
function hasBannerMediaType(bidRequest) {
|
|
170
|
-
return !!
|
|
177
|
+
return !!deepAccess(bidRequest, 'mediaTypes.banner');
|
|
171
178
|
}
|
|
172
179
|
|
|
173
180
|
/**
|
|
174
181
|
* @param {BidRequest} bidRequest bid request
|
|
175
182
|
*/
|
|
176
183
|
function hasVideoMediaType(bidRequest) {
|
|
177
|
-
return !!
|
|
184
|
+
return !!deepAccess(bidRequest, 'mediaTypes.video');
|
|
178
185
|
}
|
|
179
186
|
|
|
180
187
|
/**
|
|
@@ -182,7 +189,7 @@ function hasVideoMediaType(bidRequest) {
|
|
|
182
189
|
* @param request bid request
|
|
183
190
|
*/
|
|
184
191
|
function addPlacement(request) {
|
|
185
|
-
const gpid =
|
|
192
|
+
const gpid = deepAccess(request, 'ortb2Imp.ext.data.pbadslot');
|
|
186
193
|
const placementInfo = {
|
|
187
194
|
placement_id: request.adUnitCode,
|
|
188
195
|
callback_id: request.bidId,
|
|
@@ -231,7 +238,7 @@ function createNewBannerBid(response) {
|
|
|
231
238
|
* @param bidRequest server request
|
|
232
239
|
*/
|
|
233
240
|
function createNewVideoBid(response, bidRequest) {
|
|
234
|
-
const imp = find((
|
|
241
|
+
const imp = find((deepAccess(bidRequest, 'data.imp') || []), imp => imp.id === response.impid);
|
|
235
242
|
|
|
236
243
|
let result = {
|
|
237
244
|
requestId: imp.id,
|
|
@@ -310,7 +317,7 @@ function getPageDescription() {
|
|
|
310
317
|
* @returns an id if there is one, or undefined
|
|
311
318
|
*/
|
|
312
319
|
function getId(request, idType) {
|
|
313
|
-
return (typeof
|
|
320
|
+
return (typeof deepAccess(request, 'userId') === 'object') ? request.userId[idType] : undefined;
|
|
314
321
|
}
|
|
315
322
|
|
|
316
323
|
/**
|
|
@@ -348,7 +355,7 @@ function openRtbRequest(bidRequests, bidderRequest) {
|
|
|
348
355
|
* @return Object OpenRTB's 'imp' (impression) object
|
|
349
356
|
*/
|
|
350
357
|
function openRtbImpression(bidRequest) {
|
|
351
|
-
const gpid =
|
|
358
|
+
const gpid = deepAccess(bidRequest, 'ortb2Imp.ext.data.pbadslot');
|
|
352
359
|
const size = extractPlayerSize(bidRequest);
|
|
353
360
|
const imp = {
|
|
354
361
|
id: bidRequest.bidId,
|
|
@@ -364,12 +371,12 @@ function openRtbImpression(bidRequest) {
|
|
|
364
371
|
}
|
|
365
372
|
};
|
|
366
373
|
|
|
367
|
-
const mediaTypesParams =
|
|
374
|
+
const mediaTypesParams = deepAccess(bidRequest, 'mediaTypes.video');
|
|
368
375
|
Object.keys(mediaTypesParams)
|
|
369
376
|
.filter(param => includes(OPENRTB_VIDEO_BIDPARAMS, param))
|
|
370
377
|
.forEach(param => imp.video[param] = mediaTypesParams[param]);
|
|
371
378
|
|
|
372
|
-
const videoParams =
|
|
379
|
+
const videoParams = deepAccess(bidRequest, 'params.video');
|
|
373
380
|
Object.keys(videoParams)
|
|
374
381
|
.filter(param => includes(OPENRTB_VIDEO_BIDPARAMS, param))
|
|
375
382
|
.forEach(param => imp.video[param] = videoParams[param]);
|
|
@@ -403,10 +410,10 @@ function getBidFloor(bidRequest, mediaType) {
|
|
|
403
410
|
* @return [number, number] || null Player's width and height, or undefined otherwise.
|
|
404
411
|
*/
|
|
405
412
|
function extractPlayerSize(bidRequest) {
|
|
406
|
-
const sizeArr =
|
|
407
|
-
if (
|
|
413
|
+
const sizeArr = deepAccess(bidRequest, 'mediaTypes.video.playerSize');
|
|
414
|
+
if (isArrayOfNums(sizeArr, 2)) {
|
|
408
415
|
return sizeArr;
|
|
409
|
-
} else if (
|
|
416
|
+
} else if (isArray(sizeArr) && isArrayOfNums(sizeArr[0], 2)) {
|
|
410
417
|
return sizeArr[0];
|
|
411
418
|
}
|
|
412
419
|
return null;
|
|
@@ -420,8 +427,8 @@ function extractPlayerSize(bidRequest) {
|
|
|
420
427
|
function openRtbSite(bidRequest, bidderRequest) {
|
|
421
428
|
let result = {};
|
|
422
429
|
|
|
423
|
-
const loc =
|
|
424
|
-
if (!
|
|
430
|
+
const loc = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer'));
|
|
431
|
+
if (!isEmpty(loc)) {
|
|
425
432
|
result.page = `${loc.protocol}://${loc.hostname}${loc.pathname}`;
|
|
426
433
|
}
|
|
427
434
|
|
|
@@ -434,7 +441,7 @@ function openRtbSite(bidRequest, bidderRequest) {
|
|
|
434
441
|
result.keywords = keywords.content;
|
|
435
442
|
}
|
|
436
443
|
|
|
437
|
-
const siteParams =
|
|
444
|
+
const siteParams = deepAccess(bidRequest, 'params.site');
|
|
438
445
|
if (siteParams) {
|
|
439
446
|
Object.keys(siteParams)
|
|
440
447
|
.filter(param => includes(OPENRTB_VIDEO_SITEPARAMS, param))
|
|
@@ -447,14 +454,10 @@ function openRtbSite(bidRequest, bidderRequest) {
|
|
|
447
454
|
* @return Object OpenRTB's 'device' object
|
|
448
455
|
*/
|
|
449
456
|
function openRtbDevice(bidRequest) {
|
|
450
|
-
const ip = utils.deepAccess(bidRequest, 'params.device.ip');
|
|
451
457
|
const deviceObj = {
|
|
452
458
|
ua: navigator.userAgent,
|
|
453
459
|
language: (navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage),
|
|
454
460
|
};
|
|
455
|
-
if (ip) {
|
|
456
|
-
deviceObj.ip = ip;
|
|
457
|
-
}
|
|
458
461
|
return deviceObj;
|
|
459
462
|
}
|
|
460
463
|
|
|
@@ -466,12 +469,12 @@ function openRtbDevice(bidRequest) {
|
|
|
466
469
|
function populateOpenRtbGdpr(openRtbRequest, bidderRequest) {
|
|
467
470
|
const gdpr = bidderRequest.gdprConsent;
|
|
468
471
|
if (gdpr && 'gdprApplies' in gdpr) {
|
|
469
|
-
|
|
470
|
-
|
|
472
|
+
deepSetValue(openRtbRequest, 'regs.ext.gdpr', gdpr.gdprApplies ? 1 : 0);
|
|
473
|
+
deepSetValue(openRtbRequest, 'user.ext.consent', gdpr.consentString);
|
|
471
474
|
}
|
|
472
|
-
const uspConsent =
|
|
475
|
+
const uspConsent = deepAccess(bidderRequest, 'uspConsent');
|
|
473
476
|
if (uspConsent) {
|
|
474
|
-
|
|
477
|
+
deepSetValue(openRtbRequest, 'regs.ext.us_privacy', uspConsent);
|
|
475
478
|
}
|
|
476
479
|
}
|
|
477
480
|
|
|
@@ -504,8 +507,8 @@ function validateVideoParams(bid) {
|
|
|
504
507
|
if (fieldPath.indexOf('video') === 0) {
|
|
505
508
|
const valueFieldPath = 'params.' + fieldPath;
|
|
506
509
|
const mediaFieldPath = 'mediaTypes.' + fieldPath;
|
|
507
|
-
const valueParams =
|
|
508
|
-
const mediaTypesParams =
|
|
510
|
+
const valueParams = deepAccess(bid, valueFieldPath);
|
|
511
|
+
const mediaTypesParams = deepAccess(bid, mediaFieldPath);
|
|
509
512
|
const hasValidValueParams = validateCb(valueParams);
|
|
510
513
|
const hasValidMediaTypesParams = validateCb(mediaTypesParams);
|
|
511
514
|
|
|
@@ -517,7 +520,7 @@ function validateVideoParams(bid) {
|
|
|
517
520
|
}
|
|
518
521
|
return valueParams || mediaTypesParams;
|
|
519
522
|
} else {
|
|
520
|
-
const value =
|
|
523
|
+
const value = deepAccess(bid, fieldPath);
|
|
521
524
|
if (!validateCb(value)) {
|
|
522
525
|
errorCb(fieldPath, value, errorCbParam);
|
|
523
526
|
}
|
|
@@ -526,16 +529,16 @@ function validateVideoParams(bid) {
|
|
|
526
529
|
}
|
|
527
530
|
|
|
528
531
|
try {
|
|
529
|
-
validate('video.context', val => !
|
|
532
|
+
validate('video.context', val => !isEmpty(val), paramRequired);
|
|
530
533
|
|
|
531
|
-
validate('params.placementId', val => !
|
|
534
|
+
validate('params.placementId', val => !isEmpty(val), paramRequired);
|
|
532
535
|
|
|
533
|
-
validate('video.playerSize', val =>
|
|
534
|
-
(
|
|
536
|
+
validate('video.playerSize', val => isArrayOfNums(val, 2) ||
|
|
537
|
+
(isArray(val) && val.every(v => isArrayOfNums(v, 2))),
|
|
535
538
|
paramInvalid, 'array of 2 integers, ex: [640,480] or [[640,480]]');
|
|
536
539
|
|
|
537
540
|
validate('video.mimes', val => isDefined(val), paramRequired);
|
|
538
|
-
validate('video.mimes', val =>
|
|
541
|
+
validate('video.mimes', val => isArray(val) && val.every(v => isStr(v)), paramInvalid,
|
|
539
542
|
'array of strings, ex: ["video/mp4"]');
|
|
540
543
|
|
|
541
544
|
const placement = validate('video.placement', val => isDefined(val), paramRequired);
|
|
@@ -543,33 +546,33 @@ function validateVideoParams(bid) {
|
|
|
543
546
|
if (placement === 1) {
|
|
544
547
|
validate('video.startdelay', val => isDefined(val),
|
|
545
548
|
(field, v) => paramRequired(field, v, 'placement == 1'));
|
|
546
|
-
validate('video.startdelay', val =>
|
|
549
|
+
validate('video.startdelay', val => isNumber(val), paramInvalid, 'number, ex: 5');
|
|
547
550
|
}
|
|
548
551
|
|
|
549
552
|
validate('video.protocols', val => isDefined(val), paramRequired);
|
|
550
|
-
validate('video.protocols', val =>
|
|
553
|
+
validate('video.protocols', val => isArrayOfNums(val) && val.every(v => (v >= 1 && v <= 6)),
|
|
551
554
|
paramInvalid, 'array of numbers, ex: [2,3]');
|
|
552
555
|
|
|
553
556
|
validate('video.api', val => isDefined(val), paramRequired);
|
|
554
|
-
validate('video.api', val =>
|
|
557
|
+
validate('video.api', val => isArrayOfNums(val) && val.every(v => (v >= 1 && v <= 6)),
|
|
555
558
|
paramInvalid, 'array of numbers, ex: [2,3]');
|
|
556
559
|
|
|
557
|
-
validate('video.playbackmethod', val => !isDefined(val) ||
|
|
560
|
+
validate('video.playbackmethod', val => !isDefined(val) || isArrayOfNums(val), paramInvalid,
|
|
558
561
|
'array of integers, ex: [2,6]');
|
|
559
562
|
|
|
560
563
|
validate('video.maxduration', val => isDefined(val), paramRequired);
|
|
561
|
-
validate('video.maxduration', val =>
|
|
562
|
-
validate('video.minduration', val => !isDefined(val) ||
|
|
563
|
-
validate('video.skippable', val => !isDefined(val) ||
|
|
564
|
-
validate('video.skipafter', val => !isDefined(val) ||
|
|
565
|
-
validate('video.pos', val => !isDefined(val) ||
|
|
566
|
-
validate('params.badv', val => !isDefined(val) ||
|
|
564
|
+
validate('video.maxduration', val => isInteger(val), paramInvalid);
|
|
565
|
+
validate('video.minduration', val => !isDefined(val) || isNumber(val), paramInvalid);
|
|
566
|
+
validate('video.skippable', val => !isDefined(val) || isBoolean(val), paramInvalid);
|
|
567
|
+
validate('video.skipafter', val => !isDefined(val) || isNumber(val), paramInvalid);
|
|
568
|
+
validate('video.pos', val => !isDefined(val) || isNumber(val), paramInvalid);
|
|
569
|
+
validate('params.badv', val => !isDefined(val) || isArray(val), paramInvalid,
|
|
567
570
|
'array of strings, ex: ["ford.com","pepsi.com"]');
|
|
568
|
-
validate('params.bcat', val => !isDefined(val) ||
|
|
571
|
+
validate('params.bcat', val => !isDefined(val) || isArray(val), paramInvalid,
|
|
569
572
|
'array of strings, ex: ["IAB1-5","IAB1-6"]');
|
|
570
573
|
return true;
|
|
571
574
|
} catch (e) {
|
|
572
|
-
|
|
575
|
+
logError(e.message);
|
|
573
576
|
return false;
|
|
574
577
|
}
|
|
575
578
|
}
|
|
@@ -595,3 +598,14 @@ function shortcutProperty(extraCharacters, target, propertyName) {
|
|
|
595
598
|
|
|
596
599
|
return charactersLeft;
|
|
597
600
|
}
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Creates and returnes eids arr using createEidsArray from './userId/eids.js' module;
|
|
604
|
+
* @param {Object} openRtbRequest OpenRTB's request as a cource of userId.
|
|
605
|
+
* @return array of eids objects
|
|
606
|
+
*/
|
|
607
|
+
function getEids(bidRequest) {
|
|
608
|
+
if (deepAccess(bidRequest, 'userId')) {
|
|
609
|
+
return createEidsArray(bidRequest.userId) || [];
|
|
610
|
+
}
|
|
611
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { isArray, deepClone } from '../src/utils.js';
|
|
1
2
|
import {ajax} from '../src/ajax.js';
|
|
2
3
|
import adapter from '../src/AnalyticsAdapter.js';
|
|
3
4
|
import CONSTANTS from '../src/constants.json';
|
|
4
5
|
import adapterManager from '../src/adapterManager.js';
|
|
5
6
|
import { targeting } from '../src/targeting.js';
|
|
6
7
|
import { auctionManager } from '../src/auctionManager.js';
|
|
7
|
-
import * as utils from '../src/utils.js';
|
|
8
8
|
|
|
9
9
|
const ANALYTICS_CODE = 'yieldone';
|
|
10
10
|
const analyticsType = 'endpoint';
|
|
@@ -42,7 +42,7 @@ function makeAdUnitNameMap() {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function addAdUnitNameForArray(ar, map) {
|
|
45
|
-
if (
|
|
45
|
+
if (isArray(ar)) {
|
|
46
46
|
ar.forEach((it) => { addAdUnitName(it, map) });
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -51,14 +51,14 @@ function addAdUnitName(params, map) {
|
|
|
51
51
|
if (params.adUnitCode && map[params.adUnitCode]) {
|
|
52
52
|
params.adUnitName = map[params.adUnitCode];
|
|
53
53
|
}
|
|
54
|
-
if (
|
|
54
|
+
if (isArray(params.adUnits)) {
|
|
55
55
|
params.adUnits.forEach((adUnit) => {
|
|
56
56
|
if (adUnit.code && map[adUnit.code]) {
|
|
57
57
|
adUnit.name = map[adUnit.code];
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
|
-
if (
|
|
61
|
+
if (isArray(params.adUnitCodes)) {
|
|
62
62
|
params.adUnitNames = params.adUnitCodes.map((code) => map[code]);
|
|
63
63
|
}
|
|
64
64
|
['bids', 'bidderRequests', 'bidsReceived', 'noBids'].forEach((it) => {
|
|
@@ -71,13 +71,13 @@ const yieldoneAnalytics = Object.assign(adapter({analyticsType}), {
|
|
|
71
71
|
track({eventType, args = {}}) {
|
|
72
72
|
if (eventType === CONSTANTS.EVENTS.BID_REQUESTED) {
|
|
73
73
|
const reqBidderId = `${args.bidderCode}_${args.auctionId}`;
|
|
74
|
-
requestedBidders[reqBidderId] =
|
|
74
|
+
requestedBidders[reqBidderId] = deepClone(args);
|
|
75
75
|
requestedBidders[reqBidderId].bids = [];
|
|
76
76
|
args.bids.forEach((bid) => {
|
|
77
77
|
requestedBids[`${bid.bidId}_${bid.auctionId}`] = bid;
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
-
if (eventType === CONSTANTS.EVENTS.BID_TIMEOUT &&
|
|
80
|
+
if (eventType === CONSTANTS.EVENTS.BID_TIMEOUT && isArray(args)) {
|
|
81
81
|
const eventsStorage = yieldoneAnalytics.eventsStorage;
|
|
82
82
|
const reqBidders = {};
|
|
83
83
|
args.forEach((bid) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { deepAccess, isEmpty, parseSizesInput, isStr, logWarn } from '../src/utils.js';
|
|
2
2
|
import {config} from '../src/config.js';
|
|
3
3
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { Renderer } from '../src/Renderer.js';
|
|
@@ -40,21 +40,21 @@ export const spec = {
|
|
|
40
40
|
t: 'i'
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
const videoMediaType =
|
|
44
|
-
if ((
|
|
43
|
+
const videoMediaType = deepAccess(bidRequest, 'mediaTypes.video');
|
|
44
|
+
if ((isEmpty(bidRequest.mediaType) && isEmpty(bidRequest.mediaTypes)) ||
|
|
45
45
|
(bidRequest.mediaType === BANNER || (bidRequest.mediaTypes && bidRequest.mediaTypes[BANNER]))) {
|
|
46
|
-
const sizes =
|
|
47
|
-
payload.sz =
|
|
46
|
+
const sizes = deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes;
|
|
47
|
+
payload.sz = parseSizesInput(sizes).join(',');
|
|
48
48
|
} else if (bidRequest.mediaType === VIDEO || videoMediaType) {
|
|
49
|
-
const sizes =
|
|
50
|
-
const size =
|
|
49
|
+
const sizes = deepAccess(bidRequest, 'mediaTypes.video.playerSize') || bidRequest.sizes;
|
|
50
|
+
const size = parseSizesInput(sizes)[0];
|
|
51
51
|
payload.w = size.split('x')[0];
|
|
52
52
|
payload.h = size.split('x')[1];
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// LiveRampID
|
|
56
|
-
const idlEnv =
|
|
57
|
-
if (
|
|
56
|
+
const idlEnv = deepAccess(bidRequest, 'userId.idl_env');
|
|
57
|
+
if (isStr(idlEnv) && !isEmpty(idlEnv)) {
|
|
58
58
|
payload.lr_env = idlEnv;
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -177,7 +177,7 @@ function newRenderer(response) {
|
|
|
177
177
|
try {
|
|
178
178
|
renderer.setRender(outstreamRender);
|
|
179
179
|
} catch (err) {
|
|
180
|
-
|
|
180
|
+
logWarn('Prebid Error calling setRender on newRenderer', err);
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
return renderer;
|
|
@@ -199,7 +199,7 @@ function newCmerRenderer(response) {
|
|
|
199
199
|
try {
|
|
200
200
|
renderer.setRender(cmerRender);
|
|
201
201
|
} catch (err) {
|
|
202
|
-
|
|
202
|
+
logWarn('Prebid Error calling setRender on newRenderer', err);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
return renderer;
|