prebid.js 7.26.0 → 7.27.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/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -0
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/bucksenseBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -0
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +200 -196
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -0
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/modules/admaticBidAdapter.js +10 -1
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/eplanningBidAdapter.js +2 -6
- package/modules/fluctBidAdapter.js +5 -0
- package/modules/gdprEnforcement.js +26 -24
- package/modules/genericAnalyticsAdapter.js +157 -0
- package/modules/geoedgeRtdProvider.js +22 -0
- package/modules/glomexBidAdapter.js +2 -0
- package/modules/gravitoIdSystem.js +3 -4
- package/modules/gridBidAdapter.js +1 -1
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +176 -0
- package/modules/growthCodeAnalyticsAdapter.md +41 -0
- package/modules/impactifyBidAdapter.js +19 -1
- package/modules/jwplayerRtdProvider.js +1 -2
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/pubCommonId.js +2 -1
- package/modules/pubProvidedIdSystem.js +2 -0
- package/modules/rasBidAdapter.js +8 -3
- package/modules/rasBidAdapter.md +16 -15
- package/modules/redtramBidAdapter.js +155 -0
- package/modules/redtramBidAdapter.md +33 -0
- package/modules/riseBidAdapter.js +15 -0
- package/modules/riseBidAdapter.md +3 -3
- package/modules/rtbhouseBidAdapter.js +90 -29
- package/modules/rubiconBidAdapter.js +2 -1
- package/modules/seedtagBidAdapter.js +67 -56
- package/modules/seedtagBidAdapter.md +60 -0
- package/modules/sharedIdSystem.js +3 -1
- package/modules/smartxBidAdapter.js +1 -1
- package/modules/smnBidAdapter.md +52 -0
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +4 -0
- package/modules/vidazooBidAdapter.js +11 -1
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +10 -4
- package/modules/yieldliftBidAdapter.js +3 -3
- package/package.json +1 -1
- package/src/auction.js +19 -3
- package/src/consentHandler.js +8 -0
- package/src/events.js +4 -0
- package/src/native.js +31 -20
- package/src/refererDetection.js +6 -1
- package/src/storageManager.js +6 -3
- package/test/helpers/analytics.js +34 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +86 -0
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
- package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
- package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
- package/test/spec/modules/fpdModule_spec.js +1 -1
- package/test/spec/modules/gdprEnforcement_spec.js +115 -68
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
- package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
- package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
- package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
- package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
- package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
- package/test/spec/modules/rasBidAdapter_spec.js +5 -1
- package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
- package/test/spec/modules/riseBidAdapter_spec.js +24 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +14 -0
- package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/native_spec.js +68 -56
- package/test/spec/refererDetection_spec.js +45 -7
- package/test/spec/unit/core/storageManager_spec.js +2 -1
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { isArray, _map, triggerPixel } from '../src/utils.js';
|
|
2
|
-
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
3
|
-
import { VIDEO, BANNER } from '../src/mediaTypes.js'
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import { VIDEO, BANNER } from '../src/mediaTypes.js';
|
|
4
4
|
import { config } from '../src/config.js';
|
|
5
5
|
|
|
6
6
|
const BIDDER_CODE = 'seedtag';
|
|
7
7
|
const SEEDTAG_ALIAS = 'st';
|
|
8
8
|
const SEEDTAG_SSP_ENDPOINT = 'https://s.seedtag.com/c/hb/bid';
|
|
9
9
|
const SEEDTAG_SSP_ONTIMEOUT_ENDPOINT = 'https://s.seedtag.com/se/hb/timeout';
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
inArticle
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
10
|
+
const ALLOWED_DISPLAY_PLACEMENTS = [
|
|
11
|
+
'inScreen',
|
|
12
|
+
'inImage',
|
|
13
|
+
'inArticle',
|
|
14
|
+
'inBanner',
|
|
15
|
+
];
|
|
17
16
|
|
|
18
17
|
// Global Vendor List Id
|
|
19
18
|
// https://iabeurope.eu/vendor-list-tcf-v2-0/
|
|
@@ -21,27 +20,33 @@ const GVLID = 157;
|
|
|
21
20
|
|
|
22
21
|
const mediaTypesMap = {
|
|
23
22
|
[BANNER]: 'display',
|
|
24
|
-
[VIDEO]: 'video'
|
|
23
|
+
[VIDEO]: 'video',
|
|
25
24
|
};
|
|
26
25
|
|
|
27
26
|
const deviceConnection = {
|
|
28
27
|
FIXED: 'fixed',
|
|
29
28
|
MOBILE: 'mobile',
|
|
30
|
-
UNKNOWN: 'unknown'
|
|
29
|
+
UNKNOWN: 'unknown',
|
|
31
30
|
};
|
|
32
31
|
|
|
33
32
|
const getConnectionType = () => {
|
|
34
|
-
const connection =
|
|
33
|
+
const connection =
|
|
34
|
+
navigator.connection ||
|
|
35
|
+
navigator.mozConnection ||
|
|
36
|
+
navigator.webkitConnection ||
|
|
37
|
+
{};
|
|
35
38
|
switch (connection.type || connection.effectiveType) {
|
|
36
39
|
case 'wifi':
|
|
37
40
|
case 'ethernet':
|
|
38
|
-
return deviceConnection.FIXED
|
|
41
|
+
return deviceConnection.FIXED;
|
|
39
42
|
case 'cellular':
|
|
40
43
|
case 'wimax':
|
|
41
|
-
return deviceConnection.MOBILE
|
|
44
|
+
return deviceConnection.MOBILE;
|
|
42
45
|
default:
|
|
43
|
-
const isMobile =
|
|
44
|
-
|
|
46
|
+
const isMobile =
|
|
47
|
+
/iPad|iPhone|iPod/.test(navigator.userAgent) ||
|
|
48
|
+
/android/i.test(navigator.userAgent);
|
|
49
|
+
return isMobile ? deviceConnection.UNKNOWN : deviceConnection.FIXED;
|
|
45
50
|
}
|
|
46
51
|
};
|
|
47
52
|
|
|
@@ -52,24 +57,32 @@ function mapMediaType(seedtagMediaType) {
|
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
function hasVideoMediaType(bid) {
|
|
55
|
-
return
|
|
60
|
+
return !!bid.mediaTypes && !!bid.mediaTypes.video;
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
function
|
|
63
|
+
function hasMandatoryDisplayParams(bid) {
|
|
64
|
+
const p = bid.params;
|
|
59
65
|
return (
|
|
60
|
-
!!
|
|
61
|
-
!!
|
|
62
|
-
|
|
63
|
-
!!ALLOWED_PLACEMENTS[params.placement]
|
|
66
|
+
!!p.publisherId &&
|
|
67
|
+
!!p.adUnitId &&
|
|
68
|
+
ALLOWED_DISPLAY_PLACEMENTS.indexOf(p.placement) > -1
|
|
64
69
|
);
|
|
65
70
|
}
|
|
66
71
|
|
|
67
72
|
function hasMandatoryVideoParams(bid) {
|
|
68
|
-
const videoParams = getVideoParams(bid)
|
|
73
|
+
const videoParams = getVideoParams(bid);
|
|
69
74
|
|
|
70
|
-
return
|
|
75
|
+
return (
|
|
76
|
+
!!bid.params.publisherId &&
|
|
77
|
+
!!bid.params.adUnitId &&
|
|
78
|
+
hasVideoMediaType(bid) &&
|
|
79
|
+
!!videoParams.playerSize &&
|
|
71
80
|
isArray(videoParams.playerSize) &&
|
|
72
|
-
videoParams.playerSize.length > 0
|
|
81
|
+
videoParams.playerSize.length > 0 &&
|
|
82
|
+
// only instream is supported for video
|
|
83
|
+
videoParams.context === 'instream' &&
|
|
84
|
+
bid.params.placement === 'inStream'
|
|
85
|
+
);
|
|
73
86
|
}
|
|
74
87
|
|
|
75
88
|
function buildBidRequest(validBidRequest) {
|
|
@@ -89,15 +102,11 @@ function buildBidRequest(validBidRequest) {
|
|
|
89
102
|
adUnitId: params.adUnitId,
|
|
90
103
|
adUnitCode: validBidRequest.adUnitCode,
|
|
91
104
|
placement: params.placement,
|
|
92
|
-
requestCount: validBidRequest.bidderRequestsCount || 1 // FIXME : in unit test the parameter bidderRequestsCount is undefined
|
|
105
|
+
requestCount: validBidRequest.bidderRequestsCount || 1, // FIXME : in unit test the parameter bidderRequestsCount is undefined
|
|
93
106
|
};
|
|
94
107
|
|
|
95
|
-
if (params.adPosition) {
|
|
96
|
-
bidRequest.adPosition = params.adPosition;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
108
|
if (hasVideoMediaType(validBidRequest)) {
|
|
100
|
-
bidRequest.videoParams = getVideoParams(validBidRequest)
|
|
109
|
+
bidRequest.videoParams = getVideoParams(validBidRequest);
|
|
101
110
|
}
|
|
102
111
|
|
|
103
112
|
return bidRequest;
|
|
@@ -113,13 +122,7 @@ function getVideoParams(validBidRequest) {
|
|
|
113
122
|
videoParams.h = videoParams.playerSize[0][1];
|
|
114
123
|
}
|
|
115
124
|
|
|
116
|
-
|
|
117
|
-
// override video params from seedtag bidder params
|
|
118
|
-
Object.keys(bidderVideoParams).forEach(key => {
|
|
119
|
-
videoParams[key] = validBidRequest.params.video[key]
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
return videoParams
|
|
125
|
+
return videoParams;
|
|
123
126
|
}
|
|
124
127
|
|
|
125
128
|
function buildBidResponse(seedtagBid) {
|
|
@@ -136,8 +139,11 @@ function buildBidResponse(seedtagBid) {
|
|
|
136
139
|
ttl: seedtagBid.ttl,
|
|
137
140
|
nurl: seedtagBid.nurl,
|
|
138
141
|
meta: {
|
|
139
|
-
advertiserDomains:
|
|
140
|
-
|
|
142
|
+
advertiserDomains:
|
|
143
|
+
seedtagBid && seedtagBid.adomain && seedtagBid.adomain.length > 0
|
|
144
|
+
? seedtagBid.adomain
|
|
145
|
+
: [],
|
|
146
|
+
},
|
|
141
147
|
};
|
|
142
148
|
|
|
143
149
|
if (mediaType === VIDEO) {
|
|
@@ -181,16 +187,21 @@ function ttfb() {
|
|
|
181
187
|
export function getTimeoutUrl(data) {
|
|
182
188
|
let queryParams = '';
|
|
183
189
|
if (
|
|
184
|
-
isArray(data) &&
|
|
185
|
-
|
|
190
|
+
isArray(data) &&
|
|
191
|
+
data[0] &&
|
|
192
|
+
isArray(data[0].params) &&
|
|
193
|
+
data[0].params[0]
|
|
186
194
|
) {
|
|
187
195
|
const params = data[0].params[0];
|
|
188
|
-
const timeout = data[0].timeout
|
|
196
|
+
const timeout = data[0].timeout;
|
|
189
197
|
|
|
190
198
|
queryParams =
|
|
191
|
-
'?publisherToken=' +
|
|
192
|
-
|
|
193
|
-
'&
|
|
199
|
+
'?publisherToken=' +
|
|
200
|
+
params.publisherId +
|
|
201
|
+
'&adUnitId=' +
|
|
202
|
+
params.adUnitId +
|
|
203
|
+
'&timeout=' +
|
|
204
|
+
timeout;
|
|
194
205
|
}
|
|
195
206
|
return SEEDTAG_SSP_ONTIMEOUT_ENDPOINT + queryParams;
|
|
196
207
|
}
|
|
@@ -208,8 +219,8 @@ export const spec = {
|
|
|
208
219
|
*/
|
|
209
220
|
isBidRequestValid(bid) {
|
|
210
221
|
return hasVideoMediaType(bid)
|
|
211
|
-
?
|
|
212
|
-
:
|
|
222
|
+
? hasMandatoryVideoParams(bid)
|
|
223
|
+
: hasMandatoryDisplayParams(bid);
|
|
213
224
|
},
|
|
214
225
|
|
|
215
226
|
/**
|
|
@@ -237,24 +248,24 @@ export const spec = {
|
|
|
237
248
|
payload['cd'] = bidderRequest.gdprConsent.consentString;
|
|
238
249
|
}
|
|
239
250
|
if (bidderRequest.uspConsent) {
|
|
240
|
-
payload['uspConsent'] = bidderRequest.uspConsent
|
|
251
|
+
payload['uspConsent'] = bidderRequest.uspConsent;
|
|
241
252
|
}
|
|
242
253
|
|
|
243
254
|
if (validBidRequests[0].schain) {
|
|
244
255
|
payload.schain = validBidRequests[0].schain;
|
|
245
256
|
}
|
|
246
257
|
|
|
247
|
-
let coppa = config.getConfig('coppa')
|
|
258
|
+
let coppa = config.getConfig('coppa');
|
|
248
259
|
if (coppa) {
|
|
249
|
-
payload.coppa = coppa
|
|
260
|
+
payload.coppa = coppa;
|
|
250
261
|
}
|
|
251
262
|
|
|
252
|
-
const payloadString = JSON.stringify(payload)
|
|
263
|
+
const payloadString = JSON.stringify(payload);
|
|
253
264
|
return {
|
|
254
265
|
method: 'POST',
|
|
255
266
|
url: SEEDTAG_SSP_ENDPOINT,
|
|
256
|
-
data: payloadString
|
|
257
|
-
}
|
|
267
|
+
data: payloadString,
|
|
268
|
+
};
|
|
258
269
|
},
|
|
259
270
|
|
|
260
271
|
/**
|
|
@@ -308,6 +319,6 @@ export const spec = {
|
|
|
308
319
|
if (bid && bid.nurl) {
|
|
309
320
|
triggerPixel(bid.nurl);
|
|
310
321
|
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
322
|
+
},
|
|
323
|
+
};
|
|
313
324
|
registerBidder(spec);
|
|
@@ -59,3 +59,63 @@ const adUnits = [
|
|
|
59
59
|
}
|
|
60
60
|
]
|
|
61
61
|
```
|
|
62
|
+
|
|
63
|
+
## InBanner
|
|
64
|
+
```js
|
|
65
|
+
const adUnits = [
|
|
66
|
+
{
|
|
67
|
+
code: '/21804003197/prebid_test_300x250',
|
|
68
|
+
mediaTypes: {
|
|
69
|
+
banner: {
|
|
70
|
+
sizes: [[300, 250]]
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
bids: [
|
|
74
|
+
{
|
|
75
|
+
bidder: 'seedtag',
|
|
76
|
+
params: {
|
|
77
|
+
publisherId: '0000-0000-01', // required
|
|
78
|
+
adUnitId: '0000', // required
|
|
79
|
+
placement: 'inBanner', // required
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## inStream Video
|
|
88
|
+
```js
|
|
89
|
+
var adUnits = [{
|
|
90
|
+
code: 'video',
|
|
91
|
+
mediaTypes: {
|
|
92
|
+
video: {
|
|
93
|
+
context: 'instream', // required
|
|
94
|
+
playerSize: [640, 360], // required
|
|
95
|
+
// Video object as specified in OpenRTB 2.5
|
|
96
|
+
mimes: ['video/mp4'], // recommended
|
|
97
|
+
minduration: 5, // optional
|
|
98
|
+
maxduration: 60, // optional
|
|
99
|
+
boxingallowed: 1, // optional
|
|
100
|
+
skip: 1, // optional
|
|
101
|
+
startdelay: 1, // optional
|
|
102
|
+
linearity: 1, // optional
|
|
103
|
+
battr: [1, 2], // optional
|
|
104
|
+
maxbitrate: 10, // optional
|
|
105
|
+
playbackmethod: [1], // optional
|
|
106
|
+
delivery: [1], // optional
|
|
107
|
+
placement: 1, // optional
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
bids: [
|
|
111
|
+
{
|
|
112
|
+
bidder: 'seedtag',
|
|
113
|
+
params: {
|
|
114
|
+
publisherId: '0000-0000-01', // required
|
|
115
|
+
adUnitId: '0000', // required
|
|
116
|
+
placement: 'inStream', // required
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}];
|
|
121
|
+
```
|
|
@@ -9,8 +9,9 @@ import { parseUrl, buildUrl, triggerPixel, logInfo, hasDeviceAccess, generateUUI
|
|
|
9
9
|
import {submodule} from '../src/hook.js';
|
|
10
10
|
import { coppaDataHandler } from '../src/adapterManager.js';
|
|
11
11
|
import {getStorageManager} from '../src/storageManager.js';
|
|
12
|
+
import {VENDORLESS_GVLID} from '../src/consentHandler.js';
|
|
12
13
|
|
|
13
|
-
export const storage = getStorageManager({moduleName: 'pubCommonId'});
|
|
14
|
+
export const storage = getStorageManager({moduleName: 'pubCommonId', gvlid: VENDORLESS_GVLID});
|
|
14
15
|
const COOKIE = 'cookie';
|
|
15
16
|
const LOCAL_STORAGE = 'html5';
|
|
16
17
|
const OPTOUT_NAME = '_pubcid_optout';
|
|
@@ -73,6 +74,7 @@ export const sharedIdSystemSubmodule = {
|
|
|
73
74
|
*/
|
|
74
75
|
name: 'sharedId',
|
|
75
76
|
aliasName: 'pubCommonId',
|
|
77
|
+
gvlid: VENDORLESS_GVLID,
|
|
76
78
|
|
|
77
79
|
/**
|
|
78
80
|
* decode the stored id value for passing to bid requests
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: SMN Bidder Adapter
|
|
4
|
+
Module Type: Bidder Adapter
|
|
5
|
+
Maintainer: smnoffice.belgrade@gmail.com
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
Connects to SMN demand source to fetch bids.
|
|
10
|
+
Banner and Video formats are supported.
|
|
11
|
+
Please use ```smn``` as the bidder code.
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
```
|
|
15
|
+
var adUnits = [
|
|
16
|
+
{
|
|
17
|
+
code: 'desktop-banner-ad-div',
|
|
18
|
+
sizes: [[300, 250]], // a display size
|
|
19
|
+
bids: [
|
|
20
|
+
{
|
|
21
|
+
bidder: "smn",
|
|
22
|
+
params: {
|
|
23
|
+
zone: '2eb6bd58-865c-47ce-af7f-a918108c3fd2'
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
},{
|
|
28
|
+
code: 'mobile-banner-ad-div',
|
|
29
|
+
sizes: [[300, 50]], // a mobile size
|
|
30
|
+
bids: [
|
|
31
|
+
{
|
|
32
|
+
bidder: "smn",
|
|
33
|
+
params: {
|
|
34
|
+
zone: '62211486-c50b-4356-9f0f-411778d31fcc'
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},{
|
|
39
|
+
code: 'video-ad',
|
|
40
|
+
sizes: [[300, 50]],
|
|
41
|
+
mediaType: 'video',
|
|
42
|
+
bids: [
|
|
43
|
+
{
|
|
44
|
+
bidder: "smn",
|
|
45
|
+
params: {
|
|
46
|
+
zone: 'ebeb1e79-8cb4-4473-b2d0-2e24b7ff47fd'
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
```
|
|
@@ -29,7 +29,7 @@ export const tripleliftAdapterSpec = {
|
|
|
29
29
|
tlCall = tryAppendQueryString(tlCall, 'v', '$prebid.version$');
|
|
30
30
|
|
|
31
31
|
if (bidderRequest && bidderRequest.refererInfo) {
|
|
32
|
-
let referrer = bidderRequest
|
|
32
|
+
let referrer = bidderRequest.refererInfo.page;
|
|
33
33
|
tlCall = tryAppendQueryString(tlCall, 'referrer', referrer);
|
|
34
34
|
}
|
|
35
35
|
|
package/modules/ttdBidAdapter.js
CHANGED
|
@@ -2,6 +2,7 @@ import { _each, deepAccess, parseSizesInput, parseUrl, uniques, isFn } from '../
|
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { BANNER } from '../src/mediaTypes.js';
|
|
4
4
|
import { getStorageManager } from '../src/storageManager.js';
|
|
5
|
+
import { bidderSettings } from '../src/bidderSettings.js';
|
|
5
6
|
|
|
6
7
|
const GVLID = 744;
|
|
7
8
|
const DEFAULT_SUB_DOMAIN = 'prebid';
|
|
@@ -69,6 +70,11 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
|
69
70
|
const pId = extractPID(params);
|
|
70
71
|
const subDomain = extractSubDomain(params);
|
|
71
72
|
const ptrace = getCacheOpt();
|
|
73
|
+
const isStorageAllowed = bidderSettings.get(BIDDER_CODE, 'storageAllowed');
|
|
74
|
+
|
|
75
|
+
const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid', deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', ''));
|
|
76
|
+
const cat = deepAccess(bidderRequest, 'ortb2.site.cat', []);
|
|
77
|
+
const pagecat = deepAccess(bidderRequest, 'ortb2.site.pagecat', []);
|
|
72
78
|
|
|
73
79
|
if (isFn(bid.getFloor)) {
|
|
74
80
|
const floorInfo = bid.getFloor({
|
|
@@ -99,7 +105,11 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
|
99
105
|
prebidVersion: '$prebid.version$',
|
|
100
106
|
res: `${screen.width}x${screen.height}`,
|
|
101
107
|
schain: schain,
|
|
102
|
-
ptrace: ptrace
|
|
108
|
+
ptrace: ptrace,
|
|
109
|
+
isStorageAllowed: isStorageAllowed,
|
|
110
|
+
gpid: gpid,
|
|
111
|
+
cat: cat,
|
|
112
|
+
pagecat: pagecat
|
|
103
113
|
};
|
|
104
114
|
|
|
105
115
|
appendUserIdsToRequestPayload(data, userId);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { formatQS, deepAccess, triggerPixel } from '../src/utils.js';
|
|
1
|
+
import { formatQS, deepAccess, triggerPixel, isArray, isNumber } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import { BANNER } from '../src/mediaTypes.js'
|
|
3
4
|
|
|
4
5
|
const BIDDER_CODE = 'yandex';
|
|
5
6
|
const BIDDER_URL = 'https://bs.yandex.ru/metadsp';
|
|
@@ -10,9 +11,19 @@ const SSP_ID = 10500;
|
|
|
10
11
|
export const spec = {
|
|
11
12
|
code: BIDDER_CODE,
|
|
12
13
|
aliases: ['ya'], // short code
|
|
14
|
+
supportedMediaTypes: [ BANNER ],
|
|
13
15
|
|
|
14
16
|
isBidRequestValid: function(bid) {
|
|
15
|
-
|
|
17
|
+
const { params } = bid;
|
|
18
|
+
if (!params) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const { pageId, impId } = extractPlacementIds(params);
|
|
22
|
+
if (!(pageId && impId)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const sizes = bid.mediaTypes?.banner?.sizes;
|
|
26
|
+
return isArray(sizes) && isArray(sizes[0]) && isNumber(sizes[0][0]) && isNumber(sizes[0][1]);
|
|
16
27
|
},
|
|
17
28
|
|
|
18
29
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
@@ -29,9 +40,19 @@ export const spec = {
|
|
|
29
40
|
page = bidderRequest.refererInfo.page;
|
|
30
41
|
}
|
|
31
42
|
|
|
43
|
+
let timeout = null;
|
|
44
|
+
if (bidderRequest) {
|
|
45
|
+
timeout = bidderRequest.timeout;
|
|
46
|
+
}
|
|
47
|
+
|
|
32
48
|
return validBidRequests.map((bidRequest) => {
|
|
33
49
|
const { params } = bidRequest;
|
|
34
|
-
const {
|
|
50
|
+
const { targetRef, withCredentials = true } = params;
|
|
51
|
+
const sizes = bidRequest.mediaTypes.banner.sizes;
|
|
52
|
+
const size = sizes[0];
|
|
53
|
+
const [ w, h ] = size;
|
|
54
|
+
|
|
55
|
+
const { pageId, impId } = extractPlacementIds(params);
|
|
35
56
|
|
|
36
57
|
const queryParams = {
|
|
37
58
|
'imp-id': impId,
|
|
@@ -43,24 +64,23 @@ export const spec = {
|
|
|
43
64
|
queryParams['tcf-consent'] = consentString;
|
|
44
65
|
}
|
|
45
66
|
|
|
46
|
-
const floorInfo = bidRequest.getFloor ? bidRequest.getFloor({
|
|
47
|
-
currency: DEFAULT_CURRENCY
|
|
48
|
-
}) : {};
|
|
49
|
-
const bidfloor = floorInfo.floor;
|
|
50
|
-
const bidfloorcur = floorInfo.currency;
|
|
51
|
-
|
|
52
67
|
const imp = {
|
|
53
68
|
id: impId,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
const bannerParams = deepAccess(bidRequest, 'mediaTypes.banner');
|
|
58
|
-
if (bannerParams) {
|
|
59
|
-
const [ w, h ] = bannerParams.sizes[0];
|
|
60
|
-
imp.banner = {
|
|
69
|
+
banner: {
|
|
70
|
+
format: sizes,
|
|
61
71
|
w,
|
|
62
72
|
h,
|
|
63
|
-
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
if (bidRequest.getFloor) {
|
|
77
|
+
const floorInfo = bidRequest.getFloor({
|
|
78
|
+
currency: DEFAULT_CURRENCY,
|
|
79
|
+
size
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
imp.bidfloor = floorInfo.floor;
|
|
83
|
+
imp.bidfloorcur = floorInfo.currency;
|
|
64
84
|
}
|
|
65
85
|
|
|
66
86
|
const queryParamsString = formatQS(queryParams);
|
|
@@ -74,6 +94,7 @@ export const spec = {
|
|
|
74
94
|
ref_url: referrer,
|
|
75
95
|
page_url: page,
|
|
76
96
|
},
|
|
97
|
+
tmax: timeout,
|
|
77
98
|
},
|
|
78
99
|
options: {
|
|
79
100
|
withCredentials,
|
|
@@ -102,6 +123,7 @@ export const spec = {
|
|
|
102
123
|
width: rtbBid.w,
|
|
103
124
|
height: rtbBid.h,
|
|
104
125
|
creativeId: rtbBid.adid,
|
|
126
|
+
nurl: rtbBid.nurl,
|
|
105
127
|
|
|
106
128
|
netRevenue: true,
|
|
107
129
|
ttl: DEFAULT_TTL,
|
|
@@ -118,13 +140,57 @@ export const spec = {
|
|
|
118
140
|
},
|
|
119
141
|
|
|
120
142
|
onBidWon: function (bid) {
|
|
121
|
-
|
|
122
|
-
|
|
143
|
+
let nurl = bid['nurl'];
|
|
123
144
|
if (!nurl) {
|
|
124
145
|
return;
|
|
125
146
|
}
|
|
147
|
+
|
|
148
|
+
const cpm = deepAccess(bid, 'adserverTargeting.hb_pb') || '';
|
|
149
|
+
const curr = (bid.hasOwnProperty('originalCurrency') && bid.hasOwnProperty('originalCpm'))
|
|
150
|
+
? bid.originalCurrency
|
|
151
|
+
: bid.currency;
|
|
152
|
+
|
|
153
|
+
nurl = nurl
|
|
154
|
+
.replace(/\${AUCTION_PRICE}/, cpm)
|
|
155
|
+
.replace(/\${AUCTION_CURRENCY}/, curr)
|
|
156
|
+
;
|
|
157
|
+
|
|
126
158
|
triggerPixel(nurl);
|
|
127
159
|
}
|
|
128
160
|
}
|
|
129
161
|
|
|
162
|
+
function extractPlacementIds(bidRequestParams) {
|
|
163
|
+
const { placementId } = bidRequestParams;
|
|
164
|
+
const result = { pageId: null, impId: null };
|
|
165
|
+
|
|
166
|
+
let pageId, impId;
|
|
167
|
+
if (placementId) {
|
|
168
|
+
/*
|
|
169
|
+
* Possible formats
|
|
170
|
+
* R-I-123456-2
|
|
171
|
+
* R-123456-1
|
|
172
|
+
* 123456-789
|
|
173
|
+
*/
|
|
174
|
+
const num = placementId.lastIndexOf('-');
|
|
175
|
+
if (num === -1) {
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
const num2 = placementId.lastIndexOf('-', num - 1);
|
|
179
|
+
pageId = placementId.slice(num2 + 1, num);
|
|
180
|
+
impId = placementId.slice(num + 1);
|
|
181
|
+
} else {
|
|
182
|
+
pageId = bidRequestParams.pageId;
|
|
183
|
+
impId = bidRequestParams.impId;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (!parseInt(pageId, 10) || !parseInt(impId, 10)) {
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
result.pageId = pageId;
|
|
191
|
+
result.impId = impId;
|
|
192
|
+
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
|
|
130
196
|
registerBidder(spec);
|
|
@@ -12,10 +12,11 @@ Yandex Bidder Adapter for Prebid.js.
|
|
|
12
12
|
|
|
13
13
|
# Parameters
|
|
14
14
|
|
|
15
|
-
| Name |
|
|
16
|
-
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
15
|
+
| Name | Required? | Description | Example | Type |
|
|
16
|
+
|---------------|--------------------------------------------|-------------|---------|-----------|
|
|
17
|
+
| `placementId` | Yes | Block ID | `123-1` | `String` |
|
|
18
|
+
| `pageId` | No<br>Deprecated. Please use `placementId` | Page ID | `123` | `Integer` |
|
|
19
|
+
| `impId` | No<br>Deprecated. Please use `placementId` | Imp ID | `1` | `Integer` |
|
|
19
20
|
|
|
20
21
|
# Test Parameters
|
|
21
22
|
|
|
@@ -24,15 +25,14 @@ var adUnits = [{
|
|
|
24
25
|
code: 'banner-1',
|
|
25
26
|
mediaTypes: {
|
|
26
27
|
banner: {
|
|
27
|
-
sizes: [[240, 400]],
|
|
28
|
+
sizes: [[240, 400], [300, 600]],
|
|
28
29
|
}
|
|
29
30
|
},
|
|
30
31
|
bids: [{
|
|
31
32
|
{
|
|
32
33
|
bidder: 'yandex',
|
|
33
34
|
params: {
|
|
34
|
-
|
|
35
|
-
impId: 143,
|
|
35
|
+
placementId: '346580-1'
|
|
36
36
|
},
|
|
37
37
|
}
|
|
38
38
|
}]
|
|
@@ -41,6 +41,7 @@ export const spec = {
|
|
|
41
41
|
|
|
42
42
|
const adslotIds = []
|
|
43
43
|
const adslotSizes = [];
|
|
44
|
+
const adslotFloors = [];
|
|
44
45
|
const timestamp = Date.now()
|
|
45
46
|
const query = {
|
|
46
47
|
ts: timestamp,
|
|
@@ -77,7 +78,7 @@ export const spec = {
|
|
|
77
78
|
}
|
|
78
79
|
const floor = getBidFloor(bid, sizes)
|
|
79
80
|
if (floor) {
|
|
80
|
-
|
|
81
|
+
adslotFloors.push(bid.params.adslotId + ':' + floor);
|
|
81
82
|
}
|
|
82
83
|
})
|
|
83
84
|
|
|
@@ -99,6 +100,11 @@ export const spec = {
|
|
|
99
100
|
if (adslotSizes.length > 0) {
|
|
100
101
|
query.sizes = adslotSizes.join(',')
|
|
101
102
|
}
|
|
103
|
+
|
|
104
|
+
if (adslotFloors.length > 0) {
|
|
105
|
+
query.floor = adslotFloors.join(',')
|
|
106
|
+
}
|
|
107
|
+
|
|
102
108
|
const queryString = createQueryString(query)
|
|
103
109
|
|
|
104
110
|
return {
|
|
@@ -463,7 +469,7 @@ function extractSizes(bid) {
|
|
|
463
469
|
*
|
|
464
470
|
* @param {Object} bid
|
|
465
471
|
* @param {string[]} sizes
|
|
466
|
-
* @returns The floor CPM of a matched rule based on the rule selection process (mediaType, size and currency),
|
|
472
|
+
* @returns The floor CPM in cents of a matched rule based on the rule selection process (mediaType, size and currency),
|
|
467
473
|
* using the getFloor() inputs. Multi sizes and unsupported media types will default to '*'
|
|
468
474
|
*/
|
|
469
475
|
function getBidFloor(bid, sizes) {
|
|
@@ -475,10 +481,10 @@ function getBidFloor(bid, sizes) {
|
|
|
475
481
|
const floor = bid.getFloor({
|
|
476
482
|
currency: CURRENCY_CODE,
|
|
477
483
|
mediaType: mediaType !== undefined && spec.supportedMediaTypes.includes(mediaType) ? mediaType : '*',
|
|
478
|
-
size: sizes.length !== 1 ? '*' :
|
|
484
|
+
size: sizes.length !== 1 ? '*' : sizes[0].split(DIMENSION_SIGN)
|
|
479
485
|
});
|
|
480
486
|
if (floor.currency === CURRENCY_CODE) {
|
|
481
|
-
return floor.floor;
|
|
487
|
+
return (floor.floor * 100).toFixed(0);
|
|
482
488
|
}
|
|
483
489
|
return undefined;
|
|
484
490
|
}
|