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,19 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
|
-
import { BANNER } from '../src/mediaTypes.js'
|
|
1
|
+
import { deepAccess, isEmpty } from '../src/utils.js'
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
|
+
import { BANNER } from '../src/mediaTypes.js'
|
|
4
4
|
// import { config } from 'src/config'
|
|
5
5
|
|
|
6
|
-
const BIDDER_CODE = 'nativo'
|
|
7
|
-
const BIDDER_ENDPOINT = 'https://exchange.postrelease.com/prebid'
|
|
6
|
+
const BIDDER_CODE = 'nativo'
|
|
7
|
+
const BIDDER_ENDPOINT = 'https://exchange.postrelease.com/prebid'
|
|
8
8
|
|
|
9
|
-
const GVLID = 263
|
|
9
|
+
const GVLID = 263
|
|
10
10
|
|
|
11
|
-
const TIME_TO_LIVE = 360
|
|
11
|
+
const TIME_TO_LIVE = 360
|
|
12
12
|
|
|
13
|
-
const SUPPORTED_AD_TYPES = [BANNER]
|
|
13
|
+
const SUPPORTED_AD_TYPES = [BANNER]
|
|
14
14
|
|
|
15
|
-
const bidRequestMap = {}
|
|
16
|
-
const adUnitsRequested = {}
|
|
15
|
+
const bidRequestMap = {}
|
|
16
|
+
const adUnitsRequested = {}
|
|
17
17
|
|
|
18
18
|
// Prebid adapter referrence doc: https://docs.prebid.org/dev-docs/bidder-adaptor.html
|
|
19
19
|
|
|
@@ -30,7 +30,7 @@ export const spec = {
|
|
|
30
30
|
* @return boolean True if this is a valid bid, and false otherwise.
|
|
31
31
|
*/
|
|
32
32
|
isBidRequestValid: function (bid) {
|
|
33
|
-
return
|
|
33
|
+
return true
|
|
34
34
|
},
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -42,27 +42,37 @@ export const spec = {
|
|
|
42
42
|
* @return ServerRequest Info describing the request to the server.
|
|
43
43
|
*/
|
|
44
44
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
45
|
-
const placementIds =
|
|
45
|
+
const placementIds = new Set()
|
|
46
46
|
const placmentBidIdMap = {}
|
|
47
47
|
let placementId, pageUrl
|
|
48
48
|
validBidRequests.forEach((request) => {
|
|
49
|
-
pageUrl =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
pageUrl = deepAccess(
|
|
50
|
+
request,
|
|
51
|
+
'params.url',
|
|
52
|
+
bidderRequest.refererInfo.referer
|
|
53
|
+
)
|
|
54
|
+
placementId = deepAccess(request, 'params.placementId')
|
|
55
|
+
|
|
56
|
+
if (placementId) {
|
|
57
|
+
placementIds.add(placementId)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
var key = placementId || request.adUnitCode
|
|
61
|
+
placmentBidIdMap[key] = {
|
|
53
62
|
bidId: request.bidId,
|
|
54
63
|
size: getLargestSize(request.sizes),
|
|
55
64
|
}
|
|
56
65
|
})
|
|
57
66
|
bidRequestMap[bidderRequest.bidderRequestId] = placmentBidIdMap
|
|
58
67
|
|
|
59
|
-
if (!pageUrl) pageUrl = bidderRequest.refererInfo.referer
|
|
60
|
-
|
|
61
68
|
// Build adUnit data
|
|
62
69
|
const adUnitData = {
|
|
63
70
|
adUnits: validBidRequests.map((adUnit) => {
|
|
64
71
|
// Track if we've already requested for this ad unit code
|
|
65
|
-
adUnitsRequested[adUnit.adUnitCode] =
|
|
72
|
+
adUnitsRequested[adUnit.adUnitCode] =
|
|
73
|
+
adUnitsRequested[adUnit.adUnitCode] !== undefined
|
|
74
|
+
? adUnitsRequested[adUnit.adUnitCode] + 1
|
|
75
|
+
: 0
|
|
66
76
|
return {
|
|
67
77
|
adUnitCode: adUnit.adUnitCode,
|
|
68
78
|
mediaTypes: adUnit.mediaTypes,
|
|
@@ -72,7 +82,6 @@ export const spec = {
|
|
|
72
82
|
|
|
73
83
|
// Build QS Params
|
|
74
84
|
let params = [
|
|
75
|
-
{ key: 'ntv_ptd', value: placementIds.toString() },
|
|
76
85
|
{ key: 'ntv_pb_rid', value: bidderRequest.bidderRequestId },
|
|
77
86
|
{
|
|
78
87
|
key: 'ntv_ppc',
|
|
@@ -80,14 +89,18 @@ export const spec = {
|
|
|
80
89
|
},
|
|
81
90
|
{
|
|
82
91
|
key: 'ntv_dbr',
|
|
83
|
-
value: btoa(JSON.stringify(adUnitsRequested))
|
|
92
|
+
value: btoa(JSON.stringify(adUnitsRequested)),
|
|
84
93
|
},
|
|
85
94
|
{
|
|
86
95
|
key: 'ntv_url',
|
|
87
96
|
value: encodeURIComponent(pageUrl),
|
|
88
|
-
}
|
|
97
|
+
},
|
|
89
98
|
]
|
|
90
99
|
|
|
100
|
+
if (placementIds.size > 0) {
|
|
101
|
+
params.unshift({ key: 'ntv_ptd', value: [...placementIds].join(',') })
|
|
102
|
+
}
|
|
103
|
+
|
|
91
104
|
if (bidderRequest.gdprConsent) {
|
|
92
105
|
// Put on the beginning of the qs param array
|
|
93
106
|
params.unshift({
|
|
@@ -120,7 +133,7 @@ export const spec = {
|
|
|
120
133
|
*/
|
|
121
134
|
interpretResponse: function (response, request) {
|
|
122
135
|
// If the bid response was empty, return []
|
|
123
|
-
if (!response || !response.body ||
|
|
136
|
+
if (!response || !response.body || isEmpty(response.body)) return []
|
|
124
137
|
|
|
125
138
|
try {
|
|
126
139
|
const body =
|
|
@@ -135,7 +148,7 @@ export const spec = {
|
|
|
135
148
|
let bidResponse, adUnit
|
|
136
149
|
seatbids.forEach((seatbid) => {
|
|
137
150
|
seatbid.bid.forEach((bid) => {
|
|
138
|
-
adUnit = this.
|
|
151
|
+
adUnit = this.getAdUnitData(body.id, bid)
|
|
139
152
|
bidResponse = {
|
|
140
153
|
requestId: adUnit.bidId,
|
|
141
154
|
cpm: bid.price,
|
|
@@ -216,7 +229,7 @@ export const spec = {
|
|
|
216
229
|
let body
|
|
217
230
|
serverResponses.forEach((response) => {
|
|
218
231
|
// If the bid response was empty, return []
|
|
219
|
-
if (!response || !response.body ||
|
|
232
|
+
if (!response || !response.body || isEmpty(response.body)) {
|
|
220
233
|
return syncs
|
|
221
234
|
}
|
|
222
235
|
|
|
@@ -268,14 +281,16 @@ export const spec = {
|
|
|
268
281
|
/**
|
|
269
282
|
* Maps Prebid's bidId to Nativo's placementId values per unique bidderRequestId
|
|
270
283
|
* @param {String} bidderRequestId - The unique ID value associated with the bidderRequest
|
|
271
|
-
* @param {
|
|
284
|
+
* @param {Object} bid - The placement ID value from Nativo
|
|
272
285
|
* @returns {String} - The bidId value associated with the corresponding placementId
|
|
273
286
|
*/
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
287
|
+
getAdUnitData: function (bidderRequestId, bid) {
|
|
288
|
+
var data = deepAccess(bidRequestMap, `${bidderRequestId}.${bid.impid}`)
|
|
289
|
+
|
|
290
|
+
if (data) return data
|
|
291
|
+
|
|
292
|
+
var unitCode = deepAccess(bid, 'ext.ad_unit_id')
|
|
293
|
+
return deepAccess(bidRequestMap, `${bidderRequestId}.${unitCode}`)
|
|
279
294
|
},
|
|
280
295
|
}
|
|
281
296
|
registerBidder(spec)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module modules/naveggId
|
|
5
5
|
* @requires module:modules/userId
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
7
|
+
import { isStr, isPlainObject, logError } from '../src/utils.js';
|
|
8
8
|
import { submodule } from '../src/hook.js';
|
|
9
9
|
import { getStorageManager } from '../src/storageManager.js';
|
|
10
10
|
|
|
@@ -58,7 +58,7 @@ export const naveggIdSubmodule = {
|
|
|
58
58
|
* @return { Object | string | undefined }
|
|
59
59
|
*/
|
|
60
60
|
decode(value) {
|
|
61
|
-
const naveggIdVal = value ?
|
|
61
|
+
const naveggIdVal = value ? isStr(value) ? value : isPlainObject(value) ? value.id : undefined : undefined;
|
|
62
62
|
return naveggIdVal ? {
|
|
63
63
|
'naveggId': naveggIdVal
|
|
64
64
|
} : undefined;
|
|
@@ -81,7 +81,7 @@ export const naveggIdSubmodule = {
|
|
|
81
81
|
try {
|
|
82
82
|
return { id: naveggIdString };
|
|
83
83
|
} catch (error) {
|
|
84
|
-
|
|
84
|
+
logError(error);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
return undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { isStr, _each, getBidIdParameter } 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 BIDDER_CODE = 'nextMillennium';
|
|
@@ -12,20 +12,20 @@ export const spec = {
|
|
|
12
12
|
|
|
13
13
|
isBidRequestValid: function(bid) {
|
|
14
14
|
return !!(
|
|
15
|
-
bid.params.placement_id &&
|
|
15
|
+
bid.params.placement_id && isStr(bid.params.placement_id)
|
|
16
16
|
);
|
|
17
17
|
},
|
|
18
18
|
|
|
19
19
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
20
20
|
const requests = [];
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
_each(validBidRequests, function(bid) {
|
|
23
23
|
const postBody = {
|
|
24
24
|
'id': bid.auctionId,
|
|
25
25
|
'ext': {
|
|
26
26
|
'prebid': {
|
|
27
27
|
'storedrequest': {
|
|
28
|
-
'id':
|
|
28
|
+
'id': getBidIdParameter('placement_id', bid.params)
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -60,8 +60,8 @@ export const spec = {
|
|
|
60
60
|
const response = serverResponse.body;
|
|
61
61
|
const bidResponses = [];
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
_each(response.seatbid, (resp) => {
|
|
64
|
+
_each(resp.bid, (bid) => {
|
|
65
65
|
bidResponses.push({
|
|
66
66
|
requestId: bidRequest.bidId,
|
|
67
67
|
cpm: bid.price,
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import {
|
|
2
|
+
deepAccess,
|
|
3
|
+
parseUrl,
|
|
4
|
+
isNumber,
|
|
5
|
+
getBidIdParameter,
|
|
6
|
+
isPlainObject,
|
|
7
|
+
isFn,
|
|
8
|
+
isStr,
|
|
9
|
+
replaceAuctionPrice,
|
|
10
|
+
isArray,
|
|
11
|
+
} from '../src/utils.js';
|
|
12
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
13
|
+
import { BANNER, NATIVE } from '../src/mediaTypes.js';
|
|
14
|
+
|
|
15
|
+
import find from 'core-js-pure/features/array/find.js';
|
|
16
|
+
|
|
17
|
+
const BIDDER_CODE = 'nextroll';
|
|
18
|
+
const BIDDER_ENDPOINT = 'https://d.adroll.com/bid/prebid/';
|
|
19
|
+
const ADAPTER_VERSION = 5;
|
|
20
|
+
|
|
21
|
+
export const spec = {
|
|
22
|
+
code: BIDDER_CODE,
|
|
23
|
+
supportedMediaTypes: [BANNER, NATIVE],
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Determines whether or not the given bid request is valid.
|
|
27
|
+
*
|
|
28
|
+
* @param {BidRequest} bid The bid params to validate.
|
|
29
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
30
|
+
*/
|
|
31
|
+
isBidRequestValid: function (bidRequest) {
|
|
32
|
+
return bidRequest !== undefined && !!bidRequest.params && !!bidRequest.bidId;
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Make a server request from the list of BidRequests.
|
|
37
|
+
*
|
|
38
|
+
* @param {validBidRequests[]} - an array of bids
|
|
39
|
+
* @return ServerRequest Info describing the request to the server.
|
|
40
|
+
*/
|
|
41
|
+
buildRequests: function (validBidRequests, bidderRequest) {
|
|
42
|
+
let topLocation = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer'));
|
|
43
|
+
|
|
44
|
+
return validBidRequests.map((bidRequest) => {
|
|
45
|
+
return {
|
|
46
|
+
method: 'POST',
|
|
47
|
+
options: {
|
|
48
|
+
withCredentials: true,
|
|
49
|
+
},
|
|
50
|
+
url: BIDDER_ENDPOINT,
|
|
51
|
+
data: {
|
|
52
|
+
id: bidRequest.bidId,
|
|
53
|
+
imp: {
|
|
54
|
+
id: bidRequest.bidId,
|
|
55
|
+
bidfloor: _getFloor(bidRequest),
|
|
56
|
+
banner: _getBanner(bidRequest),
|
|
57
|
+
native: _getNative(deepAccess(bidRequest, 'mediaTypes.native')),
|
|
58
|
+
ext: {
|
|
59
|
+
zone: {
|
|
60
|
+
id: getBidIdParameter('zoneId', bidRequest.params)
|
|
61
|
+
},
|
|
62
|
+
nextroll: {
|
|
63
|
+
adapter_version: ADAPTER_VERSION
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
user: _getUser(validBidRequests),
|
|
69
|
+
site: _getSite(bidRequest, topLocation),
|
|
70
|
+
seller: _getSeller(bidRequest),
|
|
71
|
+
device: _getDevice(bidRequest),
|
|
72
|
+
regs: _getRegs(bidderRequest)
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Unpack the response from the server into a list of bids.
|
|
80
|
+
*
|
|
81
|
+
* @param {ServerResponse} serverResponse A successful response from the server.
|
|
82
|
+
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
83
|
+
*/
|
|
84
|
+
interpretResponse: function (serverResponse, bidRequest) {
|
|
85
|
+
if (!serverResponse.body) {
|
|
86
|
+
return [];
|
|
87
|
+
} else {
|
|
88
|
+
let response = serverResponse.body
|
|
89
|
+
let bids = response.seatbid.reduce((acc, seatbid) => acc.concat(seatbid.bid), []);
|
|
90
|
+
return bids.map((bid) => _buildResponse(response, bid));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function _getBanner(bidRequest) {
|
|
96
|
+
let sizes = _getSizes(bidRequest);
|
|
97
|
+
if (sizes === undefined) return undefined;
|
|
98
|
+
return {format: sizes};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function _getNative(mediaTypeNative) {
|
|
102
|
+
if (mediaTypeNative === undefined) return undefined;
|
|
103
|
+
let assets = _getNativeAssets(mediaTypeNative);
|
|
104
|
+
if (assets === undefined || assets.length == 0) return undefined;
|
|
105
|
+
return {
|
|
106
|
+
request: {
|
|
107
|
+
native: {
|
|
108
|
+
assets: assets
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
id: Unique numeric id for the asset
|
|
116
|
+
kind: OpenRTB kind of asset. Supported: title, img and data.
|
|
117
|
+
key: Name of property that comes in the mediaType.native object.
|
|
118
|
+
type: OpenRTB type for that spefic kind of asset.
|
|
119
|
+
required: Overrides the asset required field configured, only overrides when is true.
|
|
120
|
+
*/
|
|
121
|
+
const NATIVE_ASSET_MAP = [
|
|
122
|
+
{id: 1, kind: 'title', key: 'title', required: true},
|
|
123
|
+
{id: 2, kind: 'img', key: 'image', type: 3, required: true},
|
|
124
|
+
{id: 3, kind: 'img', key: 'icon', type: 1},
|
|
125
|
+
{id: 4, kind: 'img', key: 'logo', type: 2},
|
|
126
|
+
{id: 5, kind: 'data', key: 'sponsoredBy', type: 1},
|
|
127
|
+
{id: 6, kind: 'data', key: 'body', type: 2}
|
|
128
|
+
];
|
|
129
|
+
|
|
130
|
+
const ASSET_KIND_MAP = {
|
|
131
|
+
title: _getTitleAsset,
|
|
132
|
+
img: _getImageAsset,
|
|
133
|
+
data: _getDataAsset,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
function _getAsset(mediaTypeNative, assetMap) {
|
|
137
|
+
const asset = mediaTypeNative[assetMap.key];
|
|
138
|
+
if (asset === undefined) return undefined;
|
|
139
|
+
const assetFunc = ASSET_KIND_MAP[assetMap.kind];
|
|
140
|
+
return {
|
|
141
|
+
id: assetMap.id,
|
|
142
|
+
required: (assetMap.required || !!asset.required) ? 1 : 0,
|
|
143
|
+
[assetMap.kind]: assetFunc(asset, assetMap)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function _getTitleAsset(title, _assetMap) {
|
|
148
|
+
return {len: title.len || 0};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function _getMinAspectRatio(aspectRatio, property) {
|
|
152
|
+
if (!isPlainObject(aspectRatio)) return 1;
|
|
153
|
+
|
|
154
|
+
const ratio = aspectRatio['ratio_' + property];
|
|
155
|
+
const min = aspectRatio['min_' + property];
|
|
156
|
+
|
|
157
|
+
if (isNumber(ratio)) return ratio;
|
|
158
|
+
if (isNumber(min)) return min;
|
|
159
|
+
|
|
160
|
+
return 1;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function _getImageAsset(image, assetMap) {
|
|
164
|
+
const sizes = image.sizes;
|
|
165
|
+
const aspectRatio = image.aspect_ratios ? image.aspect_ratios[0] : undefined;
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
|
+
type: assetMap.type,
|
|
169
|
+
w: (sizes ? sizes[0] : undefined),
|
|
170
|
+
h: (sizes ? sizes[1] : undefined),
|
|
171
|
+
wmin: _getMinAspectRatio(aspectRatio, 'width'),
|
|
172
|
+
hmin: _getMinAspectRatio(aspectRatio, 'height'),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function _getDataAsset(data, assetMap) {
|
|
177
|
+
return {
|
|
178
|
+
type: assetMap.type,
|
|
179
|
+
len: data.len || 0
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function _getNativeAssets(mediaTypeNative) {
|
|
184
|
+
return NATIVE_ASSET_MAP
|
|
185
|
+
.map(assetMap => _getAsset(mediaTypeNative, assetMap))
|
|
186
|
+
.filter(asset => asset !== undefined);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function _getUser(requests) {
|
|
190
|
+
const id = deepAccess(requests, '0.userId.nextrollId');
|
|
191
|
+
if (id === undefined) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
ext: {
|
|
197
|
+
eid: [{
|
|
198
|
+
'source': 'nextroll',
|
|
199
|
+
id
|
|
200
|
+
}]
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function _getFloor(bidRequest) {
|
|
206
|
+
if (!isFn(bidRequest.getFloor)) {
|
|
207
|
+
return (bidRequest.params.bidfloor) ? bidRequest.params.bidfloor : null;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
let floor = bidRequest.getFloor({
|
|
211
|
+
currency: 'USD',
|
|
212
|
+
mediaType: '*',
|
|
213
|
+
size: '*'
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'USD') {
|
|
217
|
+
return floor.floor;
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function _buildResponse(bidResponse, bid) {
|
|
223
|
+
let response = {
|
|
224
|
+
requestId: bidResponse.id,
|
|
225
|
+
cpm: bid.price,
|
|
226
|
+
width: bid.w,
|
|
227
|
+
height: bid.h,
|
|
228
|
+
creativeId: bid.crid,
|
|
229
|
+
dealId: bidResponse.dealId,
|
|
230
|
+
currency: 'USD',
|
|
231
|
+
netRevenue: true,
|
|
232
|
+
ttl: 300,
|
|
233
|
+
meta: {
|
|
234
|
+
advertiserDomains: bidResponse.adomain || []
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
if (isStr(bid.adm)) {
|
|
238
|
+
response.mediaType = BANNER;
|
|
239
|
+
response.ad = replaceAuctionPrice(bid.adm, bid.price);
|
|
240
|
+
} else {
|
|
241
|
+
response.mediaType = NATIVE;
|
|
242
|
+
response.native = _getNativeResponse(bid.adm, bid.price);
|
|
243
|
+
}
|
|
244
|
+
return response;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const privacyLink = 'https://info.evidon.com/pub_info/573';
|
|
248
|
+
const privacyIcon = 'https://c.betrad.com/pub/icon1.png';
|
|
249
|
+
|
|
250
|
+
function _getNativeResponse(adm, price) {
|
|
251
|
+
let baseResponse = {
|
|
252
|
+
clickTrackers: (adm.link && adm.link.clicktrackers) || [],
|
|
253
|
+
jstracker: adm.jstracker || [],
|
|
254
|
+
clickUrl: replaceAuctionPrice(adm.link.url, price),
|
|
255
|
+
impressionTrackers: adm.imptrackers.map(impTracker => replaceAuctionPrice(impTracker, price)),
|
|
256
|
+
privacyLink: privacyLink,
|
|
257
|
+
privacyIcon: privacyIcon
|
|
258
|
+
};
|
|
259
|
+
return adm.assets.reduce((accResponse, asset) => {
|
|
260
|
+
const assetMaps = NATIVE_ASSET_MAP.filter(assetMap => assetMap.id === asset.id && asset[assetMap.kind] !== undefined);
|
|
261
|
+
if (assetMaps.length === 0) return accResponse;
|
|
262
|
+
const assetMap = assetMaps[0];
|
|
263
|
+
accResponse[assetMap.key] = _getAssetResponse(asset, assetMap);
|
|
264
|
+
return accResponse;
|
|
265
|
+
}, baseResponse);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function _getAssetResponse(asset, assetMap) {
|
|
269
|
+
switch (assetMap.kind) {
|
|
270
|
+
case 'title':
|
|
271
|
+
return asset.title.text;
|
|
272
|
+
|
|
273
|
+
case 'img':
|
|
274
|
+
return {
|
|
275
|
+
url: asset.img.url,
|
|
276
|
+
width: asset.img.w,
|
|
277
|
+
height: asset.img.h
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
case 'data':
|
|
281
|
+
return asset.data.value;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function _getSite(bidRequest, topLocation) {
|
|
286
|
+
return {
|
|
287
|
+
page: topLocation.href,
|
|
288
|
+
domain: topLocation.hostname,
|
|
289
|
+
publisher: {
|
|
290
|
+
id: getBidIdParameter('publisherId', bidRequest.params)
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function _getSeller(bidRequest) {
|
|
296
|
+
return {
|
|
297
|
+
id: getBidIdParameter('sellerId', bidRequest.params)
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function _getSizes(bidRequest) {
|
|
302
|
+
if (!isArray(bidRequest.sizes)) {
|
|
303
|
+
return undefined;
|
|
304
|
+
}
|
|
305
|
+
return bidRequest.sizes.filter(_isValidSize).map(size => {
|
|
306
|
+
return {
|
|
307
|
+
w: size[0],
|
|
308
|
+
h: size[1]
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function _isValidSize(size) {
|
|
314
|
+
const isNumber = x => typeof x === 'number';
|
|
315
|
+
return (size.length === 2 && isNumber(size[0]) && isNumber(size[1]));
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function _getDevice(_bidRequest) {
|
|
319
|
+
return {
|
|
320
|
+
ua: navigator.userAgent,
|
|
321
|
+
language: navigator['language'],
|
|
322
|
+
os: _getOs(navigator.userAgent.toLowerCase()),
|
|
323
|
+
osv: _getOsVersion(navigator.userAgent)
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
function _getRegs(bidderRequest) {
|
|
328
|
+
if (!bidderRequest || !bidderRequest.uspConsent) {
|
|
329
|
+
return undefined;
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
ext: {
|
|
333
|
+
us_privacy: bidderRequest.uspConsent
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function _getOs(userAgent) {
|
|
339
|
+
const osTable = {
|
|
340
|
+
'android': /android/i,
|
|
341
|
+
'ios': /iphone|ipad/i,
|
|
342
|
+
'mac': /mac/i,
|
|
343
|
+
'linux': /linux/i,
|
|
344
|
+
'windows': /windows/i
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
return find(Object.keys(osTable), os => {
|
|
348
|
+
if (userAgent.match(osTable[os])) {
|
|
349
|
+
return os;
|
|
350
|
+
}
|
|
351
|
+
}) || 'etc';
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function _getOsVersion(userAgent) {
|
|
355
|
+
const clientStrings = [
|
|
356
|
+
{ s: 'Android', r: /Android/ },
|
|
357
|
+
{ s: 'iOS', r: /(iPhone|iPad|iPod)/ },
|
|
358
|
+
{ s: 'Mac OS X', r: /Mac OS X/ },
|
|
359
|
+
{ s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
|
|
360
|
+
{ s: 'Linux', r: /(Linux|X11)/ },
|
|
361
|
+
{ s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/ },
|
|
362
|
+
{ s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ },
|
|
363
|
+
{ s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ },
|
|
364
|
+
{ s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ },
|
|
365
|
+
{ s: 'Windows Vista', r: /Windows NT 6.0/ },
|
|
366
|
+
{ s: 'Windows Server 2003', r: /Windows NT 5.2/ },
|
|
367
|
+
{ s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ },
|
|
368
|
+
{ s: 'UNIX', r: /UNIX/ },
|
|
369
|
+
{ s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }
|
|
370
|
+
];
|
|
371
|
+
let cs = find(clientStrings, cs => cs.r.test(userAgent));
|
|
372
|
+
return cs ? cs.s : 'unknown';
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
registerBidder(spec);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { logInfo, deepAccess, logWarn, isArray, getParameterByName } from '../src/utils.js';
|
|
2
2
|
import { config } from '../src/config.js';
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
@@ -7,14 +7,14 @@ import { getStorageManager } from '../src/storageManager.js';
|
|
|
7
7
|
const GVLID = 816;
|
|
8
8
|
const BIDDER_CODE = 'nobid';
|
|
9
9
|
const storage = getStorageManager(GVLID, BIDDER_CODE);
|
|
10
|
-
window.nobidVersion = '1.3.
|
|
10
|
+
window.nobidVersion = '1.3.2';
|
|
11
11
|
window.nobid = window.nobid || {};
|
|
12
12
|
window.nobid.bidResponses = window.nobid.bidResponses || {};
|
|
13
13
|
window.nobid.timeoutTotal = 0;
|
|
14
14
|
window.nobid.bidWonTotal = 0;
|
|
15
15
|
window.nobid.refreshCount = 0;
|
|
16
16
|
function log(msg, obj) {
|
|
17
|
-
|
|
17
|
+
logInfo('-NoBid- ' + msg, obj)
|
|
18
18
|
}
|
|
19
19
|
function nobidSetCookie(cname, cvalue, hours) {
|
|
20
20
|
var d = new Date();
|
|
@@ -29,7 +29,7 @@ function nobidHasPurpose1Consent(bidderRequest) {
|
|
|
29
29
|
let result = true;
|
|
30
30
|
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
31
31
|
if (bidderRequest.gdprConsent.gdprApplies && bidderRequest.gdprConsent.apiVersion === 2) {
|
|
32
|
-
result = !!(
|
|
32
|
+
result = !!(deepAccess(bidderRequest.gdprConsent, 'vendorData.purpose.consents.1') === true);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
return result;
|
|
@@ -112,11 +112,11 @@ function nobidBuildRequests(bids, bidderRequest) {
|
|
|
112
112
|
var height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
|
|
113
113
|
return `${width}x${height}`;
|
|
114
114
|
} catch (e) {
|
|
115
|
-
|
|
115
|
+
logWarn('Could not parse screen dimensions, error details:', e);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
var getEIDs = function(eids) {
|
|
119
|
-
if (
|
|
119
|
+
if (isArray(eids) && eids.length > 0) {
|
|
120
120
|
let src = [];
|
|
121
121
|
eids.forEach((eid) => {
|
|
122
122
|
let ids = [];
|
|
@@ -150,8 +150,9 @@ function nobidBuildRequests(bids, bidderRequest) {
|
|
|
150
150
|
if (sch) state['schain'] = sch;
|
|
151
151
|
const cop = coppa();
|
|
152
152
|
if (cop) state['coppa'] = cop;
|
|
153
|
-
const eids = getEIDs(
|
|
153
|
+
const eids = getEIDs(deepAccess(bids, '0.userIdAsEids'));
|
|
154
154
|
if (eids && eids.length > 0) state['eids'] = eids;
|
|
155
|
+
if (config && config.getConfig('ortb2')) state['ortb2'] = config.getConfig('ortb2');
|
|
155
156
|
return state;
|
|
156
157
|
}
|
|
157
158
|
function newAdunit(adunitObject, adunits) {
|
|
@@ -228,8 +229,8 @@ function nobidBuildRequests(bids, bidderRequest) {
|
|
|
228
229
|
var placementId = bid.params['placementId'];
|
|
229
230
|
|
|
230
231
|
var adType = 'banner';
|
|
231
|
-
const videoMediaType =
|
|
232
|
-
const context =
|
|
232
|
+
const videoMediaType = deepAccess(bid, 'mediaTypes.video');
|
|
233
|
+
const context = deepAccess(bid, 'mediaTypes.video.context');
|
|
233
234
|
if (bid.mediaType === VIDEO || (videoMediaType && (context === 'instream' || context === 'outstream'))) {
|
|
234
235
|
adType = 'video';
|
|
235
236
|
}
|
|
@@ -363,7 +364,7 @@ export const spec = {
|
|
|
363
364
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
364
365
|
function resolveEndpoint() {
|
|
365
366
|
var ret = 'https://ads.servenobid.com/';
|
|
366
|
-
var env = (typeof
|
|
367
|
+
var env = (typeof getParameterByName === 'function') && (getParameterByName('nobid-env'));
|
|
367
368
|
if (!env) ret = 'https://ads.servenobid.com/';
|
|
368
369
|
else if (env == 'beta') ret = 'https://beta.servenobid.com/';
|
|
369
370
|
else if (env == 'dev') ret = '//localhost:8282/';
|
|
@@ -448,7 +449,7 @@ export const spec = {
|
|
|
448
449
|
}
|
|
449
450
|
return syncs;
|
|
450
451
|
} else {
|
|
451
|
-
|
|
452
|
+
logWarn('-NoBid- Please enable iframe based user sync.', syncOptions);
|
|
452
453
|
return [];
|
|
453
454
|
}
|
|
454
455
|
},
|