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
|
@@ -3,7 +3,10 @@ import find from 'core-js-pure/features/array/find';
|
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
5
5
|
import { getStorageManager } from '../src/storageManager.js';
|
|
6
|
-
import
|
|
6
|
+
import {
|
|
7
|
+
isPlainObject, deepSetValue, deepAccess, logWarn, inIframe, isNumber, logError, isArray, uniques,
|
|
8
|
+
flatten, triggerPixel, isStr, isEmptyStr, generateUUID
|
|
9
|
+
} from '../src/utils.js';
|
|
7
10
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -150,7 +153,7 @@ function buildDevice() {
|
|
|
150
153
|
|
|
151
154
|
const deviceConfig = common.getConfig('device');
|
|
152
155
|
|
|
153
|
-
if (
|
|
156
|
+
if (isPlainObject(deviceConfig)) {
|
|
154
157
|
return { ...device, ...deviceConfig };
|
|
155
158
|
}
|
|
156
159
|
|
|
@@ -163,12 +166,12 @@ function buildRegs(bidderRequest) {
|
|
|
163
166
|
};
|
|
164
167
|
|
|
165
168
|
if (bidderRequest.gdprConsent) {
|
|
166
|
-
|
|
169
|
+
deepSetValue(
|
|
167
170
|
regs,
|
|
168
171
|
'ext.gdpr',
|
|
169
172
|
bidderRequest.gdprConsent.gdprApplies ? 1 : 0
|
|
170
173
|
);
|
|
171
|
-
|
|
174
|
+
deepSetValue(
|
|
172
175
|
regs,
|
|
173
176
|
'ext.gdprConsentString',
|
|
174
177
|
bidderRequest.gdprConsent.consentString || ''
|
|
@@ -176,7 +179,7 @@ function buildRegs(bidderRequest) {
|
|
|
176
179
|
}
|
|
177
180
|
|
|
178
181
|
if (bidderRequest.uspConsent) {
|
|
179
|
-
|
|
182
|
+
deepSetValue(regs, 'ext.us_privacy', bidderRequest.uspConsent);
|
|
180
183
|
}
|
|
181
184
|
|
|
182
185
|
return regs;
|
|
@@ -187,10 +190,10 @@ function buildSource(bidRequests, bidderRequest) {
|
|
|
187
190
|
fd: 1,
|
|
188
191
|
tid: bidderRequest.auctionId,
|
|
189
192
|
};
|
|
190
|
-
const schain =
|
|
193
|
+
const schain = deepAccess(bidRequests, '0.schain');
|
|
191
194
|
|
|
192
195
|
if (schain) {
|
|
193
|
-
|
|
196
|
+
deepSetValue(source, 'ext.schain', schain);
|
|
194
197
|
}
|
|
195
198
|
|
|
196
199
|
return source;
|
|
@@ -232,7 +235,7 @@ function buildMediaTypeObject(mediaType, bidRequest) {
|
|
|
232
235
|
case VIDEO:
|
|
233
236
|
return buildVideoObject(bidRequest);
|
|
234
237
|
default:
|
|
235
|
-
|
|
238
|
+
logWarn(`${BIDDER_CODE}: Unsupported media type ${mediaType}!`);
|
|
236
239
|
}
|
|
237
240
|
}
|
|
238
241
|
|
|
@@ -246,7 +249,7 @@ function buildBannerObject(bidRequest) {
|
|
|
246
249
|
|
|
247
250
|
return {
|
|
248
251
|
pos: 0,
|
|
249
|
-
topframe:
|
|
252
|
+
topframe: inIframe() ? 0 : 1,
|
|
250
253
|
format,
|
|
251
254
|
w,
|
|
252
255
|
h,
|
|
@@ -261,8 +264,8 @@ function buildVideoObject(bidRequest) {
|
|
|
261
264
|
};
|
|
262
265
|
|
|
263
266
|
for (const param of VIDEO_PARAMS) {
|
|
264
|
-
const paramsValue =
|
|
265
|
-
const mediaTypeValue =
|
|
267
|
+
const paramsValue = deepAccess(bidRequest, `params.video.${param}`);
|
|
268
|
+
const mediaTypeValue = deepAccess(
|
|
266
269
|
bidRequest,
|
|
267
270
|
`mediaTypes.video.${param}`
|
|
268
271
|
);
|
|
@@ -276,10 +279,10 @@ function buildVideoObject(bidRequest) {
|
|
|
276
279
|
}
|
|
277
280
|
|
|
278
281
|
function getVideoSize(bidRequest) {
|
|
279
|
-
const playerSize =
|
|
280
|
-
const { w, h } =
|
|
282
|
+
const playerSize = deepAccess(bidRequest, 'mediaTypes.video.playerSize', [[]]);
|
|
283
|
+
const { w, h } = deepAccess(bidRequest, 'mediaTypes.video', {});
|
|
281
284
|
|
|
282
|
-
if (
|
|
285
|
+
if (isNumber(w) && isNumber(h)) {
|
|
283
286
|
return { w, h };
|
|
284
287
|
}
|
|
285
288
|
|
|
@@ -296,11 +299,11 @@ function buildImpExt(validBidRequest) {
|
|
|
296
299
|
const ext = {};
|
|
297
300
|
|
|
298
301
|
if (placementId) {
|
|
299
|
-
|
|
302
|
+
deepSetValue(ext, 'adbook.placementId', placementId);
|
|
300
303
|
}
|
|
301
304
|
|
|
302
305
|
if (effectiverOrgId) {
|
|
303
|
-
|
|
306
|
+
deepSetValue(ext, 'adbook.orgId', effectiverOrgId);
|
|
304
307
|
}
|
|
305
308
|
|
|
306
309
|
return ext;
|
|
@@ -314,20 +317,19 @@ function interpretResponse(bidResponse, bidderRequest) {
|
|
|
314
317
|
const bidderRequestBody = safeJSONparse(bidderRequest.data);
|
|
315
318
|
|
|
316
319
|
if (
|
|
317
|
-
|
|
318
|
-
|
|
320
|
+
deepAccess(bidderRequestBody, 'id') !=
|
|
321
|
+
deepAccess(bidResponse, 'body.id')
|
|
319
322
|
) {
|
|
320
|
-
|
|
323
|
+
logError(
|
|
321
324
|
`${BIDDER_CODE}: Bid response id does not match bidder request id`
|
|
322
325
|
);
|
|
323
326
|
|
|
324
327
|
return [];
|
|
325
328
|
}
|
|
326
329
|
|
|
327
|
-
const referrer =
|
|
328
|
-
const incomingBids =
|
|
329
|
-
.
|
|
330
|
-
.filter((seat) => utils.isArray(seat.bid))
|
|
330
|
+
const referrer = deepAccess(bidderRequestBody, 'site.ref', '');
|
|
331
|
+
const incomingBids = deepAccess(bidResponse, 'body.seatbid', [])
|
|
332
|
+
.filter((seat) => isArray(seat.bid))
|
|
331
333
|
.reduce((bids, seat) => bids.concat(seat.bid), [])
|
|
332
334
|
.filter(validateBid(bidderRequestBody));
|
|
333
335
|
const targetingMap = buildTargetingMap(incomingBids);
|
|
@@ -366,11 +368,11 @@ const impToPrebidBid =
|
|
|
366
368
|
const bidRequest = findBidRequest(bidderRequestBody, bid);
|
|
367
369
|
|
|
368
370
|
if (!bidRequest) {
|
|
369
|
-
|
|
371
|
+
logError(`${BIDDER_CODE}: Could not match bid to bid request`);
|
|
370
372
|
|
|
371
373
|
return null;
|
|
372
374
|
}
|
|
373
|
-
const categories =
|
|
375
|
+
const categories = deepAccess(bid, 'cat', []);
|
|
374
376
|
const mediaType = getMediaType(bid.adm);
|
|
375
377
|
let prebidBid = {
|
|
376
378
|
ad: bid.adm,
|
|
@@ -383,7 +385,7 @@ const impToPrebidBid =
|
|
|
383
385
|
creativeId: bid.crid || bid.id,
|
|
384
386
|
currency: bidResponseCurrency || getBidderConfig('defaultCurrency'),
|
|
385
387
|
height: bid.h,
|
|
386
|
-
lineItemId:
|
|
388
|
+
lineItemId: deepAccess(bid, 'ext.liid'),
|
|
387
389
|
mediaType,
|
|
388
390
|
meta: {
|
|
389
391
|
advertiserDomains: bid.adomain,
|
|
@@ -408,7 +410,7 @@ const impToPrebidBid =
|
|
|
408
410
|
|
|
409
411
|
return prebidBid;
|
|
410
412
|
} catch (error) {
|
|
411
|
-
|
|
413
|
+
logError(`${BIDDER_CODE}: Error while building bid`, error);
|
|
412
414
|
|
|
413
415
|
return null;
|
|
414
416
|
}
|
|
@@ -423,7 +425,7 @@ function getVideoSpecificParams(bidRequest, bid) {
|
|
|
423
425
|
}
|
|
424
426
|
|
|
425
427
|
function buildTargetingMap(bids) {
|
|
426
|
-
const impIds = bids.map(({ impid }) => impid).filter(
|
|
428
|
+
const impIds = bids.map(({ impid }) => impid).filter(uniques);
|
|
427
429
|
const values = impIds.reduce((result, id) => {
|
|
428
430
|
result[id] = {
|
|
429
431
|
lineItemIds: [],
|
|
@@ -459,12 +461,12 @@ function buildTargetingMap(bids) {
|
|
|
459
461
|
|
|
460
462
|
function hasRequiredParams(bidRequest) {
|
|
461
463
|
const value =
|
|
462
|
-
|
|
463
|
-
|
|
464
|
+
deepAccess(bidRequest, 'params.placementId') != null ||
|
|
465
|
+
deepAccess(bidRequest, 'params.orgId') != null ||
|
|
464
466
|
getBidderConfig('orgId') != null;
|
|
465
467
|
|
|
466
468
|
if (!value) {
|
|
467
|
-
|
|
469
|
+
logError(`${BIDDER_CODE}: missing orgId and placementId parameter`);
|
|
468
470
|
}
|
|
469
471
|
|
|
470
472
|
return value;
|
|
@@ -472,7 +474,7 @@ function hasRequiredParams(bidRequest) {
|
|
|
472
474
|
|
|
473
475
|
function isValidBannerRequest(bidRequest) {
|
|
474
476
|
const value = validateSizes(
|
|
475
|
-
|
|
477
|
+
deepAccess(bidRequest, 'mediaTypes.banner.sizes', [])
|
|
476
478
|
);
|
|
477
479
|
|
|
478
480
|
return value;
|
|
@@ -480,28 +482,28 @@ function isValidBannerRequest(bidRequest) {
|
|
|
480
482
|
|
|
481
483
|
function isValidVideoRequest(bidRequest) {
|
|
482
484
|
const value =
|
|
483
|
-
|
|
485
|
+
isArray(deepAccess(bidRequest, 'mediaTypes.video.mimes')) &&
|
|
484
486
|
validateVideoSizes(bidRequest);
|
|
485
487
|
|
|
486
488
|
return value;
|
|
487
489
|
}
|
|
488
490
|
|
|
489
491
|
function validateSize(size) {
|
|
490
|
-
return
|
|
492
|
+
return isArray(size) && size.length === 2 && size.every(isNumber);
|
|
491
493
|
}
|
|
492
494
|
|
|
493
495
|
function validateSizes(sizes) {
|
|
494
|
-
return
|
|
496
|
+
return isArray(sizes) && sizes.length > 0 && sizes.every(validateSize);
|
|
495
497
|
}
|
|
496
498
|
|
|
497
499
|
function validateVideoSizes(bidRequest) {
|
|
498
|
-
const { w, h } =
|
|
500
|
+
const { w, h } = deepAccess(bidRequest, 'mediaTypes.video', {});
|
|
499
501
|
|
|
500
502
|
return (
|
|
501
503
|
validateSizes(
|
|
502
|
-
|
|
504
|
+
deepAccess(bidRequest, 'mediaTypes.video.playerSize')
|
|
503
505
|
) ||
|
|
504
|
-
(
|
|
506
|
+
(isNumber(w) && isNumber(h))
|
|
505
507
|
);
|
|
506
508
|
}
|
|
507
509
|
|
|
@@ -518,7 +520,7 @@ function validateBid(bidderRequestBody) {
|
|
|
518
520
|
const value = validators.every((validator) => validator(bid, bidRequest));
|
|
519
521
|
|
|
520
522
|
if (!value) {
|
|
521
|
-
|
|
523
|
+
logWarn(`${BIDDER_CODE}: Invalid bid`, bid);
|
|
522
524
|
}
|
|
523
525
|
|
|
524
526
|
return value;
|
|
@@ -526,13 +528,13 @@ function validateBid(bidderRequestBody) {
|
|
|
526
528
|
}
|
|
527
529
|
|
|
528
530
|
const commonBidValidators = [
|
|
529
|
-
(bid) =>
|
|
531
|
+
(bid) => isPlainObject(bid),
|
|
530
532
|
(bid) => isNonEmptyStr(bid.adid),
|
|
531
533
|
(bid) => isNonEmptyStr(bid.adm),
|
|
532
534
|
(bid) => isNonEmptyStr(bid.id),
|
|
533
535
|
(bid) => isNonEmptyStr(bid.impid),
|
|
534
|
-
(bid) => isNonEmptyStr(
|
|
535
|
-
(bid) =>
|
|
536
|
+
(bid) => isNonEmptyStr(deepAccess(bid, 'ext.liid')),
|
|
537
|
+
(bid) => isNumber(bid.price),
|
|
536
538
|
];
|
|
537
539
|
|
|
538
540
|
const bannerBidValidators = [
|
|
@@ -546,12 +548,12 @@ function validateBannerDimension(dimension) {
|
|
|
546
548
|
return bannerHasSingleSize(bidRequest);
|
|
547
549
|
}
|
|
548
550
|
|
|
549
|
-
return
|
|
551
|
+
return isNumber(bid[dimension]);
|
|
550
552
|
};
|
|
551
553
|
}
|
|
552
554
|
|
|
553
555
|
function bannerHasSingleSize(bidRequest) {
|
|
554
|
-
return
|
|
556
|
+
return deepAccess(bidRequest, 'banner.format', []).length === 1;
|
|
555
557
|
}
|
|
556
558
|
|
|
557
559
|
/**
|
|
@@ -562,9 +564,9 @@ export const storage = getStorageManager();
|
|
|
562
564
|
|
|
563
565
|
function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) {
|
|
564
566
|
return responses
|
|
565
|
-
.map((response) =>
|
|
566
|
-
.filter(
|
|
567
|
-
.reduce(
|
|
567
|
+
.map((response) => deepAccess(response, 'body.ext.sync'))
|
|
568
|
+
.filter(isArray)
|
|
569
|
+
.reduce(flatten, [])
|
|
568
570
|
.filter(validateSync(syncOptions))
|
|
569
571
|
.map(applyConsents(gdprConsent, uspConsent));
|
|
570
572
|
}
|
|
@@ -644,11 +646,11 @@ function onBidWon(bid) {
|
|
|
644
646
|
const wurl = buildWinUrl(bid);
|
|
645
647
|
|
|
646
648
|
if (wurl !== null) {
|
|
647
|
-
|
|
649
|
+
triggerPixel(wurl);
|
|
648
650
|
}
|
|
649
651
|
|
|
650
|
-
if (
|
|
651
|
-
|
|
652
|
+
if (isStr(bid.nurl)) {
|
|
653
|
+
triggerPixel(bid.nurl);
|
|
652
654
|
}
|
|
653
655
|
}
|
|
654
656
|
|
|
@@ -662,7 +664,7 @@ function buildWinUrl(bid) {
|
|
|
662
664
|
|
|
663
665
|
return url.toString();
|
|
664
666
|
} catch (_) {
|
|
665
|
-
|
|
667
|
+
logError(
|
|
666
668
|
`${BIDDER_CODE}: Could not build win tracking URL with %s`,
|
|
667
669
|
getBidderConfig('winTrackingUrl')
|
|
668
670
|
);
|
|
@@ -686,7 +688,7 @@ function getMediaType(adm) {
|
|
|
686
688
|
|
|
687
689
|
const markup = safeJSONparse(adm.replace(/\\/g, ''));
|
|
688
690
|
|
|
689
|
-
if (markup &&
|
|
691
|
+
if (markup && isPlainObject(markup.native)) {
|
|
690
692
|
return NATIVE;
|
|
691
693
|
}
|
|
692
694
|
|
|
@@ -702,7 +704,7 @@ function safeJSONparse(...args) {
|
|
|
702
704
|
}
|
|
703
705
|
|
|
704
706
|
function isNonEmptyStr(value) {
|
|
705
|
-
return
|
|
707
|
+
return isStr(value) && !isEmptyStr(value);
|
|
706
708
|
}
|
|
707
709
|
|
|
708
710
|
function findBidRequest(bidderRequest, bid) {
|
|
@@ -782,7 +784,7 @@ const getUrlBuilder = function (url) {
|
|
|
782
784
|
|
|
783
785
|
export const common = {
|
|
784
786
|
generateUUID: function () {
|
|
785
|
-
return
|
|
787
|
+
return generateUUID();
|
|
786
788
|
},
|
|
787
789
|
getConfig: function (property) {
|
|
788
790
|
return config.getConfig(property);
|
package/modules/adfBidAdapter.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
NATIVE, BANNER, VIDEO
|
|
9
9
|
} from '../src/mediaTypes.js';
|
|
10
|
-
import
|
|
10
|
+
import { mergeDeep, _map, deepAccess, parseSizesInput, deepSetValue } from '../src/utils.js';
|
|
11
11
|
import { config } from '../src/config.js';
|
|
12
12
|
import { Renderer } from '../src/Renderer.js';
|
|
13
13
|
|
|
@@ -68,12 +68,12 @@ export const spec = {
|
|
|
68
68
|
if (typeof getConfig('app') === 'object') {
|
|
69
69
|
app = getConfig('app') || {};
|
|
70
70
|
if (commonFpd.app) {
|
|
71
|
-
|
|
71
|
+
mergeDeep(app, commonFpd.app);
|
|
72
72
|
}
|
|
73
73
|
} else {
|
|
74
74
|
site = getConfig('site') || {};
|
|
75
75
|
if (commonFpd.site) {
|
|
76
|
-
|
|
76
|
+
mergeDeep(site, commonFpd.site);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
if (!site.page) {
|
|
@@ -99,12 +99,20 @@ export const spec = {
|
|
|
99
99
|
const imp = validBidRequests.map((bid, id) => {
|
|
100
100
|
bid.netRevenue = pt;
|
|
101
101
|
|
|
102
|
+
const floorInfo = bid.getFloor ? bid.getFloor({
|
|
103
|
+
currency: currency || 'USD'
|
|
104
|
+
}) : {};
|
|
105
|
+
const bidfloor = floorInfo.floor;
|
|
106
|
+
const bidfloorcur = floorInfo.currency;
|
|
107
|
+
|
|
102
108
|
const imp = {
|
|
103
109
|
id: id + 1,
|
|
104
|
-
tagid: bid.params.mid
|
|
110
|
+
tagid: bid.params.mid,
|
|
111
|
+
bidfloor,
|
|
112
|
+
bidfloorcur
|
|
105
113
|
};
|
|
106
114
|
|
|
107
|
-
const assets =
|
|
115
|
+
const assets = _map(bid.nativeParams, (bidParams, key) => {
|
|
108
116
|
const props = NATIVE_PARAMS[key];
|
|
109
117
|
const asset = {
|
|
110
118
|
required: bidParams.required & 1,
|
|
@@ -150,10 +158,10 @@ export const spec = {
|
|
|
150
158
|
return imp;
|
|
151
159
|
}
|
|
152
160
|
|
|
153
|
-
const bannerParams =
|
|
161
|
+
const bannerParams = deepAccess(bid, 'mediaTypes.banner');
|
|
154
162
|
|
|
155
163
|
if (bannerParams && bannerParams.sizes) {
|
|
156
|
-
const sizes =
|
|
164
|
+
const sizes = parseSizesInput(bannerParams.sizes);
|
|
157
165
|
const format = sizes.map(size => {
|
|
158
166
|
const [ width, height ] = size.split('x');
|
|
159
167
|
const w = parseInt(width, 10);
|
|
@@ -169,7 +177,7 @@ export const spec = {
|
|
|
169
177
|
return imp;
|
|
170
178
|
}
|
|
171
179
|
|
|
172
|
-
const videoParams =
|
|
180
|
+
const videoParams = deepAccess(bid, 'mediaTypes.video');
|
|
173
181
|
if (videoParams) {
|
|
174
182
|
imp.video = videoParams;
|
|
175
183
|
bid.mediaType = VIDEO;
|
|
@@ -194,21 +202,21 @@ export const spec = {
|
|
|
194
202
|
request.is_debug = !!test;
|
|
195
203
|
request.test = 1;
|
|
196
204
|
}
|
|
197
|
-
if (
|
|
198
|
-
|
|
199
|
-
|
|
205
|
+
if (deepAccess(bidderRequest, 'gdprConsent.gdprApplies') !== undefined) {
|
|
206
|
+
deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
|
|
207
|
+
deepSetValue(request, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies & 1);
|
|
200
208
|
}
|
|
201
209
|
|
|
202
210
|
if (bidderRequest.uspConsent) {
|
|
203
|
-
|
|
211
|
+
deepSetValue(request, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
204
212
|
}
|
|
205
213
|
|
|
206
214
|
if (eids) {
|
|
207
|
-
|
|
215
|
+
deepSetValue(request, 'user.ext.eids', eids);
|
|
208
216
|
}
|
|
209
217
|
|
|
210
218
|
if (schain) {
|
|
211
|
-
|
|
219
|
+
deepSetValue(request, 'source.ext.schain', schain);
|
|
212
220
|
}
|
|
213
221
|
|
|
214
222
|
return {
|
|
@@ -258,7 +266,7 @@ export const spec = {
|
|
|
258
266
|
result[ bid.mediaType === VIDEO ? 'vastXml' : 'ad' ] = bidResponse.adm;
|
|
259
267
|
}
|
|
260
268
|
|
|
261
|
-
if (!bid.renderer && bid.mediaType === VIDEO &&
|
|
269
|
+
if (!bid.renderer && bid.mediaType === VIDEO && deepAccess(bid, 'mediaTypes.video.context') === 'outstream') {
|
|
262
270
|
result.renderer = Renderer.install({id: bid.bidId, url: OUTSTREAM_RENDERER_URL, adUnitCode: bid.adUnitCode});
|
|
263
271
|
result.renderer.setRender(renderer);
|
|
264
272
|
}
|
|
@@ -292,7 +300,7 @@ function parseNative(bid) {
|
|
|
292
300
|
|
|
293
301
|
function setOnAny(collection, key) {
|
|
294
302
|
for (let i = 0, result; i < collection.length; i++) {
|
|
295
|
-
result =
|
|
303
|
+
result = deepAccess(collection[i], key);
|
|
296
304
|
if (result) {
|
|
297
305
|
return result;
|
|
298
306
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {tryAppendQueryString, getBidIdParameter} from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
4
4
|
import {config} from '../src/config.js';
|
|
@@ -25,7 +25,7 @@ export const spec = {
|
|
|
25
25
|
* @return ServerRequest Info describing the request to the server.
|
|
26
26
|
*/
|
|
27
27
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
28
|
-
const ADGENE_PREBID_VERSION = '1.
|
|
28
|
+
const ADGENE_PREBID_VERSION = '1.2.0';
|
|
29
29
|
let serverRequests = [];
|
|
30
30
|
for (let i = 0, len = validBidRequests.length; i < len; i++) {
|
|
31
31
|
const validReq = validBidRequests[i];
|
|
@@ -33,23 +33,23 @@ export const spec = {
|
|
|
33
33
|
const URL = 'https://d.socdm.com/adsv/v1';
|
|
34
34
|
const url = validReq.params.debug ? DEBUG_URL : URL;
|
|
35
35
|
let data = ``;
|
|
36
|
-
data =
|
|
37
|
-
const id =
|
|
38
|
-
data =
|
|
39
|
-
data =
|
|
40
|
-
data =
|
|
41
|
-
data =
|
|
42
|
-
data =
|
|
43
|
-
data =
|
|
44
|
-
data =
|
|
45
|
-
data =
|
|
46
|
-
data =
|
|
47
|
-
data =
|
|
36
|
+
data = tryAppendQueryString(data, 'posall', 'SSPLOC');
|
|
37
|
+
const id = getBidIdParameter('id', validReq.params);
|
|
38
|
+
data = tryAppendQueryString(data, 'id', id);
|
|
39
|
+
data = tryAppendQueryString(data, 'sdktype', '0');
|
|
40
|
+
data = tryAppendQueryString(data, 'hb', 'true');
|
|
41
|
+
data = tryAppendQueryString(data, 't', 'json3');
|
|
42
|
+
data = tryAppendQueryString(data, 'transactionid', validReq.transactionId);
|
|
43
|
+
data = tryAppendQueryString(data, 'sizes', getSizes(validReq));
|
|
44
|
+
data = tryAppendQueryString(data, 'currency', getCurrencyType());
|
|
45
|
+
data = tryAppendQueryString(data, 'pbver', '$prebid.version$');
|
|
46
|
+
data = tryAppendQueryString(data, 'sdkname', 'prebidjs');
|
|
47
|
+
data = tryAppendQueryString(data, 'adapterver', ADGENE_PREBID_VERSION);
|
|
48
48
|
// native以外にvideo等の対応が入った場合は要修正
|
|
49
49
|
if (!validReq.mediaTypes || !validReq.mediaTypes.native) {
|
|
50
|
-
data =
|
|
50
|
+
data = tryAppendQueryString(data, 'imark', '1');
|
|
51
51
|
}
|
|
52
|
-
data =
|
|
52
|
+
data = tryAppendQueryString(data, 'tp', bidderRequest.refererInfo.referer);
|
|
53
53
|
// remove the trailing "&"
|
|
54
54
|
if (data.lastIndexOf('&') === data.length - 1) {
|
|
55
55
|
data = data.substring(0, data.length - 1);
|
|
@@ -118,13 +118,25 @@ export const spec = {
|
|
|
118
118
|
function createAd(body, bidRequest) {
|
|
119
119
|
let ad = body.ad;
|
|
120
120
|
if (body.vastxml && body.vastxml.length > 0) {
|
|
121
|
-
|
|
121
|
+
if (isUpperBillboard(body)) {
|
|
122
|
+
const marginTop = bidRequest.params.marginTop ? bidRequest.params.marginTop : '0';
|
|
123
|
+
ad = `<body>${createADGBrowserMTag()}${insertVASTMethodForADGBrowserM(body.vastxml, marginTop)}</body>`;
|
|
124
|
+
} else {
|
|
125
|
+
ad = `<body><div id="apvad-${bidRequest.bidId}"></div>${createAPVTag()}${insertVASTMethodForAPV(bidRequest.bidId, body.vastxml)}</body>`;
|
|
126
|
+
}
|
|
122
127
|
}
|
|
123
128
|
ad = appendChildToBody(ad, body.beacon);
|
|
124
129
|
if (removeWrapper(ad)) return removeWrapper(ad);
|
|
125
130
|
return ad;
|
|
126
131
|
}
|
|
127
132
|
|
|
133
|
+
function isUpperBillboard(body) {
|
|
134
|
+
if (body.location_params && body.location_params.option && body.location_params.option.ad_type) {
|
|
135
|
+
return body.location_params.option.ad_type === 'upper_billboard';
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
|
|
128
140
|
function isNative(body) {
|
|
129
141
|
if (!body) return false;
|
|
130
142
|
return body.native_ad && body.native_ad.assets.length > 0;
|
|
@@ -190,7 +202,12 @@ function createAPVTag() {
|
|
|
190
202
|
return apvScript.outerHTML;
|
|
191
203
|
}
|
|
192
204
|
|
|
193
|
-
function
|
|
205
|
+
function createADGBrowserMTag() {
|
|
206
|
+
const ADGBrowserMURL = 'https://i.socdm.com/sdk/js/adg-browser-m.js';
|
|
207
|
+
return `<script type="text/javascript" src="${ADGBrowserMURL}"></script>`;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function insertVASTMethodForAPV(targetId, vastXml) {
|
|
194
211
|
let apvVideoAdParam = {
|
|
195
212
|
s: targetId
|
|
196
213
|
};
|
|
@@ -200,6 +217,13 @@ function insertVASTMethod(targetId, vastXml) {
|
|
|
200
217
|
return script.outerHTML;
|
|
201
218
|
}
|
|
202
219
|
|
|
220
|
+
function insertVASTMethodForADGBrowserM(vastXml, marginTop) {
|
|
221
|
+
const script = document.createElement(`script`);
|
|
222
|
+
script.type = 'text/javascript';
|
|
223
|
+
script.innerHTML = `window.ADGBrowserM.init({vastXml: '${vastXml.replace(/\r?\n/g, '')}', marginTop: '${marginTop}'});`;
|
|
224
|
+
return script.outerHTML;
|
|
225
|
+
}
|
|
226
|
+
|
|
203
227
|
/**
|
|
204
228
|
*
|
|
205
229
|
* @param ad
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import includes from 'core-js-pure/features/array/includes.js';
|
|
3
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
4
|
+
|
|
5
|
+
const VERSION = '1.0';
|
|
6
|
+
|
|
7
|
+
export const spec = {
|
|
8
|
+
code: 'adhash',
|
|
9
|
+
url: 'https://bidder.adhash.org/rtb?version=' + VERSION + '&prebid=true',
|
|
10
|
+
supportedMediaTypes: [ BANNER ],
|
|
11
|
+
|
|
12
|
+
isBidRequestValid: (bid) => {
|
|
13
|
+
try {
|
|
14
|
+
const { publisherId, platformURL } = bid.params;
|
|
15
|
+
return (
|
|
16
|
+
includes(Object.keys(bid.mediaTypes), BANNER) &&
|
|
17
|
+
typeof publisherId === 'string' &&
|
|
18
|
+
publisherId.length === 42 &&
|
|
19
|
+
typeof platformURL === 'string' &&
|
|
20
|
+
platformURL.length >= 13
|
|
21
|
+
);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
buildRequests: (validBidRequests, bidderRequest) => {
|
|
28
|
+
const { gdprConsent } = bidderRequest;
|
|
29
|
+
const { url } = spec;
|
|
30
|
+
const bidRequests = [];
|
|
31
|
+
let referrer = '';
|
|
32
|
+
if (bidderRequest && bidderRequest.refererInfo) {
|
|
33
|
+
referrer = bidderRequest.refererInfo.referer;
|
|
34
|
+
}
|
|
35
|
+
for (var i = 0; i < validBidRequests.length; i++) {
|
|
36
|
+
var index = Math.floor(Math.random() * validBidRequests[i].sizes.length);
|
|
37
|
+
var size = validBidRequests[i].sizes[index].join('x');
|
|
38
|
+
bidRequests.push({
|
|
39
|
+
method: 'POST',
|
|
40
|
+
url: url,
|
|
41
|
+
bidRequest: validBidRequests[i],
|
|
42
|
+
data: {
|
|
43
|
+
timezone: new Date().getTimezoneOffset() / 60,
|
|
44
|
+
location: referrer,
|
|
45
|
+
publisherId: validBidRequests[i].params.publisherId,
|
|
46
|
+
size: {
|
|
47
|
+
screenWidth: window.screen.width,
|
|
48
|
+
screenHeight: window.screen.height
|
|
49
|
+
},
|
|
50
|
+
navigator: {
|
|
51
|
+
platform: window.navigator.platform,
|
|
52
|
+
language: window.navigator.language,
|
|
53
|
+
userAgent: window.navigator.userAgent
|
|
54
|
+
},
|
|
55
|
+
creatives: [{
|
|
56
|
+
size: size,
|
|
57
|
+
position: validBidRequests[i].adUnitCode
|
|
58
|
+
}],
|
|
59
|
+
blockedCreatives: [],
|
|
60
|
+
currentTimestamp: new Date().getTime(),
|
|
61
|
+
recentAds: [],
|
|
62
|
+
GDPR: gdprConsent
|
|
63
|
+
},
|
|
64
|
+
options: {
|
|
65
|
+
withCredentials: false,
|
|
66
|
+
crossOrigin: true
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return bidRequests;
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
interpretResponse: (serverResponse, request) => {
|
|
74
|
+
const responseBody = serverResponse ? serverResponse.body : {};
|
|
75
|
+
|
|
76
|
+
if (!responseBody.creatives || responseBody.creatives.length === 0) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const publisherURL = JSON.stringify(request.bidRequest.params.platformURL);
|
|
81
|
+
const oneTimeId = request.bidRequest.adUnitCode + Math.random().toFixed(16).replace('0.', '.');
|
|
82
|
+
const bidderResponse = JSON.stringify({ responseText: JSON.stringify(responseBody) });
|
|
83
|
+
const requestData = JSON.stringify(request.data);
|
|
84
|
+
|
|
85
|
+
return [{
|
|
86
|
+
requestId: request.bidRequest.bidId,
|
|
87
|
+
cpm: responseBody.creatives[0].costEUR,
|
|
88
|
+
ad:
|
|
89
|
+
`<div id="${oneTimeId}"></div>
|
|
90
|
+
<script src="https://bidder.adhash.org/static/scripts/creative.min.js"></script>
|
|
91
|
+
<script>callAdvertiser(${bidderResponse},['${oneTimeId}'],${requestData},${publisherURL})</script>`,
|
|
92
|
+
width: request.bidRequest.sizes[0][0],
|
|
93
|
+
height: request.bidRequest.sizes[0][1],
|
|
94
|
+
creativeId: request.bidRequest.adUnitCode,
|
|
95
|
+
netRevenue: true,
|
|
96
|
+
currency: 'EUR',
|
|
97
|
+
ttl: 60,
|
|
98
|
+
meta: {
|
|
99
|
+
advertiserDomains: responseBody.advertiserDomains ? [responseBody.advertiserDomains] : []
|
|
100
|
+
}
|
|
101
|
+
}];
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
registerBidder(spec);
|
|
@@ -34,7 +34,7 @@ Please note that a number of AdHash functionalities are not supported in the Pre
|
|
|
34
34
|
bidder: 'adhash',
|
|
35
35
|
params: {
|
|
36
36
|
publisherId: '0x1234567890123456789012345678901234567890',
|
|
37
|
-
platformURL: 'https://adhash.org/p/
|
|
37
|
+
platformURL: 'https://adhash.org/p/example/'
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
]
|