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 { isEmpty, deepAccess, logError, parseGPTSingleSizeArrayToRtbSize, generateUUID, logWarn } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { Renderer } from '../src/Renderer.js';
|
|
4
4
|
import { VIDEO, BANNER } from '../src/mediaTypes.js';
|
|
@@ -103,7 +103,7 @@ export const spec = {
|
|
|
103
103
|
impObj.ext.gpid = ortb2Imp.ext.data.pbadslot && ortb2Imp.ext.data.pbadslot.toString();
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
if (!
|
|
106
|
+
if (!isEmpty(keywords)) {
|
|
107
107
|
if (!pageKeywords) {
|
|
108
108
|
pageKeywords = keywords;
|
|
109
109
|
}
|
|
@@ -197,8 +197,8 @@ export const spec = {
|
|
|
197
197
|
request.user = user;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
const userKeywords =
|
|
201
|
-
const siteKeywords =
|
|
200
|
+
const userKeywords = deepAccess(config.getConfig('ortb2.user'), 'keywords') || null;
|
|
201
|
+
const siteKeywords = deepAccess(config.getConfig('ortb2.site'), 'keywords') || null;
|
|
202
202
|
|
|
203
203
|
if (userKeywords) {
|
|
204
204
|
pageKeywords = pageKeywords || {};
|
|
@@ -283,7 +283,7 @@ export const spec = {
|
|
|
283
283
|
_addBidResponse(_getBidFromResponse(respItem), bidRequest, bidResponses);
|
|
284
284
|
});
|
|
285
285
|
}
|
|
286
|
-
if (errorMessage)
|
|
286
|
+
if (errorMessage) logError(errorMessage);
|
|
287
287
|
return bidResponses;
|
|
288
288
|
},
|
|
289
289
|
getUserSyncs: function (syncOptions, responses, gdprConsent, uspConsent) {
|
|
@@ -339,11 +339,11 @@ function _getFloor (mediaTypes, bid) {
|
|
|
339
339
|
|
|
340
340
|
function _getBidFromResponse(respItem) {
|
|
341
341
|
if (!respItem) {
|
|
342
|
-
|
|
342
|
+
logError(LOG_ERROR_MESS.emptySeatbid);
|
|
343
343
|
} else if (!respItem.bid) {
|
|
344
|
-
|
|
344
|
+
logError(LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem));
|
|
345
345
|
} else if (!respItem.bid[0]) {
|
|
346
|
-
|
|
346
|
+
logError(LOG_ERROR_MESS.noBid);
|
|
347
347
|
}
|
|
348
348
|
return respItem && respItem.bid && respItem.bid[0];
|
|
349
349
|
}
|
|
@@ -382,8 +382,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses) {
|
|
|
382
382
|
bidResponse.adResponse = {
|
|
383
383
|
content: bidResponse.vastXml
|
|
384
384
|
};
|
|
385
|
-
}
|
|
386
|
-
if (serverBid.nurl) {
|
|
385
|
+
} else if (serverBid.nurl) {
|
|
387
386
|
bidResponse.vastUrl = serverBid.nurl;
|
|
388
387
|
}
|
|
389
388
|
bidResponse.mediaType = VIDEO;
|
|
@@ -401,7 +400,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses) {
|
|
|
401
400
|
}
|
|
402
401
|
}
|
|
403
402
|
if (errorMessage) {
|
|
404
|
-
|
|
403
|
+
logError(errorMessage);
|
|
405
404
|
}
|
|
406
405
|
}
|
|
407
406
|
|
|
@@ -410,7 +409,7 @@ function createVideoRequest(bid, mediaType) {
|
|
|
410
409
|
const size = (playerSize || bid.sizes || [])[0];
|
|
411
410
|
if (!size) return;
|
|
412
411
|
|
|
413
|
-
let result =
|
|
412
|
+
let result = parseGPTSingleSizeArrayToRtbSize(size);
|
|
414
413
|
|
|
415
414
|
if (mimes) {
|
|
416
415
|
result.mimes = mimes;
|
|
@@ -432,8 +431,8 @@ function createBannerRequest(bid, mediaType) {
|
|
|
432
431
|
const sizes = mediaType.sizes || bid.sizes;
|
|
433
432
|
if (!sizes || !sizes.length) return;
|
|
434
433
|
|
|
435
|
-
let format = sizes.map((size) =>
|
|
436
|
-
let result =
|
|
434
|
+
let format = sizes.map((size) => parseGPTSingleSizeArrayToRtbSize(size));
|
|
435
|
+
let result = parseGPTSingleSizeArrayToRtbSize(sizes[0]);
|
|
437
436
|
|
|
438
437
|
if (format.length) {
|
|
439
438
|
result.format = format
|
|
@@ -443,7 +442,7 @@ function createBannerRequest(bid, mediaType) {
|
|
|
443
442
|
|
|
444
443
|
function makeNewUserIdInFPDStorage() {
|
|
445
444
|
if (config.getConfig('localStorageWriteAllowed')) {
|
|
446
|
-
const value =
|
|
445
|
+
const value = generateUUID().replace(/-/g, '');
|
|
447
446
|
|
|
448
447
|
storage.setDataInLocalStorage(USER_ID_KEY, value);
|
|
449
448
|
return value;
|
|
@@ -519,7 +518,7 @@ function createRenderer (bid, rendererParams) {
|
|
|
519
518
|
try {
|
|
520
519
|
renderer.setRender(outstreamRender);
|
|
521
520
|
} catch (err) {
|
|
522
|
-
|
|
521
|
+
logWarn('Prebid Error calling setRender on renderer', err);
|
|
523
522
|
}
|
|
524
523
|
|
|
525
524
|
return renderer;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
1
|
+
import { isStr, deepAccess, isArray, isNumber, logError, logWarn, parseGPTSingleSizeArrayToRtbSize } from '../src/utils.js';
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { Renderer } from '../src/Renderer.js';
|
|
4
4
|
import { VIDEO } from '../src/mediaTypes.js';
|
|
5
|
+
import { config } from '../src/config.js';
|
|
5
6
|
|
|
6
7
|
const BIDDER_CODE = 'gridNM';
|
|
7
|
-
const ENDPOINT_URL = 'https://grid.bidswitch.net/
|
|
8
|
+
const ENDPOINT_URL = 'https://grid.bidswitch.net/hbjson';
|
|
8
9
|
const SYNC_URL = 'https://x.bidswitch.net/sync?ssp=themediagrid';
|
|
9
10
|
const TIME_TO_LIVE = 360;
|
|
10
11
|
const RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js';
|
|
@@ -37,19 +38,19 @@ export const spec = {
|
|
|
37
38
|
*/
|
|
38
39
|
isBidRequestValid: function(bid) {
|
|
39
40
|
let invalid =
|
|
40
|
-
!bid.params.source || !
|
|
41
|
-
!bid.params.secid || !
|
|
42
|
-
!bid.params.pubid || !
|
|
41
|
+
!bid.params.source || !isStr(bid.params.source) ||
|
|
42
|
+
!bid.params.secid || !isStr(bid.params.secid) ||
|
|
43
|
+
!bid.params.pubid || !isStr(bid.params.pubid);
|
|
43
44
|
|
|
44
|
-
const video =
|
|
45
|
-
const { protocols = video.protocols, mimes = video.mimes } =
|
|
45
|
+
const video = deepAccess(bid, 'mediaTypes.video') || {};
|
|
46
|
+
const { protocols = video.protocols, mimes = video.mimes } = deepAccess(bid, 'params.video') || {};
|
|
46
47
|
if (!invalid) {
|
|
47
48
|
invalid = !protocols || !mimes;
|
|
48
49
|
}
|
|
49
50
|
if (!invalid) {
|
|
50
|
-
invalid = !
|
|
51
|
+
invalid = !isArray(mimes) || !mimes.length || mimes.filter((it) => !(it && isStr(it))).length;
|
|
51
52
|
if (!invalid) {
|
|
52
|
-
invalid = !
|
|
53
|
+
invalid = !isArray(protocols) || !protocols.length || protocols.filter((it) => !(isNumber(it) && it > 0 && !(it % 1))).length;
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
return !invalid;
|
|
@@ -64,62 +65,146 @@ export const spec = {
|
|
|
64
65
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
65
66
|
const bids = validBidRequests || [];
|
|
66
67
|
const requests = [];
|
|
68
|
+
let { bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo } = bidderRequest || {};
|
|
69
|
+
|
|
70
|
+
const referer = refererInfo ? encodeURIComponent(refererInfo.referer) : '';
|
|
67
71
|
|
|
68
72
|
bids.forEach(bid => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
sizes: utils.parseSizesInput(sizes).join(','),
|
|
72
|
-
r: bidderRequestId,
|
|
73
|
-
wrapperType: 'Prebid_js',
|
|
74
|
-
wrapperVersion: '$prebid.version$'
|
|
75
|
-
};
|
|
73
|
+
let user;
|
|
74
|
+
let userExt;
|
|
76
75
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
76
|
+
const schain = bid.schain;
|
|
77
|
+
const userIdAsEids = bid.userIdAsEids;
|
|
78
|
+
|
|
79
|
+
if (!bidderRequestId) {
|
|
80
|
+
bidderRequestId = bid.bidderRequestId;
|
|
81
|
+
}
|
|
82
|
+
if (!auctionId) {
|
|
83
|
+
auctionId = bid.auctionId;
|
|
84
|
+
}
|
|
85
|
+
const {
|
|
86
|
+
params: { floorcpm, pubdata, source, secid, pubid, content, video },
|
|
87
|
+
mediaTypes, bidId, adUnitCode, rtd, ortb2Imp, sizes
|
|
88
|
+
} = bid;
|
|
89
|
+
|
|
90
|
+
const bidFloor = _getFloor(mediaTypes || {}, bid, isNumber(floorcpm) && floorcpm);
|
|
91
|
+
const jwTargeting = rtd && rtd.jwplayer && rtd.jwplayer.targeting;
|
|
92
|
+
const jwpseg = (pubdata && pubdata.jwpseg) || (jwTargeting && jwTargeting.segments);
|
|
93
|
+
|
|
94
|
+
const siteContent = content || (jwTargeting && jwTargeting.content);
|
|
95
|
+
|
|
96
|
+
const impObj = {
|
|
97
|
+
id: bidId.toString(),
|
|
98
|
+
tagid: secid.toString(),
|
|
99
|
+
video: createVideoForImp(video, sizes, mediaTypes && mediaTypes.video),
|
|
100
|
+
ext: {
|
|
101
|
+
divid: adUnitCode.toString()
|
|
91
102
|
}
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
if (ortb2Imp && ortb2Imp.ext && ortb2Imp.ext.data) {
|
|
106
|
+
impObj.ext.data = ortb2Imp.ext.data;
|
|
107
|
+
if (impObj.ext.data.adserver && impObj.ext.data.adserver.adslot) {
|
|
108
|
+
impObj.ext.gpid = impObj.ext.data.adserver.adslot.toString();
|
|
109
|
+
} else {
|
|
110
|
+
impObj.ext.gpid = ortb2Imp.ext.data.pbadslot && ortb2Imp.ext.data.pbadslot.toString();
|
|
94
111
|
}
|
|
95
112
|
}
|
|
96
113
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
114
|
+
if (bidFloor) {
|
|
115
|
+
impObj.bidfloor = bidFloor;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const imp = [impObj];
|
|
119
|
+
|
|
120
|
+
const reqSource = {
|
|
121
|
+
tid: auctionId && auctionId.toString(),
|
|
122
|
+
ext: {
|
|
123
|
+
wrapper: 'Prebid_js',
|
|
124
|
+
wrapper_version: '$prebid.version$'
|
|
102
125
|
}
|
|
103
|
-
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
if (schain) {
|
|
129
|
+
reqSource.ext.schain = schain;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const bidderTimeout = config.getConfig('bidderTimeout') || timeout;
|
|
133
|
+
const tmax = timeout ? Math.min(bidderTimeout, timeout) : bidderTimeout;
|
|
134
|
+
|
|
135
|
+
const request = {
|
|
136
|
+
id: bidderRequestId && bidderRequestId.toString(),
|
|
137
|
+
site: {
|
|
138
|
+
page: referer,
|
|
139
|
+
publisher: {
|
|
140
|
+
id: pubid,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
source: reqSource,
|
|
144
|
+
tmax,
|
|
145
|
+
imp,
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
if (siteContent) {
|
|
149
|
+
request.site.content = siteContent;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (jwpseg && jwpseg.length) {
|
|
153
|
+
user = {
|
|
154
|
+
data: [{
|
|
155
|
+
name: 'iow_labs_pub_data',
|
|
156
|
+
segment: jwpseg.map((seg) => {
|
|
157
|
+
return {name: 'jwpseg', value: seg};
|
|
158
|
+
})
|
|
159
|
+
}]
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
164
|
+
userExt = { consent: gdprConsent.consentString };
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (userIdAsEids && userIdAsEids.length) {
|
|
168
|
+
userExt = userExt || {};
|
|
169
|
+
userExt.eids = [...userIdAsEids];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (userExt && Object.keys(userExt).length) {
|
|
173
|
+
user = user || {};
|
|
174
|
+
user.ext = userExt;
|
|
175
|
+
}
|
|
104
176
|
|
|
105
|
-
if (
|
|
106
|
-
|
|
177
|
+
if (user) {
|
|
178
|
+
request.user = user;
|
|
107
179
|
}
|
|
108
180
|
|
|
109
|
-
if (
|
|
110
|
-
|
|
181
|
+
if (gdprConsent && gdprConsent.gdprApplies) {
|
|
182
|
+
request.regs = {
|
|
183
|
+
ext: {
|
|
184
|
+
gdpr: gdprConsent.gdprApplies ? 1 : 0
|
|
185
|
+
}
|
|
186
|
+
}
|
|
111
187
|
}
|
|
112
|
-
|
|
113
|
-
|
|
188
|
+
|
|
189
|
+
if (uspConsent) {
|
|
190
|
+
if (!request.regs) {
|
|
191
|
+
request.regs = { ext: {} };
|
|
192
|
+
}
|
|
193
|
+
request.regs.ext.us_privacy = uspConsent;
|
|
114
194
|
}
|
|
115
195
|
|
|
116
|
-
|
|
196
|
+
if (config.getConfig('coppa') === true) {
|
|
197
|
+
if (!request.regs) {
|
|
198
|
+
request.regs = {};
|
|
199
|
+
}
|
|
200
|
+
request.regs.coppa = 1;
|
|
201
|
+
}
|
|
117
202
|
|
|
118
203
|
requests.push({
|
|
119
204
|
method: 'POST',
|
|
120
|
-
url: ENDPOINT_URL + '?' +
|
|
205
|
+
url: ENDPOINT_URL + '?no_mapping=1&sp=' + source,
|
|
121
206
|
bid: bid,
|
|
122
|
-
data:
|
|
207
|
+
data: request
|
|
123
208
|
});
|
|
124
209
|
});
|
|
125
210
|
|
|
@@ -146,16 +231,11 @@ export const spec = {
|
|
|
146
231
|
if (!errorMessage && serverResponse.seatbid) {
|
|
147
232
|
const serverBid = _getBidFromResponse(serverResponse.seatbid[0]);
|
|
148
233
|
if (serverBid) {
|
|
149
|
-
if (!serverBid.adm) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);
|
|
234
|
+
if (!serverBid.adm && !serverBid.nurl) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);
|
|
150
235
|
else if (!serverBid.price) errorMessage = LOG_ERROR_MESS.noPrice + JSON.stringify(serverBid);
|
|
151
236
|
else if (serverBid.content_type !== 'video') errorMessage = LOG_ERROR_MESS.wrongContentType + serverBid.content_type;
|
|
152
237
|
if (!errorMessage) {
|
|
153
238
|
const bid = bidRequest.bid;
|
|
154
|
-
if (!serverBid.w || !serverBid.h) {
|
|
155
|
-
const size = utils.parseSizesInput(bid.sizes)[0].split('x');
|
|
156
|
-
serverBid.w = size[0];
|
|
157
|
-
serverBid.h = size[1];
|
|
158
|
-
}
|
|
159
239
|
const bidResponse = {
|
|
160
240
|
requestId: bid.bidId,
|
|
161
241
|
cpm: serverBid.price,
|
|
@@ -166,16 +246,21 @@ export const spec = {
|
|
|
166
246
|
netRevenue: true,
|
|
167
247
|
ttl: TIME_TO_LIVE,
|
|
168
248
|
dealId: serverBid.dealid,
|
|
169
|
-
vastXml: serverBid.adm,
|
|
170
249
|
mediaType: VIDEO,
|
|
171
250
|
meta: {
|
|
172
251
|
advertiserDomains: serverBid.adomain ? serverBid.adomain : []
|
|
173
|
-
},
|
|
174
|
-
adResponse: {
|
|
175
|
-
content: serverBid.adm
|
|
176
252
|
}
|
|
177
253
|
};
|
|
178
254
|
|
|
255
|
+
if (serverBid.adm) {
|
|
256
|
+
bidResponse.vastXml = serverBid.adm;
|
|
257
|
+
bidResponse.adResponse = {
|
|
258
|
+
content: bidResponse.vastXml
|
|
259
|
+
};
|
|
260
|
+
} else if (serverBid.nurl) {
|
|
261
|
+
bidResponse.vastUrl = serverBid.nurl;
|
|
262
|
+
}
|
|
263
|
+
|
|
179
264
|
if (!bid.renderer && (!bid.mediaTypes || !bid.mediaTypes.video || bid.mediaTypes.video.context === 'outstream')) {
|
|
180
265
|
bidResponse.renderer = createRenderer(bidResponse, {
|
|
181
266
|
id: bid.bidId,
|
|
@@ -186,7 +271,7 @@ export const spec = {
|
|
|
186
271
|
}
|
|
187
272
|
}
|
|
188
273
|
}
|
|
189
|
-
if (errorMessage)
|
|
274
|
+
if (errorMessage) logError(errorMessage);
|
|
190
275
|
return bidResponses;
|
|
191
276
|
},
|
|
192
277
|
getUserSyncs: function (syncOptions, responses, gdprConsent, uspConsent) {
|
|
@@ -213,13 +298,40 @@ export const spec = {
|
|
|
213
298
|
}
|
|
214
299
|
};
|
|
215
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Gets bidfloor
|
|
303
|
+
* @param {Object} mediaTypes
|
|
304
|
+
* @param {Object} bid
|
|
305
|
+
* @param {Number} floor
|
|
306
|
+
* @returns {Number} floor
|
|
307
|
+
*/
|
|
308
|
+
function _getFloor (mediaTypes, bid, floor) {
|
|
309
|
+
const curMediaType = mediaTypes.video ? 'video' : 'banner';
|
|
310
|
+
|
|
311
|
+
if (typeof bid.getFloor === 'function') {
|
|
312
|
+
const floorInfo = bid.getFloor({
|
|
313
|
+
currency: 'USD',
|
|
314
|
+
mediaType: curMediaType,
|
|
315
|
+
size: bid.sizes.map(([w, h]) => ({w, h}))
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
if (typeof floorInfo === 'object' &&
|
|
319
|
+
floorInfo.currency === 'USD' &&
|
|
320
|
+
!isNaN(parseFloat(floorInfo.floor))) {
|
|
321
|
+
floor = Math.max(floor, parseFloat(floorInfo.floor));
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return floor;
|
|
326
|
+
}
|
|
327
|
+
|
|
216
328
|
function _getBidFromResponse(respItem) {
|
|
217
329
|
if (!respItem) {
|
|
218
|
-
|
|
330
|
+
logError(LOG_ERROR_MESS.emptySeatbid);
|
|
219
331
|
} else if (!respItem.bid) {
|
|
220
|
-
|
|
332
|
+
logError(LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem));
|
|
221
333
|
} else if (!respItem.bid[0]) {
|
|
222
|
-
|
|
334
|
+
logError(LOG_ERROR_MESS.noBid);
|
|
223
335
|
}
|
|
224
336
|
return respItem && respItem.bid && respItem.bid[0];
|
|
225
337
|
}
|
|
@@ -243,12 +355,51 @@ function createRenderer (bid, rendererParams) {
|
|
|
243
355
|
try {
|
|
244
356
|
renderer.setRender(outstreamRender);
|
|
245
357
|
} catch (err) {
|
|
246
|
-
|
|
358
|
+
logWarn('Prebid Error calling setRender on renderer', err);
|
|
247
359
|
}
|
|
248
360
|
|
|
249
361
|
return renderer;
|
|
250
362
|
}
|
|
251
363
|
|
|
364
|
+
function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes, bidVideo = {}) {
|
|
365
|
+
VIDEO_KEYS.forEach((key) => {
|
|
366
|
+
if (!(key in paramsVideo) && key in bidVideo) {
|
|
367
|
+
paramsVideo[key] = bidVideo[key];
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
if (size && isStr(size)) {
|
|
372
|
+
const sizeArray = size.split('x');
|
|
373
|
+
if (sizeArray.length === 2 && parseInt(sizeArray[0]) && parseInt(sizeArray[1])) {
|
|
374
|
+
paramsVideo.w = parseInt(sizeArray[0]);
|
|
375
|
+
paramsVideo.h = parseInt(sizeArray[1]);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (!paramsVideo.w || !paramsVideo.h) {
|
|
380
|
+
const playerSizes = bidVideo.playerSize && bidVideo.playerSize.length === 2 ? bidVideo.playerSize : bidSizes;
|
|
381
|
+
if (playerSizes) {
|
|
382
|
+
const playerSize = playerSizes[0];
|
|
383
|
+
if (playerSize) {
|
|
384
|
+
Object.assign(paramsVideo, parseGPTSingleSizeArrayToRtbSize(playerSize));
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
const durationRangeSec = bidVideo.durationRangeSec || [];
|
|
390
|
+
const minDur = mind || durationRangeSec[0] || bidVideo.minduration;
|
|
391
|
+
const maxDur = maxd || durationRangeSec[1] || bidVideo.maxduration;
|
|
392
|
+
|
|
393
|
+
if (minDur) {
|
|
394
|
+
paramsVideo.minduration = minDur;
|
|
395
|
+
}
|
|
396
|
+
if (maxDur) {
|
|
397
|
+
paramsVideo.maxduration = maxDur;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return paramsVideo;
|
|
401
|
+
}
|
|
402
|
+
|
|
252
403
|
export function resetUserSync() {
|
|
253
404
|
hasSynced = false;
|
|
254
405
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { getBidIdParameter, deepAccess, _each, triggerPixel } from '../src/utils.js';
|
|
4
4
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
5
5
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
6
|
-
import {triggerPixel} from '../src/utils.js';
|
|
7
6
|
|
|
8
7
|
const BIDDER_CODE = 'growads';
|
|
9
8
|
|
|
@@ -23,8 +22,8 @@ export const spec = {
|
|
|
23
22
|
const zoneCounters = {};
|
|
24
23
|
|
|
25
24
|
return validBidRequests.map(bidRequest => {
|
|
26
|
-
zoneId =
|
|
27
|
-
domain =
|
|
25
|
+
zoneId = getBidIdParameter('zoneId', bidRequest.params);
|
|
26
|
+
domain = getBidIdParameter('domain', bidRequest.params);
|
|
28
27
|
|
|
29
28
|
if (!(zoneId in zoneCounters)) {
|
|
30
29
|
zoneCounters[zoneId] = 0;
|
|
@@ -77,8 +76,8 @@ export const spec = {
|
|
|
77
76
|
width = parseInt(response.width);
|
|
78
77
|
height = parseInt(response.height);
|
|
79
78
|
|
|
80
|
-
minCPM =
|
|
81
|
-
maxCPM =
|
|
79
|
+
minCPM = getBidIdParameter('minCPM', request.params);
|
|
80
|
+
maxCPM = getBidIdParameter('maxCPM', request.params);
|
|
82
81
|
width = parseInt(response.width);
|
|
83
82
|
height = parseInt(response.height);
|
|
84
83
|
|
|
@@ -102,7 +101,7 @@ export const spec = {
|
|
|
102
101
|
netRevenue: true,
|
|
103
102
|
ttl: response.ttl,
|
|
104
103
|
adUnitCode: request.adUnitCode,
|
|
105
|
-
referrer:
|
|
104
|
+
referrer: deepAccess(request, 'refererInfo.referer')
|
|
106
105
|
};
|
|
107
106
|
|
|
108
107
|
if (response.hasOwnProperty(NATIVE)) {
|
|
@@ -137,7 +136,7 @@ export const spec = {
|
|
|
137
136
|
bid.ad = response.ad;
|
|
138
137
|
bid.mediaType = BANNER;
|
|
139
138
|
// Ensure that response ad matches one of the placement sizes.
|
|
140
|
-
|
|
139
|
+
_each(deepAccess(request, 'mediaTypes.banner.sizes', []), function (size) {
|
|
141
140
|
if (width === size[0] && height === size[1]) {
|
|
142
141
|
isCorrectSize = true;
|
|
143
142
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as utils from '../src/utils.js'
|
|
2
|
-
|
|
3
1
|
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
2
|
+
import { _each, deepAccess, logError, logWarn, parseSizesInput } from '../src/utils.js';
|
|
4
3
|
|
|
5
4
|
import { config } from '../src/config.js'
|
|
6
5
|
import { getStorageManager } from '../src/storageManager.js';
|
|
@@ -51,7 +50,7 @@ function _getBrowserParams(topWindowUrl) {
|
|
|
51
50
|
topScreen = topWindow.screen;
|
|
52
51
|
topUrl = topWindowUrl || '';
|
|
53
52
|
} catch (error) {
|
|
54
|
-
|
|
53
|
+
logError(error);
|
|
55
54
|
return browserParams
|
|
56
55
|
}
|
|
57
56
|
|
|
@@ -131,7 +130,7 @@ function isBidRequestValid(bid) {
|
|
|
131
130
|
const id = legacyParamID || params.slot || params.native || params.zone || params.pubID;
|
|
132
131
|
|
|
133
132
|
if (invalidRequestIds[id]) {
|
|
134
|
-
|
|
133
|
+
logWarn(`[GumGum] Please check the implementation for ${id} for the placement ${adUnitCode}`);
|
|
135
134
|
return false;
|
|
136
135
|
}
|
|
137
136
|
|
|
@@ -146,12 +145,12 @@ function isBidRequestValid(bid) {
|
|
|
146
145
|
case !!(params.inVideo): break;
|
|
147
146
|
case !!(params.videoPubID): break;
|
|
148
147
|
default:
|
|
149
|
-
|
|
148
|
+
logWarn(`[GumGum] No product selected for the placement ${adUnitCode}, please check your implementation.`);
|
|
150
149
|
return false;
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
if (params.bidfloor && !(typeof params.bidfloor === 'number' && isFinite(params.bidfloor))) {
|
|
154
|
-
|
|
153
|
+
logWarn('[GumGum] bidfloor must be a Number');
|
|
155
154
|
return false;
|
|
156
155
|
}
|
|
157
156
|
|
|
@@ -173,7 +172,7 @@ function _getVidParams(attributes) {
|
|
|
173
172
|
protocols = [],
|
|
174
173
|
playerSize = []
|
|
175
174
|
} = attributes;
|
|
176
|
-
const sizes =
|
|
175
|
+
const sizes = parseSizesInput(playerSize);
|
|
177
176
|
const [viw, vih] = sizes[0] && sizes[0].split('x');
|
|
178
177
|
let pr = '';
|
|
179
178
|
|
|
@@ -279,7 +278,7 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
279
278
|
const uspConsent = bidderRequest && bidderRequest.uspConsent;
|
|
280
279
|
const timeout = config.getConfig('bidderTimeout');
|
|
281
280
|
const topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer;
|
|
282
|
-
|
|
281
|
+
_each(validBidRequests, bidRequest => {
|
|
283
282
|
const {
|
|
284
283
|
bidId,
|
|
285
284
|
mediaTypes = {},
|
|
@@ -298,8 +297,10 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
298
297
|
// ADTS-134 Retrieve ID envelopes
|
|
299
298
|
for (const eid in eids) data[eid] = eids[eid];
|
|
300
299
|
|
|
301
|
-
// ADJS-1024
|
|
302
|
-
if (
|
|
300
|
+
// ADJS-1024 & ADSS-1297
|
|
301
|
+
if (deepAccess(ortb2Imp, 'ext.data.pbadslot')) {
|
|
302
|
+
gpid = deepAccess(ortb2Imp, 'ext.data.pbadslot')
|
|
303
|
+
} else if (deepAccess(ortb2Imp, 'ext.data.adserver.name')) {
|
|
303
304
|
gpid = ortb2Imp.ext.data.adserver.adslot
|
|
304
305
|
}
|
|
305
306
|
|
|
@@ -433,7 +434,7 @@ function interpretResponse(serverResponse, bidRequest) {
|
|
|
433
434
|
setTimeout(() => {
|
|
434
435
|
!!invalidRequestIds[id] && delete invalidRequestIds[id];
|
|
435
436
|
}, delayTime);
|
|
436
|
-
|
|
437
|
+
logWarn(`[GumGum] Please check the implementation for ${id}`);
|
|
437
438
|
}
|
|
438
439
|
|
|
439
440
|
const defaultResponse = {
|
|
@@ -481,14 +482,19 @@ function interpretResponse(serverResponse, bidRequest) {
|
|
|
481
482
|
advertiserDomains: advertiserDomains || [],
|
|
482
483
|
mediaType: type || mediaType
|
|
483
484
|
};
|
|
484
|
-
let sizes =
|
|
485
|
+
let sizes = parseSizesInput(bidRequest.sizes);
|
|
485
486
|
|
|
486
487
|
if (maxw && maxh) {
|
|
487
488
|
sizes = [`${maxw}x${maxh}`];
|
|
488
489
|
} else if (product === 5 && includes(sizes, '1x1')) {
|
|
489
490
|
sizes = ['1x1'];
|
|
490
491
|
} else if (product === 2 && includes(sizes, '1x1')) {
|
|
491
|
-
|
|
492
|
+
const requestSizesThatMatchResponse = (bidRequest.sizes && bidRequest.sizes.reduce((result, current) => {
|
|
493
|
+
const [ width, height ] = current;
|
|
494
|
+
if (responseWidth === width || responseHeight === height) result.push(current.join('x'));
|
|
495
|
+
return result
|
|
496
|
+
}, [])) || [];
|
|
497
|
+
sizes = requestSizesThatMatchResponse.length ? requestSizesThatMatchResponse : parseSizesInput(bidRequest.sizes)
|
|
492
498
|
}
|
|
493
499
|
|
|
494
500
|
let [width, height] = sizes[0].split('x');
|