prebid.js 7.25.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/beopBidAdapter.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/captifyRtdProvider.js +1 -0
- 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/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/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +240 -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 +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/smartytechBidAdapter.js +1 -0
- 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/tappxBidAdapter.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/viqeoBidAdapter.js +1 -0
- 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/dist/zeta_global_sspBidAdapter.js +1 -1
- package/dist/zeusPrimeRtdProvider.js +31 -0
- package/integrationExamples/gpt/captifyRtdProvider_example.html +167 -0
- package/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/modules/.submodules.json +3 -1
- package/modules/admaticBidAdapter.js +116 -58
- package/modules/admaticBidAdapter.md +2 -2
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/beopBidAdapter.js +17 -2
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/captifyRtdProvider.js +146 -0
- package/modules/captifyRtdProvider.md +68 -0
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/discoveryBidAdapter.js +38 -17
- package/modules/discoveryBidAdapter.md +7 -6
- 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 +441 -23
- 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/nextMillenniumBidAdapter.js +19 -23
- 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/smartadserverBidAdapter.js +6 -2
- package/modules/smartxBidAdapter.js +11 -8
- package/modules/smartytechBidAdapter.js +78 -0
- package/modules/smartytechBidAdapter.md +44 -0
- package/modules/smnBidAdapter.md +52 -0
- package/modules/taboolaBidAdapter.js +3 -3
- package/modules/taboolaBidAdapter.md +0 -2
- package/modules/tappxBidAdapter.js +21 -6
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +8 -3
- package/modules/userId/index.js +1 -1
- package/modules/vidazooBidAdapter.js +26 -3
- package/modules/viqeoBidAdapter.js +180 -0
- package/modules/viqeoBidAdapter.md +56 -0
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +29 -12
- package/modules/yieldliftBidAdapter.js +3 -3
- package/modules/yieldoneBidAdapter.js +60 -8
- package/modules/yieldoneBidAdapter.md +109 -9
- package/modules/zeta_global_sspBidAdapter.js +4 -0
- package/modules/zeusPrimeRtdProvider.js +357 -0
- package/modules/zeusPrimeRtdProvider.md +60 -0
- package/package.json +1 -1
- package/src/adloader.js +0 -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/admaticBidAdapter_spec.js +262 -3
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/beopBidAdapter_spec.js +52 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/captifyRtdProvider_spec.js +253 -0
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/discoveryBidAdapter_spec.js +9 -8
- 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/gridBidAdapter_spec.js +289 -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/nextMillenniumBidAdapter_spec.js +4 -3
- 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/smartadserverBidAdapter_spec.js +80 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +32 -0
- package/test/spec/modules/smartytechBidAdapter_spec.js +162 -0
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/taboolaBidAdapter_spec.js +0 -77
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +27 -0
- package/test/spec/modules/vidazooBidAdapter_spec.js +39 -24
- package/test/spec/modules/viqeoBidAdapter_spec.js +124 -0
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +174 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/modules/yieldoneBidAdapter_spec.js +30 -6
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +16 -1
- package/test/spec/modules/zeusPrimeRtdProvider_spec.js +410 -0
- 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
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isFn,
|
|
3
|
+
isStr,
|
|
4
|
+
deepAccess,
|
|
5
|
+
getWindowTop,
|
|
6
|
+
triggerPixel
|
|
7
|
+
} from '../src/utils.js';
|
|
8
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
9
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
10
|
+
import { config } from '../src/config.js';
|
|
11
|
+
|
|
12
|
+
const BIDDER_CODE = 'redtram';
|
|
13
|
+
const AD_URL = 'https://prebid.redtram.com/pbjs';
|
|
14
|
+
const SYNC_URL = 'https://prebid.redtram.com/sync';
|
|
15
|
+
|
|
16
|
+
function isBidResponseValid(bid) {
|
|
17
|
+
if (!bid.requestId || !bid.cpm || !bid.creativeId ||
|
|
18
|
+
!bid.ttl || !bid.currency || !bid.meta) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
switch (bid.mediaType) {
|
|
23
|
+
case BANNER:
|
|
24
|
+
return Boolean(bid.width && bid.height && bid.ad);
|
|
25
|
+
default:
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function getBidFloor(bid) {
|
|
31
|
+
if (!isFn(bid.getFloor)) {
|
|
32
|
+
return deepAccess(bid, 'params.bidFloor', 0);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const bidFloor = bid.getFloor({
|
|
37
|
+
currency: 'USD',
|
|
38
|
+
mediaType: '*',
|
|
39
|
+
size: '*',
|
|
40
|
+
});
|
|
41
|
+
return bidFloor.floor;
|
|
42
|
+
} catch (_) {
|
|
43
|
+
return 0
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const spec = {
|
|
48
|
+
code: BIDDER_CODE,
|
|
49
|
+
supportedMediaTypes: [BANNER],
|
|
50
|
+
|
|
51
|
+
isBidRequestValid: (bid) => {
|
|
52
|
+
return Boolean(bid.bidId && bid.params && bid.params.placementId);
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
buildRequests: (validBidRequests = [], bidderRequest) => {
|
|
56
|
+
const winTop = getWindowTop();
|
|
57
|
+
const location = winTop.location;
|
|
58
|
+
const placements = [];
|
|
59
|
+
|
|
60
|
+
const request = {
|
|
61
|
+
deviceWidth: winTop.screen.width,
|
|
62
|
+
deviceHeight: winTop.screen.height,
|
|
63
|
+
language: (navigator && navigator.language) ? navigator.language.split('-')[0] : '',
|
|
64
|
+
host: location.host,
|
|
65
|
+
page: location.pathname,
|
|
66
|
+
placements: placements
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
if (bidderRequest) {
|
|
70
|
+
if (bidderRequest.uspConsent) {
|
|
71
|
+
request.ccpa = bidderRequest.uspConsent;
|
|
72
|
+
}
|
|
73
|
+
if (bidderRequest.gdprConsent) {
|
|
74
|
+
request.gdpr = bidderRequest.gdprConsent;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const len = validBidRequests.length;
|
|
79
|
+
for (let i = 0; i < len; i++) {
|
|
80
|
+
const bid = validBidRequests[i];
|
|
81
|
+
const placement = {
|
|
82
|
+
placementId: bid.params.placementId,
|
|
83
|
+
bidId: bid.bidId,
|
|
84
|
+
schain: bid.schain || {},
|
|
85
|
+
bidfloor: getBidFloor(bid)
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
if (typeof bid.userId !== 'undefined') {
|
|
89
|
+
placement.userId = bid.userId;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const mediaType = bid.mediaTypes;
|
|
93
|
+
|
|
94
|
+
if (mediaType && mediaType[BANNER] && mediaType[BANNER].sizes) {
|
|
95
|
+
placement.sizes = mediaType[BANNER].sizes;
|
|
96
|
+
placement.adFormat = BANNER;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
placements.push(placement);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
url: AD_URL,
|
|
105
|
+
data: request
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
interpretResponse: (serverResponse) => {
|
|
110
|
+
let response = [];
|
|
111
|
+
for (let i = 0; i < serverResponse.body.length; i++) {
|
|
112
|
+
let resItem = serverResponse.body[i];
|
|
113
|
+
if (isBidResponseValid(resItem)) {
|
|
114
|
+
const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
|
|
115
|
+
resItem.meta = { ...resItem.meta, advertiserDomains };
|
|
116
|
+
|
|
117
|
+
response.push(resItem);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return response;
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
|
|
124
|
+
let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
|
|
125
|
+
let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
|
|
126
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
127
|
+
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
128
|
+
syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
129
|
+
} else {
|
|
130
|
+
syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (uspConsent && uspConsent.consentString) {
|
|
134
|
+
syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const coppa = config.getConfig('coppa') ? 1 : 0;
|
|
138
|
+
syncUrl += `&coppa=${coppa}`;
|
|
139
|
+
|
|
140
|
+
return [{
|
|
141
|
+
type: syncType,
|
|
142
|
+
url: syncUrl
|
|
143
|
+
}];
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
onBidWon: (bid) => {
|
|
147
|
+
const cpm = deepAccess(bid, 'adserverTargeting.hb_pb') || '';
|
|
148
|
+
if (isStr(bid.nurl) && bid.nurl !== '') {
|
|
149
|
+
bid.nurl = bid.nurl.replace(/\${AUCTION_PRICE}/, cpm);
|
|
150
|
+
triggerPixel(bid.nurl);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: redtram Bidder Adapter
|
|
5
|
+
Module Type: redtram Bidder Adapter
|
|
6
|
+
Maintainer: support@redtram.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to redtram demand sources
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
```
|
|
15
|
+
var adUnits = [
|
|
16
|
+
{
|
|
17
|
+
code: 'div-prebid',
|
|
18
|
+
mediaTypes:{
|
|
19
|
+
banner: {
|
|
20
|
+
sizes: [[300, 250]],
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
bids:[
|
|
24
|
+
{
|
|
25
|
+
bidder: 'redtram',
|
|
26
|
+
params: {
|
|
27
|
+
placementId: '23611' //test, please replace after test
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
```
|
|
@@ -309,6 +309,16 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
309
309
|
bidObject.placementId = placementId;
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
+
const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
|
|
313
|
+
if (mimes) {
|
|
314
|
+
bidObject.mimes = mimes;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
|
|
318
|
+
if (api) {
|
|
319
|
+
bidObject.api = api;
|
|
320
|
+
}
|
|
321
|
+
|
|
312
322
|
if (mediaType === VIDEO) {
|
|
313
323
|
const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
|
|
314
324
|
let playbackMethodValue;
|
|
@@ -349,6 +359,11 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
349
359
|
if (linearity) {
|
|
350
360
|
bidObject.linearity = linearity;
|
|
351
361
|
}
|
|
362
|
+
|
|
363
|
+
const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
|
|
364
|
+
if (protocols) {
|
|
365
|
+
bidObject.protocols = protocols;
|
|
366
|
+
}
|
|
352
367
|
}
|
|
353
368
|
|
|
354
369
|
return bidObject;
|
|
@@ -20,7 +20,7 @@ The adapter supports Video(instream).
|
|
|
20
20
|
|
|
21
21
|
| Name | Scope | Type | Description | Example
|
|
22
22
|
| ---- | ----- | ---- | ----------- | -------
|
|
23
|
-
| `org` | required | String | Rise publisher Id provided by your Rise representative | "
|
|
23
|
+
| `org` | required | String | Rise publisher Id provided by your Rise representative | "1234567890abcdef12345678"
|
|
24
24
|
| `floorPrice` | optional | Number | Minimum price in USD. Misuse of this parameter can impact revenue | 2.00
|
|
25
25
|
| `placementId` | optional | String | A unique placement identifier | "12345678"
|
|
26
26
|
| `testMode` | optional | Boolean | This activates the test mode | false
|
|
@@ -41,10 +41,10 @@ var adUnits = [
|
|
|
41
41
|
bids: [{
|
|
42
42
|
bidder: 'rise',
|
|
43
43
|
params: {
|
|
44
|
-
org: '
|
|
44
|
+
org: '1234567890abcdef12345678', // Required
|
|
45
45
|
floorPrice: 2.00, // Optional
|
|
46
46
|
placementId: '12345678', // Optional
|
|
47
|
-
testMode: false // Optional,
|
|
47
|
+
testMode: false, // Optional,
|
|
48
48
|
rtbDomain: "www.test.com" //Optional
|
|
49
49
|
}
|
|
50
50
|
}]
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import {deepAccess, isArray, logError} from '../src/utils.js';
|
|
1
|
+
import {deepAccess, mergeDeep, isArray, logError, logInfo} from '../src/utils.js';
|
|
2
2
|
import { getOrigin } from '../libraries/getOrigin/index.js';
|
|
3
3
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
4
4
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
5
5
|
import {includes} from '../src/polyfill.js';
|
|
6
6
|
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
7
|
+
import { config } from '../src/config.js';
|
|
7
8
|
|
|
8
9
|
const BIDDER_CODE = 'rtbhouse';
|
|
9
10
|
const REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia'];
|
|
10
11
|
const ENDPOINT_URL = 'creativecdn.com/bidder/prebid/bids';
|
|
12
|
+
const FLEDGE_ENDPOINT_URL = 'creativecdn.com/bidder/prebidfledge/bids';
|
|
11
13
|
const DEFAULT_CURRENCY_ARR = ['USD']; // NOTE - USD is the only supported currency right now; Hardcoded for bids
|
|
12
14
|
const SUPPORTED_MEDIA_TYPES = [BANNER, NATIVE];
|
|
13
15
|
const TTL = 55;
|
|
@@ -50,12 +52,13 @@ export const spec = {
|
|
|
50
52
|
|
|
51
53
|
const request = {
|
|
52
54
|
id: validBidRequests[0].auctionId,
|
|
53
|
-
imp: validBidRequests.map(slot => mapImpression(slot)),
|
|
55
|
+
imp: validBidRequests.map(slot => mapImpression(slot, bidderRequest)),
|
|
54
56
|
site: mapSite(validBidRequests, bidderRequest),
|
|
55
57
|
cur: DEFAULT_CURRENCY_ARR,
|
|
56
58
|
test: validBidRequests[0].params.test || 0,
|
|
57
59
|
source: mapSource(validBidRequests[0]),
|
|
58
60
|
};
|
|
61
|
+
|
|
59
62
|
if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
|
|
60
63
|
const consentStr = (bidderRequest.gdprConsent.consentString)
|
|
61
64
|
? bidderRequest.gdprConsent.consentString.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') : '';
|
|
@@ -81,37 +84,32 @@ export const spec = {
|
|
|
81
84
|
}
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
const ortb2Params = bidderRequest
|
|
85
|
-
if (ortb2Params
|
|
86
|
-
request.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}),
|
|
94
|
-
};
|
|
87
|
+
const ortb2Params = bidderRequest?.ortb2 || {};
|
|
88
|
+
if (ortb2Params.site) {
|
|
89
|
+
mergeDeep(request, { site: ortb2Params.site });
|
|
90
|
+
}
|
|
91
|
+
if (ortb2Params.user) {
|
|
92
|
+
mergeDeep(request, { user: ortb2Params.user });
|
|
93
|
+
}
|
|
94
|
+
if (ortb2Params.device) {
|
|
95
|
+
mergeDeep(request, { device: ortb2Params.device });
|
|
95
96
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
ext: { ...request.site?.ext, ...ortb2Params.site.ext },
|
|
104
|
-
}),
|
|
105
|
-
};
|
|
97
|
+
|
|
98
|
+
let computedEndpointUrl = ENDPOINT_URL;
|
|
99
|
+
|
|
100
|
+
const fledgeConfig = config.getConfig('fledgeConfig');
|
|
101
|
+
if (bidderRequest.fledgeEnabled && fledgeConfig) {
|
|
102
|
+
mergeDeep(request, { ext: { fledge_config: fledgeConfig } });
|
|
103
|
+
computedEndpointUrl = FLEDGE_ENDPOINT_URL;
|
|
106
104
|
}
|
|
107
105
|
|
|
108
106
|
return {
|
|
109
107
|
method: 'POST',
|
|
110
|
-
url: 'https://' + validBidRequests[0].params.region + '.' +
|
|
108
|
+
url: 'https://' + validBidRequests[0].params.region + '.' + computedEndpointUrl,
|
|
111
109
|
data: JSON.stringify(request)
|
|
112
110
|
};
|
|
113
111
|
},
|
|
114
|
-
|
|
112
|
+
interpretOrtbResponse: function (serverResponse, originalRequest) {
|
|
115
113
|
const responseBody = serverResponse.body;
|
|
116
114
|
if (!isArray(responseBody)) {
|
|
117
115
|
return [];
|
|
@@ -119,17 +117,72 @@ export const spec = {
|
|
|
119
117
|
|
|
120
118
|
const bids = [];
|
|
121
119
|
responseBody.forEach(serverBid => {
|
|
122
|
-
if (serverBid.price === 0)
|
|
120
|
+
if (!serverBid.price) { // price may exist and is === 0 or there's no price prop at all (fledge req case)
|
|
123
121
|
return;
|
|
124
122
|
}
|
|
123
|
+
|
|
124
|
+
let interpretedBid;
|
|
125
|
+
|
|
125
126
|
// try...catch would be risky cause JSON.parse throws SyntaxError
|
|
126
127
|
if (serverBid.adm.indexOf('{') === 0) {
|
|
127
|
-
|
|
128
|
+
interpretedBid = interpretNativeBid(serverBid);
|
|
128
129
|
} else {
|
|
129
|
-
|
|
130
|
+
interpretedBid = interpretBannerBid(serverBid);
|
|
130
131
|
}
|
|
132
|
+
if (serverBid.ext) interpretedBid.ext = serverBid.ext;
|
|
133
|
+
|
|
134
|
+
bids.push(interpretedBid);
|
|
131
135
|
});
|
|
132
136
|
return bids;
|
|
137
|
+
},
|
|
138
|
+
interpretResponse: function (serverResponse, originalRequest) {
|
|
139
|
+
let bids;
|
|
140
|
+
|
|
141
|
+
const responseBody = serverResponse.body;
|
|
142
|
+
let fledgeAuctionConfigs = null;
|
|
143
|
+
|
|
144
|
+
if (responseBody.bidid && isArray(responseBody?.ext?.igbid)) {
|
|
145
|
+
// we have fledge response
|
|
146
|
+
// mimic the original response ([{},...])
|
|
147
|
+
bids = this.interpretOrtbResponse({ body: responseBody.seatbid[0]?.bid }, originalRequest);
|
|
148
|
+
|
|
149
|
+
const seller = responseBody.ext.seller;
|
|
150
|
+
const decisionLogicUrl = responseBody.ext.decisionLogicUrl;
|
|
151
|
+
const sellerTimeout = 'sellerTimeout' in responseBody.ext ? { sellerTimeout: responseBody.ext.sellerTimeout } : {};
|
|
152
|
+
responseBody.ext.igbid.forEach((igbid) => {
|
|
153
|
+
const perBuyerSignals = {};
|
|
154
|
+
igbid.igbuyer.forEach(buyerItem => {
|
|
155
|
+
perBuyerSignals[buyerItem.igdomain] = buyerItem.buyersignal
|
|
156
|
+
});
|
|
157
|
+
fledgeAuctionConfigs = fledgeAuctionConfigs || {};
|
|
158
|
+
fledgeAuctionConfigs[igbid.impid] = mergeDeep(
|
|
159
|
+
{
|
|
160
|
+
seller,
|
|
161
|
+
decisionLogicUrl,
|
|
162
|
+
interestGroupBuyers: Object.keys(perBuyerSignals),
|
|
163
|
+
perBuyerSignals,
|
|
164
|
+
},
|
|
165
|
+
sellerTimeout
|
|
166
|
+
);
|
|
167
|
+
});
|
|
168
|
+
} else {
|
|
169
|
+
bids = this.interpretOrtbResponse(serverResponse, originalRequest);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (fledgeAuctionConfigs) {
|
|
173
|
+
fledgeAuctionConfigs = Object.entries(fledgeAuctionConfigs).map(([bidId, cfg]) => {
|
|
174
|
+
return Object.assign({
|
|
175
|
+
bidId,
|
|
176
|
+
auctionSignals: {}
|
|
177
|
+
}, cfg);
|
|
178
|
+
});
|
|
179
|
+
logInfo('Response with FLEDGE:', { bids, fledgeAuctionConfigs });
|
|
180
|
+
return {
|
|
181
|
+
bids,
|
|
182
|
+
fledgeAuctionConfigs,
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return bids;
|
|
133
186
|
}
|
|
134
187
|
};
|
|
135
188
|
registerBidder(spec);
|
|
@@ -154,7 +207,7 @@ function applyFloor(slot) {
|
|
|
154
207
|
* @param {object} slot Ad Unit Params by Prebid
|
|
155
208
|
* @returns {object} Imp by OpenRTB 2.5 §3.2.4
|
|
156
209
|
*/
|
|
157
|
-
function mapImpression(slot) {
|
|
210
|
+
function mapImpression(slot, bidderRequest) {
|
|
158
211
|
const imp = {
|
|
159
212
|
id: slot.bidId,
|
|
160
213
|
banner: mapBanner(slot),
|
|
@@ -167,6 +220,14 @@ function mapImpression(slot) {
|
|
|
167
220
|
imp.bidfloor = bidfloor;
|
|
168
221
|
}
|
|
169
222
|
|
|
223
|
+
if (bidderRequest.fledgeEnabled) {
|
|
224
|
+
imp.ext = imp.ext || {};
|
|
225
|
+
imp.ext.ae = slot?.ortb2Imp?.ext?.ae
|
|
226
|
+
} else {
|
|
227
|
+
if (imp.ext?.ae) {
|
|
228
|
+
delete imp.ext.ae;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
170
231
|
return imp;
|
|
171
232
|
}
|
|
172
233
|
|
|
@@ -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);
|