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
|
+
import { logWarn, isStr, deepAccess, inIframe, checkCookieSupport, timestamp, getBidIdParameter, parseSizesInput, buildUrl, logMessage, isArray, deepSetValue, isPlainObject, triggerPixel, replaceAuctionPrice, isFn } from '../src/utils.js';
|
|
1
2
|
import {config} from '../src/config.js'
|
|
2
|
-
import * as utils from '../src/utils.js'
|
|
3
3
|
import {registerBidder} from '../src/adapters/bidderFactory.js'
|
|
4
4
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'
|
|
5
5
|
import includes from 'core-js-pure/features/array/includes.js'
|
|
@@ -36,44 +36,44 @@ export const spec = {
|
|
|
36
36
|
*/
|
|
37
37
|
isBidRequestValid: function (bid) {
|
|
38
38
|
if (!bid || !bid.params) {
|
|
39
|
-
|
|
39
|
+
logWarn(BIDDER_CODE + ': Missing bid parameters');
|
|
40
40
|
return false
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
if (!
|
|
44
|
-
|
|
43
|
+
if (!isStr(bid.params.adzoneid)) {
|
|
44
|
+
logWarn(BIDDER_CODE + ': adzoneid must be specified as a string');
|
|
45
45
|
return false
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
if (isBannerRequest(bid)) {
|
|
49
|
-
const banneroAdUnit =
|
|
49
|
+
const banneroAdUnit = deepAccess(bid, 'mediaTypes.banner');
|
|
50
50
|
if (!banneroAdUnit.sizes) {
|
|
51
|
-
|
|
51
|
+
logWarn(BIDDER_CODE + ': banner sizes must be specified');
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
if (isVideoRequest(bid)) {
|
|
57
57
|
// prebid 4.0 use standardized Video parameters
|
|
58
|
-
const videoAdUnit =
|
|
58
|
+
const videoAdUnit = deepAccess(bid, 'mediaTypes.video');
|
|
59
59
|
|
|
60
60
|
if (!Array.isArray(videoAdUnit.playerSize)) {
|
|
61
|
-
|
|
61
|
+
logWarn(BIDDER_CODE + ': video playerSize must be an array of integers');
|
|
62
62
|
return false;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
if (!videoAdUnit.context) {
|
|
66
|
-
|
|
66
|
+
logWarn(BIDDER_CODE + ': video context must be specified');
|
|
67
67
|
return false;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
if (!Array.isArray(videoAdUnit.mimes) || videoAdUnit.mimes.length === 0) {
|
|
71
|
-
|
|
71
|
+
logWarn(BIDDER_CODE + ': video mimes must be an array of strings');
|
|
72
72
|
return false;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
if (!Array.isArray(videoAdUnit.protocols) || videoAdUnit.protocols.length === 0) {
|
|
76
|
-
|
|
76
|
+
logWarn(BIDDER_CODE + ': video protocols must be an array of integers');
|
|
77
77
|
return false;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -97,8 +97,8 @@ export const spec = {
|
|
|
97
97
|
bt = Math.min(window.PREBID_TIMEOUT, bt);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
let referrer =
|
|
101
|
-
let page =
|
|
100
|
+
let referrer = deepAccess(bidderRequest, 'refererInfo.referer');
|
|
101
|
+
let page = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl') || deepAccess(window, 'location.href');
|
|
102
102
|
|
|
103
103
|
// add common parameters
|
|
104
104
|
let beaconParams = {
|
|
@@ -110,10 +110,10 @@ export const spec = {
|
|
|
110
110
|
uh: window.screen.height,
|
|
111
111
|
dpr: ratio,
|
|
112
112
|
bt: bt,
|
|
113
|
-
isinframe:
|
|
114
|
-
cookies:
|
|
113
|
+
isinframe: inIframe(),
|
|
114
|
+
cookies: checkCookieSupport() ? '1' : '0',
|
|
115
115
|
tz: dt.getTimezoneOffset(),
|
|
116
|
-
dt:
|
|
116
|
+
dt: timestamp(),
|
|
117
117
|
iob: iobavailable ? '1' : '0',
|
|
118
118
|
pbjs: '$prebid.version$',
|
|
119
119
|
rndid: Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000,
|
|
@@ -126,19 +126,19 @@ export const spec = {
|
|
|
126
126
|
beaconParams.gdpr_consent = bidderRequest.gdprConsent.consentString;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
if (
|
|
129
|
+
if (isStr(deepAccess(validBidRequests, '0.userId.pubcid'))) {
|
|
130
130
|
beaconParams.pubcid = validBidRequests[0].userId.pubcid;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
if (
|
|
133
|
+
if (isStr(deepAccess(validBidRequests, '0.userId.tdid'))) {
|
|
134
134
|
beaconParams.tdid = validBidRequests[0].userId.tdid;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
if (
|
|
137
|
+
if (isStr(deepAccess(validBidRequests, '0.userId.id5id.uid'))) {
|
|
138
138
|
beaconParams.id5id = validBidRequests[0].userId.id5id.uid;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
if (
|
|
141
|
+
if (isStr(deepAccess(validBidRequests, '0.userId.idl_env'))) {
|
|
142
142
|
beaconParams.idl_env = validBidRequests[0].userId.idl_env;
|
|
143
143
|
}
|
|
144
144
|
|
|
@@ -156,14 +156,14 @@ export const spec = {
|
|
|
156
156
|
let bidfloors = [];
|
|
157
157
|
|
|
158
158
|
validBidRequests.forEach((bid, index) => {
|
|
159
|
-
adZoneIds.push(
|
|
159
|
+
adZoneIds.push(getBidIdParameter('adzoneid', bid.params));
|
|
160
160
|
prebidBidIds.push(bid.bidId);
|
|
161
161
|
|
|
162
162
|
let bidfloor = getFloor(bid);
|
|
163
163
|
bidfloors.push(bidfloor);
|
|
164
164
|
|
|
165
165
|
// copy all custom parameters impression level parameters not supported above
|
|
166
|
-
let customBidParams =
|
|
166
|
+
let customBidParams = getBidIdParameter('custom', bid.params) || {}
|
|
167
167
|
if (customBidParams) {
|
|
168
168
|
Object.keys(customBidParams)
|
|
169
169
|
.filter(param => includes(USER_PARAMS_BID, param))
|
|
@@ -171,7 +171,7 @@ export const spec = {
|
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
if (isBannerRequest(bid)) {
|
|
174
|
-
sizes.push(
|
|
174
|
+
sizes.push(parseSizesInput(bid.mediaTypes.banner.sizes).join('|'));
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
if (isNativeRequest(bid)) {
|
|
@@ -185,10 +185,10 @@ export const spec = {
|
|
|
185
185
|
.forEach(param => beaconParams['video.' + param + '.' + index] = encodeURIComponent(bid.params.video[param]))
|
|
186
186
|
}
|
|
187
187
|
// copy video standarized params
|
|
188
|
-
beaconParams['video.context' + '.' + index] =
|
|
189
|
-
sizes.push(
|
|
190
|
-
beaconParams['video.mimes' + '.' + index] =
|
|
191
|
-
beaconParams['video.protocols' + '.' + index] =
|
|
188
|
+
beaconParams['video.context' + '.' + index] = deepAccess(bid, 'mediaTypes.video.context');
|
|
189
|
+
sizes.push(parseSizesInput(bid.mediaTypes.video.playerSize).join('|'));
|
|
190
|
+
beaconParams['video.mimes' + '.' + index] = deepAccess(bid, 'mediaTypes.video.mimes').join(',');
|
|
191
|
+
beaconParams['video.protocols' + '.' + index] = deepAccess(bid, 'mediaTypes.video.protocols').join(',');
|
|
192
192
|
}
|
|
193
193
|
})
|
|
194
194
|
|
|
@@ -197,14 +197,14 @@ export const spec = {
|
|
|
197
197
|
beaconParams.prebidBidIds = prebidBidIds.join(',');
|
|
198
198
|
beaconParams.bidfloors = bidfloors.join(',');
|
|
199
199
|
|
|
200
|
-
let adxcgRequestUrl =
|
|
200
|
+
let adxcgRequestUrl = buildUrl({
|
|
201
201
|
protocol: 'https',
|
|
202
202
|
hostname: 'hbps.adxcg.net',
|
|
203
203
|
pathname: '/get/adi',
|
|
204
204
|
search: beaconParams
|
|
205
205
|
});
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
logMessage(`calling adi adxcg`);
|
|
208
208
|
return {
|
|
209
209
|
contentType: 'text/plain',
|
|
210
210
|
method: 'GET',
|
|
@@ -220,11 +220,11 @@ export const spec = {
|
|
|
220
220
|
*/
|
|
221
221
|
interpretResponse:
|
|
222
222
|
function (serverResponse) {
|
|
223
|
-
|
|
223
|
+
logMessage(`interpretResponse adxcg`);
|
|
224
224
|
let bidsAll = [];
|
|
225
225
|
|
|
226
|
-
if (!serverResponse || !serverResponse.body || !
|
|
227
|
-
|
|
226
|
+
if (!serverResponse || !serverResponse.body || !isArray(serverResponse.body.seatbid) || !serverResponse.body.seatbid.length) {
|
|
227
|
+
logWarn(BIDDER_CODE + ': empty bid response');
|
|
228
228
|
return bidsAll;
|
|
229
229
|
}
|
|
230
230
|
|
|
@@ -256,28 +256,28 @@ export const spec = {
|
|
|
256
256
|
bid.mediaType = 'native';
|
|
257
257
|
bid.native = parseNative(JSON.parse(serverResponseOneItem.adm));
|
|
258
258
|
} else {
|
|
259
|
-
|
|
259
|
+
logWarn(BIDDER_CODE + ': unknown or undefined crType');
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
// prebid 4.0 meta taxonomy
|
|
263
|
-
if (
|
|
264
|
-
|
|
263
|
+
if (isArray(serverResponseOneItem.adomain)) {
|
|
264
|
+
deepSetValue(bid, 'meta.advertiserDomains', serverResponseOneItem.adomain);
|
|
265
265
|
}
|
|
266
|
-
if (
|
|
267
|
-
|
|
266
|
+
if (isArray(serverResponseOneItem.cat)) {
|
|
267
|
+
deepSetValue(bid, 'meta.secondaryCatIds', serverResponseOneItem.cat);
|
|
268
268
|
}
|
|
269
|
-
if (
|
|
270
|
-
if (
|
|
271
|
-
|
|
269
|
+
if (isPlainObject(serverResponseOneItem.ext)) {
|
|
270
|
+
if (isStr(serverResponseOneItem.ext.advertiser_id)) {
|
|
271
|
+
deepSetValue(bid, 'meta.mediaType', serverResponseOneItem.ext.mediaType);
|
|
272
272
|
}
|
|
273
|
-
if (
|
|
274
|
-
|
|
273
|
+
if (isStr(serverResponseOneItem.ext.advertiser_id)) {
|
|
274
|
+
deepSetValue(bid, 'meta.advertiserId', serverResponseOneItem.ext.advertiser_id);
|
|
275
275
|
}
|
|
276
|
-
if (
|
|
277
|
-
|
|
276
|
+
if (isStr(serverResponseOneItem.ext.advertiser_name)) {
|
|
277
|
+
deepSetValue(bid, 'meta.advertiserName', serverResponseOneItem.ext.advertiser_name);
|
|
278
278
|
}
|
|
279
|
-
if (
|
|
280
|
-
|
|
279
|
+
if (isStr(serverResponseOneItem.ext.agency_name)) {
|
|
280
|
+
deepSetValue(bid, 'meta.agencyName', serverResponseOneItem.ext.agency_name);
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
283
|
bidsAll.push(bid)
|
|
@@ -288,7 +288,7 @@ export const spec = {
|
|
|
288
288
|
|
|
289
289
|
onBidWon: (bid) => {
|
|
290
290
|
if (bid.burl) {
|
|
291
|
-
|
|
291
|
+
triggerPixel(replaceAuctionPrice(bid.burl, bid.originalCpm));
|
|
292
292
|
}
|
|
293
293
|
},
|
|
294
294
|
|
|
@@ -304,14 +304,14 @@ export const spec = {
|
|
|
304
304
|
cn: timeoutData.timeout,
|
|
305
305
|
aud: timeoutData.auctionId,
|
|
306
306
|
};
|
|
307
|
-
let adxcgRequestUrl =
|
|
307
|
+
let adxcgRequestUrl = buildUrl({
|
|
308
308
|
protocol: 'https',
|
|
309
309
|
hostname: 'hbps.adxcg.net',
|
|
310
310
|
pathname: '/event/timeout.gif',
|
|
311
311
|
search: beaconParams
|
|
312
312
|
});
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
logWarn(BIDDER_CODE + ': onTimeout called');
|
|
314
|
+
triggerPixel(adxcgRequestUrl);
|
|
315
315
|
},
|
|
316
316
|
|
|
317
317
|
getUserSyncs: function (syncOptions, serverResponses, gdprConsent) {
|
|
@@ -336,20 +336,20 @@ export const spec = {
|
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
function isVideoRequest(bid) {
|
|
339
|
-
return bid.mediaType === 'video' || !!
|
|
339
|
+
return bid.mediaType === 'video' || !!deepAccess(bid, 'mediaTypes.video');
|
|
340
340
|
}
|
|
341
341
|
|
|
342
342
|
function isBannerRequest(bid) {
|
|
343
|
-
return bid.mediaType === 'banner' || !!
|
|
343
|
+
return bid.mediaType === 'banner' || !!deepAccess(bid, 'mediaTypes.banner');
|
|
344
344
|
}
|
|
345
345
|
|
|
346
346
|
function isNativeRequest(bid) {
|
|
347
|
-
return bid.mediaType === 'native' || !!
|
|
347
|
+
return bid.mediaType === 'native' || !!deepAccess(bid, 'mediaTypes.native');
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
function getFloor(bid) {
|
|
351
|
-
if (!
|
|
352
|
-
return
|
|
351
|
+
if (!isFn(bid.getFloor)) {
|
|
352
|
+
return deepAccess(bid, 'params.floor', DEFAULT_MIN_FLOOR);
|
|
353
353
|
}
|
|
354
354
|
|
|
355
355
|
try {
|
|
@@ -361,7 +361,7 @@ function getFloor(bid) {
|
|
|
361
361
|
});
|
|
362
362
|
return floor.floor;
|
|
363
363
|
} catch (e) {
|
|
364
|
-
|
|
364
|
+
logWarn(BIDDER_CODE + ': call to getFloor failed:' + e.message);
|
|
365
365
|
return DEFAULT_MIN_FLOOR;
|
|
366
366
|
}
|
|
367
367
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { logError, logInfo, deepClone } from '../src/utils.js';
|
|
1
2
|
import { ajax } from '../src/ajax.js';
|
|
2
3
|
import adapter from '../src/AnalyticsAdapter.js';
|
|
3
4
|
import adapterManager from '../src/adapterManager.js';
|
|
4
5
|
import CONSTANTS from '../src/constants.json';
|
|
5
|
-
import * as utils from '../src/utils.js';
|
|
6
6
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
7
7
|
|
|
8
8
|
const analyticsType = 'endpoint';
|
|
@@ -95,7 +95,7 @@ function auctionInit(args) {
|
|
|
95
95
|
|
|
96
96
|
completeObject.auction_id = args.auctionId;
|
|
97
97
|
completeObject.publisher_id = adxpremiumAnalyticsAdapter.initOptions.pubId;
|
|
98
|
-
try { completeObject.referer = encodeURI(args.bidderRequests[0].refererInfo.referer.split('?')[0]); } catch (e) {
|
|
98
|
+
try { completeObject.referer = encodeURI(args.bidderRequests[0].refererInfo.referer.split('?')[0]); } catch (e) { logError('AdxPremium Analytics - ' + e.message); }
|
|
99
99
|
if (args.adUnitCodes && args.adUnitCodes.length > 0) {
|
|
100
100
|
elementIds = args.adUnitCodes;
|
|
101
101
|
}
|
|
@@ -140,20 +140,20 @@ function bidWon(args) {
|
|
|
140
140
|
if (requestDelivered) {
|
|
141
141
|
if (completeObject.events[eventIndex]) {
|
|
142
142
|
// do the upgrade
|
|
143
|
-
|
|
143
|
+
logInfo('AdxPremium Analytics - Upgrading request');
|
|
144
144
|
completeObject.events[eventIndex].is_winning = true;
|
|
145
145
|
completeObject.events[eventIndex].is_upgrade = true;
|
|
146
|
-
upgradedObject =
|
|
146
|
+
upgradedObject = deepClone(completeObject);
|
|
147
147
|
upgradedObject.events = [completeObject.events[eventIndex]];
|
|
148
148
|
sendEvent(upgradedObject); // send upgrade
|
|
149
149
|
} else {
|
|
150
|
-
|
|
150
|
+
logInfo('AdxPremium Analytics - CANNOT FIND INDEX FOR REQUEST ' + args.requestId);
|
|
151
151
|
}
|
|
152
152
|
} else {
|
|
153
153
|
completeObject.events[eventIndex].is_winning = true;
|
|
154
154
|
}
|
|
155
155
|
} else {
|
|
156
|
-
|
|
156
|
+
logInfo('AdxPremium Analytics - Response not found, creating new one.');
|
|
157
157
|
let tmpObject = {
|
|
158
158
|
type: 'RESPONSE',
|
|
159
159
|
bidder_code: args.bidderCode,
|
|
@@ -167,14 +167,14 @@ function bidWon(args) {
|
|
|
167
167
|
is_winning: true,
|
|
168
168
|
is_lost: true
|
|
169
169
|
};
|
|
170
|
-
let lostObject =
|
|
170
|
+
let lostObject = deepClone(completeObject);
|
|
171
171
|
lostObject.events = [tmpObject];
|
|
172
172
|
sendEvent(lostObject); // send lost object
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
function bidTimeout(args) {
|
|
177
|
-
let timeoutObject =
|
|
177
|
+
let timeoutObject = deepClone(completeObject);
|
|
178
178
|
timeoutObject.events = [];
|
|
179
179
|
let usedRequestIds = [];
|
|
180
180
|
|
|
@@ -191,12 +191,12 @@ function bidTimeout(args) {
|
|
|
191
191
|
|
|
192
192
|
if (timeoutObject.events.length > 0) {
|
|
193
193
|
sendEvent(timeoutObject); // send timeouted
|
|
194
|
-
|
|
194
|
+
logInfo('AdxPremium Analytics - Sending timeouted requests');
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
function auctionEnd(args) {
|
|
199
|
-
|
|
199
|
+
logInfo('AdxPremium Analytics - Auction Ended at ' + Date.now());
|
|
200
200
|
if (timeoutBased) { setTimeout(function () { requestSent = true; sendEvent(completeObject); }, 3500); } else { sendEventFallback(); }
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -212,22 +212,22 @@ function deviceType() {
|
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
function clearSlot(elementId) {
|
|
215
|
-
if (includes(elementIds, elementId)) { elementIds.splice(elementIds.indexOf(elementId), 1);
|
|
215
|
+
if (includes(elementIds, elementId)) { elementIds.splice(elementIds.indexOf(elementId), 1); logInfo('AdxPremium Analytics - Done with: ' + elementId); }
|
|
216
216
|
if (elementIds.length == 0 && !requestSent && !timeoutBased) {
|
|
217
217
|
requestSent = true;
|
|
218
218
|
sendEvent(completeObject);
|
|
219
|
-
|
|
219
|
+
logInfo('AdxPremium Analytics - Everything ready');
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
export function testSend() {
|
|
224
224
|
sendEvent(completeObject);
|
|
225
|
-
|
|
225
|
+
logInfo('AdxPremium Analytics - Sending without any conditions, used for testing');
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
function sendEventFallback() {
|
|
229
229
|
setTimeout(function () {
|
|
230
|
-
if (!requestSent) { requestSent = true; sendEvent(completeObject);
|
|
230
|
+
if (!requestSent) { requestSent = true; sendEvent(completeObject); logInfo('AdxPremium Analytics - Sending event using fallback method.'); }
|
|
231
231
|
}, 2000);
|
|
232
232
|
}
|
|
233
233
|
|
|
@@ -241,11 +241,11 @@ function sendEvent(completeObject) {
|
|
|
241
241
|
if (adxpremiumAnalyticsAdapter.initOptions.sid) {
|
|
242
242
|
ajaxEndpoint = 'https://' + adxpremiumAnalyticsAdapter.initOptions.sid + '.adxpremium.services/graphql'
|
|
243
243
|
}
|
|
244
|
-
ajax(ajaxEndpoint, function () {
|
|
244
|
+
ajax(ajaxEndpoint, function () { logInfo('AdxPremium Analytics - Sending complete events at ' + Date.now()) }, dataToSend, {
|
|
245
245
|
contentType: 'application/json',
|
|
246
246
|
method: 'POST'
|
|
247
247
|
});
|
|
248
|
-
} catch (err) {
|
|
248
|
+
} catch (err) { logError('AdxPremium Analytics - Sending event error: ' + err); }
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
// save the base class function
|
|
@@ -256,7 +256,7 @@ adxpremiumAnalyticsAdapter.enableAnalytics = function (config) {
|
|
|
256
256
|
adxpremiumAnalyticsAdapter.initOptions = config.options;
|
|
257
257
|
|
|
258
258
|
if (!config.options.pubId) {
|
|
259
|
-
|
|
259
|
+
logError('AdxPremium Analytics - Publisher ID (pubId) option is not defined. Analytics won\'t work');
|
|
260
260
|
return;
|
|
261
261
|
}
|
|
262
262
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { deepAccess, buildUrl, parseSizesInput } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import find from 'core-js-pure/features/array/find.js';
|
|
@@ -175,11 +175,11 @@ function getCanonicalUrl() {
|
|
|
175
175
|
|
|
176
176
|
/* Get mediatype from bidRequest */
|
|
177
177
|
function getMediatype(bidRequest) {
|
|
178
|
-
if (
|
|
178
|
+
if (deepAccess(bidRequest, 'mediaTypes.video')) {
|
|
179
179
|
return VIDEO;
|
|
180
|
-
} else if (
|
|
180
|
+
} else if (deepAccess(bidRequest, 'mediaTypes.banner')) {
|
|
181
181
|
return BANNER;
|
|
182
|
-
} else if (
|
|
182
|
+
} else if (deepAccess(bidRequest, 'mediaTypes.native')) {
|
|
183
183
|
return NATIVE;
|
|
184
184
|
}
|
|
185
185
|
}
|
|
@@ -210,7 +210,7 @@ function getPageRefreshed() {
|
|
|
210
210
|
/* Create endpoint url */
|
|
211
211
|
function createEndpoint(bidRequests, bidderRequest) {
|
|
212
212
|
let host = getHostname(bidRequests);
|
|
213
|
-
return
|
|
213
|
+
return buildUrl({
|
|
214
214
|
protocol: 'https',
|
|
215
215
|
host: `${DEFAULT_DC}${host}.omnitagjs.com`,
|
|
216
216
|
pathname: '/hb-api/prebid/v1',
|
|
@@ -260,7 +260,7 @@ function getSizeArray(bid) {
|
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
return
|
|
263
|
+
return parseSizesInput(inputSize);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
/* Get parsed size from request size */
|
|
@@ -342,7 +342,7 @@ function getVideoAd(response) {
|
|
|
342
342
|
var adJson = {};
|
|
343
343
|
if (typeof response.Ad === 'string') {
|
|
344
344
|
adJson = JSON.parse(response.Ad.match(/\/\*PREBID\*\/(.*)\/\*PREBID\*\//)[1]);
|
|
345
|
-
return
|
|
345
|
+
return deepAccess(adJson, 'Content.MainVideo.Vast');
|
|
346
346
|
}
|
|
347
347
|
}
|
|
348
348
|
|
|
@@ -404,7 +404,7 @@ function getNativeAssets(response, nativeConfig) {
|
|
|
404
404
|
imgSize[1] = response.Height || 250;
|
|
405
405
|
}
|
|
406
406
|
|
|
407
|
-
const url = getImageUrl(adJson,
|
|
407
|
+
const url = getImageUrl(adJson, deepAccess(adJson, 'Content.Preview.Thumbnail.Image'), imgSize[0], imgSize[1]);
|
|
408
408
|
if (url) {
|
|
409
409
|
native[key] = {
|
|
410
410
|
url,
|
|
@@ -422,7 +422,7 @@ function getNativeAssets(response, nativeConfig) {
|
|
|
422
422
|
iconSize[1] = 50;
|
|
423
423
|
}
|
|
424
424
|
|
|
425
|
-
const icurl = getImageUrl(adJson,
|
|
425
|
+
const icurl = getImageUrl(adJson, deepAccess(adJson, 'Content.Preview.Sponsor.Logo.Resource'), iconSize[0], iconSize[1]);
|
|
426
426
|
|
|
427
427
|
if (url) {
|
|
428
428
|
native[key] = {
|
|
@@ -433,10 +433,10 @@ function getNativeAssets(response, nativeConfig) {
|
|
|
433
433
|
}
|
|
434
434
|
break;
|
|
435
435
|
case 'privacyIcon':
|
|
436
|
-
native[key] = getImageUrl(adJson,
|
|
436
|
+
native[key] = getImageUrl(adJson, deepAccess(adJson, 'Content.Preview.Credit.Logo.Resource'), 25, 25);
|
|
437
437
|
break;
|
|
438
438
|
case 'privacyLink':
|
|
439
|
-
native[key] =
|
|
439
|
+
native[key] = deepAccess(adJson, 'Content.Preview.Credit.Url');
|
|
440
440
|
break;
|
|
441
441
|
}
|
|
442
442
|
});
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import includes from 'core-js-pure/features/array/includes.js'
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
|
+
import { Renderer } from '../src/Renderer.js'
|
|
4
|
+
import { BANNER, VIDEO } from '../src/mediaTypes.js'
|
|
5
|
+
|
|
6
|
+
export const IS_DEV = location.hostname === 'localhost'
|
|
7
|
+
export const BIDDER_CODE = 'afp'
|
|
8
|
+
export const SSP_ENDPOINT = 'https://ssp.afp.ai/api/prebid'
|
|
9
|
+
export const REQUEST_METHOD = 'POST'
|
|
10
|
+
export const TEST_PAGE_URL = 'https://rtbinsight.ru/smiert-bolshikh-dannykh-kto-na-novienkogo/'
|
|
11
|
+
const SDK_PATH = 'https://cdn.afp.ai/ssp/sdk.js?auto_initialization=false&deploy_to_parent_window=true'
|
|
12
|
+
const TTL = 60
|
|
13
|
+
export const IN_IMAGE_BANNER_TYPE = 'In-image'
|
|
14
|
+
export const IN_IMAGE_MAX_BANNER_TYPE = 'In-image Max'
|
|
15
|
+
export const IN_CONTENT_BANNER_TYPE = 'In-content Banner'
|
|
16
|
+
export const IN_CONTENT_VIDEO_TYPE = 'In-content Video'
|
|
17
|
+
export const OUT_CONTENT_VIDEO_TYPE = 'Out-content Video'
|
|
18
|
+
export const IN_CONTENT_STORY_TYPE = 'In-content Stories'
|
|
19
|
+
export const ACTION_SCROLLER_TYPE = 'Action Scroller'
|
|
20
|
+
export const ACTION_SCROLLER_LIGHT_TYPE = 'Action Scroller Light'
|
|
21
|
+
export const JUST_BANNER_TYPE = 'Just Banner'
|
|
22
|
+
|
|
23
|
+
export const mediaTypeByPlaceType = {
|
|
24
|
+
[IN_IMAGE_BANNER_TYPE]: BANNER,
|
|
25
|
+
[IN_IMAGE_MAX_BANNER_TYPE]: BANNER,
|
|
26
|
+
[IN_CONTENT_BANNER_TYPE]: BANNER,
|
|
27
|
+
[IN_CONTENT_STORY_TYPE]: BANNER,
|
|
28
|
+
[ACTION_SCROLLER_TYPE]: BANNER,
|
|
29
|
+
[ACTION_SCROLLER_LIGHT_TYPE]: BANNER,
|
|
30
|
+
[JUST_BANNER_TYPE]: BANNER,
|
|
31
|
+
[IN_CONTENT_VIDEO_TYPE]: VIDEO,
|
|
32
|
+
[OUT_CONTENT_VIDEO_TYPE]: VIDEO,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const wrapAd = (dataToCreatePlace) => {
|
|
36
|
+
return `<!DOCTYPE html>
|
|
37
|
+
<html lang="en">
|
|
38
|
+
<head>
|
|
39
|
+
<meta charset="UTF-8">
|
|
40
|
+
<style>html, body {width: 100%; height: 100%; margin: 0;}</style>
|
|
41
|
+
<script src="${SDK_PATH}"></script>
|
|
42
|
+
</head>
|
|
43
|
+
<body>
|
|
44
|
+
<script>
|
|
45
|
+
window.afp.createPlaceByData(JSON.parse(decodeURIComponent("${encodeURIComponent(JSON.stringify(dataToCreatePlace))}")))
|
|
46
|
+
</script>
|
|
47
|
+
</body>
|
|
48
|
+
</html>`
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const bidRequestMap = {}
|
|
52
|
+
|
|
53
|
+
const createRenderer = (bid, dataToCreatePlace) => {
|
|
54
|
+
const renderer = new Renderer({
|
|
55
|
+
targetId: bid.adUnitCode,
|
|
56
|
+
url: SDK_PATH,
|
|
57
|
+
callback() {
|
|
58
|
+
renderer.loaded = true
|
|
59
|
+
window.afp.createPlaceByData(dataToCreatePlace)
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
return renderer
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export const spec = {
|
|
67
|
+
code: BIDDER_CODE,
|
|
68
|
+
supportedMediaTypes: [BANNER, VIDEO],
|
|
69
|
+
isBidRequestValid({mediaTypes, params}) {
|
|
70
|
+
if (typeof params !== 'object' || typeof mediaTypes !== 'object') {
|
|
71
|
+
return false
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const {placeId, placeType, imageUrl, imageWidth, imageHeight} = params
|
|
75
|
+
const media = mediaTypes[mediaTypeByPlaceType[placeType]]
|
|
76
|
+
|
|
77
|
+
if (placeId && media) {
|
|
78
|
+
if (mediaTypeByPlaceType[placeType] === VIDEO) {
|
|
79
|
+
if (!media.playerSize) {
|
|
80
|
+
return false
|
|
81
|
+
}
|
|
82
|
+
} else if (mediaTypeByPlaceType[placeType] === BANNER) {
|
|
83
|
+
if (!media.sizes) {
|
|
84
|
+
return false
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (includes([IN_IMAGE_BANNER_TYPE, IN_IMAGE_MAX_BANNER_TYPE], placeType)) {
|
|
88
|
+
if (imageUrl && imageWidth && imageHeight) {
|
|
89
|
+
return true
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
return true
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return false
|
|
96
|
+
},
|
|
97
|
+
buildRequests(validBidRequests, {refererInfo, gdprConsent}) {
|
|
98
|
+
const payload = {
|
|
99
|
+
pageUrl: IS_DEV ? TEST_PAGE_URL : refererInfo.referer,
|
|
100
|
+
gdprConsent: gdprConsent,
|
|
101
|
+
bidRequests: validBidRequests.map(validBidRequest => {
|
|
102
|
+
const {bidId, transactionId, sizes, params: {
|
|
103
|
+
placeId, placeType, imageUrl, imageWidth, imageHeight
|
|
104
|
+
}} = validBidRequest
|
|
105
|
+
bidRequestMap[bidId] = validBidRequest
|
|
106
|
+
const bidRequest = {
|
|
107
|
+
bidId,
|
|
108
|
+
transactionId,
|
|
109
|
+
sizes,
|
|
110
|
+
placeId,
|
|
111
|
+
}
|
|
112
|
+
if (includes([IN_IMAGE_BANNER_TYPE, IN_IMAGE_MAX_BANNER_TYPE], placeType)) {
|
|
113
|
+
Object.assign(bidRequest, {
|
|
114
|
+
imageUrl,
|
|
115
|
+
imageWidth: Math.floor(imageWidth),
|
|
116
|
+
imageHeight: Math.floor(imageHeight),
|
|
117
|
+
})
|
|
118
|
+
}
|
|
119
|
+
return bidRequest
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
method: REQUEST_METHOD,
|
|
125
|
+
url: SSP_ENDPOINT,
|
|
126
|
+
data: payload,
|
|
127
|
+
options: {
|
|
128
|
+
contentType: 'application/json'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
interpretResponse(serverResponse) {
|
|
133
|
+
let bids = serverResponse.body && serverResponse.body.bids
|
|
134
|
+
bids = Array.isArray(bids) ? bids : []
|
|
135
|
+
|
|
136
|
+
return bids.map(({bidId, cpm, width, height, creativeId, currency, netRevenue, adSettings, placeSettings}, index) => {
|
|
137
|
+
const bid = {
|
|
138
|
+
requestId: bidId,
|
|
139
|
+
cpm,
|
|
140
|
+
width,
|
|
141
|
+
height,
|
|
142
|
+
creativeId,
|
|
143
|
+
currency,
|
|
144
|
+
netRevenue,
|
|
145
|
+
meta: {
|
|
146
|
+
mediaType: mediaTypeByPlaceType[placeSettings.placeType],
|
|
147
|
+
},
|
|
148
|
+
ttl: TTL
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const bidRequest = bidRequestMap[bidId]
|
|
152
|
+
const placeContainer = bidRequest.params.placeContainer
|
|
153
|
+
const dataToCreatePlace = { adSettings, placeSettings, placeContainer, isPrebid: true }
|
|
154
|
+
|
|
155
|
+
if (mediaTypeByPlaceType[placeSettings.placeType] === BANNER) {
|
|
156
|
+
bid.ad = wrapAd(dataToCreatePlace)
|
|
157
|
+
} else if (mediaTypeByPlaceType[placeSettings.placeType] === VIDEO) {
|
|
158
|
+
bid.vastXml = adSettings.content
|
|
159
|
+
bid.renderer = createRenderer(bid, dataToCreatePlace)
|
|
160
|
+
}
|
|
161
|
+
return bid
|
|
162
|
+
})
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
registerBidder(spec);
|