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 { logInfo, logError, deepAccess, logWarn, deepSetValue, isArray, contains, isStr, mergeDeep } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
4
4
|
import {config} from '../src/config.js';
|
|
@@ -41,7 +41,7 @@ export const spec = {
|
|
|
41
41
|
this.propertyBag.whitelabel.logId = bidder.toUpperCase();
|
|
42
42
|
this.propertyBag.whitelabel.bidder = bidder;
|
|
43
43
|
let bidderConfig = config.getConfig(bidder) || {};
|
|
44
|
-
|
|
44
|
+
logInfo('got bidderConfig: ', JSON.parse(JSON.stringify(bidderConfig)));
|
|
45
45
|
if (bidderConfig.kvpPrefix) {
|
|
46
46
|
this.propertyBag.whitelabel.keyPrefix = bidderConfig.kvpPrefix;
|
|
47
47
|
}
|
|
@@ -71,15 +71,15 @@ export const spec = {
|
|
|
71
71
|
}
|
|
72
72
|
try {
|
|
73
73
|
if (arr.hasOwnProperty('auction') && arr.auction === 'dev') {
|
|
74
|
-
|
|
74
|
+
logInfo('GET: auction=dev');
|
|
75
75
|
this.propertyBag.whitelabel.auctionUrl = ORIGIN_DEV + AUCTIONURI;
|
|
76
76
|
}
|
|
77
77
|
if (arr.hasOwnProperty('cookiesync') && arr.cookiesync === 'dev') {
|
|
78
|
-
|
|
78
|
+
logInfo('GET: cookiesync=dev');
|
|
79
79
|
this.propertyBag.whitelabel.cookieSyncUrl = ORIGIN_DEV + OZONECOOKIESYNC;
|
|
80
80
|
}
|
|
81
81
|
} catch (e) {}
|
|
82
|
-
|
|
82
|
+
logInfo('set propertyBag.whitelabel to', this.propertyBag.whitelabel);
|
|
83
83
|
},
|
|
84
84
|
getAuctionUrl() {
|
|
85
85
|
return this.propertyBag.whitelabel.auctionUrl;
|
|
@@ -97,62 +97,62 @@ export const spec = {
|
|
|
97
97
|
*/
|
|
98
98
|
isBidRequestValid(bid) {
|
|
99
99
|
this.loadWhitelabelData(bid);
|
|
100
|
-
|
|
100
|
+
logInfo('isBidRequestValid : ', config.getConfig(), bid);
|
|
101
101
|
let adUnitCode = bid.adUnitCode; // adunit[n].code
|
|
102
102
|
|
|
103
103
|
if (!(bid.params.hasOwnProperty('placementId'))) {
|
|
104
|
-
|
|
104
|
+
logError('VALIDATION FAILED : missing placementId : siteId, placementId and publisherId are REQUIRED', adUnitCode);
|
|
105
105
|
return false;
|
|
106
106
|
}
|
|
107
107
|
if (!this.isValidPlacementId(bid.params.placementId)) {
|
|
108
|
-
|
|
108
|
+
logError('VALIDATION FAILED : placementId must be exactly 10 numeric characters', adUnitCode);
|
|
109
109
|
return false;
|
|
110
110
|
}
|
|
111
111
|
if (!(bid.params.hasOwnProperty('publisherId'))) {
|
|
112
|
-
|
|
112
|
+
logError('VALIDATION FAILED : missing publisherId : siteId, placementId and publisherId are REQUIRED', adUnitCode);
|
|
113
113
|
return false;
|
|
114
114
|
}
|
|
115
115
|
if (!(bid.params.publisherId).toString().match(/^[a-zA-Z0-9\-]{12}$/)) {
|
|
116
|
-
|
|
116
|
+
logError('VALIDATION FAILED : publisherId must be exactly 12 alphanumieric characters including hyphens', adUnitCode);
|
|
117
117
|
return false;
|
|
118
118
|
}
|
|
119
119
|
if (!(bid.params.hasOwnProperty('siteId'))) {
|
|
120
|
-
|
|
120
|
+
logError('VALIDATION FAILED : missing siteId : siteId, placementId and publisherId are REQUIRED', adUnitCode);
|
|
121
121
|
return false;
|
|
122
122
|
}
|
|
123
123
|
if (!(bid.params.siteId).toString().match(/^[0-9]{10}$/)) {
|
|
124
|
-
|
|
124
|
+
logError('VALIDATION FAILED : siteId must be exactly 10 numeric characters', adUnitCode);
|
|
125
125
|
return false;
|
|
126
126
|
}
|
|
127
127
|
if (bid.params.hasOwnProperty('customParams')) {
|
|
128
|
-
|
|
128
|
+
logError('VALIDATION FAILED : customParams should be renamed to customData', adUnitCode);
|
|
129
129
|
return false;
|
|
130
130
|
}
|
|
131
131
|
if (bid.params.hasOwnProperty('customData')) {
|
|
132
132
|
if (!Array.isArray(bid.params.customData)) {
|
|
133
|
-
|
|
133
|
+
logError('VALIDATION FAILED : customData is not an Array', adUnitCode);
|
|
134
134
|
return false;
|
|
135
135
|
}
|
|
136
136
|
if (bid.params.customData.length < 1) {
|
|
137
|
-
|
|
137
|
+
logError('VALIDATION FAILED : customData is an array but does not contain any elements', adUnitCode);
|
|
138
138
|
return false;
|
|
139
139
|
}
|
|
140
140
|
if (!(bid.params.customData[0]).hasOwnProperty('targeting')) {
|
|
141
|
-
|
|
141
|
+
logError('VALIDATION FAILED : customData[0] does not contain "targeting"', adUnitCode);
|
|
142
142
|
return false;
|
|
143
143
|
}
|
|
144
144
|
if (typeof bid.params.customData[0]['targeting'] != 'object') {
|
|
145
|
-
|
|
145
|
+
logError('VALIDATION FAILED : customData[0] targeting is not an object', adUnitCode);
|
|
146
146
|
return false;
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
if (bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty(VIDEO)) {
|
|
150
150
|
if (!bid.mediaTypes[VIDEO].hasOwnProperty('context')) {
|
|
151
|
-
|
|
151
|
+
logError('No video context key/value in bid. Rejecting bid: ', bid);
|
|
152
152
|
return false;
|
|
153
153
|
}
|
|
154
154
|
if (bid.mediaTypes[VIDEO].context !== 'instream' && bid.mediaTypes[VIDEO].context !== 'outstream') {
|
|
155
|
-
|
|
155
|
+
logError('video.context is invalid. Only instream/outstream video is supported. Rejecting bid: ', bid);
|
|
156
156
|
return false;
|
|
157
157
|
}
|
|
158
158
|
}
|
|
@@ -172,7 +172,7 @@ export const spec = {
|
|
|
172
172
|
this.propertyBag.buildRequestsStart = new Date().getTime();
|
|
173
173
|
let whitelabelBidder = this.propertyBag.whitelabel.bidder; // by default = ozone
|
|
174
174
|
let whitelabelPrefix = this.propertyBag.whitelabel.keyPrefix;
|
|
175
|
-
|
|
175
|
+
logInfo(`buildRequests time: ${this.propertyBag.buildRequestsStart} v ${OZONEVERSION} validBidRequests`, JSON.parse(JSON.stringify(validBidRequests)), 'bidderRequest', JSON.parse(JSON.stringify(bidderRequest)));
|
|
176
176
|
// First check - is there any config to block this request?
|
|
177
177
|
if (this.blockTheRequest()) {
|
|
178
178
|
return [];
|
|
@@ -180,21 +180,21 @@ export const spec = {
|
|
|
180
180
|
let htmlParams = {'publisherId': '', 'siteId': ''};
|
|
181
181
|
if (validBidRequests.length > 0) {
|
|
182
182
|
this.cookieSyncBag.userIdObject = Object.assign(this.cookieSyncBag.userIdObject, this.findAllUserIds(validBidRequests[0]));
|
|
183
|
-
this.cookieSyncBag.siteId =
|
|
184
|
-
this.cookieSyncBag.publisherId =
|
|
183
|
+
this.cookieSyncBag.siteId = deepAccess(validBidRequests[0], 'params.siteId');
|
|
184
|
+
this.cookieSyncBag.publisherId = deepAccess(validBidRequests[0], 'params.publisherId');
|
|
185
185
|
htmlParams = validBidRequests[0].params;
|
|
186
186
|
}
|
|
187
|
-
|
|
187
|
+
logInfo('cookie sync bag', this.cookieSyncBag);
|
|
188
188
|
let singleRequest = this.getWhitelabelConfigItem('ozone.singleRequest');
|
|
189
189
|
singleRequest = singleRequest !== false; // undefined & true will be true
|
|
190
|
-
|
|
190
|
+
logInfo(`config ${whitelabelBidder}.singleRequest : `, singleRequest);
|
|
191
191
|
let ozoneRequest = {}; // we only want to set specific properties on this, not validBidRequests[0].params
|
|
192
192
|
delete ozoneRequest.test; // don't allow test to be set in the config - ONLY use $_GET['pbjs_debug']
|
|
193
193
|
|
|
194
194
|
// First party data module : look for ortb2 in setconfig & set the User object. NOTE THAT this should happen before we set the consentString
|
|
195
195
|
let fpd = config.getConfig('ortb2');
|
|
196
|
-
if (fpd &&
|
|
197
|
-
|
|
196
|
+
if (fpd && deepAccess(fpd, 'user')) {
|
|
197
|
+
logInfo('added FPD user object');
|
|
198
198
|
ozoneRequest.user = fpd.user;
|
|
199
199
|
}
|
|
200
200
|
|
|
@@ -214,53 +214,53 @@ export const spec = {
|
|
|
214
214
|
let arrBannerSizes = [];
|
|
215
215
|
if (!ozoneBidRequest.hasOwnProperty('mediaTypes')) {
|
|
216
216
|
if (ozoneBidRequest.hasOwnProperty('sizes')) {
|
|
217
|
-
|
|
217
|
+
logInfo('no mediaTypes detected - will use the sizes array in the config root');
|
|
218
218
|
arrBannerSizes = ozoneBidRequest.sizes;
|
|
219
219
|
} else {
|
|
220
|
-
|
|
220
|
+
logInfo('no mediaTypes detected, no sizes array in the config root either. Cannot set sizes for banner type');
|
|
221
221
|
}
|
|
222
222
|
} else {
|
|
223
223
|
if (ozoneBidRequest.mediaTypes.hasOwnProperty(BANNER)) {
|
|
224
224
|
arrBannerSizes = ozoneBidRequest.mediaTypes[BANNER].sizes; /* Note - if there is a sizes element in the config root it will be pushed into here */
|
|
225
|
-
|
|
225
|
+
logInfo('setting banner size from the mediaTypes.banner element for bidId ' + obj.id + ': ', arrBannerSizes);
|
|
226
226
|
}
|
|
227
227
|
if (ozoneBidRequest.mediaTypes.hasOwnProperty(VIDEO)) {
|
|
228
|
-
|
|
228
|
+
logInfo('openrtb 2.5 compliant video');
|
|
229
229
|
// examine all the video attributes in the config, and either put them into obj.video if allowed by IAB2.5 or else in to obj.video.ext
|
|
230
230
|
if (typeof ozoneBidRequest.mediaTypes[VIDEO] == 'object') {
|
|
231
|
-
let childConfig =
|
|
231
|
+
let childConfig = deepAccess(ozoneBidRequest, 'params.video', {});
|
|
232
232
|
obj.video = this.unpackVideoConfigIntoIABformat(ozoneBidRequest.mediaTypes[VIDEO], childConfig);
|
|
233
233
|
obj.video = this.addVideoDefaults(obj.video, ozoneBidRequest.mediaTypes[VIDEO], childConfig);
|
|
234
234
|
}
|
|
235
235
|
// we need to duplicate some of the video values
|
|
236
236
|
let wh = getWidthAndHeightFromVideoObject(obj.video);
|
|
237
|
-
|
|
237
|
+
logInfo('setting video object from the mediaTypes.video element: ' + obj.id + ':', obj.video, 'wh=', wh);
|
|
238
238
|
if (wh && typeof wh === 'object') {
|
|
239
239
|
obj.video.w = wh['w'];
|
|
240
240
|
obj.video.h = wh['h'];
|
|
241
241
|
if (playerSizeIsNestedArray(obj.video)) { // this should never happen; it was in the original spec for this change though.
|
|
242
|
-
|
|
242
|
+
logInfo('setting obj.video.format to be an array of objects');
|
|
243
243
|
obj.video.ext.format = [wh];
|
|
244
244
|
} else {
|
|
245
|
-
|
|
245
|
+
logInfo('setting obj.video.format to be an object');
|
|
246
246
|
obj.video.ext.format = wh;
|
|
247
247
|
}
|
|
248
248
|
} else {
|
|
249
|
-
|
|
249
|
+
logWarn('cannot set w, h & format values for video; the config is not right');
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
// Native integration is not complete yet
|
|
253
253
|
if (ozoneBidRequest.mediaTypes.hasOwnProperty(NATIVE)) {
|
|
254
254
|
obj.native = ozoneBidRequest.mediaTypes[NATIVE];
|
|
255
|
-
|
|
255
|
+
logInfo('setting native object from the mediaTypes.native element: ' + obj.id + ':', obj.native);
|
|
256
256
|
}
|
|
257
257
|
// is the publisher specifying floors, and is the floors module enabled?
|
|
258
258
|
if (ozoneBidRequest.hasOwnProperty('getFloor')) {
|
|
259
|
-
|
|
259
|
+
logInfo('This bidRequest object has property: getFloor');
|
|
260
260
|
obj.floor = this.getFloorObjectForAuction(ozoneBidRequest);
|
|
261
|
-
|
|
261
|
+
logInfo('obj.floor is : ', obj.floor);
|
|
262
262
|
} else {
|
|
263
|
-
|
|
263
|
+
logInfo('This bidRequest object DOES NOT have property: getFloor');
|
|
264
264
|
}
|
|
265
265
|
}
|
|
266
266
|
if (arrBannerSizes.length > 0) {
|
|
@@ -277,7 +277,7 @@ export const spec = {
|
|
|
277
277
|
// these 3 MUST exist - we check them in the validation method
|
|
278
278
|
obj.placementId = placementId;
|
|
279
279
|
// build the imp['ext'] object - NOTE - Dont obliterate anything that' already in obj.ext
|
|
280
|
-
|
|
280
|
+
deepSetValue(obj, 'ext.prebid', {'storedrequest': {'id': placementId}});
|
|
281
281
|
// obj.ext = {'prebid': {'storedrequest': {'id': placementId}}};
|
|
282
282
|
obj.ext[whitelabelBidder] = {};
|
|
283
283
|
obj.ext[whitelabelBidder].adUnitCode = ozoneBidRequest.adUnitCode; // eg. 'mpu'
|
|
@@ -285,9 +285,9 @@ export const spec = {
|
|
|
285
285
|
if (ozoneBidRequest.params.hasOwnProperty('customData')) {
|
|
286
286
|
obj.ext[whitelabelBidder].customData = ozoneBidRequest.params.customData;
|
|
287
287
|
}
|
|
288
|
-
|
|
288
|
+
logInfo(`obj.ext.${whitelabelBidder} is `, obj.ext[whitelabelBidder]);
|
|
289
289
|
if (isTestMode != null) {
|
|
290
|
-
|
|
290
|
+
logInfo('setting isTestMode to ', isTestMode);
|
|
291
291
|
if (obj.ext[whitelabelBidder].hasOwnProperty('customData')) {
|
|
292
292
|
for (let i = 0; i < obj.ext[whitelabelBidder].customData.length; i++) {
|
|
293
293
|
obj.ext[whitelabelBidder].customData[i]['targeting'][wlOztestmodeKey] = isTestMode;
|
|
@@ -297,17 +297,17 @@ export const spec = {
|
|
|
297
297
|
obj.ext[whitelabelBidder].customData[0].targeting[wlOztestmodeKey] = isTestMode;
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
|
-
if (fpd &&
|
|
300
|
+
if (fpd && deepAccess(fpd, 'site')) {
|
|
301
301
|
// attach the site fpd into exactly : imp[n].ext.[whitelabel].customData.0.targeting
|
|
302
|
-
|
|
303
|
-
if (
|
|
302
|
+
logInfo('added FPD site object');
|
|
303
|
+
if (deepAccess(obj, 'ext.' + whitelabelBidder + '.customData.0.targeting', false)) {
|
|
304
304
|
obj.ext[whitelabelBidder].customData[0].targeting = Object.assign(obj.ext[whitelabelBidder].customData[0].targeting, fpd.site);
|
|
305
|
-
// let keys =
|
|
305
|
+
// let keys = getKeys(fpd.site);
|
|
306
306
|
// for (let i = 0; i < keys.length; i++) {
|
|
307
307
|
// obj.ext[whitelabelBidder].customData[0].targeting[keys[i]] = fpd.site[keys[i]];
|
|
308
308
|
// }
|
|
309
309
|
} else {
|
|
310
|
-
|
|
310
|
+
deepSetValue(obj, 'ext.' + whitelabelBidder + '.customData.0.targeting', fpd.site);
|
|
311
311
|
}
|
|
312
312
|
}
|
|
313
313
|
return obj;
|
|
@@ -327,17 +327,17 @@ export const spec = {
|
|
|
327
327
|
}
|
|
328
328
|
extObj[whitelabelBidder].pv = this.getPageId(); // attach the page ID that will be common to all auciton calls for this page if refresh() is called
|
|
329
329
|
let ozOmpFloorDollars = this.getWhitelabelConfigItem('ozone.oz_omp_floor'); // valid only if a dollar value (typeof == 'number')
|
|
330
|
-
|
|
330
|
+
logInfo(`${whitelabelPrefix}_omp_floor dollar value = `, ozOmpFloorDollars);
|
|
331
331
|
if (typeof ozOmpFloorDollars === 'number') {
|
|
332
332
|
extObj[whitelabelBidder][whitelabelPrefix + '_omp_floor'] = ozOmpFloorDollars;
|
|
333
333
|
} else if (typeof ozOmpFloorDollars !== 'undefined') {
|
|
334
|
-
|
|
334
|
+
logError(`${whitelabelPrefix}_omp_floor is invalid - IF SET then this must be a number, representing dollar value eg. ${whitelabelPrefix}_omp_floor: 1.55. You have it set as a ` + (typeof ozOmpFloorDollars));
|
|
335
335
|
}
|
|
336
336
|
let ozWhitelistAdserverKeys = this.getWhitelabelConfigItem('ozone.oz_whitelist_adserver_keys');
|
|
337
|
-
let useOzWhitelistAdserverKeys =
|
|
337
|
+
let useOzWhitelistAdserverKeys = isArray(ozWhitelistAdserverKeys) && ozWhitelistAdserverKeys.length > 0;
|
|
338
338
|
extObj[whitelabelBidder][whitelabelPrefix + '_kvp_rw'] = useOzWhitelistAdserverKeys ? 1 : 0;
|
|
339
339
|
if (whitelabelBidder != 'ozone') {
|
|
340
|
-
|
|
340
|
+
logInfo('setting aliases object');
|
|
341
341
|
extObj.prebid = {aliases: {'ozone': whitelabelBidder}};
|
|
342
342
|
}
|
|
343
343
|
// 20210413 - adding a set of GET params to pass to auction
|
|
@@ -359,53 +359,53 @@ export const spec = {
|
|
|
359
359
|
|
|
360
360
|
// this should come as late as possible so it overrides any user.ext.consent value
|
|
361
361
|
if (bidderRequest && bidderRequest.gdprConsent) {
|
|
362
|
-
|
|
363
|
-
let apiVersion =
|
|
362
|
+
logInfo('ADDING GDPR info');
|
|
363
|
+
let apiVersion = deepAccess(bidderRequest, 'gdprConsent.apiVersion', 1);
|
|
364
364
|
ozoneRequest.regs = {ext: {gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0, apiVersion: apiVersion}};
|
|
365
|
-
if (
|
|
366
|
-
|
|
365
|
+
if (deepAccess(ozoneRequest, 'regs.ext.gdpr')) {
|
|
366
|
+
deepSetValue(ozoneRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
|
|
367
367
|
} else {
|
|
368
|
-
|
|
368
|
+
logInfo('**** Strange CMP info: bidderRequest.gdprConsent exists BUT bidderRequest.gdprConsent.gdprApplies is false. See bidderRequest logged above. ****');
|
|
369
369
|
}
|
|
370
370
|
} else {
|
|
371
|
-
|
|
371
|
+
logInfo('WILL NOT ADD GDPR info; no bidderRequest.gdprConsent object');
|
|
372
372
|
}
|
|
373
373
|
if (bidderRequest && bidderRequest.uspConsent) {
|
|
374
|
-
|
|
375
|
-
|
|
374
|
+
logInfo('ADDING CCPA info');
|
|
375
|
+
deepSetValue(ozoneRequest, 'user.ext.uspConsent', bidderRequest.uspConsent);
|
|
376
376
|
} else {
|
|
377
|
-
|
|
377
|
+
logInfo('WILL NOT ADD CCPA info; no bidderRequest.uspConsent.');
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
// this is for 2.2.1
|
|
381
381
|
// coppa compliance
|
|
382
382
|
if (config.getConfig('coppa') === true) {
|
|
383
|
-
|
|
383
|
+
deepSetValue(ozoneRequest, 'regs.coppa', 1);
|
|
384
384
|
}
|
|
385
385
|
|
|
386
386
|
// return the single request object OR the array:
|
|
387
387
|
if (singleRequest) {
|
|
388
|
-
|
|
388
|
+
logInfo('buildRequests starting to generate response for a single request');
|
|
389
389
|
ozoneRequest.id = bidderRequest.auctionId; // Unique ID of the bid request, provided by the exchange.
|
|
390
390
|
ozoneRequest.auctionId = bidderRequest.auctionId; // not sure if this should be here?
|
|
391
391
|
ozoneRequest.imp = tosendtags;
|
|
392
392
|
ozoneRequest.ext = extObj;
|
|
393
393
|
ozoneRequest.source = {'tid': bidderRequest.auctionId}; // RTB 2.5 : tid is Transaction ID that must be common across all participants in this bid request (e.g., potentially multiple exchanges).
|
|
394
|
-
|
|
394
|
+
deepSetValue(ozoneRequest, 'user.ext.eids', userExtEids);
|
|
395
395
|
var ret = {
|
|
396
396
|
method: 'POST',
|
|
397
397
|
url: this.getAuctionUrl(),
|
|
398
398
|
data: JSON.stringify(ozoneRequest),
|
|
399
399
|
bidderRequest: bidderRequest
|
|
400
400
|
};
|
|
401
|
-
|
|
401
|
+
logInfo('buildRequests request data for single = ', JSON.parse(JSON.stringify(ozoneRequest)));
|
|
402
402
|
this.propertyBag.buildRequestsEnd = new Date().getTime();
|
|
403
|
-
|
|
403
|
+
logInfo(`buildRequests going to return for single at time ${this.propertyBag.buildRequestsEnd} (took ${this.propertyBag.buildRequestsEnd - this.propertyBag.buildRequestsStart}ms): `, ret);
|
|
404
404
|
return ret;
|
|
405
405
|
}
|
|
406
406
|
// not single request - pull apart the tosendtags array & return an array of objects each containing one element in the imp array.
|
|
407
407
|
let arrRet = tosendtags.map(imp => {
|
|
408
|
-
|
|
408
|
+
logInfo('buildRequests starting to generate non-single response, working on imp : ', imp);
|
|
409
409
|
let ozoneRequestSingle = Object.assign({}, ozoneRequest);
|
|
410
410
|
imp.ext[whitelabelBidder].pageAuctionId = bidderRequest['auctionId']; // make a note in the ext object of what the original auctionId was, in the bidderRequest object
|
|
411
411
|
ozoneRequestSingle.id = imp.ext[whitelabelBidder].transactionId; // Unique ID of the bid request, provided by the exchange.
|
|
@@ -413,8 +413,8 @@ export const spec = {
|
|
|
413
413
|
ozoneRequestSingle.imp = [imp];
|
|
414
414
|
ozoneRequestSingle.ext = extObj;
|
|
415
415
|
ozoneRequestSingle.source = {'tid': imp.ext[whitelabelBidder].transactionId};
|
|
416
|
-
|
|
417
|
-
|
|
416
|
+
deepSetValue(ozoneRequestSingle, 'user.ext.eids', userExtEids);
|
|
417
|
+
logInfo('buildRequests RequestSingle (for non-single) = ', ozoneRequestSingle);
|
|
418
418
|
return {
|
|
419
419
|
method: 'POST',
|
|
420
420
|
url: this.getAuctionUrl(),
|
|
@@ -423,7 +423,7 @@ export const spec = {
|
|
|
423
423
|
};
|
|
424
424
|
});
|
|
425
425
|
this.propertyBag.buildRequestsEnd = new Date().getTime();
|
|
426
|
-
|
|
426
|
+
logInfo(`buildRequests going to return for non-single at time ${this.propertyBag.buildRequestsEnd} (took ${this.propertyBag.buildRequestsEnd - this.propertyBag.buildRequestsStart}ms): `, arrRet);
|
|
427
427
|
return arrRet;
|
|
428
428
|
},
|
|
429
429
|
/**
|
|
@@ -441,11 +441,11 @@ export const spec = {
|
|
|
441
441
|
*/
|
|
442
442
|
getFloorObjectForAuction(bidRequestRef) {
|
|
443
443
|
const mediaTypesSizes = {
|
|
444
|
-
banner:
|
|
445
|
-
video:
|
|
446
|
-
native:
|
|
444
|
+
banner: deepAccess(bidRequestRef, 'mediaTypes.banner.sizes', null),
|
|
445
|
+
video: deepAccess(bidRequestRef, 'mediaTypes.video.playerSize', null),
|
|
446
|
+
native: deepAccess(bidRequestRef, 'mediaTypes.native.image.sizes', null)
|
|
447
447
|
}
|
|
448
|
-
|
|
448
|
+
logInfo('getFloorObjectForAuction mediaTypesSizes : ', mediaTypesSizes);
|
|
449
449
|
let ret = {};
|
|
450
450
|
if (mediaTypesSizes.banner) {
|
|
451
451
|
ret.banner = bidRequestRef.getFloor({mediaType: 'banner', currency: 'USD', size: mediaTypesSizes.banner});
|
|
@@ -456,7 +456,7 @@ export const spec = {
|
|
|
456
456
|
if (mediaTypesSizes.native) {
|
|
457
457
|
ret.native = bidRequestRef.getFloor({mediaType: 'native', currency: 'USD', size: mediaTypesSizes.native});
|
|
458
458
|
}
|
|
459
|
-
|
|
459
|
+
logInfo('getFloorObjectForAuction returning : ', JSON.parse(JSON.stringify(ret)));
|
|
460
460
|
return ret;
|
|
461
461
|
},
|
|
462
462
|
/**
|
|
@@ -474,8 +474,8 @@ export const spec = {
|
|
|
474
474
|
let startTime = new Date().getTime();
|
|
475
475
|
let whitelabelBidder = this.propertyBag.whitelabel.bidder; // by default = ozone
|
|
476
476
|
let whitelabelPrefix = this.propertyBag.whitelabel.keyPrefix;
|
|
477
|
-
|
|
478
|
-
|
|
477
|
+
logInfo(`interpretResponse time: ${startTime} . Time between buildRequests done and interpretResponse start was ${startTime - this.propertyBag.buildRequestsEnd}ms`);
|
|
478
|
+
logInfo(`serverResponse, request`, JSON.parse(JSON.stringify(serverResponse)), JSON.parse(JSON.stringify(request)));
|
|
479
479
|
serverResponse = serverResponse.body || {};
|
|
480
480
|
// note that serverResponse.id value is the auction_id we might want to use for reporting reasons.
|
|
481
481
|
if (!serverResponse.hasOwnProperty('seatbid')) {
|
|
@@ -486,11 +486,11 @@ export const spec = {
|
|
|
486
486
|
}
|
|
487
487
|
let arrAllBids = [];
|
|
488
488
|
let enhancedAdserverTargeting = this.getWhitelabelConfigItem('ozone.enhancedAdserverTargeting');
|
|
489
|
-
|
|
489
|
+
logInfo('enhancedAdserverTargeting', enhancedAdserverTargeting);
|
|
490
490
|
if (typeof enhancedAdserverTargeting == 'undefined') {
|
|
491
491
|
enhancedAdserverTargeting = true;
|
|
492
492
|
}
|
|
493
|
-
|
|
493
|
+
logInfo('enhancedAdserverTargeting', enhancedAdserverTargeting);
|
|
494
494
|
|
|
495
495
|
// 2021-03-05 - comment this out for a build without adding adid to the response
|
|
496
496
|
serverResponse.seatbid = injectAdIdsIntoAllBidResponses(serverResponse.seatbid); // we now make sure that each bid in the bidresponse has a unique (within page) adId attribute.
|
|
@@ -499,38 +499,38 @@ export const spec = {
|
|
|
499
499
|
let ozOmpFloorDollars = this.getWhitelabelConfigItem('ozone.oz_omp_floor'); // valid only if a dollar value (typeof == 'number')
|
|
500
500
|
let addOzOmpFloorDollars = typeof ozOmpFloorDollars === 'number';
|
|
501
501
|
let ozWhitelistAdserverKeys = this.getWhitelabelConfigItem('ozone.oz_whitelist_adserver_keys');
|
|
502
|
-
let useOzWhitelistAdserverKeys =
|
|
502
|
+
let useOzWhitelistAdserverKeys = isArray(ozWhitelistAdserverKeys) && ozWhitelistAdserverKeys.length > 0;
|
|
503
503
|
|
|
504
504
|
for (let i = 0; i < serverResponse.seatbid.length; i++) {
|
|
505
505
|
let sb = serverResponse.seatbid[i];
|
|
506
506
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
507
507
|
let thisRequestBid = this.getBidRequestForBidId(sb.bid[j].impid, request.bidderRequest.bids);
|
|
508
|
-
|
|
508
|
+
logInfo(`seatbid:${i}, bid:${j} Going to set default w h for seatbid/bidRequest`, sb.bid[j], thisRequestBid);
|
|
509
509
|
const {defaultWidth, defaultHeight} = defaultSize(thisRequestBid);
|
|
510
510
|
let thisBid = ozoneAddStandardProperties(sb.bid[j], defaultWidth, defaultHeight);
|
|
511
511
|
// prebid 4.0 compliance
|
|
512
512
|
thisBid.meta = {advertiserDomains: thisBid.adomain || []};
|
|
513
513
|
let videoContext = null;
|
|
514
514
|
let isVideo = false;
|
|
515
|
-
let bidType =
|
|
516
|
-
|
|
515
|
+
let bidType = deepAccess(thisBid, 'ext.prebid.type');
|
|
516
|
+
logInfo(`this bid type is : ${bidType}`, j);
|
|
517
517
|
if (bidType === VIDEO) {
|
|
518
518
|
isVideo = true;
|
|
519
519
|
videoContext = this.getVideoContextForBidId(thisBid.bidId, request.bidderRequest.bids); // should be instream or outstream (or null if error)
|
|
520
520
|
if (videoContext === 'outstream') {
|
|
521
|
-
|
|
521
|
+
logInfo('going to attach a renderer to OUTSTREAM video : ', j);
|
|
522
522
|
thisBid.renderer = newRenderer(thisBid.bidId);
|
|
523
523
|
} else {
|
|
524
|
-
|
|
524
|
+
logInfo('bid is not an outstream video, will not attach a renderer: ', j);
|
|
525
525
|
}
|
|
526
526
|
}
|
|
527
527
|
let adserverTargeting = {};
|
|
528
528
|
if (enhancedAdserverTargeting) {
|
|
529
529
|
let allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid);
|
|
530
530
|
// add all the winning & non-winning bids for this bidId:
|
|
531
|
-
|
|
531
|
+
logInfo('Going to iterate allBidsForThisBidId', allBidsForThisBidid);
|
|
532
532
|
Object.keys(allBidsForThisBidid).forEach((bidderName, index, ar2) => {
|
|
533
|
-
|
|
533
|
+
logInfo(`adding adserverTargeting for ${bidderName} for bidId ${thisBid.bidId}`);
|
|
534
534
|
// let bidderName = bidderNameWH.split('_')[0];
|
|
535
535
|
adserverTargeting[whitelabelPrefix + '_' + bidderName] = bidderName;
|
|
536
536
|
adserverTargeting[whitelabelPrefix + '_' + bidderName + '_crid'] = String(allBidsForThisBidid[bidderName].crid);
|
|
@@ -546,11 +546,11 @@ export const spec = {
|
|
|
546
546
|
if (isVideo) {
|
|
547
547
|
adserverTargeting[whitelabelPrefix + '_' + bidderName + '_vid'] = videoContext; // outstream or instream
|
|
548
548
|
}
|
|
549
|
-
let flr =
|
|
549
|
+
let flr = deepAccess(allBidsForThisBidid[bidderName], `ext.bidder.${whitelabelBidder}.floor`, null);
|
|
550
550
|
if (flr != null) {
|
|
551
551
|
adserverTargeting[whitelabelPrefix + '_' + bidderName + '_flr'] = flr;
|
|
552
552
|
}
|
|
553
|
-
let rid =
|
|
553
|
+
let rid = deepAccess(allBidsForThisBidid[bidderName], `ext.bidder.${whitelabelBidder}.ruleId`, null);
|
|
554
554
|
if (rid != null) {
|
|
555
555
|
adserverTargeting[whitelabelPrefix + '_' + bidderName + '_rid'] = rid;
|
|
556
556
|
}
|
|
@@ -560,9 +560,9 @@ export const spec = {
|
|
|
560
560
|
});
|
|
561
561
|
} else {
|
|
562
562
|
if (useOzWhitelistAdserverKeys) {
|
|
563
|
-
|
|
563
|
+
logWarn(`You have set a whitelist of adserver keys but this will be ignored because ${whitelabelBidder}.enhancedAdserverTargeting is set to false. No per-bid keys will be sent to adserver.`);
|
|
564
564
|
} else {
|
|
565
|
-
|
|
565
|
+
logInfo(`${whitelabelBidder}.enhancedAdserverTargeting is set to false, so no per-bid keys will be sent to adserver.`);
|
|
566
566
|
}
|
|
567
567
|
}
|
|
568
568
|
// also add in the winning bid, to be sent to dfp
|
|
@@ -580,7 +580,7 @@ export const spec = {
|
|
|
580
580
|
adserverTargeting[whitelabelPrefix + '_size'] = `${winningBid.width}x${winningBid.height}`;
|
|
581
581
|
}
|
|
582
582
|
if (useOzWhitelistAdserverKeys) { // delete any un-whitelisted keys
|
|
583
|
-
|
|
583
|
+
logInfo('Going to filter out adserver targeting keys not in the whitelist: ', ozWhitelistAdserverKeys);
|
|
584
584
|
Object.keys(adserverTargeting).forEach(function(key) { if (ozWhitelistAdserverKeys.indexOf(key) === -1) { delete adserverTargeting[key]; } });
|
|
585
585
|
}
|
|
586
586
|
thisBid.adserverTargeting = adserverTargeting;
|
|
@@ -588,7 +588,7 @@ export const spec = {
|
|
|
588
588
|
}
|
|
589
589
|
}
|
|
590
590
|
let endTime = new Date().getTime();
|
|
591
|
-
|
|
591
|
+
logInfo(`interpretResponse going to return at time ${endTime} (took ${endTime - startTime}ms) Time from buildRequests Start -> interpretRequests End = ${endTime - this.propertyBag.buildRequestsStart}ms`, arrAllBids);
|
|
592
592
|
return arrAllBids;
|
|
593
593
|
},
|
|
594
594
|
/**
|
|
@@ -616,7 +616,7 @@ export const spec = {
|
|
|
616
616
|
var bidIds = [];
|
|
617
617
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
618
618
|
var candidate = sb.bid[j];
|
|
619
|
-
if (
|
|
619
|
+
if (contains(bidIds, candidate.impid)) {
|
|
620
620
|
continue; // we've already fully assessed this impid, found the highest bid from this seat for it
|
|
621
621
|
}
|
|
622
622
|
bidIds.push(candidate.impid);
|
|
@@ -634,7 +634,7 @@ export const spec = {
|
|
|
634
634
|
// see http://prebid.org/dev-docs/bidder-adaptor.html#registering-user-syncs
|
|
635
635
|
// us privacy: https://docs.prebid.org/dev-docs/modules/consentManagementUsp.html
|
|
636
636
|
getUserSyncs(optionsType, serverResponse, gdprConsent, usPrivacy) {
|
|
637
|
-
|
|
637
|
+
logInfo('getUserSyncs optionsType', optionsType, 'serverResponse', serverResponse, 'gdprConsent', gdprConsent, 'usPrivacy', usPrivacy, 'cookieSyncBag', this.cookieSyncBag);
|
|
638
638
|
if (!serverResponse || serverResponse.length === 0) {
|
|
639
639
|
return [];
|
|
640
640
|
}
|
|
@@ -643,8 +643,8 @@ export const spec = {
|
|
|
643
643
|
if (document.location.search.match(/pbjs_debug=true/)) {
|
|
644
644
|
arrQueryString.push('pbjs_debug=true');
|
|
645
645
|
}
|
|
646
|
-
arrQueryString.push('gdpr=' + (
|
|
647
|
-
arrQueryString.push('gdpr_consent=' +
|
|
646
|
+
arrQueryString.push('gdpr=' + (deepAccess(gdprConsent, 'gdprApplies', false) ? '1' : '0'));
|
|
647
|
+
arrQueryString.push('gdpr_consent=' + deepAccess(gdprConsent, 'consentString', ''));
|
|
648
648
|
arrQueryString.push('usp_consent=' + (usPrivacy || ''));
|
|
649
649
|
// var objKeys = Object.getOwnPropertyNames(this.cookieSyncBag.userIdObject);
|
|
650
650
|
// for (let idx in objKeys) {
|
|
@@ -663,7 +663,7 @@ export const spec = {
|
|
|
663
663
|
if (strQueryString.length > 0) {
|
|
664
664
|
strQueryString = '?' + strQueryString;
|
|
665
665
|
}
|
|
666
|
-
|
|
666
|
+
logInfo('getUserSyncs going to return cookie sync url : ' + this.getCookieSyncUrl() + strQueryString);
|
|
667
667
|
return [{
|
|
668
668
|
type: 'iframe',
|
|
669
669
|
url: this.getCookieSyncUrl() + strQueryString
|
|
@@ -693,7 +693,7 @@ export const spec = {
|
|
|
693
693
|
getVideoContextForBidId(bidId, arrBids) {
|
|
694
694
|
let requestBid = this.getBidRequestForBidId(bidId, arrBids);
|
|
695
695
|
if (requestBid != null) {
|
|
696
|
-
return
|
|
696
|
+
return deepAccess(requestBid, 'mediaTypes.video.context', 'unknown')
|
|
697
697
|
}
|
|
698
698
|
return null;
|
|
699
699
|
},
|
|
@@ -715,37 +715,37 @@ export const spec = {
|
|
|
715
715
|
if (typeof (bidRequest.userId[key]) == 'string') {
|
|
716
716
|
ret[key] = bidRequest.userId[key];
|
|
717
717
|
} else if (typeof (bidRequest.userId[key]) == 'object') {
|
|
718
|
-
|
|
718
|
+
logError(`WARNING: findAllUserIds had to use first key in user object to get value for bid.userId key: ${key}. Prebid adapter should be updated.`);
|
|
719
719
|
// fallback - get the value of the first key in the object; this is NOT desirable behaviour
|
|
720
720
|
ret[key] = bidRequest.userId[key][Object.keys(bidRequest.userId[key])[0]]; // cannot use Object.values
|
|
721
721
|
} else {
|
|
722
|
-
|
|
722
|
+
logError(`failed to get string key value for userId : ${key}`);
|
|
723
723
|
}
|
|
724
724
|
}
|
|
725
725
|
}
|
|
726
|
-
let lipbid =
|
|
726
|
+
let lipbid = deepAccess(bidRequest.userId, 'lipb.lipbid');
|
|
727
727
|
if (lipbid) {
|
|
728
728
|
ret['lipb'] = {'lipbid': lipbid};
|
|
729
729
|
}
|
|
730
|
-
let id5id =
|
|
730
|
+
let id5id = deepAccess(bidRequest.userId, 'id5id.uid');
|
|
731
731
|
if (id5id) {
|
|
732
732
|
ret['id5id'] = id5id;
|
|
733
733
|
}
|
|
734
|
-
let parrableId =
|
|
734
|
+
let parrableId = deepAccess(bidRequest.userId, 'parrableId.eid');
|
|
735
735
|
if (parrableId) {
|
|
736
736
|
ret['parrableId'] = parrableId;
|
|
737
737
|
}
|
|
738
|
-
let sharedid =
|
|
738
|
+
let sharedid = deepAccess(bidRequest.userId, 'sharedid.id');
|
|
739
739
|
if (sharedid) {
|
|
740
740
|
ret['sharedid'] = sharedid;
|
|
741
741
|
}
|
|
742
|
-
let sharedidthird =
|
|
742
|
+
let sharedidthird = deepAccess(bidRequest.userId, 'sharedid.third');
|
|
743
743
|
if (sharedidthird) {
|
|
744
744
|
ret['sharedidthird'] = sharedidthird;
|
|
745
745
|
}
|
|
746
746
|
}
|
|
747
747
|
if (!ret.hasOwnProperty('pubcid')) {
|
|
748
|
-
let pubcid =
|
|
748
|
+
let pubcid = deepAccess(bidRequest, 'crumbs.pubcid');
|
|
749
749
|
if (pubcid) {
|
|
750
750
|
ret['pubcid'] = pubcid; // if built with old pubCommonId module
|
|
751
751
|
}
|
|
@@ -771,10 +771,10 @@ export const spec = {
|
|
|
771
771
|
let arr = this.getGetParametersAsObject();
|
|
772
772
|
if (arr.hasOwnProperty(whitelabelPrefix + 'storedrequest')) {
|
|
773
773
|
if (this.isValidPlacementId(arr[whitelabelPrefix + 'storedrequest'])) {
|
|
774
|
-
|
|
774
|
+
logInfo(`using GET ${whitelabelPrefix}storedrequest ` + arr[whitelabelPrefix + 'storedrequest'] + ' to replace placementId');
|
|
775
775
|
return arr[whitelabelPrefix + 'storedrequest'];
|
|
776
776
|
} else {
|
|
777
|
-
|
|
777
|
+
logError(`GET ${whitelabelPrefix}storedrequest FAILED VALIDATION - will not use it`);
|
|
778
778
|
}
|
|
779
779
|
}
|
|
780
780
|
return null;
|
|
@@ -797,9 +797,9 @@ export const spec = {
|
|
|
797
797
|
handleTTDId(eids, validBidRequests) {
|
|
798
798
|
let ttdId = null;
|
|
799
799
|
let adsrvrOrgId = config.getConfig('adsrvrOrgId');
|
|
800
|
-
if (
|
|
800
|
+
if (isStr(deepAccess(validBidRequests, '0.userId.tdid'))) {
|
|
801
801
|
ttdId = validBidRequests[0].userId.tdid;
|
|
802
|
-
} else if (adsrvrOrgId &&
|
|
802
|
+
} else if (adsrvrOrgId && isStr(adsrvrOrgId.TDID)) {
|
|
803
803
|
ttdId = adsrvrOrgId.TDID;
|
|
804
804
|
}
|
|
805
805
|
if (ttdId !== null) {
|
|
@@ -834,7 +834,7 @@ export const spec = {
|
|
|
834
834
|
// if there is an ozone.oz_request = false then quit now.
|
|
835
835
|
let ozRequest = this.getWhitelabelConfigItem('ozone.oz_request');
|
|
836
836
|
if (typeof ozRequest == 'boolean' && !ozRequest) {
|
|
837
|
-
|
|
837
|
+
logWarn(`Will not allow auction : ${this.propertyBag.whitelabel.keyPrefix}one.${this.propertyBag.whitelabel.keyPrefix}_request is set to false`);
|
|
838
838
|
return true;
|
|
839
839
|
}
|
|
840
840
|
return false;
|
|
@@ -885,7 +885,7 @@ export const spec = {
|
|
|
885
885
|
// handle ext separately, if it exists; we have probably built up an ext object already
|
|
886
886
|
if (objConfig.hasOwnProperty('ext') && typeof objConfig.ext === 'object') {
|
|
887
887
|
if (objConfig.hasOwnProperty('ext')) {
|
|
888
|
-
ret.ext =
|
|
888
|
+
ret.ext = mergeDeep(ret.ext, objConfig.ext);
|
|
889
889
|
} else {
|
|
890
890
|
ret.ext = objConfig.ext;
|
|
891
891
|
}
|
|
@@ -907,13 +907,13 @@ export const spec = {
|
|
|
907
907
|
*/
|
|
908
908
|
_addVideoDefaults(objRet, objConfig, addIfMissing) {
|
|
909
909
|
// add inferred values & any default values we want.
|
|
910
|
-
let context =
|
|
910
|
+
let context = deepAccess(objConfig, 'context');
|
|
911
911
|
if (context === 'outstream') {
|
|
912
912
|
objRet.placement = 3;
|
|
913
913
|
} else if (context === 'instream') {
|
|
914
914
|
objRet.placement = 1;
|
|
915
915
|
}
|
|
916
|
-
let skippable =
|
|
916
|
+
let skippable = deepAccess(objConfig, 'skippable', null);
|
|
917
917
|
if (skippable == null) {
|
|
918
918
|
if (addIfMissing && !objRet.hasOwnProperty('skip')) {
|
|
919
919
|
objRet.skip = skippable ? 1 : 0;
|
|
@@ -932,7 +932,7 @@ export const spec = {
|
|
|
932
932
|
* @returns seatbid object
|
|
933
933
|
*/
|
|
934
934
|
export function injectAdIdsIntoAllBidResponses(seatbid) {
|
|
935
|
-
|
|
935
|
+
logInfo('injectAdIdsIntoAllBidResponses', seatbid);
|
|
936
936
|
for (let i = 0; i < seatbid.length; i++) {
|
|
937
937
|
let sb = seatbid[i];
|
|
938
938
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
@@ -958,7 +958,7 @@ export function checkDeepArray(Arr) {
|
|
|
958
958
|
|
|
959
959
|
export function defaultSize(thebidObj) {
|
|
960
960
|
if (!thebidObj) {
|
|
961
|
-
|
|
961
|
+
logInfo('defaultSize received empty bid obj! going to return fixed default size');
|
|
962
962
|
return {
|
|
963
963
|
'defaultHeight': 250,
|
|
964
964
|
'defaultWidth': 300
|
|
@@ -1036,14 +1036,14 @@ export function getRoundedBid(price, mediaType) {
|
|
|
1036
1036
|
let theConfigObject = getGranularityObject(mediaType, mediaTypeGranularity, strBuckets, objBuckets);
|
|
1037
1037
|
let theConfigKey = getGranularityKeyName(mediaType, mediaTypeGranularity, strBuckets);
|
|
1038
1038
|
|
|
1039
|
-
|
|
1039
|
+
logInfo('getRoundedBid. price:', price, 'mediaType:', mediaType, 'configkey:', theConfigKey, 'configObject:', theConfigObject, 'mediaTypeGranularity:', mediaTypeGranularity, 'strBuckets:', strBuckets);
|
|
1040
1040
|
|
|
1041
1041
|
let priceStringsObj = getPriceBucketString(
|
|
1042
1042
|
price,
|
|
1043
1043
|
theConfigObject,
|
|
1044
1044
|
config.getConfig('currency.granularityMultiplier')
|
|
1045
1045
|
);
|
|
1046
|
-
|
|
1046
|
+
logInfo('priceStringsObj', priceStringsObj);
|
|
1047
1047
|
// by default, without any custom granularity set, you get granularity name : 'medium'
|
|
1048
1048
|
let granularityNamePriceStringsKeyMapping = {
|
|
1049
1049
|
'medium': 'med',
|
|
@@ -1054,7 +1054,7 @@ export function getRoundedBid(price, mediaType) {
|
|
|
1054
1054
|
};
|
|
1055
1055
|
if (granularityNamePriceStringsKeyMapping.hasOwnProperty(theConfigKey)) {
|
|
1056
1056
|
let priceStringsKey = granularityNamePriceStringsKeyMapping[theConfigKey];
|
|
1057
|
-
|
|
1057
|
+
logInfo('getRoundedBid: looking for priceStringsKey:', priceStringsKey);
|
|
1058
1058
|
return priceStringsObj[priceStringsKey];
|
|
1059
1059
|
}
|
|
1060
1060
|
return priceStringsObj['auto'];
|
|
@@ -1123,15 +1123,15 @@ export function getWidthAndHeightFromVideoObject(objVideo) {
|
|
|
1123
1123
|
return null;
|
|
1124
1124
|
}
|
|
1125
1125
|
if (playerSize[0] && typeof playerSize[0] === 'object') {
|
|
1126
|
-
|
|
1126
|
+
logInfo('getWidthAndHeightFromVideoObject found nested array inside playerSize.', playerSize[0]);
|
|
1127
1127
|
playerSize = playerSize[0];
|
|
1128
1128
|
if (typeof playerSize[0] !== 'number' && typeof playerSize[0] !== 'string') {
|
|
1129
|
-
|
|
1129
|
+
logInfo('getWidthAndHeightFromVideoObject found non-number/string type inside the INNER array in playerSize. This is totally wrong - cannot continue.', playerSize[0]);
|
|
1130
1130
|
return null;
|
|
1131
1131
|
}
|
|
1132
1132
|
}
|
|
1133
1133
|
if (playerSize.length !== 2) {
|
|
1134
|
-
|
|
1134
|
+
logInfo('getWidthAndHeightFromVideoObject found playerSize with length of ' + playerSize.length + '. This is totally wrong - cannot continue.');
|
|
1135
1135
|
return null;
|
|
1136
1136
|
}
|
|
1137
1137
|
return ({'w': playerSize[0], 'h': playerSize[1]});
|
|
@@ -1158,17 +1158,17 @@ export function playerSizeIsNestedArray(objVideo) {
|
|
|
1158
1158
|
* @returns {*}
|
|
1159
1159
|
*/
|
|
1160
1160
|
function getPlayerSizeFromObject(objVideo) {
|
|
1161
|
-
|
|
1162
|
-
let playerSize =
|
|
1161
|
+
logInfo('getPlayerSizeFromObject received object', objVideo);
|
|
1162
|
+
let playerSize = deepAccess(objVideo, 'playerSize');
|
|
1163
1163
|
if (!playerSize) {
|
|
1164
|
-
playerSize =
|
|
1164
|
+
playerSize = deepAccess(objVideo, 'ext.playerSize');
|
|
1165
1165
|
}
|
|
1166
1166
|
if (!playerSize) {
|
|
1167
|
-
|
|
1167
|
+
logError('getPlayerSizeFromObject FAILED: no playerSize in video object or ext', objVideo);
|
|
1168
1168
|
return null;
|
|
1169
1169
|
}
|
|
1170
1170
|
if (typeof playerSize !== 'object') {
|
|
1171
|
-
|
|
1171
|
+
logError('getPlayerSizeFromObject FAILED: playerSize is not an object/array', objVideo);
|
|
1172
1172
|
return null;
|
|
1173
1173
|
}
|
|
1174
1174
|
return playerSize;
|
|
@@ -1179,7 +1179,7 @@ function getPlayerSizeFromObject(objVideo) {
|
|
|
1179
1179
|
*/
|
|
1180
1180
|
function newRenderer(adUnitCode, rendererOptions = {}) {
|
|
1181
1181
|
let isLoaded = window.ozoneVideo;
|
|
1182
|
-
|
|
1182
|
+
logInfo(`newRenderer going to set loaded to ${isLoaded ? 'true' : 'false'}`);
|
|
1183
1183
|
const renderer = Renderer.install({
|
|
1184
1184
|
url: spec.getRendererUrl(),
|
|
1185
1185
|
config: rendererOptions,
|
|
@@ -1189,12 +1189,12 @@ function newRenderer(adUnitCode, rendererOptions = {}) {
|
|
|
1189
1189
|
try {
|
|
1190
1190
|
renderer.setRender(outstreamRender);
|
|
1191
1191
|
} catch (err) {
|
|
1192
|
-
|
|
1192
|
+
logError('Prebid Error when calling setRender on renderer', JSON.parse(JSON.stringify(renderer)), err);
|
|
1193
1193
|
}
|
|
1194
1194
|
return renderer;
|
|
1195
1195
|
}
|
|
1196
1196
|
function outstreamRender(bid) {
|
|
1197
|
-
|
|
1197
|
+
logInfo('outstreamRender called. Going to push the call to window.ozoneVideo.outstreamRender(bid) bid =', JSON.parse(JSON.stringify(bid)));
|
|
1198
1198
|
// push to render queue because ozoneVideo may not be loaded yet
|
|
1199
1199
|
bid.renderer.push(() => {
|
|
1200
1200
|
window.ozoneVideo.outstreamRender(bid);
|
|
@@ -1202,4 +1202,4 @@ function outstreamRender(bid) {
|
|
|
1202
1202
|
}
|
|
1203
1203
|
|
|
1204
1204
|
registerBidder(spec);
|
|
1205
|
-
|
|
1205
|
+
logInfo(`*BidAdapter ${OZONEVERSION} was loaded`);
|