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
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import { NATIVE, BANNER } from '../src/mediaTypes.js';
|
|
3
|
+
import * as utils from '../src/utils.js';
|
|
4
|
+
import {ajax} from '../src/ajax.js';
|
|
5
|
+
|
|
6
|
+
const CURRENCY = 'EUR';
|
|
7
|
+
const BIDDER_CODE = 'talkads';
|
|
8
|
+
|
|
9
|
+
export const spec = {
|
|
10
|
+
code: BIDDER_CODE,
|
|
11
|
+
supportedMediaTypes: [ NATIVE, BANNER ],
|
|
12
|
+
params: null,
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Determines whether or not the given bid request is valid.
|
|
16
|
+
*
|
|
17
|
+
* @param poBid The bid params to validate.
|
|
18
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
19
|
+
*/
|
|
20
|
+
isBidRequestValid: (poBid) => {
|
|
21
|
+
utils.logInfo('isBidRequestValid : ', poBid);
|
|
22
|
+
if (poBid.params === undefined) {
|
|
23
|
+
utils.logError('VALIDATION FAILED : the parameters must be defined');
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (poBid.params.tag_id === undefined) {
|
|
27
|
+
utils.logError('VALIDATION FAILED : the parameter "tag_id" must be defined');
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (poBid.params.bidder_url === undefined) {
|
|
31
|
+
utils.logError('VALIDATION FAILED : the parameter "bidder_url" must be defined');
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
this.params = poBid.params;
|
|
35
|
+
return !!(poBid.nativeParams || poBid.sizes);
|
|
36
|
+
}, // isBidRequestValid
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Make a server request from the list of BidRequests.
|
|
40
|
+
*
|
|
41
|
+
* @param paValidBidRequests An array of bids
|
|
42
|
+
* @param poBidderRequest
|
|
43
|
+
* @return ServerRequest Info describing the request to the server.
|
|
44
|
+
*/
|
|
45
|
+
buildRequests: (paValidBidRequests, poBidderRequest) => {
|
|
46
|
+
utils.logInfo('buildRequests : ', paValidBidRequests, poBidderRequest);
|
|
47
|
+
const laBids = paValidBidRequests.map((poBid, piId) => {
|
|
48
|
+
const loOne = { id: piId, ad_unit: poBid.adUnitCode, bid_id: poBid.bidId, type: '', size: [] };
|
|
49
|
+
if (poBid.nativeParams) {
|
|
50
|
+
loOne.type = 'native';
|
|
51
|
+
} else {
|
|
52
|
+
loOne.type = 'banner';
|
|
53
|
+
loOne.size = poBid.sizes;
|
|
54
|
+
}
|
|
55
|
+
return loOne;
|
|
56
|
+
});
|
|
57
|
+
const loServerRequest = {
|
|
58
|
+
cur: CURRENCY,
|
|
59
|
+
timeout: poBidderRequest.timeout,
|
|
60
|
+
auction_id: paValidBidRequests[0].auctionId,
|
|
61
|
+
transaction_id: paValidBidRequests[0].transactionId,
|
|
62
|
+
bids: laBids,
|
|
63
|
+
gdpr: { applies: false, consent: false },
|
|
64
|
+
};
|
|
65
|
+
if (poBidderRequest && poBidderRequest.gdprConsent) {
|
|
66
|
+
const loGdprConsent = poBidderRequest.gdprConsent;
|
|
67
|
+
if ((typeof loGdprConsent.gdprApplies === 'boolean') && loGdprConsent.gdprApplies) {
|
|
68
|
+
loServerRequest.gdpr.applies = true;
|
|
69
|
+
}
|
|
70
|
+
if ((typeof loGdprConsent.consentString === 'string') && loGdprConsent.consentString) {
|
|
71
|
+
loServerRequest.gdpr.consent = poBidderRequest.gdprConsent.consentString;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const lsUrl = this.params.bidder_url + '/' + this.params.tag_id;
|
|
75
|
+
return {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
url: lsUrl,
|
|
78
|
+
data: JSON.stringify(loServerRequest),
|
|
79
|
+
};
|
|
80
|
+
}, // buildRequests
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Unpack the response from the server into a list of bids.
|
|
84
|
+
*
|
|
85
|
+
* @param poServerResponse A successful response from the server.
|
|
86
|
+
* @param poPidRequest Request original server request
|
|
87
|
+
* @return An array of bids which were nested inside the server.
|
|
88
|
+
*/
|
|
89
|
+
interpretResponse: (poServerResponse, poPidRequest) => {
|
|
90
|
+
utils.logInfo('interpretResponse : ', poServerResponse);
|
|
91
|
+
if (!poServerResponse.body) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
let laResponse = [];
|
|
95
|
+
if (poServerResponse.body.status !== 'ok') {
|
|
96
|
+
utils.logInfo('Error : ', poServerResponse.body.error);
|
|
97
|
+
return laResponse;
|
|
98
|
+
}
|
|
99
|
+
poServerResponse.body.bids.forEach((poResponse) => {
|
|
100
|
+
laResponse[laResponse.length] = {
|
|
101
|
+
requestId: poResponse.requestId,
|
|
102
|
+
cpm: poResponse.cpm,
|
|
103
|
+
currency: poResponse.currency,
|
|
104
|
+
width: poResponse.width,
|
|
105
|
+
height: poResponse.height,
|
|
106
|
+
ad: poResponse.ad,
|
|
107
|
+
ttl: poResponse.ttl,
|
|
108
|
+
creativeId: poResponse.creativeId,
|
|
109
|
+
netRevenue: poResponse.netRevenue,
|
|
110
|
+
pbid: poServerResponse.body.pbid,
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
return laResponse;
|
|
114
|
+
}, // interpretResponse
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Register bidder specific code, which will execute if a bid from this bidder won the auction.
|
|
118
|
+
*
|
|
119
|
+
* @param poBid The bid that won the auction
|
|
120
|
+
*/
|
|
121
|
+
onBidWon: (poBid) => {
|
|
122
|
+
utils.logInfo('onBidWon : ', poBid);
|
|
123
|
+
if (poBid.pbid) {
|
|
124
|
+
ajax(this.params.bidder_url + 'won/' + poBid.pbid);
|
|
125
|
+
}
|
|
126
|
+
}, // onBidWon
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: TalkAds Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: technical_team@natexo.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to TalkAds bidder to fetch bids.
|
|
12
|
+
Both native and banner formats are supported but not at the same time.
|
|
13
|
+
The only currently supported currency is EUR.
|
|
14
|
+
|
|
15
|
+
This adapter requires setup and approval from the Natexo programmatic team.
|
|
16
|
+
|
|
17
|
+
# Configuration
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Test parameters
|
|
23
|
+
|
|
24
|
+
## Test banner Parameters
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
var adUnits = [
|
|
28
|
+
code: 'prebid_banner_test',
|
|
29
|
+
mediaTypes: {
|
|
30
|
+
banner: {
|
|
31
|
+
sizes: [[300, 250], [300, 600]],
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
bids: [{
|
|
35
|
+
bidder: 'talkads',
|
|
36
|
+
params: {
|
|
37
|
+
tag_id: 0,
|
|
38
|
+
bidder_url: 'https://d.natexo-programmatic.com/tad/tag/testbid',
|
|
39
|
+
},
|
|
40
|
+
}]
|
|
41
|
+
];
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Test native parameters
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
var adUnits = [
|
|
48
|
+
code: 'prebid_native_test',
|
|
49
|
+
mediaTypes: {
|
|
50
|
+
native: {}
|
|
51
|
+
},
|
|
52
|
+
bids: [{
|
|
53
|
+
bidder: 'talkads',
|
|
54
|
+
params: {
|
|
55
|
+
tag_id: 0,
|
|
56
|
+
bidder_url: 'https://d.natexo-programmatic.com/tad/tag/testbid',
|
|
57
|
+
},
|
|
58
|
+
}]
|
|
59
|
+
];
|
|
60
|
+
```
|
package/modules/tapadIdSystem.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { logMessage } from '../src/utils.js';
|
|
1
2
|
import { uspDataHandler } from '../src/adapterManager.js';
|
|
2
3
|
import { submodule } from '../src/hook.js';
|
|
3
4
|
import * as ajax from '../src/ajax.js'
|
|
4
|
-
import * as utils from '../src/utils.js';
|
|
5
5
|
|
|
6
6
|
export const graphUrl = 'https://rtga.tapad.com/v1/graph';
|
|
7
7
|
|
|
@@ -30,7 +30,7 @@ export const tapadIdSubmodule = {
|
|
|
30
30
|
const configParams = config.params || {};
|
|
31
31
|
|
|
32
32
|
if (configParams.companyId == null || isNaN(Number(configParams.companyId))) {
|
|
33
|
-
|
|
33
|
+
logMessage('Please provide a valid Company Id. Contact prebid@tapad.com for assistance.');
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
return {
|
|
@@ -49,7 +49,7 @@ export const tapadIdSubmodule = {
|
|
|
49
49
|
complete(undefined);
|
|
50
50
|
}
|
|
51
51
|
if (e.status === 403) {
|
|
52
|
-
|
|
52
|
+
logMessage('Invalid Company Id. Contact prebid@tapad.com for assistance.');
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { logWarn, deepAccess, isFn, isPlainObject, getDNT, isBoolean, isNumber, isStr, isArray } from '../src/utils.js';
|
|
4
4
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
5
5
|
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
6
6
|
import { config } from '../src/config.js';
|
|
@@ -9,7 +9,7 @@ import { Renderer } from '../src/Renderer.js';
|
|
|
9
9
|
const BIDDER_CODE = 'tappx';
|
|
10
10
|
const TTL = 360;
|
|
11
11
|
const CUR = 'USD';
|
|
12
|
-
const TAPPX_BIDDER_VERSION = '0.1.
|
|
12
|
+
const TAPPX_BIDDER_VERSION = '0.1.1004';
|
|
13
13
|
const TYPE_CNN = 'prebidjs';
|
|
14
14
|
const LOG_PREFIX = '[TAPPX]: ';
|
|
15
15
|
const VIDEO_SUPPORT = ['instream', 'outstream'];
|
|
@@ -79,7 +79,7 @@ export const spec = {
|
|
|
79
79
|
interpretResponse: function(serverResponse, originalRequest) {
|
|
80
80
|
const responseBody = serverResponse.body;
|
|
81
81
|
if (!serverResponse.body) {
|
|
82
|
-
|
|
82
|
+
logWarn(LOG_PREFIX, 'Empty response body HTTP 204, no bids');
|
|
83
83
|
return [];
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -131,17 +131,17 @@ export const spec = {
|
|
|
131
131
|
|
|
132
132
|
function validBasic(bid) {
|
|
133
133
|
if (bid.params == null) {
|
|
134
|
-
|
|
134
|
+
logWarn(LOG_PREFIX, 'Please review the mandatory Tappx parameters.');
|
|
135
135
|
return false;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
if (bid.params.tappxkey == null) {
|
|
139
|
-
|
|
139
|
+
logWarn(LOG_PREFIX, 'Please review the mandatory Tappxkey parameter.');
|
|
140
140
|
return false;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
if (bid.params.host == null) {
|
|
144
|
-
|
|
144
|
+
logWarn(LOG_PREFIX, 'Please review the mandatory Host parameter.');
|
|
145
145
|
return false;
|
|
146
146
|
}
|
|
147
147
|
|
|
@@ -151,7 +151,7 @@ function validBasic(bid) {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
if (classicEndpoint && bid.params.endpoint == null) {
|
|
154
|
-
|
|
154
|
+
logWarn(LOG_PREFIX, 'Please review the mandatory endpoint Tappx parameters.');
|
|
155
155
|
return false;
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -159,16 +159,16 @@ function validBasic(bid) {
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
function validMediaType(bid) {
|
|
162
|
-
const video =
|
|
162
|
+
const video = deepAccess(bid, 'mediaTypes.video');
|
|
163
163
|
|
|
164
164
|
// Video validations
|
|
165
165
|
if (typeof video !== 'undefined') {
|
|
166
166
|
if (VIDEO_SUPPORT.indexOf(video.context) === -1) {
|
|
167
|
-
|
|
167
|
+
logWarn(LOG_PREFIX, 'Please review the mandatory Tappx parameters for Video. Video context not supported.');
|
|
168
168
|
return false;
|
|
169
169
|
}
|
|
170
170
|
if (typeof video.mimes == 'undefined') {
|
|
171
|
-
|
|
171
|
+
logWarn(LOG_PREFIX, 'Please review the mandatory Tappx parameters for Video. Mimes param is mandatory.');
|
|
172
172
|
return false;
|
|
173
173
|
}
|
|
174
174
|
}
|
|
@@ -195,6 +195,9 @@ function interpretBid(serverBid, request) {
|
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
if (typeof serverBid.dealId !== 'undefined') { bidReturned.dealId = serverBid.dealId }
|
|
198
|
+
if (typeof serverBid.lurl != 'undefined') { bidReturned.lurl = serverBid.lurl }
|
|
199
|
+
if (typeof serverBid.nurl != 'undefined') { bidReturned.nurl = serverBid.nurl }
|
|
200
|
+
if (typeof serverBid.burl != 'undefined') { bidReturned.burl = serverBid.burl }
|
|
198
201
|
|
|
199
202
|
if (typeof request.bids.mediaTypes !== 'undefined' && typeof request.bids.mediaTypes.video !== 'undefined') {
|
|
200
203
|
bidReturned.vastXml = serverBid.adm;
|
|
@@ -207,7 +210,7 @@ function interpretBid(serverBid, request) {
|
|
|
207
210
|
if (request.bids.mediaTypes.video.context === 'outstream') {
|
|
208
211
|
const url = (serverBid.ext.purl) ? serverBid.ext.purl : false;
|
|
209
212
|
if (typeof url === 'undefined') {
|
|
210
|
-
|
|
213
|
+
logWarn(LOG_PREFIX, 'Error getting player outstream from tappx');
|
|
211
214
|
return false;
|
|
212
215
|
}
|
|
213
216
|
bidReturned.renderer = createRenderer(bidReturned, request, url);
|
|
@@ -236,12 +239,12 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
236
239
|
const ENDPOINT = hostInfo.endpoint;
|
|
237
240
|
hostDomain = hostInfo.domain;
|
|
238
241
|
|
|
239
|
-
const TAPPXKEY =
|
|
240
|
-
const MKTAG =
|
|
241
|
-
const BIDFLOOR =
|
|
242
|
-
const BIDEXTRA =
|
|
243
|
-
const bannerMediaType =
|
|
244
|
-
const videoMediaType =
|
|
242
|
+
const TAPPXKEY = deepAccess(validBidRequests, 'params.tappxkey');
|
|
243
|
+
const MKTAG = deepAccess(validBidRequests, 'params.mktag');
|
|
244
|
+
const BIDFLOOR = deepAccess(validBidRequests, 'params.bidfloor');
|
|
245
|
+
const BIDEXTRA = deepAccess(validBidRequests, 'params.ext');
|
|
246
|
+
const bannerMediaType = deepAccess(validBidRequests, 'mediaTypes.banner');
|
|
247
|
+
const videoMediaType = deepAccess(validBidRequests, 'mediaTypes.video');
|
|
245
248
|
|
|
246
249
|
// let requests = [];
|
|
247
250
|
let payload = {};
|
|
@@ -250,16 +253,16 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
250
253
|
let api = {};
|
|
251
254
|
|
|
252
255
|
// > App/Site object
|
|
253
|
-
if (
|
|
256
|
+
if (deepAccess(validBidRequests, 'params.app')) {
|
|
254
257
|
let app = {};
|
|
255
|
-
app.name =
|
|
256
|
-
app.bundle =
|
|
257
|
-
app.domain =
|
|
258
|
-
publisher.name =
|
|
259
|
-
publisher.domain =
|
|
258
|
+
app.name = deepAccess(validBidRequests, 'params.app.name');
|
|
259
|
+
app.bundle = deepAccess(validBidRequests, 'params.app.bundle');
|
|
260
|
+
app.domain = deepAccess(validBidRequests, 'params.app.domain');
|
|
261
|
+
publisher.name = deepAccess(validBidRequests, 'params.app.publisher.name');
|
|
262
|
+
publisher.domain = deepAccess(validBidRequests, 'params.app.publisher.domain');
|
|
260
263
|
tagid = `${app.name}_typeAdBanVid_${getOs()}`;
|
|
261
264
|
payload.app = app;
|
|
262
|
-
api[0] =
|
|
265
|
+
api[0] = deepAccess(validBidRequests, 'params.api') ? deepAccess(validBidRequests, 'params.api') : [3, 5];
|
|
263
266
|
} else {
|
|
264
267
|
let bundle = _extractPageUrl(validBidRequests, bidderRequest);
|
|
265
268
|
let site = {};
|
|
@@ -305,7 +308,7 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
305
308
|
if (typeof videoMediaType !== 'undefined') {
|
|
306
309
|
let video = {};
|
|
307
310
|
|
|
308
|
-
let videoParams =
|
|
311
|
+
let videoParams = deepAccess(validBidRequests, 'params.video');
|
|
309
312
|
if (typeof videoParams !== 'undefined') {
|
|
310
313
|
for (var key in VIDEO_CUSTOM_PARAMS) {
|
|
311
314
|
if (videoParams.hasOwnProperty(key)) {
|
|
@@ -324,6 +327,12 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
324
327
|
|
|
325
328
|
video.mimes = videoMediaType.mimes;
|
|
326
329
|
|
|
330
|
+
let videoExt = {};
|
|
331
|
+
if ((typeof videoMediaType.rewarded !== 'undefined') && videoMediaType.rewarded == 1) {
|
|
332
|
+
videoExt.rewarded = videoMediaType.rewarded;
|
|
333
|
+
}
|
|
334
|
+
video.ext = videoExt;
|
|
335
|
+
|
|
327
336
|
imp.video = video;
|
|
328
337
|
}
|
|
329
338
|
|
|
@@ -331,22 +340,22 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
331
340
|
imp.tagid = tagid;
|
|
332
341
|
imp.secure = 1;
|
|
333
342
|
|
|
334
|
-
imp.bidfloor =
|
|
335
|
-
if (
|
|
343
|
+
imp.bidfloor = deepAccess(validBidRequests, 'params.bidfloor');
|
|
344
|
+
if (isFn(validBidRequests.getFloor)) {
|
|
336
345
|
try {
|
|
337
346
|
let floor = validBidRequests.getFloor({
|
|
338
347
|
currency: CUR,
|
|
339
348
|
mediaType: '*',
|
|
340
349
|
size: '*'
|
|
341
350
|
});
|
|
342
|
-
if (
|
|
351
|
+
if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'USD') {
|
|
343
352
|
imp.bidfloor = floor.floor;
|
|
344
353
|
} else {
|
|
345
|
-
|
|
354
|
+
logWarn(LOG_PREFIX, 'Currency not valid. Use only USD with Tappx.');
|
|
346
355
|
}
|
|
347
356
|
} catch (e) {
|
|
348
|
-
|
|
349
|
-
imp.bidfloor =
|
|
357
|
+
logWarn(LOG_PREFIX, e);
|
|
358
|
+
imp.bidfloor = deepAccess(validBidRequests, 'params.bidfloor'); // Be sure that we have an imp.bidfloor
|
|
350
359
|
}
|
|
351
360
|
}
|
|
352
361
|
|
|
@@ -371,12 +380,12 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
371
380
|
// Optional
|
|
372
381
|
device.h = screen.height;
|
|
373
382
|
device.w = screen.width;
|
|
374
|
-
device.dnt =
|
|
383
|
+
device.dnt = getDNT() ? 1 : 0;
|
|
375
384
|
device.language = getLanguage();
|
|
376
385
|
device.make = navigator.vendor ? navigator.vendor : '';
|
|
377
386
|
|
|
378
387
|
let geo = {};
|
|
379
|
-
geo.country =
|
|
388
|
+
geo.country = deepAccess(validBidRequests, 'params.geo.country');
|
|
380
389
|
// < Device object
|
|
381
390
|
|
|
382
391
|
// > GDPR
|
|
@@ -384,7 +393,7 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
384
393
|
user.ext = {};
|
|
385
394
|
|
|
386
395
|
// Universal ID
|
|
387
|
-
let eidsArr =
|
|
396
|
+
let eidsArr = deepAccess(validBidRequests, 'userIdAsEids');
|
|
388
397
|
if (typeof eidsArr !== 'undefined') {
|
|
389
398
|
eidsArr = eidsArr.filter(
|
|
390
399
|
uuid =>
|
|
@@ -420,8 +429,8 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
420
429
|
payloadExt.bidder = {};
|
|
421
430
|
payloadExt.bidder.tappxkey = TAPPXKEY;
|
|
422
431
|
payloadExt.bidder.mktag = MKTAG;
|
|
423
|
-
payloadExt.bidder.bcid =
|
|
424
|
-
payloadExt.bidder.bcrid =
|
|
432
|
+
payloadExt.bidder.bcid = deepAccess(validBidRequests, 'params.bcid');
|
|
433
|
+
payloadExt.bidder.bcrid = deepAccess(validBidRequests, 'params.bcrid');
|
|
425
434
|
payloadExt.bidder.ext = (typeof BIDEXTRA == 'object') ? BIDEXTRA : {};
|
|
426
435
|
if (typeof videoMediaType !== 'undefined') {
|
|
427
436
|
payloadExt.bidder.ext.pbvidtype = videoMediaType.context;
|
|
@@ -430,7 +439,7 @@ function buildOneRequest(validBidRequests, bidderRequest) {
|
|
|
430
439
|
|
|
431
440
|
// > Payload
|
|
432
441
|
payload.id = validBidRequests.auctionId;
|
|
433
|
-
payload.test =
|
|
442
|
+
payload.test = deepAccess(validBidRequests, 'params.test') ? 1 : 0;
|
|
434
443
|
payload.at = 1;
|
|
435
444
|
payload.tmax = bidderRequest.timeout ? bidderRequest.timeout : 600;
|
|
436
445
|
payload.bidder = BIDDER_CODE;
|
|
@@ -464,8 +473,8 @@ function getOs() {
|
|
|
464
473
|
|
|
465
474
|
export function _getHostInfo(validBidRequests) {
|
|
466
475
|
let domainInfo = {};
|
|
467
|
-
let endpoint =
|
|
468
|
-
let hostParam =
|
|
476
|
+
let endpoint = deepAccess(validBidRequests, 'params.endpoint');
|
|
477
|
+
let hostParam = deepAccess(validBidRequests, 'params.host');
|
|
469
478
|
|
|
470
479
|
domainInfo.domain = hostParam.split('/', 1)[0];
|
|
471
480
|
|
|
@@ -486,14 +495,16 @@ export function _getHostInfo(validBidRequests) {
|
|
|
486
495
|
}
|
|
487
496
|
|
|
488
497
|
function outstreamRender(bid, request) {
|
|
498
|
+
let rendererOptions = {};
|
|
499
|
+
rendererOptions = (typeof bid.params[0].video != 'undefined') ? bid.params[0].video : {};
|
|
500
|
+
rendererOptions.content = bid.vastXml;
|
|
501
|
+
|
|
489
502
|
bid.renderer.push(() => {
|
|
490
503
|
window.tappxOutstream.renderAd({
|
|
491
504
|
sizes: [bid.width, bid.height],
|
|
492
505
|
targetId: bid.adUnitCode,
|
|
493
506
|
adResponse: bid.adResponse,
|
|
494
|
-
rendererOptions:
|
|
495
|
-
content: bid.vastXml
|
|
496
|
-
}
|
|
507
|
+
rendererOptions: rendererOptions
|
|
497
508
|
});
|
|
498
509
|
});
|
|
499
510
|
}
|
|
@@ -508,7 +519,7 @@ function createRenderer(bid, request, url) {
|
|
|
508
519
|
try {
|
|
509
520
|
rendererInst.setRender(outstreamRender);
|
|
510
521
|
} catch (err) {
|
|
511
|
-
|
|
522
|
+
logWarn(LOG_PREFIX, 'Prebid Error calling setRender on renderer');
|
|
512
523
|
}
|
|
513
524
|
|
|
514
525
|
return rendererInst;
|
|
@@ -519,39 +530,31 @@ export function _checkParamDataType(key, value, datatype) {
|
|
|
519
530
|
var functionToExecute;
|
|
520
531
|
switch (datatype) {
|
|
521
532
|
case DATA_TYPES.BOOLEAN:
|
|
522
|
-
functionToExecute =
|
|
533
|
+
functionToExecute = isBoolean;
|
|
523
534
|
break;
|
|
524
535
|
case DATA_TYPES.NUMBER:
|
|
525
|
-
functionToExecute =
|
|
536
|
+
functionToExecute = isNumber;
|
|
526
537
|
break;
|
|
527
538
|
case DATA_TYPES.STRING:
|
|
528
|
-
functionToExecute =
|
|
539
|
+
functionToExecute = isStr;
|
|
529
540
|
break;
|
|
530
541
|
case DATA_TYPES.ARRAY:
|
|
531
|
-
functionToExecute =
|
|
542
|
+
functionToExecute = isArray;
|
|
532
543
|
break;
|
|
533
544
|
}
|
|
534
545
|
if (functionToExecute(value)) {
|
|
535
546
|
return value;
|
|
536
547
|
}
|
|
537
|
-
|
|
548
|
+
logWarn(LOG_PREFIX, errMsg);
|
|
538
549
|
return undefined;
|
|
539
550
|
}
|
|
540
551
|
|
|
541
552
|
export function _extractPageUrl(validBidRequests, bidderRequest) {
|
|
542
|
-
let
|
|
553
|
+
let referrer = deepAccess(bidderRequest, 'refererInfo.referer');
|
|
554
|
+
let page = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || deepAccess(window, 'location.href');
|
|
555
|
+
let paramUrl = deepAccess(validBidRequests, 'params.domainUrl') || config.getConfig('pageUrl');
|
|
543
556
|
|
|
544
|
-
|
|
545
|
-
domainUrl = config.getConfig('pageUrl') || utils.deepAccess(bidderRequest, 'refererInfo.canonicalUrl');
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
if (typeof domainUrl == 'undefined' || domainUrl == null) {
|
|
549
|
-
try {
|
|
550
|
-
domainUrl = window.top.document.head.querySelector('link[rel="canonical"][href]').getAttribute('href');
|
|
551
|
-
} catch (error) {
|
|
552
|
-
domainUrl = undefined;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
557
|
+
let domainUrl = referrer || page || paramUrl;
|
|
555
558
|
|
|
556
559
|
try {
|
|
557
560
|
domainUrl = domainUrl.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img)[0].replace(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?/img, '');
|
|
@@ -559,10 +562,6 @@ export function _extractPageUrl(validBidRequests, bidderRequest) {
|
|
|
559
562
|
domainUrl = undefined;
|
|
560
563
|
}
|
|
561
564
|
|
|
562
|
-
if (typeof domainUrl == 'undefined' || domainUrl == null) {
|
|
563
|
-
domainUrl = window.location.hostname;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
565
|
return domainUrl;
|
|
567
566
|
}
|
|
568
567
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { getValue, logError, deepAccess, getBidIdParameter, parseSizesInput, isArray } from '../src/utils.js';
|
|
1
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
3
|
import {getStorageManager} from '../src/storageManager.js';
|
|
3
|
-
import * as utils from '../src/utils.js';
|
|
4
4
|
|
|
5
5
|
const BIDDER_CODE = 'teads';
|
|
6
6
|
const GVL_ID = 132;
|
|
@@ -27,13 +27,13 @@ export const spec = {
|
|
|
27
27
|
isBidRequestValid: function(bid) {
|
|
28
28
|
let isValid = false;
|
|
29
29
|
if (typeof bid.params !== 'undefined') {
|
|
30
|
-
let isValidPlacementId = _validateId(
|
|
31
|
-
let isValidPageId = _validateId(
|
|
30
|
+
let isValidPlacementId = _validateId(getValue(bid.params, 'placementId'));
|
|
31
|
+
let isValidPageId = _validateId(getValue(bid.params, 'pageId'));
|
|
32
32
|
isValid = isValidPlacementId && isValidPageId;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
if (!isValid) {
|
|
36
|
-
|
|
36
|
+
logError('Teads placementId and pageId parameters are required. Bid aborted.');
|
|
37
37
|
}
|
|
38
38
|
return isValid;
|
|
39
39
|
},
|
|
@@ -54,8 +54,8 @@ export const spec = {
|
|
|
54
54
|
data: bids,
|
|
55
55
|
deviceWidth: screen.width,
|
|
56
56
|
hb_version: '$prebid.version$',
|
|
57
|
-
...getFLoCParameters(
|
|
58
|
-
...getUnifiedId2Parameter(
|
|
57
|
+
...getFLoCParameters(deepAccess(validBidRequests, '0.userId.flocId')),
|
|
58
|
+
...getUnifiedId2Parameter(deepAccess(validBidRequests, '0.userId.uid2')),
|
|
59
59
|
...getFirstPartyTeadsIdParameter()
|
|
60
60
|
};
|
|
61
61
|
|
|
@@ -188,35 +188,35 @@ function isGlobalConsent(gdprData, apiVersion) {
|
|
|
188
188
|
|
|
189
189
|
function buildRequestObject(bid) {
|
|
190
190
|
const reqObj = {};
|
|
191
|
-
let placementId =
|
|
192
|
-
let pageId =
|
|
191
|
+
let placementId = getValue(bid.params, 'placementId');
|
|
192
|
+
let pageId = getValue(bid.params, 'pageId');
|
|
193
193
|
|
|
194
194
|
reqObj.sizes = getSizes(bid);
|
|
195
|
-
reqObj.bidId =
|
|
196
|
-
reqObj.bidderRequestId =
|
|
195
|
+
reqObj.bidId = getBidIdParameter('bidId', bid);
|
|
196
|
+
reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bid);
|
|
197
197
|
reqObj.placementId = parseInt(placementId, 10);
|
|
198
198
|
reqObj.pageId = parseInt(pageId, 10);
|
|
199
|
-
reqObj.adUnitCode =
|
|
200
|
-
reqObj.auctionId =
|
|
201
|
-
reqObj.transactionId =
|
|
199
|
+
reqObj.adUnitCode = getBidIdParameter('adUnitCode', bid);
|
|
200
|
+
reqObj.auctionId = getBidIdParameter('auctionId', bid);
|
|
201
|
+
reqObj.transactionId = getBidIdParameter('transactionId', bid);
|
|
202
202
|
return reqObj;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
function getSizes(bid) {
|
|
206
|
-
return
|
|
206
|
+
return parseSizesInput(concatSizes(bid));
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
function concatSizes(bid) {
|
|
210
|
-
let playerSize =
|
|
211
|
-
let videoSizes =
|
|
212
|
-
let bannerSizes =
|
|
210
|
+
let playerSize = deepAccess(bid, 'mediaTypes.video.playerSize');
|
|
211
|
+
let videoSizes = deepAccess(bid, 'mediaTypes.video.sizes');
|
|
212
|
+
let bannerSizes = deepAccess(bid, 'mediaTypes.banner.sizes');
|
|
213
213
|
|
|
214
|
-
if (
|
|
214
|
+
if (isArray(bannerSizes) || isArray(playerSize) || isArray(videoSizes)) {
|
|
215
215
|
let mediaTypesSizes = [bannerSizes, videoSizes, playerSize];
|
|
216
216
|
return mediaTypesSizes
|
|
217
217
|
.reduce(function(acc, currSize) {
|
|
218
|
-
if (
|
|
219
|
-
if (
|
|
218
|
+
if (isArray(currSize)) {
|
|
219
|
+
if (isArray(currSize[0])) {
|
|
220
220
|
currSize.forEach(function (childSize) {
|
|
221
221
|
acc.push(childSize);
|
|
222
222
|
})
|