prebid.js 7.35.0 → 7.37.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 +2 -0
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaruBidAdapter.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/aidemBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aolBidAdapter.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/brightcomSSPBidAdapter.js +1 -0
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.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/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.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/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/incrxBidAdapter.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/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedBidAdapter.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/mediagoBidAdapter.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/minutemediaplusBidAdapter.js +1 -0
- package/dist/neuwoRtdProvider.js +1 -0
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +141 -137
- 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/proxistoreBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.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/scatteredBidAdapter.js +1 -0
- 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/sirdataRtdProvider.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/uid2IdSystem.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/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/integrationExamples/gpt/neuwoRtdProvider_example.html +190 -0
- package/modules/33acrossBidAdapter.js +13 -4
- package/modules/adagioBidAdapter.js +14 -14
- package/modules/adagioBidAdapter.md +3 -1
- package/modules/admaruBidAdapter.js +19 -1
- package/modules/aidemBidAdapter.js +90 -65
- package/modules/aidemBidAdapter.md +10 -7
- package/modules/ajaBidAdapter.js +6 -1
- package/modules/amxIdSystem.md +2 -10
- package/modules/aolBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +45 -48
- package/modules/brightcomBidAdapter.js +1 -0
- package/modules/brightcomSSPBidAdapter.js +323 -0
- package/modules/brightcomSSPBidAdapter.md +46 -0
- package/modules/criteoBidAdapter.js +4 -5
- package/modules/cwireBidAdapter.md +9 -3
- package/modules/discoveryBidAdapter.js +22 -12
- package/modules/feedadBidAdapter.js +35 -15
- package/modules/fpdModule/index.md +5 -2
- package/modules/freewheel-sspBidAdapter.js +5 -1
- package/modules/gridBidAdapter.js +3 -1
- package/modules/incrxBidAdapter.js +2 -0
- package/modules/ixBidAdapter.js +318 -175
- package/modules/kueezRtbBidAdapter.js +54 -20
- package/modules/limelightDigitalBidAdapter.js +6 -1
- package/modules/limelightDigitalBidAdapter.md +12 -2
- package/modules/liveIntentIdSystem.js +1 -1
- package/modules/livewrappedBidAdapter.js +28 -16
- package/modules/mediagoBidAdapter.js +22 -17
- package/modules/minutemediaplusBidAdapter.js +291 -0
- package/modules/minutemediaplusBidAdapter.md +35 -0
- package/modules/neuwoRtdProvider.js +171 -0
- package/modules/neuwoRtdProvider.md +40 -0
- package/modules/nextMillenniumBidAdapter.js +9 -1
- package/modules/nexx360BidAdapter.js +1 -1
- package/modules/prebidServerBidAdapter/ortbConverter.js +6 -0
- package/modules/proxistoreBidAdapter.js +2 -2
- package/modules/pubmaticBidAdapter.js +4 -0
- package/modules/pubxaiAnalyticsAdapter.js +2 -2
- package/modules/scatteredBidAdapter.js +72 -0
- package/modules/scatteredBidAdapter.md +36 -0
- package/modules/sirdataRtdProvider.js +262 -284
- package/modules/smartxBidAdapter.js +2 -0
- package/modules/smilewantedBidAdapter.js +5 -0
- package/modules/sonobiBidAdapter.js +1 -10
- package/modules/topicsFpdModule.md +62 -0
- package/modules/tripleliftBidAdapter.js +4 -0
- package/modules/userId/eids.js +1 -1
- package/modules/vidazooBidAdapter.js +3 -1
- package/modules/yahoosspBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +1 -0
- package/package.json +2 -2
- package/src/adapterManager.js +30 -14
- package/src/utils.js +1 -1
- package/test/spec/modules/33acrossBidAdapter_spec.js +51 -18
- package/test/spec/modules/adagioBidAdapter_spec.js +2 -2
- package/test/spec/modules/admaruBidAdapter_spec.js +48 -0
- package/test/spec/modules/aidemBidAdapter_spec.js +77 -10
- package/test/spec/modules/ajaBidAdapter_spec.js +21 -1
- package/test/spec/modules/aolBidAdapter_spec.js +2 -2
- package/test/spec/modules/appnexusBidAdapter_spec.js +123 -16
- package/test/spec/modules/brightcomSSPBidAdapter_spec.js +411 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +24 -1
- package/test/spec/modules/eids_spec.js +1 -1
- package/test/spec/modules/feedadBidAdapter_spec.js +47 -77
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +1 -1
- package/test/spec/modules/incrxBidAdapter_spec.js +4 -0
- package/test/spec/modules/ixBidAdapter_spec.js +24 -54
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +63 -22
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +35 -5
- package/test/spec/modules/livewrappedBidAdapter_spec.js +267 -2
- package/test/spec/modules/minutemediaplusBidAdapter_spec.js +519 -0
- package/test/spec/modules/neuwoRtdProvider_spec.js +123 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +11 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +56 -0
- package/test/spec/modules/proxistoreBidAdapter_spec.js +2 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +15 -0
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +3 -1
- package/test/spec/modules/scatteredBidAdapter_spec.js +210 -0
- package/test/spec/modules/sirdataRtdProvider_spec.js +116 -22
- package/test/spec/modules/smilewantedBidAdapter_spec.js +54 -3
- package/test/spec/modules/sonobiBidAdapter_spec.js +3 -25
- package/test/spec/modules/tripleliftBidAdapter_spec.js +9 -2
- package/test/spec/modules/userId_spec.js +1 -1
- package/test/spec/modules/vidazooBidAdapter_spec.js +4 -1
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1 -1
- package/test/spec/unit/core/adapterManager_spec.js +147 -0
|
@@ -44,7 +44,7 @@ const URL_SIMPLE = 'https://ib.adnxs-simple.com/ut/v3/prebid';
|
|
|
44
44
|
const VIDEO_TARGETING = ['id', 'minduration', 'maxduration',
|
|
45
45
|
'skippable', 'playback_method', 'frameworks', 'context', 'skipoffset'];
|
|
46
46
|
const VIDEO_RTB_TARGETING = ['minduration', 'maxduration', 'skip', 'skipafter', 'playbackmethod', 'api', 'startdelay'];
|
|
47
|
-
const USER_PARAMS = ['age', 'externalUid', 'segments', 'gender', 'dnt', 'language'];
|
|
47
|
+
const USER_PARAMS = ['age', 'externalUid', 'external_uid', 'segments', 'gender', 'dnt', 'language'];
|
|
48
48
|
const APP_DEVICE_PARAMS = ['geo', 'device_id']; // appid is collected separately
|
|
49
49
|
const DEBUG_PARAMS = ['enabled', 'dongle', 'member_id', 'debug_timeout'];
|
|
50
50
|
const DEBUG_QUERY_PARAM_MAP = {
|
|
@@ -120,7 +120,9 @@ export const spec = {
|
|
|
120
120
|
* @return boolean True if this is a valid bid, and false otherwise.
|
|
121
121
|
*/
|
|
122
122
|
isBidRequestValid: function (bid) {
|
|
123
|
-
return !!(
|
|
123
|
+
return !!(
|
|
124
|
+
(bid.params.placementId || bid.params.placement_id) ||
|
|
125
|
+
(bid.params.member && (bid.params.invCode || bid.params.inv_code)));
|
|
124
126
|
},
|
|
125
127
|
|
|
126
128
|
/**
|
|
@@ -343,20 +345,18 @@ export const spec = {
|
|
|
343
345
|
|
|
344
346
|
if (bidRequests[0].userId) {
|
|
345
347
|
let eids = [];
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
});
|
|
348
|
+
bidRequests[0].userIdAsEids.forEach(eid => {
|
|
349
|
+
if (!eid || !eid.uids || eid.uids.length < 1) { return; }
|
|
350
|
+
eid.uids.forEach(uid => {
|
|
351
|
+
let tmp = {'source': eid.source, 'id': uid.id};
|
|
352
|
+
if (eid.source == 'adserver.org') {
|
|
353
|
+
tmp.rti_partner = 'TDID';
|
|
354
|
+
} else if (eid.source == 'uidapi.com') {
|
|
355
|
+
tmp.rti_partner = 'UID2';
|
|
356
|
+
}
|
|
357
|
+
eids.push(tmp);
|
|
357
358
|
});
|
|
358
|
-
}
|
|
359
|
-
|
|
359
|
+
});
|
|
360
360
|
if (eids.length) {
|
|
361
361
|
payload.eids = eids;
|
|
362
362
|
}
|
|
@@ -484,9 +484,6 @@ export const spec = {
|
|
|
484
484
|
}, params);
|
|
485
485
|
|
|
486
486
|
if (isOpenRtb) {
|
|
487
|
-
params.use_pmt_rule = (typeof params.usePaymentRule === 'boolean') ? params.usePaymentRule : false;
|
|
488
|
-
if (params.usePaymentRule) { delete params.usePaymentRule; }
|
|
489
|
-
|
|
490
487
|
if (isPopulatedArray(params.keywords)) {
|
|
491
488
|
params.keywords.forEach(deleteValues);
|
|
492
489
|
}
|
|
@@ -498,6 +495,9 @@ export const spec = {
|
|
|
498
495
|
delete params[paramKey];
|
|
499
496
|
}
|
|
500
497
|
});
|
|
498
|
+
|
|
499
|
+
params.use_pmt_rule = (typeof params.use_payment_rule === 'boolean') ? params.use_payment_rule : false;
|
|
500
|
+
if (params.use_payment_rule) { delete params.use_payment_rule; }
|
|
501
501
|
}
|
|
502
502
|
|
|
503
503
|
return params;
|
|
@@ -771,17 +771,25 @@ function newBid(serverBid, rtbBid, bidderRequest) {
|
|
|
771
771
|
|
|
772
772
|
function bidToTag(bid) {
|
|
773
773
|
const tag = {};
|
|
774
|
+
Object.keys(bid.params).forEach(paramKey => {
|
|
775
|
+
let convertedKey = convertCamelToUnderscore(paramKey);
|
|
776
|
+
if (convertedKey !== paramKey) {
|
|
777
|
+
bid.params[convertedKey] = bid.params[paramKey];
|
|
778
|
+
delete bid.params[paramKey];
|
|
779
|
+
}
|
|
780
|
+
});
|
|
774
781
|
tag.sizes = transformSizes(bid.sizes);
|
|
775
782
|
tag.primary_size = tag.sizes[0];
|
|
776
783
|
tag.ad_types = [];
|
|
777
784
|
tag.uuid = bid.bidId;
|
|
778
|
-
if (bid.params.
|
|
779
|
-
tag.id = parseInt(bid.params.
|
|
785
|
+
if (bid.params.placement_id) {
|
|
786
|
+
tag.id = parseInt(bid.params.placement_id, 10);
|
|
780
787
|
} else {
|
|
781
|
-
tag.code = bid.params.
|
|
788
|
+
tag.code = bid.params.inv_code;
|
|
782
789
|
}
|
|
783
|
-
tag.allow_smaller_sizes = bid.params.
|
|
784
|
-
tag.use_pmt_rule = bid.params.
|
|
790
|
+
tag.allow_smaller_sizes = bid.params.allow_smaller_sizes || false;
|
|
791
|
+
tag.use_pmt_rule = (typeof bid.params.use_payment_rule === 'boolean') ? bid.params.use_payment_rule
|
|
792
|
+
: (typeof bid.params.use_pmt_rule === 'boolean') ? bid.params.use_pmt_rule : false;
|
|
785
793
|
tag.prebid = true;
|
|
786
794
|
tag.disable_psa = true;
|
|
787
795
|
let bidFloor = getBidFloor(bid);
|
|
@@ -798,26 +806,26 @@ function bidToTag(bid) {
|
|
|
798
806
|
tag.position = (mediaTypePos === 3) ? 2 : mediaTypePos;
|
|
799
807
|
}
|
|
800
808
|
}
|
|
801
|
-
if (bid.params.
|
|
802
|
-
tag.traffic_source_code = bid.params.
|
|
809
|
+
if (bid.params.traffic_source_code) {
|
|
810
|
+
tag.traffic_source_code = bid.params.traffic_source_code;
|
|
803
811
|
}
|
|
804
|
-
if (bid.params.
|
|
805
|
-
tag.private_sizes = transformSizes(bid.params.
|
|
812
|
+
if (bid.params.private_sizes) {
|
|
813
|
+
tag.private_sizes = transformSizes(bid.params.private_sizes);
|
|
806
814
|
}
|
|
807
|
-
if (bid.params.
|
|
808
|
-
tag.supply_type = bid.params.
|
|
815
|
+
if (bid.params.supply_type) {
|
|
816
|
+
tag.supply_type = bid.params.supply_type;
|
|
809
817
|
}
|
|
810
|
-
if (bid.params.
|
|
811
|
-
tag.pubclick = bid.params.
|
|
818
|
+
if (bid.params.pub_click) {
|
|
819
|
+
tag.pubclick = bid.params.pub_click;
|
|
812
820
|
}
|
|
813
|
-
if (bid.params.
|
|
814
|
-
tag.ext_inv_code = bid.params.
|
|
821
|
+
if (bid.params.ext_inv_code) {
|
|
822
|
+
tag.ext_inv_code = bid.params.ext_inv_code;
|
|
815
823
|
}
|
|
816
|
-
if (bid.params.
|
|
817
|
-
tag.publisher_id = parseInt(bid.params.
|
|
824
|
+
if (bid.params.publisher_id) {
|
|
825
|
+
tag.publisher_id = parseInt(bid.params.publisher_id, 10);
|
|
818
826
|
}
|
|
819
|
-
if (bid.params.
|
|
820
|
-
tag.external_imp_id = bid.params.
|
|
827
|
+
if (bid.params.external_imp_id) {
|
|
828
|
+
tag.external_imp_id = bid.params.external_imp_id;
|
|
821
829
|
}
|
|
822
830
|
|
|
823
831
|
let ortb2ImpKwStr = deepAccess(bid, 'ortb2Imp.ext.data.keywords');
|
|
@@ -1218,17 +1226,6 @@ function parseMediaType(rtbBid) {
|
|
|
1218
1226
|
}
|
|
1219
1227
|
}
|
|
1220
1228
|
|
|
1221
|
-
function addUserId(eids, id, source, rti) {
|
|
1222
|
-
if (id) {
|
|
1223
|
-
if (rti) {
|
|
1224
|
-
eids.push({ source, id, rti_partner: rti });
|
|
1225
|
-
} else {
|
|
1226
|
-
eids.push({ source, id });
|
|
1227
|
-
}
|
|
1228
|
-
}
|
|
1229
|
-
return eids;
|
|
1230
|
-
}
|
|
1231
|
-
|
|
1232
1229
|
function getBidFloor(bid) {
|
|
1233
1230
|
if (!isFn(bid.getFloor)) {
|
|
1234
1231
|
return (bid.params.reserve) ? bid.params.reserve : null;
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getBidIdParameter,
|
|
3
|
+
isArray,
|
|
4
|
+
getWindowTop,
|
|
5
|
+
getUniqueIdentifierStr,
|
|
6
|
+
deepSetValue,
|
|
7
|
+
logError,
|
|
8
|
+
logWarn,
|
|
9
|
+
createTrackPixelHtml,
|
|
10
|
+
getWindowSelf,
|
|
11
|
+
isFn,
|
|
12
|
+
isPlainObject,
|
|
13
|
+
} from '../src/utils.js';
|
|
14
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
15
|
+
import {BANNER} from '../src/mediaTypes.js';
|
|
16
|
+
import {config} from '../src/config.js';
|
|
17
|
+
import {ajax} from '../src/ajax.js';
|
|
18
|
+
|
|
19
|
+
const BIDDER_CODE = 'bcmssp';
|
|
20
|
+
const URL = 'https://rt.marphezis.com/hb';
|
|
21
|
+
const TRACK_EVENT_URL = 'https://rt.marphezis.com/prebid'
|
|
22
|
+
|
|
23
|
+
export const spec = {
|
|
24
|
+
code: BIDDER_CODE,
|
|
25
|
+
gvlid: 883,
|
|
26
|
+
supportedMediaTypes: [BANNER],
|
|
27
|
+
isBidRequestValid,
|
|
28
|
+
buildRequests,
|
|
29
|
+
interpretResponse,
|
|
30
|
+
onBidderError,
|
|
31
|
+
onTimeout,
|
|
32
|
+
onBidWon,
|
|
33
|
+
getUserSyncs,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function buildRequests(bidReqs, bidderRequest) {
|
|
37
|
+
try {
|
|
38
|
+
const impressions = bidReqs.map(bid => {
|
|
39
|
+
let bidSizes = bid?.mediaTypes?.banner?.sizes || bid.sizes;
|
|
40
|
+
bidSizes = ((isArray(bidSizes) && isArray(bidSizes[0])) ? bidSizes : [bidSizes]);
|
|
41
|
+
bidSizes = bidSizes.filter(size => isArray(size));
|
|
42
|
+
const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)}));
|
|
43
|
+
|
|
44
|
+
const element = document.getElementById(bid.adUnitCode);
|
|
45
|
+
const minSize = _getMinSize(processedSizes);
|
|
46
|
+
const viewabilityAmount = _isViewabilityMeasurable(element) ? _getViewability(element, getWindowTop(), minSize) : 'na';
|
|
47
|
+
const viewabilityAmountRounded = isNaN(viewabilityAmount) ? viewabilityAmount : Math.round(viewabilityAmount);
|
|
48
|
+
|
|
49
|
+
const imp = {
|
|
50
|
+
id: bid.bidId,
|
|
51
|
+
banner: {
|
|
52
|
+
format: processedSizes,
|
|
53
|
+
ext: {
|
|
54
|
+
viewability: viewabilityAmountRounded
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
tagid: String(bid.adUnitCode)
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const bidFloor = _getBidFloor(bid);
|
|
61
|
+
|
|
62
|
+
if (bidFloor) {
|
|
63
|
+
imp.bidfloor = bidFloor;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return imp;
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
const referrer = bidderRequest?.refererInfo?.page || '';
|
|
70
|
+
const publisherId = getBidIdParameter('publisherId', bidReqs[0].params);
|
|
71
|
+
|
|
72
|
+
const payload = {
|
|
73
|
+
id: getUniqueIdentifierStr(),
|
|
74
|
+
imp: impressions,
|
|
75
|
+
site: {
|
|
76
|
+
domain: bidderRequest?.refererInfo?.domain || '',
|
|
77
|
+
page: referrer,
|
|
78
|
+
publisher: {
|
|
79
|
+
id: publisherId
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
device: {
|
|
83
|
+
devicetype: _getDeviceType(),
|
|
84
|
+
w: screen.width,
|
|
85
|
+
h: screen.height
|
|
86
|
+
},
|
|
87
|
+
tmax: config.getConfig('bidderTimeout')
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
if (bidderRequest?.gdprConsent) {
|
|
91
|
+
deepSetValue(payload, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies);
|
|
92
|
+
deepSetValue(payload, 'user.ext.consent', bidderRequest.gdprConsent.consentString);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (bidderRequest?.uspConsent) {
|
|
96
|
+
deepSetValue(payload, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (config.getConfig('coppa') === true) {
|
|
100
|
+
deepSetValue(payload, 'regs.coppa', 1);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (bidReqs?.[0]?.schain) {
|
|
104
|
+
deepSetValue(payload, 'source.ext.schain', bidReqs[0].schain)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (bidReqs?.[0]?.userIdAsEids) {
|
|
108
|
+
deepSetValue(payload, 'user.ext.eids', bidReqs[0].userIdAsEids || [])
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (bidReqs?.[0].userId) {
|
|
112
|
+
deepSetValue(payload, 'user.ext.ids', bidReqs[0].userId || [])
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
method: 'POST',
|
|
117
|
+
url: URL,
|
|
118
|
+
data: JSON.stringify(payload),
|
|
119
|
+
options: {contentType: 'text/plain', withCredentials: false}
|
|
120
|
+
};
|
|
121
|
+
} catch (e) {
|
|
122
|
+
logError(e, {bidReqs, bidderRequest});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function isBidRequestValid(bid) {
|
|
127
|
+
if (bid.bidder !== BIDDER_CODE || !bid.params || !bid.params.publisherId) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function interpretResponse(serverResponse) {
|
|
135
|
+
let response = [];
|
|
136
|
+
if (!serverResponse.body || typeof serverResponse.body != 'object') {
|
|
137
|
+
logWarn('Brightcom server returned empty/non-json response: ' + JSON.stringify(serverResponse.body));
|
|
138
|
+
return response;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const {body: {id, seatbid}} = serverResponse;
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
if (id && seatbid && seatbid.length > 0 && seatbid[0].bid && seatbid[0].bid.length > 0) {
|
|
145
|
+
response = seatbid[0].bid.map(bid => {
|
|
146
|
+
return {
|
|
147
|
+
requestId: bid.impid,
|
|
148
|
+
cpm: parseFloat(bid.price),
|
|
149
|
+
width: parseInt(bid.w),
|
|
150
|
+
height: parseInt(bid.h),
|
|
151
|
+
creativeId: bid.crid || bid.id,
|
|
152
|
+
currency: 'USD',
|
|
153
|
+
netRevenue: true,
|
|
154
|
+
mediaType: BANNER,
|
|
155
|
+
ad: _getAdMarkup(bid),
|
|
156
|
+
ttl: 60,
|
|
157
|
+
meta: {
|
|
158
|
+
advertiserDomains: bid?.adomain || []
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
} catch (e) {
|
|
164
|
+
logError(e, {id, seatbid});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return response;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Don't do user sync for now
|
|
171
|
+
function getUserSyncs(syncOptions, responses, gdprConsent) {
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function onTimeout(timeoutData) {
|
|
176
|
+
if (timeoutData === null) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
_trackEvent('timeout', timeoutData);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function onBidderError(errorData) {
|
|
184
|
+
if (errorData === null || !errorData.bidderRequest) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
_trackEvent('error', errorData.bidderRequest)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function onBidWon(bid) {
|
|
192
|
+
if (bid === null) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
_trackEvent('bidwon', bid)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function _trackEvent(endpoint, data) {
|
|
200
|
+
ajax(`${TRACK_EVENT_URL}/${endpoint}`, null, JSON.stringify(data), {
|
|
201
|
+
method: 'POST',
|
|
202
|
+
withCredentials: false
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function _isMobile() {
|
|
207
|
+
return (/(ios|ipod|ipad|iphone|android)/i).test(navigator.userAgent);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function _isConnectedTV() {
|
|
211
|
+
return (/(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i).test(navigator.userAgent);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function _getDeviceType() {
|
|
215
|
+
return _isMobile() ? 1 : _isConnectedTV() ? 3 : 2;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function _getAdMarkup(bid) {
|
|
219
|
+
let adm = bid.adm;
|
|
220
|
+
if ('nurl' in bid) {
|
|
221
|
+
adm += createTrackPixelHtml(bid.nurl);
|
|
222
|
+
}
|
|
223
|
+
return adm;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function _isViewabilityMeasurable(element) {
|
|
227
|
+
return !_isIframe() && element !== null;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function _getViewability(element, topWin, {w, h} = {}) {
|
|
231
|
+
return getWindowTop().document.visibilityState === 'visible' ? _getPercentInView(element, topWin, {w, h}) : 0;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function _isIframe() {
|
|
235
|
+
try {
|
|
236
|
+
return getWindowSelf() !== getWindowTop();
|
|
237
|
+
} catch (e) {
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function _getMinSize(sizes) {
|
|
243
|
+
return sizes.reduce((min, size) => size.h * size.w < min.h * min.w ? size : min);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function _getBoundingBox(element, {w, h} = {}) {
|
|
247
|
+
let {width, height, left, top, right, bottom} = element.getBoundingClientRect();
|
|
248
|
+
|
|
249
|
+
if ((width === 0 || height === 0) && w && h) {
|
|
250
|
+
width = w;
|
|
251
|
+
height = h;
|
|
252
|
+
right = left + w;
|
|
253
|
+
bottom = top + h;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return {width, height, left, top, right, bottom};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function _getIntersectionOfRects(rects) {
|
|
260
|
+
const bbox = {
|
|
261
|
+
left: rects[0].left, right: rects[0].right, top: rects[0].top, bottom: rects[0].bottom
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
for (let i = 1; i < rects.length; ++i) {
|
|
265
|
+
bbox.left = Math.max(bbox.left, rects[i].left);
|
|
266
|
+
bbox.right = Math.min(bbox.right, rects[i].right);
|
|
267
|
+
|
|
268
|
+
if (bbox.left >= bbox.right) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
bbox.top = Math.max(bbox.top, rects[i].top);
|
|
273
|
+
bbox.bottom = Math.min(bbox.bottom, rects[i].bottom);
|
|
274
|
+
|
|
275
|
+
if (bbox.top >= bbox.bottom) {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
bbox.width = bbox.right - bbox.left;
|
|
281
|
+
bbox.height = bbox.bottom - bbox.top;
|
|
282
|
+
|
|
283
|
+
return bbox;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function _getPercentInView(element, topWin, {w, h} = {}) {
|
|
287
|
+
const elementBoundingBox = _getBoundingBox(element, {w, h});
|
|
288
|
+
|
|
289
|
+
// Obtain the intersection of the element and the viewport
|
|
290
|
+
const elementInViewBoundingBox = _getIntersectionOfRects([{
|
|
291
|
+
left: 0, top: 0, right: topWin.innerWidth, bottom: topWin.innerHeight
|
|
292
|
+
}, elementBoundingBox]);
|
|
293
|
+
|
|
294
|
+
let elementInViewArea, elementTotalArea;
|
|
295
|
+
|
|
296
|
+
if (elementInViewBoundingBox !== null) {
|
|
297
|
+
// Some or all of the element is in view
|
|
298
|
+
elementInViewArea = elementInViewBoundingBox.width * elementInViewBoundingBox.height;
|
|
299
|
+
elementTotalArea = elementBoundingBox.width * elementBoundingBox.height;
|
|
300
|
+
|
|
301
|
+
return ((elementInViewArea / elementTotalArea) * 100);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// No overlap between element and the viewport; therefore, the element
|
|
305
|
+
// lies completely out of view
|
|
306
|
+
return 0;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function _getBidFloor(bid) {
|
|
310
|
+
if (!isFn(bid.getFloor)) {
|
|
311
|
+
return bid.params.bidFloor ? bid.params.bidFloor : null;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
let floor = bid.getFloor({
|
|
315
|
+
currency: 'USD', mediaType: '*', size: '*'
|
|
316
|
+
});
|
|
317
|
+
if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'USD') {
|
|
318
|
+
return floor.floor;
|
|
319
|
+
}
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Brightcom SSP Bid Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: alexandruc@brightcom.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Brightcom's adapter integration to the Prebid library.
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
var adUnits = [
|
|
17
|
+
{
|
|
18
|
+
code: 'test-leaderboard',
|
|
19
|
+
mediaTypes: {
|
|
20
|
+
banner: {
|
|
21
|
+
sizes: [[728, 90]]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
bids: [{
|
|
25
|
+
bidder: 'bcmssp',
|
|
26
|
+
params: {
|
|
27
|
+
publisherId: 2141020,
|
|
28
|
+
bidFloor: 0.01
|
|
29
|
+
}
|
|
30
|
+
}]
|
|
31
|
+
}, {
|
|
32
|
+
code: 'test-banner',
|
|
33
|
+
mediaTypes: {
|
|
34
|
+
banner: {
|
|
35
|
+
sizes: [[300, 250]]
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
bids: [{
|
|
39
|
+
bidder: 'bcmssp',
|
|
40
|
+
params: {
|
|
41
|
+
publisherId: 2141020
|
|
42
|
+
}
|
|
43
|
+
}]
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
```
|
|
@@ -11,7 +11,7 @@ import { getRefererInfo } from '../src/refererDetection.js';
|
|
|
11
11
|
import { hasPurpose1Consent } from '../src/utils/gpdr.js';
|
|
12
12
|
|
|
13
13
|
const GVLID = 91;
|
|
14
|
-
export const ADAPTER_VERSION =
|
|
14
|
+
export const ADAPTER_VERSION = 35;
|
|
15
15
|
const BIDDER_CODE = 'criteo';
|
|
16
16
|
const CDB_ENDPOINT = 'https://bidder.criteo.com/cdb';
|
|
17
17
|
const PROFILE_ID_INLINE = 207;
|
|
@@ -27,7 +27,7 @@ const LOG_PREFIX = 'Criteo: ';
|
|
|
27
27
|
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
|
|
28
28
|
*/
|
|
29
29
|
const FAST_BID_VERSION_PLACEHOLDER = '%FAST_BID_VERSION%';
|
|
30
|
-
export const FAST_BID_VERSION_CURRENT =
|
|
30
|
+
export const FAST_BID_VERSION_CURRENT = 135;
|
|
31
31
|
const FAST_BID_VERSION_LATEST = 'latest';
|
|
32
32
|
const FAST_BID_VERSION_NONE = 'none';
|
|
33
33
|
const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
|
|
@@ -523,9 +523,8 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
|
|
|
523
523
|
}
|
|
524
524
|
};
|
|
525
525
|
};
|
|
526
|
-
request.user = {
|
|
527
|
-
|
|
528
|
-
};
|
|
526
|
+
request.user = bidderRequest.ortb2?.user || {};
|
|
527
|
+
request.site = bidderRequest.ortb2?.site || {};
|
|
529
528
|
if (bidderRequest && bidderRequest.ceh) {
|
|
530
529
|
request.user.ceh = bidderRequest.ceh;
|
|
531
530
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
```
|
|
4
4
|
Module Name: C-WIRE Bid Adapter
|
|
5
5
|
Module Type: Bidder Adapter
|
|
6
|
-
Maintainer: devs@cwire.
|
|
6
|
+
Maintainer: devs@cwire.com
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
## Description
|
|
@@ -40,10 +40,16 @@ var adUnits = [
|
|
|
40
40
|
params: {
|
|
41
41
|
pageId: 1422, // required - number
|
|
42
42
|
placementId: 2211521, // required - number
|
|
43
|
-
cwcreative: '42', // optional - id of creative to force
|
|
44
|
-
refgroups: 'test-user', // optional - name of group or coma separated list of groups to force
|
|
45
43
|
}
|
|
46
44
|
}]
|
|
47
45
|
}
|
|
48
46
|
];
|
|
49
47
|
```
|
|
48
|
+
|
|
49
|
+
### URL parameters
|
|
50
|
+
|
|
51
|
+
For debugging and testing purposes url parameters can be set.
|
|
52
|
+
|
|
53
|
+
**Example:**
|
|
54
|
+
|
|
55
|
+
`https://www.some-site.com/article.html?cwdebug=true&cwfeatures=feature1,feature2&cwcreative=1234`
|
|
@@ -40,7 +40,7 @@ const NATIVERET = {
|
|
|
40
40
|
title: {
|
|
41
41
|
len: 75,
|
|
42
42
|
},
|
|
43
|
-
}
|
|
43
|
+
},
|
|
44
44
|
],
|
|
45
45
|
plcmttype: 1,
|
|
46
46
|
privacy: 1,
|
|
@@ -63,9 +63,9 @@ const getUserID = () => {
|
|
|
63
63
|
let idm = storage.getCookie(COOKIE_KEY_MGUID);
|
|
64
64
|
|
|
65
65
|
if (idd && !idm) {
|
|
66
|
-
idm = idd
|
|
66
|
+
idm = idd;
|
|
67
67
|
} else if (idm && !idd) {
|
|
68
|
-
idd = idm
|
|
68
|
+
idd = idm;
|
|
69
69
|
} else if (!idd && !idm) {
|
|
70
70
|
const uuid = utils.generateUUID();
|
|
71
71
|
storage.setCookie(COOKIE_KEY_MGUID, uuid);
|
|
@@ -228,7 +228,7 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
228
228
|
let id = '' + (i + 1);
|
|
229
229
|
|
|
230
230
|
if (mediaTypes.native) {
|
|
231
|
-
ret = { ...NATIVERET, ...{ id, bidFloor } }
|
|
231
|
+
ret = { ...NATIVERET, ...{ id, bidFloor } };
|
|
232
232
|
}
|
|
233
233
|
// banner
|
|
234
234
|
if (mediaTypes.banner) {
|
|
@@ -276,6 +276,11 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
276
276
|
*/
|
|
277
277
|
function getParam(validBidRequests, bidderRequest) {
|
|
278
278
|
const pubcid = utils.deepAccess(validBidRequests[0], 'crumbs.pubcid');
|
|
279
|
+
const sharedid =
|
|
280
|
+
utils.deepAccess(validBidRequests[0], 'userId.sharedid.id') ||
|
|
281
|
+
utils.deepAccess(validBidRequests[0], 'userId.pubcid');
|
|
282
|
+
const eids = validBidRequests[0].userIdAsEids || validBidRequests[0].userId;
|
|
283
|
+
|
|
279
284
|
let isMobile = getDevice() ? 1 : 0;
|
|
280
285
|
// input test status by Publisher. more frequently for test true req
|
|
281
286
|
let isTest = validBidRequests[0].params.test || 0;
|
|
@@ -284,7 +289,8 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
284
289
|
|
|
285
290
|
const timeout = bidderRequest.timeout || 2000;
|
|
286
291
|
|
|
287
|
-
const domain =
|
|
292
|
+
const domain =
|
|
293
|
+
utils.deepAccess(bidderRequest, 'refererInfo.domain') || document.domain;
|
|
288
294
|
const location = utils.deepAccess(bidderRequest, 'refererInfo.referer');
|
|
289
295
|
const page = utils.deepAccess(bidderRequest, 'refererInfo.page');
|
|
290
296
|
const referer = utils.deepAccess(bidderRequest, 'refererInfo.ref');
|
|
@@ -304,10 +310,14 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
304
310
|
ua: navigator.userAgent,
|
|
305
311
|
language: /en/.test(navigator.language) ? 'en' : navigator.language,
|
|
306
312
|
},
|
|
313
|
+
ext: {
|
|
314
|
+
eids,
|
|
315
|
+
},
|
|
307
316
|
user: {
|
|
308
317
|
buyeruid: getUserID(),
|
|
309
|
-
id: pubcid,
|
|
318
|
+
id: sharedid || pubcid,
|
|
310
319
|
},
|
|
320
|
+
eids,
|
|
311
321
|
tmax: timeout,
|
|
312
322
|
site: {
|
|
313
323
|
name: domain,
|
|
@@ -317,7 +327,7 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
317
327
|
mobile: isMobile,
|
|
318
328
|
cat: [], // todo
|
|
319
329
|
publisher: {
|
|
320
|
-
id: globals['publisher']
|
|
330
|
+
id: globals['publisher'],
|
|
321
331
|
// todo
|
|
322
332
|
// name: xxx
|
|
323
333
|
},
|
|
@@ -401,8 +411,8 @@ export const spec = {
|
|
|
401
411
|
nurl: getKv(bid, 'nurl'),
|
|
402
412
|
ttl: TIME_TO_LIVE,
|
|
403
413
|
meta: {
|
|
404
|
-
advertiserDomains: getKv(bid, 'adomain') || []
|
|
405
|
-
}
|
|
414
|
+
advertiserDomains: getKv(bid, 'adomain') || [],
|
|
415
|
+
},
|
|
406
416
|
};
|
|
407
417
|
if (mediaType === 'native') {
|
|
408
418
|
const adm = getKv(bid, 'adm');
|
|
@@ -448,7 +458,7 @@ export const spec = {
|
|
|
448
458
|
native.impressionTrackers.push(tracker.url);
|
|
449
459
|
break;
|
|
450
460
|
// case 2:
|
|
451
|
-
// native.javascriptTrackers = `<script src=\
|
|
461
|
+
// native.javascriptTrackers = `<script src=\'${tracker.url}\'></script>`;
|
|
452
462
|
// break;
|
|
453
463
|
}
|
|
454
464
|
});
|
|
@@ -484,8 +494,8 @@ export const spec = {
|
|
|
484
494
|
*/
|
|
485
495
|
onBidWon: function (bid) {
|
|
486
496
|
if (bid['nurl']) {
|
|
487
|
-
utils.triggerPixel(bid['nurl'])
|
|
497
|
+
utils.triggerPixel(bid['nurl']);
|
|
488
498
|
}
|
|
489
|
-
}
|
|
499
|
+
},
|
|
490
500
|
};
|
|
491
501
|
registerBidder(spec);
|