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,8 +1,8 @@
|
|
|
1
|
+
import { isArray, getUniqueIdentifierStr, parseUrl, deepAccess, logWarn, logError, logInfo } from '../src/utils.js';
|
|
1
2
|
import {loadExternalScript} from '../src/adloader.js';
|
|
2
3
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
4
|
import {config} from '../src/config.js';
|
|
4
5
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
5
|
-
import * as utils from '../src/utils.js';
|
|
6
6
|
import find from 'core-js-pure/features/array/find.js';
|
|
7
7
|
import { verify } from 'criteo-direct-rsa-validate/build/verify.js'; // ref#2
|
|
8
8
|
import { getStorageManager } from '../src/storageManager.js';
|
|
@@ -123,13 +123,13 @@ export const spec = {
|
|
|
123
123
|
|
|
124
124
|
const bids = [];
|
|
125
125
|
|
|
126
|
-
if (body && body.slots &&
|
|
126
|
+
if (body && body.slots && isArray(body.slots)) {
|
|
127
127
|
body.slots.forEach(slot => {
|
|
128
128
|
const bidRequest = find(request.bidRequests, b => b.adUnitCode === slot.impid && (!b.params.zoneId || parseInt(b.params.zoneId) === slot.zoneid));
|
|
129
129
|
const bidId = bidRequest.bidId;
|
|
130
130
|
const bid = {
|
|
131
131
|
requestId: bidId,
|
|
132
|
-
adId: slot.bidId ||
|
|
132
|
+
adId: slot.bidId || getUniqueIdentifierStr(),
|
|
133
133
|
cpm: slot.cpm,
|
|
134
134
|
currency: slot.currency,
|
|
135
135
|
netRevenue: true,
|
|
@@ -219,7 +219,7 @@ function buildContext(bidRequests, bidderRequest) {
|
|
|
219
219
|
if (bidderRequest && bidderRequest.refererInfo) {
|
|
220
220
|
referrer = bidderRequest.refererInfo.referer;
|
|
221
221
|
}
|
|
222
|
-
const queryString =
|
|
222
|
+
const queryString = parseUrl(referrer).search;
|
|
223
223
|
|
|
224
224
|
const context = {
|
|
225
225
|
url: referrer,
|
|
@@ -296,7 +296,7 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
296
296
|
if (bidRequest.params.zoneId) {
|
|
297
297
|
slot.zoneid = bidRequest.params.zoneId;
|
|
298
298
|
}
|
|
299
|
-
if (
|
|
299
|
+
if (deepAccess(bidRequest, 'ortb2Imp.ext')) {
|
|
300
300
|
slot.ext = bidRequest.ortb2Imp.ext;
|
|
301
301
|
}
|
|
302
302
|
if (bidRequest.params.ext) {
|
|
@@ -305,10 +305,10 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
305
305
|
if (bidRequest.params.publisherSubId) {
|
|
306
306
|
slot.publishersubid = bidRequest.params.publisherSubId;
|
|
307
307
|
}
|
|
308
|
-
if (bidRequest.params.nativeCallback ||
|
|
308
|
+
if (bidRequest.params.nativeCallback || deepAccess(bidRequest, `mediaTypes.${NATIVE}`)) {
|
|
309
309
|
slot.native = true;
|
|
310
310
|
if (!checkNativeSendId(bidRequest)) {
|
|
311
|
-
|
|
311
|
+
logWarn(LOG_PREFIX + 'all native assets containing URL should be sent as placeholders with sendId(icon, image, clickUrl, displayUrl, privacyLink, privacyIcon)');
|
|
312
312
|
}
|
|
313
313
|
slot.sizes = parseSizes(retrieveBannerSizes(bidRequest), parseNativeSize);
|
|
314
314
|
} else {
|
|
@@ -316,7 +316,7 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
316
316
|
}
|
|
317
317
|
if (hasVideoMediaType(bidRequest)) {
|
|
318
318
|
const video = {
|
|
319
|
-
playersizes: parseSizes(
|
|
319
|
+
playersizes: parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'), parseSize),
|
|
320
320
|
mimes: bidRequest.mediaTypes.video.mimes,
|
|
321
321
|
protocols: bidRequest.mediaTypes.video.protocols,
|
|
322
322
|
maxduration: bidRequest.mediaTypes.video.maxduration,
|
|
@@ -367,7 +367,7 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
function retrieveBannerSizes(bidRequest) {
|
|
370
|
-
return
|
|
370
|
+
return deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes;
|
|
371
371
|
}
|
|
372
372
|
|
|
373
373
|
function parseSizes(sizes, parser) {
|
|
@@ -389,7 +389,7 @@ function parseNativeSize(size) {
|
|
|
389
389
|
}
|
|
390
390
|
|
|
391
391
|
function hasVideoMediaType(bidRequest) {
|
|
392
|
-
return
|
|
392
|
+
return deepAccess(bidRequest, 'mediaTypes.video') !== undefined;
|
|
393
393
|
}
|
|
394
394
|
|
|
395
395
|
function hasValidVideoMediaType(bidRequest) {
|
|
@@ -398,9 +398,9 @@ function hasValidVideoMediaType(bidRequest) {
|
|
|
398
398
|
var requiredMediaTypesParams = ['mimes', 'playerSize', 'maxduration', 'protocols', 'api', 'skip', 'placement', 'playbackmethod'];
|
|
399
399
|
|
|
400
400
|
requiredMediaTypesParams.forEach(function(param) {
|
|
401
|
-
if (
|
|
401
|
+
if (deepAccess(bidRequest, 'mediaTypes.video.' + param) === undefined && deepAccess(bidRequest, 'params.video.' + param) === undefined) {
|
|
402
402
|
isValid = false;
|
|
403
|
-
|
|
403
|
+
logError('Criteo Bid Adapter: mediaTypes.video.' + param + ' is required');
|
|
404
404
|
}
|
|
405
405
|
});
|
|
406
406
|
|
|
@@ -476,7 +476,7 @@ export function getFastBidUrl(fastBidVersion) {
|
|
|
476
476
|
} else if (fastBidVersion) {
|
|
477
477
|
let majorVersion = String(fastBidVersion).split('.')[0];
|
|
478
478
|
if (majorVersion < 102) {
|
|
479
|
-
|
|
479
|
+
logWarn('Specifying a Fastbid version which is not supporting version selection.')
|
|
480
480
|
}
|
|
481
481
|
version = '.' + fastBidVersion;
|
|
482
482
|
} else {
|
|
@@ -499,7 +499,7 @@ export function tryGetCriteoFastBid() {
|
|
|
499
499
|
const firstLine = fastBidFromStorage.substr(0, firstLineEndPosition).trim();
|
|
500
500
|
|
|
501
501
|
if (firstLine.substr(0, hashPrefix.length) !== hashPrefix) {
|
|
502
|
-
|
|
502
|
+
logWarn('No hash found in FastBid');
|
|
503
503
|
storage.removeDataFromLocalStorage(fastBidStorageKey);
|
|
504
504
|
} else {
|
|
505
505
|
// Remove the hash part from the locally stored value
|
|
@@ -507,10 +507,10 @@ export function tryGetCriteoFastBid() {
|
|
|
507
507
|
const publisherTag = fastBidFromStorage.substr(firstLineEndPosition + 1);
|
|
508
508
|
|
|
509
509
|
if (verify(publisherTag, publisherTagHash, FAST_BID_PUBKEY_N, FAST_BID_PUBKEY_E)) {
|
|
510
|
-
|
|
510
|
+
logInfo('Using Criteo FastBid');
|
|
511
511
|
eval(publisherTag); // eslint-disable-line no-eval
|
|
512
512
|
} else {
|
|
513
|
-
|
|
513
|
+
logWarn('Invalid Criteo FastBid found');
|
|
514
514
|
storage.removeDataFromLocalStorage(fastBidStorageKey);
|
|
515
515
|
}
|
|
516
516
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @requires module:modules/userId
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import
|
|
8
|
+
import { timestamp, parseUrl, triggerPixel, logError } from '../src/utils.js';
|
|
9
9
|
import { ajax } from '../src/ajax.js';
|
|
10
10
|
import { getRefererInfo } from '../src/refererDetection.js';
|
|
11
11
|
import { submodule } from '../src/hook.js';
|
|
@@ -20,10 +20,10 @@ const bundleStorageKey = 'cto_bundle';
|
|
|
20
20
|
const cookiesMaxAge = 13 * 30 * 24 * 60 * 60 * 1000;
|
|
21
21
|
|
|
22
22
|
const pastDateString = new Date(0).toString();
|
|
23
|
-
const expirationString = new Date(
|
|
23
|
+
const expirationString = new Date(timestamp() + cookiesMaxAge).toString();
|
|
24
24
|
|
|
25
25
|
function extractProtocolHost (url, returnOnlyHost = false) {
|
|
26
|
-
const parsedUrl =
|
|
26
|
+
const parsedUrl = parseUrl(url, {noDecodeWholeURL: true})
|
|
27
27
|
return returnOnlyHost
|
|
28
28
|
? `${parsedUrl.hostname}`
|
|
29
29
|
: `${parsedUrl.protocol}://${parsedUrl.hostname}${parsedUrl.port ? ':' + parsedUrl.port : ''}/`;
|
|
@@ -87,7 +87,7 @@ function callCriteoUserSync(parsedCriteoData, gdprString, callback) {
|
|
|
87
87
|
const jsonResponse = JSON.parse(response);
|
|
88
88
|
if (jsonResponse.acwsUrl) {
|
|
89
89
|
const urlsToCall = typeof jsonResponse.acwsUrl === 'string' ? [jsonResponse.acwsUrl] : jsonResponse.acwsUrl;
|
|
90
|
-
urlsToCall.forEach(url =>
|
|
90
|
+
urlsToCall.forEach(url => triggerPixel(url));
|
|
91
91
|
} else if (jsonResponse.bundle) {
|
|
92
92
|
saveOnAllStorages(bundleStorageKey, jsonResponse.bundle);
|
|
93
93
|
}
|
|
@@ -102,7 +102,7 @@ function callCriteoUserSync(parsedCriteoData, gdprString, callback) {
|
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
error: error => {
|
|
105
|
-
|
|
105
|
+
logError(`criteoIdSystem: unable to sync user id`, error);
|
|
106
106
|
callback();
|
|
107
107
|
}
|
|
108
108
|
};
|
package/modules/currency.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { logInfo, logWarn, logError, logMessage } from '../src/utils.js';
|
|
1
2
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
2
3
|
import { createBid } from '../src/bidfactory.js';
|
|
3
4
|
import { STATUS } from '../src/constants.json';
|
|
4
5
|
import { ajax } from '../src/ajax.js';
|
|
5
|
-
import * as utils from '../src/utils.js';
|
|
6
6
|
import { config } from '../src/config.js';
|
|
7
7
|
import { getHook } from '../src/hook.js';
|
|
8
8
|
|
|
@@ -70,11 +70,11 @@ export function setConfig(config) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
if (typeof config.adServerCurrency === 'string') {
|
|
73
|
-
|
|
73
|
+
logInfo('enabling currency support', arguments);
|
|
74
74
|
|
|
75
75
|
adServerCurrency = config.adServerCurrency;
|
|
76
76
|
if (config.conversionRateFile) {
|
|
77
|
-
|
|
77
|
+
logInfo('currency using override conversionRateFile:', config.conversionRateFile);
|
|
78
78
|
url = config.conversionRateFile;
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -99,7 +99,7 @@ export function setConfig(config) {
|
|
|
99
99
|
initCurrency(url);
|
|
100
100
|
} else {
|
|
101
101
|
// currency support is disabled, setting defaults
|
|
102
|
-
|
|
102
|
+
logInfo('disabling currency support');
|
|
103
103
|
resetCurrency();
|
|
104
104
|
}
|
|
105
105
|
if (typeof config.bidderCurrencyDefault === 'object') {
|
|
@@ -110,10 +110,10 @@ config.getConfig('currency', config => setConfig(config.currency));
|
|
|
110
110
|
|
|
111
111
|
function errorSettingsRates(msg) {
|
|
112
112
|
if (defaultRates) {
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
logWarn(msg);
|
|
114
|
+
logWarn('Currency failed loading rates, falling back to currency.defaultRates');
|
|
115
115
|
} else {
|
|
116
|
-
|
|
116
|
+
logError(msg);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
|
|
@@ -121,7 +121,7 @@ function initCurrency(url) {
|
|
|
121
121
|
conversionCache = {};
|
|
122
122
|
currencySupportEnabled = true;
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
logInfo('Installing addBidResponse decorator for currency module', arguments);
|
|
125
125
|
|
|
126
126
|
// Adding conversion function to prebid global for external module and on page use
|
|
127
127
|
getGlobal().convertCurrency = (cpm, fromCurrency, toCurrency) => parseFloat(cpm) * getCurrencyConversion(fromCurrency, toCurrency);
|
|
@@ -135,7 +135,7 @@ function initCurrency(url) {
|
|
|
135
135
|
success: function (response) {
|
|
136
136
|
try {
|
|
137
137
|
currencyRates = JSON.parse(response);
|
|
138
|
-
|
|
138
|
+
logInfo('currencyRates set to ' + JSON.stringify(currencyRates));
|
|
139
139
|
currencyRatesLoaded = true;
|
|
140
140
|
processBidResponseQueue();
|
|
141
141
|
} catch (e) {
|
|
@@ -149,7 +149,7 @@ function initCurrency(url) {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
function resetCurrency() {
|
|
152
|
-
|
|
152
|
+
logInfo('Uninstalling addBidResponse decorator for currency module', arguments);
|
|
153
153
|
|
|
154
154
|
getHook('addBidResponse').getHooks({hook: addBidResponseHook}).remove();
|
|
155
155
|
delete getGlobal().convertCurrency;
|
|
@@ -172,7 +172,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
|
|
|
172
172
|
if (bidderCurrencyDefault[bidder]) {
|
|
173
173
|
let currencyDefault = bidderCurrencyDefault[bidder];
|
|
174
174
|
if (bid.currency && currencyDefault !== bid.currency) {
|
|
175
|
-
|
|
175
|
+
logWarn(`Currency default '${bidder}: ${currencyDefault}' ignored. adapter specified '${bid.currency}'`);
|
|
176
176
|
} else {
|
|
177
177
|
bid.currency = currencyDefault;
|
|
178
178
|
}
|
|
@@ -180,7 +180,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
|
|
|
180
180
|
|
|
181
181
|
// default to USD if currency not set
|
|
182
182
|
if (!bid.currency) {
|
|
183
|
-
|
|
183
|
+
logWarn('Currency not specified on bid. Defaulted to "USD"');
|
|
184
184
|
bid.currency = 'USD';
|
|
185
185
|
}
|
|
186
186
|
|
|
@@ -218,7 +218,7 @@ function wrapFunction(fn, context, params) {
|
|
|
218
218
|
bid.currency = adServerCurrency;
|
|
219
219
|
}
|
|
220
220
|
} catch (e) {
|
|
221
|
-
|
|
221
|
+
logWarn('Returning NO_BID, getCurrencyConversion threw error: ', e);
|
|
222
222
|
params[1] = createBid(STATUS.NO_BID, {
|
|
223
223
|
bidder: bid.bidderCode || bid.bidder,
|
|
224
224
|
bidId: bid.requestId
|
|
@@ -235,7 +235,7 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
|
|
|
235
235
|
let cacheKey = `${fromCurrency}->${toCurrency}`;
|
|
236
236
|
if (cacheKey in conversionCache) {
|
|
237
237
|
conversionRate = conversionCache[cacheKey];
|
|
238
|
-
|
|
238
|
+
logMessage('Using conversionCache value ' + conversionRate + ' for ' + cacheKey);
|
|
239
239
|
} else if (currencySupportEnabled === false) {
|
|
240
240
|
if (fromCurrency === 'USD') {
|
|
241
241
|
conversionRate = 1;
|
|
@@ -253,7 +253,7 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
|
|
|
253
253
|
throw new Error('Specified adServerCurrency in config \'' + toCurrency + '\' not found in the currency rates file');
|
|
254
254
|
}
|
|
255
255
|
conversionRate = rates[toCurrency];
|
|
256
|
-
|
|
256
|
+
logInfo('getCurrencyConversion using direct ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
|
|
257
257
|
} else if (toCurrency in currencyRates.conversions) {
|
|
258
258
|
// using reciprocal of conversion rate from toCurrency to fromCurrency
|
|
259
259
|
rates = currencyRates.conversions[toCurrency];
|
|
@@ -262,7 +262,7 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
|
|
|
262
262
|
throw new Error('Specified fromCurrency \'' + fromCurrency + '\' not found in the currency rates file');
|
|
263
263
|
}
|
|
264
264
|
conversionRate = roundFloat(1 / rates[fromCurrency], CURRENCY_RATE_PRECISION);
|
|
265
|
-
|
|
265
|
+
logInfo('getCurrencyConversion using reciprocal ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
|
|
266
266
|
} else {
|
|
267
267
|
// first defined currency base used as intermediary
|
|
268
268
|
var anyBaseCurrency = Object.keys(currencyRates.conversions)[0];
|
|
@@ -280,11 +280,11 @@ function getCurrencyConversion(fromCurrency, toCurrency = adServerCurrency) {
|
|
|
280
280
|
var fromIntermediateConversionRate = currencyRates.conversions[anyBaseCurrency][toCurrency];
|
|
281
281
|
|
|
282
282
|
conversionRate = roundFloat(toIntermediateConversionRate * fromIntermediateConversionRate, CURRENCY_RATE_PRECISION);
|
|
283
|
-
|
|
283
|
+
logInfo('getCurrencyConversion using intermediate ' + fromCurrency + ' thru ' + anyBaseCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate);
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
if (!(cacheKey in conversionCache)) {
|
|
287
|
-
|
|
287
|
+
logMessage('Adding conversionCache value ' + conversionRate + ' for ' + cacheKey);
|
|
288
288
|
conversionCache[cacheKey] = conversionRate;
|
|
289
289
|
}
|
|
290
290
|
return conversionRate;
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import { getRefererInfo } from '../src/refererDetection.js';
|
|
3
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
4
|
+
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
5
|
+
import { OUTSTREAM } from '../src/video.js';
|
|
6
|
+
import {
|
|
7
|
+
isArray,
|
|
8
|
+
isNumber,
|
|
9
|
+
generateUUID,
|
|
10
|
+
parseSizesInput,
|
|
11
|
+
deepAccess,
|
|
12
|
+
getParameterByName,
|
|
13
|
+
getValue,
|
|
14
|
+
getBidIdParameter,
|
|
15
|
+
logError,
|
|
16
|
+
logWarn,
|
|
17
|
+
} from '../src/utils.js';
|
|
18
|
+
import { Renderer } from '../src/Renderer.js';
|
|
19
|
+
import find from 'core-js-pure/features/array/find.js';
|
|
20
|
+
|
|
21
|
+
// ------------------------------------
|
|
22
|
+
const BIDDER_CODE = 'cwire';
|
|
23
|
+
export const ENDPOINT_URL = 'https://embed.cwi.re/delivery/prebid';
|
|
24
|
+
export const RENDERER_URL = 'https://cdn.cwi.re/prebid/renderer/LATEST/renderer.min.js';
|
|
25
|
+
// ------------------------------------
|
|
26
|
+
export const CW_PAGE_VIEW_ID = generateUUID();
|
|
27
|
+
const LS_CWID_KEY = 'cw_cwid';
|
|
28
|
+
const CW_GROUPS_QUERY = 'cwgroups';
|
|
29
|
+
|
|
30
|
+
const storage = getStorageManager();
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* ------------------------------------
|
|
34
|
+
* ------------------------------------
|
|
35
|
+
* @param bid
|
|
36
|
+
* @returns {Array<string>}
|
|
37
|
+
*/
|
|
38
|
+
export function getSlotSizes(bid) {
|
|
39
|
+
return parseSizesInput(getAllMediaSizes(bid));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* ------------------------------------
|
|
44
|
+
* ------------------------------------
|
|
45
|
+
* @param bid
|
|
46
|
+
* @returns {*[]}
|
|
47
|
+
*/
|
|
48
|
+
export function getAllMediaSizes(bid) {
|
|
49
|
+
let playerSizes = deepAccess(bid, 'mediaTypes.video.playerSize');
|
|
50
|
+
let videoSizes = deepAccess(bid, 'mediaTypes.video.sizes');
|
|
51
|
+
let bannerSizes = deepAccess(bid, 'mediaTypes.banner.sizes');
|
|
52
|
+
|
|
53
|
+
const sizes = [];
|
|
54
|
+
|
|
55
|
+
if (isArray(playerSizes)) {
|
|
56
|
+
playerSizes.forEach((s) => {
|
|
57
|
+
sizes.push(s);
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (isArray(videoSizes)) {
|
|
62
|
+
videoSizes.forEach((s) => {
|
|
63
|
+
sizes.push(s);
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (isArray(bannerSizes)) {
|
|
68
|
+
bannerSizes.forEach((s) => {
|
|
69
|
+
sizes.push(s);
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
return sizes;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const getQueryVariable = (variable) => {
|
|
76
|
+
let value = getParameterByName(variable);
|
|
77
|
+
if (value === '') {
|
|
78
|
+
value = null;
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* ------------------------------------
|
|
85
|
+
* ------------------------------------
|
|
86
|
+
* @param validBidRequests
|
|
87
|
+
* @returns {*[]}
|
|
88
|
+
*/
|
|
89
|
+
export const mapSlotsData = function(validBidRequests) {
|
|
90
|
+
const slots = [];
|
|
91
|
+
validBidRequests.forEach(bid => {
|
|
92
|
+
const bidObj = {};
|
|
93
|
+
// get the pacement and page ids
|
|
94
|
+
let placementId = getValue(bid.params, 'placementId');
|
|
95
|
+
let pageId = getValue(bid.params, 'pageId');
|
|
96
|
+
let adUnitElementId = getValue(bid.params, 'adUnitElementId');
|
|
97
|
+
// get the rest of the auction/bid/transaction info
|
|
98
|
+
bidObj.auctionId = getBidIdParameter('auctionId', bid);
|
|
99
|
+
bidObj.adUnitCode = getBidIdParameter('adUnitCode', bid);
|
|
100
|
+
bidObj.adUnitElementId = adUnitElementId;
|
|
101
|
+
bidObj.bidId = getBidIdParameter('bidId', bid);
|
|
102
|
+
bidObj.bidderRequestId = getBidIdParameter('bidderRequestId', bid);
|
|
103
|
+
bidObj.placementId = placementId;
|
|
104
|
+
bidObj.pageId = pageId;
|
|
105
|
+
bidObj.mediaTypes = getBidIdParameter('mediaTypes', bid);
|
|
106
|
+
bidObj.transactionId = getBidIdParameter('transactionId', bid);
|
|
107
|
+
bidObj.sizes = getSlotSizes(bid);
|
|
108
|
+
slots.push(bidObj);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
return slots;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export const spec = {
|
|
115
|
+
code: BIDDER_CODE,
|
|
116
|
+
supportedMediaTypes: [BANNER, VIDEO],
|
|
117
|
+
/**
|
|
118
|
+
* Determines whether or not the given bid request is valid.
|
|
119
|
+
*
|
|
120
|
+
* @param {BidRequest} bid The bid params to validate.
|
|
121
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
122
|
+
*/
|
|
123
|
+
isBidRequestValid: function(bid) {
|
|
124
|
+
bid.params = bid.params || {};
|
|
125
|
+
|
|
126
|
+
// if ad unit elemt id not provided - use adUnitCode by default
|
|
127
|
+
if (!bid.params.adUnitElementId) {
|
|
128
|
+
bid.params.adUnitElementId = bid.code;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (!bid.params.placementId || !isNumber(bid.params.placementId)) {
|
|
132
|
+
logError('placementId not provided or invalid');
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (!bid.params.pageId || !isNumber(bid.params.pageId)) {
|
|
137
|
+
logError('pageId not provided');
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return true;
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* ------------------------------------
|
|
146
|
+
* Make a server request from the
|
|
147
|
+
* list of BidRequests.
|
|
148
|
+
* ------------------------------------
|
|
149
|
+
* @param {validBidRequests[]} - an array of bids
|
|
150
|
+
* @return ServerRequest Info describing the request to the server.
|
|
151
|
+
*/
|
|
152
|
+
buildRequests: function(validBidRequests, bidderRequest) {
|
|
153
|
+
let slots = [];
|
|
154
|
+
let referer;
|
|
155
|
+
try {
|
|
156
|
+
referer = getRefererInfo().referer;
|
|
157
|
+
slots = mapSlotsData(validBidRequests);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
logWarn(e);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
let refgroups = [];
|
|
163
|
+
|
|
164
|
+
const rgQuery = getQueryVariable(CW_GROUPS_QUERY);
|
|
165
|
+
if (rgQuery !== null) {
|
|
166
|
+
refgroups = rgQuery.split(',');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const localStorageCWID = storage.localStorageIsEnabled() ? storage.getDataFromLocalStorage(LS_CWID_KEY) : null;
|
|
170
|
+
|
|
171
|
+
const payload = {
|
|
172
|
+
cwid: localStorageCWID,
|
|
173
|
+
refgroups,
|
|
174
|
+
slots: slots,
|
|
175
|
+
httpRef: referer || '',
|
|
176
|
+
pageViewId: CW_PAGE_VIEW_ID,
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
method: 'POST',
|
|
181
|
+
url: ENDPOINT_URL,
|
|
182
|
+
data: payload
|
|
183
|
+
};
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Unpack the response from the server into a list of bids.
|
|
188
|
+
*
|
|
189
|
+
* @param {ServerResponse} serverResponse A successful response from the server.
|
|
190
|
+
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
191
|
+
*/
|
|
192
|
+
interpretResponse: function(serverResponse, bidRequest) {
|
|
193
|
+
const bidResponses = [];
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
if (typeof bidRequest.data === 'string') {
|
|
197
|
+
bidRequest.data = JSON.parse(bidRequest.data);
|
|
198
|
+
}
|
|
199
|
+
const serverBody = serverResponse.body;
|
|
200
|
+
serverBody.bids.forEach((br) => {
|
|
201
|
+
const bidReq = find(bidRequest.data.slots, bid => bid.bidId === br.requestId);
|
|
202
|
+
|
|
203
|
+
let mediaType = BANNER;
|
|
204
|
+
|
|
205
|
+
const bidResponse = {
|
|
206
|
+
requestId: br.requestId,
|
|
207
|
+
cpm: br.cpm,
|
|
208
|
+
bidderCode: BIDDER_CODE,
|
|
209
|
+
width: br.dimensions[0],
|
|
210
|
+
height: br.dimensions[1],
|
|
211
|
+
creativeId: br.creativeId,
|
|
212
|
+
currency: br.currency,
|
|
213
|
+
netRevenue: br.netRevenue,
|
|
214
|
+
ttl: br.ttl,
|
|
215
|
+
meta: {
|
|
216
|
+
advertiserDomains: br.adomains ? br.advertiserDomains : [],
|
|
217
|
+
},
|
|
218
|
+
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// ------------------------------------
|
|
222
|
+
// IF BANNER
|
|
223
|
+
// ------------------------------------
|
|
224
|
+
|
|
225
|
+
if (deepAccess(bidReq, 'mediaTypes.banner')) {
|
|
226
|
+
bidResponse.ad = br.html;
|
|
227
|
+
}
|
|
228
|
+
// ------------------------------------
|
|
229
|
+
// IF VIDEO
|
|
230
|
+
// ------------------------------------
|
|
231
|
+
if (deepAccess(bidReq, 'mediaTypes.video')) {
|
|
232
|
+
mediaType = VIDEO;
|
|
233
|
+
bidResponse.vastXml = br.vastXml;
|
|
234
|
+
bidResponse.videoScript = br.html;
|
|
235
|
+
const mediaTypeContext = deepAccess(bidReq, 'mediaTypes.video.context');
|
|
236
|
+
if (mediaTypeContext === OUTSTREAM) {
|
|
237
|
+
const r = Renderer.install({
|
|
238
|
+
id: bidResponse.requestId,
|
|
239
|
+
adUnitCode: bidReq.adUnitCode,
|
|
240
|
+
url: RENDERER_URL,
|
|
241
|
+
loaded: false,
|
|
242
|
+
config: {
|
|
243
|
+
...deepAccess(bidReq, 'mediaTypes.video'),
|
|
244
|
+
...deepAccess(br, 'outstream', {})
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// set renderer
|
|
249
|
+
try {
|
|
250
|
+
bidResponse.renderer = r;
|
|
251
|
+
bidResponse.renderer.setRender(function(bid) {
|
|
252
|
+
if (window.CWIRE && window.CWIRE.outstream) {
|
|
253
|
+
window.CWIRE.outstream.renderAd(bid);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
} catch (err) {
|
|
257
|
+
logWarn('Prebid Error calling setRender on newRenderer', err);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
bidResponse.mediaType = mediaType;
|
|
263
|
+
bidResponses.push(bidResponse);
|
|
264
|
+
});
|
|
265
|
+
} catch (e) {
|
|
266
|
+
logWarn(e);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return bidResponses;
|
|
270
|
+
},
|
|
271
|
+
}
|
|
272
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: C-WIRE Bid Adapter
|
|
4
|
+
Module Type: Adagio Adapter
|
|
5
|
+
Maintainer: dragan@cwire.ch
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
Connects to C-WIRE demand source to fetch bids.
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Below, the list of C-WIRE params and where they can be set.
|
|
15
|
+
|
|
16
|
+
| Param name | Global config | AdUnit config | Type | Required |
|
|
17
|
+
| ---------- | ------------- | ------------- | ---- | ---------|
|
|
18
|
+
| pageId | | x | number | YES |
|
|
19
|
+
| placementId | | x | number | YES |
|
|
20
|
+
| adUnitElementId | | x | string | NO |
|
|
21
|
+
|
|
22
|
+
### adUnit configuration
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
var adUnits = [
|
|
26
|
+
{
|
|
27
|
+
code: 'target_div_id', // REQUIRED
|
|
28
|
+
bids: [{
|
|
29
|
+
bidder: 'cwire',
|
|
30
|
+
mediaTypes: {
|
|
31
|
+
banner: {
|
|
32
|
+
sizes: [[1, 1]],
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
params: {
|
|
36
|
+
pageId: 1422, // required - number
|
|
37
|
+
placementId: 2211521, // required - number
|
|
38
|
+
adUnitElementId: 'other_div', // optional, div id to write to, if not set it will default to ad unit code
|
|
39
|
+
}
|
|
40
|
+
}]
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
```
|