prebid.js 6.26.0 → 6.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adoceanBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/akamaiDapRtdProvider.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/automatadBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.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/byDataAnalyticsAdapter.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.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/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.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/hadronAnalyticsAdapter.js +1 -1
- package/dist/hadronRtdProvider.js +1 -1
- package/dist/id5AnalyticsAdapter.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 -0
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/inskinBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/koblerBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/mantisBidAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/medianetRtdProvider.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/merkleIdSystem.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/not-for-prod/prebid.js +178 -176
- package/dist/novatiqIdSystem.js +1 -1
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/oneVideoBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +3 -3
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/slimcutBidAdapter.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/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sortableAnalyticsAdapter.js +1 -1
- package/dist/sortableBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/spotxBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -0
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/telariaBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/trustxBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/akamaidap_segments_example.html +5 -3
- package/modules/.submodules.json +1 -0
- package/modules/adfBidAdapter.js +0 -3
- package/modules/adlooxAnalyticsAdapter.js +9 -5
- package/modules/adlooxAnalyticsAdapter.md +3 -3
- package/modules/adlooxRtdProvider.js +3 -5
- package/modules/adlooxRtdProvider.md +2 -2
- package/modules/adoceanBidAdapter.js +29 -1
- package/modules/adyoulikeBidAdapter.js +3 -0
- package/modules/akamaiDapRtdProvider.js +469 -139
- package/modules/akamaiDapRtdProvider.md +5 -3
- package/modules/automatadBidAdapter.js +9 -5
- package/modules/colossussspBidAdapter.js +17 -17
- package/modules/conversantBidAdapter.js +2 -2
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/ftrackIdSystem.js +5 -8
- package/modules/gdprEnforcement.js +15 -9
- package/modules/gridBidAdapter.js +4 -0
- package/modules/hadronAnalyticsAdapter.js +5 -1
- package/modules/hadronRtdProvider.js +15 -13
- package/modules/incrxBidAdapter.js +87 -0
- package/modules/{vertozBidAdapter.md → incrxBidAdapter.md} +6 -6
- package/modules/inskinBidAdapter.js +4 -3
- package/modules/insticatorBidAdapter.js +109 -42
- package/modules/ixBidAdapter.js +3 -2
- package/modules/ixBidAdapter.md +1 -1
- package/modules/kargoBidAdapter.js +32 -1
- package/modules/koblerBidAdapter.js +54 -45
- package/modules/koblerBidAdapter.md +12 -17
- package/modules/mantisBidAdapter.js +4 -8
- package/modules/medianetBidAdapter.js +2 -2
- package/modules/medianetRtdProvider.js +4 -6
- package/modules/merkleIdSystem.js +43 -31
- package/modules/naveggIdSystem.js +3 -2
- package/modules/novatiqIdSystem.js +6 -1
- package/modules/pubCommonId.js +2 -1
- package/modules/pubmaticAnalyticsAdapter.js +49 -33
- package/modules/relaidoBidAdapter.js +0 -3
- package/modules/sharedIdSystem.js +5 -11
- package/modules/slimcutBidAdapter.js +2 -2
- package/modules/spotxBidAdapter.js +1 -1
- package/modules/synacormediaBidAdapter.js +11 -2
- package/modules/taboolaBidAdapter.js +265 -0
- package/modules/taboolaBidAdapter.md +49 -0
- package/modules/telariaBidAdapter.js +3 -3
- package/modules/userId/eids.js +25 -5
- package/modules/zeta_global_sspBidAdapter.js +3 -2
- package/package.json +1 -1
- package/src/AnalyticsAdapter.js +5 -1
- package/src/adloader.js +6 -1
- package/src/storageManager.js +5 -4
- package/test/mocks/analyticsStub.js +13 -0
- package/test/mocks/xhr.js +22 -0
- package/test/spec/AnalyticsAdapter_spec.js +4 -0
- package/test/spec/modules/adfBidAdapter_spec.js +1 -1
- package/test/spec/modules/adoceanBidAdapter_spec.js +25 -1
- package/test/spec/modules/adriverIdSystem_spec.js +7 -3
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +16 -1
- package/test/spec/modules/akamaiDapRtdProvider_spec.js +457 -109
- package/test/spec/modules/automatadBidAdapter_spec.js +4 -0
- package/test/spec/modules/conversantBidAdapter_spec.js +36 -5
- package/test/spec/modules/datablocksBidAdapter_spec.js +9 -8
- package/test/spec/modules/eids_spec.js +48 -3
- package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +4 -4
- package/test/spec/modules/ftrackIdSystem_spec.js +11 -22
- package/test/spec/modules/gdprEnforcement_spec.js +100 -53
- package/test/spec/modules/gridBidAdapter_spec.js +11 -0
- package/test/spec/modules/incrxBidAdapter_spec.js +100 -0
- package/test/spec/modules/insticatorBidAdapter_spec.js +46 -1
- package/test/spec/modules/ixBidAdapter_spec.js +1 -1
- package/test/spec/modules/kargoBidAdapter_spec.js +27 -0
- package/test/spec/modules/koblerBidAdapter_spec.js +160 -124
- package/test/spec/modules/medianetRtdProvider_spec.js +146 -0
- package/test/spec/modules/merkleIdSystem_spec.js +58 -37
- package/test/spec/modules/naveggIdSystem_spec.js +25 -1
- package/test/spec/modules/proxistoreBidAdapter_spec.js +0 -2
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +117 -0
- package/test/spec/modules/sovrnBidAdapter_spec.js +253 -264
- package/test/spec/modules/synacormediaBidAdapter_spec.js +74 -0
- package/test/spec/modules/taboolaBidAdapter_spec.js +455 -0
- package/test/spec/modules/userId_spec.js +27 -1
- package/test/spec/modules/vidazooBidAdapter_spec.js +9 -4
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +4 -2
- package/test/test_deps.js +1 -0
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
```
|
|
18
18
|
pbjs.setConfig({
|
|
19
19
|
realTimeData: {
|
|
20
|
+
auctionDelay: 2000,
|
|
20
21
|
dataProviders: [
|
|
21
22
|
{
|
|
22
23
|
name: "dap",
|
|
@@ -25,9 +26,10 @@
|
|
|
25
26
|
apiHostname: '<see your Akamai account rep>',
|
|
26
27
|
apiVersion: "x1",
|
|
27
28
|
domain: 'your-domain.com',
|
|
28
|
-
identityType: 'email' | 'mobile' | ... | 'dap-signature:1.
|
|
29
|
-
segtax:
|
|
30
|
-
|
|
29
|
+
identityType: 'email' | 'mobile' | ... | 'dap-signature:1.3.0',
|
|
30
|
+
segtax: 504,
|
|
31
|
+
dapEntropyUrl: 'https://dap-dist.akamaized.net/dapentropy.js',
|
|
32
|
+
dapEntropyTimeout: 1500 // Maximum time for dapentropy to run
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
]
|
|
@@ -74,7 +74,7 @@ export const spec = {
|
|
|
74
74
|
data: payloadString,
|
|
75
75
|
options: {
|
|
76
76
|
contentType: 'application/json',
|
|
77
|
-
withCredentials:
|
|
77
|
+
withCredentials: true,
|
|
78
78
|
crossOrigin: true,
|
|
79
79
|
},
|
|
80
80
|
}
|
|
@@ -114,7 +114,7 @@ export const spec = {
|
|
|
114
114
|
},
|
|
115
115
|
onTimeout: function(timeoutData) {
|
|
116
116
|
const timeoutUrl = ENDPOINT_URL + '/timeout'
|
|
117
|
-
|
|
117
|
+
spec.ajaxCall(timeoutUrl, null, JSON.stringify(timeoutData), {method: 'POST', withCredentials: true})
|
|
118
118
|
},
|
|
119
119
|
onBidWon: function(bid) {
|
|
120
120
|
if (!bid.nurl) { return }
|
|
@@ -136,11 +136,15 @@ export const spec = {
|
|
|
136
136
|
/\$\{AUCTION_ID\}/,
|
|
137
137
|
bid.auctionId
|
|
138
138
|
)
|
|
139
|
-
spec.ajaxCall(winUrl, null)
|
|
139
|
+
spec.ajaxCall(winUrl, null, null, {method: 'GET', withCredentials: true})
|
|
140
140
|
return true
|
|
141
141
|
},
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
|
|
143
|
+
ajaxCall: function(endpoint, callback, data, options = {}) {
|
|
144
|
+
if (data) {
|
|
145
|
+
options.contentType = 'application/json'
|
|
146
|
+
}
|
|
147
|
+
ajax(endpoint, callback, data, options)
|
|
144
148
|
},
|
|
145
149
|
|
|
146
150
|
}
|
|
@@ -107,7 +107,7 @@ export const spec = {
|
|
|
107
107
|
|
|
108
108
|
for (let i = 0; i < validBidRequests.length; i++) {
|
|
109
109
|
let bid = validBidRequests[i];
|
|
110
|
-
let traff = bid.params.traffic || BANNER
|
|
110
|
+
let traff = bid.params.traffic || BANNER;
|
|
111
111
|
let placement = {
|
|
112
112
|
placementId: bid.params.placement_id,
|
|
113
113
|
groupId: bid.params.group_id,
|
|
@@ -116,19 +116,7 @@ export const spec = {
|
|
|
116
116
|
eids: [],
|
|
117
117
|
floor: {}
|
|
118
118
|
};
|
|
119
|
-
|
|
120
|
-
let tmpFloor = {};
|
|
121
|
-
for (let size of placement.sizes) {
|
|
122
|
-
tmpFloor = bid.getFloor({
|
|
123
|
-
currency: 'USD',
|
|
124
|
-
mediaType: traff,
|
|
125
|
-
size: size
|
|
126
|
-
});
|
|
127
|
-
if (tmpFloor) {
|
|
128
|
-
placement.floor[`${size[0]}x${size[1]}`] = tmpFloor.floor;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
119
|
+
|
|
132
120
|
if (bid.schain) {
|
|
133
121
|
placement.schain = bid.schain;
|
|
134
122
|
}
|
|
@@ -147,9 +135,7 @@ export const spec = {
|
|
|
147
135
|
}
|
|
148
136
|
if (traff === BANNER) {
|
|
149
137
|
placement.sizes = bid.mediaTypes[BANNER].sizes
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (traff === VIDEO) {
|
|
138
|
+
} else if (traff === VIDEO) {
|
|
153
139
|
placement.sizes = bid.mediaTypes[VIDEO].playerSize;
|
|
154
140
|
placement.playerSize = bid.mediaTypes[VIDEO].playerSize;
|
|
155
141
|
placement.minduration = bid.mediaTypes[VIDEO].minduration;
|
|
@@ -167,6 +153,20 @@ export const spec = {
|
|
|
167
153
|
placement.api = bid.mediaTypes[VIDEO].api;
|
|
168
154
|
placement.linearity = bid.mediaTypes[VIDEO].linearity;
|
|
169
155
|
}
|
|
156
|
+
if (typeof bid.getFloor === 'function') {
|
|
157
|
+
let tmpFloor = {};
|
|
158
|
+
for (let size of placement.sizes) {
|
|
159
|
+
tmpFloor = bid.getFloor({
|
|
160
|
+
currency: 'USD',
|
|
161
|
+
mediaType: traff,
|
|
162
|
+
size: size
|
|
163
|
+
});
|
|
164
|
+
if (tmpFloor) {
|
|
165
|
+
placement.floor[`${size[0]}x${size[1]}`] = tmpFloor.floor;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
170
|
placements.push(placement);
|
|
171
171
|
}
|
|
172
172
|
return {
|
|
@@ -93,7 +93,7 @@ export const spec = {
|
|
|
93
93
|
copyOptProperty(format[0].h, video, 'h');
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
copyOptProperty(bid.params.position, video, 'pos');
|
|
96
|
+
copyOptProperty(bid.params.position || videoData.pos, video, 'pos');
|
|
97
97
|
copyOptProperty(bid.params.mimes || videoData.mimes, video, 'mimes');
|
|
98
98
|
copyOptProperty(bid.params.maxduration || videoData.maxduration, video, 'maxduration');
|
|
99
99
|
copyOptProperty(bid.params.protocols || videoData.protocols, video, 'protocols');
|
|
@@ -105,7 +105,7 @@ export const spec = {
|
|
|
105
105
|
const format = convertSizes(bannerData.sizes || bid.sizes);
|
|
106
106
|
const banner = {format: format};
|
|
107
107
|
|
|
108
|
-
copyOptProperty(bid.params.position, banner, 'pos');
|
|
108
|
+
copyOptProperty(bid.params.position || bannerData.pos, banner, 'pos');
|
|
109
109
|
|
|
110
110
|
imp.banner = banner;
|
|
111
111
|
}
|
|
@@ -24,7 +24,7 @@ const LOG_PREFIX = 'Criteo: ';
|
|
|
24
24
|
Unminified source code can be found in the privately shared repo: https://github.com/Prebid-org/prebid-js-external-js-criteo/blob/master/dist/prod.js
|
|
25
25
|
*/
|
|
26
26
|
const FAST_BID_VERSION_PLACEHOLDER = '%FAST_BID_VERSION%';
|
|
27
|
-
export const FAST_BID_VERSION_CURRENT =
|
|
27
|
+
export const FAST_BID_VERSION_CURRENT = 123;
|
|
28
28
|
const FAST_BID_VERSION_LATEST = 'latest';
|
|
29
29
|
const FAST_BID_VERSION_NONE = 'none';
|
|
30
30
|
const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
|
|
@@ -9,6 +9,7 @@ import * as utils from '../src/utils.js';
|
|
|
9
9
|
import { submodule } from '../src/hook.js';
|
|
10
10
|
import { getStorageManager } from '../src/storageManager.js';
|
|
11
11
|
import { uspDataHandler } from '../src/adapterManager.js';
|
|
12
|
+
import { loadExternalScript } from '../src/adloader.js';
|
|
12
13
|
|
|
13
14
|
const MODULE_NAME = 'ftrackId';
|
|
14
15
|
const LOG_PREFIX = 'FTRACK - ';
|
|
@@ -17,7 +18,6 @@ const VENDOR_ID = null;
|
|
|
17
18
|
const LOCAL_STORAGE = 'html5';
|
|
18
19
|
const FTRACK_STORAGE_NAME = 'ftrackId';
|
|
19
20
|
const FTRACK_PRIVACY_STORAGE_NAME = `${FTRACK_STORAGE_NAME}_privacy`;
|
|
20
|
-
const FTRACK_URL = 'https://d9.flashtalking.com/d9core';
|
|
21
21
|
const storage = getStorageManager({gvlid: VENDOR_ID, moduleName: MODULE_NAME});
|
|
22
22
|
|
|
23
23
|
let consentInfo = {
|
|
@@ -102,11 +102,8 @@ export const ftrackIdSubmodule = {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
ftrackScript.setAttribute('src', config.params.url);
|
|
108
|
-
window.document.body.appendChild(ftrackScript);
|
|
109
|
-
}
|
|
105
|
+
// Creates an async script element and appends it to the document
|
|
106
|
+
loadExternalScript(config.params.url, MODULE_NAME);
|
|
110
107
|
}
|
|
111
108
|
};
|
|
112
109
|
},
|
|
@@ -146,8 +143,8 @@ export const ftrackIdSubmodule = {
|
|
|
146
143
|
utils.logWarn(LOG_PREFIX + 'config.storage.name recommended to be "' + FTRACK_STORAGE_NAME + '".');
|
|
147
144
|
}
|
|
148
145
|
|
|
149
|
-
if (!config.hasOwnProperty('params') || !config.params.hasOwnProperty('url')
|
|
150
|
-
utils.logWarn(LOG_PREFIX + 'config.params.url is required for ftrack to run.
|
|
146
|
+
if (!config.hasOwnProperty('params') || !config.params.hasOwnProperty('url')) {
|
|
147
|
+
utils.logWarn(LOG_PREFIX + 'config.params.url is required for ftrack to run.');
|
|
151
148
|
return false;
|
|
152
149
|
}
|
|
153
150
|
|
|
@@ -18,6 +18,8 @@ const TCF2 = {
|
|
|
18
18
|
'purpose7': { id: 7, name: 'measurement' }
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
const VENDORLESS_MODULE_TYPES = ['fpid-module'];
|
|
22
|
+
|
|
21
23
|
/*
|
|
22
24
|
These rules would be used if `consentManagement.gdpr.rules` is undefined by the publisher.
|
|
23
25
|
*/
|
|
@@ -123,9 +125,10 @@ function getGvlidForAnalyticsAdapter(code) {
|
|
|
123
125
|
* @param {Object} consentData - gdpr consent data
|
|
124
126
|
* @param {string=} currentModule - Bidder code of the current module
|
|
125
127
|
* @param {number=} gvlId - GVL ID for the module
|
|
128
|
+
* @param {string=} moduleType module type
|
|
126
129
|
* @returns {boolean}
|
|
127
130
|
*/
|
|
128
|
-
export function validateRules(rule, consentData, currentModule, gvlId) {
|
|
131
|
+
export function validateRules(rule, consentData, currentModule, gvlId, moduleType) {
|
|
129
132
|
const purposeId = TCF2[Object.keys(TCF2).filter(purposeName => TCF2[purposeName].name === rule.purpose)[0]].id;
|
|
130
133
|
|
|
131
134
|
// return 'true' if vendor present in 'vendorExceptions'
|
|
@@ -138,12 +141,14 @@ export function validateRules(rule, consentData, currentModule, gvlId) {
|
|
|
138
141
|
const vendorConsent = deepAccess(consentData, `vendorData.vendor.consents.${gvlId}`);
|
|
139
142
|
const liTransparency = deepAccess(consentData, `vendorData.purpose.legitimateInterests.${purposeId}`);
|
|
140
143
|
|
|
144
|
+
const vendorlessModule = includes(VENDORLESS_MODULE_TYPES, moduleType);
|
|
145
|
+
|
|
141
146
|
/*
|
|
142
147
|
Since vendor exceptions have already been handled, the purpose as a whole is allowed if it's not being enforced
|
|
143
148
|
or the user has consented. Similar with vendors.
|
|
144
149
|
*/
|
|
145
150
|
const purposeAllowed = rule.enforcePurpose === false || purposeConsent === true;
|
|
146
|
-
const vendorAllowed = rule.enforceVendor === false || vendorConsent === true;
|
|
151
|
+
const vendorAllowed = rule.enforceVendor === false || vendorConsent === true || vendorlessModule === true;
|
|
147
152
|
|
|
148
153
|
/*
|
|
149
154
|
Few if any vendors should be declaring Legitimate Interest for Device Access (Purpose 1), but some are claiming
|
|
@@ -162,15 +167,16 @@ export function validateRules(rule, consentData, currentModule, gvlId) {
|
|
|
162
167
|
* @param {Function} fn reference to original function (used by hook logic)
|
|
163
168
|
* @param {Number=} gvlid gvlid of the module
|
|
164
169
|
* @param {string=} moduleName name of the module
|
|
170
|
+
* @param {string=} moduleType module type
|
|
165
171
|
*/
|
|
166
|
-
export function deviceAccessHook(fn, gvlid, moduleName, result) {
|
|
172
|
+
export function deviceAccessHook(fn, gvlid, moduleName, moduleType, result) {
|
|
167
173
|
result = Object.assign({}, {
|
|
168
174
|
hasEnforcementHook: true
|
|
169
175
|
});
|
|
170
176
|
if (!hasDeviceAccess()) {
|
|
171
177
|
logWarn('Device access is disabled by Publisher');
|
|
172
178
|
result.valid = false;
|
|
173
|
-
fn.call(this, gvlid, moduleName, result);
|
|
179
|
+
fn.call(this, gvlid, moduleName, moduleType, result);
|
|
174
180
|
} else {
|
|
175
181
|
const consentData = gdprDataHandler.getConsentData();
|
|
176
182
|
if (consentData && consentData.gdprApplies) {
|
|
@@ -183,24 +189,24 @@ export function deviceAccessHook(fn, gvlid, moduleName, result) {
|
|
|
183
189
|
gvlid = getGvlid(moduleName) || gvlid;
|
|
184
190
|
}
|
|
185
191
|
const curModule = moduleName || curBidder;
|
|
186
|
-
let isAllowed = validateRules(purpose1Rule, consentData, curModule, gvlid);
|
|
192
|
+
let isAllowed = validateRules(purpose1Rule, consentData, curModule, gvlid, moduleType);
|
|
187
193
|
if (isAllowed) {
|
|
188
194
|
result.valid = true;
|
|
189
|
-
fn.call(this, gvlid, moduleName, result);
|
|
195
|
+
fn.call(this, gvlid, moduleName, moduleType, result);
|
|
190
196
|
} else {
|
|
191
197
|
curModule && logWarn(`TCF2 denied device access for ${curModule}`);
|
|
192
198
|
result.valid = false;
|
|
193
199
|
storageBlocked.push(curModule);
|
|
194
|
-
fn.call(this, gvlid, moduleName, result);
|
|
200
|
+
fn.call(this, gvlid, moduleName, moduleType, result);
|
|
195
201
|
}
|
|
196
202
|
} else {
|
|
197
203
|
// The module doesn't enforce TCF1.1 strings
|
|
198
204
|
result.valid = true;
|
|
199
|
-
fn.call(this, gvlid, moduleName, result);
|
|
205
|
+
fn.call(this, gvlid, moduleName, moduleType, result);
|
|
200
206
|
}
|
|
201
207
|
} else {
|
|
202
208
|
result.valid = true;
|
|
203
|
-
fn.call(this, gvlid, moduleName, result);
|
|
209
|
+
fn.call(this, gvlid, moduleName, moduleType, result);
|
|
204
210
|
}
|
|
205
211
|
}
|
|
206
212
|
}
|
|
@@ -289,6 +289,10 @@ export const spec = {
|
|
|
289
289
|
const siteContent = request.site.content || {};
|
|
290
290
|
request.site.content = mergeDeep(siteContent, { data });
|
|
291
291
|
}
|
|
292
|
+
const id = deepAccess(site, 'content.id');
|
|
293
|
+
if (id) {
|
|
294
|
+
request.site.content = {...request.site.content, id};
|
|
295
|
+
}
|
|
292
296
|
}
|
|
293
297
|
|
|
294
298
|
return {
|
|
@@ -4,6 +4,7 @@ import adapterManager from '../src/adapterManager.js';
|
|
|
4
4
|
import * as utils from '../src/utils.js';
|
|
5
5
|
import CONSTANTS from '../src/constants.json';
|
|
6
6
|
import { getStorageManager } from '../src/storageManager.js';
|
|
7
|
+
import {getRefererInfo} from '../src/refererDetection.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* hadronAnalyticsAdapter.js - Audigent Hadron Analytics Adapter
|
|
@@ -35,7 +36,10 @@ var pageView = {
|
|
|
35
36
|
timezoneOffset: new Date().getTimezoneOffset(),
|
|
36
37
|
language: window.navigator.language,
|
|
37
38
|
vendor: window.navigator.vendor,
|
|
38
|
-
pageUrl:
|
|
39
|
+
pageUrl: (() => {
|
|
40
|
+
const ri = getRefererInfo();
|
|
41
|
+
return ri.canonicalUrl || ri.referer;
|
|
42
|
+
})(),
|
|
39
43
|
screenWidth: x,
|
|
40
44
|
screenHeight: y
|
|
41
45
|
};
|
|
@@ -10,12 +10,15 @@ import {config} from '../src/config.js';
|
|
|
10
10
|
import {getGlobal} from '../src/prebidGlobal.js';
|
|
11
11
|
import {getStorageManager} from '../src/storageManager.js';
|
|
12
12
|
import {submodule} from '../src/hook.js';
|
|
13
|
-
import {isFn, isStr, isArray, deepEqual, isPlainObject, logError} from '../src/utils.js';
|
|
13
|
+
import {isFn, isStr, isArray, deepEqual, isPlainObject, logError, logInfo} from '../src/utils.js';
|
|
14
|
+
import {loadExternalScript} from '../src/adloader.js';
|
|
14
15
|
|
|
16
|
+
const LOG_PREFIX = 'User ID - HadronRtdProvider submodule: ';
|
|
15
17
|
const MODULE_NAME = 'realTimeData';
|
|
16
18
|
const SUBMODULE_NAME = 'hadron';
|
|
17
19
|
const AU_GVLID = 561;
|
|
18
|
-
|
|
20
|
+
const HADRON_ID_DEFAULT_URL = 'https://id.hadron.ad.gt/api/v1/hadronid?_it=prebid';
|
|
21
|
+
const HADRON_SEGMENT_URL = 'https://seg.hadron.ad.gt/api/v1/rtd';
|
|
19
22
|
export const HALOID_LOCAL_NAME = 'auHadronId';
|
|
20
23
|
export const RTD_LOCAL_NAME = 'auHadronRtd';
|
|
21
24
|
export const storage = getStorageManager({gvlid: AU_GVLID, moduleName: SUBMODULE_NAME});
|
|
@@ -92,8 +95,9 @@ function mergeLazy(target, source) {
|
|
|
92
95
|
|
|
93
96
|
/**
|
|
94
97
|
* Param or default.
|
|
95
|
-
* @param {String} param
|
|
98
|
+
* @param {String|Function} param
|
|
96
99
|
* @param {String} defaultVal
|
|
100
|
+
* @param {Object} arg
|
|
97
101
|
*/
|
|
98
102
|
function paramOrDefault(param, defaultVal, arg) {
|
|
99
103
|
if (isFn(param)) {
|
|
@@ -141,7 +145,7 @@ export function addRealTimeData(bidConfig, rtd, rtdConfig) {
|
|
|
141
145
|
|
|
142
146
|
/**
|
|
143
147
|
* Real-time data retrieval from Audigent
|
|
144
|
-
* @param {Object}
|
|
148
|
+
* @param {Object} bidConfig
|
|
145
149
|
* @param {function} onDone
|
|
146
150
|
* @param {Object} rtdConfig
|
|
147
151
|
* @param {Object} userConsent
|
|
@@ -169,22 +173,21 @@ export function getRealTimeData(bidConfig, onDone, rtdConfig, userConsent) {
|
|
|
169
173
|
userIds.hadronId = hadronId;
|
|
170
174
|
getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds);
|
|
171
175
|
} else {
|
|
172
|
-
var script = document.createElement('script');
|
|
173
|
-
script.type = 'text/javascript';
|
|
174
|
-
|
|
175
176
|
window.pubHadronCb = (hadronId) => {
|
|
176
177
|
userIds.hadronId = hadronId;
|
|
177
178
|
getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds);
|
|
178
179
|
}
|
|
179
|
-
|
|
180
180
|
const hadronIdUrl = rtdConfig.params && rtdConfig.params.hadronIdUrl;
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
const scriptUrl = paramOrDefault(hadronIdUrl, HADRON_ID_DEFAULT_URL, userIds);
|
|
182
|
+
loadExternalScript(scriptUrl, 'hadron', () => {
|
|
183
|
+
logInfo(LOG_PREFIX, 'hadronIdTag loaded', scriptUrl);
|
|
184
|
+
})
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
187
|
|
|
186
188
|
/**
|
|
187
189
|
* Async rtd retrieval from Audigent
|
|
190
|
+
* @param {Object} bidConfig
|
|
188
191
|
* @param {function} onDone
|
|
189
192
|
* @param {Object} rtdConfig
|
|
190
193
|
* @param {Object} userConsent
|
|
@@ -202,8 +205,7 @@ export function getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent,
|
|
|
202
205
|
reqParams.pubHadronPm = window.pubHadronPm;
|
|
203
206
|
}
|
|
204
207
|
|
|
205
|
-
|
|
206
|
-
ajax(url, {
|
|
208
|
+
ajax(HADRON_SEGMENT_URL, {
|
|
207
209
|
success: function (response, req) {
|
|
208
210
|
if (req.status === 200) {
|
|
209
211
|
try {
|
|
@@ -237,7 +239,7 @@ export function getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent,
|
|
|
237
239
|
/**
|
|
238
240
|
* Module init
|
|
239
241
|
* @param {Object} provider
|
|
240
|
-
* @param {
|
|
242
|
+
* @param {Object} userConsent
|
|
241
243
|
* @return {boolean}
|
|
242
244
|
*/
|
|
243
245
|
function init(provider, userConsent) {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { parseSizesInput, isEmpty } from '../src/utils.js';
|
|
2
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import { BANNER } from '../src/mediaTypes.js'
|
|
4
|
+
|
|
5
|
+
const BIDDER_CODE = 'incrementx';
|
|
6
|
+
const ENDPOINT_URL = 'https://hb.incrementxserv.com/vzhbidder/bid';
|
|
7
|
+
const DEFAULT_CURRENCY = 'USD';
|
|
8
|
+
const CREATIVE_TTL = 300;
|
|
9
|
+
|
|
10
|
+
export const spec = {
|
|
11
|
+
code: BIDDER_CODE,
|
|
12
|
+
supportedMediaTypes: [BANNER],
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Determines whether or not the given bid request is valid.
|
|
16
|
+
*
|
|
17
|
+
* @param {BidRequest} bid The bid params to validate.
|
|
18
|
+
* @return boolean True if this is a valid bid, and false otherwise.
|
|
19
|
+
*/
|
|
20
|
+
isBidRequestValid: function (bid) {
|
|
21
|
+
return !!(bid.params.placementId);
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Make a server request from the list of BidRequests.
|
|
26
|
+
*
|
|
27
|
+
* @param validBidRequests
|
|
28
|
+
* @param bidderRequest
|
|
29
|
+
* @return Array Info describing the request to the server.
|
|
30
|
+
*/
|
|
31
|
+
buildRequests: function (validBidRequests, bidderRequest) {
|
|
32
|
+
return validBidRequests.map(bidRequest => {
|
|
33
|
+
const sizes = parseSizesInput(bidRequest.params.size || bidRequest.sizes);
|
|
34
|
+
|
|
35
|
+
const requestParams = {
|
|
36
|
+
_vzPlacementId: bidRequest.params.placementId,
|
|
37
|
+
sizes: sizes,
|
|
38
|
+
_slotBidId: bidRequest.bidId,
|
|
39
|
+
_rqsrc: bidderRequest.refererInfo.referer,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const payload = {
|
|
43
|
+
q: encodeURI(JSON.stringify(requestParams))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
url: ENDPOINT_URL,
|
|
49
|
+
data: payload
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Unpack the response from the server into a list of bids.
|
|
56
|
+
*
|
|
57
|
+
* @param {ServerResponse} serverResponse A successful response from the server.
|
|
58
|
+
* @return {Bid[]} An array of bids which were nested inside the server.
|
|
59
|
+
*/
|
|
60
|
+
interpretResponse: function (serverResponse) {
|
|
61
|
+
const response = serverResponse.body;
|
|
62
|
+
const bids = [];
|
|
63
|
+
if (isEmpty(response)) {
|
|
64
|
+
return bids;
|
|
65
|
+
}
|
|
66
|
+
const responseBid = {
|
|
67
|
+
requestId: response.slotBidId,
|
|
68
|
+
cpm: response.cpm,
|
|
69
|
+
currency: response.currency || DEFAULT_CURRENCY,
|
|
70
|
+
width: response.adWidth,
|
|
71
|
+
height: response.adHeight,
|
|
72
|
+
ttl: CREATIVE_TTL,
|
|
73
|
+
creativeId: response.creativeId || 0,
|
|
74
|
+
netRevenue: response.netRevenue || false,
|
|
75
|
+
meta: {
|
|
76
|
+
mediaType: response.mediaType || BANNER,
|
|
77
|
+
advertiserDomains: response.advertiserDomains || []
|
|
78
|
+
},
|
|
79
|
+
ad: response.ad
|
|
80
|
+
};
|
|
81
|
+
bids.push(responseBid);
|
|
82
|
+
return bids;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
registerBidder(spec);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Overview
|
|
2
2
|
|
|
3
3
|
```
|
|
4
|
-
Module Name:
|
|
4
|
+
Module Name: IncrementX Bidder Adapter
|
|
5
5
|
Module Type: Bidder Adapter
|
|
6
6
|
Maintainer: prebid-team@vertoz.com
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
# Description
|
|
10
10
|
|
|
11
|
-
Connects to
|
|
12
|
-
|
|
13
|
-
Use bidder code ```
|
|
11
|
+
Connects to IncrementX exchange for bids.
|
|
12
|
+
IncrementX Bidder adapter supports Banner ads.
|
|
13
|
+
Use bidder code ```incrementx``` for all IncrementX traffic.
|
|
14
14
|
|
|
15
15
|
# Test Parameters
|
|
16
16
|
```
|
|
@@ -20,9 +20,9 @@ var adUnits = [
|
|
|
20
20
|
code: 'banner-div',
|
|
21
21
|
sizes: [[300, 250], [300,600]], // a display size(s)
|
|
22
22
|
bids: [{
|
|
23
|
-
bidder: '
|
|
23
|
+
bidder: 'incrementx',
|
|
24
24
|
params: {
|
|
25
|
-
placementId: '
|
|
25
|
+
placementId: 'PNX-HB-F796830VCF3C4B'
|
|
26
26
|
}
|
|
27
27
|
}]
|
|
28
28
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createTrackPixelHtml } from '../src/utils.js';
|
|
2
|
+
import { loadExternalScript } from '../src/adloader.js';
|
|
2
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
4
|
|
|
4
5
|
const BIDDER_CODE = 'inskin';
|
|
@@ -211,9 +212,9 @@ export const spec = {
|
|
|
211
212
|
bidPrice: bidsMap[e.data.bidId].price,
|
|
212
213
|
serverResponse
|
|
213
214
|
};
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
|
|
216
|
+
const url = 'https://cdn.inskinad.com/isfe/publishercode/' + bidsMap[e.data.bidId].params.siteId + '/default.js?autoload&id=' + id;
|
|
217
|
+
loadExternalScript(url, BIDDER_CODE);
|
|
217
218
|
});
|
|
218
219
|
}
|
|
219
220
|
|