prebid.js 7.20.0 → 7.22.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/1plusXRtdProvider.js +1 -1
- 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/adtrgtmeBidAdapter.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/brightcomBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.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/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/dacIdSystem.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- 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/iasRtdProvider.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/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.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/medianetAnalyticsAdapter.js +1 -1
- package/dist/medianetBidAdapter.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 +127 -127
- package/dist/oguryBidAdapter.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 +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubwiseBidAdapter.js +1 -1
- package/dist/pulsepointBidAdapter.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/shinezBidAdapter.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/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/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yieldoneBidAdapter.js +1 -1
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +10 -51
- package/modules/1plusXRtdProvider.js +32 -5
- package/modules/33acrossBidAdapter.js +18 -11
- package/modules/adyoulikeBidAdapter.js +12 -6
- package/modules/asoBidAdapter.js +11 -6
- package/modules/asoBidAdapter.md +5 -6
- package/modules/brightcomBidAdapter.js +30 -10
- package/modules/dacIdSystem.js +145 -27
- package/modules/dacIdSystem.md +7 -2
- package/modules/fledgeForGpt.md +101 -23
- package/modules/freewheel-sspBidAdapter.js +48 -7
- package/modules/freewheel-sspBidAdapter.md +1 -1
- package/modules/ftrackIdSystem.js +28 -9
- package/modules/gridBidAdapter.js +1 -0
- package/modules/iasRtdProvider.js +21 -6
- package/modules/iasRtdProvider.md +1 -1
- package/modules/ixBidAdapter.js +9 -4
- package/modules/medianetAnalyticsAdapter.js +26 -22
- package/modules/medianetBidAdapter.js +5 -1
- package/modules/mediasquareBidAdapter.js +42 -3
- package/modules/mgidBidAdapter.js +8 -1
- package/modules/oguryBidAdapter.js +6 -2
- package/modules/prebidServerBidAdapter/index.js +1 -1
- package/modules/pubmaticBidAdapter.js +27 -3
- package/modules/pubwiseBidAdapter.js +14 -12
- package/modules/pulsepointBidAdapter.js +11 -6
- package/modules/smaatoBidAdapter.js +54 -5
- package/modules/smaatoBidAdapter.md +78 -0
- package/modules/teadsBidAdapter.js +26 -8
- package/modules/ttdBidAdapter.js +8 -0
- package/modules/userId/eids.js +7 -11
- package/modules/weboramaRtdProvider.js +800 -643
- package/modules/weboramaRtdProvider.md +32 -0
- package/modules/yieldoneBidAdapter.js +7 -4
- package/package.json +3 -3
- package/src/adapters/bidderFactory.js +11 -9
- package/src/auction.js +3 -3
- package/test/spec/auctionmanager_spec.js +29 -20
- package/test/spec/modules/1plusXRtdProvider_spec.js +30 -14
- package/test/spec/modules/33acrossBidAdapter_spec.js +44 -1
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +1 -1
- package/test/spec/modules/asoBidAdapter_spec.js +2 -2
- package/test/spec/modules/brightcomBidAdapter_spec.js +94 -1
- package/test/spec/modules/dacIdSystem_spec.js +93 -11
- package/test/spec/modules/eids_spec.js +11 -7
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +25 -4
- package/test/spec/modules/ftrackIdSystem_spec.js +200 -90
- package/test/spec/modules/iasRtdProvider_spec.js +57 -1
- package/test/spec/modules/ixBidAdapter_spec.js +12 -0
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +50 -8
- package/test/spec/modules/medianetBidAdapter_spec.js +76 -0
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -2
- package/test/spec/modules/mgidBidAdapter_spec.js +50 -0
- package/test/spec/modules/oguryBidAdapter_spec.js +33 -17
- package/test/spec/modules/prebidServerBidAdapter_spec.js +24 -0
- package/test/spec/modules/pubmaticBidAdapter_spec.js +60 -5
- package/test/spec/modules/pubwiseBidAdapter_spec.js +6 -4
- package/test/spec/modules/pulsepointBidAdapter_spec.js +123 -0
- package/test/spec/modules/smaatoBidAdapter_spec.js +307 -36
- package/test/spec/modules/teadsBidAdapter_spec.js +119 -6
- package/test/spec/modules/weboramaRtdProvider_spec.js +382 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +2 -3
- package/test/spec/unit/core/bidderFactory_spec.js +0 -4
|
@@ -2,8 +2,7 @@ import { _each, isStr, deepClone, isArray, deepSetValue, inIframe, logMessage, l
|
|
|
2
2
|
import { config } from '../src/config.js';
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { BANNER, NATIVE } from '../src/mediaTypes.js';
|
|
5
|
-
|
|
6
|
-
const VERSION = '0.1.0';
|
|
5
|
+
const VERSION = '0.2.0';
|
|
7
6
|
const GVLID = 842;
|
|
8
7
|
const NET_REVENUE = true;
|
|
9
8
|
const UNDEFINED = undefined;
|
|
@@ -117,9 +116,6 @@ export const spec = {
|
|
|
117
116
|
* @return ServerRequest Info describing the request to the server.
|
|
118
117
|
*/
|
|
119
118
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
120
|
-
// convert Native ORTB definition to old-style prebid native definition
|
|
121
|
-
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
122
|
-
|
|
123
119
|
var refererInfo;
|
|
124
120
|
if (bidderRequest && bidderRequest.refererInfo) {
|
|
125
121
|
refererInfo = bidderRequest.refererInfo;
|
|
@@ -170,7 +166,7 @@ export const spec = {
|
|
|
170
166
|
payload.user.geo.lon = _parseSlotParam('lon', conf.lon);
|
|
171
167
|
payload.user.yob = _parseSlotParam('yob', conf.yob);
|
|
172
168
|
payload.device.geo = payload.user.geo;
|
|
173
|
-
payload.site.page = payload.site
|
|
169
|
+
payload.site.page = payload.site?.page?.trim();
|
|
174
170
|
payload.site.domain = _getDomainFromURL(payload.site.page);
|
|
175
171
|
|
|
176
172
|
// add the content object from config in request
|
|
@@ -184,7 +180,7 @@ export const spec = {
|
|
|
184
180
|
}
|
|
185
181
|
|
|
186
182
|
// passing transactionId in source.tid
|
|
187
|
-
deepSetValue(payload, 'source.tid',
|
|
183
|
+
deepSetValue(payload, 'source.tid', bidderRequest?.auctionId);
|
|
188
184
|
|
|
189
185
|
// schain
|
|
190
186
|
if (validBidRequests[0].schain) {
|
|
@@ -440,7 +436,10 @@ function _createImpressionObject(bid, conf) {
|
|
|
440
436
|
tagid: bid.params.adUnit || undefined,
|
|
441
437
|
bidfloor: _parseSlotParam('bidFloor', bid.params.bidFloor), // capitalization dicated by 3.2.4 spec
|
|
442
438
|
secure: 1,
|
|
443
|
-
bidfloorcur: bid.params.currency ? _parseSlotParam('currency', bid.params.currency) : DEFAULT_CURRENCY // capitalization dicated by 3.2.4 spec
|
|
439
|
+
bidfloorcur: bid.params.currency ? _parseSlotParam('currency', bid.params.currency) : DEFAULT_CURRENCY, // capitalization dicated by 3.2.4 spec
|
|
440
|
+
ext: {
|
|
441
|
+
tid: (bid.transactionId ? bid.transactionId : '')
|
|
442
|
+
}
|
|
444
443
|
};
|
|
445
444
|
|
|
446
445
|
if (bid.hasOwnProperty('mediaTypes')) {
|
|
@@ -494,7 +493,11 @@ function _parseSlotParam(paramName, paramValue) {
|
|
|
494
493
|
|
|
495
494
|
function _parseAdSlot(bid) {
|
|
496
495
|
_logInfo('parseAdSlot bid', bid)
|
|
497
|
-
bid.
|
|
496
|
+
if (bid.adUnitCode) {
|
|
497
|
+
bid.params.adUnit = bid.adUnitCode;
|
|
498
|
+
} else {
|
|
499
|
+
bid.params.adUnit = '';
|
|
500
|
+
}
|
|
498
501
|
bid.params.width = 0;
|
|
499
502
|
bid.params.height = 0;
|
|
500
503
|
bid.params.adSlot = _cleanSlotName(bid.params.adSlot);
|
|
@@ -532,9 +535,8 @@ function _cleanSlotName(slotName) {
|
|
|
532
535
|
|
|
533
536
|
function _initConf(refererInfo) {
|
|
534
537
|
return {
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
refURL: refererInfo?.ref || window.document.referrer
|
|
538
|
+
pageURL: refererInfo?.page,
|
|
539
|
+
refURL: refererInfo?.ref
|
|
538
540
|
};
|
|
539
541
|
}
|
|
540
542
|
|
|
@@ -153,6 +153,8 @@ function bidResponseAvailable(request, response) {
|
|
|
153
153
|
* Produces an OpenRTBImpression from a slot config.
|
|
154
154
|
*/
|
|
155
155
|
function impression(slot) {
|
|
156
|
+
var firstPartyData = slot.ortb2Imp?.ext || {};
|
|
157
|
+
var ext = Object.assign({}, firstPartyData, slotUnknownParams(slot));
|
|
156
158
|
return {
|
|
157
159
|
id: slot.bidId,
|
|
158
160
|
banner: banner(slot),
|
|
@@ -160,7 +162,7 @@ function impression(slot) {
|
|
|
160
162
|
tagid: slot.params.ct.toString(),
|
|
161
163
|
video: video(slot),
|
|
162
164
|
bidfloor: bidFloor(slot),
|
|
163
|
-
ext: ext
|
|
165
|
+
ext: Object.keys(ext).length > 0 ? ext : null,
|
|
164
166
|
};
|
|
165
167
|
}
|
|
166
168
|
|
|
@@ -209,7 +211,7 @@ function video(slot) {
|
|
|
209
211
|
/**
|
|
210
212
|
* Unknown params are captured and sent on ext
|
|
211
213
|
*/
|
|
212
|
-
function
|
|
214
|
+
function slotUnknownParams(slot) {
|
|
213
215
|
const ext = {};
|
|
214
216
|
const knownParamsMap = {};
|
|
215
217
|
KNOWN_PARAMS.forEach(value => knownParamsMap[value] = 1);
|
|
@@ -330,14 +332,16 @@ function site(bidRequests, bidderRequest) {
|
|
|
330
332
|
const pubId = bidRequests && bidRequests.length > 0 ? bidRequests[0].params.cp : '0';
|
|
331
333
|
const appParams = bidRequests[0].params.app;
|
|
332
334
|
if (!appParams) {
|
|
333
|
-
|
|
335
|
+
// use the first party data if available, and override only publisher/ref/page properties
|
|
336
|
+
var firstPartyData = bidderRequest?.ortb2?.site || {};
|
|
337
|
+
return Object.assign({}, firstPartyData, {
|
|
334
338
|
publisher: {
|
|
335
339
|
id: pubId.toString(),
|
|
336
340
|
},
|
|
337
341
|
// TODO: does the fallback make sense here?
|
|
338
342
|
ref: bidderRequest?.refererInfo?.ref || window.document.referrer,
|
|
339
343
|
page: bidderRequest?.refererInfo?.page || ''
|
|
340
|
-
}
|
|
344
|
+
});
|
|
341
345
|
}
|
|
342
346
|
return null;
|
|
343
347
|
}
|
|
@@ -406,7 +410,8 @@ function adSize(slot, sizes) {
|
|
|
406
410
|
* an openrtb User object.
|
|
407
411
|
*/
|
|
408
412
|
function user(bidRequest, bidderRequest) {
|
|
409
|
-
var
|
|
413
|
+
var user = bidderRequest?.ortb2?.user || { ext: {} };
|
|
414
|
+
var ext = user.ext;
|
|
410
415
|
if (bidderRequest) {
|
|
411
416
|
if (bidderRequest.gdprConsent) {
|
|
412
417
|
ext.consent = bidderRequest.gdprConsent.consentString;
|
|
@@ -418,7 +423,7 @@ function user(bidRequest, bidderRequest) {
|
|
|
418
423
|
ext.eids = eids;
|
|
419
424
|
}
|
|
420
425
|
}
|
|
421
|
-
return
|
|
426
|
+
return user;
|
|
422
427
|
}
|
|
423
428
|
|
|
424
429
|
/**
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { deepAccess, getDNT, deepSetValue, logInfo, logError, isEmpty, getAdUnitSizes, fill, chunk, getMaxValueFromArray, getMinValueFromArray } from '../src/utils.js';
|
|
1
|
+
import { deepAccess, isNumber, getDNT, deepSetValue, logInfo, logError, isEmpty, getAdUnitSizes, fill, chunk, getMaxValueFromArray, getMinValueFromArray } from '../src/utils.js';
|
|
2
|
+
import {find} from '../src/polyfill.js';
|
|
2
3
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
4
|
import {config} from '../src/config.js';
|
|
4
|
-
import {ADPOD, BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
5
|
+
import {ADPOD, BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js';
|
|
6
|
+
import CONSTANTS from '../src/constants.json';
|
|
5
7
|
|
|
8
|
+
const { NATIVE_IMAGE_TYPES } = CONSTANTS;
|
|
6
9
|
const BIDDER_CODE = 'smaato';
|
|
7
10
|
const SMAATO_ENDPOINT = 'https://prebid.ad.smaato.net/oapi/prebid';
|
|
8
|
-
const SMAATO_CLIENT = 'prebid_js_$prebid.version$_1.
|
|
11
|
+
const SMAATO_CLIENT = 'prebid_js_$prebid.version$_1.7'
|
|
9
12
|
const CURRENCY = 'USD';
|
|
10
13
|
|
|
11
14
|
const buildOpenRtbBidRequest = (bidRequest, bidderRequest) => {
|
|
@@ -91,6 +94,12 @@ const buildOpenRtbBidRequest = (bidRequest, bidderRequest) => {
|
|
|
91
94
|
}
|
|
92
95
|
}
|
|
93
96
|
|
|
97
|
+
const nativeOrtbRequest = bidRequest.nativeOrtbRequest;
|
|
98
|
+
if (nativeOrtbRequest) {
|
|
99
|
+
const nativeRequest = Object.assign({}, requestTemplate, createNativeImp(bidRequest, nativeOrtbRequest));
|
|
100
|
+
requests.push(nativeRequest);
|
|
101
|
+
}
|
|
102
|
+
|
|
94
103
|
return requests;
|
|
95
104
|
}
|
|
96
105
|
|
|
@@ -109,11 +118,11 @@ const buildServerRequest = (validBidRequest, data) => {
|
|
|
109
118
|
|
|
110
119
|
export const spec = {
|
|
111
120
|
code: BIDDER_CODE,
|
|
112
|
-
supportedMediaTypes: [BANNER, VIDEO],
|
|
121
|
+
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
113
122
|
gvlid: 82,
|
|
114
123
|
|
|
115
124
|
/**
|
|
116
|
-
* Determines whether
|
|
125
|
+
* Determines whether the given bid request is valid.
|
|
117
126
|
*
|
|
118
127
|
* @param {BidRequest} bid The bid params to validate.
|
|
119
128
|
* @return boolean True if this is a valid bid, and false otherwise.
|
|
@@ -171,6 +180,7 @@ export const spec = {
|
|
|
171
180
|
* Unpack the response from the server into a list of bids.
|
|
172
181
|
*
|
|
173
182
|
* @param {ServerResponse} serverResponse A successful response from the server.
|
|
183
|
+
* @param {BidRequest} bidRequest
|
|
174
184
|
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
175
185
|
*/
|
|
176
186
|
interpretResponse: (serverResponse, bidRequest) => {
|
|
@@ -239,6 +249,11 @@ export const spec = {
|
|
|
239
249
|
resultingBid.mediaType = VIDEO;
|
|
240
250
|
bids.push(resultingBid);
|
|
241
251
|
break;
|
|
252
|
+
case 'Native':
|
|
253
|
+
resultingBid.native = createNativeAd(bid.adm);
|
|
254
|
+
resultingBid.mediaType = NATIVE;
|
|
255
|
+
bids.push(resultingBid);
|
|
256
|
+
break;
|
|
242
257
|
default:
|
|
243
258
|
logInfo('[SMAATO] Invalid ad type:', smtAdType);
|
|
244
259
|
}
|
|
@@ -297,6 +312,13 @@ const createRichmediaAd = (adm) => {
|
|
|
297
312
|
return markup + '</div>';
|
|
298
313
|
};
|
|
299
314
|
|
|
315
|
+
const createNativeAd = (adm) => {
|
|
316
|
+
const nativeResponse = JSON.parse(adm).native;
|
|
317
|
+
return {
|
|
318
|
+
ortb: nativeResponse
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
300
322
|
function createBannerImp(bidRequest) {
|
|
301
323
|
const adUnitSizes = getAdUnitSizes(bidRequest);
|
|
302
324
|
const sizes = adUnitSizes.map((size) => ({w: size[0], h: size[1]}));
|
|
@@ -342,6 +364,33 @@ function createVideoImp(bidRequest, videoMediaType) {
|
|
|
342
364
|
};
|
|
343
365
|
}
|
|
344
366
|
|
|
367
|
+
function createNativeImp(bidRequest, nativeRequest) {
|
|
368
|
+
return {
|
|
369
|
+
imp: [{
|
|
370
|
+
id: bidRequest.bidId,
|
|
371
|
+
tagid: deepAccess(bidRequest, 'params.adspaceId'),
|
|
372
|
+
bidfloor: getBidFloor(bidRequest, NATIVE, getNativeMainImageSize(nativeRequest)),
|
|
373
|
+
native: {
|
|
374
|
+
request: JSON.stringify(nativeRequest),
|
|
375
|
+
ver: '1.2'
|
|
376
|
+
}
|
|
377
|
+
}]
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
function getNativeMainImageSize(nativeRequest) {
|
|
382
|
+
const mainImage = find(nativeRequest.assets, asset => asset.hasOwnProperty('img') && asset.img.type === NATIVE_IMAGE_TYPES.MAIN)
|
|
383
|
+
if (mainImage) {
|
|
384
|
+
if (isNumber(mainImage.img.w) && isNumber(mainImage.img.h)) {
|
|
385
|
+
return [[mainImage.img.w, mainImage.img.h]]
|
|
386
|
+
}
|
|
387
|
+
if (isNumber(mainImage.img.wmin) && isNumber(mainImage.img.hmin)) {
|
|
388
|
+
return [[mainImage.img.wmin, mainImage.img.hmin]]
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return []
|
|
392
|
+
}
|
|
393
|
+
|
|
345
394
|
function createAdPodImp(bidRequest, videoMediaType) {
|
|
346
395
|
const tagid = deepAccess(bidRequest, 'params.adbreakId')
|
|
347
396
|
const bce = config.getConfig('adpod.brandCategoryExclusion')
|
|
@@ -63,6 +63,84 @@ var adUnits = [{
|
|
|
63
63
|
}];
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
For native adunits:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
var adUnits = [{
|
|
70
|
+
"code": "native unit",
|
|
71
|
+
"mediaTypes": {
|
|
72
|
+
native: {
|
|
73
|
+
ortb: {
|
|
74
|
+
ver: "1.2",
|
|
75
|
+
assets: [
|
|
76
|
+
{
|
|
77
|
+
id: 1,
|
|
78
|
+
required: 1,
|
|
79
|
+
img: {
|
|
80
|
+
type: 3,
|
|
81
|
+
w: 150,
|
|
82
|
+
h: 50,
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: 2,
|
|
87
|
+
required: 1,
|
|
88
|
+
img: {
|
|
89
|
+
type: 2,
|
|
90
|
+
w: 50,
|
|
91
|
+
h: 50
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: 3,
|
|
96
|
+
required: 1,
|
|
97
|
+
title: {
|
|
98
|
+
len: 80
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 4,
|
|
103
|
+
required: 1,
|
|
104
|
+
data: {
|
|
105
|
+
type: 1
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 5,
|
|
110
|
+
required: 1,
|
|
111
|
+
data: {
|
|
112
|
+
type: 2
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 6,
|
|
117
|
+
required: 0,
|
|
118
|
+
data: {
|
|
119
|
+
type: 3
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 7,
|
|
124
|
+
required: 0,
|
|
125
|
+
data: {
|
|
126
|
+
type: 12
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
sendTargetingKeys: false,
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"bids": [{
|
|
135
|
+
"bidder": "smaato",
|
|
136
|
+
"params": {
|
|
137
|
+
"publisherId": "1100042525",
|
|
138
|
+
"adspaceId": "130563103"
|
|
139
|
+
}
|
|
140
|
+
}]
|
|
141
|
+
}];
|
|
142
|
+
```
|
|
143
|
+
|
|
66
144
|
For adpod adunits:
|
|
67
145
|
|
|
68
146
|
```
|
|
@@ -55,11 +55,13 @@ export const spec = {
|
|
|
55
55
|
deviceWidth: screen.width,
|
|
56
56
|
hb_version: '$prebid.version$',
|
|
57
57
|
...getSharedViewerIdParameters(validBidRequests),
|
|
58
|
-
...getFirstPartyTeadsIdParameter()
|
|
58
|
+
...getFirstPartyTeadsIdParameter(validBidRequests)
|
|
59
59
|
};
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
const firstBidRequest = validBidRequests[0];
|
|
62
|
+
|
|
63
|
+
if (firstBidRequest.schain) {
|
|
64
|
+
payload.schain = firstBidRequest.schain;
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
let gdpr = bidderRequest.gdprConsent;
|
|
@@ -80,6 +82,11 @@ export const spec = {
|
|
|
80
82
|
payload.us_privacy = bidderRequest.uspConsent;
|
|
81
83
|
}
|
|
82
84
|
|
|
85
|
+
const userAgentClientHints = deepAccess(firstBidRequest, 'ortb2.device.sua');
|
|
86
|
+
if (userAgentClientHints) {
|
|
87
|
+
payload.userAgentClientHints = userAgentClientHints;
|
|
88
|
+
}
|
|
89
|
+
|
|
83
90
|
const payloadString = JSON.stringify(payload);
|
|
84
91
|
return {
|
|
85
92
|
method: 'POST',
|
|
@@ -261,14 +268,25 @@ function _validateId(id) {
|
|
|
261
268
|
|
|
262
269
|
/**
|
|
263
270
|
* Get the first-party cookie Teads ID parameter to be sent in bid request.
|
|
271
|
+
* @param validBidRequests an array of bids
|
|
264
272
|
* @returns `{} | {firstPartyCookieTeadsId: string}`
|
|
265
273
|
*/
|
|
266
|
-
function getFirstPartyTeadsIdParameter() {
|
|
267
|
-
|
|
268
|
-
|
|
274
|
+
function getFirstPartyTeadsIdParameter(validBidRequests) {
|
|
275
|
+
const firstPartyTeadsIdFromUserIdModule = deepAccess(validBidRequests, '0.userId.teadsId');
|
|
276
|
+
|
|
277
|
+
if (firstPartyTeadsIdFromUserIdModule) {
|
|
278
|
+
return {firstPartyCookieTeadsId: firstPartyTeadsIdFromUserIdModule};
|
|
269
279
|
}
|
|
270
|
-
|
|
271
|
-
|
|
280
|
+
|
|
281
|
+
if (storage.cookiesAreEnabled(null)) {
|
|
282
|
+
const firstPartyTeadsIdFromCookie = storage.getCookie(FP_TEADS_ID_COOKIE_NAME, null);
|
|
283
|
+
|
|
284
|
+
if (firstPartyTeadsIdFromCookie) {
|
|
285
|
+
return {firstPartyCookieTeadsId: firstPartyTeadsIdFromCookie};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return {};
|
|
272
290
|
}
|
|
273
291
|
|
|
274
292
|
registerBidder(spec);
|
package/modules/ttdBidAdapter.js
CHANGED
|
@@ -121,12 +121,20 @@ function getUser(bidderRequest) {
|
|
|
121
121
|
utils.deepSetValue(user, 'ext.eids', eids);
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
// gather user.data
|
|
125
|
+
const ortb2UserData = utils.deepAccess(bidderRequest, 'ortb2.user.data');
|
|
126
|
+
if (ortb2UserData && ortb2UserData.length) {
|
|
127
|
+
user = utils.mergeDeep(user, {
|
|
128
|
+
data: [...ortb2UserData]
|
|
129
|
+
});
|
|
130
|
+
};
|
|
124
131
|
return user;
|
|
125
132
|
}
|
|
126
133
|
|
|
127
134
|
function getSite(bidderRequest, firstPartyData) {
|
|
128
135
|
var site = {
|
|
129
136
|
page: utils.deepAccess(bidderRequest, 'refererInfo.page'),
|
|
137
|
+
ref: utils.deepAccess(bidderRequest, 'refererInfo.ref'),
|
|
130
138
|
publisher: {
|
|
131
139
|
id: utils.deepAccess(bidderRequest, 'bids.0.params.publisherId'),
|
|
132
140
|
},
|
package/modules/userId/eids.js
CHANGED
|
@@ -419,17 +419,12 @@ export function createEidsArray(bidRequestUserId) {
|
|
|
419
419
|
if (subModuleKey === 'pubProvidedId') {
|
|
420
420
|
eids = eids.concat(bidRequestUserId['pubProvidedId']);
|
|
421
421
|
} else if (subModuleKey === 'ftrackId') {
|
|
422
|
-
//
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
}
|
|
428
|
-
for (let id in bidRequestUserId.ftrackId) {
|
|
429
|
-
eid.ext[id] = (bidRequestUserId.ftrackId[id] || []).join('|');
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
eids.push(eid);
|
|
422
|
+
// Schema based on the return value of ftrack decode() method
|
|
423
|
+
eids.push({
|
|
424
|
+
atype: 1,
|
|
425
|
+
ext: bidRequestUserId.ftrackId.ext,
|
|
426
|
+
id: bidRequestUserId.ftrackId.uid
|
|
427
|
+
});
|
|
433
428
|
} else if (Array.isArray(bidRequestUserId[subModuleKey])) {
|
|
434
429
|
bidRequestUserId[subModuleKey].forEach((config, index, arr) => {
|
|
435
430
|
const eid = createEidObject(config, subModuleKey);
|
|
@@ -446,6 +441,7 @@ export function createEidsArray(bidRequestUserId) {
|
|
|
446
441
|
}
|
|
447
442
|
}
|
|
448
443
|
}
|
|
444
|
+
|
|
449
445
|
return eids;
|
|
450
446
|
}
|
|
451
447
|
|