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,5 +1,5 @@
|
|
|
1
1
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
-
import
|
|
2
|
+
import { buildUrl } from '../src/utils.js'
|
|
3
3
|
import {ajax} from '../src/ajax.js';
|
|
4
4
|
|
|
5
5
|
const BIDDER_CODE = 'adpartner';
|
|
@@ -64,7 +64,7 @@ export const spec = {
|
|
|
64
64
|
beaconParams.tag = beaconParams.tag.join(',');
|
|
65
65
|
beaconParams.sizes = beaconParams.sizes.join(',');
|
|
66
66
|
|
|
67
|
-
let adPartnerRequestUrl =
|
|
67
|
+
let adPartnerRequestUrl = buildUrl({
|
|
68
68
|
protocol: ENDPOINT_PROTOCOL,
|
|
69
69
|
hostname: ENDPOINT_DOMAIN,
|
|
70
70
|
pathname: ENDPOINT_PATH,
|
|
@@ -127,7 +127,7 @@ export const spec = {
|
|
|
127
127
|
|
|
128
128
|
onBidWon: function(data) {
|
|
129
129
|
data.winNotification.forEach(function(unitWon) {
|
|
130
|
-
let adPartnerBidWonUrl =
|
|
130
|
+
let adPartnerBidWonUrl = buildUrl({
|
|
131
131
|
protocol: ENDPOINT_PROTOCOL,
|
|
132
132
|
hostname: ENDPOINT_DOMAIN,
|
|
133
133
|
pathname: unitWon.path
|
package/modules/adpod.js
CHANGED
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
* module that designed to support adpod video type ads. This import process allows this module to effectively act as a sub-module.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import
|
|
15
|
+
import {
|
|
16
|
+
generateUUID, deepAccess, logWarn, logInfo, isArrayOfNums, isArray, isNumber, logError, groupBy, compareOn,
|
|
17
|
+
isPlainObject
|
|
18
|
+
} from '../src/utils.js';
|
|
16
19
|
import { addBidToAuction, doCallbacksIfTimedout, AUCTION_IN_PROGRESS, callPrebidCache, getPriceByGranularity, getPriceGranularity } from '../src/auction.js';
|
|
17
20
|
import { checkAdUnitSetup } from '../src/prebid.js';
|
|
18
21
|
import { checkVideoBidSetup } from '../src/video.js';
|
|
@@ -45,7 +48,7 @@ function createBidCacheRegistry() {
|
|
|
45
48
|
registry[auctionId] = {};
|
|
46
49
|
registry[auctionId].bidStorage = new Set();
|
|
47
50
|
registry[auctionId].queueDispatcher = createDispatcher(queueTimeDelay);
|
|
48
|
-
registry[auctionId].initialCacheKey =
|
|
51
|
+
registry[auctionId].initialCacheKey = generateUUID();
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
return {
|
|
@@ -68,7 +71,7 @@ function createBidCacheRegistry() {
|
|
|
68
71
|
setupInitialCacheKey: function (bid) {
|
|
69
72
|
if (!registry[bid.auctionId]) {
|
|
70
73
|
registry[bid.auctionId] = {};
|
|
71
|
-
registry[bid.auctionId].initialCacheKey =
|
|
74
|
+
registry[bid.auctionId].initialCacheKey = generateUUID();
|
|
72
75
|
}
|
|
73
76
|
},
|
|
74
77
|
getInitialCacheKey: function (bid) {
|
|
@@ -115,9 +118,9 @@ function createDispatcher(timeoutDuration) {
|
|
|
115
118
|
function getPricePartForAdpodKey(bid) {
|
|
116
119
|
let pricePart
|
|
117
120
|
let prioritizeDeals = config.getConfig('adpod.prioritizeDeals');
|
|
118
|
-
if (prioritizeDeals &&
|
|
121
|
+
if (prioritizeDeals && deepAccess(bid, 'video.dealTier')) {
|
|
119
122
|
const adpodDealPrefix = config.getConfig(`adpod.dealTier.${bid.bidderCode}.prefix`);
|
|
120
|
-
pricePart = (adpodDealPrefix) ? adpodDealPrefix +
|
|
123
|
+
pricePart = (adpodDealPrefix) ? adpodDealPrefix + deepAccess(bid, 'video.dealTier') : deepAccess(bid, 'video.dealTier');
|
|
121
124
|
} else {
|
|
122
125
|
const granularity = getPriceGranularity(bid.mediaType);
|
|
123
126
|
pricePart = getPriceByGranularity(granularity)(bid);
|
|
@@ -132,12 +135,12 @@ function getPricePartForAdpodKey(bid) {
|
|
|
132
135
|
*/
|
|
133
136
|
function attachPriceIndustryDurationKeyToBid(bid, brandCategoryExclusion) {
|
|
134
137
|
let initialCacheKey = bidCacheRegistry.getInitialCacheKey(bid);
|
|
135
|
-
let duration =
|
|
138
|
+
let duration = deepAccess(bid, 'video.durationBucket');
|
|
136
139
|
const pricePart = getPricePartForAdpodKey(bid);
|
|
137
140
|
let pcd;
|
|
138
141
|
|
|
139
142
|
if (brandCategoryExclusion) {
|
|
140
|
-
let category =
|
|
143
|
+
let category = deepAccess(bid, 'meta.adServerCatId');
|
|
141
144
|
pcd = `${pricePart}_${category}_${duration}s`;
|
|
142
145
|
} else {
|
|
143
146
|
pcd = `${pricePart}_${duration}s`;
|
|
@@ -168,7 +171,7 @@ function updateBidQueue(auctionInstance, bidResponse, afterBidAdded) {
|
|
|
168
171
|
let killQueue = !!(auctionInstance.getAuctionStatus() !== AUCTION_IN_PROGRESS);
|
|
169
172
|
callDispatcher(auctionInstance, bidListArr, afterBidAdded, killQueue);
|
|
170
173
|
} else {
|
|
171
|
-
|
|
174
|
+
logWarn('Attempted to cache a bid from an unknown auction. Bid:', bidResponse);
|
|
172
175
|
}
|
|
173
176
|
}
|
|
174
177
|
|
|
@@ -196,7 +199,7 @@ function firePrebidCacheCall(auctionInstance, bidList, afterBidAdded) {
|
|
|
196
199
|
|
|
197
200
|
store(bidList, function (error, cacheIds) {
|
|
198
201
|
if (error) {
|
|
199
|
-
|
|
202
|
+
logWarn(`Failed to save to the video cache: ${error}. Video bid(s) must be discarded.`);
|
|
200
203
|
for (let i = 0; i < bidList.length; i++) {
|
|
201
204
|
doCallbacksIfTimedout(auctionInstance, bidList[i]);
|
|
202
205
|
}
|
|
@@ -206,7 +209,7 @@ function firePrebidCacheCall(auctionInstance, bidList, afterBidAdded) {
|
|
|
206
209
|
if (cacheIds[i].uuid !== '') {
|
|
207
210
|
addBidToAuction(auctionInstance, bidList[i]);
|
|
208
211
|
} else {
|
|
209
|
-
|
|
212
|
+
logInfo(`Detected a bid was not cached because the custom key was already registered. Attempted to use key: ${bidList[i].customCacheKey}. Bid was: `, bidList[i]);
|
|
210
213
|
}
|
|
211
214
|
afterBidAdded();
|
|
212
215
|
}
|
|
@@ -223,12 +226,12 @@ function firePrebidCacheCall(auctionInstance, bidList, afterBidAdded) {
|
|
|
223
226
|
* @param {Object} bidderRequest copy of bid's associated bidderRequest object
|
|
224
227
|
*/
|
|
225
228
|
export function callPrebidCacheHook(fn, auctionInstance, bidResponse, afterBidAdded, bidderRequest) {
|
|
226
|
-
let videoConfig =
|
|
229
|
+
let videoConfig = deepAccess(bidderRequest, 'mediaTypes.video');
|
|
227
230
|
if (videoConfig && videoConfig.context === ADPOD) {
|
|
228
231
|
let brandCategoryExclusion = config.getConfig('adpod.brandCategoryExclusion');
|
|
229
|
-
let adServerCatId =
|
|
232
|
+
let adServerCatId = deepAccess(bidResponse, 'meta.adServerCatId');
|
|
230
233
|
if (!adServerCatId && brandCategoryExclusion) {
|
|
231
|
-
|
|
234
|
+
logWarn('Detected a bid without meta.adServerCatId while setConfig({adpod.brandCategoryExclusion}) was enabled. This bid has been rejected:', bidResponse)
|
|
232
235
|
afterBidAdded();
|
|
233
236
|
} else {
|
|
234
237
|
if (config.getConfig('adpod.deferCaching') === false) {
|
|
@@ -260,12 +263,12 @@ export function callPrebidCacheHook(fn, auctionInstance, bidResponse, afterBidAd
|
|
|
260
263
|
*/
|
|
261
264
|
export function checkAdUnitSetupHook(fn, adUnits) {
|
|
262
265
|
let goodAdUnits = adUnits.filter(adUnit => {
|
|
263
|
-
let mediaTypes =
|
|
264
|
-
let videoConfig =
|
|
266
|
+
let mediaTypes = deepAccess(adUnit, 'mediaTypes');
|
|
267
|
+
let videoConfig = deepAccess(mediaTypes, 'video');
|
|
265
268
|
if (videoConfig && videoConfig.context === ADPOD) {
|
|
266
269
|
// run check to see if other mediaTypes are defined (ie multi-format); reject adUnit if so
|
|
267
270
|
if (Object.keys(mediaTypes).length > 1) {
|
|
268
|
-
|
|
271
|
+
logWarn(`Detected more than one mediaType in adUnitCode: ${adUnit.code} while attempting to define an 'adpod' video adUnit. 'adpod' adUnits cannot be mixed with other mediaTypes. This adUnit will be removed from the auction.`);
|
|
269
272
|
return false;
|
|
270
273
|
}
|
|
271
274
|
|
|
@@ -274,20 +277,20 @@ export function checkAdUnitSetupHook(fn, adUnits) {
|
|
|
274
277
|
let playerSize = !!(
|
|
275
278
|
(
|
|
276
279
|
videoConfig.playerSize && (
|
|
277
|
-
|
|
278
|
-
|
|
280
|
+
isArrayOfNums(videoConfig.playerSize, 2) || (
|
|
281
|
+
isArray(videoConfig.playerSize) && videoConfig.playerSize.every(sz => isArrayOfNums(sz, 2))
|
|
279
282
|
)
|
|
280
283
|
)
|
|
281
284
|
) || (videoConfig.sizeConfig)
|
|
282
285
|
);
|
|
283
|
-
let adPodDurationSec = !!(videoConfig.adPodDurationSec &&
|
|
284
|
-
let durationRangeSec = !!(videoConfig.durationRangeSec &&
|
|
286
|
+
let adPodDurationSec = !!(videoConfig.adPodDurationSec && isNumber(videoConfig.adPodDurationSec) && videoConfig.adPodDurationSec > 0);
|
|
287
|
+
let durationRangeSec = !!(videoConfig.durationRangeSec && isArrayOfNums(videoConfig.durationRangeSec) && videoConfig.durationRangeSec.every(range => range > 0));
|
|
285
288
|
|
|
286
289
|
if (!playerSize || !adPodDurationSec || !durationRangeSec) {
|
|
287
290
|
errMsg += (!playerSize) ? '\nmediaTypes.video.playerSize' : '';
|
|
288
291
|
errMsg += (!adPodDurationSec) ? '\nmediaTypes.video.adPodDurationSec' : '';
|
|
289
292
|
errMsg += (!durationRangeSec) ? '\nmediaTypes.video.durationRangeSec' : '';
|
|
290
|
-
|
|
293
|
+
logWarn(errMsg);
|
|
291
294
|
return false;
|
|
292
295
|
}
|
|
293
296
|
}
|
|
@@ -313,8 +316,8 @@ export function checkAdUnitSetupHook(fn, adUnits) {
|
|
|
313
316
|
*/
|
|
314
317
|
function checkBidDuration(bidderRequest, bidResponse) {
|
|
315
318
|
const buffer = 2;
|
|
316
|
-
let bidDuration =
|
|
317
|
-
let videoConfig =
|
|
319
|
+
let bidDuration = deepAccess(bidResponse, 'video.durationSeconds');
|
|
320
|
+
let videoConfig = deepAccess(bidderRequest, 'mediaTypes.video');
|
|
318
321
|
let adUnitRanges = videoConfig.durationRangeSec;
|
|
319
322
|
adUnitRanges.sort((a, b) => a - b); // ensure the ranges are sorted in numeric order
|
|
320
323
|
|
|
@@ -324,14 +327,14 @@ function checkBidDuration(bidderRequest, bidResponse) {
|
|
|
324
327
|
let nextHighestRange = find(adUnitRanges, range => (range + buffer) >= bidDuration);
|
|
325
328
|
bidResponse.video.durationBucket = nextHighestRange;
|
|
326
329
|
} else {
|
|
327
|
-
|
|
330
|
+
logWarn(`Detected a bid with a duration value outside the accepted ranges specified in adUnit.mediaTypes.video.durationRangeSec. Rejecting bid: `, bidResponse);
|
|
328
331
|
return false;
|
|
329
332
|
}
|
|
330
333
|
} else {
|
|
331
334
|
if (find(adUnitRanges, range => range === bidDuration)) {
|
|
332
335
|
bidResponse.video.durationBucket = bidDuration;
|
|
333
336
|
} else {
|
|
334
|
-
|
|
337
|
+
logWarn(`Detected a bid with a duration value not part of the list of accepted ranges specified in adUnit.mediaTypes.video.durationRangeSec. Exact match durations must be used for this adUnit. Rejecting bid: `, bidResponse);
|
|
335
338
|
return false;
|
|
336
339
|
}
|
|
337
340
|
}
|
|
@@ -352,16 +355,16 @@ export function checkVideoBidSetupHook(fn, bid, bidRequest, videoMediaType, cont
|
|
|
352
355
|
if (context === ADPOD) {
|
|
353
356
|
let result = true;
|
|
354
357
|
let brandCategoryExclusion = config.getConfig('adpod.brandCategoryExclusion');
|
|
355
|
-
if (brandCategoryExclusion && !
|
|
358
|
+
if (brandCategoryExclusion && !deepAccess(bid, 'meta.primaryCatId')) {
|
|
356
359
|
result = false;
|
|
357
360
|
}
|
|
358
361
|
|
|
359
|
-
if (
|
|
360
|
-
if (!
|
|
362
|
+
if (deepAccess(bid, 'video')) {
|
|
363
|
+
if (!deepAccess(bid, 'video.context') || bid.video.context !== ADPOD) {
|
|
361
364
|
result = false;
|
|
362
365
|
}
|
|
363
366
|
|
|
364
|
-
if (!
|
|
367
|
+
if (!deepAccess(bid, 'video.durationSeconds') || bid.video.durationSeconds <= 0) {
|
|
365
368
|
result = false;
|
|
366
369
|
} else {
|
|
367
370
|
let isBidGood = checkBidDuration(bidRequest, bid);
|
|
@@ -370,7 +373,7 @@ export function checkVideoBidSetupHook(fn, bid, bidRequest, videoMediaType, cont
|
|
|
370
373
|
}
|
|
371
374
|
|
|
372
375
|
if (!config.getConfig('cache.url') && bid.vastXml && !bid.vastUrl) {
|
|
373
|
-
|
|
376
|
+
logError(`
|
|
374
377
|
This bid contains only vastXml and will not work when a prebid cache url is not specified.
|
|
375
378
|
Try enabling prebid cache with pbjs.setConfig({ cache: {url: "..."} });
|
|
376
379
|
`);
|
|
@@ -392,7 +395,7 @@ export function adpodSetConfig(config) {
|
|
|
392
395
|
if (typeof config.bidQueueTimeDelay === 'number' && config.bidQueueTimeDelay > 0) {
|
|
393
396
|
queueTimeDelay = config.bidQueueTimeDelay;
|
|
394
397
|
} else {
|
|
395
|
-
|
|
398
|
+
logWarn(`Detected invalid value for adpod.bidQueueTimeDelay in setConfig; must be a positive number. Using default: ${queueTimeDelay}`)
|
|
396
399
|
}
|
|
397
400
|
}
|
|
398
401
|
|
|
@@ -400,7 +403,7 @@ export function adpodSetConfig(config) {
|
|
|
400
403
|
if (typeof config.bidQueueSizeLimit === 'number' && config.bidQueueSizeLimit > 0) {
|
|
401
404
|
queueSizeLimit = config.bidQueueSizeLimit;
|
|
402
405
|
} else {
|
|
403
|
-
|
|
406
|
+
logWarn(`Detected invalid value for adpod.bidQueueSizeLimit in setConfig; must be a positive number. Using default: ${queueSizeLimit}`)
|
|
404
407
|
}
|
|
405
408
|
}
|
|
406
409
|
}
|
|
@@ -464,7 +467,7 @@ export function sortByPricePerSecond(a, b) {
|
|
|
464
467
|
*/
|
|
465
468
|
export function getTargeting({ codes, callback } = {}) {
|
|
466
469
|
if (!callback) {
|
|
467
|
-
|
|
470
|
+
logError('No callback function was defined in the getTargeting call. Aborting getTargeting().');
|
|
468
471
|
return;
|
|
469
472
|
}
|
|
470
473
|
codes = codes || [];
|
|
@@ -480,7 +483,7 @@ export function getTargeting({ codes, callback } = {}) {
|
|
|
480
483
|
let prioritizeDeals = config.getConfig('adpod.prioritizeDeals');
|
|
481
484
|
if (prioritizeDeals) {
|
|
482
485
|
let [otherBids, highPriorityDealBids] = bids.reduce((partitions, bid) => {
|
|
483
|
-
let bidDealTier =
|
|
486
|
+
let bidDealTier = deepAccess(bid, 'video.dealTier');
|
|
484
487
|
let minDealTier = config.getConfig(`adpod.dealTier.${bid.bidderCode}.minDealTier`);
|
|
485
488
|
if (minDealTier && bidDealTier) {
|
|
486
489
|
if (bidDealTier >= minDealTier) {
|
|
@@ -506,7 +509,7 @@ export function getTargeting({ codes, callback } = {}) {
|
|
|
506
509
|
if (deferCachingEnabled === false) {
|
|
507
510
|
adPodAdUnits.forEach((adUnit) => {
|
|
508
511
|
let adPodTargeting = [];
|
|
509
|
-
let adPodDurationSeconds =
|
|
512
|
+
let adPodDurationSeconds = deepAccess(adUnit, 'mediaTypes.video.adPodDurationSec');
|
|
510
513
|
|
|
511
514
|
bids
|
|
512
515
|
.filter((bid) => bid.adUnitCode === adUnit.code)
|
|
@@ -530,7 +533,7 @@ export function getTargeting({ codes, callback } = {}) {
|
|
|
530
533
|
} else {
|
|
531
534
|
let bidsToCache = [];
|
|
532
535
|
adPodAdUnits.forEach((adUnit) => {
|
|
533
|
-
let adPodDurationSeconds =
|
|
536
|
+
let adPodDurationSeconds = deepAccess(adUnit, 'mediaTypes.video.adPodDurationSec');
|
|
534
537
|
|
|
535
538
|
bids
|
|
536
539
|
.filter((bid) => bid.adUnitCode === adUnit.code)
|
|
@@ -546,7 +549,7 @@ export function getTargeting({ codes, callback } = {}) {
|
|
|
546
549
|
if (error) {
|
|
547
550
|
callback(error, null);
|
|
548
551
|
} else {
|
|
549
|
-
let groupedBids =
|
|
552
|
+
let groupedBids = groupBy(bidsSuccessfullyCached, 'adUnitCode');
|
|
550
553
|
Object.keys(groupedBids).forEach((adUnitCode) => {
|
|
551
554
|
let adPodTargeting = [];
|
|
552
555
|
|
|
@@ -578,7 +581,7 @@ export function getTargeting({ codes, callback } = {}) {
|
|
|
578
581
|
*/
|
|
579
582
|
function getAdPodAdUnits(codes) {
|
|
580
583
|
return auctionManager.getAdUnits()
|
|
581
|
-
.filter((adUnit) =>
|
|
584
|
+
.filter((adUnit) => deepAccess(adUnit, 'mediaTypes.video.context') === ADPOD)
|
|
582
585
|
.filter((adUnit) => (codes.length > 0) ? codes.indexOf(adUnit.code) != -1 : true);
|
|
583
586
|
}
|
|
584
587
|
|
|
@@ -590,10 +593,10 @@ function getAdPodAdUnits(codes) {
|
|
|
590
593
|
function getExclusiveBids(bidsReceived) {
|
|
591
594
|
let bids = bidsReceived
|
|
592
595
|
.map((bid) => Object.assign({}, bid, { [TARGETING_KEY_PB_CAT_DUR]: bid.adserverTargeting[TARGETING_KEY_PB_CAT_DUR] }));
|
|
593
|
-
bids =
|
|
596
|
+
bids = groupBy(bids, TARGETING_KEY_PB_CAT_DUR);
|
|
594
597
|
let filteredBids = [];
|
|
595
598
|
Object.keys(bids).forEach((targetingKey) => {
|
|
596
|
-
bids[targetingKey].sort(
|
|
599
|
+
bids[targetingKey].sort(compareOn('responseTimestamp'));
|
|
597
600
|
filteredBids.push(bids[targetingKey][0]);
|
|
598
601
|
});
|
|
599
602
|
return filteredBids;
|
|
@@ -619,8 +622,8 @@ const sharedMethods = {
|
|
|
619
622
|
Object.freeze(sharedMethods);
|
|
620
623
|
|
|
621
624
|
module('adpod', function shareAdpodUtilities(...args) {
|
|
622
|
-
if (!
|
|
623
|
-
|
|
625
|
+
if (!isPlainObject(args[0])) {
|
|
626
|
+
logError('Adpod module needs plain object to share methods with submodule');
|
|
624
627
|
return;
|
|
625
628
|
}
|
|
626
629
|
function addMethods(object, func) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
2
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
3
|
-
import
|
|
3
|
+
import { isFn, deepAccess, logMessage } from '../src/utils.js';
|
|
4
4
|
|
|
5
5
|
const BIDDER_CODE = 'adprime';
|
|
6
6
|
const AD_URL = 'https://delta.adprime.com/pbjs';
|
|
@@ -24,8 +24,8 @@ function isBidResponseValid(bid) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function getBidFloor(bid) {
|
|
27
|
-
if (!
|
|
28
|
-
return
|
|
27
|
+
if (!isFn(bid.getFloor)) {
|
|
28
|
+
return deepAccess(bid, 'params.bidfloor', 0);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
try {
|
|
@@ -56,7 +56,7 @@ export const spec = {
|
|
|
56
56
|
winTop = window.top;
|
|
57
57
|
} catch (e) {
|
|
58
58
|
location = winTop.location;
|
|
59
|
-
|
|
59
|
+
logMessage(e);
|
|
60
60
|
};
|
|
61
61
|
let placements = [];
|
|
62
62
|
let request = {
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import {BANNER} from '../src/mediaTypes.js';
|
|
3
|
+
import { logInfo, buildUrl, triggerPixel } from '../src/utils.js';
|
|
4
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
5
|
+
|
|
6
|
+
const ADQUERY_GVLID = 902;
|
|
7
|
+
const ADQUERY_BIDDER_CODE = 'adquery';
|
|
8
|
+
const ADQUERY_BIDDER_DOMAIN_PROTOCOL = 'https';
|
|
9
|
+
const ADQUERY_BIDDER_DOMAIN = 'bidder.adquery.io';
|
|
10
|
+
const ADQUERY_USER_SYNC_DOMAIN = ADQUERY_BIDDER_DOMAIN_PROTOCOL + '://' + ADQUERY_BIDDER_DOMAIN + '/prebid/userSync?1=1';
|
|
11
|
+
const ADQUERY_DEFAULT_CURRENCY = 'PLN';
|
|
12
|
+
const ADQUERY_NET_REVENUE = true;
|
|
13
|
+
const ADQUERY_TTL = 360;
|
|
14
|
+
const storage = getStorageManager(ADQUERY_GVLID);
|
|
15
|
+
|
|
16
|
+
/** @type {BidderSpec} */
|
|
17
|
+
export const spec = {
|
|
18
|
+
code: ADQUERY_BIDDER_CODE,
|
|
19
|
+
gvlid: ADQUERY_GVLID,
|
|
20
|
+
supportedMediaTypes: [BANNER],
|
|
21
|
+
|
|
22
|
+
/** f
|
|
23
|
+
* @param {object} bid
|
|
24
|
+
* @return {boolean}
|
|
25
|
+
*/
|
|
26
|
+
isBidRequestValid: (bid) => {
|
|
27
|
+
return !!(bid && bid.params && bid.params.placementId)
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {BidRequest[]} bidRequests
|
|
32
|
+
* @param {*} bidderRequest
|
|
33
|
+
* @return {ServerRequest}
|
|
34
|
+
*/
|
|
35
|
+
buildRequests: (bidRequests, bidderRequest) => {
|
|
36
|
+
const requests = [];
|
|
37
|
+
for (let i = 0, len = bidRequests.length; i < len; i++) {
|
|
38
|
+
const request = {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
url: ADQUERY_BIDDER_DOMAIN_PROTOCOL + '://' + ADQUERY_BIDDER_DOMAIN + '/prebid/bid',
|
|
41
|
+
data: buildRequest(bidRequests[i], bidderRequest),
|
|
42
|
+
options: {
|
|
43
|
+
withCredentials: false,
|
|
44
|
+
crossOrigin: true
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
requests.push(request);
|
|
48
|
+
}
|
|
49
|
+
return requests;
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @param {*} response
|
|
54
|
+
* @param {ServerRequest} request
|
|
55
|
+
* @return {Bid[]}
|
|
56
|
+
*/
|
|
57
|
+
interpretResponse: (response, request) => {
|
|
58
|
+
logInfo(request);
|
|
59
|
+
logInfo(response);
|
|
60
|
+
|
|
61
|
+
const res = response && response.body && response.body.data;
|
|
62
|
+
let bidResponses = [];
|
|
63
|
+
|
|
64
|
+
if (!res) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const bidResponse = {
|
|
69
|
+
requestId: res.requestId,
|
|
70
|
+
cpm: res.cpm,
|
|
71
|
+
width: res.mediaType.width,
|
|
72
|
+
height: res.mediaType.height,
|
|
73
|
+
creativeId: res.creationId,
|
|
74
|
+
dealId: res.dealid || '',
|
|
75
|
+
currency: res.currency || ADQUERY_DEFAULT_CURRENCY,
|
|
76
|
+
netRevenue: ADQUERY_NET_REVENUE,
|
|
77
|
+
ttl: ADQUERY_TTL,
|
|
78
|
+
referrer: '',
|
|
79
|
+
ad: '<script src="' + res.adqLib + '"></script>' + res.tag,
|
|
80
|
+
mediaType: res.mediaType.name || 'banner',
|
|
81
|
+
meta: {
|
|
82
|
+
advertiserDomains: res.adDomains && res.adDomains.length ? res.adDomains : [],
|
|
83
|
+
mediaType: res.mediaType.name || 'banner',
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
bidResponses.push(bidResponse);
|
|
87
|
+
logInfo('bidResponses', bidResponses);
|
|
88
|
+
|
|
89
|
+
return bidResponses;
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @param {TimedOutBid} timeoutData
|
|
94
|
+
*/
|
|
95
|
+
onTimeout: (timeoutData) => {
|
|
96
|
+
if (timeoutData == null) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
logInfo('onTimeout ', timeoutData);
|
|
100
|
+
let params = {
|
|
101
|
+
bidder: timeoutData.bidder,
|
|
102
|
+
bId: timeoutData.bidId,
|
|
103
|
+
adUnitCode: timeoutData.adUnitCode,
|
|
104
|
+
timeout: timeoutData.timeout,
|
|
105
|
+
auctionId: timeoutData.auctionId,
|
|
106
|
+
};
|
|
107
|
+
let adqueryRequestUrl = buildUrl({
|
|
108
|
+
protocol: ADQUERY_BIDDER_DOMAIN_PROTOCOL,
|
|
109
|
+
hostname: ADQUERY_BIDDER_DOMAIN,
|
|
110
|
+
pathname: '/prebid/eventTimeout',
|
|
111
|
+
search: params
|
|
112
|
+
});
|
|
113
|
+
triggerPixel(adqueryRequestUrl);
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @param {Bid} bid
|
|
118
|
+
*/
|
|
119
|
+
onBidWon: (bid) => {
|
|
120
|
+
logInfo('onBidWon', bid);
|
|
121
|
+
const bidString = JSON.stringify(bid);
|
|
122
|
+
const encodedBuf = window.btoa(bidString);
|
|
123
|
+
|
|
124
|
+
let params = {
|
|
125
|
+
q: encodedBuf,
|
|
126
|
+
};
|
|
127
|
+
let adqueryRequestUrl = buildUrl({
|
|
128
|
+
protocol: ADQUERY_BIDDER_DOMAIN_PROTOCOL,
|
|
129
|
+
hostname: ADQUERY_BIDDER_DOMAIN,
|
|
130
|
+
pathname: '/prebid/eventBidWon',
|
|
131
|
+
search: params
|
|
132
|
+
});
|
|
133
|
+
triggerPixel(adqueryRequestUrl);
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @param {Bid} bid
|
|
138
|
+
*/
|
|
139
|
+
onSetTargeting: (bid) => {
|
|
140
|
+
logInfo('onSetTargeting', bid);
|
|
141
|
+
|
|
142
|
+
let params = {
|
|
143
|
+
bidder: bid.bidder,
|
|
144
|
+
width: bid.width,
|
|
145
|
+
height: bid.height,
|
|
146
|
+
bid: bid.adId,
|
|
147
|
+
mediaType: bid.mediaType,
|
|
148
|
+
cpm: bid.cpm,
|
|
149
|
+
requestId: bid.requestId,
|
|
150
|
+
adUnitCode: bid.adUnitCode
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
let adqueryRequestUrl = buildUrl({
|
|
154
|
+
protocol: ADQUERY_BIDDER_DOMAIN_PROTOCOL,
|
|
155
|
+
hostname: ADQUERY_BIDDER_DOMAIN,
|
|
156
|
+
pathname: '/prebid/eventSetTargeting',
|
|
157
|
+
search: params
|
|
158
|
+
});
|
|
159
|
+
triggerPixel(adqueryRequestUrl);
|
|
160
|
+
},
|
|
161
|
+
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
|
|
162
|
+
let syncUrl = ADQUERY_USER_SYNC_DOMAIN;
|
|
163
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
164
|
+
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
165
|
+
syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
166
|
+
} else {
|
|
167
|
+
syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (uspConsent && uspConsent.consentString) {
|
|
171
|
+
syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
172
|
+
}
|
|
173
|
+
return [{
|
|
174
|
+
type: 'image',
|
|
175
|
+
url: syncUrl
|
|
176
|
+
}];
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
};
|
|
180
|
+
function buildRequest(validBidRequests, bidderRequest) {
|
|
181
|
+
let qid = Math.random().toString(36).substring(2) + Date.now().toString(36);
|
|
182
|
+
let bid = validBidRequests;
|
|
183
|
+
|
|
184
|
+
if (storage.getDataFromLocalStorage('qid')) {
|
|
185
|
+
qid = storage.getDataFromLocalStorage('qid');
|
|
186
|
+
} else {
|
|
187
|
+
storage.setDataInLocalStorage('qid', qid);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return {
|
|
191
|
+
placementCode: bid.params.placementId,
|
|
192
|
+
auctionId: bid.auctionId,
|
|
193
|
+
qid: qid,
|
|
194
|
+
type: bid.params.type,
|
|
195
|
+
adUnitCode: bid.adUnitCode,
|
|
196
|
+
bidId: bid.bidId,
|
|
197
|
+
bidder: bid.bidder,
|
|
198
|
+
bidderRequestId: bid.bidderRequestId,
|
|
199
|
+
bidRequestsCount: bid.bidRequestsCount,
|
|
200
|
+
bidderRequestsCount: bid.bidderRequestsCount,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: Adquery Bidder Adapter
|
|
4
|
+
Module Type: Bidder Adapter
|
|
5
|
+
Maintainer: prebid@adquery.com
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
Module that connects to Adquery's demand sources.
|
|
10
|
+
|
|
11
|
+
# Test Parameters
|
|
12
|
+
```
|
|
13
|
+
var adUnits = [
|
|
14
|
+
{
|
|
15
|
+
code: 'banner-adquery-div',
|
|
16
|
+
mediaTypes: {
|
|
17
|
+
banner: {
|
|
18
|
+
sizes: [[300, 250]],
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
bids: [
|
|
22
|
+
{
|
|
23
|
+
bidder: 'adquery',
|
|
24
|
+
params: {
|
|
25
|
+
placementId: '6d93f2a0e5f0fe2cc3a6e9e3ade964b43b07f897',
|
|
26
|
+
type: 'banner300x250'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
```
|