prebid.js 9.52.0 → 9.53.2
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/.circleci/config.yml +27 -4
- package/creative/crossDomain.js +4 -2
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adagioUtils.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aniviewBidAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bitmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgeuppBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chromeAiRtdProvider.js +1 -0
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contxtfulBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.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/dailymotionBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +10 -2
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/equativBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/excoBidAdapter.js +1 -1
- package/dist/fanAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsBidAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmobiBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/jixieIdSystem.js +1 -0
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.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/liveIntentId.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.js +1 -1
- package/dist/madsenseBidAdapter.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/medianetBidAdapter.js +1 -1
- package/dist/medianetUtils.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobilefuseBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360Utils.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/nodalsAiRtdProvider.js +1 -1
- package/dist/not-for-prod/prebid.js +175 -173
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/ortb2.5Translator.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/ozoneBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubmaticRtdProvider.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/relevatehealthBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseUtils.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/showheroes-bsBidAdapter.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/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sparteoBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.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/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooUtils.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/yahooAdsBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/gulpfile.js +12 -6
- package/integrationExamples/chromeai/japanese.html +224 -0
- package/integrationExamples/gpt/x-domain/creative.html +1 -1
- package/karma.conf.maker.js +7 -7
- package/karmaRunner.js +3 -3
- package/libraries/liveIntentId/shared.js +16 -0
- package/modules/.submodules.json +1 -0
- package/modules/aniviewBidAdapter.js +32 -23
- package/modules/chromeAiRtdProvider.js +421 -0
- package/modules/chromeAiRtdProvider.md +230 -0
- package/modules/fanAdapter.js +318 -124
- package/modules/ixBidAdapter.js +5 -0
- package/modules/jixieIdSystem.js +186 -0
- package/modules/ozoneBidAdapter.js +214 -336
- package/modules/prebidServerBidAdapter/index.js +59 -35
- package/modules/pubmaticRtdProvider.js +418 -4
- package/modules/pubmaticRtdProvider.md +12 -2
- package/modules/relevatehealthBidAdapter.js +20 -130
- package/modules/relevatehealthBidAdapter.md +1 -2
- package/modules/sovrnBidAdapter.js +4 -4
- package/modules/teadsBidAdapter.js +5 -0
- package/modules/ttdBidAdapter.js +5 -4
- package/modules/userId/index.js +30 -31
- package/package.json +5 -4
- package/src/adapterManager.js +3 -0
- package/test/spec/libraries/cmUtils_spec.js +17 -12
- package/test/spec/modules/aniviewBidAdapter_spec.js +15 -2
- package/test/spec/modules/chromeAiRtdProvider_spec.js +393 -0
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +5 -2
- package/test/spec/modules/euidIdSystem_spec.js +9 -3
- package/test/spec/modules/fanAdapter_spec.js +264 -268
- package/test/spec/modules/id5IdSystem_spec.js +57 -101
- package/test/spec/modules/identityLinkIdSystem_spec.js +1 -0
- package/test/spec/modules/idxIdSystem_spec.js +2 -75
- package/test/spec/modules/instreamTracking_spec.js +15 -18
- package/test/spec/modules/ixBidAdapter_spec.js +26 -0
- package/test/spec/modules/jixieIdSystem_spec.js +303 -0
- package/test/spec/modules/liveIntentExternalIdSystem_spec.js +5 -0
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
- package/test/spec/modules/liveIntentIdSystem_spec.js +38 -0
- package/test/spec/modules/lmpIdSystem_spec.js +2 -81
- package/test/spec/modules/ozoneBidAdapter_spec.js +511 -658
- package/test/spec/modules/prebidServerBidAdapter_spec.js +72 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +411 -126
- package/test/spec/modules/pubmaticRtdProvider_spec.js +946 -2
- package/test/spec/modules/raynRtdProvider_spec.js +18 -22
- package/test/spec/modules/relevatehealthBidAdapter_spec.js +9 -39
- package/test/spec/modules/sharedIdSystem_spec.js +3 -3
- package/test/spec/modules/sovrnBidAdapter_spec.js +71 -3
- package/test/spec/modules/teadsBidAdapter_spec.js +9 -4
- package/test/spec/modules/ttdBidAdapter_spec.js +24 -2
- package/test/spec/modules/uid2IdSystem_helpers.js +5 -2
- package/test/spec/modules/userId_spec.js +142 -387
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +13 -12
- package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +3 -69
- package/wdio.shared.conf.js +2 -2
- package/CLAUDE.md +0 -1
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
logWarn,
|
|
6
6
|
deepSetValue,
|
|
7
7
|
isArray,
|
|
8
|
-
contains,
|
|
9
8
|
mergeDeep,
|
|
10
9
|
parseUrl,
|
|
11
10
|
generateUUID, isInteger, deepClone, getBidIdParameter
|
|
@@ -16,122 +15,57 @@ import {config} from '../src/config.js';
|
|
|
16
15
|
import {getPriceBucketString} from '../src/cpmBucketManager.js';
|
|
17
16
|
import { Renderer } from '../src/Renderer.js';
|
|
18
17
|
import {getRefererInfo} from '../src/refererDetection.js';
|
|
18
|
+
import {toOrtb25} from '../libraries/ortb2.5Translator/translator.js';
|
|
19
19
|
const BIDDER_CODE = 'ozone';
|
|
20
|
-
const ORIGIN = 'https://elb.the-ozone-project.com';
|
|
20
|
+
const ORIGIN = 'https://elb.the-ozone-project.com';
|
|
21
21
|
const AUCTIONURI = '/openrtb2/auction';
|
|
22
22
|
const OZONECOOKIESYNC = '/static/load-cookie.html';
|
|
23
23
|
const OZONE_RENDERER_URL = 'https://prebid.the-ozone-project.com/ozone-renderer.js';
|
|
24
|
-
const
|
|
25
|
-
const OZONEVERSION = '
|
|
24
|
+
const KEY_PREFIX = 'oz';
|
|
25
|
+
const OZONEVERSION = '4.0.0';
|
|
26
26
|
export const spec = {
|
|
27
27
|
gvlid: 524,
|
|
28
28
|
version: OZONEVERSION,
|
|
29
29
|
code: BIDDER_CODE,
|
|
30
30
|
supportedMediaTypes: [VIDEO, BANNER],
|
|
31
|
-
cookieSyncBag: {publisherId: null, siteId: null, userIdObject: {}},
|
|
32
|
-
propertyBag: {pageId: null, buildRequestsStart: 0, buildRequestsEnd: 0
|
|
33
|
-
whitelabel_defaults: {
|
|
34
|
-
'logId': 'OZONE',
|
|
35
|
-
'bidder': 'ozone',
|
|
36
|
-
'keyPrefix': 'oz',
|
|
37
|
-
'auctionUrl': ORIGIN + AUCTIONURI,
|
|
38
|
-
'cookieSyncUrl': ORIGIN + OZONECOOKIESYNC,
|
|
39
|
-
'rendererUrl': OZONE_RENDERER_URL,
|
|
40
|
-
'batchRequests': false /* you can change this to true OR numeric OR override it in the config: config.ozone.batchRequests = true/false/number */
|
|
41
|
-
},
|
|
42
|
-
loadWhitelabelData(bid) {
|
|
43
|
-
if (this.propertyBag.whitelabel) { return; }
|
|
44
|
-
this.propertyBag.whitelabel = JSON.parse(JSON.stringify(this.whitelabel_defaults));
|
|
45
|
-
let bidder = bid.bidder || 'ozone'; // eg. ozone
|
|
46
|
-
this.propertyBag.whitelabel.logId = bidder.toUpperCase();
|
|
47
|
-
this.propertyBag.whitelabel.bidder = bidder;
|
|
48
|
-
let bidderConfig = config.getConfig(bidder) || {};
|
|
49
|
-
logInfo('got bidderConfig: ', deepClone(bidderConfig));
|
|
50
|
-
if (bidderConfig.kvpPrefix) {
|
|
51
|
-
this.propertyBag.whitelabel.keyPrefix = bidderConfig.kvpPrefix;
|
|
52
|
-
}
|
|
53
|
-
let arr = this.getGetParametersAsObject();
|
|
54
|
-
if (bidderConfig.endpointOverride) {
|
|
55
|
-
if (bidderConfig.endpointOverride.origin) {
|
|
56
|
-
this.propertyBag.endpointOverride = bidderConfig.endpointOverride.origin;
|
|
57
|
-
this.propertyBag.whitelabel.auctionUrl = bidderConfig.endpointOverride.origin + AUCTIONURI;
|
|
58
|
-
this.propertyBag.whitelabel.cookieSyncUrl = bidderConfig.endpointOverride.origin + OZONECOOKIESYNC;
|
|
59
|
-
}
|
|
60
|
-
if (arr.hasOwnProperty('renderer')) {
|
|
61
|
-
if (arr.renderer.match('%3A%2F%2F')) {
|
|
62
|
-
this.propertyBag.whitelabel.rendererUrl = decodeURIComponent(arr['renderer']);
|
|
63
|
-
} else {
|
|
64
|
-
this.propertyBag.whitelabel.rendererUrl = arr['renderer'];
|
|
65
|
-
}
|
|
66
|
-
} else if (bidderConfig.endpointOverride.rendererUrl) {
|
|
67
|
-
this.propertyBag.whitelabel.rendererUrl = bidderConfig.endpointOverride.rendererUrl;
|
|
68
|
-
}
|
|
69
|
-
if (bidderConfig.endpointOverride.cookieSyncUrl) {
|
|
70
|
-
this.propertyBag.whitelabel.cookieSyncUrl = bidderConfig.endpointOverride.cookieSyncUrl;
|
|
71
|
-
}
|
|
72
|
-
if (bidderConfig.endpointOverride.auctionUrl) {
|
|
73
|
-
this.propertyBag.endpointOverride = bidderConfig.endpointOverride.auctionUrl;
|
|
74
|
-
this.propertyBag.whitelabel.auctionUrl = bidderConfig.endpointOverride.auctionUrl;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (bidderConfig.hasOwnProperty('batchRequests')) {
|
|
78
|
-
if (this.batchValueIsValid(bidderConfig.batchRequests)) {
|
|
79
|
-
this.propertyBag.whitelabel.batchRequests = bidderConfig.batchRequests;
|
|
80
|
-
} else {
|
|
81
|
-
logError('invalid config: batchRequest');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (bidderConfig.hasOwnProperty('videoParams')) {
|
|
85
|
-
this.propertyBag.whitelabel.videoParams = bidderConfig.videoParams;
|
|
86
|
-
}
|
|
87
|
-
if (arr.hasOwnProperty('batchRequests')) {
|
|
88
|
-
let getBatch = parseInt(arr.batchRequests);
|
|
89
|
-
if (this.batchValueIsValid(getBatch)) {
|
|
90
|
-
this.propertyBag.whitelabel.batchRequests = getBatch;
|
|
91
|
-
} else {
|
|
92
|
-
logError('invalid GET: batchRequests');
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
try {
|
|
96
|
-
if (arr.hasOwnProperty('auction') && arr.auction === 'dev') {
|
|
97
|
-
logInfo('GET: auction=dev');
|
|
98
|
-
this.propertyBag.whitelabel.auctionUrl = ORIGIN_DEV + AUCTIONURI;
|
|
99
|
-
}
|
|
100
|
-
if (arr.hasOwnProperty('cookiesync') && arr.cookiesync === 'dev') {
|
|
101
|
-
logInfo('GET: cookiesync=dev');
|
|
102
|
-
this.propertyBag.whitelabel.cookieSyncUrl = ORIGIN_DEV + OZONECOOKIESYNC;
|
|
103
|
-
}
|
|
104
|
-
} catch (e) {}
|
|
105
|
-
logInfo('whitelabel: ', this.propertyBag.whitelabel);
|
|
106
|
-
},
|
|
107
|
-
batchValueIsValid(batch) {
|
|
108
|
-
return typeof batch === 'boolean' || (typeof batch === 'number' && batch > 0);
|
|
109
|
-
},
|
|
31
|
+
cookieSyncBag: {publisherId: null, siteId: null, userIdObject: {}},
|
|
32
|
+
propertyBag: {pageId: null, buildRequestsStart: 0, buildRequestsEnd: 0},
|
|
110
33
|
getAuctionUrl() {
|
|
111
|
-
|
|
34
|
+
const ep = config.getConfig('ozone.endpointOverride') || {};
|
|
35
|
+
if (ep.auctionUrl) return ep.auctionUrl;
|
|
36
|
+
const origin = ep.origin || ORIGIN;
|
|
37
|
+
return origin + AUCTIONURI;
|
|
112
38
|
},
|
|
113
39
|
getCookieSyncUrl() {
|
|
114
|
-
|
|
40
|
+
const ep = config.getConfig('ozone.endpointOverride') || {};
|
|
41
|
+
if (ep.cookieSyncUrl) return ep.cookieSyncUrl;
|
|
42
|
+
const origin = ep.origin || ORIGIN;
|
|
43
|
+
return origin + OZONECOOKIESYNC;
|
|
115
44
|
},
|
|
116
45
|
getRendererUrl() {
|
|
117
|
-
|
|
46
|
+
const ep = config.getConfig('ozone.endpointOverride') || {};
|
|
47
|
+
return ep.rendererUrl || OZONE_RENDERER_URL;
|
|
118
48
|
},
|
|
119
|
-
getVideoPlacementValue
|
|
120
|
-
if (['instream', 'outstream'].indexOf(context) < 0) return null;
|
|
121
|
-
return deepAccess(
|
|
49
|
+
getVideoPlacementValue(context) {
|
|
50
|
+
if (['instream', 'outstream'].indexOf(context) < 0) return null;
|
|
51
|
+
return deepAccess(config.getConfig('ozone.videoParams'), context);
|
|
122
52
|
},
|
|
123
53
|
getBatchRequests() {
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
return
|
|
54
|
+
const g = this.getGetParametersAsObject();
|
|
55
|
+
if (g['batchRequests'] && g['batchRequests'].toString().match(/^[0-9]+$/)) {
|
|
56
|
+
return parseInt(g['batchRequests']);
|
|
57
|
+
}
|
|
58
|
+
const batch = config.getConfig('ozone.batchRequests');
|
|
59
|
+
if (batch === true) return 10;
|
|
60
|
+
if (typeof batch === 'number' && batch > 0) {
|
|
61
|
+
return batch;
|
|
127
62
|
}
|
|
128
63
|
return false;
|
|
129
64
|
},
|
|
130
65
|
isBidRequestValid(bid) {
|
|
131
66
|
let vf = 'VALIDATION FAILED';
|
|
132
|
-
this.loadWhitelabelData(bid);
|
|
133
67
|
logInfo('isBidRequestValid : ', config.getConfig(), bid);
|
|
134
|
-
let adUnitCode = bid.adUnitCode;
|
|
68
|
+
let adUnitCode = bid.adUnitCode;
|
|
135
69
|
let err1 = `${vf} : missing {param} : siteId, placementId and publisherId are REQUIRED`;
|
|
136
70
|
if (!(getBidIdParameter('placementId', bid.params))) {
|
|
137
71
|
logError(err1.replace('{param}', 'placementId'), adUnitCode);
|
|
@@ -195,15 +129,14 @@ export const spec = {
|
|
|
195
129
|
return placementId.toString().match(/^[0-9]{10}$/);
|
|
196
130
|
},
|
|
197
131
|
buildRequests(validBidRequests, bidderRequest) {
|
|
198
|
-
this.loadWhitelabelData(validBidRequests[0]);
|
|
199
132
|
this.propertyBag.buildRequestsStart = new Date().getTime();
|
|
200
|
-
|
|
201
|
-
|
|
133
|
+
const bidderKey = BIDDER_CODE;
|
|
134
|
+
const prefix = KEY_PREFIX;
|
|
202
135
|
logInfo(`buildRequests time: ${this.propertyBag.buildRequestsStart} v ${OZONEVERSION} validBidRequests`, deepClone(validBidRequests), 'bidderRequest', deepClone(bidderRequest));
|
|
203
136
|
if (this.blockTheRequest()) {
|
|
204
137
|
return [];
|
|
205
138
|
}
|
|
206
|
-
let fledgeEnabled = !!bidderRequest.fledgeEnabled;
|
|
139
|
+
let fledgeEnabled = !!bidderRequest.fledgeEnabled;
|
|
207
140
|
let htmlParams = {'publisherId': '', 'siteId': ''};
|
|
208
141
|
if (validBidRequests.length > 0) {
|
|
209
142
|
Object.assign(this.cookieSyncBag.userIdObject, this.findAllUserIdsFromEids(validBidRequests[0]));
|
|
@@ -212,9 +145,9 @@ export const spec = {
|
|
|
212
145
|
htmlParams = validBidRequests[0].params;
|
|
213
146
|
}
|
|
214
147
|
logInfo('cookie sync bag', this.cookieSyncBag);
|
|
215
|
-
let singleRequest =
|
|
216
|
-
singleRequest = singleRequest !== false;
|
|
217
|
-
let ozoneRequest = {};
|
|
148
|
+
let singleRequest = config.getConfig('ozone.singleRequest');
|
|
149
|
+
singleRequest = singleRequest !== false;
|
|
150
|
+
let ozoneRequest = {};
|
|
218
151
|
let fpd = deepAccess(bidderRequest, 'ortb2', null);
|
|
219
152
|
logInfo('got ortb2 fpd: ', fpd);
|
|
220
153
|
if (fpd && deepAccess(fpd, 'user')) {
|
|
@@ -222,10 +155,10 @@ export const spec = {
|
|
|
222
155
|
ozoneRequest.user = fpd.user;
|
|
223
156
|
}
|
|
224
157
|
const getParams = this.getGetParametersAsObject();
|
|
225
|
-
const wlOztestmodeKey =
|
|
226
|
-
const isTestMode = getParams[wlOztestmodeKey] || null;
|
|
227
|
-
ozoneRequest.device = bidderRequest?.ortb2?.device || {};
|
|
228
|
-
let placementIdOverrideFromGetParam = this.getPlacementIdOverrideFromGetParam();
|
|
158
|
+
const wlOztestmodeKey = 'oztestmode';
|
|
159
|
+
const isTestMode = getParams[wlOztestmodeKey] || null;
|
|
160
|
+
ozoneRequest.device = bidderRequest?.ortb2?.device || {};
|
|
161
|
+
let placementIdOverrideFromGetParam = this.getPlacementIdOverrideFromGetParam();
|
|
229
162
|
let schain = null;
|
|
230
163
|
var auctionId = deepAccess(validBidRequests, '0.ortb2.source.tid');
|
|
231
164
|
if (auctionId === '0') {
|
|
@@ -233,8 +166,8 @@ export const spec = {
|
|
|
233
166
|
}
|
|
234
167
|
let tosendtags = validBidRequests.map(ozoneBidRequest => {
|
|
235
168
|
var obj = {};
|
|
236
|
-
let placementId = placementIdOverrideFromGetParam || this.getPlacementId(ozoneBidRequest);
|
|
237
|
-
obj.id = ozoneBidRequest.bidId;
|
|
169
|
+
let placementId = placementIdOverrideFromGetParam || this.getPlacementId(ozoneBidRequest);
|
|
170
|
+
obj.id = ozoneBidRequest.bidId;
|
|
238
171
|
obj.tagid = placementId;
|
|
239
172
|
obj.secure = parseUrl(getRefererInfo().page).protocol === 'https' ? 1 : 0;
|
|
240
173
|
let arrBannerSizes = [];
|
|
@@ -246,7 +179,7 @@ export const spec = {
|
|
|
246
179
|
}
|
|
247
180
|
} else {
|
|
248
181
|
if (ozoneBidRequest.mediaTypes.hasOwnProperty(BANNER)) {
|
|
249
|
-
arrBannerSizes = ozoneBidRequest.mediaTypes[BANNER].sizes;
|
|
182
|
+
arrBannerSizes = ozoneBidRequest.mediaTypes[BANNER].sizes;
|
|
250
183
|
logInfo('setting banner size from mediaTypes.banner for bidId ' + obj.id + ': ', arrBannerSizes);
|
|
251
184
|
}
|
|
252
185
|
if (ozoneBidRequest.mediaTypes.hasOwnProperty(VIDEO)) {
|
|
@@ -258,11 +191,12 @@ export const spec = {
|
|
|
258
191
|
}
|
|
259
192
|
let wh = getWidthAndHeightFromVideoObject(obj.video);
|
|
260
193
|
logInfo(`setting video object ${obj.id} from mediaTypes.video: `, obj.video, 'wh=', wh);
|
|
261
|
-
let settingToBe = 'setting obj.video.format to be ';
|
|
194
|
+
let settingToBe = 'setting obj.video.format to be ';
|
|
262
195
|
if (wh && typeof wh === 'object') {
|
|
263
196
|
obj.video.w = wh['w'];
|
|
264
197
|
obj.video.h = wh['h'];
|
|
265
|
-
|
|
198
|
+
const ps = getPlayerSizeFromObject(obj.video);
|
|
199
|
+
if (ps && Array.isArray(ps[0])) {
|
|
266
200
|
logInfo(`${settingToBe} an array of objects`);
|
|
267
201
|
obj.video.ext.format = [wh];
|
|
268
202
|
} else {
|
|
@@ -296,37 +230,37 @@ export const spec = {
|
|
|
296
230
|
}
|
|
297
231
|
obj.placementId = placementId;
|
|
298
232
|
deepSetValue(obj, 'ext.prebid', {'storedrequest': {'id': placementId}});
|
|
299
|
-
obj.ext[
|
|
300
|
-
obj.ext[
|
|
233
|
+
obj.ext[bidderKey] = {};
|
|
234
|
+
obj.ext[bidderKey].adUnitCode = ozoneBidRequest.adUnitCode;
|
|
301
235
|
if (ozoneBidRequest.params.hasOwnProperty('customData')) {
|
|
302
|
-
obj.ext[
|
|
236
|
+
obj.ext[bidderKey].customData = ozoneBidRequest.params.customData;
|
|
303
237
|
}
|
|
304
238
|
if (ozoneBidRequest.params.hasOwnProperty('ozFloor')) {
|
|
305
239
|
let ozFloorParsed = parseFloat(ozoneBidRequest.params.ozFloor);
|
|
306
240
|
if (!isNaN(ozFloorParsed)) {
|
|
307
|
-
obj.ext[
|
|
241
|
+
obj.ext[bidderKey].ozFloor = ozFloorParsed;
|
|
308
242
|
} else {
|
|
309
243
|
logError(`Ignoring invalid ozFloor value for adunit code: ${ozoneBidRequest.adUnitCode}`);
|
|
310
244
|
}
|
|
311
245
|
}
|
|
312
|
-
logInfo(`obj.ext.${
|
|
246
|
+
logInfo(`obj.ext.${bidderKey} is `, obj.ext[bidderKey]);
|
|
313
247
|
if (isTestMode != null) {
|
|
314
248
|
logInfo(`setting isTestMode: ${isTestMode}`);
|
|
315
|
-
if (obj.ext[
|
|
316
|
-
for (let i = 0; i < obj.ext[
|
|
317
|
-
obj.ext[
|
|
249
|
+
if (obj.ext[bidderKey].hasOwnProperty('customData')) {
|
|
250
|
+
for (let i = 0; i < obj.ext[bidderKey].customData.length; i++) {
|
|
251
|
+
obj.ext[bidderKey].customData[i]['targeting'][wlOztestmodeKey] = isTestMode;
|
|
318
252
|
}
|
|
319
253
|
} else {
|
|
320
|
-
obj.ext[
|
|
321
|
-
obj.ext[
|
|
254
|
+
obj.ext[bidderKey].customData = [{'settings': {}, 'targeting': {}}];
|
|
255
|
+
obj.ext[bidderKey].customData[0].targeting[wlOztestmodeKey] = isTestMode;
|
|
322
256
|
}
|
|
323
257
|
}
|
|
324
258
|
if (fpd && deepAccess(fpd, 'site')) {
|
|
325
259
|
logInfo('adding fpd.site');
|
|
326
|
-
if (deepAccess(obj, `ext.${
|
|
327
|
-
Object.assign(obj.ext[
|
|
260
|
+
if (deepAccess(obj, `ext.${bidderKey}.customData.0.targeting`, false)) {
|
|
261
|
+
Object.assign(obj.ext[bidderKey].customData[0].targeting, fpd.site);
|
|
328
262
|
} else {
|
|
329
|
-
deepSetValue(obj, `ext.${
|
|
263
|
+
deepSetValue(obj, `ext.${bidderKey}.customData.0.targeting`, fpd.site);
|
|
330
264
|
}
|
|
331
265
|
}
|
|
332
266
|
if (!schain && deepAccess(ozoneBidRequest, 'schain')) {
|
|
@@ -338,13 +272,13 @@ export const spec = {
|
|
|
338
272
|
}
|
|
339
273
|
let transactionId = deepAccess(ozoneBidRequest, 'ortb2Imp.ext.tid');
|
|
340
274
|
if (transactionId) {
|
|
341
|
-
obj.ext
|
|
275
|
+
obj.ext.tid = transactionId;
|
|
342
276
|
}
|
|
343
277
|
if (auctionId) {
|
|
344
|
-
obj.ext
|
|
278
|
+
obj.ext.auctionId = auctionId;
|
|
345
279
|
}
|
|
346
|
-
if (fledgeEnabled) {
|
|
347
|
-
const auctionEnvironment = deepAccess(ozoneBidRequest, 'ortb2Imp.ext.ae');
|
|
280
|
+
if (fledgeEnabled) {
|
|
281
|
+
const auctionEnvironment = deepAccess(ozoneBidRequest, 'ortb2Imp.ext.ae');
|
|
348
282
|
if (isInteger(auctionEnvironment)) {
|
|
349
283
|
deepSetValue(obj, 'ext.ae', auctionEnvironment);
|
|
350
284
|
} else {
|
|
@@ -354,32 +288,31 @@ export const spec = {
|
|
|
354
288
|
return obj;
|
|
355
289
|
});
|
|
356
290
|
let extObj = {};
|
|
357
|
-
extObj[
|
|
358
|
-
extObj[
|
|
359
|
-
extObj[
|
|
291
|
+
extObj[bidderKey] = {};
|
|
292
|
+
extObj[bidderKey][`${prefix}_pb_v`] = OZONEVERSION;
|
|
293
|
+
extObj[bidderKey][`${prefix}_rw`] = placementIdOverrideFromGetParam ? 1 : 0;
|
|
360
294
|
if (validBidRequests.length > 0) {
|
|
361
|
-
let userIds = this.cookieSyncBag.userIdObject;
|
|
295
|
+
let userIds = this.cookieSyncBag.userIdObject;
|
|
362
296
|
if (userIds.hasOwnProperty('pubcid.org')) {
|
|
363
|
-
extObj[
|
|
297
|
+
extObj[bidderKey].pubcid = userIds['pubcid.org'];
|
|
364
298
|
}
|
|
365
299
|
}
|
|
366
|
-
extObj[
|
|
367
|
-
let ozOmpFloorDollars =
|
|
368
|
-
logInfo(`${
|
|
300
|
+
extObj[bidderKey].pv = this.getPageId();
|
|
301
|
+
let ozOmpFloorDollars = config.getConfig('ozone.oz_omp_floor');
|
|
302
|
+
logInfo(`${prefix}_omp_floor dollar value = `, ozOmpFloorDollars);
|
|
369
303
|
if (typeof ozOmpFloorDollars === 'number') {
|
|
370
|
-
extObj[
|
|
304
|
+
extObj[bidderKey][`${prefix}_omp_floor`] = ozOmpFloorDollars;
|
|
371
305
|
} else if (typeof ozOmpFloorDollars !== 'undefined') {
|
|
372
|
-
logError(`IF set, ${
|
|
306
|
+
logError(`IF set, ${prefix}_omp_floor must be a number eg. 1.55. Found:` + (typeof ozOmpFloorDollars));
|
|
373
307
|
}
|
|
374
|
-
let ozWhitelistAdserverKeys =
|
|
308
|
+
let ozWhitelistAdserverKeys = config.getConfig('ozone.oz_whitelist_adserver_keys');
|
|
375
309
|
let useOzWhitelistAdserverKeys = isArray(ozWhitelistAdserverKeys) && ozWhitelistAdserverKeys.length > 0;
|
|
376
|
-
extObj[
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
extObj.
|
|
310
|
+
extObj[bidderKey][prefix + '_kvp_rw'] = useOzWhitelistAdserverKeys ? 1 : 0;
|
|
311
|
+
const endpointOverride = config.getConfig('ozone.endpointOverride');
|
|
312
|
+
if (endpointOverride?.origin || endpointOverride?.auctionUrl) {
|
|
313
|
+
extObj[bidderKey].origin = endpointOverride.auctionUrl || endpointOverride.origin;
|
|
380
314
|
}
|
|
381
|
-
|
|
382
|
-
let userExtEids = deepAccess(validBidRequests, '0.userIdAsEids', []); // generate the UserIDs in the correct format for UserId module
|
|
315
|
+
let userExtEids = deepAccess(validBidRequests, '0.userIdAsEids', []);
|
|
383
316
|
ozoneRequest.site = {
|
|
384
317
|
'publisher': {'id': htmlParams.publisherId},
|
|
385
318
|
'page': getRefererInfo().page,
|
|
@@ -408,27 +341,28 @@ export const spec = {
|
|
|
408
341
|
deepSetValue(ozoneRequest, 'regs.gpp', bidderRequest.ortb2.regs.gpp);
|
|
409
342
|
deepSetValue(ozoneRequest, 'regs.gpp_sid', bidderRequest.ortb2.regs.gpp_sid);
|
|
410
343
|
}
|
|
411
|
-
if (schain) {
|
|
344
|
+
if (schain) {
|
|
412
345
|
logInfo('schain found');
|
|
413
346
|
deepSetValue(ozoneRequest, 'source.ext.schain', schain);
|
|
414
347
|
}
|
|
415
348
|
if (config.getConfig('coppa') === true) {
|
|
416
349
|
deepSetValue(ozoneRequest, 'regs.coppa', 1);
|
|
417
350
|
}
|
|
418
|
-
extObj[
|
|
419
|
-
logInfo(`cookieDeprecationLabel ortb2.device.ext.cdep = ${extObj[
|
|
420
|
-
let batchRequestsVal = this.getBatchRequests();
|
|
351
|
+
extObj[bidderKey].cookieDeprecationLabel = deepAccess(bidderRequest, 'ortb2.device.ext.cdep', 'none');
|
|
352
|
+
logInfo(`cookieDeprecationLabel ortb2.device.ext.cdep = ${extObj[bidderKey].cookieDeprecationLabel}`);
|
|
353
|
+
let batchRequestsVal = this.getBatchRequests();
|
|
421
354
|
if (typeof batchRequestsVal === 'number') {
|
|
422
355
|
logInfo(`Batching = ${batchRequestsVal}`);
|
|
423
|
-
let arrRet = [];
|
|
356
|
+
let arrRet = [];
|
|
424
357
|
for (let i = 0; i < tosendtags.length; i += batchRequestsVal) {
|
|
425
|
-
ozoneRequest.id = generateUUID();
|
|
358
|
+
ozoneRequest.id = generateUUID();
|
|
426
359
|
deepSetValue(ozoneRequest, 'user.ext.eids', userExtEids);
|
|
427
360
|
if (auctionId) {
|
|
428
361
|
deepSetValue(ozoneRequest, 'source.tid', auctionId);
|
|
429
362
|
}
|
|
430
363
|
ozoneRequest.imp = tosendtags.slice(i, i + batchRequestsVal);
|
|
431
364
|
ozoneRequest.ext = extObj;
|
|
365
|
+
toOrtb25(ozoneRequest);
|
|
432
366
|
if (ozoneRequest.imp.length > 0) {
|
|
433
367
|
arrRet.push({
|
|
434
368
|
method: 'POST',
|
|
@@ -443,9 +377,10 @@ export const spec = {
|
|
|
443
377
|
}
|
|
444
378
|
if (singleRequest) {
|
|
445
379
|
logInfo('single request starting');
|
|
446
|
-
ozoneRequest.id = generateUUID();
|
|
380
|
+
ozoneRequest.id = generateUUID();
|
|
447
381
|
ozoneRequest.imp = tosendtags;
|
|
448
382
|
ozoneRequest.ext = extObj;
|
|
383
|
+
toOrtb25(ozoneRequest);
|
|
449
384
|
deepSetValue(ozoneRequest, 'user.ext.eids', userExtEids);
|
|
450
385
|
if (auctionId) {
|
|
451
386
|
deepSetValue(ozoneRequest, 'source.tid', auctionId);
|
|
@@ -463,13 +398,14 @@ export const spec = {
|
|
|
463
398
|
let arrRet = tosendtags.map(imp => {
|
|
464
399
|
logInfo('non-single response, working on imp : ', imp);
|
|
465
400
|
let ozoneRequestSingle = Object.assign({}, ozoneRequest);
|
|
466
|
-
ozoneRequestSingle.id = generateUUID();
|
|
401
|
+
ozoneRequestSingle.id = generateUUID();
|
|
467
402
|
ozoneRequestSingle.imp = [imp];
|
|
468
403
|
ozoneRequestSingle.ext = extObj;
|
|
469
404
|
deepSetValue(ozoneRequestSingle, 'user.ext.eids', userExtEids);
|
|
470
405
|
if (auctionId) {
|
|
471
406
|
deepSetValue(ozoneRequestSingle, 'source.tid', auctionId);
|
|
472
407
|
}
|
|
408
|
+
toOrtb25(ozoneRequestSingle);
|
|
473
409
|
return {
|
|
474
410
|
method: 'POST',
|
|
475
411
|
url: this.getAuctionUrl(),
|
|
@@ -502,14 +438,13 @@ export const spec = {
|
|
|
502
438
|
return ret;
|
|
503
439
|
},
|
|
504
440
|
interpretResponse(serverResponse, request) {
|
|
505
|
-
if (request && request.bidderRequest && request.bidderRequest.bids) { this.loadWhitelabelData(request.bidderRequest.bids[0]); }
|
|
506
441
|
let startTime = new Date().getTime();
|
|
507
|
-
|
|
508
|
-
|
|
442
|
+
const bidderKey = BIDDER_CODE;
|
|
443
|
+
const prefix = KEY_PREFIX;
|
|
509
444
|
logInfo(`interpretResponse time: ${startTime} . Time between buildRequests done and interpretResponse start was ${startTime - this.propertyBag.buildRequestsEnd}ms`);
|
|
510
445
|
logInfo(`serverResponse, request`, deepClone(serverResponse), deepClone(request));
|
|
511
446
|
serverResponse = serverResponse.body || {};
|
|
512
|
-
let aucId = serverResponse.id;
|
|
447
|
+
let aucId = serverResponse.id;
|
|
513
448
|
if (!serverResponse.hasOwnProperty('seatbid')) {
|
|
514
449
|
return [];
|
|
515
450
|
}
|
|
@@ -518,17 +453,17 @@ export const spec = {
|
|
|
518
453
|
}
|
|
519
454
|
let arrAllBids = [];
|
|
520
455
|
let labels;
|
|
521
|
-
let enhancedAdserverTargeting =
|
|
456
|
+
let enhancedAdserverTargeting = config.getConfig('ozone.enhancedAdserverTargeting');
|
|
522
457
|
logInfo('enhancedAdserverTargeting', enhancedAdserverTargeting);
|
|
523
458
|
if (typeof enhancedAdserverTargeting == 'undefined') {
|
|
524
459
|
enhancedAdserverTargeting = true;
|
|
525
460
|
}
|
|
526
461
|
logInfo('enhancedAdserverTargeting', enhancedAdserverTargeting);
|
|
527
|
-
serverResponse.seatbid = injectAdIdsIntoAllBidResponses(serverResponse.seatbid);
|
|
462
|
+
serverResponse.seatbid = injectAdIdsIntoAllBidResponses(serverResponse.seatbid);
|
|
528
463
|
serverResponse.seatbid = this.removeSingleBidderMultipleBids(serverResponse.seatbid);
|
|
529
|
-
let ozOmpFloorDollars =
|
|
464
|
+
let ozOmpFloorDollars = config.getConfig('ozone.oz_omp_floor');
|
|
530
465
|
let addOzOmpFloorDollars = typeof ozOmpFloorDollars === 'number';
|
|
531
|
-
let ozWhitelistAdserverKeys =
|
|
466
|
+
let ozWhitelistAdserverKeys = config.getConfig('ozone.oz_whitelist_adserver_keys');
|
|
532
467
|
let useOzWhitelistAdserverKeys = isArray(ozWhitelistAdserverKeys) && ozWhitelistAdserverKeys.length > 0;
|
|
533
468
|
for (let i = 0; i < serverResponse.seatbid.length; i++) {
|
|
534
469
|
let sb = serverResponse.seatbid[i];
|
|
@@ -546,7 +481,7 @@ export const spec = {
|
|
|
546
481
|
if (bidType === VIDEO) {
|
|
547
482
|
isVideo = true;
|
|
548
483
|
this.setBidMediaTypeIfNotExist(thisBid, VIDEO);
|
|
549
|
-
videoContext = this.getVideoContextForBidId(thisBid.bidId, request.bidderRequest.bids);
|
|
484
|
+
videoContext = this.getVideoContextForBidId(thisBid.bidId, request.bidderRequest.bids);
|
|
550
485
|
if (videoContext === 'outstream') {
|
|
551
486
|
logInfo('setting thisBid.mediaType = VIDEO & attach a renderer to OUTSTREAM video');
|
|
552
487
|
thisBid.renderer = newRenderer(thisBid.bidId);
|
|
@@ -554,7 +489,7 @@ export const spec = {
|
|
|
554
489
|
thisBid.vastXml = thisBid.adm;
|
|
555
490
|
} else {
|
|
556
491
|
logInfo('not an outstream video (presumably instream), will set thisBid.mediaType = VIDEO and thisBid.vastUrl and not attach a renderer');
|
|
557
|
-
thisBid.vastUrl = `https://${deepAccess(thisBid, 'ext.prebid.targeting.hb_cache_host', 'missing_host')}${deepAccess(thisBid, 'ext.prebid.targeting.hb_cache_path', 'missing_path')}?uuid=${deepAccess(thisBid, 'ext.prebid.targeting.hb_uuid', 'missing_uuid')}`;
|
|
492
|
+
thisBid.vastUrl = `https://${deepAccess(thisBid, 'ext.prebid.targeting.hb_cache_host', 'missing_host')}${deepAccess(thisBid, 'ext.prebid.targeting.hb_cache_path', 'missing_path')}?uuid=${deepAccess(thisBid, 'ext.prebid.targeting.hb_uuid', 'missing_uuid')}`;
|
|
558
493
|
if (!thisBid.hasOwnProperty('videoCacheKey')) {
|
|
559
494
|
let videoCacheUuid = deepAccess(thisBid, 'ext.prebid.targeting.hb_uuid', 'no_hb_uuid');
|
|
560
495
|
logInfo(`Adding videoCacheKey: ${videoCacheUuid}`);
|
|
@@ -570,41 +505,41 @@ export const spec = {
|
|
|
570
505
|
if (enhancedAdserverTargeting) {
|
|
571
506
|
let allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid, defaultWidth, defaultHeight);
|
|
572
507
|
logInfo('Going to iterate allBidsForThisBidId', deepClone(allBidsForThisBidid));
|
|
573
|
-
Object.keys(allBidsForThisBidid).forEach((
|
|
574
|
-
logInfo(`adding adserverTargeting for ${
|
|
575
|
-
adserverTargeting[
|
|
576
|
-
adserverTargeting[
|
|
577
|
-
adserverTargeting[
|
|
578
|
-
adserverTargeting[
|
|
579
|
-
adserverTargeting[
|
|
580
|
-
adserverTargeting[
|
|
581
|
-
if (allBidsForThisBidid[
|
|
582
|
-
adserverTargeting[
|
|
508
|
+
Object.keys(allBidsForThisBidid).forEach((seat, index, ar2) => {
|
|
509
|
+
logInfo(`adding adserverTargeting for ${seat} for bidId ${thisBid.bidId}`);
|
|
510
|
+
adserverTargeting[prefix + '_' + seat] = seat;
|
|
511
|
+
adserverTargeting[prefix + '_' + seat + '_crid'] = String(allBidsForThisBidid[seat].crid);
|
|
512
|
+
adserverTargeting[prefix + '_' + seat + '_adv'] = String(allBidsForThisBidid[seat].adomain);
|
|
513
|
+
adserverTargeting[prefix + '_' + seat + '_adId'] = String(allBidsForThisBidid[seat].adId);
|
|
514
|
+
adserverTargeting[prefix + '_' + seat + '_pb_r'] = getRoundedBid(allBidsForThisBidid[seat].price, allBidsForThisBidid[seat].ext.prebid.type);
|
|
515
|
+
adserverTargeting[prefix + '_' + seat + '_size'] = String(allBidsForThisBidid[seat].width) + 'x' + String(allBidsForThisBidid[seat].height);
|
|
516
|
+
if (allBidsForThisBidid[seat].hasOwnProperty('dealid')) {
|
|
517
|
+
adserverTargeting[prefix + '_' + seat + '_dealid'] = String(allBidsForThisBidid[seat].dealid);
|
|
583
518
|
}
|
|
584
519
|
if (addOzOmpFloorDollars) {
|
|
585
|
-
adserverTargeting[
|
|
520
|
+
adserverTargeting[prefix + '_' + seat + '_omp'] = allBidsForThisBidid[seat].price >= ozOmpFloorDollars ? '1' : '0';
|
|
586
521
|
}
|
|
587
522
|
if (isVideo) {
|
|
588
|
-
adserverTargeting[
|
|
523
|
+
adserverTargeting[prefix + '_' + seat + '_vid'] = videoContext;
|
|
589
524
|
}
|
|
590
|
-
let flr = deepAccess(allBidsForThisBidid[
|
|
525
|
+
let flr = deepAccess(allBidsForThisBidid[seat], `ext.bidder.${bidderKey}.floor`, null);
|
|
591
526
|
if (flr != null) {
|
|
592
|
-
adserverTargeting[
|
|
527
|
+
adserverTargeting[prefix + '_' + seat + '_flr'] = flr;
|
|
593
528
|
}
|
|
594
|
-
let rid = deepAccess(allBidsForThisBidid[
|
|
529
|
+
let rid = deepAccess(allBidsForThisBidid[seat], `ext.bidder.${bidderKey}.ruleId`, null);
|
|
595
530
|
if (rid != null) {
|
|
596
|
-
adserverTargeting[
|
|
531
|
+
adserverTargeting[prefix + '_' + seat + '_rid'] = rid;
|
|
597
532
|
}
|
|
598
|
-
if (
|
|
599
|
-
adserverTargeting[
|
|
533
|
+
if (seat.match(/^ozappnexus/)) {
|
|
534
|
+
adserverTargeting[prefix + '_' + seat + '_sid'] = String(allBidsForThisBidid[seat].cid);
|
|
600
535
|
}
|
|
601
|
-
labels = deepAccess(allBidsForThisBidid[
|
|
536
|
+
labels = deepAccess(allBidsForThisBidid[seat], 'ext.prebid.labels', null);
|
|
602
537
|
if (labels) {
|
|
603
|
-
adserverTargeting[
|
|
538
|
+
adserverTargeting[prefix + '_' + seat + '_labels'] = labels.join(',');
|
|
604
539
|
}
|
|
605
540
|
});
|
|
606
541
|
} else {
|
|
607
|
-
let perBidInfo = `${
|
|
542
|
+
let perBidInfo = `${bidderKey}.enhancedAdserverTargeting is set to false. No per-bid keys will be sent to adserver.`;
|
|
608
543
|
if (useOzWhitelistAdserverKeys) {
|
|
609
544
|
logWarn(`Your adserver keys whitelist will be ignored - ${perBidInfo}`);
|
|
610
545
|
} else {
|
|
@@ -613,24 +548,24 @@ export const spec = {
|
|
|
613
548
|
}
|
|
614
549
|
let {seat: winningSeat, bid: winningBid} = ozoneGetWinnerForRequestBid(thisBid.bidId, serverResponse.seatbid);
|
|
615
550
|
winningBid = ozoneAddStandardProperties(winningBid, defaultWidth, defaultHeight);
|
|
616
|
-
adserverTargeting[
|
|
617
|
-
adserverTargeting[
|
|
618
|
-
adserverTargeting[
|
|
619
|
-
adserverTargeting[
|
|
620
|
-
adserverTargeting[
|
|
551
|
+
adserverTargeting[prefix + '_auc_id'] = String(aucId);
|
|
552
|
+
adserverTargeting[prefix + '_winner'] = String(winningSeat);
|
|
553
|
+
adserverTargeting[prefix + '_bid'] = 'true';
|
|
554
|
+
adserverTargeting[prefix + '_cache_id'] = deepAccess(thisBid, 'ext.prebid.targeting.hb_cache_id', 'no-id');
|
|
555
|
+
adserverTargeting[prefix + '_uuid'] = deepAccess(thisBid, 'ext.prebid.targeting.hb_uuid', 'no-id');
|
|
621
556
|
if (enhancedAdserverTargeting) {
|
|
622
557
|
labels = deepAccess(winningBid, 'ext.prebid.labels', null);
|
|
623
558
|
if (labels) {
|
|
624
|
-
adserverTargeting[
|
|
559
|
+
adserverTargeting[prefix + '_labels'] = labels.join(',');
|
|
625
560
|
}
|
|
626
|
-
adserverTargeting[
|
|
627
|
-
adserverTargeting[
|
|
628
|
-
adserverTargeting[
|
|
629
|
-
adserverTargeting[
|
|
630
|
-
adserverTargeting[
|
|
631
|
-
adserverTargeting[
|
|
561
|
+
adserverTargeting[prefix + '_imp_id'] = String(winningBid.impid);
|
|
562
|
+
adserverTargeting[prefix + '_pb_v'] = OZONEVERSION;
|
|
563
|
+
adserverTargeting[prefix + '_pb'] = winningBid.price;
|
|
564
|
+
adserverTargeting[prefix + '_pb_r'] = getRoundedBid(winningBid.price, bidType);
|
|
565
|
+
adserverTargeting[prefix + '_adId'] = String(winningBid.adId);
|
|
566
|
+
adserverTargeting[prefix + '_size'] = `${winningBid.width}x${winningBid.height}`;
|
|
632
567
|
}
|
|
633
|
-
if (useOzWhitelistAdserverKeys) {
|
|
568
|
+
if (useOzWhitelistAdserverKeys) {
|
|
634
569
|
logInfo('Filtering out adserver targeting keys not in the whitelist: ', ozWhitelistAdserverKeys);
|
|
635
570
|
Object.keys(adserverTargeting).forEach(function(key) { if (ozWhitelistAdserverKeys.indexOf(key) === -1) { delete adserverTargeting[key]; } });
|
|
636
571
|
}
|
|
@@ -639,11 +574,11 @@ export const spec = {
|
|
|
639
574
|
}
|
|
640
575
|
}
|
|
641
576
|
let ret = arrAllBids;
|
|
642
|
-
let fledgeAuctionConfigs = deepAccess(serverResponse, 'ext.igi') || [];
|
|
577
|
+
let fledgeAuctionConfigs = deepAccess(serverResponse, 'ext.igi') || [];
|
|
643
578
|
if (isArray(fledgeAuctionConfigs) && fledgeAuctionConfigs.length > 0) {
|
|
644
|
-
fledgeAuctionConfigs = fledgeAuctionConfigs.filter(
|
|
645
|
-
if (
|
|
646
|
-
logWarn('Removing malformed fledge auction config:',
|
|
579
|
+
fledgeAuctionConfigs = fledgeAuctionConfigs.filter(cfg => {
|
|
580
|
+
if (typeof cfg !== 'object' || cfg === null) {
|
|
581
|
+
logWarn('Removing malformed fledge auction config:', cfg);
|
|
647
582
|
return false;
|
|
648
583
|
}
|
|
649
584
|
return true;
|
|
@@ -655,12 +590,9 @@ export const spec = {
|
|
|
655
590
|
}
|
|
656
591
|
let endTime = new Date().getTime();
|
|
657
592
|
logInfo(`interpretResponse going to return at time ${endTime} (took ${endTime - startTime}ms) Time from buildRequests Start -> interpretRequests End = ${endTime - this.propertyBag.buildRequestsStart}ms`);
|
|
658
|
-
logInfo('will return: ', deepClone(ret));
|
|
593
|
+
logInfo('will return: ', deepClone(ret));
|
|
659
594
|
return ret;
|
|
660
595
|
},
|
|
661
|
-
isValidAuctionConfig(config) {
|
|
662
|
-
return typeof config === 'object' && config !== null;
|
|
663
|
-
},
|
|
664
596
|
setBidMediaTypeIfNotExist(thisBid, mediaType) {
|
|
665
597
|
if (!thisBid.hasOwnProperty('mediaType')) {
|
|
666
598
|
logInfo(`setting thisBid.mediaType = ${mediaType}`);
|
|
@@ -669,12 +601,6 @@ export const spec = {
|
|
|
669
601
|
logInfo(`found value for thisBid.mediaType: ${thisBid.mediaType}`);
|
|
670
602
|
}
|
|
671
603
|
},
|
|
672
|
-
getWhitelabelConfigItem(ozoneVersion) {
|
|
673
|
-
if (this.propertyBag.whitelabel.bidder === 'ozone') { return config.getConfig(ozoneVersion); }
|
|
674
|
-
let whitelabelledSearch = ozoneVersion.replace('ozone', this.propertyBag.whitelabel.bidder);
|
|
675
|
-
whitelabelledSearch = whitelabelledSearch.replace('oz_', this.propertyBag.whitelabel.keyPrefix + '_');
|
|
676
|
-
return config.getConfig(whitelabelledSearch);
|
|
677
|
-
},
|
|
678
604
|
removeSingleBidderMultipleBids(seatbid) {
|
|
679
605
|
var ret = [];
|
|
680
606
|
for (let i = 0; i < seatbid.length; i++) {
|
|
@@ -683,8 +609,8 @@ export const spec = {
|
|
|
683
609
|
var bidIds = [];
|
|
684
610
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
685
611
|
var candidate = sb.bid[j];
|
|
686
|
-
if (
|
|
687
|
-
continue;
|
|
612
|
+
if (bidIds.includes(candidate.impid)) {
|
|
613
|
+
continue;
|
|
688
614
|
}
|
|
689
615
|
bidIds.push(candidate.impid);
|
|
690
616
|
for (let k = j + 1; k < sb.bid.length; k++) {
|
|
@@ -705,7 +631,7 @@ export const spec = {
|
|
|
705
631
|
}
|
|
706
632
|
let { gppString = '', applicableSections = [] } = gppConsent;
|
|
707
633
|
if (optionsType.iframeEnabled) {
|
|
708
|
-
|
|
634
|
+
let arrQueryString = [];
|
|
709
635
|
if (config.getConfig('debug')) {
|
|
710
636
|
arrQueryString.push('pbjs_debug=true');
|
|
711
637
|
}
|
|
@@ -713,30 +639,27 @@ export const spec = {
|
|
|
713
639
|
arrQueryString.push('gdpr_consent=' + deepAccess(gdprConsent, 'consentString', ''));
|
|
714
640
|
arrQueryString.push('usp_consent=' + (usPrivacy || ''));
|
|
715
641
|
arrQueryString.push('gpp=' + gppString);
|
|
716
|
-
if (isArray(applicableSections)) {
|
|
642
|
+
if (Array.isArray(applicableSections)) {
|
|
717
643
|
arrQueryString.push(`gpp_sid=${applicableSections.join()}`);
|
|
718
644
|
}
|
|
719
|
-
for (
|
|
645
|
+
for (const keyname in this.cookieSyncBag.userIdObject) {
|
|
720
646
|
arrQueryString.push(keyname + '=' + this.cookieSyncBag.userIdObject[keyname]);
|
|
721
647
|
}
|
|
722
648
|
arrQueryString.push('publisherId=' + this.cookieSyncBag.publisherId);
|
|
723
649
|
arrQueryString.push('siteId=' + this.cookieSyncBag.siteId);
|
|
724
650
|
arrQueryString.push('cb=' + Date.now());
|
|
725
|
-
arrQueryString.push('bidder=' +
|
|
726
|
-
|
|
651
|
+
arrQueryString.push('bidder=' + BIDDER_CODE);
|
|
652
|
+
let strQueryString = arrQueryString.join('&');
|
|
727
653
|
if (strQueryString.length > 0) {
|
|
728
654
|
strQueryString = '?' + strQueryString;
|
|
729
655
|
}
|
|
730
656
|
logInfo('getUserSyncs going to return cookie sync url : ' + this.getCookieSyncUrl() + strQueryString);
|
|
731
|
-
return [{
|
|
732
|
-
type: 'iframe',
|
|
733
|
-
url: this.getCookieSyncUrl() + strQueryString
|
|
734
|
-
}];
|
|
657
|
+
return [{ type: 'iframe', url: this.getCookieSyncUrl() + strQueryString }];
|
|
735
658
|
}
|
|
736
659
|
},
|
|
737
660
|
getBidRequestForBidId(bidId, arrBids) {
|
|
738
661
|
for (let i = 0; i < arrBids.length; i++) {
|
|
739
|
-
if (arrBids[i].bidId === bidId) {
|
|
662
|
+
if (arrBids[i].bidId === bidId) {
|
|
740
663
|
return arrBids[i];
|
|
741
664
|
}
|
|
742
665
|
}
|
|
@@ -753,20 +676,20 @@ export const spec = {
|
|
|
753
676
|
let ret = {};
|
|
754
677
|
if (!bidRequest.hasOwnProperty('userIdAsEids')) {
|
|
755
678
|
logInfo('findAllUserIdsFromEids - no bidRequest.userIdAsEids object was found on the bid!');
|
|
756
|
-
this.tryGetPubCidFromOldLocation(ret, bidRequest);
|
|
679
|
+
this.tryGetPubCidFromOldLocation(ret, bidRequest);
|
|
757
680
|
return ret;
|
|
758
681
|
}
|
|
759
682
|
for (let obj of bidRequest.userIdAsEids) {
|
|
760
683
|
ret[obj.source] = deepAccess(obj, 'uids.0.id');
|
|
761
684
|
}
|
|
762
|
-
this.tryGetPubCidFromOldLocation(ret, bidRequest);
|
|
685
|
+
this.tryGetPubCidFromOldLocation(ret, bidRequest);
|
|
763
686
|
return ret;
|
|
764
687
|
},
|
|
765
688
|
tryGetPubCidFromOldLocation(ret, bidRequest) {
|
|
766
689
|
if (!ret.hasOwnProperty('pubcid')) {
|
|
767
690
|
let pubcid = deepAccess(bidRequest, 'crumbs.pubcid');
|
|
768
691
|
if (pubcid) {
|
|
769
|
-
ret['pubcid.org'] = pubcid;
|
|
692
|
+
ret['pubcid.org'] = pubcid;
|
|
770
693
|
}
|
|
771
694
|
}
|
|
772
695
|
},
|
|
@@ -774,14 +697,13 @@ export const spec = {
|
|
|
774
697
|
return (bidRequest.params.placementId).toString();
|
|
775
698
|
},
|
|
776
699
|
getPlacementIdOverrideFromGetParam() {
|
|
777
|
-
let whitelabelPrefix = this.propertyBag.whitelabel.keyPrefix;
|
|
778
700
|
let arr = this.getGetParametersAsObject();
|
|
779
|
-
if (arr.hasOwnProperty(
|
|
780
|
-
if (this.isValidPlacementId(arr[
|
|
781
|
-
logInfo(`using GET ${
|
|
782
|
-
return arr[
|
|
701
|
+
if (arr.hasOwnProperty(KEY_PREFIX + 'storedrequest')) {
|
|
702
|
+
if (this.isValidPlacementId(arr[KEY_PREFIX + 'storedrequest'])) {
|
|
703
|
+
logInfo(`using GET ${KEY_PREFIX}storedrequest=` + arr[KEY_PREFIX + 'storedrequest'] + ' to replace placementId');
|
|
704
|
+
return arr[KEY_PREFIX + 'storedrequest'];
|
|
783
705
|
} else {
|
|
784
|
-
logError(`GET ${
|
|
706
|
+
logError(`GET ${KEY_PREFIX}storedrequest FAILED VALIDATION - will not use it`);
|
|
785
707
|
}
|
|
786
708
|
}
|
|
787
709
|
return null;
|
|
@@ -792,9 +714,9 @@ export const spec = {
|
|
|
792
714
|
return parsed.search;
|
|
793
715
|
},
|
|
794
716
|
blockTheRequest() {
|
|
795
|
-
|
|
717
|
+
const ozRequest = config.getConfig('ozone.oz_request');
|
|
796
718
|
if (ozRequest === false) {
|
|
797
|
-
logWarn(
|
|
719
|
+
logWarn('Will not allow the auction : oz_request is set to false');
|
|
798
720
|
return true;
|
|
799
721
|
}
|
|
800
722
|
return false;
|
|
@@ -840,23 +762,23 @@ export const spec = {
|
|
|
840
762
|
return ret;
|
|
841
763
|
},
|
|
842
764
|
addVideoDefaults(objRet, videoConfig, childConfig) {
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
objRet.skip = 0;
|
|
765
|
+
const apply = (cfg, addIfMissing) => {
|
|
766
|
+
if (!cfg) return;
|
|
767
|
+
const placement = this.getVideoPlacementValue(deepAccess(cfg, 'context'));
|
|
768
|
+
if (placement) {
|
|
769
|
+
objRet.placement = placement;
|
|
770
|
+
}
|
|
771
|
+
const skippable = deepAccess(cfg, 'skippable', null);
|
|
772
|
+
if (skippable == null) {
|
|
773
|
+
if (addIfMissing && !objRet.hasOwnProperty('skip')) {
|
|
774
|
+
objRet.skip = 0;
|
|
775
|
+
}
|
|
776
|
+
} else {
|
|
777
|
+
objRet.skip = skippable ? 1 : 0;
|
|
856
778
|
}
|
|
857
|
-
}
|
|
858
|
-
|
|
859
|
-
|
|
779
|
+
};
|
|
780
|
+
apply(videoConfig, false);
|
|
781
|
+
apply(childConfig, true);
|
|
860
782
|
return objRet;
|
|
861
783
|
},
|
|
862
784
|
getLoggableBidObject(bid) {
|
|
@@ -897,22 +819,11 @@ export function injectAdIdsIntoAllBidResponses(seatbid) {
|
|
|
897
819
|
for (let i = 0; i < seatbid.length; i++) {
|
|
898
820
|
let sb = seatbid[i];
|
|
899
821
|
for (let j = 0; j < sb.bid.length; j++) {
|
|
900
|
-
sb.bid[j]['adId'] = `${sb.bid[j]['impid']}-${i}-${
|
|
822
|
+
sb.bid[j]['adId'] = `${sb.bid[j]['impid']}-${i}-${KEY_PREFIX}-${j}`;
|
|
901
823
|
}
|
|
902
824
|
}
|
|
903
825
|
return seatbid;
|
|
904
826
|
}
|
|
905
|
-
export function checkDeepArray(Arr) {
|
|
906
|
-
if (isArray(Arr)) {
|
|
907
|
-
if (isArray(Arr[0])) {
|
|
908
|
-
return Arr[0];
|
|
909
|
-
} else {
|
|
910
|
-
return Arr;
|
|
911
|
-
}
|
|
912
|
-
} else {
|
|
913
|
-
return Arr;
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
827
|
export function defaultSize(thebidObj) {
|
|
917
828
|
if (!thebidObj) {
|
|
918
829
|
logInfo('defaultSize received empty bid obj! going to return fixed default size');
|
|
@@ -921,11 +832,12 @@ export function defaultSize(thebidObj) {
|
|
|
921
832
|
'defaultWidth': 300
|
|
922
833
|
};
|
|
923
834
|
}
|
|
924
|
-
const
|
|
925
|
-
const
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
835
|
+
const sizes = thebidObj.sizes || [];
|
|
836
|
+
const first = Array.isArray(sizes[0]) ? sizes[0] : sizes;
|
|
837
|
+
return {
|
|
838
|
+
defaultWidth: first[0],
|
|
839
|
+
defaultHeight: first[1]
|
|
840
|
+
};
|
|
929
841
|
}
|
|
930
842
|
export function ozoneGetWinnerForRequestBid(requestBidId, serverResponseSeatBid) {
|
|
931
843
|
let thisBidWinner = null;
|
|
@@ -952,7 +864,7 @@ export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid, defau
|
|
|
952
864
|
let thisSeat = serverResponseSeatBid[j].seat;
|
|
953
865
|
for (let k = 0; k < theseBids.length; k++) {
|
|
954
866
|
if (theseBids[k].impid === matchBidId) {
|
|
955
|
-
if (objBids.hasOwnProperty(thisSeat)) {
|
|
867
|
+
if (objBids.hasOwnProperty(thisSeat)) {
|
|
956
868
|
if (objBids[thisSeat]['price'] < theseBids[k].price) {
|
|
957
869
|
objBids[thisSeat] = ozoneAddStandardProperties(theseBids[k], defaultWidth, defaultHeight);
|
|
958
870
|
}
|
|
@@ -966,52 +878,27 @@ export function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid, defau
|
|
|
966
878
|
return objBids;
|
|
967
879
|
}
|
|
968
880
|
export function getRoundedBid(price, mediaType) {
|
|
969
|
-
const mediaTypeGranularity = config.getConfig(`mediaTypePriceGranularity.${mediaType}`);
|
|
970
|
-
let
|
|
971
|
-
let
|
|
972
|
-
let theConfigObject = getGranularityObject(mediaType, mediaTypeGranularity, strBuckets, objBuckets);
|
|
973
|
-
let theConfigKey = getGranularityKeyName(mediaType, mediaTypeGranularity, strBuckets);
|
|
974
|
-
logInfo('getRoundedBid. price:', price, 'mediaType:', mediaType, 'configkey:', theConfigKey, 'configObject:', theConfigObject, 'mediaTypeGranularity:', mediaTypeGranularity, 'strBuckets:', strBuckets);
|
|
975
|
-
let priceStringsObj = getPriceBucketString(
|
|
976
|
-
price,
|
|
977
|
-
theConfigObject,
|
|
978
|
-
config.getConfig('currency.granularityMultiplier')
|
|
979
|
-
);
|
|
980
|
-
logInfo('priceStringsObj', priceStringsObj);
|
|
981
|
-
let granularityNamePriceStringsKeyMapping = {
|
|
982
|
-
'medium': 'med',
|
|
983
|
-
'custom': 'custom',
|
|
984
|
-
'high': 'high',
|
|
985
|
-
'low': 'low',
|
|
986
|
-
'dense': 'dense'
|
|
987
|
-
};
|
|
988
|
-
if (granularityNamePriceStringsKeyMapping.hasOwnProperty(theConfigKey)) {
|
|
989
|
-
let priceStringsKey = granularityNamePriceStringsKeyMapping[theConfigKey];
|
|
990
|
-
logInfo('getRoundedBid: looking for priceStringsKey:', priceStringsKey);
|
|
991
|
-
return priceStringsObj[priceStringsKey];
|
|
992
|
-
}
|
|
993
|
-
return priceStringsObj['auto'];
|
|
994
|
-
}
|
|
995
|
-
export function getGranularityKeyName(mediaType, mediaTypeGranularity, strBuckets) {
|
|
881
|
+
const mediaTypeGranularity = config.getConfig(`mediaTypePriceGranularity.${mediaType}`);
|
|
882
|
+
let key = 'auto';
|
|
883
|
+
let buckets = config.getConfig('customPriceBucket');
|
|
996
884
|
if (typeof mediaTypeGranularity === 'string') {
|
|
997
|
-
|
|
998
|
-
}
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
return mediaTypeGranularity;
|
|
1010
|
-
}
|
|
1011
|
-
if (strBuckets === 'custom') {
|
|
1012
|
-
return objBuckets;
|
|
885
|
+
key = mediaTypeGranularity;
|
|
886
|
+
} else if (typeof mediaTypeGranularity === 'object') {
|
|
887
|
+
key = 'custom';
|
|
888
|
+
buckets = mediaTypeGranularity;
|
|
889
|
+
} else {
|
|
890
|
+
const strBuckets = config.getConfig('priceGranularity');
|
|
891
|
+
if (typeof strBuckets === 'string') {
|
|
892
|
+
key = strBuckets;
|
|
893
|
+
}
|
|
894
|
+
if (strBuckets === 'custom') {
|
|
895
|
+
key = 'custom';
|
|
896
|
+
}
|
|
1013
897
|
}
|
|
1014
|
-
|
|
898
|
+
const mapping = {medium: 'med', custom: 'custom', high: 'high', low: 'low', dense: 'dense'};
|
|
899
|
+
const priceStrings = getPriceBucketString(price, buckets, config.getConfig('currency.granularityMultiplier'));
|
|
900
|
+
logInfo('getRoundedBid price:', price, 'mediaType:', mediaType, 'bucketKey:', key);
|
|
901
|
+
return priceStrings[mapping[key] || 'auto'];
|
|
1015
902
|
}
|
|
1016
903
|
export function ozoneAddStandardProperties(seatBid, defaultWidth, defaultHeight) {
|
|
1017
904
|
seatBid.cpm = seatBid.price;
|
|
@@ -1045,16 +932,6 @@ export function getWidthAndHeightFromVideoObject(objVideo) {
|
|
|
1045
932
|
}
|
|
1046
933
|
return ({'w': playerSize[0], 'h': playerSize[1]});
|
|
1047
934
|
}
|
|
1048
|
-
export function playerSizeIsNestedArray(objVideo) {
|
|
1049
|
-
let playerSize = getPlayerSizeFromObject(objVideo);
|
|
1050
|
-
if (!playerSize) {
|
|
1051
|
-
return null;
|
|
1052
|
-
}
|
|
1053
|
-
if (playerSize.length < 1) {
|
|
1054
|
-
return null;
|
|
1055
|
-
}
|
|
1056
|
-
return (playerSize[0] && typeof playerSize[0] === 'object');
|
|
1057
|
-
}
|
|
1058
935
|
function getPlayerSizeFromObject(objVideo) {
|
|
1059
936
|
logInfo('getPlayerSizeFromObject received object', objVideo);
|
|
1060
937
|
let playerSize = deepAccess(objVideo, 'playerSize');
|
|
@@ -1071,25 +948,26 @@ function getPlayerSizeFromObject(objVideo) {
|
|
|
1071
948
|
}
|
|
1072
949
|
return playerSize;
|
|
1073
950
|
}
|
|
951
|
+
let rendererInstance;
|
|
1074
952
|
function newRenderer(adUnitCode, rendererOptions = {}) {
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
953
|
+
if (!rendererInstance) {
|
|
954
|
+
rendererInstance = Renderer.install({
|
|
955
|
+
url: spec.getRendererUrl(),
|
|
956
|
+
config: rendererOptions,
|
|
957
|
+
loaded: false,
|
|
958
|
+
adUnitCode
|
|
959
|
+
});
|
|
960
|
+
try {
|
|
961
|
+
rendererInstance.setRender(outstreamRender);
|
|
962
|
+
} catch (err) {
|
|
963
|
+
logError('Prebid Error calling renderer.setRender', rendererInstance, err);
|
|
964
|
+
}
|
|
965
|
+
logInfo('created renderer object');
|
|
1087
966
|
}
|
|
1088
|
-
|
|
1089
|
-
return renderer;
|
|
967
|
+
return rendererInstance;
|
|
1090
968
|
}
|
|
1091
969
|
function outstreamRender(bid) {
|
|
1092
|
-
logInfo('outstreamRender got', deepClone(
|
|
970
|
+
logInfo('outstreamRender got', deepClone(bid));
|
|
1093
971
|
bid.renderer.push(() => {
|
|
1094
972
|
logInfo('outstreamRender: Going to execute window.ozoneVideo.outstreamRender');
|
|
1095
973
|
window.ozoneVideo.outstreamRender(bid);
|