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,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { logWarn, isArray, isStr, triggerPixel, deepAccess, deepSetValue, isPlainObject, generateUUID, parseUrl, isFn, getDNT, logError } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { BANNER, VIDEO, NATIVE } from '../src/mediaTypes.js';
|
|
@@ -70,27 +70,27 @@ export const spec = {
|
|
|
70
70
|
*/
|
|
71
71
|
isBidRequestValid: function (bid) {
|
|
72
72
|
if (!bid) {
|
|
73
|
-
|
|
73
|
+
logWarn(BIDDER_CODE, 'Invalid bid,', bid);
|
|
74
74
|
return false;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
if (!bid.params) {
|
|
78
|
-
|
|
78
|
+
logWarn(BIDDER_CODE, 'bid.params is required.')
|
|
79
79
|
return false;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
if (!bid.params.placementId) {
|
|
83
|
-
|
|
83
|
+
logWarn(BIDDER_CODE, 'bid.params.placementId is required.')
|
|
84
84
|
return false;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
if (!bid.params.endpointId) {
|
|
88
|
-
|
|
88
|
+
logWarn(BIDDER_CODE, 'bid.params.endpointId is required.')
|
|
89
89
|
return false;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
if (!bid.params.publisherId) {
|
|
93
|
-
|
|
93
|
+
logWarn(BIDDER_CODE, 'bid.params.publisherId is required.')
|
|
94
94
|
return false;
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -118,9 +118,9 @@ export const spec = {
|
|
|
118
118
|
let bidResponses = [];
|
|
119
119
|
|
|
120
120
|
let serverBody;
|
|
121
|
-
if ((serverBody = serverResponse.body) && serverBody.seatbid &&
|
|
121
|
+
if ((serverBody = serverResponse.body) && serverBody.seatbid && isArray(serverBody.seatbid)) {
|
|
122
122
|
serverBody.seatbid.forEach((seatbidder) => {
|
|
123
|
-
if (seatbidder.bid &&
|
|
123
|
+
if (seatbidder.bid && isArray(seatbidder.bid)) {
|
|
124
124
|
bidResponses = seatbidder.bid.map((bid) => buildBidResponse(bid, bidRequest.originalBidRequest, serverBody));
|
|
125
125
|
}
|
|
126
126
|
});
|
|
@@ -153,7 +153,7 @@ export const spec = {
|
|
|
153
153
|
* @param {Bid} bid The bid that won the auction
|
|
154
154
|
*/
|
|
155
155
|
onBidWon: function (bid) {
|
|
156
|
-
if (!bid || !
|
|
156
|
+
if (!bid || !isStr(bid.nurl)) {
|
|
157
157
|
return;
|
|
158
158
|
}
|
|
159
159
|
|
|
@@ -166,7 +166,7 @@ export const spec = {
|
|
|
166
166
|
winCurr = bid.currency;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
triggerPixel(
|
|
170
170
|
bid.nurl
|
|
171
171
|
.replace(/\$\{AUCTION_PRICE\}/g, winCpm)
|
|
172
172
|
.replace(/\$\{AUCTION_CURRENCY\}/g, winCurr)
|
|
@@ -189,7 +189,7 @@ export const spec = {
|
|
|
189
189
|
* @returns {Request}
|
|
190
190
|
*/
|
|
191
191
|
function buildOpenRtbBidRequest(bidRequest, bidderRequest) {
|
|
192
|
-
const pageReferrer =
|
|
192
|
+
const pageReferrer = deepAccess(bidderRequest, 'refererInfo.referer');
|
|
193
193
|
|
|
194
194
|
// build OpenRTB request body
|
|
195
195
|
const payload = {
|
|
@@ -199,7 +199,7 @@ function buildOpenRtbBidRequest(bidRequest, bidderRequest) {
|
|
|
199
199
|
imp: createImp(bidRequest),
|
|
200
200
|
device: getDevice(),
|
|
201
201
|
site: {
|
|
202
|
-
id: String(
|
|
202
|
+
id: String(deepAccess(bidRequest, 'params.publisherId')),
|
|
203
203
|
domain: getDomain(pageReferrer),
|
|
204
204
|
page: pageReferrer,
|
|
205
205
|
ref: window.self === window.top ? document.referrer : '',
|
|
@@ -216,26 +216,26 @@ function buildOpenRtbBidRequest(bidRequest, bidderRequest) {
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
const gdprConsent =
|
|
219
|
+
const gdprConsent = deepAccess(bidderRequest, 'gdprConsent');
|
|
220
220
|
if (!!gdprConsent && gdprConsent.gdprApplies) {
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
deepSetValue(payload, 'regs.ext.gdpr', 1);
|
|
222
|
+
deepSetValue(payload, 'user.ext.consent', gdprConsent.consentString);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
const uspConsent =
|
|
225
|
+
const uspConsent = deepAccess(bidderRequest, 'uspConsent');
|
|
226
226
|
if (uspConsent) {
|
|
227
|
-
|
|
227
|
+
deepSetValue(payload, 'regs.ext.us_privacy', uspConsent);
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
const eids =
|
|
230
|
+
const eids = deepAccess(bidRequest, 'userIdAsEids', []);
|
|
231
231
|
if (eids.length > 0) {
|
|
232
|
-
|
|
232
|
+
deepSetValue(payload, 'user.eids', eids);
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
return {
|
|
236
236
|
method: 'POST',
|
|
237
|
-
url: ENDPOINT + String(
|
|
238
|
-
'?ep=' + String(
|
|
237
|
+
url: ENDPOINT + String(deepAccess(bidRequest, 'params.publisherId')) +
|
|
238
|
+
'?ep=' + String(deepAccess(bidRequest, 'params.endpointId')),
|
|
239
239
|
data: JSON.stringify(payload),
|
|
240
240
|
options: {
|
|
241
241
|
contentType: 'application/json',
|
|
@@ -272,7 +272,7 @@ function buildBidResponse(bid, bidRequest, responseBody) {
|
|
|
272
272
|
|
|
273
273
|
// OpenRtb Markup Response Object
|
|
274
274
|
// https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-Native-Ads-Specification-1-1_2016.pdf#5.1
|
|
275
|
-
if (markup &&
|
|
275
|
+
if (markup && isPlainObject(markup.native)) {
|
|
276
276
|
mediaType = NATIVE;
|
|
277
277
|
nativeResponse = markup.native;
|
|
278
278
|
}
|
|
@@ -281,7 +281,7 @@ function buildBidResponse(bid, bidRequest, responseBody) {
|
|
|
281
281
|
const currency = responseBody.cur || DEFAULT_CURRENCY;
|
|
282
282
|
const cpm = (parseFloat(bid.price) || 0).toFixed(2);
|
|
283
283
|
|
|
284
|
-
const categories =
|
|
284
|
+
const categories = deepAccess(bid, 'cat', []);
|
|
285
285
|
|
|
286
286
|
const bidResponse = {
|
|
287
287
|
requestId: bid.impid,
|
|
@@ -300,14 +300,14 @@ function buildBidResponse(bid, bidRequest, responseBody) {
|
|
|
300
300
|
}
|
|
301
301
|
};
|
|
302
302
|
|
|
303
|
-
if (bid.adomain &&
|
|
303
|
+
if (bid.adomain && isArray(bid.adomain) && bid.adomain.length > 0) {
|
|
304
304
|
bidResponse.meta.advertiserDomains = bid.adomain;
|
|
305
305
|
bidResponse.meta.clickUrl = bid.adomain[0];
|
|
306
306
|
}
|
|
307
307
|
|
|
308
308
|
switch (mediaType) {
|
|
309
309
|
case VIDEO: {
|
|
310
|
-
const playerSize =
|
|
310
|
+
const playerSize = deepAccess(bidRequest, 'mediaTypes.video.playerSize', VIDEO_DEFAULTS.SIZE);
|
|
311
311
|
const size = canonicalizeSizesArray(playerSize)[0];
|
|
312
312
|
|
|
313
313
|
bidResponse.vastXml = bid.adm;
|
|
@@ -315,7 +315,7 @@ function buildBidResponse(bid, bidRequest, responseBody) {
|
|
|
315
315
|
bidResponse.width = bid.w || size[0];
|
|
316
316
|
bidResponse.height = bid.h || size[1];
|
|
317
317
|
|
|
318
|
-
const context =
|
|
318
|
+
const context = deepAccess(bidRequest, 'mediaTypes.video.context');
|
|
319
319
|
|
|
320
320
|
// if outstream video, add a default render for it.
|
|
321
321
|
if (context === OUTSTREAM) {
|
|
@@ -358,13 +358,13 @@ function interpretNativeAd(nativeResponse, currency, cpm) {
|
|
|
358
358
|
|
|
359
359
|
// OpenRtb Link Object
|
|
360
360
|
// https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-Native-Ads-Specification-1-1_2016.pdf#5.7
|
|
361
|
-
const clickUrl =
|
|
362
|
-
if (clickUrl &&
|
|
361
|
+
const clickUrl = deepAccess(nativeResponse, 'link.url');
|
|
362
|
+
if (clickUrl && isStr(clickUrl)) {
|
|
363
363
|
native.clickUrl = decodeURIComponent(clickUrl);
|
|
364
364
|
}
|
|
365
365
|
|
|
366
|
-
const clickTrackers =
|
|
367
|
-
if (clickTrackers &&
|
|
366
|
+
const clickTrackers = deepAccess(nativeResponse, 'link.clicktrackers');
|
|
367
|
+
if (clickTrackers && isArray(clickTrackers)) {
|
|
368
368
|
native.clickTrackers = clickTrackers
|
|
369
369
|
.filter(Boolean)
|
|
370
370
|
.map(
|
|
@@ -374,7 +374,7 @@ function interpretNativeAd(nativeResponse, currency, cpm) {
|
|
|
374
374
|
);
|
|
375
375
|
}
|
|
376
376
|
|
|
377
|
-
if (nativeResponse.imptrackers &&
|
|
377
|
+
if (nativeResponse.imptrackers && isArray(nativeResponse.imptrackers)) {
|
|
378
378
|
native.impressionTrackers = nativeResponse.imptrackers
|
|
379
379
|
.filter(Boolean)
|
|
380
380
|
.map(
|
|
@@ -384,16 +384,16 @@ function interpretNativeAd(nativeResponse, currency, cpm) {
|
|
|
384
384
|
);
|
|
385
385
|
}
|
|
386
386
|
|
|
387
|
-
if (nativeResponse.jstracker &&
|
|
387
|
+
if (nativeResponse.jstracker && isStr(nativeResponse.jstracker)) {
|
|
388
388
|
native.javascriptTrackers = [nativeResponse.jstracker];
|
|
389
389
|
}
|
|
390
390
|
|
|
391
391
|
let assets;
|
|
392
|
-
if ((assets = nativeResponse.assets) &&
|
|
392
|
+
if ((assets = nativeResponse.assets) && isArray(assets)) {
|
|
393
393
|
assets.forEach((asset) => {
|
|
394
394
|
switch (asset.id) {
|
|
395
395
|
case NATIVE_DEFAULTS.ASSET_ID.TITLE: {
|
|
396
|
-
const title =
|
|
396
|
+
const title = deepAccess(asset, 'title.text');
|
|
397
397
|
if (title) {
|
|
398
398
|
native.title = title;
|
|
399
399
|
}
|
|
@@ -420,21 +420,21 @@ function interpretNativeAd(nativeResponse, currency, cpm) {
|
|
|
420
420
|
break;
|
|
421
421
|
}
|
|
422
422
|
case NATIVE_DEFAULTS.ASSET_ID.BODY: {
|
|
423
|
-
const body =
|
|
423
|
+
const body = deepAccess(asset, 'data.value');
|
|
424
424
|
if (body) {
|
|
425
425
|
native.body = body;
|
|
426
426
|
}
|
|
427
427
|
break;
|
|
428
428
|
}
|
|
429
429
|
case NATIVE_DEFAULTS.ASSET_ID.SPONSORED: {
|
|
430
|
-
const sponsoredBy =
|
|
430
|
+
const sponsoredBy = deepAccess(asset, 'data.value');
|
|
431
431
|
if (sponsoredBy) {
|
|
432
432
|
native.sponsoredBy = sponsoredBy;
|
|
433
433
|
}
|
|
434
434
|
break;
|
|
435
435
|
}
|
|
436
436
|
case NATIVE_DEFAULTS.ASSET_ID.CTA: {
|
|
437
|
-
const cta =
|
|
437
|
+
const cta = deepAccess(asset, 'data.value');
|
|
438
438
|
if (cta) {
|
|
439
439
|
native.cta = cta;
|
|
440
440
|
}
|
|
@@ -459,13 +459,13 @@ function createImp(bidRequest) {
|
|
|
459
459
|
|
|
460
460
|
const impItem = {
|
|
461
461
|
id: bidRequest.bidId,
|
|
462
|
-
tagid: String(
|
|
462
|
+
tagid: String(deepAccess(bidRequest, 'params.placementId')),
|
|
463
463
|
};
|
|
464
464
|
|
|
465
465
|
let mediaType, size;
|
|
466
466
|
let bannerReq, videoReq, nativeReq;
|
|
467
467
|
|
|
468
|
-
if ((bannerReq =
|
|
468
|
+
if ((bannerReq = deepAccess(bidRequest, 'mediaTypes.banner'))) {
|
|
469
469
|
size = canonicalizeSizesArray(bannerReq.sizes || BANNER_DEFAULTS.SIZE)[0];
|
|
470
470
|
|
|
471
471
|
impItem.banner = {
|
|
@@ -475,7 +475,7 @@ function createImp(bidRequest) {
|
|
|
475
475
|
};
|
|
476
476
|
|
|
477
477
|
mediaType = BANNER;
|
|
478
|
-
} else if ((videoReq =
|
|
478
|
+
} else if ((videoReq = deepAccess(bidRequest, 'mediaTypes.video'))) {
|
|
479
479
|
size = canonicalizeSizesArray(videoReq.playerSize || VIDEO_DEFAULTS.SIZE)[0];
|
|
480
480
|
|
|
481
481
|
impItem.video = {
|
|
@@ -493,7 +493,7 @@ function createImp(bidRequest) {
|
|
|
493
493
|
};
|
|
494
494
|
|
|
495
495
|
mediaType = VIDEO;
|
|
496
|
-
} else if ((nativeReq =
|
|
496
|
+
} else if ((nativeReq = deepAccess(bidRequest, 'mediaTypes.native'))) {
|
|
497
497
|
const params = bidRequest.nativeParams || nativeReq;
|
|
498
498
|
|
|
499
499
|
const request = {
|
|
@@ -533,7 +533,7 @@ function createImp(bidRequest) {
|
|
|
533
533
|
* @returns {Size[][]}
|
|
534
534
|
*/
|
|
535
535
|
function canonicalizeSizesArray(sizes) {
|
|
536
|
-
if (sizes.length === 2 && !
|
|
536
|
+
if (sizes.length === 2 && !isArray(sizes[0])) {
|
|
537
537
|
return [sizes];
|
|
538
538
|
}
|
|
539
539
|
return sizes;
|
|
@@ -645,19 +645,19 @@ function mapNativeImage(image, type) {
|
|
|
645
645
|
* @returns {String} userId
|
|
646
646
|
*/
|
|
647
647
|
function getUserId(bidRequest) {
|
|
648
|
-
let sharedId =
|
|
648
|
+
let sharedId = deepAccess(bidRequest, 'userId.sharedid.id');
|
|
649
649
|
if (sharedId) {
|
|
650
650
|
return sharedId;
|
|
651
651
|
}
|
|
652
652
|
|
|
653
653
|
for (const idModule of ['pubcid', 'tdid']) {
|
|
654
|
-
let userId =
|
|
654
|
+
let userId = deepAccess(bidRequest, `userId.${idModule}`);
|
|
655
655
|
if (userId) {
|
|
656
656
|
return userId;
|
|
657
657
|
}
|
|
658
658
|
}
|
|
659
659
|
|
|
660
|
-
return
|
|
660
|
+
return generateUUID();
|
|
661
661
|
}
|
|
662
662
|
|
|
663
663
|
/**
|
|
@@ -670,7 +670,7 @@ function getDomain(referer) {
|
|
|
670
670
|
let domain;
|
|
671
671
|
|
|
672
672
|
if (!(domain = config.getConfig('publisherDomain'))) {
|
|
673
|
-
const u =
|
|
673
|
+
const u = parseUrl(referer);
|
|
674
674
|
domain = u.hostname;
|
|
675
675
|
}
|
|
676
676
|
|
|
@@ -685,14 +685,14 @@ function getDomain(referer) {
|
|
|
685
685
|
* @returns {Floor} floor price
|
|
686
686
|
*/
|
|
687
687
|
function getBidFloor(bid, {mediaType = '*', size = '*'}) {
|
|
688
|
-
if (
|
|
688
|
+
if (isFn(bid.getFloor)) {
|
|
689
689
|
const floorInfo = bid.getFloor({
|
|
690
690
|
currency: DEFAULT_CURRENCY,
|
|
691
691
|
mediaType,
|
|
692
692
|
size
|
|
693
693
|
});
|
|
694
694
|
|
|
695
|
-
if (
|
|
695
|
+
if (isPlainObject(floorInfo) && !isNaN(floorInfo.floor)) {
|
|
696
696
|
return {
|
|
697
697
|
currency: floorInfo.currency || DEFAULT_CURRENCY,
|
|
698
698
|
floor: floorInfo.floor
|
|
@@ -715,7 +715,7 @@ function getBidFloor(bid, {mediaType = '*', size = '*'}) {
|
|
|
715
715
|
function getBcat(bidRequest) {
|
|
716
716
|
let bcat = [];
|
|
717
717
|
|
|
718
|
-
const pBcat =
|
|
718
|
+
const pBcat = deepAccess(bidRequest, 'params.bcat');
|
|
719
719
|
if (pBcat) {
|
|
720
720
|
bcat = bcat.concat(pBcat);
|
|
721
721
|
}
|
|
@@ -736,7 +736,7 @@ function getDevice() {
|
|
|
736
736
|
device.ua = device.ua || navigator.userAgent;
|
|
737
737
|
device.language = device.language || getLanguage();
|
|
738
738
|
device.dnt = typeof device.dnt === 'number'
|
|
739
|
-
? device.dnt : (
|
|
739
|
+
? device.dnt : (getDNT() ? 1 : 0);
|
|
740
740
|
|
|
741
741
|
return device;
|
|
742
742
|
}
|
|
@@ -759,8 +759,8 @@ function getLanguage() {
|
|
|
759
759
|
* @returns
|
|
760
760
|
*/
|
|
761
761
|
function createRenderer(bidRequest) {
|
|
762
|
-
const globalRenderer =
|
|
763
|
-
const currentRenderer =
|
|
762
|
+
const globalRenderer = deepAccess(bidRequest, 'renderer');
|
|
763
|
+
const currentRenderer = deepAccess(bidRequest, 'mediaTypes.video.renderer');
|
|
764
764
|
|
|
765
765
|
let url = OUTSTREAM_RENDERER_URL;
|
|
766
766
|
let config = {};
|
|
@@ -795,7 +795,7 @@ function createRenderer(bidRequest) {
|
|
|
795
795
|
try {
|
|
796
796
|
renderer.setRender(render);
|
|
797
797
|
} catch (e) {
|
|
798
|
-
|
|
798
|
+
logError(BIDDER_CODE, 'Error calling setRender on renderer', e);
|
|
799
799
|
}
|
|
800
800
|
return renderer;
|
|
801
801
|
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* @property {string} device
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import
|
|
21
|
+
import { logInfo, logError } from '../src/utils.js';
|
|
22
22
|
import { submodule } from '../src/hook.js';
|
|
23
23
|
import { ajaxBuilder } from '../src/ajax.js';
|
|
24
24
|
|
|
@@ -74,7 +74,7 @@ export let fetchScoreFile = true;
|
|
|
74
74
|
* Make the request for the Score File.
|
|
75
75
|
*/
|
|
76
76
|
export function scoreFileRequest() {
|
|
77
|
-
|
|
77
|
+
logInfo('Fetch Optimera score file.');
|
|
78
78
|
const ajax = ajaxBuilder();
|
|
79
79
|
ajax(scoresURL,
|
|
80
80
|
{
|
|
@@ -83,14 +83,14 @@ export function scoreFileRequest() {
|
|
|
83
83
|
try {
|
|
84
84
|
setScores(res);
|
|
85
85
|
} catch (err) {
|
|
86
|
-
|
|
86
|
+
logError('Unable to parse Optimera Score File.', err);
|
|
87
87
|
}
|
|
88
88
|
} else if (req.status === 403) {
|
|
89
|
-
|
|
89
|
+
logError('Unable to fetch the Optimera Score File - 403');
|
|
90
90
|
}
|
|
91
91
|
},
|
|
92
92
|
error: () => {
|
|
93
|
-
|
|
93
|
+
logError('Unable to fetch the Optimera Score File.');
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
96
|
}
|
|
@@ -108,9 +108,9 @@ export function returnTargetingData(adUnits, config) {
|
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
} catch (err) {
|
|
111
|
-
|
|
111
|
+
logError('error', err);
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
logInfo('Apply Optimera targeting');
|
|
114
114
|
return targeting;
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -143,7 +143,7 @@ export function init(moduleConfig) {
|
|
|
143
143
|
return true;
|
|
144
144
|
} else {
|
|
145
145
|
if (!_moduleParams.clientID) {
|
|
146
|
-
|
|
146
|
+
logError('Optimera clientID is missing in the Optimera RTD configuration.');
|
|
147
147
|
}
|
|
148
148
|
return false;
|
|
149
149
|
}
|
|
@@ -185,7 +185,7 @@ export function setScores(result) {
|
|
|
185
185
|
scores = scores.device[device];
|
|
186
186
|
}
|
|
187
187
|
} catch (e) {
|
|
188
|
-
|
|
188
|
+
logError('Optimera score file could not be parsed.');
|
|
189
189
|
}
|
|
190
190
|
optimeraTargeting = scores;
|
|
191
191
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { deepAccess } from '../src/utils.js';
|
|
2
2
|
import {config} from '../src/config.js';
|
|
3
3
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
4
4
|
|
|
5
5
|
const BIDDER_CODE = 'optout';
|
|
6
6
|
|
|
7
7
|
function getDomain(bidderRequest) {
|
|
8
|
-
return
|
|
8
|
+
return deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || deepAccess(window, 'location.href');
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
function getCurrency() {
|
|
@@ -23,7 +23,7 @@ function hasPurpose1Consent(bidderRequest) {
|
|
|
23
23
|
let result = false;
|
|
24
24
|
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
25
25
|
if (bidderRequest.gdprConsent.apiVersion === 2) {
|
|
26
|
-
result = !!(
|
|
26
|
+
result = !!(deepAccess(bidderRequest.gdprConsent, 'vendorData.purpose.consents.1') === true);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
return result;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { isFn, isPlainObject } from '../src/utils.js';
|
|
1
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
3
|
import { getStorageManager } from '../src/storageManager.js';
|
|
3
4
|
import { BANNER, NATIVE } from '../src/mediaTypes.js';
|
|
4
|
-
import * as utils from '../src/utils.js';
|
|
5
5
|
|
|
6
6
|
const storageManager = getStorageManager();
|
|
7
7
|
|
|
@@ -146,7 +146,7 @@ export const spec = {
|
|
|
146
146
|
* @returns {float||undefined}
|
|
147
147
|
*/
|
|
148
148
|
function getBidFloor(bid) {
|
|
149
|
-
if (!
|
|
149
|
+
if (!isFn(bid.getFloor)) {
|
|
150
150
|
return bid.params.bidfloor;
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -155,7 +155,7 @@ function getBidFloor(bid) {
|
|
|
155
155
|
mediaType: '*',
|
|
156
156
|
size: '*'
|
|
157
157
|
});
|
|
158
|
-
if (
|
|
158
|
+
if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'EUR') {
|
|
159
159
|
return floor.floor;
|
|
160
160
|
}
|
|
161
161
|
return undefined;
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
registerBidder
|
|
6
6
|
} from '../src/adapters/bidderFactory.js';
|
|
7
7
|
import { NATIVE, BANNER } from '../src/mediaTypes.js';
|
|
8
|
-
import
|
|
8
|
+
import { deepAccess, deepSetValue, replaceAuctionPrice, _map, isArray } from '../src/utils.js';
|
|
9
9
|
import { ajax } from '../src/ajax.js';
|
|
10
10
|
import { config } from '../src/config.js';
|
|
11
11
|
|
|
@@ -29,7 +29,7 @@ export const spec = {
|
|
|
29
29
|
isBidRequestValid: (bid) => {
|
|
30
30
|
return (
|
|
31
31
|
!!config.getConfig('outbrain.bidderUrl') &&
|
|
32
|
-
!!
|
|
32
|
+
!!deepAccess(bid, 'params.publisher.id') &&
|
|
33
33
|
!!(bid.nativeParams || bid.sizes)
|
|
34
34
|
);
|
|
35
35
|
},
|
|
@@ -94,15 +94,15 @@ export const spec = {
|
|
|
94
94
|
request.test = 1;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
if (deepAccess(bidderRequest, 'gdprConsent.gdprApplies')) {
|
|
98
|
+
deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent.consentString)
|
|
99
|
+
deepSetValue(request, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies & 1)
|
|
100
100
|
}
|
|
101
101
|
if (bidderRequest.uspConsent) {
|
|
102
|
-
|
|
102
|
+
deepSetValue(request, 'regs.ext.us_privacy', bidderRequest.uspConsent)
|
|
103
103
|
}
|
|
104
104
|
if (config.getConfig('coppa') === true) {
|
|
105
|
-
|
|
105
|
+
deepSetValue(request, 'regs.coppa', config.getConfig('coppa') & 1)
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
return {
|
|
@@ -177,7 +177,7 @@ export const spec = {
|
|
|
177
177
|
// for native requests we put the nurl as an imp tracker, otherwise if the auction takes place on prebid server
|
|
178
178
|
// the server JS adapter puts the nurl in the adm as a tracking pixel and removes the attribute
|
|
179
179
|
if (bid.nurl) {
|
|
180
|
-
ajax(
|
|
180
|
+
ajax(replaceAuctionPrice(bid.nurl, bid.originalCpm))
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
};
|
|
@@ -216,7 +216,7 @@ function parseNative(bid) {
|
|
|
216
216
|
|
|
217
217
|
function setOnAny(collection, key) {
|
|
218
218
|
for (let i = 0, result; i < collection.length; i++) {
|
|
219
|
-
result =
|
|
219
|
+
result = deepAccess(collection[i], key);
|
|
220
220
|
if (result) {
|
|
221
221
|
return result;
|
|
222
222
|
}
|
|
@@ -228,7 +228,7 @@ function flatten(arr) {
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
function getNativeAssets(bid) {
|
|
231
|
-
return
|
|
231
|
+
return _map(bid.nativeParams, (bidParams, key) => {
|
|
232
232
|
const props = NATIVE_PARAMS[key];
|
|
233
233
|
const asset = {
|
|
234
234
|
required: bidParams.required & 1,
|
|
@@ -266,16 +266,16 @@ function getNativeAssets(bid) {
|
|
|
266
266
|
|
|
267
267
|
/* Turn bid request sizes into ut-compatible format */
|
|
268
268
|
function transformSizes(requestSizes) {
|
|
269
|
-
if (!
|
|
269
|
+
if (!isArray(requestSizes)) {
|
|
270
270
|
return [];
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
if (requestSizes.length === 2 && !
|
|
273
|
+
if (requestSizes.length === 2 && !isArray(requestSizes[0])) {
|
|
274
274
|
return [{
|
|
275
275
|
w: parseInt(requestSizes[0], 10),
|
|
276
276
|
h: parseInt(requestSizes[1], 10)
|
|
277
277
|
}];
|
|
278
|
-
} else if (
|
|
278
|
+
} else if (isArray(requestSizes[0])) {
|
|
279
279
|
return requestSizes.map(item =>
|
|
280
280
|
({
|
|
281
281
|
w: parseInt(item[0], 10),
|