prebid.js 5.16.0 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/Dockerfile +11 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.devcontainer/postCreate.sh +6 -0
- package/browsers.json +1 -0
- package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
- package/modules/.submodules.json +1 -0
- package/modules/adfBidAdapter.js +21 -16
- package/modules/adgenerationBidAdapter.js +28 -4
- package/modules/adkernelBidAdapter.js +3 -1
- package/modules/admixerBidAdapter.js +11 -0
- package/modules/adnuntiusBidAdapter.js +1 -0
- package/modules/adtelligentBidAdapter.js +2 -1
- package/modules/airgridRtdProvider.js +1 -1
- package/modules/akamaiDapRtdProvider.js +474 -0
- package/modules/akamaiDapRtdProvider.md +47 -0
- package/modules/aolBidAdapter.js +2 -1
- package/modules/appnexusBidAdapter.js +5 -3
- package/modules/atsAnalyticsAdapter.js +89 -63
- package/modules/atsAnalyticsAdapter.md +1 -0
- package/modules/betweenBidAdapter.js +20 -3
- package/modules/bliinkBidAdapter.js +58 -32
- package/modules/bliinkBidAdapter.md +29 -6
- package/modules/browsiRtdProvider.js +106 -18
- package/modules/cleanioRtdProvider.js +192 -0
- package/modules/cleanioRtdProvider.md +59 -0
- package/modules/codefuelBidAdapter.js +183 -0
- package/modules/codefuelBidAdapter.md +111 -0
- package/modules/connectIdSystem.js +104 -0
- package/modules/connectIdSystem.md +33 -0
- package/modules/cwireBidAdapter.js +272 -0
- package/modules/cwireBidAdapter.md +43 -0
- package/modules/deepintentBidAdapter.js +106 -9
- package/modules/deepintentBidAdapter.md +36 -1
- package/modules/deltaprojectsBidAdapter.js +252 -0
- package/modules/deltaprojectsBidAdapter.md +32 -0
- package/modules/dgkeywordRtdProvider.js +0 -1
- package/modules/engageyaBidAdapter.js +157 -0
- package/modules/glimpseBidAdapter.js +160 -48
- package/modules/glimpseBidAdapter.md +11 -74
- package/modules/gridBidAdapter.js +1 -0
- package/modules/gridNMBidAdapter.js +7 -6
- package/modules/gumgumBidAdapter.js +16 -2
- package/modules/iasRtdProvider.js +83 -67
- package/modules/inskinBidAdapter.js +7 -3
- package/modules/ixBidAdapter.js +8 -1
- package/modules/jixieBidAdapter.js +8 -2
- package/modules/justpremiumBidAdapter.js +6 -1
- package/modules/kargoBidAdapter.js +14 -7
- package/modules/kargoBidAdapter.md +20 -0
- package/modules/limelightDigitalBidAdapter.js +22 -2
- package/modules/livewrappedAnalyticsAdapter.js +53 -3
- package/modules/mediakeysBidAdapter.js +405 -14
- package/modules/mediakeysBidAdapter.md +108 -0
- package/modules/multibid/index.js +3 -3
- package/modules/mytargetBidAdapter.js +112 -0
- package/modules/nativoBidAdapter.js +48 -29
- package/modules/nativoBidAdapter.md +0 -1
- package/modules/nextMillenniumBidAdapter.js +12 -3
- package/modules/nextrollBidAdapter.js +375 -0
- package/modules/nobidBidAdapter.js +2 -1
- package/modules/oguryBidAdapter.js +36 -7
- package/modules/openxBidAdapter.js +34 -22
- package/modules/operaadsBidAdapter.js +21 -1
- package/modules/otmBidAdapter.js +146 -0
- package/modules/otmBidAdapter.md +27 -26
- package/modules/outbrainBidAdapter.js +5 -0
- package/modules/pixfutureBidAdapter.js +24 -4
- package/modules/pixfutureBidAdapter.md +127 -0
- package/modules/playwireBidAdapter.md +61 -0
- package/modules/prebidServerBidAdapter/index.js +1 -1
- package/modules/proxistoreBidAdapter.js +4 -6
- package/modules/publinkIdSystem.js +17 -7
- package/modules/publinkIdSystem.md +7 -2
- package/modules/pubmaticBidAdapter.js +22 -6
- package/modules/pubmaticBidAdapter.md +1 -1
- package/modules/relaidoBidAdapter.js +8 -2
- package/modules/rtdModule/index.js +2 -2
- package/modules/sharethroughBidAdapter.js +12 -19
- package/modules/slimcutBidAdapter.js +121 -0
- package/modules/sonobiBidAdapter.js +7 -0
- package/modules/sortableBidAdapter.js +1 -0
- package/modules/spotxBidAdapter.js +15 -1
- package/modules/sspBCBidAdapter.js +207 -12
- package/modules/sspBCBidAdapter.md +1 -1
- package/modules/talkadsBidAdapter.js +129 -0
- package/modules/talkadsBidAdapter.md +60 -0
- package/modules/tappxBidAdapter.js +6 -5
- package/modules/teadsBidAdapter.js +3 -0
- package/modules/tripleliftBidAdapter.js +22 -5
- package/modules/trustxBidAdapter.js +17 -11
- package/modules/undertoneBidAdapter.js +9 -5
- package/modules/undertoneBidAdapter.md +5 -1
- package/modules/unicornBidAdapter.js +3 -3
- package/modules/userId/eids.js +18 -0
- package/modules/userId/eids.md +7 -0
- package/modules/userId/userId.md +12 -0
- package/modules/ventesBidAdapter.js +370 -0
- package/modules/ventesBidAdapter.md +94 -0
- package/modules/videobyteBidAdapter.js +13 -6
- package/modules/videobyteBidAdapter.md +49 -0
- package/modules/vidoomyBidAdapter.js +20 -12
- package/modules/visxBidAdapter.js +15 -22
- package/modules/yahoosspBidAdapter.js +637 -0
- package/modules/yahoosspBidAdapter.md +795 -0
- package/modules/yieldlabBidAdapter.js +48 -3
- package/modules/yieldlabBidAdapter.md +16 -1
- package/modules/yieldmoBidAdapter.js +20 -6
- package/modules/yieldmoSyntheticInventoryModule.js +46 -0
- package/modules/yieldmoSyntheticInventoryModule.md +68 -0
- package/package.json +1 -1
- package/src/adapterManager.js +5 -0
- package/src/adapters/bidderFactory.js +4 -3
- package/src/auction.js +11 -11
- package/src/constants.json +1 -0
- package/src/secureCreatives.js +6 -7
- package/src/targeting.js +11 -9
- package/test/.eslintrc.js +2 -1
- package/test/spec/modules/adfBidAdapter_spec.js +83 -29
- package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
- package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
- package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +77 -9
- package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
- package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
- package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
- package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
- package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
- package/test/spec/modules/connectIdSystem_spec.js +189 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
- package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
- package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
- package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
- package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
- package/test/spec/modules/iasRtdProvider_spec.js +71 -6
- package/test/spec/modules/ixBidAdapter_spec.js +13 -3
- package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
- package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
- package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
- package/test/spec/modules/multibid_spec.js +31 -31
- package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
- package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
- package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
- package/test/spec/modules/openxBidAdapter_spec.js +85 -13
- package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
- package/test/spec/modules/otmBidAdapter_spec.js +67 -0
- package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
- package/test/spec/modules/publinkIdSystem_spec.js +34 -15
- package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
- package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
- package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
- package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
- package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
- package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
- package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +38 -5
- package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
- package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
- package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
- package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
- package/test/spec/modules/visxBidAdapter_spec.js +48 -4
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
- package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
- package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
- package/test/spec/unit/core/adapterManager_spec.js +32 -0
- package/test/spec/unit/core/bidderFactory_spec.js +61 -1
- package/test/spec/unit/pbjs_api_spec.js +37 -2
- package/test/spec/unit/secureCreatives_spec.js +54 -25
- package/modules/turktelekomBidAdapter.md +0 -49
|
@@ -19,7 +19,7 @@ const PUBLINK_S2S_COOKIE = '_publink_srv';
|
|
|
19
19
|
export const storage = getStorageManager(GVLID);
|
|
20
20
|
|
|
21
21
|
function isHex(s) {
|
|
22
|
-
return
|
|
22
|
+
return /^[A-F0-9]+$/i.test(s);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
function publinkIdUrl(params, consentData) {
|
|
@@ -29,11 +29,16 @@ function publinkIdUrl(params, consentData) {
|
|
|
29
29
|
mpn: 'Prebid.js',
|
|
30
30
|
mpv: '$prebid.version$',
|
|
31
31
|
};
|
|
32
|
+
|
|
32
33
|
if (consentData) {
|
|
33
34
|
url.search.gdpr = (consentData.gdprApplies) ? 1 : 0;
|
|
34
35
|
url.search.gdpr_consent = consentData.consentString;
|
|
35
36
|
}
|
|
36
37
|
|
|
38
|
+
if (params.site_id) { url.search.sid = params.site_id; }
|
|
39
|
+
|
|
40
|
+
if (params.api_key) { url.search.apikey = params.api_key; }
|
|
41
|
+
|
|
37
42
|
const usPrivacyString = uspDataHandler.getConsentData();
|
|
38
43
|
if (usPrivacyString && typeof usPrivacyString === 'string') {
|
|
39
44
|
url.search.us_privacy = usPrivacyString;
|
|
@@ -76,13 +81,18 @@ function getlocalValue() {
|
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
if (typeof value === 'string') {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
// if it's a json object parse it and return the publink value, otherwise assume the value is the id
|
|
85
|
+
if (value.charAt(0) === '{') {
|
|
86
|
+
try {
|
|
87
|
+
const obj = JSON.parse(value);
|
|
88
|
+
if (obj) {
|
|
89
|
+
return obj.publink;
|
|
90
|
+
}
|
|
91
|
+
} catch (e) {
|
|
92
|
+
logError(e);
|
|
83
93
|
}
|
|
84
|
-
}
|
|
85
|
-
|
|
94
|
+
} else {
|
|
95
|
+
return value;
|
|
86
96
|
}
|
|
87
97
|
}
|
|
88
98
|
}
|
|
@@ -7,7 +7,10 @@ Publink user id module
|
|
|
7
7
|
| Param Name | Required | Type | Description | Example |
|
|
8
8
|
| --- | --- | --- | --- | --- |
|
|
9
9
|
| name | Yes | String | module identifier | `"publinkId"` |
|
|
10
|
-
| params.e | Yes | String | hashed email address | `"
|
|
10
|
+
| params.e | Yes | String | hashed email address | `"7D320454942620664D96EF78ED4E3A2A"` |
|
|
11
|
+
| params.api_key | Yes | String | api key for access | `"7ab62359-bdc0-4095-b573-ef474fb55d24"` |
|
|
12
|
+
| params.site_id | Yes | String | site identifier | `"123456"` |
|
|
13
|
+
|
|
11
14
|
|
|
12
15
|
### Example configuration for Publink
|
|
13
16
|
```
|
|
@@ -20,7 +23,9 @@ pbjs.setConfig({
|
|
|
20
23
|
type: "html5"
|
|
21
24
|
},
|
|
22
25
|
params: {
|
|
23
|
-
e: "
|
|
26
|
+
e: "7D320454942620664D96EF78ED4E3A2A", // example hashed email (md5)
|
|
27
|
+
site_id: "123456", // provided by Epsilon
|
|
28
|
+
api_key: "7ab62359-bdc0-4095-b573-ef474fb55d2" // provided by Epsilon
|
|
24
29
|
}
|
|
25
30
|
}],
|
|
26
31
|
}
|
|
@@ -17,6 +17,7 @@ const DEFAULT_HEIGHT = 0;
|
|
|
17
17
|
const PREBID_NATIVE_HELP_LINK = 'http://prebid.org/dev-docs/show-native-ads.html';
|
|
18
18
|
const PUBLICATION = 'pubmatic'; // Your publication on Blue Billywig, potentially with environment (e.g. publication.bbvms.com or publication.test.bbvms.com)
|
|
19
19
|
const RENDERER_URL = 'https://pubmatic.bbvms.com/r/'.concat('$RENDERER', '.js'); // URL of the renderer application
|
|
20
|
+
const MSG_VIDEO_PLACEMENT_MISSING = 'Video.Placement param missing';
|
|
20
21
|
const CUSTOM_PARAMS = {
|
|
21
22
|
'kadpageurl': '', // Custom page url
|
|
22
23
|
'gender': '', // User gender
|
|
@@ -537,12 +538,20 @@ function _createBannerRequest(bid) {
|
|
|
537
538
|
return bannerObj;
|
|
538
539
|
}
|
|
539
540
|
|
|
541
|
+
export function checkVideoPlacement(videoData, adUnitCode) {
|
|
542
|
+
// Check for video.placement property. If property is missing display log message.
|
|
543
|
+
if (!deepAccess(videoData, 'placement')) {
|
|
544
|
+
logWarn(MSG_VIDEO_PLACEMENT_MISSING + ' for ' + adUnitCode);
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
|
|
540
548
|
function _createVideoRequest(bid) {
|
|
541
549
|
var videoData = mergeDeep(deepAccess(bid.mediaTypes, 'video'), bid.params.video);
|
|
542
550
|
var videoObj;
|
|
543
551
|
|
|
544
552
|
if (videoData !== UNDEFINED) {
|
|
545
553
|
videoObj = {};
|
|
554
|
+
checkVideoPlacement(videoData, bid.adUnitCode);
|
|
546
555
|
for (var key in VIDEO_CUSTOM_PARAMS) {
|
|
547
556
|
if (videoData.hasOwnProperty(key)) {
|
|
548
557
|
videoObj[key] = _checkParamDataType(key, videoData[key], VIDEO_CUSTOM_PARAMS[key]);
|
|
@@ -605,7 +614,7 @@ function _addDealCustomTargetings(imp, bid) {
|
|
|
605
614
|
}
|
|
606
615
|
}
|
|
607
616
|
|
|
608
|
-
function _addJWPlayerSegmentData(imp, bid) {
|
|
617
|
+
function _addJWPlayerSegmentData(imp, bid, isS2S) {
|
|
609
618
|
var jwSegData = (bid.rtd && bid.rtd.jwplayer && bid.rtd.jwplayer.targeting) || undefined;
|
|
610
619
|
var jwPlayerData = '';
|
|
611
620
|
const jwMark = 'jw-';
|
|
@@ -619,10 +628,15 @@ function _addJWPlayerSegmentData(imp, bid) {
|
|
|
619
628
|
for (var i = 0; i < maxLength; i++) {
|
|
620
629
|
jwPlayerData += '|' + jwMark + jwSegData.segments[i] + '=1';
|
|
621
630
|
}
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
631
|
+
|
|
632
|
+
var ext;
|
|
633
|
+
|
|
634
|
+
if (isS2S) {
|
|
635
|
+
(imp.dctr === undefined || imp.dctr.length == 0) ? imp.dctr = jwPlayerData : imp.dctr += '|' + jwPlayerData;
|
|
636
|
+
} else {
|
|
637
|
+
ext = imp.ext;
|
|
638
|
+
ext && ext.key_val === undefined ? ext.key_val = jwPlayerData : ext.key_val += '|' + jwPlayerData;
|
|
639
|
+
}
|
|
626
640
|
}
|
|
627
641
|
|
|
628
642
|
function _createImpressionObject(bid, conf) {
|
|
@@ -1322,7 +1336,9 @@ export const spec = {
|
|
|
1322
1336
|
* @param {Boolean} isOpenRtb boolean to check openrtb2 protocol
|
|
1323
1337
|
* @return {Object} params bid params
|
|
1324
1338
|
*/
|
|
1325
|
-
|
|
1339
|
+
|
|
1340
|
+
transformBidParams: function (params, isOpenRtb, adUnit, bidRequests) {
|
|
1341
|
+
_addJWPlayerSegmentData(params, adUnit.bids[0], true);
|
|
1326
1342
|
return convertTypes({
|
|
1327
1343
|
'publisherId': 'string',
|
|
1328
1344
|
'adSlot': 'string'
|
|
@@ -25,7 +25,7 @@ var adUnits = [
|
|
|
25
25
|
bidder: 'pubmatic',
|
|
26
26
|
params: {
|
|
27
27
|
publisherId: '156209', // required, must be a string, not an integer or other js type.
|
|
28
|
-
|
|
28
|
+
outstreamAU: 'renderer_test_pubmatic', // required if mediaTypes-> video-> context is 'outstream' and optional if renderer is defined in adUnits or in mediaType video. This value can be get by BlueBillyWig Team.
|
|
29
29
|
adSlot: 'pubmatic_test2', // optional, must be a string, not an integer or other js type.
|
|
30
30
|
pmzoneid: 'zone1, zone11', // optional
|
|
31
31
|
lat: '40.712775', // optional
|
|
@@ -6,7 +6,7 @@ import { getStorageManager } from '../src/storageManager.js';
|
|
|
6
6
|
|
|
7
7
|
const BIDDER_CODE = 'relaido';
|
|
8
8
|
const BIDDER_DOMAIN = 'api.relaido.jp';
|
|
9
|
-
const ADAPTER_VERSION = '1.0.
|
|
9
|
+
const ADAPTER_VERSION = '1.0.6';
|
|
10
10
|
const DEFAULT_TTL = 300;
|
|
11
11
|
const UUID_KEY = 'relaido_uuid';
|
|
12
12
|
|
|
@@ -68,9 +68,15 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
68
68
|
media_type: mediaType,
|
|
69
69
|
uuid: uuid,
|
|
70
70
|
width: width,
|
|
71
|
-
height: height
|
|
71
|
+
height: height,
|
|
72
|
+
pv: '$prebid.version$'
|
|
72
73
|
};
|
|
73
74
|
|
|
75
|
+
const imuid = deepAccess(bidRequest, 'userId.imuid');
|
|
76
|
+
if (imuid) {
|
|
77
|
+
payload.imuid = imuid;
|
|
78
|
+
}
|
|
79
|
+
|
|
74
80
|
// It may not be encoded, so add it at the end of the payload
|
|
75
81
|
payload.ref = bidderRequest.refererInfo.referer;
|
|
76
82
|
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
* @function?
|
|
43
43
|
* @summary modify bid request data
|
|
44
44
|
* @name RtdSubmodule#getBidRequestData
|
|
45
|
-
* @param {SubmoduleConfig} config
|
|
46
|
-
* @param {UserConsentData} userConsent
|
|
47
45
|
* @param {Object} reqBidsConfigObj
|
|
48
46
|
* @param {function} callback
|
|
47
|
+
* @param {SubmoduleConfig} config
|
|
48
|
+
* @param {UserConsentData} userConsent
|
|
49
49
|
*/
|
|
50
50
|
|
|
51
51
|
/**
|
|
@@ -3,9 +3,8 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
5
5
|
import { createEidsArray } from './userId/eids.js';
|
|
6
|
-
import find from 'core-js-pure/features/array/find.js';
|
|
7
6
|
|
|
8
|
-
const VERSION = '4.0.
|
|
7
|
+
const VERSION = '4.0.1';
|
|
9
8
|
const BIDDER_CODE = 'sharethrough';
|
|
10
9
|
const SUPPLY_ID = 'WYu2BXv1';
|
|
11
10
|
|
|
@@ -141,16 +140,16 @@ export const sharethroughAdapterSpec = {
|
|
|
141
140
|
};
|
|
142
141
|
}).filter(imp => !!imp);
|
|
143
142
|
|
|
144
|
-
return {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
};
|
|
143
|
+
return imps.map(impression => {
|
|
144
|
+
return {
|
|
145
|
+
method: 'POST',
|
|
146
|
+
url: STR_ENDPOINT,
|
|
147
|
+
data: {
|
|
148
|
+
...req,
|
|
149
|
+
imp: [impression],
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
});
|
|
154
153
|
},
|
|
155
154
|
|
|
156
155
|
interpretResponse: ({ body }, req) => {
|
|
@@ -159,8 +158,6 @@ export const sharethroughAdapterSpec = {
|
|
|
159
158
|
}
|
|
160
159
|
|
|
161
160
|
return body.seatbid[0].bid.map(bid => {
|
|
162
|
-
const request = matchRequest(bid.impid, req);
|
|
163
|
-
|
|
164
161
|
const response = {
|
|
165
162
|
requestId: bid.impid,
|
|
166
163
|
width: +bid.w,
|
|
@@ -168,7 +165,7 @@ export const sharethroughAdapterSpec = {
|
|
|
168
165
|
cpm: +bid.price,
|
|
169
166
|
creativeId: bid.crid,
|
|
170
167
|
dealId: bid.dealid || null,
|
|
171
|
-
mediaType:
|
|
168
|
+
mediaType: req.data.imp[0].video ? VIDEO : BANNER,
|
|
172
169
|
currency: body.cur || 'USD',
|
|
173
170
|
netRevenue: true,
|
|
174
171
|
ttl: 360,
|
|
@@ -270,10 +267,6 @@ function getProtocol() {
|
|
|
270
267
|
return window.location.protocol;
|
|
271
268
|
}
|
|
272
269
|
|
|
273
|
-
function matchRequest(id, request) {
|
|
274
|
-
return find(request.bidRequests, bid => bid.bidId === id);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
270
|
// stub for ?? operator
|
|
278
271
|
function nullish(input, def) {
|
|
279
272
|
return input === null || input === undefined ? def : input;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { getValue, parseSizesInput, getBidIdParameter } from '../src/utils.js';
|
|
2
|
+
import {
|
|
3
|
+
registerBidder
|
|
4
|
+
} from '../src/adapters/bidderFactory.js';
|
|
5
|
+
import {
|
|
6
|
+
ajax
|
|
7
|
+
} from '../src/ajax.js';
|
|
8
|
+
const BIDDER_CODE = 'slimcut';
|
|
9
|
+
const ENDPOINT_URL = 'https://sb.freeskreen.com/pbr';
|
|
10
|
+
export const spec = {
|
|
11
|
+
code: BIDDER_CODE,
|
|
12
|
+
aliases: ['scm'],
|
|
13
|
+
supportedMediaTypes: ['video', 'banner'],
|
|
14
|
+
/**
|
|
15
|
+
* Determines whether or not the given bid request is valid.
|
|
16
|
+
*
|
|
17
|
+
* @param {BidRequest} bid The bid params to validate.
|
|
18
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
19
|
+
*/
|
|
20
|
+
isBidRequestValid: function(bid) {
|
|
21
|
+
let isValid = false;
|
|
22
|
+
if (typeof bid.params !== 'undefined' && !isNaN(parseInt(getValue(bid.params, 'placementId'))) && parseInt(getValue(bid.params, 'placementId')) > 0) {
|
|
23
|
+
isValid = true;
|
|
24
|
+
}
|
|
25
|
+
return isValid;
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* Make a server request from the list of BidRequests.
|
|
29
|
+
*
|
|
30
|
+
* @param {validBidRequests[]} an array of bids
|
|
31
|
+
* @return ServerRequest Info describing the request to the server.
|
|
32
|
+
*/
|
|
33
|
+
buildRequests: function(validBidRequests, bidderRequest) {
|
|
34
|
+
const bids = validBidRequests.map(buildRequestObject);
|
|
35
|
+
const payload = {
|
|
36
|
+
referrer: getReferrerInfo(bidderRequest),
|
|
37
|
+
data: bids,
|
|
38
|
+
deviceWidth: screen.width
|
|
39
|
+
};
|
|
40
|
+
let gdpr = bidderRequest.gdprConsent;
|
|
41
|
+
if (bidderRequest && gdpr) {
|
|
42
|
+
let isCmp = (typeof gdpr.gdprApplies === 'boolean')
|
|
43
|
+
let isConsentString = (typeof gdpr.consentString === 'string')
|
|
44
|
+
payload.gdpr_iab = {
|
|
45
|
+
consent: isConsentString ? gdpr.consentString : '',
|
|
46
|
+
status: isCmp ? gdpr.gdprApplies : -1
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const payloadString = JSON.stringify(payload);
|
|
50
|
+
return {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
url: ENDPOINT_URL,
|
|
53
|
+
data: payloadString,
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
/**
|
|
57
|
+
* Unpack the response from the server into a list of bids.
|
|
58
|
+
*
|
|
59
|
+
* @param {*} serverResponse A successful response from the server.
|
|
60
|
+
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
61
|
+
*/
|
|
62
|
+
interpretResponse: function(serverResponse, request) {
|
|
63
|
+
const bidResponses = [];
|
|
64
|
+
serverResponse = serverResponse.body;
|
|
65
|
+
if (serverResponse.responses) {
|
|
66
|
+
serverResponse.responses.forEach(function(bid) {
|
|
67
|
+
const bidResponse = {
|
|
68
|
+
cpm: bid.cpm,
|
|
69
|
+
width: bid.width,
|
|
70
|
+
height: bid.height,
|
|
71
|
+
currency: bid.currency,
|
|
72
|
+
netRevenue: bid.netRevenue,
|
|
73
|
+
ttl: bid.ttl,
|
|
74
|
+
ad: bid.ad,
|
|
75
|
+
requestId: bid.requestId,
|
|
76
|
+
creativeId: bid.creativeId,
|
|
77
|
+
transactionId: bid.tranactionId,
|
|
78
|
+
winUrl: bid.winUrl,
|
|
79
|
+
meta: {
|
|
80
|
+
advertiserDomains: bid.adomain || []
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
bidResponses.push(bidResponse);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return bidResponses;
|
|
87
|
+
},
|
|
88
|
+
getUserSyncs: function(syncOptions, serverResponses) {
|
|
89
|
+
if (syncOptions.iframeEnabled) {
|
|
90
|
+
return [{
|
|
91
|
+
type: 'iframe',
|
|
92
|
+
url: 'https://sb.freeskreen.com/async_usersync.html'
|
|
93
|
+
}];
|
|
94
|
+
}
|
|
95
|
+
return [];
|
|
96
|
+
},
|
|
97
|
+
onBidWon: function(bid) {
|
|
98
|
+
ajax(bid.winUrl + bid.cpm, null);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function buildRequestObject(bid) {
|
|
102
|
+
const reqObj = {};
|
|
103
|
+
let placementId = getValue(bid.params, 'placementId');
|
|
104
|
+
reqObj.sizes = parseSizesInput(bid.sizes);
|
|
105
|
+
reqObj.bidId = getBidIdParameter('bidId', bid);
|
|
106
|
+
reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bid);
|
|
107
|
+
reqObj.placementId = parseInt(placementId);
|
|
108
|
+
reqObj.adUnitCode = getBidIdParameter('adUnitCode', bid);
|
|
109
|
+
reqObj.auctionId = getBidIdParameter('auctionId', bid);
|
|
110
|
+
reqObj.transactionId = getBidIdParameter('transactionId', bid);
|
|
111
|
+
return reqObj;
|
|
112
|
+
}
|
|
113
|
+
function getReferrerInfo(bidderRequest) {
|
|
114
|
+
let ref = window.location.href;
|
|
115
|
+
if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) {
|
|
116
|
+
ref = bidderRequest.refererInfo.referer;
|
|
117
|
+
}
|
|
118
|
+
return ref;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
registerBidder(spec);
|
|
@@ -83,8 +83,15 @@ export const spec = {
|
|
|
83
83
|
'lib_name': 'prebid',
|
|
84
84
|
'lib_v': '$prebid.version$',
|
|
85
85
|
'us': 0,
|
|
86
|
+
|
|
86
87
|
};
|
|
87
88
|
|
|
89
|
+
const fpd = config.getConfig('ortb2');
|
|
90
|
+
|
|
91
|
+
if (fpd) {
|
|
92
|
+
payload.fpd = JSON.stringify(fpd);
|
|
93
|
+
}
|
|
94
|
+
|
|
88
95
|
if (config.getConfig('userSync') && config.getConfig('userSync').syncsPerBidder) {
|
|
89
96
|
payload.us = config.getConfig('userSync').syncsPerBidder;
|
|
90
97
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logError, deepAccess, isArray, getBidIdParameter, getDNT, deepSetValue, isEmpty, _each, logMessage, logWarn, isBoolean, isNumber, isPlainObject } from '../src/utils.js';
|
|
1
|
+
import { logError, deepAccess, isArray, getBidIdParameter, getDNT, deepSetValue, isEmpty, _each, logMessage, logWarn, isBoolean, isNumber, isPlainObject, isFn } from '../src/utils.js';
|
|
2
2
|
import { config } from '../src/config.js';
|
|
3
3
|
import { Renderer } from '../src/Renderer.js';
|
|
4
4
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
@@ -163,6 +163,20 @@ export const spec = {
|
|
|
163
163
|
}
|
|
164
164
|
};
|
|
165
165
|
|
|
166
|
+
if (isFn(bid.getFloor)) {
|
|
167
|
+
let floorInfo = bid.getFloor({
|
|
168
|
+
currency: 'USD',
|
|
169
|
+
mediaType: 'video',
|
|
170
|
+
size: '*'
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
if (floorInfo.currency === 'USD') {
|
|
174
|
+
spotxReq.bidfloor = floorInfo.floor;
|
|
175
|
+
}
|
|
176
|
+
} else if (getBidIdParameter('price_floor', bid.params) != '') {
|
|
177
|
+
spotxReq.bidfloor = getBidIdParameter('price_floor', bid.params);
|
|
178
|
+
}
|
|
179
|
+
|
|
166
180
|
if (getBidIdParameter('start_delay', bid.params) != '') {
|
|
167
181
|
spotxReq.video.startdelay = 0 + Boolean(getBidIdParameter('start_delay', bid.params));
|
|
168
182
|
}
|