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 { isArray, logError, logWarn, isFn, isPlainObject } from '../src/utils.js';
|
|
2
2
|
import { Renderer } from '../src/Renderer.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
@@ -108,13 +108,13 @@ export const spec = {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
bidResponse.meta = {};
|
|
111
|
-
if (response.meta && response.meta.advertiserDomains &&
|
|
111
|
+
if (response.meta && response.meta.advertiserDomains && isArray(response.meta.advertiserDomains)) {
|
|
112
112
|
bidResponse.meta.advertiserDomains = response.meta.advertiserDomains;
|
|
113
113
|
}
|
|
114
114
|
bidResponses.push(bidResponse);
|
|
115
115
|
}
|
|
116
116
|
} catch (error) {
|
|
117
|
-
|
|
117
|
+
logError('Error while parsing smilewanted response', error);
|
|
118
118
|
}
|
|
119
119
|
return bidResponses;
|
|
120
120
|
},
|
|
@@ -170,7 +170,7 @@ function newRenderer(bidRequest, bidResponse) {
|
|
|
170
170
|
try {
|
|
171
171
|
renderer.setRender(outstreamRender);
|
|
172
172
|
} catch (err) {
|
|
173
|
-
|
|
173
|
+
logWarn('Prebid Error calling setRender on newRenderer', err);
|
|
174
174
|
}
|
|
175
175
|
return renderer;
|
|
176
176
|
}
|
|
@@ -197,13 +197,13 @@ function outstreamRender(bid) {
|
|
|
197
197
|
* @returns {*|number} floor price
|
|
198
198
|
*/
|
|
199
199
|
function getBidFloor(bid) {
|
|
200
|
-
if (
|
|
200
|
+
if (isFn(bid.getFloor)) {
|
|
201
201
|
const floorInfo = bid.getFloor({
|
|
202
202
|
currency: 'USD',
|
|
203
203
|
mediaType: 'banner',
|
|
204
204
|
size: bid.sizes.map(size => ({ w: size[0], h: size[1] }))
|
|
205
205
|
});
|
|
206
|
-
if (
|
|
206
|
+
if (isPlainObject(floorInfo) && !isNaN(floorInfo.floor) && floorInfo.currency === 'USD') {
|
|
207
207
|
return parseFloat(floorInfo.floor);
|
|
208
208
|
}
|
|
209
209
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { deepClone, logInfo, logError } from '../src/utils.js';
|
|
1
2
|
import adapter from '../src/AnalyticsAdapter.js';
|
|
2
3
|
import CONSTANTS from '../src/constants.json';
|
|
3
4
|
import adapterManager from '../src/adapterManager.js';
|
|
4
5
|
import {ajaxBuilder} from '../src/ajax.js';
|
|
5
6
|
|
|
6
|
-
const utils = require('../src/utils.js');
|
|
7
7
|
let ajax = ajaxBuilder(0);
|
|
8
8
|
|
|
9
9
|
const DEFAULT_EVENT_URL = 'apex.go.sonobi.com/keymaker';
|
|
@@ -91,7 +91,7 @@ function addToAuctionQueue(auctionId, id) {
|
|
|
91
91
|
if (item.bidid !== id) { return true; }
|
|
92
92
|
return auction.stats[id].data.p !== item.p;
|
|
93
93
|
});
|
|
94
|
-
auction.queue.push(
|
|
94
|
+
auction.queue.push(deepClone(auction.stats[id].data));
|
|
95
95
|
if (!auction.qTimeout) {
|
|
96
96
|
auction.qTimeout = setTimeout(() => {
|
|
97
97
|
sendQueue(auctionId);
|
|
@@ -102,18 +102,18 @@ function updateBidStats(auctionId, id, data) {
|
|
|
102
102
|
let auction = auctionCache[auctionId];
|
|
103
103
|
auction.stats[id].data = {...auction.stats[id].data, ...data};
|
|
104
104
|
addToAuctionQueue(auctionId, id);
|
|
105
|
-
|
|
105
|
+
_logInfo('Updated Bid Stats: ', auction.stats[id]);
|
|
106
106
|
return auction.stats[id];
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
function handleOtherEvents(eventType, args) {
|
|
110
|
-
|
|
110
|
+
_logInfo('Other Event: ' + eventType, args);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
function handlerAuctionInit(args) {
|
|
114
114
|
auctionCache[args.auctionId] = buildAuctionEntity(args);
|
|
115
115
|
deleteOldAuctions();
|
|
116
|
-
|
|
116
|
+
_logInfo('Auction Init', args);
|
|
117
117
|
}
|
|
118
118
|
function handlerBidRequested(args) {
|
|
119
119
|
let auction = auctionCache[args.auctionId];
|
|
@@ -127,14 +127,14 @@ function handlerBidRequested(args) {
|
|
|
127
127
|
addToAuctionQueue(args.auctionId, built.bidid);
|
|
128
128
|
})
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
_logInfo('Bids Requested ', data);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
function handlerBidAdjustment(args) {
|
|
134
|
-
|
|
134
|
+
_logInfo('Bid Adjustment', args);
|
|
135
135
|
}
|
|
136
136
|
function handlerBidderDone(args) {
|
|
137
|
-
|
|
137
|
+
_logInfo('Bidder Done', args);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
function handlerAuctionEnd(args) {
|
|
@@ -152,24 +152,24 @@ function handlerAuctionEnd(args) {
|
|
|
152
152
|
updateBidStats(args.auctionId, bidId, {response: 4});
|
|
153
153
|
}
|
|
154
154
|
})
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
_logInfo('Auction End', args);
|
|
156
|
+
_logInfo('Auction Cache', auctionCache[args.auctionId].stats);
|
|
157
157
|
}
|
|
158
158
|
function handlerBidWon(args) {
|
|
159
159
|
let {auctionId, requestId} = args;
|
|
160
160
|
let res = updateBidStats(auctionId, requestId, {p: 3, response: 6});
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
_logInfo('Bid Won ', args);
|
|
162
|
+
_logInfo('Bid Update Result: ', res);
|
|
163
163
|
}
|
|
164
164
|
function handlerBidResponse(args) {
|
|
165
165
|
let {auctionId, requestId, cpm, size, timeToRespond} = args;
|
|
166
166
|
updateBidStats(auctionId, requestId, {bid: cpm, s: size, jsLatency: timeToRespond, latency: timeToRespond, p: 2, response: 9});
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
_logInfo('Bid Response ', args);
|
|
169
169
|
}
|
|
170
170
|
function handlerBidTimeout(args) {
|
|
171
171
|
let {auctionId, bidId} = args;
|
|
172
|
-
|
|
172
|
+
_logInfo('Bid Timeout ', args);
|
|
173
173
|
updateBidStats(auctionId, bidId, {p: 2, response: 0, latency: args.timeout, jsLatency: args.timeout});
|
|
174
174
|
}
|
|
175
175
|
let sonobiAdapter = Object.assign(adapter({url: DEFAULT_EVENT_URL, analyticsType}), {
|
|
@@ -211,7 +211,7 @@ sonobiAdapter.originEnableAnalytics = sonobiAdapter.enableAnalytics;
|
|
|
211
211
|
|
|
212
212
|
sonobiAdapter.enableAnalytics = function (config) {
|
|
213
213
|
if (this.initConfig(config)) {
|
|
214
|
-
|
|
214
|
+
_logInfo('Analytics adapter enabled', initOptions);
|
|
215
215
|
sonobiAdapter.originEnableAnalytics(config);
|
|
216
216
|
}
|
|
217
217
|
};
|
|
@@ -219,17 +219,17 @@ sonobiAdapter.enableAnalytics = function (config) {
|
|
|
219
219
|
sonobiAdapter.initConfig = function (config) {
|
|
220
220
|
let isCorrectConfig = true;
|
|
221
221
|
initOptions = {};
|
|
222
|
-
initOptions.options =
|
|
222
|
+
initOptions.options = deepClone(config.options);
|
|
223
223
|
|
|
224
224
|
initOptions.pubId = initOptions.options.pubId || null;
|
|
225
225
|
initOptions.siteId = initOptions.options.siteId || null;
|
|
226
226
|
initOptions.delay = initOptions.options.delay || QUEUE_TIMEOUT_DEFAULT;
|
|
227
227
|
if (!initOptions.pubId) {
|
|
228
|
-
|
|
228
|
+
_logError('"options.pubId" is empty');
|
|
229
229
|
isCorrectConfig = false;
|
|
230
230
|
}
|
|
231
231
|
if (!initOptions.siteId) {
|
|
232
|
-
|
|
232
|
+
_logError('"options.siteId" is empty');
|
|
233
233
|
isCorrectConfig = false;
|
|
234
234
|
}
|
|
235
235
|
|
|
@@ -247,7 +247,7 @@ sonobiAdapter.sendData = function (auction, data) {
|
|
|
247
247
|
let url = 'https://' + initOptions.server + '?pageviewid=' + auction.id + '&corscred=1&pubId=' + initOptions.pubId + '&siteId=' + initOptions.siteId;
|
|
248
248
|
ajax(
|
|
249
249
|
url,
|
|
250
|
-
function () {
|
|
250
|
+
function () { _logInfo('Auction [' + auction.id + '] sent ', data); },
|
|
251
251
|
JSON.stringify(data),
|
|
252
252
|
{
|
|
253
253
|
method: 'POST',
|
|
@@ -257,12 +257,12 @@ sonobiAdapter.sendData = function (auction, data) {
|
|
|
257
257
|
);
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
function
|
|
261
|
-
|
|
260
|
+
function _logInfo(message, meta) {
|
|
261
|
+
logInfo(buildLogMessage(message), meta);
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
function
|
|
265
|
-
|
|
264
|
+
function _logError(message) {
|
|
265
|
+
logError(buildLogMessage(message));
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
function buildLogMessage(message) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { logInfo, getParameterByName, getOldestHighestCpmBid } from '../src/utils.js';
|
|
1
2
|
import adapter from '../src/AnalyticsAdapter.js';
|
|
2
3
|
import CONSTANTS from '../src/constants.json';
|
|
3
4
|
import adapterManager from '../src/adapterManager.js';
|
|
4
|
-
import * as utils from '../src/utils.js';
|
|
5
5
|
import {ajax} from '../src/ajax.js';
|
|
6
6
|
import {getGlobal} from '../src/prebidGlobal.js';
|
|
7
7
|
import { config } from '../src/config.js';
|
|
@@ -160,7 +160,7 @@ function getSessionParams() {
|
|
|
160
160
|
sessionParams = paramsFromStorage && stillValid(paramsFromStorage) ? paramsFromStorage : null;
|
|
161
161
|
}
|
|
162
162
|
sessionParams = sessionParams || {'created': +new Date(), 'sessionId': generateRandomId()};
|
|
163
|
-
const urlParams = UTM_PARAMS.map(
|
|
163
|
+
const urlParams = UTM_PARAMS.map(getParameterByName);
|
|
164
164
|
if (UTM_PARAMS.every(key => !sessionParams[key])) {
|
|
165
165
|
UTM_PARAMS.forEach((v, i) => sessionParams[v] = urlParams[i] || sessionParams[v]);
|
|
166
166
|
sessionParams.created = +new Date();
|
|
@@ -318,7 +318,7 @@ function sendEvents(events) {
|
|
|
318
318
|
'method': 'POST',
|
|
319
319
|
'withCredentials': true
|
|
320
320
|
};
|
|
321
|
-
const onSend = () =>
|
|
321
|
+
const onSend = () => logInfo('Sortable Analytics data sent');
|
|
322
322
|
ajax(url, onSend, JSON.stringify(mergedEvents), options);
|
|
323
323
|
}
|
|
324
324
|
|
|
@@ -444,7 +444,7 @@ function handleAuctionEnd(event) {
|
|
|
444
444
|
const events = Object.keys(adUnits).map(adUnitCode => {
|
|
445
445
|
const bidderKeys = Object.keys(auction.adUnits[adUnitCode].bids);
|
|
446
446
|
const bids = bidderKeys.map(bidderCode => auction.adUnits[adUnitCode].bids[bidderCode]);
|
|
447
|
-
const highestBid = bids.length ? bids.reduce(
|
|
447
|
+
const highestBid = bids.length ? bids.reduce(getOldestHighestCpmBid) : null;
|
|
448
448
|
return bidderKeys.map(bidderCode => {
|
|
449
449
|
const bid = auction.adUnits[adUnitCode].bids[bidderCode];
|
|
450
450
|
if (highestBid && highestBid.cpm) {
|
|
@@ -507,7 +507,7 @@ sortableAnalyticsAdapter.originEnableAnalytics = sortableAnalyticsAdapter.enable
|
|
|
507
507
|
|
|
508
508
|
sortableAnalyticsAdapter.enableAnalytics = function (setupConfig) {
|
|
509
509
|
if (this.initConfig(setupConfig)) {
|
|
510
|
-
|
|
510
|
+
logInfo('Sortable Analytics adapter enabled');
|
|
511
511
|
sortableAnalyticsAdapter.originEnableAnalytics(setupConfig);
|
|
512
512
|
}
|
|
513
513
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { _each, logError, isFn, isPlainObject, isNumber, isStr, deepAccess, parseUrl, _map, getUniqueIdentifierStr, createTrackPixelHtml } 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, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
@@ -55,7 +55,7 @@ function buildNativeRequest(nativeMediaType) {
|
|
|
55
55
|
assets.push(setAssetRequired(sponsoredBy, {data: {type: 1}}));
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
_each(assets, (asset, id) => asset.id = id);
|
|
59
59
|
return {
|
|
60
60
|
ver: '1',
|
|
61
61
|
request: JSON.stringify({
|
|
@@ -70,7 +70,7 @@ function tryParseNativeResponse(adm) {
|
|
|
70
70
|
try {
|
|
71
71
|
native = JSON.parse(adm);
|
|
72
72
|
} catch (e) {
|
|
73
|
-
|
|
73
|
+
logError('Sortable bid adapter unable to parse native bid response:\n\n' + e);
|
|
74
74
|
}
|
|
75
75
|
return native && native.native;
|
|
76
76
|
}
|
|
@@ -92,7 +92,7 @@ function interpretNativeResponse(response) {
|
|
|
92
92
|
if (response.link) {
|
|
93
93
|
native.clickUrl = response.link.url;
|
|
94
94
|
}
|
|
95
|
-
|
|
95
|
+
_each(response.assets, asset => {
|
|
96
96
|
switch (asset.id) {
|
|
97
97
|
case 1:
|
|
98
98
|
native.title = asset.title.text;
|
|
@@ -118,9 +118,9 @@ function interpretNativeResponse(response) {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
function transformSyncs(responses, type, syncs) {
|
|
121
|
-
|
|
121
|
+
_each(responses, res => {
|
|
122
122
|
if (res.body && res.body.ext && res.body.ext.sync_dsps && res.body.ext.sync_dsps.length) {
|
|
123
|
-
|
|
123
|
+
_each(res.body.ext.sync_dsps, sync => {
|
|
124
124
|
if (sync[0] === type && sync[1]) {
|
|
125
125
|
syncs.push({type, url: sync[1]});
|
|
126
126
|
}
|
|
@@ -130,7 +130,7 @@ function transformSyncs(responses, type, syncs) {
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
function getBidFloor(bid) {
|
|
133
|
-
if (!
|
|
133
|
+
if (!isFn(bid.getFloor)) {
|
|
134
134
|
return bid.params.floor ? bid.params.floor : null;
|
|
135
135
|
}
|
|
136
136
|
|
|
@@ -141,7 +141,7 @@ function getBidFloor(bid) {
|
|
|
141
141
|
mediaType: '*',
|
|
142
142
|
size: '*'
|
|
143
143
|
});
|
|
144
|
-
if (
|
|
144
|
+
if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'USD') {
|
|
145
145
|
return floor.floor;
|
|
146
146
|
}
|
|
147
147
|
return null;
|
|
@@ -155,36 +155,36 @@ export const spec = {
|
|
|
155
155
|
const sortableConfig = config.getConfig('sortable');
|
|
156
156
|
const haveSiteId = (sortableConfig && !!sortableConfig.siteId) || bid.params.siteId;
|
|
157
157
|
const floor = getBidFloor(bid);
|
|
158
|
-
const validFloor = !floor ||
|
|
158
|
+
const validFloor = !floor || isNumber(floor);
|
|
159
159
|
const validKeywords = !bid.params.keywords ||
|
|
160
|
-
(
|
|
160
|
+
(isPlainObject(bid.params.keywords) &&
|
|
161
161
|
Object.keys(bid.params.keywords).every(key =>
|
|
162
|
-
|
|
162
|
+
isStr(key) && isStr(bid.params.keywords[key])
|
|
163
163
|
))
|
|
164
164
|
const isBanner = !bid.mediaTypes || bid.mediaTypes[BANNER] || !(bid.mediaTypes[NATIVE] || bid.mediaTypes[VIDEO]);
|
|
165
|
-
const bannerSizes = isBanner ?
|
|
165
|
+
const bannerSizes = isBanner ? deepAccess(bid, `mediaType.${BANNER}.sizes`) || bid.sizes : null;
|
|
166
166
|
return !!(bid.params.tagId && haveSiteId && validFloor && validKeywords && (!isBanner ||
|
|
167
|
-
(bannerSizes && bannerSizes.length > 0 && bannerSizes.every(sizeArr => sizeArr.length == 2 && sizeArr.every(num =>
|
|
167
|
+
(bannerSizes && bannerSizes.length > 0 && bannerSizes.every(sizeArr => sizeArr.length == 2 && sizeArr.every(num => isNumber(num))))));
|
|
168
168
|
},
|
|
169
169
|
|
|
170
170
|
buildRequests: function(validBidReqs, bidderRequest) {
|
|
171
171
|
const sortableConfig = config.getConfig('sortable') || {};
|
|
172
172
|
const globalSiteId = sortableConfig.siteId;
|
|
173
|
-
let loc =
|
|
173
|
+
let loc = parseUrl(bidderRequest.refererInfo.referer);
|
|
174
174
|
|
|
175
|
-
const sortableImps =
|
|
175
|
+
const sortableImps = _map(validBidReqs, bid => {
|
|
176
176
|
const rv = {
|
|
177
177
|
id: bid.bidId,
|
|
178
178
|
tagid: bid.params.tagId,
|
|
179
179
|
ext: {}
|
|
180
180
|
};
|
|
181
|
-
const bannerMediaType =
|
|
182
|
-
const nativeMediaType =
|
|
183
|
-
const videoMediaType =
|
|
181
|
+
const bannerMediaType = deepAccess(bid, `mediaTypes.${BANNER}`);
|
|
182
|
+
const nativeMediaType = deepAccess(bid, `mediaTypes.${NATIVE}`);
|
|
183
|
+
const videoMediaType = deepAccess(bid, `mediaTypes.${VIDEO}`);
|
|
184
184
|
if (bannerMediaType || !(nativeMediaType || videoMediaType)) {
|
|
185
185
|
const bannerSizes = (bannerMediaType && bannerMediaType.sizes) || bid.sizes;
|
|
186
186
|
rv.banner = {
|
|
187
|
-
format:
|
|
187
|
+
format: _map(bannerSizes, ([width, height]) => ({w: width, h: height}))
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
190
|
if (nativeMediaType) {
|
|
@@ -193,9 +193,9 @@ export const spec = {
|
|
|
193
193
|
if (videoMediaType && videoMediaType.context === 'instream') {
|
|
194
194
|
const video = {placement: 1};
|
|
195
195
|
video.mimes = videoMediaType.mimes || [];
|
|
196
|
-
video.minduration =
|
|
197
|
-
video.maxduration =
|
|
198
|
-
const startDelay =
|
|
196
|
+
video.minduration = deepAccess(bid, 'params.video.minduration') || 10;
|
|
197
|
+
video.maxduration = deepAccess(bid, 'params.video.maxduration') || 60;
|
|
198
|
+
const startDelay = deepAccess(bid, 'params.video.startdelay');
|
|
199
199
|
if (startDelay != null) {
|
|
200
200
|
video.startdelay = startDelay;
|
|
201
201
|
}
|
|
@@ -223,7 +223,7 @@ export const spec = {
|
|
|
223
223
|
rv.ext.keywords = bid.params.keywords;
|
|
224
224
|
}
|
|
225
225
|
if (bid.params.bidderParams) {
|
|
226
|
-
|
|
226
|
+
_each(bid.params.bidderParams, (params, partner) => {
|
|
227
227
|
rv.ext[partner] = params;
|
|
228
228
|
});
|
|
229
229
|
}
|
|
@@ -233,7 +233,7 @@ export const spec = {
|
|
|
233
233
|
const bidUserId = validBidReqs[0].userId;
|
|
234
234
|
const eids = createEidsArray(bidUserId);
|
|
235
235
|
const sortableBidReq = {
|
|
236
|
-
id:
|
|
236
|
+
id: getUniqueIdentifierStr(),
|
|
237
237
|
imp: sortableImps,
|
|
238
238
|
source: {
|
|
239
239
|
ext: {
|
|
@@ -290,8 +290,8 @@ export const spec = {
|
|
|
290
290
|
const { body: {id, seatbid} } = serverResponse;
|
|
291
291
|
const sortableBids = [];
|
|
292
292
|
if (id && seatbid) {
|
|
293
|
-
|
|
294
|
-
|
|
293
|
+
_each(seatbid, seatbid => {
|
|
294
|
+
_each(seatbid.bid, bid => {
|
|
295
295
|
const bidObj = {
|
|
296
296
|
requestId: bid.impid,
|
|
297
297
|
cpm: parseFloat(bid.price),
|
|
@@ -308,7 +308,7 @@ export const spec = {
|
|
|
308
308
|
}
|
|
309
309
|
};
|
|
310
310
|
if (bid.adm) {
|
|
311
|
-
const adFormat =
|
|
311
|
+
const adFormat = deepAccess(bid, 'ext.ad_format')
|
|
312
312
|
if (adFormat === 'native') {
|
|
313
313
|
let native = tryParseNativeResponse(bid.adm);
|
|
314
314
|
if (!native) {
|
|
@@ -323,7 +323,7 @@ export const spec = {
|
|
|
323
323
|
bidObj.mediaType = BANNER;
|
|
324
324
|
bidObj.ad = bid.adm;
|
|
325
325
|
if (bid.nurl) {
|
|
326
|
-
bidObj.ad +=
|
|
326
|
+
bidObj.ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
|
|
327
327
|
}
|
|
328
328
|
}
|
|
329
329
|
} else if (bid.nurl) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { logError, timestamp } from '../src/utils.js';
|
|
1
2
|
import adapter from '../src/AnalyticsAdapter.js'
|
|
2
3
|
import adaptermanager from '../src/adapterManager.js'
|
|
3
4
|
import CONSTANTS from '../src/constants.json'
|
|
4
5
|
import {ajaxBuilder} from '../src/ajax.js'
|
|
5
|
-
import * as utils from '../src/utils.js'
|
|
6
6
|
import {config} from '../src/config.js'
|
|
7
7
|
import find from 'core-js-pure/features/array/find.js'
|
|
8
8
|
import includes from 'core-js-pure/features/array/includes.js'
|
|
@@ -112,7 +112,7 @@ sovrnAnalyticsAdapter.enableAnalytics = function (config) {
|
|
|
112
112
|
if (config && config.options && (config.options.sovrnId || config.options.affiliateId)) {
|
|
113
113
|
sovrnId = config.options.sovrnId || config.options.affiliateId;
|
|
114
114
|
} else {
|
|
115
|
-
|
|
115
|
+
logError('Need Sovrn Id to log auction results. Please contact a Sovrn representative if you do not know your Sovrn Id.')
|
|
116
116
|
return
|
|
117
117
|
}
|
|
118
118
|
sovrnAnalyticsAdapter.sovrnId = sovrnId;
|
|
@@ -149,7 +149,7 @@ class BidWinner {
|
|
|
149
149
|
* Sends the auction to the the ingest server
|
|
150
150
|
*/
|
|
151
151
|
send() {
|
|
152
|
-
this.body.ts =
|
|
152
|
+
this.body.ts = timestamp()
|
|
153
153
|
ajax(
|
|
154
154
|
pbaUrl,
|
|
155
155
|
null,
|
|
@@ -269,7 +269,7 @@ class AuctionData {
|
|
|
269
269
|
Object.keys(maxBids).forEach(unit => {
|
|
270
270
|
maxBids[unit].isAuctionWinner = true
|
|
271
271
|
})
|
|
272
|
-
this.auction.ts =
|
|
272
|
+
this.auction.ts = timestamp()
|
|
273
273
|
ajax(
|
|
274
274
|
pbaUrl,
|
|
275
275
|
() => {
|
|
@@ -311,7 +311,7 @@ class LogError {
|
|
|
311
311
|
if (ErrorEvent.data && this.error.data.ad) {
|
|
312
312
|
delete this.error.data.ad
|
|
313
313
|
}
|
|
314
|
-
this.error.ts =
|
|
314
|
+
this.error.ts = timestamp()
|
|
315
315
|
ajax(
|
|
316
316
|
pbaUrl,
|
|
317
317
|
null,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { _each, getBidIdParameter, isArray, deepClone, parseUrl, getUniqueIdentifierStr, deepSetValue, logError, deepAccess } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
3
|
import { BANNER } from '../src/mediaTypes.js'
|
|
4
4
|
import { createEidsArray } from './userId/eids.js';
|
|
@@ -32,7 +32,7 @@ export const spec = {
|
|
|
32
32
|
let tpid = []
|
|
33
33
|
let criteoId;
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
_each(bidReqs, function (bid) {
|
|
36
36
|
if (!eids && bid.userId) {
|
|
37
37
|
eids = createEidsArray(bid.userId)
|
|
38
38
|
eids.forEach(function (id) {
|
|
@@ -48,18 +48,18 @@ export const spec = {
|
|
|
48
48
|
if (bid.schain) {
|
|
49
49
|
schain = schain || bid.schain
|
|
50
50
|
}
|
|
51
|
-
iv = iv ||
|
|
51
|
+
iv = iv || getBidIdParameter('iv', bid.params)
|
|
52
52
|
|
|
53
53
|
let bidSizes = (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) || bid.sizes
|
|
54
|
-
bidSizes = ((
|
|
55
|
-
bidSizes = bidSizes.filter(size =>
|
|
54
|
+
bidSizes = ((isArray(bidSizes) && isArray(bidSizes[0])) ? bidSizes : [bidSizes])
|
|
55
|
+
bidSizes = bidSizes.filter(size => isArray(size))
|
|
56
56
|
const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)}))
|
|
57
57
|
const floorInfo = (bid.getFloor && typeof bid.getFloor === 'function') ? bid.getFloor({
|
|
58
58
|
currency: 'USD',
|
|
59
59
|
mediaType: 'banner',
|
|
60
60
|
size: '*'
|
|
61
61
|
}) : {}
|
|
62
|
-
floorInfo.floor = floorInfo.floor ||
|
|
62
|
+
floorInfo.floor = floorInfo.floor || getBidIdParameter('bidfloor', bid.params)
|
|
63
63
|
|
|
64
64
|
const imp = {
|
|
65
65
|
adunitcode: bid.adUnitCode,
|
|
@@ -69,13 +69,13 @@ export const spec = {
|
|
|
69
69
|
w: 1,
|
|
70
70
|
h: 1,
|
|
71
71
|
},
|
|
72
|
-
tagid: String(
|
|
72
|
+
tagid: String(getBidIdParameter('tagid', bid.params)),
|
|
73
73
|
bidfloor: floorInfo.floor
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
imp.ext =
|
|
76
|
+
imp.ext = getBidIdParameter('ext', bid.ortb2Imp) || undefined
|
|
77
77
|
|
|
78
|
-
const segmentsString =
|
|
78
|
+
const segmentsString = getBidIdParameter('segments', bid.params)
|
|
79
79
|
if (segmentsString) {
|
|
80
80
|
imp.ext = imp.ext || {}
|
|
81
81
|
imp.ext.deals = segmentsString.split(',').map(deal => deal.trim())
|
|
@@ -83,15 +83,15 @@ export const spec = {
|
|
|
83
83
|
sovrnImps.push(imp)
|
|
84
84
|
})
|
|
85
85
|
|
|
86
|
-
const fpd =
|
|
86
|
+
const fpd = deepClone(config.getConfig('ortb2'))
|
|
87
87
|
|
|
88
88
|
const site = fpd.site || {}
|
|
89
89
|
site.page = bidderRequest.refererInfo.referer
|
|
90
90
|
// clever trick to get the domain
|
|
91
|
-
site.domain =
|
|
91
|
+
site.domain = parseUrl(site.page).hostname
|
|
92
92
|
|
|
93
93
|
const sovrnBidReq = {
|
|
94
|
-
id:
|
|
94
|
+
id: getUniqueIdentifierStr(),
|
|
95
95
|
imp: sovrnImps,
|
|
96
96
|
site: site,
|
|
97
97
|
user: fpd.user || {}
|
|
@@ -106,18 +106,18 @@ export const spec = {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
if (bidderRequest.gdprConsent) {
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
deepSetValue(sovrnBidReq, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies);
|
|
110
|
+
deepSetValue(sovrnBidReq, 'user.ext.consent', bidderRequest.gdprConsent.consentString)
|
|
111
111
|
}
|
|
112
112
|
if (bidderRequest.uspConsent) {
|
|
113
|
-
|
|
113
|
+
deepSetValue(sovrnBidReq, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
if (eids) {
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
deepSetValue(sovrnBidReq, 'user.ext.eids', eids)
|
|
118
|
+
deepSetValue(sovrnBidReq, 'user.ext.tpid', tpid)
|
|
119
119
|
if (criteoId) {
|
|
120
|
-
|
|
120
|
+
deepSetValue(sovrnBidReq, 'user.ext.prebid_criteoid', criteoId)
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
@@ -131,7 +131,7 @@ export const spec = {
|
|
|
131
131
|
options: {contentType: 'text/plain'}
|
|
132
132
|
}
|
|
133
133
|
} catch (e) {
|
|
134
|
-
|
|
134
|
+
logError('Could not build bidrequest, error deatils:', e);
|
|
135
135
|
}
|
|
136
136
|
},
|
|
137
137
|
|
|
@@ -167,7 +167,7 @@ export const spec = {
|
|
|
167
167
|
}
|
|
168
168
|
return sovrnBidResponses
|
|
169
169
|
} catch (e) {
|
|
170
|
-
|
|
170
|
+
logError('Could not intrepret bidresponse, error deatils:', e);
|
|
171
171
|
}
|
|
172
172
|
},
|
|
173
173
|
|
|
@@ -176,7 +176,7 @@ export const spec = {
|
|
|
176
176
|
const tracks = []
|
|
177
177
|
if (serverResponses && serverResponses.length !== 0) {
|
|
178
178
|
if (syncOptions.iframeEnabled) {
|
|
179
|
-
const iidArr = serverResponses.filter(resp =>
|
|
179
|
+
const iidArr = serverResponses.filter(resp => deepAccess(resp, 'body.ext.iid'))
|
|
180
180
|
.map(resp => resp.body.ext.iid);
|
|
181
181
|
const params = [];
|
|
182
182
|
if (gdprConsent && gdprConsent.gdprApplies && typeof gdprConsent.consentString === 'string') {
|
|
@@ -196,7 +196,7 @@ export const spec = {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
if (syncOptions.pixelEnabled) {
|
|
199
|
-
serverResponses.filter(resp =>
|
|
199
|
+
serverResponses.filter(resp => deepAccess(resp, 'body.ext.sync.pixels'))
|
|
200
200
|
.reduce((acc, resp) => acc.concat(resp.body.ext.sync.pixels), [])
|
|
201
201
|
.map(pixel => pixel.url)
|
|
202
202
|
.forEach(url => tracks.push({ type: 'image', url }))
|