prebid.js 7.26.0 → 7.28.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/.github/workflows/issue_tracker.yml +1 -1
- 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/adhashBidAdapter.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/discoveryBidAdapter.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/kargoBidAdapter.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/mediagoBidAdapter.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 +206 -202
- 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 +2 -2
- 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/taboolaBidAdapter.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/libraries/ortb2.5StrictTranslator/dsl.js +54 -0
- package/libraries/ortb2.5StrictTranslator/spec.js +81 -0
- package/libraries/ortb2.5StrictTranslator/translator.js +37 -0
- package/libraries/ortb2.5Translator/translator.js +82 -0
- package/modules/33acrossIdSystem.js +3 -0
- package/modules/adhashBidAdapter.js +115 -30
- package/modules/adhashBidAdapter.md +1 -3
- 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/discoveryBidAdapter.js +3 -0
- 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/kargoBidAdapter.js +1 -1
- package/modules/lassoBidAdapter.js +8 -4
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/liveIntentIdSystem.js +1 -2
- package/modules/mediagoBidAdapter.js +2 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/openxBidAdapter.md +15 -14
- 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/taboolaBidAdapter.js +20 -7
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +4 -0
- package/modules/vidazooBidAdapter.js +31 -8
- 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 +2 -2
- package/src/auction.js +30 -4
- package/src/consentHandler.js +8 -0
- package/src/constants.json +2 -1
- 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/helpers/refererDetectionHelper.js +88 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +119 -1
- package/test/spec/modules/33acrossIdSystem_spec.js +4 -1
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/adhashBidAdapter_spec.js +65 -11
- 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/taboolaBidAdapter_spec.js +39 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +50 -9
- package/test/spec/modules/vidazooBidAdapter_spec.js +173 -27
- 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/ortb2.5StrictTranslator/dsl_spec.js +137 -0
- package/test/spec/ortb2.5StrictTranslator/spec_spec.js +358 -0
- package/test/spec/ortb2.5StrictTranslator/translator_spec.js +16 -0
- package/test/spec/ortb2.5Translator/translator_spec.js +64 -0
- package/test/spec/refererDetection_spec.js +46 -95
- 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
|
+
```
|
|
@@ -170,15 +170,28 @@ function getSiteProperties({publisherId, bcat = []}, refererInfo) {
|
|
|
170
170
|
|
|
171
171
|
function getImps(validBidRequests) {
|
|
172
172
|
return validBidRequests.map((bid, id) => {
|
|
173
|
-
const {tagId
|
|
174
|
-
|
|
175
|
-
return {
|
|
173
|
+
const {tagId} = bid.params;
|
|
174
|
+
const imp = {
|
|
176
175
|
id: id + 1,
|
|
177
176
|
banner: getBanners(bid),
|
|
178
|
-
tagid: tagId
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
tagid: tagId
|
|
178
|
+
}
|
|
179
|
+
if (typeof bid.getFloor === 'function') {
|
|
180
|
+
const floorInfo = bid.getFloor({
|
|
181
|
+
currency: CURRENCY,
|
|
182
|
+
mediaType: BANNER,
|
|
183
|
+
size: '*'
|
|
184
|
+
});
|
|
185
|
+
if (typeof floorInfo === 'object' && floorInfo.currency === CURRENCY && !isNaN(parseFloat(floorInfo.floor))) {
|
|
186
|
+
imp.bidfloor = parseFloat(floorInfo.floor);
|
|
187
|
+
imp.bidfloorcur = CURRENCY;
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
const {bidfloor = null, bidfloorcur = CURRENCY} = bid.params;
|
|
191
|
+
imp.bidfloor = bidfloor;
|
|
192
|
+
imp.bidfloorcur = bidfloorcur;
|
|
193
|
+
}
|
|
194
|
+
return imp;
|
|
182
195
|
});
|
|
183
196
|
}
|
|
184
197
|
|
|
@@ -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
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { _each, deepAccess, parseSizesInput, parseUrl, uniques, isFn } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
-
import { BANNER } from '../src/mediaTypes.js';
|
|
3
|
+
import { BANNER, VIDEO } 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';
|
|
@@ -58,7 +59,7 @@ function isBidRequestValid(bid) {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
61
|
-
const { params, bidId, userId, adUnitCode, schain } = bid;
|
|
62
|
+
const { params, bidId, userId, adUnitCode, schain, mediaTypes } = bid;
|
|
62
63
|
const { ext } = params;
|
|
63
64
|
let { bidFloor } = params;
|
|
64
65
|
const hashUrl = hashCode(topWindowUrl);
|
|
@@ -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,12 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
|
99
105
|
prebidVersion: '$prebid.version$',
|
|
100
106
|
res: `${screen.width}x${screen.height}`,
|
|
101
107
|
schain: schain,
|
|
102
|
-
|
|
108
|
+
mediaTypes: mediaTypes,
|
|
109
|
+
ptrace: ptrace,
|
|
110
|
+
isStorageAllowed: isStorageAllowed,
|
|
111
|
+
gpid: gpid,
|
|
112
|
+
cat: cat,
|
|
113
|
+
pagecat: pagecat
|
|
103
114
|
};
|
|
104
115
|
|
|
105
116
|
appendUserIdsToRequestPayload(data, userId);
|
|
@@ -178,11 +189,12 @@ function interpretResponse(serverResponse, request) {
|
|
|
178
189
|
|
|
179
190
|
try {
|
|
180
191
|
results.forEach(result => {
|
|
181
|
-
const { creativeId, ad, price, exp, width, height, currency, advertiserDomains } = result;
|
|
192
|
+
const { creativeId, ad, price, exp, width, height, currency, advertiserDomains, mediaType = BANNER } = result;
|
|
182
193
|
if (!ad || !price) {
|
|
183
194
|
return;
|
|
184
195
|
}
|
|
185
|
-
|
|
196
|
+
|
|
197
|
+
const response = {
|
|
186
198
|
requestId: bidId,
|
|
187
199
|
cpm: price,
|
|
188
200
|
width: width,
|
|
@@ -191,11 +203,22 @@ function interpretResponse(serverResponse, request) {
|
|
|
191
203
|
currency: currency || CURRENCY,
|
|
192
204
|
netRevenue: true,
|
|
193
205
|
ttl: exp || TTL_SECONDS,
|
|
194
|
-
ad: ad,
|
|
195
206
|
meta: {
|
|
196
207
|
advertiserDomains: advertiserDomains || []
|
|
197
208
|
}
|
|
198
|
-
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
if (mediaType === BANNER) {
|
|
212
|
+
Object.assign(response, {
|
|
213
|
+
ad: ad,
|
|
214
|
+
});
|
|
215
|
+
} else {
|
|
216
|
+
Object.assign(response, {
|
|
217
|
+
vastXml: ad,
|
|
218
|
+
mediaType: VIDEO
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
output.push(response);
|
|
199
222
|
});
|
|
200
223
|
return output;
|
|
201
224
|
} catch (e) {
|
|
@@ -312,7 +335,7 @@ export const spec = {
|
|
|
312
335
|
code: BIDDER_CODE,
|
|
313
336
|
version: BIDDER_VERSION,
|
|
314
337
|
gvlid: GVLID,
|
|
315
|
-
supportedMediaTypes: [BANNER],
|
|
338
|
+
supportedMediaTypes: [BANNER, VIDEO],
|
|
316
339
|
isBidRequestValid,
|
|
317
340
|
buildRequests,
|
|
318
341
|
interpretResponse,
|
|
@@ -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);
|