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
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This module adds Sirdata provider to the real time data module
|
|
3
|
+
* and now supports Seller Defined Audience
|
|
3
4
|
* The {@link module:modules/realTimeData} module is required
|
|
4
5
|
* The module will fetch segments (user-centric) and categories (page-centric) from Sirdata server
|
|
5
6
|
* The module will automatically handle user's privacy and choice in California (IAB TL CCPA Framework) and in Europe (IAB EU TCF FOR GDPR)
|
|
6
7
|
* @module modules/sirdataRtdProvider
|
|
7
8
|
* @requires module:modules/realTimeData
|
|
8
9
|
*/
|
|
9
|
-
import {deepAccess,
|
|
10
|
+
import {deepAccess, deepSetValue, isEmpty, logError, mergeDeep} from '../src/utils.js';
|
|
10
11
|
import {submodule} from '../src/hook.js';
|
|
11
12
|
import {ajax} from '../src/ajax.js';
|
|
12
13
|
import {findIndex} from '../src/polyfill.js';
|
|
@@ -16,6 +17,52 @@ import {config} from '../src/config.js';
|
|
|
16
17
|
/** @type {string} */
|
|
17
18
|
const MODULE_NAME = 'realTimeData';
|
|
18
19
|
const SUBMODULE_NAME = 'SirdataRTDModule';
|
|
20
|
+
const ORTB2_NAME = 'sirdata.com';
|
|
21
|
+
|
|
22
|
+
const partnerIds = {
|
|
23
|
+
'criteo': 27443,
|
|
24
|
+
'openx': 30342,
|
|
25
|
+
'pubmatic': 30345,
|
|
26
|
+
'smaato': 27520,
|
|
27
|
+
'triplelift': 27518,
|
|
28
|
+
'yahoossp': 30339,
|
|
29
|
+
'rubicon': 27452,
|
|
30
|
+
'appnexus': 27446,
|
|
31
|
+
'appnexusAst': 27446,
|
|
32
|
+
'brealtime': 27446,
|
|
33
|
+
'emxdigital': 27446,
|
|
34
|
+
'pagescience': 27446,
|
|
35
|
+
'gourmetads': 33394,
|
|
36
|
+
'matomy': 27446,
|
|
37
|
+
'featureforward': 27446,
|
|
38
|
+
'oftmedia': 27446,
|
|
39
|
+
'districtm': 27446,
|
|
40
|
+
'adasta': 27446,
|
|
41
|
+
'beintoo': 27446,
|
|
42
|
+
'gravity': 27446,
|
|
43
|
+
'msq_classic': 27878,
|
|
44
|
+
'msq_max': 27878,
|
|
45
|
+
'366_apx': 27878,
|
|
46
|
+
'mediasquare': 27878,
|
|
47
|
+
'smartadserver': 27440,
|
|
48
|
+
'smart': 27440,
|
|
49
|
+
'proxistore': 27484,
|
|
50
|
+
'ix': 27248,
|
|
51
|
+
'sdRtdForGpt': 27449,
|
|
52
|
+
'smilewanted': 28690,
|
|
53
|
+
'taboola': 33379,
|
|
54
|
+
'ttd': 33382,
|
|
55
|
+
'zeta_global': 33385,
|
|
56
|
+
'teads': 33388,
|
|
57
|
+
'conversant': 33391,
|
|
58
|
+
'improvedigital': 33397,
|
|
59
|
+
'invibes': 33400,
|
|
60
|
+
'sublime': 33403,
|
|
61
|
+
'rtbhouse': 33406,
|
|
62
|
+
'zeta_global_ssp': 33385,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
let CONTEXT_ONLY = true;
|
|
19
66
|
|
|
20
67
|
export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig, userConsent) {
|
|
21
68
|
moduleConfig.params = moduleConfig.params || {};
|
|
@@ -46,9 +93,10 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig,
|
|
|
46
93
|
if (!sirdataDomain || !gdprApplies || (deepAccess(userConsent, 'gdpr.vendorData.vendor.consents') && userConsent.gdpr.vendorData.vendor.consents[53] && userConsent.gdpr.vendorData.purpose.consents[1] && userConsent.gdpr.vendorData.purpose.consents[4])) {
|
|
47
94
|
sirdataDomain = 'sddan.com';
|
|
48
95
|
sendWithCredentials = true;
|
|
96
|
+
CONTEXT_ONLY = false;
|
|
49
97
|
}
|
|
50
|
-
|
|
51
|
-
var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().page;
|
|
98
|
+
|
|
99
|
+
var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().stack.pop() || getRefererInfo().page;
|
|
52
100
|
|
|
53
101
|
const url = 'https://kvt.' + sirdataDomain + '/api/v1/public/p/' + moduleConfig.params.partnerId + '/d/' + moduleConfig.params.key + '/s?callback=&gdpr=' + gdprApplies + '&gdpr_consent=' + tcString + (actualUrl ? '&url=' + encodeURIComponent(actualUrl) : '');
|
|
54
102
|
|
|
@@ -86,39 +134,74 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig,
|
|
|
86
134
|
});
|
|
87
135
|
}
|
|
88
136
|
|
|
89
|
-
export function
|
|
137
|
+
export function setGlobalOrtb2Sda(ortb2Fragments, data, segtaxid, cattaxid) {
|
|
90
138
|
try {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (!deepAccess(testGlobal, 'user.ext.data.sd_rtd') || !deepEqual(testGlobal.user.ext.data.sd_rtd, segments)) {
|
|
94
|
-
deepSetValue(addOrtb2, 'user.ext.data.sd_rtd', segments || {});
|
|
139
|
+
if (!isEmpty(data.segments)) {
|
|
140
|
+
applyGlobalOrtb2Sda(ortb2Fragments, 'user', data.segments, segtaxid);
|
|
95
141
|
}
|
|
96
|
-
if (!
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
if (!isEmpty(addOrtb2)) {
|
|
100
|
-
mergeDeep(ortb2, addOrtb2);
|
|
142
|
+
if (!isEmpty(data.categories)) {
|
|
143
|
+
applyGlobalOrtb2Sda(ortb2Fragments, 'site', data.categories, cattaxid);
|
|
101
144
|
}
|
|
102
145
|
} catch (e) {
|
|
103
146
|
logError(e)
|
|
104
147
|
}
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
105
150
|
|
|
151
|
+
export function applyGlobalOrtb2Sda(ortb2Fragments, type, segments, segtaxValue) {
|
|
152
|
+
try {
|
|
153
|
+
let ortb2Data = [{
|
|
154
|
+
name: ORTB2_NAME,
|
|
155
|
+
segment: segments.map((segmentId) => ({ id: segmentId })),
|
|
156
|
+
}];
|
|
157
|
+
if (segtaxValue) {
|
|
158
|
+
ortb2Data[0].ext = { segtax: segtaxValue };
|
|
159
|
+
}
|
|
160
|
+
let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
|
|
161
|
+
mergeDeep(ortb2Fragments, ortb2Conf);
|
|
162
|
+
} catch (e) {
|
|
163
|
+
logError(e)
|
|
164
|
+
}
|
|
106
165
|
return true;
|
|
107
166
|
}
|
|
108
167
|
|
|
109
|
-
export function
|
|
168
|
+
export function setBidderOrtb2Sda(ortb2Fragments, bidder, data, segtaxid, cattaxid) {
|
|
110
169
|
try {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (!deepAccess(testBidder, 'user.ext.data.sd_rtd') || !deepEqual(testBidder.user.ext.data.sd_rtd, segments)) {
|
|
114
|
-
deepSetValue(addOrtb2, 'user.ext.data.sd_rtd', segments || {});
|
|
170
|
+
if (!isEmpty(data.segments)) {
|
|
171
|
+
applyBidderOrtb2Sda(ortb2Fragments, bidder, 'user', data.segments, segtaxid);
|
|
115
172
|
}
|
|
116
|
-
if (!
|
|
117
|
-
|
|
173
|
+
if (!isEmpty(data.categories)) {
|
|
174
|
+
applyBidderOrtb2Sda(ortb2Fragments, bidder, 'site', data.categories, cattaxid);
|
|
118
175
|
}
|
|
119
|
-
|
|
120
|
-
|
|
176
|
+
} catch (e) {
|
|
177
|
+
logError(e)
|
|
178
|
+
}
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function applyBidderOrtb2Sda(ortb2Fragments, bidder, type, segments, segtaxValue) {
|
|
183
|
+
try {
|
|
184
|
+
let ortb2Data = [{
|
|
185
|
+
name: ORTB2_NAME,
|
|
186
|
+
segment: segments.map((segmentId) => ({ id: segmentId })),
|
|
187
|
+
}];
|
|
188
|
+
if (segtaxValue) {
|
|
189
|
+
ortb2Data[0].ext = { segtax: segtaxValue };
|
|
121
190
|
}
|
|
191
|
+
let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
|
|
192
|
+
mergeDeep(ortb2Fragments, {[bidder]: ortb2Conf});
|
|
193
|
+
} catch (e) {
|
|
194
|
+
logError(e)
|
|
195
|
+
}
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function setBidderOrtb2(bidderOrtb2Fragments, bidder, path, segments) {
|
|
200
|
+
try {
|
|
201
|
+
if (isEmpty(segments)) { return; }
|
|
202
|
+
let ortb2Conf = {};
|
|
203
|
+
deepSetValue(ortb2Conf, path, segments || {});
|
|
204
|
+
mergeDeep(bidderOrtb2Fragments, {[bidder]: ortb2Conf});
|
|
122
205
|
} catch (e) {
|
|
123
206
|
logError(e)
|
|
124
207
|
}
|
|
@@ -137,16 +220,16 @@ export function loadCustomFunction(todo, adUnit, list, data, bid) {
|
|
|
137
220
|
return true;
|
|
138
221
|
}
|
|
139
222
|
|
|
140
|
-
export function getSegAndCatsArray(data, minScore) {
|
|
141
|
-
|
|
223
|
+
export function getSegAndCatsArray(data, minScore, pid) {
|
|
224
|
+
let sirdataData = {'segments': [], 'categories': []};
|
|
142
225
|
minScore = minScore && typeof minScore == 'number' ? minScore : 30;
|
|
143
226
|
try {
|
|
144
227
|
if (data && data.contextual_categories) {
|
|
145
228
|
for (let catId in data.contextual_categories) {
|
|
146
|
-
if (data.contextual_categories.hasOwnProperty(catId)) {
|
|
229
|
+
if (data.contextual_categories.hasOwnProperty(catId) && data.contextual_categories[catId]) {
|
|
147
230
|
let value = data.contextual_categories[catId];
|
|
148
231
|
if (value >= minScore && sirdataData.categories.indexOf(catId) === -1) {
|
|
149
|
-
sirdataData.categories.push(catId.toString());
|
|
232
|
+
sirdataData.categories.push((pid ? pid.toString() + 'cc' : '') + catId.toString());
|
|
150
233
|
}
|
|
151
234
|
}
|
|
152
235
|
}
|
|
@@ -157,8 +240,11 @@ export function getSegAndCatsArray(data, minScore) {
|
|
|
157
240
|
try {
|
|
158
241
|
if (data && data.segments) {
|
|
159
242
|
for (let segId in data.segments) {
|
|
160
|
-
if (data.segments.hasOwnProperty(segId)) {
|
|
161
|
-
sirdataData.segments.push(data.segments[segId].toString());
|
|
243
|
+
if (data.segments.hasOwnProperty(segId) && data.segments[segId]) {
|
|
244
|
+
sirdataData.segments.push((pid ? pid.toString() + 'us' : '') + data.segments[segId].toString());
|
|
245
|
+
if (pid && CONTEXT_ONLY) {
|
|
246
|
+
sirdataData.categories.push(pid.toString() + 'uc' + data.segments[segId].toString());
|
|
247
|
+
}
|
|
162
248
|
}
|
|
163
249
|
}
|
|
164
250
|
}
|
|
@@ -168,34 +254,77 @@ export function getSegAndCatsArray(data, minScore) {
|
|
|
168
254
|
return sirdataData;
|
|
169
255
|
}
|
|
170
256
|
|
|
257
|
+
export function applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
|
|
258
|
+
// only share SDA data if whitelisted
|
|
259
|
+
if (!biddersParamsExist || indexFound) {
|
|
260
|
+
// SDA Publisher
|
|
261
|
+
let sirdataDataForSDA = getSegAndCatsArray(data, minScore, moduleConfig.params.partnerId);
|
|
262
|
+
setBidderOrtb2Sda(reqBids.ortb2Fragments?.bidder, bid.bidder, sirdataDataForSDA, data.segtaxid, data.cattaxid);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// always share SDA for curation
|
|
266
|
+
let curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : (partnerIds[bid.bidder] ? partnerIds[bid.bidder] : null));
|
|
267
|
+
if (curationId) {
|
|
268
|
+
// seller defined audience & bidder specific data
|
|
269
|
+
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
270
|
+
// Get Bidder Specific Data
|
|
271
|
+
let curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, null);
|
|
272
|
+
sirdataList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
273
|
+
|
|
274
|
+
// SDA Partners
|
|
275
|
+
let curationDataForSDA = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, curationId);
|
|
276
|
+
setBidderOrtb2Sda(reqBids.ortb2Fragments?.bidder, bid.bidder, curationDataForSDA, data.shared_taxonomy[curationId].segtaxid, data.shared_taxonomy[curationId].cattaxid);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Apply custom function or return Bidder Specific Data if publisher is ok
|
|
281
|
+
if (sirdataList && sirdataList.length > 0 && (!biddersParamsExist || indexFound)) {
|
|
282
|
+
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
283
|
+
return loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataList, data, bid);
|
|
284
|
+
} else {
|
|
285
|
+
return sirdataList;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export function applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
|
|
291
|
+
let specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
292
|
+
if (specificData && specificData.length > 0) {
|
|
293
|
+
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {sd_rtd: specificData});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
171
297
|
export function addSegmentData(reqBids, data, moduleConfig, onDone) {
|
|
172
298
|
const adUnits = reqBids.adUnits;
|
|
173
299
|
moduleConfig = moduleConfig || {};
|
|
174
300
|
moduleConfig.params = moduleConfig.params || {};
|
|
175
301
|
const globalMinScore = moduleConfig.params.hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.contextualMinRelevancyScore : 30;
|
|
176
|
-
var sirdataData = getSegAndCatsArray(data, globalMinScore);
|
|
302
|
+
var sirdataData = getSegAndCatsArray(data, globalMinScore, null);
|
|
177
303
|
|
|
178
304
|
const sirdataList = sirdataData.segments.concat(sirdataData.categories);
|
|
179
|
-
var sirdataMergedList = [];
|
|
180
305
|
|
|
181
|
-
var curationData = {'segments': [], 'categories': []};
|
|
182
|
-
var curationId = '1';
|
|
183
306
|
const biddersParamsExist = (!!(moduleConfig.params && moduleConfig.params.bidders));
|
|
184
307
|
|
|
185
|
-
// Global ortb2
|
|
186
|
-
if (!
|
|
187
|
-
|
|
308
|
+
// Global ortb2 SDA
|
|
309
|
+
if (data.global_taxonomy && !isEmpty(data.global_taxonomy)) {
|
|
310
|
+
let globalData = {'segments': [], 'categories': []};
|
|
311
|
+
for (let i in data.global_taxonomy) {
|
|
312
|
+
if (!isEmpty(data.global_taxonomy[i])) {
|
|
313
|
+
globalData = getSegAndCatsArray(data.global_taxonomy[i], globalMinScore, null);
|
|
314
|
+
setGlobalOrtb2Sda(reqBids.ortb2Fragments?.global, globalData, data.global_taxonomy[i].segtaxid, data.global_taxonomy[i].cattaxid);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
188
317
|
}
|
|
189
318
|
|
|
190
319
|
// Google targeting
|
|
191
320
|
if (typeof window.googletag !== 'undefined' && (moduleConfig.params.setGptKeyValues || !moduleConfig.params.hasOwnProperty('setGptKeyValues'))) {
|
|
192
321
|
try {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (data.shared_taxonomy && data.shared_taxonomy[
|
|
196
|
-
|
|
322
|
+
let gptCurationId = (moduleConfig.params.gptCurationId ? moduleConfig.params.gptCurationId : (partnerIds['sdRtdForGpt'] ? partnerIds['sdRtdForGpt'] : null));
|
|
323
|
+
let sirdataMergedList = sirdataList;
|
|
324
|
+
if (gptCurationId && data.shared_taxonomy && data.shared_taxonomy[gptCurationId]) {
|
|
325
|
+
let gamCurationData = getSegAndCatsArray(data.shared_taxonomy[gptCurationId], globalMinScore, null);
|
|
326
|
+
sirdataMergedList = sirdataMergedList.concat(gamCurationData.segments).concat(gamCurationData.categories);
|
|
197
327
|
}
|
|
198
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
199
328
|
window.googletag.pubads().getSlots().forEach(function (n) {
|
|
200
329
|
if (typeof n.setTargeting !== 'undefined' && sirdataMergedList && sirdataMergedList.length > 0) {
|
|
201
330
|
n.setTargeting('sd_rtd', sirdataMergedList);
|
|
@@ -221,259 +350,108 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
|
|
|
221
350
|
}) : false);
|
|
222
351
|
indexFound = (!!(typeof bidderIndex == 'number' && bidderIndex >= 0));
|
|
223
352
|
try {
|
|
224
|
-
curationData = {'segments': [], 'categories': []};
|
|
225
|
-
sirdataMergedList = [];
|
|
226
|
-
|
|
227
353
|
let minScore = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.bidders[bidderIndex].contextualMinRelevancyScore : globalMinScore);
|
|
354
|
+
let specificData = null;
|
|
355
|
+
|
|
356
|
+
switch (bid.bidder) {
|
|
357
|
+
case 'appnexus':
|
|
358
|
+
case 'appnexusAst':
|
|
359
|
+
case 'brealtime':
|
|
360
|
+
case 'emxdigital':
|
|
361
|
+
case 'pagescience':
|
|
362
|
+
case 'gourmetads':
|
|
363
|
+
case 'matomy':
|
|
364
|
+
case 'featureforward':
|
|
365
|
+
case 'oftmedia':
|
|
366
|
+
case 'districtm':
|
|
367
|
+
case 'adasta':
|
|
368
|
+
case 'beintoo':
|
|
369
|
+
case 'gravity':
|
|
370
|
+
case 'msq_classic':
|
|
371
|
+
case 'msq_max':
|
|
372
|
+
case '366_apx':
|
|
373
|
+
specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
374
|
+
if (specificData && specificData.length > 0) {
|
|
375
|
+
deepSetValue(bid, 'params.keywords.sd_rtd', specificData);
|
|
376
|
+
}
|
|
377
|
+
break;
|
|
228
378
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
case 'brealtime':
|
|
234
|
-
case 'emxdigital':
|
|
235
|
-
case 'pagescience':
|
|
236
|
-
case 'gourmetads':
|
|
237
|
-
case 'matomy':
|
|
238
|
-
case 'featureforward':
|
|
239
|
-
case 'oftmedia':
|
|
240
|
-
case 'districtm':
|
|
241
|
-
case 'adasta':
|
|
242
|
-
case 'beintoo':
|
|
243
|
-
case 'gravity':
|
|
244
|
-
case 'msq_classic':
|
|
245
|
-
case 'msq_max':
|
|
246
|
-
case '366_apx':
|
|
247
|
-
// For curation Xandr is pid 27446
|
|
248
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27446');
|
|
249
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
250
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
251
|
-
}
|
|
252
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
253
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
254
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
255
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
256
|
-
} else {
|
|
257
|
-
deepSetValue(bid, 'params.keywords.sd_rtd', sirdataMergedList);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
break;
|
|
261
|
-
|
|
262
|
-
case 'smartadserver':
|
|
263
|
-
case 'smart':
|
|
379
|
+
case 'smartadserver':
|
|
380
|
+
case 'smart':
|
|
381
|
+
specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
382
|
+
if (specificData && specificData.length > 0) {
|
|
264
383
|
var target = [];
|
|
265
384
|
if (bid.hasOwnProperty('params') && bid.params.hasOwnProperty('target')) {
|
|
266
385
|
target.push(bid.params.target);
|
|
267
386
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
272
|
-
}
|
|
273
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
274
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
275
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
276
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
277
|
-
} else {
|
|
278
|
-
sirdataMergedList.forEach(function (entry) {
|
|
279
|
-
if (target.indexOf('sd_rtd=' + entry) === -1) {
|
|
280
|
-
target.push('sd_rtd=' + entry);
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
deepSetValue(bid, 'params.target', target.join(';'));
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
break;
|
|
287
|
-
|
|
288
|
-
case 'rubicon':
|
|
289
|
-
// For curation Magnite is pid 27518
|
|
290
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27452');
|
|
291
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
292
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
293
|
-
}
|
|
294
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
295
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
296
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
297
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
298
|
-
} else {
|
|
299
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
break;
|
|
303
|
-
|
|
304
|
-
case 'ix':
|
|
305
|
-
var ixConfig = config.getConfig('ix.firstPartyData.sd_rtd');
|
|
306
|
-
if (!ixConfig) {
|
|
307
|
-
// For curation index is pid 27248
|
|
308
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27248');
|
|
309
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
310
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
311
|
-
}
|
|
312
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
313
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
314
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
315
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
316
|
-
} else {
|
|
317
|
-
var cappIxCategories = [];
|
|
318
|
-
var ixLength = 0;
|
|
319
|
-
var ixLimit = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('sizeLimit') ? moduleConfig.params.bidders[bidderIndex].sizeLimit : 1000);
|
|
320
|
-
// Push ids For publisher use and for curation if exists but limit size because the bidder uses GET parameters
|
|
321
|
-
sirdataMergedList.forEach(function (entry) {
|
|
322
|
-
if (ixLength < ixLimit) {
|
|
323
|
-
cappIxCategories.push(entry);
|
|
324
|
-
ixLength += entry.toString().length;
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
config.setConfig({ix: {firstPartyData: {sd_rtd: cappIxCategories}}});
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
break;
|
|
332
|
-
|
|
333
|
-
case 'proxistore':
|
|
334
|
-
// For curation Proxistore is pid 27484
|
|
335
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27484');
|
|
336
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
337
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
338
|
-
} else {
|
|
339
|
-
data.shared_taxonomy[curationId] = {contextual_categories: {}};
|
|
340
|
-
}
|
|
341
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
342
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
343
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
344
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
345
|
-
} else {
|
|
346
|
-
deepSetValue(bid, 'ortb2.user.ext.data', {
|
|
347
|
-
segments: sirdataData.segments.concat(curationData.segments),
|
|
348
|
-
contextual_categories: {...data.contextual_categories, ...data.shared_taxonomy[curationId].contextual_categories}
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
break;
|
|
353
|
-
|
|
354
|
-
case 'criteo':
|
|
355
|
-
// For curation Smart is pid 27443
|
|
356
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27443');
|
|
357
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
358
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
359
|
-
}
|
|
360
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
361
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
362
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
363
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
364
|
-
} else {
|
|
365
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
break;
|
|
369
|
-
|
|
370
|
-
case 'triplelift':
|
|
371
|
-
// For curation Triplelift is pid 27518
|
|
372
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27518');
|
|
373
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
374
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
375
|
-
}
|
|
376
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
377
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
378
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
379
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
380
|
-
} else {
|
|
381
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
break;
|
|
385
|
-
|
|
386
|
-
case 'avct':
|
|
387
|
-
case 'avocet':
|
|
388
|
-
// For curation Avocet is pid 27522
|
|
389
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27522');
|
|
390
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
391
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
392
|
-
}
|
|
393
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
394
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
395
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
396
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
397
|
-
} else {
|
|
398
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
break;
|
|
402
|
-
|
|
403
|
-
case 'smaato':
|
|
404
|
-
// For curation Smaato is pid 27520
|
|
405
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27520');
|
|
406
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
407
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
408
|
-
}
|
|
409
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
410
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
411
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
412
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
413
|
-
} else {
|
|
414
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
break;
|
|
418
|
-
|
|
419
|
-
case 'yahoossp':
|
|
420
|
-
// For curation Yahoo is pid 30339
|
|
421
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '30339');
|
|
422
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
423
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
424
|
-
}
|
|
425
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
426
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
427
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
428
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
429
|
-
} else {
|
|
430
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
break;
|
|
434
|
-
|
|
435
|
-
case 'openx':
|
|
436
|
-
// For curation OpenX is pid 30342
|
|
437
|
-
curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '30342');
|
|
438
|
-
if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
|
|
439
|
-
curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
|
|
440
|
-
}
|
|
441
|
-
sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
|
|
442
|
-
if (sirdataMergedList && sirdataMergedList.length > 0) {
|
|
443
|
-
if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
|
|
444
|
-
loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
|
|
445
|
-
} else {
|
|
446
|
-
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
|
|
387
|
+
specificData.forEach(function (entry) {
|
|
388
|
+
if (target.indexOf('sd_rtd=' + entry) === -1) {
|
|
389
|
+
target.push('sd_rtd=' + entry);
|
|
447
390
|
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
break;
|
|
466
|
-
|
|
467
|
-
default:
|
|
468
|
-
if (!biddersParamsExist || indexFound) {
|
|
469
|
-
if (!deepAccess(bid, 'ortb2.site.ext.data.sd_rtd')) {
|
|
470
|
-
deepSetValue(bid, 'ortb2.site.ext.data.sd_rtd', sirdataData.categories);
|
|
471
|
-
}
|
|
472
|
-
if (!deepAccess(bid, 'ortb2.user.ext.data.sd_rtd')) {
|
|
473
|
-
deepSetValue(bid, 'ortb2.user.ext.data.sd_rtd', sirdataData.segments);
|
|
391
|
+
});
|
|
392
|
+
deepSetValue(bid, 'params.target', target.join(';'));
|
|
393
|
+
}
|
|
394
|
+
break;
|
|
395
|
+
|
|
396
|
+
case 'ix':
|
|
397
|
+
specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
398
|
+
let ixConfig = config.getConfig('ix.firstPartyData.sd_rtd');
|
|
399
|
+
if (!ixConfig && specificData && specificData.length > 0) {
|
|
400
|
+
let cappIxCategories = [];
|
|
401
|
+
let ixLength = 0;
|
|
402
|
+
let ixLimit = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('sizeLimit') ? moduleConfig.params.bidders[bidderIndex].sizeLimit : 1000);
|
|
403
|
+
// Push ids For publisher use and for curation if exists but limit size because the bidder uses GET parameters
|
|
404
|
+
specificData.forEach(function (entry) {
|
|
405
|
+
if (ixLength < ixLimit) {
|
|
406
|
+
cappIxCategories.push(entry);
|
|
407
|
+
ixLength += entry.toString().length;
|
|
474
408
|
}
|
|
409
|
+
});
|
|
410
|
+
config.setConfig({ix: {firstPartyData: {sd_rtd: cappIxCategories}}});
|
|
411
|
+
}
|
|
412
|
+
break;
|
|
413
|
+
|
|
414
|
+
case 'proxistore':
|
|
415
|
+
specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
416
|
+
if (specificData && specificData.length > 0) {
|
|
417
|
+
let psCurationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : (partnerIds[bid.bidder] ? partnerIds[bid.bidder] : null));
|
|
418
|
+
if (!data.shared_taxonomy || !data.shared_taxonomy[psCurationId]) {
|
|
419
|
+
data.shared_taxonomy[psCurationId] = {segments: [], contextual_categories: {}, segtaxid: null, cattaxid: null};
|
|
475
420
|
}
|
|
476
|
-
|
|
421
|
+
let psCurationData = getSegAndCatsArray(data.shared_taxonomy[psCurationId], minScore, null);
|
|
422
|
+
setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {
|
|
423
|
+
segments: sirdataData.segments.concat(psCurationData.segments),
|
|
424
|
+
contextual_categories: {...data.contextual_categories, ...data.shared_taxonomy[psCurationId].contextual_categories}
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
break;
|
|
428
|
+
|
|
429
|
+
case 'rubicon':
|
|
430
|
+
case 'criteo':
|
|
431
|
+
case 'triplelift':
|
|
432
|
+
case 'smaato':
|
|
433
|
+
case 'yahoossp':
|
|
434
|
+
case 'openx':
|
|
435
|
+
case 'pubmatic':
|
|
436
|
+
case 'smilewanted':
|
|
437
|
+
case 'taboola':
|
|
438
|
+
case 'ttd':
|
|
439
|
+
case 'zeta_global':
|
|
440
|
+
case 'zeta_global_ssp':
|
|
441
|
+
case 'teads':
|
|
442
|
+
case 'conversant':
|
|
443
|
+
case 'improvedigital':
|
|
444
|
+
case 'invibes':
|
|
445
|
+
case 'sublime':
|
|
446
|
+
case 'rtbhouse':
|
|
447
|
+
case 'mediasquare':
|
|
448
|
+
applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
449
|
+
break;
|
|
450
|
+
|
|
451
|
+
default:
|
|
452
|
+
if (!biddersParamsExist || (indexFound && (!moduleConfig.params.bidders[bidderIndex].hasOwnProperty('adUnitCodes') || moduleConfig.params.bidders[bidderIndex].adUnitCodes.indexOf(adUnit.code) !== -1))) {
|
|
453
|
+
applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
|
|
454
|
+
}
|
|
477
455
|
}
|
|
478
456
|
} catch (e) {
|
|
479
457
|
logError(e);
|
|
@@ -10,8 +10,10 @@ import {
|
|
|
10
10
|
} from '../src/mediaTypes.js';
|
|
11
11
|
const BIDDER_CODE = 'smartx';
|
|
12
12
|
const URL = 'https://bid.sxp.smartclip.net/bid/1000';
|
|
13
|
+
const GVLID = 115;
|
|
13
14
|
export const spec = {
|
|
14
15
|
code: BIDDER_CODE,
|
|
16
|
+
gvlid: GVLID,
|
|
15
17
|
supportedMediaTypes: [VIDEO],
|
|
16
18
|
/**
|
|
17
19
|
* Determines whether or not the given bid request is valid.
|