prebid.js 6.0.0 → 6.4.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/.babelrc.js +1 -7
- package/.circleci/config.yml +1 -1
- package/README.md +1 -1
- package/browsers.json +13 -29
- package/gulpfile.js +88 -82
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
- package/karma.conf.maker.js +2 -2
- package/modules/33acrossBidAdapter.js +189 -102
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/addefendBidAdapter.js +1 -0
- package/modules/adheseBidAdapter.js +7 -2
- package/modules/adkernelBidAdapter.js +147 -61
- package/modules/adlivetechBidAdapter.md +61 -0
- package/modules/adlooxAdServerVideo.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +4 -4
- package/modules/admanBidAdapter.js +1 -0
- package/modules/admixerBidAdapter.js +3 -2
- package/modules/adnuntiusBidAdapter.js +5 -2
- package/modules/adomikAnalyticsAdapter.js +16 -4
- package/modules/adplusBidAdapter.js +203 -0
- package/modules/adplusBidAdapter.md +39 -0
- package/modules/adxcgBidAdapter.js +311 -359
- package/modules/adxcgBidAdapter.md +22 -21
- package/modules/adyoulikeBidAdapter.js +7 -2
- package/modules/aniviewBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +23 -3
- package/modules/beachfrontBidAdapter.js +14 -17
- package/modules/beopBidAdapter.js +6 -4
- package/modules/bidViewability.js +3 -3
- package/modules/bidViewabilityIO.js +3 -3
- package/modules/codefuelBidAdapter.js +1 -3
- package/modules/codefuelBidAdapter.md +3 -3
- package/modules/colossussspBidAdapter.js +7 -0
- package/modules/compassBidAdapter.js +201 -0
- package/modules/compassBidAdapter.md +79 -0
- package/modules/craftBidAdapter.js +5 -3
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/currency.js +2 -2
- package/modules/cwireBidAdapter.js +3 -0
- package/modules/dailyhuntBidAdapter.js +435 -0
- package/modules/dailyhuntBidAdapter.md +4 -0
- package/modules/datablocksBidAdapter.js +3 -3
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/deepintentBidAdapter.js +1 -1
- package/modules/dspxBidAdapter.js +1 -1
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +68 -54
- package/modules/feedadBidAdapter.js +2 -2
- package/modules/feedadBidAdapter.md +4 -2
- package/modules/freewheel-sspBidAdapter.js +6 -0
- package/modules/futureads.md +48 -0
- package/modules/glimpseBidAdapter.js +44 -16
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +11 -5
- package/modules/gridBidAdapter.js +5 -4
- package/modules/gumgumBidAdapter.js +7 -3
- package/modules/id5IdSystem.md +6 -6
- package/modules/imRtdProvider.js +31 -0
- package/modules/improvedigitalBidAdapter.js +19 -3
- package/modules/instreamTracking.js +4 -4
- package/modules/intersectionRtdProvider.js +114 -0
- package/modules/invibesBidAdapter.js +64 -14
- package/modules/invibesBidAdapter.md +2 -1
- package/modules/ipromBidAdapter.js +79 -0
- package/modules/ixBidAdapter.js +185 -22
- package/modules/kinessoIdSystem.js +1 -1
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedBidAdapter.js +8 -2
- package/modules/lotamePanoramaIdSystem.js +80 -8
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/mediasquareBidAdapter.js +1 -9
- package/modules/merkleIdSystem.js +5 -0
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/nativoBidAdapter.js +27 -1
- package/modules/nextMillenniumBidAdapter.js +37 -7
- package/modules/oguryBidAdapter.js +2 -1
- package/modules/openxBidAdapter.js +6 -1
- package/modules/prebidServerBidAdapter/index.js +19 -15
- package/modules/pubgeniusBidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +5 -3
- package/modules/pubxaiAnalyticsAdapter.js +17 -0
- package/modules/relaidoBidAdapter.js +86 -65
- package/modules/richaudienceBidAdapter.js +2 -3
- package/modules/rtdModule/index.js +48 -18
- package/modules/rubiconBidAdapter.js +31 -19
- package/modules/saambaaBidAdapter.js +420 -0
- package/modules/saambaaBidAdapter.md +65 -68
- package/modules/seedtagBidAdapter.js +6 -0
- package/modules/sharedIdSystem.js +27 -1
- package/modules/smaatoBidAdapter.js +9 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/sspBCBidAdapter.js +34 -3
- package/modules/tappxBidAdapter.js +3 -1
- package/modules/targetVideoBidAdapter.js +187 -0
- package/modules/targetVideoBidAdapter.md +34 -0
- package/modules/telariaBidAdapter.js +2 -2
- package/modules/trustxBidAdapter.js +18 -17
- package/modules/undertoneBidAdapter.js +8 -1
- package/modules/userId/index.js +27 -2
- package/modules/ventes.md +71 -0
- package/modules/ventesBidAdapter.js +104 -64
- package/modules/ventesBidAdapter.md +0 -1
- package/modules/vidoomyBidAdapter.js +65 -108
- package/modules/visxBidAdapter.js +20 -3
- package/modules/visxBidAdapter.md +4 -6
- package/modules/weboramaRtdProvider.js +288 -73
- package/modules/weboramaRtdProvider.md +27 -10
- package/modules/yahoosspBidAdapter.js +5 -1
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +41 -10
- package/modules/yieldlabBidAdapter.md +91 -48
- package/modules/yieldoneBidAdapter.js +115 -11
- package/modules/zetaSspBidAdapter.md +33 -1
- package/modules/zeta_global_sspBidAdapter.js +22 -1
- package/package.json +6 -1
- package/plugins/pbjsGlobals.js +28 -1
- package/src/adapterManager.js +14 -8
- package/src/auction.js +5 -4
- package/src/prebid.js +1 -2
- package/src/targeting.js +24 -3
- package/src/utils.js +41 -7
- package/test/helpers/prebidGlobal.js +1 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
- package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
- package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
- package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
- package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +63 -1
- package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
- package/test/spec/modules/beopBidAdapter_spec.js +1 -1
- package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
- package/test/spec/modules/bidViewability_spec.js +4 -4
- package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
- package/test/spec/modules/compassBidAdapter_spec.js +397 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
- package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
- package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
- package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
- package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +58 -4
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/imRtdProvider_spec.js +25 -0
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
- package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
- package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
- package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
- package/test/spec/modules/ixBidAdapter_spec.js +293 -2
- package/test/spec/modules/konduitWrapper_spec.js +0 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
- package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
- package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
- package/test/spec/modules/merkleIdSystem_spec.js +18 -0
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
- package/test/spec/modules/openxBidAdapter_spec.js +5 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
- package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
- package/test/spec/modules/realTimeDataModule_spec.js +135 -49
- package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
- package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
- package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
- package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
- package/test/spec/modules/sharedIdSystem_spec.js +52 -6
- package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
- package/test/spec/modules/visxBidAdapter_spec.js +121 -5
- package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
- package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
- package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
- package/test/spec/unit/core/adapterManager_spec.js +24 -6
- package/test/spec/unit/core/targeting_spec.js +116 -0
- package/test/spec/utils_spec.js +38 -0
- package/test/test_deps.js +3 -0
- package/test/test_index.js +1 -3
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Compass Bidder Adapter
|
|
5
|
+
Module Type: Compass Bidder Adapter
|
|
6
|
+
Maintainer: sa-support@brightcom.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Connects to Compass exchange for bids.
|
|
12
|
+
Compass bid adapter supports Banner, Video (instream and outstream) and Native.
|
|
13
|
+
|
|
14
|
+
# Test Parameters
|
|
15
|
+
```
|
|
16
|
+
var adUnits = [
|
|
17
|
+
// Will return static test banner
|
|
18
|
+
{
|
|
19
|
+
code: 'adunit1',
|
|
20
|
+
mediaTypes: {
|
|
21
|
+
banner: {
|
|
22
|
+
sizes: [ [300, 250], [320, 50] ],
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
bids: [
|
|
26
|
+
{
|
|
27
|
+
bidder: 'compass',
|
|
28
|
+
params: {
|
|
29
|
+
placementId: 'testBanner',
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
code: 'addunit2',
|
|
36
|
+
mediaTypes: {
|
|
37
|
+
video: {
|
|
38
|
+
playerSize: [ [640, 480] ],
|
|
39
|
+
context: 'instream',
|
|
40
|
+
minduration: 5,
|
|
41
|
+
maxduration: 60,
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
bids: [
|
|
45
|
+
{
|
|
46
|
+
bidder: 'compass',
|
|
47
|
+
params: {
|
|
48
|
+
placementId: 'testVideo',
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
code: 'addunit3',
|
|
55
|
+
mediaTypes: {
|
|
56
|
+
native: {
|
|
57
|
+
title: {
|
|
58
|
+
required: true
|
|
59
|
+
},
|
|
60
|
+
body: {
|
|
61
|
+
required: true
|
|
62
|
+
},
|
|
63
|
+
icon: {
|
|
64
|
+
required: true,
|
|
65
|
+
size: [64, 64]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
bids: [
|
|
70
|
+
{
|
|
71
|
+
bidder: 'compass',
|
|
72
|
+
params: {
|
|
73
|
+
placementId: 'testNative',
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
```
|
|
@@ -5,6 +5,7 @@ import { auctionManager } from '../src/auctionManager.js';
|
|
|
5
5
|
import find from 'core-js-pure/features/array/find.js';
|
|
6
6
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
7
7
|
import { getStorageManager } from '../src/storageManager.js';
|
|
8
|
+
import {ajax} from '../src/ajax.js';
|
|
8
9
|
|
|
9
10
|
const BIDDER_CODE = 'craft';
|
|
10
11
|
const URL_BASE = 'https://gacraft.jp/prebid-v3';
|
|
@@ -110,9 +111,10 @@ export const spec = {
|
|
|
110
111
|
},
|
|
111
112
|
|
|
112
113
|
onBidWon: function(bid) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
ajax(bid._prebidWon, null, null, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
contentType: 'application/json'
|
|
117
|
+
});
|
|
116
118
|
}
|
|
117
119
|
};
|
|
118
120
|
|
|
@@ -24,7 +24,7 @@ const LOG_PREFIX = 'Criteo: ';
|
|
|
24
24
|
Unminified source code can be found in the privately shared repo: https://github.com/Prebid-org/prebid-js-external-js-criteo/blob/master/dist/prod.js
|
|
25
25
|
*/
|
|
26
26
|
const FAST_BID_VERSION_PLACEHOLDER = '%FAST_BID_VERSION%';
|
|
27
|
-
export const FAST_BID_VERSION_CURRENT =
|
|
27
|
+
export const FAST_BID_VERSION_CURRENT = 116;
|
|
28
28
|
const FAST_BID_VERSION_LATEST = 'latest';
|
|
29
29
|
const FAST_BID_VERSION_NONE = 'none';
|
|
30
30
|
const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
|
package/modules/currency.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logInfo, logWarn, logError, logMessage } from '../src/utils.js';
|
|
2
2
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
3
3
|
import { createBid } from '../src/bidfactory.js';
|
|
4
|
-
import
|
|
4
|
+
import CONSTANTS from '../src/constants.json';
|
|
5
5
|
import { ajax } from '../src/ajax.js';
|
|
6
6
|
import { config } from '../src/config.js';
|
|
7
7
|
import { getHook } from '../src/hook.js';
|
|
@@ -219,7 +219,7 @@ function wrapFunction(fn, context, params) {
|
|
|
219
219
|
}
|
|
220
220
|
} catch (e) {
|
|
221
221
|
logWarn('Returning NO_BID, getCurrencyConversion threw error: ', e);
|
|
222
|
-
params[1] = createBid(STATUS.NO_BID, {
|
|
222
|
+
params[1] = createBid(CONSTANTS.STATUS.NO_BID, {
|
|
223
223
|
bidder: bid.bidderCode || bid.bidder,
|
|
224
224
|
bidId: bid.requestId
|
|
225
225
|
});
|
|
@@ -26,6 +26,7 @@ export const RENDERER_URL = 'https://cdn.cwi.re/prebid/renderer/LATEST/renderer.
|
|
|
26
26
|
export const CW_PAGE_VIEW_ID = generateUUID();
|
|
27
27
|
const LS_CWID_KEY = 'cw_cwid';
|
|
28
28
|
const CW_GROUPS_QUERY = 'cwgroups';
|
|
29
|
+
const CW_CREATIVE_QUERY = 'cwcreative';
|
|
29
30
|
|
|
30
31
|
const storage = getStorageManager();
|
|
31
32
|
|
|
@@ -161,6 +162,7 @@ export const spec = {
|
|
|
161
162
|
|
|
162
163
|
let refgroups = [];
|
|
163
164
|
|
|
165
|
+
const cwCreativeId = getQueryVariable(CW_CREATIVE_QUERY);
|
|
164
166
|
const rgQuery = getQueryVariable(CW_GROUPS_QUERY);
|
|
165
167
|
if (rgQuery !== null) {
|
|
166
168
|
refgroups = rgQuery.split(',');
|
|
@@ -171,6 +173,7 @@ export const spec = {
|
|
|
171
173
|
const payload = {
|
|
172
174
|
cwid: localStorageCWID,
|
|
173
175
|
refgroups,
|
|
176
|
+
cwcreative: cwCreativeId,
|
|
174
177
|
slots: slots,
|
|
175
178
|
httpRef: referer || '',
|
|
176
179
|
pageViewId: CW_PAGE_VIEW_ID,
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import * as mediaTypes from '../src/mediaTypes.js';
|
|
3
|
+
import {deepAccess, _map, isEmpty} from '../src/utils.js';
|
|
4
|
+
import { ajax } from '../src/ajax.js';
|
|
5
|
+
import find from 'core-js-pure/features/array/find.js';
|
|
6
|
+
import { OUTSTREAM, INSTREAM } from '../src/video.js';
|
|
7
|
+
|
|
8
|
+
const BIDDER_CODE = 'dailyhunt';
|
|
9
|
+
const BIDDER_ALIAS = 'dh';
|
|
10
|
+
const SUPPORTED_MEDIA_TYPES = [mediaTypes.BANNER, mediaTypes.NATIVE, mediaTypes.VIDEO];
|
|
11
|
+
|
|
12
|
+
const PROD_PREBID_ENDPOINT_URL = 'https://pbs.dailyhunt.in/openrtb2/auction?partner=';
|
|
13
|
+
const PROD_PREBID_TEST_ENDPOINT_URL = 'https://qa-pbs-van.dailyhunt.in/openrtb2/auction?partner=';
|
|
14
|
+
|
|
15
|
+
const ORTB_NATIVE_TYPE_MAPPING = {
|
|
16
|
+
img: {
|
|
17
|
+
'3': 'image',
|
|
18
|
+
'1': 'icon'
|
|
19
|
+
},
|
|
20
|
+
data: {
|
|
21
|
+
'1': 'sponsoredBy',
|
|
22
|
+
'2': 'body',
|
|
23
|
+
'3': 'rating',
|
|
24
|
+
'4': 'likes',
|
|
25
|
+
'5': 'downloads',
|
|
26
|
+
'6': 'price',
|
|
27
|
+
'7': 'salePrice',
|
|
28
|
+
'8': 'phone',
|
|
29
|
+
'9': 'address',
|
|
30
|
+
'10': 'body2',
|
|
31
|
+
'11': 'displayUrl',
|
|
32
|
+
'12': 'cta'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const ORTB_NATIVE_PARAMS = {
|
|
37
|
+
title: {
|
|
38
|
+
id: 0,
|
|
39
|
+
name: 'title'
|
|
40
|
+
},
|
|
41
|
+
icon: {
|
|
42
|
+
id: 1,
|
|
43
|
+
type: 1,
|
|
44
|
+
name: 'img'
|
|
45
|
+
},
|
|
46
|
+
image: {
|
|
47
|
+
id: 2,
|
|
48
|
+
type: 3,
|
|
49
|
+
name: 'img'
|
|
50
|
+
},
|
|
51
|
+
sponsoredBy: {
|
|
52
|
+
id: 3,
|
|
53
|
+
name: 'data',
|
|
54
|
+
type: 1
|
|
55
|
+
},
|
|
56
|
+
body: {
|
|
57
|
+
id: 4,
|
|
58
|
+
name: 'data',
|
|
59
|
+
type: 2
|
|
60
|
+
},
|
|
61
|
+
cta: {
|
|
62
|
+
id: 5,
|
|
63
|
+
type: 12,
|
|
64
|
+
name: 'data'
|
|
65
|
+
},
|
|
66
|
+
body2: {
|
|
67
|
+
id: 4,
|
|
68
|
+
name: 'data',
|
|
69
|
+
type: 10
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// Encode URI.
|
|
74
|
+
const _encodeURIComponent = function (a) {
|
|
75
|
+
let b = window.encodeURIComponent(a);
|
|
76
|
+
b = b.replace(/'/g, '%27');
|
|
77
|
+
return b;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Extract key from collections.
|
|
81
|
+
const extractKeyInfo = (collection, key) => {
|
|
82
|
+
for (let i = 0, result; i < collection.length; i++) {
|
|
83
|
+
result = deepAccess(collection[i].params, key);
|
|
84
|
+
if (result) {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return undefined
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Flattern Array.
|
|
92
|
+
const flatten = (arr) => {
|
|
93
|
+
return [].concat(...arr);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const createOrtbRequest = (validBidRequests, bidderRequest) => {
|
|
97
|
+
let device = createOrtbDeviceObj(validBidRequests);
|
|
98
|
+
let user = createOrtbUserObj(validBidRequests)
|
|
99
|
+
let site = createOrtbSiteObj(validBidRequests, bidderRequest.refererInfo.referer)
|
|
100
|
+
return {
|
|
101
|
+
id: bidderRequest.auctionId,
|
|
102
|
+
imp: [],
|
|
103
|
+
site,
|
|
104
|
+
device,
|
|
105
|
+
user,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const createOrtbDeviceObj = (validBidRequests) => {
|
|
110
|
+
let device = { ...extractKeyInfo(validBidRequests, `device`) };
|
|
111
|
+
device.ua = navigator.userAgent;
|
|
112
|
+
return device;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const createOrtbUserObj = (validBidRequests) => ({ ...extractKeyInfo(validBidRequests, `user`) })
|
|
116
|
+
|
|
117
|
+
const createOrtbSiteObj = (validBidRequests, page) => {
|
|
118
|
+
let site = { ...extractKeyInfo(validBidRequests, `site`), page };
|
|
119
|
+
let publisher = createOrtbPublisherObj(validBidRequests);
|
|
120
|
+
if (!site.publisher) {
|
|
121
|
+
site.publisher = publisher
|
|
122
|
+
}
|
|
123
|
+
return site
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const createOrtbPublisherObj = (validBidRequests) => ({ ...extractKeyInfo(validBidRequests, `publisher`) })
|
|
127
|
+
|
|
128
|
+
// get bidFloor Function for different creatives
|
|
129
|
+
function getBidFloor(bid, creative) {
|
|
130
|
+
let floorInfo = typeof (bid.getFloor) == 'function' ? bid.getFloor({ currency: 'USD', mediaType: creative, size: '*' }) : {};
|
|
131
|
+
return Math.floor(floorInfo.floor || (bid.params.bidfloor ? bid.params.bidfloor : 0.0));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const createOrtbImpObj = (bid) => {
|
|
135
|
+
let params = bid.params
|
|
136
|
+
let testMode = !!bid.params.test_mode
|
|
137
|
+
|
|
138
|
+
// Validate Banner Request.
|
|
139
|
+
let bannerObj = deepAccess(bid.mediaTypes, `banner`);
|
|
140
|
+
let nativeObj = deepAccess(bid.mediaTypes, `native`);
|
|
141
|
+
let videoObj = deepAccess(bid.mediaTypes, `video`);
|
|
142
|
+
|
|
143
|
+
let imp = {
|
|
144
|
+
id: bid.bidId,
|
|
145
|
+
ext: {
|
|
146
|
+
dailyhunt: {
|
|
147
|
+
placement_id: params.placement_id,
|
|
148
|
+
publisher_id: params.publisher_id,
|
|
149
|
+
partner: params.partner_name
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// Test Mode Campaign.
|
|
155
|
+
if (testMode) {
|
|
156
|
+
imp.ext.test_mode = testMode;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (bannerObj) {
|
|
160
|
+
imp.banner = {
|
|
161
|
+
...createOrtbImpBannerObj(bid, bannerObj)
|
|
162
|
+
}
|
|
163
|
+
imp.bidfloor = getBidFloor(bid, 'banner');
|
|
164
|
+
} else if (nativeObj) {
|
|
165
|
+
imp.native = {
|
|
166
|
+
...createOrtbImpNativeObj(bid, nativeObj)
|
|
167
|
+
}
|
|
168
|
+
imp.bidfloor = getBidFloor(bid, 'native');
|
|
169
|
+
} else if (videoObj) {
|
|
170
|
+
imp.video = {
|
|
171
|
+
...createOrtbImpVideoObj(bid, videoObj)
|
|
172
|
+
}
|
|
173
|
+
imp.bidfloor = getBidFloor(bid, 'video');
|
|
174
|
+
}
|
|
175
|
+
return imp;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const createOrtbImpBannerObj = (bid, bannerObj) => {
|
|
179
|
+
let format = [];
|
|
180
|
+
bannerObj.sizes.forEach(size => format.push({ w: size[0], h: size[1] }))
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
id: 'banner-' + bid.bidId,
|
|
184
|
+
format
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const createOrtbImpNativeObj = (bid, nativeObj) => {
|
|
189
|
+
const assets = _map(bid.nativeParams, (bidParams, key) => {
|
|
190
|
+
const props = ORTB_NATIVE_PARAMS[key];
|
|
191
|
+
const asset = {
|
|
192
|
+
required: bidParams.required & 1,
|
|
193
|
+
};
|
|
194
|
+
if (props) {
|
|
195
|
+
let h = 0;
|
|
196
|
+
let w = 0;
|
|
197
|
+
|
|
198
|
+
asset.id = props.id;
|
|
199
|
+
|
|
200
|
+
if (bidParams.sizes) {
|
|
201
|
+
const sizes = flatten(bidParams.sizes);
|
|
202
|
+
w = sizes[0];
|
|
203
|
+
h = sizes[1];
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
asset[props.name] = {
|
|
207
|
+
len: bidParams.len ? bidParams.len : 20,
|
|
208
|
+
type: props.type,
|
|
209
|
+
w,
|
|
210
|
+
h
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
return asset;
|
|
214
|
+
}
|
|
215
|
+
}).filter(Boolean);
|
|
216
|
+
let request = {
|
|
217
|
+
assets,
|
|
218
|
+
ver: '1,0'
|
|
219
|
+
}
|
|
220
|
+
return { request: JSON.stringify(request) };
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const createOrtbImpVideoObj = (bid, videoObj) => {
|
|
224
|
+
let obj = {};
|
|
225
|
+
let params = bid.params
|
|
226
|
+
if (!isEmpty(bid.params.video)) {
|
|
227
|
+
obj = {
|
|
228
|
+
topframe: 1,
|
|
229
|
+
skip: params.video.skippable || 0,
|
|
230
|
+
linearity: params.video.linearity || 1,
|
|
231
|
+
minduration: params.video.minduration || 5,
|
|
232
|
+
maxduration: params.video.maxduration || 60,
|
|
233
|
+
mimes: params.video.mimes || ['video/mp4'],
|
|
234
|
+
protocols: getProtocols(params.video),
|
|
235
|
+
w: params.video.playerSize[0][0],
|
|
236
|
+
h: params.video.playerSize[0][1],
|
|
237
|
+
};
|
|
238
|
+
} else {
|
|
239
|
+
obj = {
|
|
240
|
+
mimes: ['video/mp4'],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
obj.ext = {
|
|
244
|
+
...videoObj,
|
|
245
|
+
}
|
|
246
|
+
return obj;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export function getProtocols({protocols}) {
|
|
250
|
+
let defaultValue = [2, 3, 5, 6, 7, 8];
|
|
251
|
+
let listProtocols = [
|
|
252
|
+
{key: 'VAST_1_0', value: 1},
|
|
253
|
+
{key: 'VAST_2_0', value: 2},
|
|
254
|
+
{key: 'VAST_3_0', value: 3},
|
|
255
|
+
{key: 'VAST_1_0_WRAPPER', value: 4},
|
|
256
|
+
{key: 'VAST_2_0_WRAPPER', value: 5},
|
|
257
|
+
{key: 'VAST_3_0_WRAPPER', value: 6},
|
|
258
|
+
{key: 'VAST_4_0', value: 7},
|
|
259
|
+
{key: 'VAST_4_0_WRAPPER', value: 8}
|
|
260
|
+
];
|
|
261
|
+
if (protocols) {
|
|
262
|
+
return listProtocols.filter(p => {
|
|
263
|
+
return protocols.indexOf(p.key) !== -1
|
|
264
|
+
}).map(p => p.value);
|
|
265
|
+
} else {
|
|
266
|
+
return defaultValue;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const createServerRequest = (ortbRequest, validBidRequests, isTestMode = 'false') => ({
|
|
271
|
+
method: 'POST',
|
|
272
|
+
url: isTestMode === 'true' ? PROD_PREBID_TEST_ENDPOINT_URL + validBidRequests[0].params.partner_name : PROD_PREBID_ENDPOINT_URL + validBidRequests[0].params.partner_name,
|
|
273
|
+
data: JSON.stringify(ortbRequest),
|
|
274
|
+
options: {
|
|
275
|
+
contentType: 'application/json',
|
|
276
|
+
withCredentials: true
|
|
277
|
+
},
|
|
278
|
+
bids: validBidRequests
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
const createPrebidBannerBid = (bid, bidResponse) => ({
|
|
282
|
+
requestId: bid.bidId,
|
|
283
|
+
cpm: bidResponse.price.toFixed(2),
|
|
284
|
+
creativeId: bidResponse.crid,
|
|
285
|
+
width: bidResponse.w,
|
|
286
|
+
height: bidResponse.h,
|
|
287
|
+
ttl: 360,
|
|
288
|
+
netRevenue: bid.netRevenue === 'net',
|
|
289
|
+
currency: 'USD',
|
|
290
|
+
ad: bidResponse.adm,
|
|
291
|
+
mediaType: 'banner',
|
|
292
|
+
winUrl: bidResponse.nurl,
|
|
293
|
+
adomain: bidResponse.adomain
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
const createPrebidNativeBid = (bid, bidResponse) => ({
|
|
297
|
+
requestId: bid.bidId,
|
|
298
|
+
cpm: bidResponse.price.toFixed(2),
|
|
299
|
+
creativeId: bidResponse.crid,
|
|
300
|
+
currency: 'USD',
|
|
301
|
+
ttl: 360,
|
|
302
|
+
netRevenue: bid.netRevenue === 'net',
|
|
303
|
+
native: parseNative(bidResponse),
|
|
304
|
+
mediaType: 'native',
|
|
305
|
+
winUrl: bidResponse.nurl,
|
|
306
|
+
width: bidResponse.w,
|
|
307
|
+
height: bidResponse.h,
|
|
308
|
+
adomain: bidResponse.adomain
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
const parseNative = (bid) => {
|
|
312
|
+
let adm = JSON.parse(bid.adm)
|
|
313
|
+
const { assets, link, imptrackers, jstracker } = adm.native;
|
|
314
|
+
const result = {
|
|
315
|
+
clickUrl: _encodeURIComponent(link.url),
|
|
316
|
+
clickTrackers: link.clicktrackers || [],
|
|
317
|
+
impressionTrackers: imptrackers || [],
|
|
318
|
+
javascriptTrackers: jstracker ? [ jstracker ] : []
|
|
319
|
+
};
|
|
320
|
+
assets.forEach(asset => {
|
|
321
|
+
if (!isEmpty(asset.title)) {
|
|
322
|
+
result.title = asset.title.text
|
|
323
|
+
} else if (!isEmpty(asset.img)) {
|
|
324
|
+
result[ORTB_NATIVE_TYPE_MAPPING.img[asset.img.type]] = {
|
|
325
|
+
url: asset.img.url,
|
|
326
|
+
height: asset.img.h,
|
|
327
|
+
width: asset.img.w
|
|
328
|
+
}
|
|
329
|
+
} else if (!isEmpty(asset.data)) {
|
|
330
|
+
result[ORTB_NATIVE_TYPE_MAPPING.data[asset.data.type]] = asset.data.value
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
const createPrebidVideoBid = (bid, bidResponse) => {
|
|
338
|
+
let videoBid = {
|
|
339
|
+
requestId: bid.bidId,
|
|
340
|
+
cpm: bidResponse.price.toFixed(2),
|
|
341
|
+
creativeId: bidResponse.crid,
|
|
342
|
+
width: bidResponse.w,
|
|
343
|
+
height: bidResponse.h,
|
|
344
|
+
ttl: 360,
|
|
345
|
+
netRevenue: bid.netRevenue === 'net',
|
|
346
|
+
currency: 'USD',
|
|
347
|
+
mediaType: 'video',
|
|
348
|
+
winUrl: bidResponse.nurl,
|
|
349
|
+
adomain: bidResponse.adomain
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
let videoContext = bid.mediaTypes.video.context;
|
|
353
|
+
switch (videoContext) {
|
|
354
|
+
case OUTSTREAM:
|
|
355
|
+
videoBid.vastXml = bidResponse.adm;
|
|
356
|
+
break;
|
|
357
|
+
case INSTREAM:
|
|
358
|
+
videoBid.videoCacheKey = bidResponse.ext.bidder.cacheKey;
|
|
359
|
+
videoBid.vastUrl = bidResponse.ext.bidder.vastUrl;
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
return videoBid;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const getQueryVariable = (variable) => {
|
|
366
|
+
let query = window.location.search.substring(1);
|
|
367
|
+
let vars = query.split('&');
|
|
368
|
+
for (var i = 0; i < vars.length; i++) {
|
|
369
|
+
let pair = vars[i].split('=');
|
|
370
|
+
if (decodeURIComponent(pair[0]) == variable) {
|
|
371
|
+
return decodeURIComponent(pair[1]);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
export const spec = {
|
|
378
|
+
code: BIDDER_CODE,
|
|
379
|
+
|
|
380
|
+
aliases: [BIDDER_ALIAS],
|
|
381
|
+
|
|
382
|
+
supportedMediaTypes: SUPPORTED_MEDIA_TYPES,
|
|
383
|
+
|
|
384
|
+
isBidRequestValid: bid => !!bid.params.placement_id && !!bid.params.publisher_id && !!bid.params.partner_name,
|
|
385
|
+
|
|
386
|
+
buildRequests: function (validBidRequests, bidderRequest) {
|
|
387
|
+
let serverRequests = [];
|
|
388
|
+
|
|
389
|
+
// ORTB Request.
|
|
390
|
+
let ortbReq = createOrtbRequest(validBidRequests, bidderRequest);
|
|
391
|
+
|
|
392
|
+
validBidRequests.forEach((bid) => {
|
|
393
|
+
let imp = createOrtbImpObj(bid)
|
|
394
|
+
ortbReq.imp.push(imp);
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
serverRequests.push({ ...createServerRequest(ortbReq, validBidRequests, getQueryVariable('dh_test')) });
|
|
398
|
+
|
|
399
|
+
return serverRequests;
|
|
400
|
+
},
|
|
401
|
+
|
|
402
|
+
interpretResponse: function (serverResponse, request) {
|
|
403
|
+
const { seatbid } = serverResponse.body;
|
|
404
|
+
let bids = request.bids;
|
|
405
|
+
let prebidResponse = [];
|
|
406
|
+
|
|
407
|
+
let seatBids = seatbid[0].bid;
|
|
408
|
+
|
|
409
|
+
seatBids.forEach(ortbResponseBid => {
|
|
410
|
+
let bidId = ortbResponseBid.impid;
|
|
411
|
+
let actualBid = find(bids, (bid) => bid.bidId === bidId);
|
|
412
|
+
let bidMediaType = ortbResponseBid.ext.prebid.type
|
|
413
|
+
switch (bidMediaType) {
|
|
414
|
+
case mediaTypes.BANNER:
|
|
415
|
+
prebidResponse.push(createPrebidBannerBid(actualBid, ortbResponseBid));
|
|
416
|
+
break;
|
|
417
|
+
case mediaTypes.NATIVE:
|
|
418
|
+
prebidResponse.push(createPrebidNativeBid(actualBid, ortbResponseBid));
|
|
419
|
+
break;
|
|
420
|
+
case mediaTypes.VIDEO:
|
|
421
|
+
prebidResponse.push(createPrebidVideoBid(actualBid, ortbResponseBid));
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
})
|
|
425
|
+
return prebidResponse;
|
|
426
|
+
},
|
|
427
|
+
|
|
428
|
+
onBidWon: function(bid) {
|
|
429
|
+
ajax(bid.winUrl, null, null, {
|
|
430
|
+
method: 'GET'
|
|
431
|
+
})
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
registerBidder(spec);
|
|
@@ -99,3 +99,7 @@ Dailyhunt bid adapter supports Banner, Native and Video.
|
|
|
99
99
|
}
|
|
100
100
|
];
|
|
101
101
|
```
|
|
102
|
+
|
|
103
|
+
## latest commit has all the required support for latest version of prebid above 6.x
|
|
104
|
+
## Dailyhunt adapter was there till 4.x and then removed in version 5.x of prebid.
|
|
105
|
+
## this doc has been also submitted to https://github.com/prebid/prebid.github.io
|
|
@@ -94,7 +94,7 @@ export const spec = {
|
|
|
94
94
|
code: 'datablocks',
|
|
95
95
|
|
|
96
96
|
// DATABLOCKS SCOPED OBJECT
|
|
97
|
-
db_obj: {metrics_host: 'prebid.
|
|
97
|
+
db_obj: {metrics_host: 'prebid.dblks.net', metrics: [], metrics_timer: null, metrics_queue_time: 1000, vis_optout: false, source_id: 0},
|
|
98
98
|
|
|
99
99
|
// STORE THE DATABLOCKS BUYERID IN STORAGE
|
|
100
100
|
store_dbid: function(dbid) {
|
|
@@ -388,12 +388,12 @@ export const spec = {
|
|
|
388
388
|
};
|
|
389
389
|
|
|
390
390
|
let sourceId = validRequests[0].params.source_id || 0;
|
|
391
|
-
let host = validRequests[0].params.host || 'prebid.
|
|
391
|
+
let host = validRequests[0].params.host || 'prebid.dblks.net';
|
|
392
392
|
|
|
393
393
|
// RETURN WITH THE REQUEST AND PAYLOAD
|
|
394
394
|
return {
|
|
395
395
|
method: 'POST',
|
|
396
|
-
url: `https://${
|
|
396
|
+
url: `https://${host}/openrtb/?sid=${sourceId}`,
|
|
397
397
|
data: {
|
|
398
398
|
id: bidderRequest.auctionId,
|
|
399
399
|
imp: imps,
|