prebid.js 7.30.0 → 7.32.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/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/alkimiBidAdapter.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/appushBidAdapter.js +1 -0
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/confiantRtdProvider.js +1 -0
- package/dist/connectIdSystem.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/datawrkzBidAdapter.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/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/holidBidAdapter.js +1 -0
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.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/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/medianetRtdProvider.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +131 -127
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/orbitsoftBidAdapter.js +1 -0
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.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/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/yieldlabBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/adloox.html +5 -0
- package/libraries/pbsExtensions/processors/adUnitCode.js +13 -0
- package/libraries/pbsExtensions/processors/pbs.js +5 -0
- package/modules/.submodules.json +1 -0
- package/modules/adagioBidAdapter.js +0 -4
- package/modules/adagioBidAdapter.md +4 -22
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/adlooxAnalyticsAdapter.md +5 -3
- package/modules/adlooxRtdProvider.js +82 -278
- package/modules/adlooxRtdProvider.md +6 -6
- package/modules/aidemBidAdapter.js +4 -0
- package/modules/aidemBidAdapter.md +1 -0
- package/modules/alkimiBidAdapter.js +23 -6
- package/modules/aolBidAdapter.js +12 -0
- package/modules/appnexusBidAdapter.js +2 -2
- package/modules/appushBidAdapter.js +188 -0
- package/modules/appushBidAdapter.md +79 -0
- package/modules/asoBidAdapter.js +8 -5
- package/modules/confiantRtdProvider.js +128 -0
- package/modules/confiantRtdProvider.md +45 -0
- package/modules/connectIdSystem.js +15 -1
- package/modules/datawrkzBidAdapter.js +24 -4
- package/modules/feedadBidAdapter.js +17 -7
- package/modules/holidBidAdapter.js +170 -0
- package/modules/holidBidAdapter.md +36 -0
- package/modules/jwplayerVideoProvider.js +10 -3
- package/modules/kueezRtbBidAdapter.js +21 -8
- package/modules/medianetRtdProvider.js +4 -4
- package/modules/nexx360BidAdapter.js +5 -7
- package/modules/orbitsoftBidAdapter.js +150 -0
- package/modules/permutiveRtdProvider.js +1 -1
- package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
- package/modules/riseBidAdapter.js +2 -1
- package/modules/riseBidAdapter.md +2 -0
- package/modules/seedtagBidAdapter.js +12 -0
- package/modules/smartxBidAdapter.js +6 -0
- package/modules/taboolaBidAdapter.js +61 -14
- package/modules/yahoosspBidAdapter.js +5 -0
- package/modules/yieldlabBidAdapter.js +150 -134
- package/modules/yieldmoBidAdapter.js +1 -12
- package/package.json +1 -1
- package/src/adloader.js +2 -1
- package/src/prebid.js +7 -8
- package/test/spec/modules/adagioBidAdapter_spec.js +1 -28
- package/test/spec/modules/adlooxRtdProvider_spec.js +28 -120
- package/test/spec/modules/aidemBidAdapter_spec.js +10 -2
- package/test/spec/modules/alkimiBidAdapter_spec.js +15 -3
- package/test/spec/modules/aolBidAdapter_spec.js +22 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +7 -3
- package/test/spec/modules/appushBidAdapter_spec.js +372 -0
- package/test/spec/modules/confiantRtdProvider_spec.js +107 -0
- package/test/spec/modules/connectIdSystem_spec.js +17 -5
- package/test/spec/modules/feedadBidAdapter_spec.js +60 -13
- package/test/spec/modules/holidBidAdapter_spec.js +165 -0
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +147 -24
- package/test/spec/modules/medianetRtdProvider_spec.js +3 -3
- package/test/spec/modules/orbitsoftBidAdapter_spec.js +255 -0
- package/test/spec/modules/riseBidAdapter_spec.js +7 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +56 -10
- package/test/spec/modules/smartxBidAdapter_spec.js +10 -0
- package/test/spec/modules/taboolaBidAdapter_spec.js +142 -5
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +45 -10
- package/test/spec/modules/yahoosspBidAdapter_spec.js +16 -1
- package/test/spec/modules/yieldlabBidAdapter_spec.js +311 -301
- package/test/spec/modules/yieldmoBidAdapter_spec.js +70 -0
- package/test/spec/ortbConverter/pbsExtensions/adUnitCode_spec.js +23 -0
- package/test/spec/unit/pbjs_api_spec.js +11 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import {
|
|
2
|
+
deepAccess,
|
|
3
|
+
getBidIdParameter,
|
|
4
|
+
isStr,
|
|
5
|
+
logMessage,
|
|
6
|
+
triggerPixel,
|
|
7
|
+
} from '../src/utils.js'
|
|
8
|
+
import * as events from '../src/events.js'
|
|
9
|
+
import CONSTANTS from '../src/constants.json'
|
|
10
|
+
import { BANNER } from '../src/mediaTypes.js'
|
|
11
|
+
|
|
12
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
13
|
+
|
|
14
|
+
const BIDDER_CODE = 'holid'
|
|
15
|
+
const GVLID = 1177
|
|
16
|
+
const ENDPOINT = 'https://helloworld.holid.io/openrtb2/auction'
|
|
17
|
+
const COOKIE_SYNC_ENDPOINT = 'https://null.holid.io/sync.html'
|
|
18
|
+
const TIME_TO_LIVE = 300
|
|
19
|
+
let wurlMap = {}
|
|
20
|
+
|
|
21
|
+
events.on(CONSTANTS.EVENTS.BID_WON, bidWonHandler)
|
|
22
|
+
|
|
23
|
+
export const spec = {
|
|
24
|
+
code: BIDDER_CODE,
|
|
25
|
+
gvlid: GVLID,
|
|
26
|
+
supportedMediaTypes: [BANNER],
|
|
27
|
+
|
|
28
|
+
isBidRequestValid: function (bid) {
|
|
29
|
+
return !!bid.params.adUnitID
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
buildRequests: function (validBidRequests, _bidderRequest) {
|
|
33
|
+
return validBidRequests.map((bid) => {
|
|
34
|
+
const requestData = {
|
|
35
|
+
...bid.ortb2,
|
|
36
|
+
id: bid.auctionId,
|
|
37
|
+
imp: [getImp(bid)],
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
url: ENDPOINT,
|
|
43
|
+
data: JSON.stringify(requestData),
|
|
44
|
+
bidId: bid.bidId,
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
interpretResponse: function (serverResponse, bidRequest) {
|
|
50
|
+
const bidResponses = []
|
|
51
|
+
|
|
52
|
+
if (!serverResponse.body.seatbid) {
|
|
53
|
+
return []
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
serverResponse.body.seatbid.map((response) => {
|
|
57
|
+
response.bid.map((bid) => {
|
|
58
|
+
const requestId = bidRequest.bidId
|
|
59
|
+
const auctionId = bidRequest.auctionId
|
|
60
|
+
const wurl = deepAccess(bid, 'ext.prebid.events.win')
|
|
61
|
+
const bidResponse = {
|
|
62
|
+
requestId,
|
|
63
|
+
cpm: bid.price,
|
|
64
|
+
width: bid.w,
|
|
65
|
+
height: bid.h,
|
|
66
|
+
ad: bid.adm,
|
|
67
|
+
creativeId: bid.crid,
|
|
68
|
+
currency: serverResponse.body.cur,
|
|
69
|
+
netRevenue: true,
|
|
70
|
+
ttl: TIME_TO_LIVE,
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
addWurl({ auctionId, requestId, wurl })
|
|
74
|
+
|
|
75
|
+
bidResponses.push(bidResponse)
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
return bidResponses
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
getUserSyncs(optionsType, serverResponse, gdprConsent, uspConsent) {
|
|
83
|
+
if (!serverResponse || serverResponse.length === 0) {
|
|
84
|
+
return []
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const syncs = []
|
|
88
|
+
|
|
89
|
+
if (optionsType.iframeEnabled) {
|
|
90
|
+
const queryParams = []
|
|
91
|
+
|
|
92
|
+
queryParams.push('bidders=' + getBidders(serverResponse))
|
|
93
|
+
queryParams.push('gdpr=' + +gdprConsent.gdprApplies)
|
|
94
|
+
queryParams.push('gdpr_consent=' + gdprConsent.consentString)
|
|
95
|
+
queryParams.push('usp_consent=' + (uspConsent || ''))
|
|
96
|
+
|
|
97
|
+
let strQueryParams = queryParams.join('&')
|
|
98
|
+
|
|
99
|
+
if (strQueryParams.length > 0) {
|
|
100
|
+
strQueryParams = '?' + strQueryParams
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
syncs.push({
|
|
104
|
+
type: 'iframe',
|
|
105
|
+
url: COOKIE_SYNC_ENDPOINT + strQueryParams + '&type=iframe',
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
return syncs
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function getImp(bid) {
|
|
114
|
+
const imp = {
|
|
115
|
+
ext: {
|
|
116
|
+
prebid: {
|
|
117
|
+
storedrequest: {
|
|
118
|
+
id: getBidIdParameter('adUnitID', bid.params),
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
const sizes =
|
|
124
|
+
bid.sizes && !Array.isArray(bid.sizes[0]) ? [bid.sizes] : bid.sizes
|
|
125
|
+
|
|
126
|
+
if (deepAccess(bid, 'mediaTypes.banner')) {
|
|
127
|
+
imp.banner = {
|
|
128
|
+
format: sizes.map((size) => {
|
|
129
|
+
return { w: size[0], h: size[1] }
|
|
130
|
+
}),
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return imp
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function getBidders(serverResponse) {
|
|
138
|
+
const bidders = serverResponse
|
|
139
|
+
.map((res) => Object.keys(res.body.ext.responsetimemillis))
|
|
140
|
+
.flat(1)
|
|
141
|
+
|
|
142
|
+
return encodeURIComponent(JSON.stringify([...new Set(bidders)]))
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function addWurl(auctionId, adId, wurl) {
|
|
146
|
+
if ([auctionId, adId].every(isStr)) {
|
|
147
|
+
wurlMap[`${auctionId}${adId}`] = wurl
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function removeWurl(auctionId, adId) {
|
|
152
|
+
delete wurlMap[`${auctionId}${adId}`]
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function getWurl(auctionId, adId) {
|
|
156
|
+
if ([auctionId, adId].every(isStr)) {
|
|
157
|
+
return wurlMap[`${auctionId}${adId}`]
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function bidWonHandler(bid) {
|
|
162
|
+
const wurl = getWurl(bid.auctionId, bid.adId)
|
|
163
|
+
if (wurl) {
|
|
164
|
+
logMessage(`Invoking image pixel for wurl on BID_WIN: "${wurl}"`)
|
|
165
|
+
triggerPixel(wurl)
|
|
166
|
+
removeWurl(bid.auctionId, bid.adId)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
registerBidder(spec)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Holid Bid Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: richard@holid.se
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Currently module supports only banner mediaType.
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
|
|
15
|
+
## Sample Banner Ad Unit
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
var adUnits = [
|
|
19
|
+
{
|
|
20
|
+
code: 'bannerAdUnit',
|
|
21
|
+
mediaTypes: {
|
|
22
|
+
banner: {
|
|
23
|
+
sizes: [[300, 250]],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
bids: [
|
|
27
|
+
{
|
|
28
|
+
bidder: 'holid',
|
|
29
|
+
params: {
|
|
30
|
+
adUnitID: '12345',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
]
|
|
36
|
+
```
|
|
@@ -47,19 +47,26 @@ export function JWPlayerProvider(config, jwplayer_, adState_, timeState_, callba
|
|
|
47
47
|
|
|
48
48
|
function init() {
|
|
49
49
|
if (!jwplayer) {
|
|
50
|
-
triggerSetupFailure(-1); // TODO: come up with code
|
|
50
|
+
triggerSetupFailure(-1); // TODO: come up with error code schema- player is absent
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
playerVersion = jwplayer.version;
|
|
55
55
|
|
|
56
56
|
if (playerVersion < minimumSupportedPlayerVersion) {
|
|
57
|
-
triggerSetupFailure(-2); // TODO: come up with code
|
|
57
|
+
triggerSetupFailure(-2); // TODO: come up with error code schema - version not supported
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!document.getElementById(divId)) {
|
|
62
|
+
triggerSetupFailure(-3); // TODO: come up with error code schema - missing div id
|
|
58
63
|
return;
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
player = jwplayer(divId);
|
|
62
|
-
if (player.getState
|
|
67
|
+
if (!player || !player.getState) {
|
|
68
|
+
triggerSetupFailure(-4); // TODO: come up with error code schema - factory function failure
|
|
69
|
+
} else if (player.getState() === undefined) {
|
|
63
70
|
setupPlayer(playerConfig);
|
|
64
71
|
} else {
|
|
65
72
|
const payload = getSetupCompletePayload();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _each, deepAccess, parseSizesInput, parseUrl, uniques, isFn } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
|
-
import { BANNER } from '../src/mediaTypes.js';
|
|
3
|
+
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
4
4
|
import { getStorageManager } from '../src/storageManager.js';
|
|
5
5
|
|
|
6
6
|
const GVLID = 1165;
|
|
@@ -55,7 +55,7 @@ function isBidRequestValid(bid) {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
58
|
-
const { params, bidId, userId, adUnitCode, schain } = bid;
|
|
58
|
+
const { params, bidId, userId, adUnitCode, schain, mediaTypes } = bid;
|
|
59
59
|
let { bidFloor, ext } = params;
|
|
60
60
|
const hashUrl = hashCode(topWindowUrl);
|
|
61
61
|
const uniqueDealId = getUniqueDealId(hashUrl);
|
|
@@ -89,7 +89,8 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
|
|
|
89
89
|
bidderVersion: BIDDER_VERSION,
|
|
90
90
|
prebidVersion: '$prebid.version$',
|
|
91
91
|
res: `${screen.width}x${screen.height}`,
|
|
92
|
-
schain: schain
|
|
92
|
+
schain: schain,
|
|
93
|
+
mediaTypes: mediaTypes
|
|
93
94
|
};
|
|
94
95
|
|
|
95
96
|
appendUserIdsToRequestPayload(data, userId);
|
|
@@ -167,11 +168,12 @@ function interpretResponse(serverResponse, request) {
|
|
|
167
168
|
|
|
168
169
|
try {
|
|
169
170
|
results.forEach(result => {
|
|
170
|
-
const { creativeId, ad, price, exp, width, height, currency, advertiserDomains } = result;
|
|
171
|
+
const { creativeId, ad, price, exp, width, height, currency, advertiserDomains, mediaType = BANNER } = result;
|
|
171
172
|
if (!ad || !price) {
|
|
172
173
|
return;
|
|
173
174
|
}
|
|
174
|
-
|
|
175
|
+
|
|
176
|
+
const response = {
|
|
175
177
|
requestId: bidId,
|
|
176
178
|
cpm: price,
|
|
177
179
|
width: width,
|
|
@@ -180,11 +182,22 @@ function interpretResponse(serverResponse, request) {
|
|
|
180
182
|
currency: currency || CURRENCY,
|
|
181
183
|
netRevenue: true,
|
|
182
184
|
ttl: exp || TTL_SECONDS,
|
|
183
|
-
ad: ad,
|
|
184
185
|
meta: {
|
|
185
186
|
advertiserDomains: advertiserDomains || []
|
|
186
187
|
}
|
|
187
|
-
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
if (mediaType === BANNER) {
|
|
191
|
+
Object.assign(response, {
|
|
192
|
+
ad: ad,
|
|
193
|
+
});
|
|
194
|
+
} else {
|
|
195
|
+
Object.assign(response, {
|
|
196
|
+
vastXml: ad,
|
|
197
|
+
mediaType: VIDEO
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
output.push(response);
|
|
188
201
|
});
|
|
189
202
|
return output;
|
|
190
203
|
} catch (e) {
|
|
@@ -268,7 +281,7 @@ export const spec = {
|
|
|
268
281
|
code: BIDDER_CODE,
|
|
269
282
|
version: BIDDER_VERSION,
|
|
270
283
|
gvlid: GVLID,
|
|
271
|
-
supportedMediaTypes: [BANNER],
|
|
284
|
+
supportedMediaTypes: [BANNER, VIDEO],
|
|
272
285
|
isBidRequestValid,
|
|
273
286
|
buildRequests,
|
|
274
287
|
interpretResponse,
|
|
@@ -59,14 +59,14 @@ function onAuctionInitEvent(auctionInit) {
|
|
|
59
59
|
}, SOURCE));
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
function getTargetingData(
|
|
63
|
-
const adUnits = getAdUnits(
|
|
62
|
+
function getTargetingData(adUnitCodes, config, consent, auction) {
|
|
63
|
+
const adUnits = getAdUnits(auction.adUnits, adUnitCodes);
|
|
64
64
|
let targetingData = {};
|
|
65
65
|
if (window.mnjs.loaded && isFn(window.mnjs.getTargetingData)) {
|
|
66
|
-
targetingData = window.mnjs.getTargetingData(
|
|
66
|
+
targetingData = window.mnjs.getTargetingData(adUnitCodes, adUnits, SOURCE) || {};
|
|
67
67
|
}
|
|
68
68
|
const targeting = {};
|
|
69
|
-
|
|
69
|
+
adUnitCodes.forEach(adUnitCode => {
|
|
70
70
|
targeting[adUnitCode] = targeting[adUnitCode] || {};
|
|
71
71
|
targetingData[adUnitCode] = targetingData[adUnitCode] || {};
|
|
72
72
|
targeting[adUnitCode] = {
|
|
@@ -79,9 +79,6 @@ function createImpObject(bid) {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
if (bid.params.customParams) {
|
|
83
|
-
utils.deepSetValue(imp, 'ext.customParams', bid.params.customParams);
|
|
84
|
-
}
|
|
85
82
|
enrichImp(imp, bid, floor);
|
|
86
83
|
return imp;
|
|
87
84
|
}
|
|
@@ -154,9 +151,6 @@ function getFloor(bid, mediaType) {
|
|
|
154
151
|
}
|
|
155
152
|
|
|
156
153
|
function enrichImp(imp, bid, floor) {
|
|
157
|
-
if (bid.params.customParams) {
|
|
158
|
-
utils.deepSetValue(imp, 'ext.customParams', bid.params.customParams);
|
|
159
|
-
}
|
|
160
154
|
if (floor > 0) {
|
|
161
155
|
imp.bidfloor = floor;
|
|
162
156
|
imp.bidfloorcur = 'USD';
|
|
@@ -251,6 +245,7 @@ function interpretResponse(response, req) {
|
|
|
251
245
|
|
|
252
246
|
let bids = [];
|
|
253
247
|
respBody.seatbid.forEach(seatbid => {
|
|
248
|
+
const ssp = seatbid.seat;
|
|
254
249
|
bids = [...bids, ...seatbid.bid.map(bid => {
|
|
255
250
|
const response = {
|
|
256
251
|
requestId: bid.impid,
|
|
@@ -264,7 +259,10 @@ function interpretResponse(response, req) {
|
|
|
264
259
|
ttl: 120,
|
|
265
260
|
bidderCode: allowAlternateBidderCodes ? `n360-${bid.ssp}` : 'nexx360',
|
|
266
261
|
mediaType: bid.type === 'banner' ? 'banner' : 'video',
|
|
267
|
-
meta: {
|
|
262
|
+
meta: {
|
|
263
|
+
advertiserDomains: bid.adomain,
|
|
264
|
+
demandSource: ssp,
|
|
265
|
+
},
|
|
268
266
|
};
|
|
269
267
|
// if (bid.dealid) response.dealid = bid.dealid;
|
|
270
268
|
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import * as utils from '../src/utils.js';
|
|
2
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
|
+
import {config} from '../src/config.js';
|
|
4
|
+
|
|
5
|
+
const BIDDER_CODE = 'orbitsoft';
|
|
6
|
+
let styleParamsMap = {
|
|
7
|
+
'title.family': 'f1', // headerFont
|
|
8
|
+
'title.size': 'fs1', // headerFontSize
|
|
9
|
+
'title.weight': 'w1', // headerWeight
|
|
10
|
+
'title.style': 's1', // headerStyle
|
|
11
|
+
'title.color': 'c3', // headerColor
|
|
12
|
+
'description.family': 'f2', // descriptionFont
|
|
13
|
+
'description.size': 'fs2', // descriptionFontSize
|
|
14
|
+
'description.weight': 'w2', // descriptionWeight
|
|
15
|
+
'description.style': 's2', // descriptionStyle
|
|
16
|
+
'description.color': 'c4', // descriptionColor
|
|
17
|
+
'url.family': 'f3', // urlFont
|
|
18
|
+
'url.size': 'fs3', // urlFontSize
|
|
19
|
+
'url.weight': 'w3', // urlWeight
|
|
20
|
+
'url.style': 's3', // urlStyle
|
|
21
|
+
'url.color': 'c5', // urlColor
|
|
22
|
+
'colors.background': 'c2', // borderColor
|
|
23
|
+
'colors.border': 'c1', // borderColor
|
|
24
|
+
'colors.link': 'c6', // lnkColor
|
|
25
|
+
};
|
|
26
|
+
export const spec = {
|
|
27
|
+
code: BIDDER_CODE,
|
|
28
|
+
aliases: ['oas', '152media'], // short code and customer aliases
|
|
29
|
+
isBidRequestValid: function (bid) {
|
|
30
|
+
switch (true) {
|
|
31
|
+
case !('params' in bid):
|
|
32
|
+
utils.logError(bid.bidder + ': No required params');
|
|
33
|
+
return false;
|
|
34
|
+
case !(bid.params.placementId):
|
|
35
|
+
utils.logError(bid.bidder + ': No required param placementId');
|
|
36
|
+
return false;
|
|
37
|
+
case !(bid.params.requestUrl):
|
|
38
|
+
utils.logError(bid.bidder + ': No required param requestUrl');
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
},
|
|
43
|
+
buildRequests: function (validBidRequests) {
|
|
44
|
+
let bidRequest;
|
|
45
|
+
let serverRequests = [];
|
|
46
|
+
for (let i = 0; i < validBidRequests.length; i++) {
|
|
47
|
+
bidRequest = validBidRequests[i];
|
|
48
|
+
let bidRequestParams = bidRequest.params;
|
|
49
|
+
let placementId = utils.getBidIdParameter('placementId', bidRequestParams);
|
|
50
|
+
let requestUrl = utils.getBidIdParameter('requestUrl', bidRequestParams);
|
|
51
|
+
let referrer = utils.getBidIdParameter('ref', bidRequestParams);
|
|
52
|
+
let location = utils.getBidIdParameter('loc', bidRequestParams);
|
|
53
|
+
// Append location & referrer
|
|
54
|
+
if (location === '') {
|
|
55
|
+
location = utils.getWindowLocation();
|
|
56
|
+
}
|
|
57
|
+
if (referrer === '' && bidRequest && bidRequest.refererInfo) {
|
|
58
|
+
referrer = bidRequest.refererInfo.referer;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Styles params
|
|
62
|
+
let stylesParams = utils.getBidIdParameter('style', bidRequestParams);
|
|
63
|
+
let stylesParamsArray = {};
|
|
64
|
+
for (let currentValue in stylesParams) {
|
|
65
|
+
if (stylesParams.hasOwnProperty(currentValue)) {
|
|
66
|
+
let currentStyle = stylesParams[currentValue];
|
|
67
|
+
for (let field in currentStyle) {
|
|
68
|
+
if (currentStyle.hasOwnProperty(field)) {
|
|
69
|
+
let styleField = styleParamsMap[currentValue + '.' + field];
|
|
70
|
+
if (typeof styleField !== 'undefined') {
|
|
71
|
+
stylesParamsArray[styleField] = currentStyle[field];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Custom params
|
|
78
|
+
let customParams = utils.getBidIdParameter('customParams', bidRequestParams);
|
|
79
|
+
let customParamsArray = {};
|
|
80
|
+
for (let customField in customParams) {
|
|
81
|
+
if (customParams.hasOwnProperty(customField)) {
|
|
82
|
+
customParamsArray['c.' + customField] = customParams[customField];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Sizes params (not supports by server, for future features)
|
|
87
|
+
let sizesParams = bidRequest.sizes;
|
|
88
|
+
let parsedSizes = utils.parseSizesInput(sizesParams);
|
|
89
|
+
let requestData = Object.assign({
|
|
90
|
+
'scid': placementId,
|
|
91
|
+
'callback_uid': utils.generateUUID(),
|
|
92
|
+
'loc': location,
|
|
93
|
+
'ref': referrer,
|
|
94
|
+
'size': parsedSizes
|
|
95
|
+
}, stylesParamsArray, customParamsArray);
|
|
96
|
+
|
|
97
|
+
serverRequests.push({
|
|
98
|
+
method: 'POST',
|
|
99
|
+
url: requestUrl,
|
|
100
|
+
data: requestData,
|
|
101
|
+
options: {withCredentials: false},
|
|
102
|
+
bidRequest: bidRequest
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return serverRequests;
|
|
106
|
+
},
|
|
107
|
+
interpretResponse: function (serverResponse, request) {
|
|
108
|
+
let bidResponses = [];
|
|
109
|
+
if (!serverResponse || serverResponse.error) {
|
|
110
|
+
utils.logError(BIDDER_CODE + ': Server response error');
|
|
111
|
+
return bidResponses;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const serverBody = serverResponse.body;
|
|
115
|
+
if (!serverBody) {
|
|
116
|
+
utils.logError(BIDDER_CODE + ': Empty bid response');
|
|
117
|
+
return bidResponses;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const CPM = serverBody.cpm;
|
|
121
|
+
const WIDTH = serverBody.width;
|
|
122
|
+
const HEIGHT = serverBody.height;
|
|
123
|
+
const CREATIVE = serverBody.content_url;
|
|
124
|
+
const CALLBACK_UID = serverBody.callback_uid;
|
|
125
|
+
const TIME_TO_LIVE = config.getConfig('_bidderTimeout');
|
|
126
|
+
const REFERER = utils.getWindowTop();
|
|
127
|
+
let bidRequest = request.bidRequest;
|
|
128
|
+
if (CPM > 0 && WIDTH > 0 && HEIGHT > 0) {
|
|
129
|
+
let bidResponse = {
|
|
130
|
+
requestId: bidRequest.bidId,
|
|
131
|
+
cpm: CPM,
|
|
132
|
+
width: WIDTH,
|
|
133
|
+
height: HEIGHT,
|
|
134
|
+
creativeId: CALLBACK_UID,
|
|
135
|
+
ttl: TIME_TO_LIVE,
|
|
136
|
+
referrer: REFERER,
|
|
137
|
+
currency: 'USD',
|
|
138
|
+
netRevenue: true,
|
|
139
|
+
adUrl: CREATIVE,
|
|
140
|
+
meta: {
|
|
141
|
+
advertiserDomains: serverBody.adomain ? serverBody.adomain : []
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
bidResponses.push(bidResponse);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return bidResponses;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
registerBidder(spec);
|
|
@@ -243,7 +243,7 @@ function getCustomBidderFn (moduleConfig, bidder) {
|
|
|
243
243
|
*/
|
|
244
244
|
function getDefaultBidderFn (bidder) {
|
|
245
245
|
const isPStandardTargetingEnabled = (data, acEnabled) => {
|
|
246
|
-
return (acEnabled && data.ac && data.ac.length) || (data.ssp && data.ssp.cohorts.length)
|
|
246
|
+
return (acEnabled && data.ac && data.ac.length) || (data.ssp && data.ssp.cohorts && data.ssp.cohorts.length)
|
|
247
247
|
}
|
|
248
248
|
const pStandardTargeting = (data, acEnabled) => {
|
|
249
249
|
const ac = (acEnabled) ? (data.ac ?? []) : []
|
|
@@ -246,6 +246,7 @@ export function buildPBSRequest(s2sBidRequest, bidderRequests, adUnits, requeste
|
|
|
246
246
|
impIds.add(impId)
|
|
247
247
|
proxyBidRequests.push({
|
|
248
248
|
...adUnit,
|
|
249
|
+
adUnitCode: adUnit.code,
|
|
249
250
|
...getDefinedParams(actualBidRequests.values().next().value || {}, ['userId', 'userIdAsEids', 'schain']),
|
|
250
251
|
pbsData: {impId, actualBidRequests, adUnit}
|
|
251
252
|
});
|
|
@@ -400,7 +400,8 @@ function generateGeneralParams(generalObject, bidderRequest) {
|
|
|
400
400
|
dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0,
|
|
401
401
|
device_type: getDeviceType(navigator.userAgent),
|
|
402
402
|
ua: navigator.userAgent,
|
|
403
|
-
|
|
403
|
+
is_wrapper: !!generalBidParams.isWrapper,
|
|
404
|
+
session_id: generalBidParams.sessionId || getBidIdParameter('auctionId', generalObject),
|
|
404
405
|
tmax: timeout
|
|
405
406
|
};
|
|
406
407
|
|
|
@@ -25,6 +25,8 @@ The adapter supports Video(instream).
|
|
|
25
25
|
| `placementId` | optional | String | A unique placement identifier | "12345678"
|
|
26
26
|
| `testMode` | optional | Boolean | This activates the test mode | false
|
|
27
27
|
| `rtbDomain` | optional | String | Sets the seller end point | "www.test.com"
|
|
28
|
+
| `is_wrapper` | private | Boolean | Please don't use unless your account manager asked you to | false
|
|
29
|
+
|
|
28
30
|
|
|
29
31
|
# Test Parameters
|
|
30
32
|
```javascript
|
|
@@ -260,6 +260,18 @@ export const spec = {
|
|
|
260
260
|
payload.coppa = coppa;
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
+
if (bidderRequest.gppConsent) {
|
|
264
|
+
payload.gppConsent = {
|
|
265
|
+
gppString: bidderRequest.gppConsent.gppString,
|
|
266
|
+
applicableSections: bidderRequest.gppConsent.applicableSections
|
|
267
|
+
}
|
|
268
|
+
} else if (bidderRequest.ortb2?.regs?.gpp) {
|
|
269
|
+
payload.gppConsent = {
|
|
270
|
+
gppString: bidderRequest.ortb2.regs.gpp,
|
|
271
|
+
applicableSections: bidderRequest.ortb2.regs.gpp_sid
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
263
275
|
const payloadString = JSON.stringify(payload);
|
|
264
276
|
return {
|
|
265
277
|
method: 'POST',
|
|
@@ -76,6 +76,7 @@ export const spec = {
|
|
|
76
76
|
const bidfloor = getBidFloor(bid) || 0;
|
|
77
77
|
const bidfloorcur = getBidIdParameter('bidfloorcur', bid.params) || 'EUR';
|
|
78
78
|
const siteId = getBidIdParameter('siteId', bid.params);
|
|
79
|
+
const sitekey = getBidIdParameter('sitekey', bid.params);
|
|
79
80
|
const domain = getBidIdParameter('domain', bid.params);
|
|
80
81
|
const cat = getBidIdParameter('cat', bid.params) || [''];
|
|
81
82
|
let pubcid = null;
|
|
@@ -191,6 +192,11 @@ export const spec = {
|
|
|
191
192
|
}
|
|
192
193
|
}
|
|
193
194
|
|
|
195
|
+
// Add sitekey if available
|
|
196
|
+
if (sitekey) {
|
|
197
|
+
requestPayload.site.content.ext.sitekey = sitekey;
|
|
198
|
+
}
|
|
199
|
+
|
|
194
200
|
// Add common id if available
|
|
195
201
|
if (pubcid) {
|
|
196
202
|
userExt.fpc = pubcid;
|