prebid.js 6.25.0 → 6.26.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/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/cpexIdSystem.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -0
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.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/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +113 -111
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/oneVideoBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +3 -3
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sortableBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/trustxBidAdapter.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/videoheroesBidAdapter.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/userId_example.html +3 -0
- package/modules/.submodules.json +2 -1
- package/modules/cpexIdSystem.js +1 -2
- package/modules/dacIdSystem.md +4 -4
- package/modules/gravitoIdSystem.js +57 -0
- package/modules/gravitoIdSystem.md +28 -0
- package/modules/jixieBidAdapter.js +2 -0
- package/modules/oguryBidAdapter.js +27 -1
- package/modules/userId/eids.js +6 -0
- package/modules/userId/userId.md +3 -0
- package/modules/videoheroesBidAdapter.js +267 -0
- package/modules/videoheroesBidAdapter.md +134 -0
- package/modules/zeta_global_sspBidAdapter.js +1 -1
- package/package.json +1 -1
- package/test/spec/modules/gravitoIdSystem_spec.js +51 -0
- package/test/spec/modules/jixieBidAdapter_spec.js +17 -0
- package/test/spec/modules/oguryBidAdapter_spec.js +181 -3
- package/test/spec/modules/videoheroesBidAdapter_spec.js +363 -0
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +37 -24
- package/test/spec/modules/medianetRtdProvider_spec.js +0 -146
package/modules/userId/eids.js
CHANGED
|
@@ -314,6 +314,12 @@ export const USER_IDS_CONFIG = {
|
|
|
314
314
|
return data.envelope;
|
|
315
315
|
}
|
|
316
316
|
},
|
|
317
|
+
|
|
318
|
+
// Gravito MP ID
|
|
319
|
+
'gravitompId': {
|
|
320
|
+
source: 'gravito.net',
|
|
321
|
+
atype: 1
|
|
322
|
+
},
|
|
317
323
|
};
|
|
318
324
|
|
|
319
325
|
// this function will create an eid object for the given UserId sub-module
|
package/modules/userId/userId.md
CHANGED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { isEmpty, parseUrl, isStr, triggerPixel } from '../src/utils.js';
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
4
|
+
import { config } from '../src/config.js';
|
|
5
|
+
|
|
6
|
+
const BIDDER_CODE = 'videoheroes';
|
|
7
|
+
const DEFAULT_CUR = 'USD';
|
|
8
|
+
const ENDPOINT_URL = `https://point.contextualadv.com/?t=2&partner=hash`;
|
|
9
|
+
|
|
10
|
+
const NATIVE_ASSETS_IDS = { 1: 'title', 2: 'icon', 3: 'image', 4: 'body', 5: 'sponsoredBy', 6: 'cta' };
|
|
11
|
+
const NATIVE_ASSETS = {
|
|
12
|
+
title: { id: 1, name: 'title' },
|
|
13
|
+
icon: { id: 2, type: 1, name: 'img' },
|
|
14
|
+
image: { id: 3, type: 3, name: 'img' },
|
|
15
|
+
body: { id: 4, type: 2, name: 'data' },
|
|
16
|
+
sponsoredBy: { id: 5, type: 1, name: 'data' },
|
|
17
|
+
cta: { id: 6, type: 12, name: 'data' }
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const spec = {
|
|
21
|
+
code: BIDDER_CODE,
|
|
22
|
+
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Determines whether or not the given bid request is valid.
|
|
26
|
+
*
|
|
27
|
+
* @param {object} bid The bid to validate.
|
|
28
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
29
|
+
*/
|
|
30
|
+
isBidRequestValid: (bid) => {
|
|
31
|
+
return !!(bid.params.placementId && bid.params.placementId.toString().length === 32);
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Make a server request from the list of BidRequests.
|
|
36
|
+
*
|
|
37
|
+
* @param {BidRequest[]} validBidRequests A non-empty list of valid bid requests that should be sent to the Server.
|
|
38
|
+
* @return ServerRequest Info describing the request to the server.
|
|
39
|
+
*/
|
|
40
|
+
buildRequests: (validBidRequests, bidderRequest) => {
|
|
41
|
+
if (validBidRequests.length === 0 || !bidderRequest) return [];
|
|
42
|
+
|
|
43
|
+
const endpointURL = ENDPOINT_URL.replace('hash', validBidRequests[0].params.placementId);
|
|
44
|
+
|
|
45
|
+
let imp = validBidRequests.map(br => {
|
|
46
|
+
let impObject = {
|
|
47
|
+
id: br.bidId,
|
|
48
|
+
secure: 1
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
if (br.mediaTypes.banner) {
|
|
52
|
+
impObject.banner = createBannerRequest(br);
|
|
53
|
+
} else if (br.mediaTypes.video) {
|
|
54
|
+
impObject.video = createVideoRequest(br);
|
|
55
|
+
} else if (br.mediaTypes.native) {
|
|
56
|
+
impObject.native = {
|
|
57
|
+
id: br.transactionId,
|
|
58
|
+
ver: '1.2',
|
|
59
|
+
request: createNativeRequest(br)
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return impObject;
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
let w = window;
|
|
66
|
+
let l = w.document.location.href;
|
|
67
|
+
let r = w.document.referrer;
|
|
68
|
+
|
|
69
|
+
let loopChecker = 0;
|
|
70
|
+
while (w !== w.parent) {
|
|
71
|
+
if (++loopChecker == 10) break;
|
|
72
|
+
try {
|
|
73
|
+
w = w.parent;
|
|
74
|
+
l = w.location.href;
|
|
75
|
+
r = w.document.referrer;
|
|
76
|
+
} catch (e) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
let page = l || bidderRequest.refererInfo.referer;
|
|
82
|
+
|
|
83
|
+
let data = {
|
|
84
|
+
id: bidderRequest.bidderRequestId,
|
|
85
|
+
cur: [ DEFAULT_CUR ],
|
|
86
|
+
device: {
|
|
87
|
+
w: screen.width,
|
|
88
|
+
h: screen.height,
|
|
89
|
+
language: (navigator && navigator.language) ? navigator.language.indexOf('-') != -1 ? navigator.language.split('-')[0] : navigator.language : '',
|
|
90
|
+
ua: navigator.userAgent,
|
|
91
|
+
},
|
|
92
|
+
site: {
|
|
93
|
+
domain: parseUrl(page).hostname,
|
|
94
|
+
page: page,
|
|
95
|
+
},
|
|
96
|
+
tmax: bidderRequest.timeout || config.getConfig('bidderTimeout') || 500,
|
|
97
|
+
imp
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
if (r) {
|
|
101
|
+
data.site.ref = r;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (bidderRequest.gdprConsent) {
|
|
105
|
+
data['regs'] = {'ext': {'gdpr': bidderRequest.gdprConsent.gdprApplies ? 1 : 0}};
|
|
106
|
+
data['user'] = {'ext': {'consent': bidderRequest.gdprConsent.consentString ? bidderRequest.gdprConsent.consentString : ''}};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (bidderRequest.uspConsent !== undefined) {
|
|
110
|
+
if (!data['regs'])data['regs'] = {'ext': {}};
|
|
111
|
+
data['regs']['ext']['us_privacy'] = bidderRequest.uspConsent;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (config.getConfig('coppa') === true) {
|
|
115
|
+
if (!data['regs'])data['regs'] = {'coppa': 1};
|
|
116
|
+
else data['regs']['coppa'] = 1;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (validBidRequests[0].schain) {
|
|
120
|
+
data['source'] = {'ext': {'schain': validBidRequests[0].schain}};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
method: 'POST',
|
|
125
|
+
url: endpointURL,
|
|
126
|
+
data: data
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Unpack the response from the server into a list of bids.
|
|
132
|
+
*
|
|
133
|
+
* @param {*} serverResponse A successful response from the server.
|
|
134
|
+
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
135
|
+
*/
|
|
136
|
+
interpretResponse: (serverResponse) => {
|
|
137
|
+
if (!serverResponse || isEmpty(serverResponse.body)) return [];
|
|
138
|
+
|
|
139
|
+
let bids = [];
|
|
140
|
+
serverResponse.body.seatbid.forEach(response => {
|
|
141
|
+
response.bid.forEach(bid => {
|
|
142
|
+
let mediaType = bid.ext && bid.ext.mediaType ? bid.ext.mediaType : 'banner';
|
|
143
|
+
|
|
144
|
+
let bidObj = {
|
|
145
|
+
requestId: bid.impid,
|
|
146
|
+
cpm: bid.price,
|
|
147
|
+
width: bid.w,
|
|
148
|
+
height: bid.h,
|
|
149
|
+
ttl: 1200,
|
|
150
|
+
currency: DEFAULT_CUR,
|
|
151
|
+
netRevenue: true,
|
|
152
|
+
creativeId: bid.crid,
|
|
153
|
+
dealId: bid.dealid || null,
|
|
154
|
+
mediaType: mediaType
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
switch (mediaType) {
|
|
158
|
+
case 'video':
|
|
159
|
+
bidObj.vastUrl = bid.adm;
|
|
160
|
+
break;
|
|
161
|
+
case 'native':
|
|
162
|
+
bidObj.native = parseNative(bid.adm);
|
|
163
|
+
break;
|
|
164
|
+
default:
|
|
165
|
+
bidObj.ad = bid.adm;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
bids.push(bidObj);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
return bids;
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
onBidWon: (bid) => {
|
|
176
|
+
if (isStr(bid.nurl) && bid.nurl !== '') {
|
|
177
|
+
triggerPixel(bid.nurl);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const parseNative = adm => {
|
|
183
|
+
let bid = {
|
|
184
|
+
clickUrl: adm.native.link && adm.native.link.url,
|
|
185
|
+
impressionTrackers: adm.native.imptrackers || [],
|
|
186
|
+
clickTrackers: (adm.native.link && adm.native.link.clicktrackers) || [],
|
|
187
|
+
jstracker: adm.native.jstracker || []
|
|
188
|
+
};
|
|
189
|
+
adm.native.assets.forEach(asset => {
|
|
190
|
+
let kind = NATIVE_ASSETS_IDS[asset.id];
|
|
191
|
+
let content = kind && asset[NATIVE_ASSETS[kind].name];
|
|
192
|
+
if (content) {
|
|
193
|
+
bid[kind] = content.text || content.value || { url: content.url, width: content.w, height: content.h };
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
return bid;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const createNativeRequest = br => {
|
|
201
|
+
let impObject = {
|
|
202
|
+
ver: '1.2',
|
|
203
|
+
assets: []
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
let keys = Object.keys(br.mediaTypes.native);
|
|
207
|
+
|
|
208
|
+
for (let key of keys) {
|
|
209
|
+
const props = NATIVE_ASSETS[key];
|
|
210
|
+
if (props) {
|
|
211
|
+
const asset = {
|
|
212
|
+
required: br.mediaTypes.native[key].required ? 1 : 0,
|
|
213
|
+
id: props.id,
|
|
214
|
+
[props.name]: {}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
if (props.type) asset[props.name]['type'] = props.type;
|
|
218
|
+
if (br.mediaTypes.native[key].len) asset[props.name]['len'] = br.mediaTypes.native[key].len;
|
|
219
|
+
if (br.mediaTypes.native[key].sizes && br.mediaTypes.native[key].sizes[0]) {
|
|
220
|
+
asset[props.name]['w'] = br.mediaTypes.native[key].sizes[0];
|
|
221
|
+
asset[props.name]['h'] = br.mediaTypes.native[key].sizes[1];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
impObject.assets.push(asset);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return impObject;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const createBannerRequest = br => {
|
|
232
|
+
let size = [];
|
|
233
|
+
|
|
234
|
+
if (br.mediaTypes.banner.sizes && Array.isArray(br.mediaTypes.banner.sizes)) {
|
|
235
|
+
if (Array.isArray(br.mediaTypes.banner.sizes[0])) { size = br.mediaTypes.banner.sizes[0]; } else { size = br.mediaTypes.banner.sizes; }
|
|
236
|
+
} else size = [300, 250];
|
|
237
|
+
|
|
238
|
+
return { id: br.transactionId, w: size[0], h: size[1] };
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
const createVideoRequest = br => {
|
|
242
|
+
let videoObj = {id: br.transactionId};
|
|
243
|
+
let supportParamsList = ['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'skip', 'minbitrate', 'maxbitrate', 'api', 'linearity'];
|
|
244
|
+
|
|
245
|
+
for (let param of supportParamsList) {
|
|
246
|
+
if (br.mediaTypes.video[param] !== undefined) {
|
|
247
|
+
videoObj[param] = br.mediaTypes.video[param];
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (br.mediaTypes.video.playerSize && Array.isArray(br.mediaTypes.video.playerSize)) {
|
|
252
|
+
if (Array.isArray(br.mediaTypes.video.playerSize[0])) {
|
|
253
|
+
videoObj.w = br.mediaTypes.video.playerSize[0][0];
|
|
254
|
+
videoObj.h = br.mediaTypes.video.playerSize[0][1];
|
|
255
|
+
} else {
|
|
256
|
+
videoObj.w = br.mediaTypes.video.playerSize[0];
|
|
257
|
+
videoObj.h = br.mediaTypes.video.playerSize[1];
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
videoObj.w = 640;
|
|
261
|
+
videoObj.h = 480;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return videoObj;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Video Heroes Bidder Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: support@videoheroes.tv
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module which connects to VideoHeroes SSP demand sources
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
|
|
15
|
+
250x300 banner test
|
|
16
|
+
```
|
|
17
|
+
var adUnits = [{
|
|
18
|
+
code: 'videoheroes-prebid',
|
|
19
|
+
mediaTypes: {
|
|
20
|
+
banner: {
|
|
21
|
+
sizes: [[300, 250]]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
bids: [{
|
|
25
|
+
bidder: 'videoheroes',
|
|
26
|
+
params : {
|
|
27
|
+
placementId : "1a8d9c22db19906cb8a5fd4518d05f62" // test placementId, please replace after test
|
|
28
|
+
}
|
|
29
|
+
}]
|
|
30
|
+
}];
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
native test
|
|
34
|
+
```
|
|
35
|
+
var adUnits = [{
|
|
36
|
+
code: 'videoheroes-native-prebid',
|
|
37
|
+
mediaTypes: {
|
|
38
|
+
native: {
|
|
39
|
+
title: {
|
|
40
|
+
required: true,
|
|
41
|
+
len: 800
|
|
42
|
+
},
|
|
43
|
+
image: {
|
|
44
|
+
required: true,
|
|
45
|
+
len: 80
|
|
46
|
+
},
|
|
47
|
+
sponsoredBy: {
|
|
48
|
+
required: true
|
|
49
|
+
},
|
|
50
|
+
clickUrl: {
|
|
51
|
+
required: true
|
|
52
|
+
},
|
|
53
|
+
privacyLink: {
|
|
54
|
+
required: false
|
|
55
|
+
},
|
|
56
|
+
body: {
|
|
57
|
+
required: true
|
|
58
|
+
},
|
|
59
|
+
icon: {
|
|
60
|
+
required: true,
|
|
61
|
+
sizes: [50, 50]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
bids: [{
|
|
66
|
+
bidder: 'videoheroes',
|
|
67
|
+
params: {
|
|
68
|
+
placementId : "1a8d9c22db19906cb8a5fd4518d05f62" // test placementId, please replace after test
|
|
69
|
+
}
|
|
70
|
+
}]
|
|
71
|
+
}];
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
video test
|
|
75
|
+
```
|
|
76
|
+
var adUnits = [{
|
|
77
|
+
code: 'videoheroes-video-prebid',
|
|
78
|
+
mediaTypes: {
|
|
79
|
+
video: {
|
|
80
|
+
minduration:1,
|
|
81
|
+
maxduration:999,
|
|
82
|
+
boxingallowed:1,
|
|
83
|
+
skip:0,
|
|
84
|
+
mimes:[
|
|
85
|
+
'application/javascript',
|
|
86
|
+
'video/mp4'
|
|
87
|
+
],
|
|
88
|
+
playerSize: [[768, 1024]],
|
|
89
|
+
protocols:[
|
|
90
|
+
2,3
|
|
91
|
+
],
|
|
92
|
+
linearity:1,
|
|
93
|
+
api:[
|
|
94
|
+
1,
|
|
95
|
+
2
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
bids: [{
|
|
100
|
+
bidder: 'videoheroes',
|
|
101
|
+
params: {
|
|
102
|
+
placementId : "1a8d9c22db19906cb8a5fd4518d05f62" // test placementId, please replace after test
|
|
103
|
+
}
|
|
104
|
+
}]
|
|
105
|
+
}];
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
# Bid Parameters
|
|
109
|
+
## Banner
|
|
110
|
+
|
|
111
|
+
| Name | Scope | Type | Description | Example
|
|
112
|
+
| ---- | ----- | ---- | ----------- | -------
|
|
113
|
+
| `placementId` | required | String | The placement ID from Video Heroes | "1a8d9c22db19906cb8a5fd4518d05f62"
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Ad Unit and page Setup:
|
|
117
|
+
|
|
118
|
+
```html
|
|
119
|
+
<!-- Prebid Config section -->
|
|
120
|
+
<script>
|
|
121
|
+
var PREBID_TIMEOUT = 700;
|
|
122
|
+
var adUnits = [{
|
|
123
|
+
code: 'videoheroes-prebid',
|
|
124
|
+
sizes: [[300, 250]],
|
|
125
|
+
bids: [{
|
|
126
|
+
bidder: 'videoheroes'
|
|
127
|
+
placementId : "PUT_YOUR_videoheroes_placementId",
|
|
128
|
+
}]
|
|
129
|
+
}];
|
|
130
|
+
var pbjs = pbjs || {};
|
|
131
|
+
pbjs.que = pbjs.que || [];
|
|
132
|
+
</script>
|
|
133
|
+
<!-- End Prebid Config section -->
|
|
134
|
+
```
|
|
@@ -99,7 +99,7 @@ export const spec = {
|
|
|
99
99
|
user: params.user ? params.user : {},
|
|
100
100
|
app: params.app ? params.app : {},
|
|
101
101
|
ext: {
|
|
102
|
-
tags: params.tags
|
|
102
|
+
tags: {...params.tags, shortname: params.shortname},
|
|
103
103
|
sid: params.sid ? params.sid : undefined
|
|
104
104
|
}
|
|
105
105
|
};
|
package/package.json
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { gravitoIdSystemSubmodule, storage, cookieKey } from 'modules/gravitoIdSystem.js';
|
|
2
|
+
|
|
3
|
+
const GRAVITOID_TEST_VALUE = 'gravitompIdTest';
|
|
4
|
+
const GRAVITOID_TEST_OBJ = {
|
|
5
|
+
gravitompId: GRAVITOID_TEST_VALUE
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
describe('gravitompId module', function () {
|
|
9
|
+
let getCookieStub;
|
|
10
|
+
|
|
11
|
+
beforeEach(function (done) {
|
|
12
|
+
getCookieStub = sinon.stub(storage, 'getCookie');
|
|
13
|
+
done();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
afterEach(function () {
|
|
17
|
+
getCookieStub.restore();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const cookieTestCasesForEmpty = [
|
|
21
|
+
undefined,
|
|
22
|
+
null,
|
|
23
|
+
''
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
describe('getId()', function () {
|
|
27
|
+
it('should return the gravitompId when it exists in cookie', function () {
|
|
28
|
+
getCookieStub.withArgs(cookieKey).returns(GRAVITOID_TEST_VALUE);
|
|
29
|
+
const id = gravitoIdSystemSubmodule.getId();
|
|
30
|
+
expect(id).to.be.deep.equal({id: {gravitompId: GRAVITOID_TEST_VALUE}});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
cookieTestCasesForEmpty.forEach(testCase => it('should return the gravitompId when it not exists in cookie', function () {
|
|
34
|
+
getCookieStub.withArgs(cookieKey).returns(testCase);
|
|
35
|
+
const id = gravitoIdSystemSubmodule.getId();
|
|
36
|
+
expect(id).to.be.deep.equal(undefined);
|
|
37
|
+
}));
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('decode()', function () {
|
|
41
|
+
it('should return the gravitompId when it exists in cookie', function () {
|
|
42
|
+
const decoded = gravitoIdSystemSubmodule.decode(GRAVITOID_TEST_OBJ);
|
|
43
|
+
expect(decoded).to.be.deep.equal({gravitompId: {id: GRAVITOID_TEST_VALUE}});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should return the undefined when decode id is not "string"', function () {
|
|
47
|
+
const decoded = gravitoIdSystemSubmodule.decode(1);
|
|
48
|
+
expect(decoded).to.equal(undefined);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -285,6 +285,23 @@ describe('jixie Adapter', function () {
|
|
|
285
285
|
expect(payload.device).to.deep.include(content);
|
|
286
286
|
});
|
|
287
287
|
|
|
288
|
+
it('schain info should be accessible when available', function () {
|
|
289
|
+
const schain = {
|
|
290
|
+
ver: '1.0',
|
|
291
|
+
complete: 1,
|
|
292
|
+
nodes: [{
|
|
293
|
+
asi: 'ssp.test',
|
|
294
|
+
sid: '00001',
|
|
295
|
+
hp: 1
|
|
296
|
+
}]
|
|
297
|
+
};
|
|
298
|
+
const oneSpecialBidReq = Object.assign({}, bidRequests_[0], { schain: schain });
|
|
299
|
+
const request = spec.buildRequests([oneSpecialBidReq], bidderRequest_);
|
|
300
|
+
const payload = JSON.parse(request.data);
|
|
301
|
+
expect(payload.schain).to.deep.equal(schain);
|
|
302
|
+
expect(payload.schain).to.deep.include(schain);
|
|
303
|
+
});
|
|
304
|
+
|
|
288
305
|
it('should populate eids when supported userIds are available', function () {
|
|
289
306
|
const oneSpecialBidReq = Object.assign({}, bidRequests_[0], {
|
|
290
307
|
userId: {
|