prebid.js 8.0.0 → 8.1.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/adqueryBidAdapter.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/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bedigitechBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.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/colossussspBidAdapter.js +1 -1
- package/dist/conceptxBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freepassBidAdapter.js +1 -0
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kiviadsBidAdapter.js +1 -0
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.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/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/mgidXBidAdapter.js +1 -0
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +134 -131
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionAnalyticsAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.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/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.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/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.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/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/modules/amxBidAdapter.js +11 -12
- package/modules/bedigitechBidAdapter.js +15 -12
- package/modules/bedigitechBidAdapter.md +2 -2
- package/modules/beopBidAdapter.js +0 -4
- package/modules/bidwatchAnalyticsAdapter.js +33 -5
- package/modules/colossussspBidAdapter.js +9 -0
- package/modules/conceptxBidAdapter.js +6 -3
- package/modules/freepassBidAdapter.js +98 -0
- package/modules/freepassBidAdapter.md +31 -0
- package/modules/freepassIdSystem.md +1 -1
- package/modules/greenbidsAnalyticsAdapter.js +7 -13
- package/modules/gridBidAdapter.js +3 -4
- package/modules/intentIqIdSystem.js +5 -4
- package/modules/ixBidAdapter.js +284 -55
- package/modules/kiviadsBidAdapter.js +212 -0
- package/modules/kiviadsBidAdapter.md +79 -0
- package/modules/mgidXBidAdapter.js +263 -0
- package/modules/mgidXBidAdapter.md +79 -0
- package/modules/oxxionAnalyticsAdapter.js +33 -5
- package/modules/pubmaticBidAdapter.js +18 -2
- package/modules/rtbhouseBidAdapter.js +9 -2
- package/modules/rtbhouseBidAdapter.md +27 -8
- package/modules/rubiconBidAdapter.js +13 -1
- package/modules/sharethroughBidAdapter.js +14 -0
- package/modules/sonobiBidAdapter.js +4 -7
- package/package.json +1 -1
- package/test/spec/modules/amxBidAdapter_spec.js +6 -3
- package/test/spec/modules/bedigitechBidAdapter_spec.js +25 -36
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +21 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +29 -0
- package/test/spec/modules/freepassBidAdapter_spec.js +161 -0
- package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +0 -15
- package/test/spec/modules/gridBidAdapter_spec.js +29 -28
- package/test/spec/modules/ixBidAdapter_spec.js +745 -3
- package/test/spec/modules/kiviadsBidAdapter_spec.js +404 -0
- package/test/spec/modules/mgidXBidAdapter_spec.js +426 -0
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +21 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +25 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +35 -0
- package/test/spec/modules/rubiconBidAdapter_spec.js +41 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +75 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +15 -15
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
|
-
import {
|
|
3
|
+
import {_each, isArray} from '../src/utils.js';
|
|
4
4
|
|
|
5
5
|
const BEDIGITECH_CODE = 'bedigitech';
|
|
6
|
-
const BEDIGITECH_ENDPOINT = 'https://
|
|
6
|
+
const BEDIGITECH_ENDPOINT = 'https://bid.bedigitech.com/bid/pub_bid.php';
|
|
7
7
|
const BEDIGITECH_REQUEST_METHOD = 'GET';
|
|
8
8
|
const BEDIGITECH_CURRENCY = 'USD';
|
|
9
|
-
|
|
10
|
-
function interpretResponse(placementResponse,
|
|
9
|
+
let requestId = '';
|
|
10
|
+
function interpretResponse(placementResponse, bids) {
|
|
11
11
|
const bid = {
|
|
12
12
|
id: placementResponse.id,
|
|
13
|
-
requestId: placementResponse.
|
|
13
|
+
requestId: requestId || placementResponse.id,
|
|
14
|
+
bidderCode: 'bedigitech',
|
|
14
15
|
cpm: placementResponse.cpm,
|
|
15
16
|
ad: decodeURIComponent(placementResponse.ad),
|
|
16
17
|
width: placementResponse.width || 0,
|
|
17
18
|
height: placementResponse.height || 0,
|
|
18
19
|
currency: placementResponse.currency || BEDIGITECH_CURRENCY,
|
|
19
20
|
ttl: placementResponse.ttl || 300,
|
|
20
|
-
creativeId: placementResponse.
|
|
21
|
+
creativeId: placementResponse.crid,
|
|
22
|
+
requestTimestamp: placementResponse.requestTime,
|
|
23
|
+
timeToRespond: placementResponse.timeToRespond || 300,
|
|
24
|
+
netRevenue: placementResponse.netRevenue,
|
|
21
25
|
meta: {
|
|
22
26
|
mediaType: BANNER,
|
|
23
27
|
},
|
|
@@ -29,14 +33,15 @@ export const spec = {
|
|
|
29
33
|
code: BEDIGITECH_CODE,
|
|
30
34
|
supportedMediaTypes: [BANNER, NATIVE],
|
|
31
35
|
isBidRequestValid: bid => {
|
|
36
|
+
requestId = '';
|
|
37
|
+
requestId = bid.bidId
|
|
32
38
|
return !!bid.params.placementId && !!bid.bidId && bid.bidder === 'bedigitech'
|
|
33
39
|
},
|
|
34
40
|
|
|
35
|
-
buildRequests: (bidRequests
|
|
41
|
+
buildRequests: (bidRequests) => {
|
|
36
42
|
return bidRequests.map(bid => {
|
|
37
43
|
let url = BEDIGITECH_ENDPOINT;
|
|
38
44
|
const data = {'pid': bid.params.placementId};
|
|
39
|
-
|
|
40
45
|
return {
|
|
41
46
|
method: BEDIGITECH_REQUEST_METHOD,
|
|
42
47
|
url,
|
|
@@ -50,15 +55,13 @@ export const spec = {
|
|
|
50
55
|
});
|
|
51
56
|
},
|
|
52
57
|
|
|
53
|
-
interpretResponse: function(serverResponse
|
|
58
|
+
interpretResponse: function(serverResponse) {
|
|
54
59
|
let bids = [];
|
|
55
|
-
|
|
56
60
|
if (isArray(serverResponse.body)) {
|
|
57
61
|
_each(serverResponse.body, function(placementResponse) {
|
|
58
|
-
interpretResponse(placementResponse,
|
|
62
|
+
interpretResponse(placementResponse, bids);
|
|
59
63
|
});
|
|
60
64
|
}
|
|
61
|
-
|
|
62
65
|
return bids;
|
|
63
66
|
},
|
|
64
67
|
|
|
@@ -4,7 +4,7 @@ Module Name: Bedigitech Bidder Adapter
|
|
|
4
4
|
|
|
5
5
|
Module Type: Bidder Adapter
|
|
6
6
|
|
|
7
|
-
Maintainer:
|
|
7
|
+
Maintainer: prebid@bedigitech.com
|
|
8
8
|
|
|
9
9
|
# Description
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ About us : https://www.bedigitech.com/
|
|
|
23
23
|
{
|
|
24
24
|
bidder: "bedigitech",
|
|
25
25
|
params: {
|
|
26
|
-
placementId:
|
|
26
|
+
placementId: 309
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
]
|
|
@@ -129,8 +129,6 @@ function buildTrackingParams(data, info, value) {
|
|
|
129
129
|
nptnid: params.networkPartnerId,
|
|
130
130
|
bid: data.bidId || data.requestId,
|
|
131
131
|
sl_n: data.adUnitCode,
|
|
132
|
-
// TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
|
|
133
|
-
aid: data.auctionId,
|
|
134
132
|
se_ca: 'bid',
|
|
135
133
|
se_ac: info,
|
|
136
134
|
se_va: value,
|
|
@@ -158,8 +156,6 @@ function beOpRequestSlotsMaker(bid) {
|
|
|
158
156
|
bid: getBidIdParameter('bidId', bid),
|
|
159
157
|
brid: getBidIdParameter('bidderRequestId', bid),
|
|
160
158
|
name: getBidIdParameter('adUnitCode', bid),
|
|
161
|
-
// TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
|
|
162
|
-
aid: getBidIdParameter('auctionId', bid),
|
|
163
159
|
tid: bid.ortb2Imp?.ext?.tid || '',
|
|
164
160
|
brc: getBidIdParameter('bidRequestsCount', bid),
|
|
165
161
|
bdrc: getBidIdParameter('bidderRequestCount', bid),
|
|
@@ -77,7 +77,8 @@ function cleanAuctionEnd(args) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
function cleanCreatives(args) {
|
|
80
|
-
|
|
80
|
+
let stringArgs = JSON.parse(dereferenceWithoutRenderer(args));
|
|
81
|
+
return filterAttributes(stringArgs, false);
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
function enhanceMediaType(arg) {
|
|
@@ -93,7 +94,7 @@ function enhanceMediaType(arg) {
|
|
|
93
94
|
|
|
94
95
|
function addBidResponse(args) {
|
|
95
96
|
let eventType = BID_RESPONSE;
|
|
96
|
-
let argsCleaned = cleanCreatives(
|
|
97
|
+
let argsCleaned = cleanCreatives(args); ;
|
|
97
98
|
if (allEvents[eventType] == undefined) { allEvents[eventType] = [] }
|
|
98
99
|
allEvents[eventType].push(argsCleaned);
|
|
99
100
|
}
|
|
@@ -110,7 +111,9 @@ function addTimeout(args) {
|
|
|
110
111
|
if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
|
|
111
112
|
saveEvents[eventType].push(args);
|
|
112
113
|
let argsCleaned = [];
|
|
113
|
-
let argsDereferenced =
|
|
114
|
+
let argsDereferenced = {}
|
|
115
|
+
let stringArgs = JSON.parse(dereferenceWithoutRenderer(args));
|
|
116
|
+
argsDereferenced = stringArgs;
|
|
114
117
|
argsDereferenced.forEach((attr) => {
|
|
115
118
|
argsCleaned.push(filterAttributes(JSON.parse(JSON.stringify(attr)), false));
|
|
116
119
|
});
|
|
@@ -118,17 +121,42 @@ function addTimeout(args) {
|
|
|
118
121
|
auctionEnd[eventType].push(argsCleaned);
|
|
119
122
|
}
|
|
120
123
|
|
|
124
|
+
export const dereferenceWithoutRenderer = function(args) {
|
|
125
|
+
if (args.renderer) {
|
|
126
|
+
let tmp = args.renderer;
|
|
127
|
+
delete args.renderer;
|
|
128
|
+
let stringified = JSON.stringify(args);
|
|
129
|
+
args['renderer'] = tmp;
|
|
130
|
+
return stringified;
|
|
131
|
+
}
|
|
132
|
+
if (args.bidsReceived) {
|
|
133
|
+
let tmp = {}
|
|
134
|
+
for (let key in args.bidsReceived) {
|
|
135
|
+
if (args.bidsReceived[key].renderer) {
|
|
136
|
+
tmp[key] = args.bidsReceived[key].renderer;
|
|
137
|
+
delete args.bidsReceived[key].renderer;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
let stringified = JSON.stringify(args);
|
|
141
|
+
for (let key in tmp) {
|
|
142
|
+
args.bidsReceived[key].renderer = tmp[key];
|
|
143
|
+
}
|
|
144
|
+
return stringified;
|
|
145
|
+
}
|
|
146
|
+
return JSON.stringify(args);
|
|
147
|
+
}
|
|
148
|
+
|
|
121
149
|
function addAuctionEnd(args) {
|
|
122
150
|
let eventType = AUCTION_END;
|
|
123
151
|
if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
|
|
124
152
|
saveEvents[eventType].push(args);
|
|
125
|
-
let argsCleaned = cleanAuctionEnd(JSON.parse(
|
|
153
|
+
let argsCleaned = cleanAuctionEnd(JSON.parse(dereferenceWithoutRenderer(args)));
|
|
126
154
|
if (auctionEnd[eventType] == undefined) { auctionEnd[eventType] = [] }
|
|
127
155
|
auctionEnd[eventType].push(argsCleaned);
|
|
128
156
|
}
|
|
129
157
|
|
|
130
158
|
function handleBidWon(args) {
|
|
131
|
-
args = enhanceMediaType(filterAttributes(JSON.parse(
|
|
159
|
+
args = enhanceMediaType(filterAttributes(JSON.parse(dereferenceWithoutRenderer(args)), true));
|
|
132
160
|
let increment = args['cpm'];
|
|
133
161
|
if (typeof saveEvents['auctionEnd'] == 'object') {
|
|
134
162
|
saveEvents['auctionEnd'].forEach((auction) => {
|
|
@@ -116,6 +116,15 @@ export const spec = {
|
|
|
116
116
|
request.gdpr_consent = bidderRequest.gdprConsent.consentString || 'ALL';
|
|
117
117
|
request.gdpr_require = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
|
|
118
118
|
}
|
|
119
|
+
|
|
120
|
+
// Add GPP consent
|
|
121
|
+
if (bidderRequest.gppConsent) {
|
|
122
|
+
request.gpp = bidderRequest.gppConsent.gppString;
|
|
123
|
+
request.gpp_sid = bidderRequest.gppConsent.applicableSections;
|
|
124
|
+
} else if (bidderRequest.ortb2?.regs?.gpp) {
|
|
125
|
+
request.gpp = bidderRequest.ortb2.regs.gpp;
|
|
126
|
+
request.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
|
|
127
|
+
}
|
|
119
128
|
}
|
|
120
129
|
|
|
121
130
|
for (let i = 0; i < validBidRequests.length; i++) {
|
|
@@ -45,10 +45,13 @@ export const spec = {
|
|
|
45
45
|
},
|
|
46
46
|
|
|
47
47
|
interpretResponse: function (serverResponse, bidRequest) {
|
|
48
|
-
const bidResponsesFromServer = serverResponse.body.bidResponses;
|
|
49
|
-
const firstDummy = bidResponsesFromServer[0]
|
|
50
|
-
const firstSeat = firstDummy.ads[0]
|
|
51
48
|
const bidResponses = [];
|
|
49
|
+
const bidResponsesFromServer = serverResponse.body.bidResponses;
|
|
50
|
+
if (Array.isArray(bidResponsesFromServer) && bidResponsesFromServer.length === 0) {
|
|
51
|
+
return bidResponses
|
|
52
|
+
}
|
|
53
|
+
const firstBid = bidResponsesFromServer[0]
|
|
54
|
+
const firstSeat = firstBid.ads[0]
|
|
52
55
|
const bidResponse = {
|
|
53
56
|
requestId: firstSeat.requestId,
|
|
54
57
|
cpm: firstSeat.cpm,
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import {logMessage} from '../src/utils.js';
|
|
3
|
+
import {BANNER} from '../src/mediaTypes.js';
|
|
4
|
+
import {ortbConverter} from '../libraries/ortbConverter/converter.js'
|
|
5
|
+
|
|
6
|
+
const BIDDER_SERVICE_URL = 'https://bidding-dsp.ad-m.asia/dsp/api/bid/s/s/freepass';
|
|
7
|
+
|
|
8
|
+
const converter = ortbConverter({
|
|
9
|
+
context: {
|
|
10
|
+
netRevenue: true,
|
|
11
|
+
ttl: 30
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
function prepareUserInfo(user, freepassId) {
|
|
16
|
+
let userInfo = user || {};
|
|
17
|
+
let extendedUserInfo = userInfo.ext || {};
|
|
18
|
+
|
|
19
|
+
if (freepassId.userId) {
|
|
20
|
+
userInfo.id = freepassId.userId;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (freepassId.commonId) {
|
|
24
|
+
extendedUserInfo.fuid = freepassId.commonId;
|
|
25
|
+
}
|
|
26
|
+
userInfo.ext = extendedUserInfo;
|
|
27
|
+
|
|
28
|
+
return userInfo;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function prepareDeviceInfo(device, freepassId) {
|
|
32
|
+
let deviceInfo = device || {};
|
|
33
|
+
let extendedDeviceInfo = deviceInfo.ext || {};
|
|
34
|
+
|
|
35
|
+
extendedDeviceInfo.is_accurate_ip = 0;
|
|
36
|
+
if (freepassId.userIp) {
|
|
37
|
+
deviceInfo.ip = freepassId.userIp;
|
|
38
|
+
extendedDeviceInfo.is_accurate_ip = 1;
|
|
39
|
+
}
|
|
40
|
+
deviceInfo.ext = extendedDeviceInfo;
|
|
41
|
+
|
|
42
|
+
return deviceInfo;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const spec = {
|
|
46
|
+
code: 'freepass',
|
|
47
|
+
supportedMediaTypes: [BANNER],
|
|
48
|
+
|
|
49
|
+
isBidRequestValid(bid) {
|
|
50
|
+
logMessage('Validating bid: ', bid);
|
|
51
|
+
return !!bid.adUnitCode;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
buildRequests(validBidRequests, bidderRequest) {
|
|
55
|
+
if (validBidRequests.length === 0) {
|
|
56
|
+
logMessage('FreePass BidAdapter has no valid bid requests');
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
logMessage('FreePass BidAdapter is preparing bid request: ', validBidRequests);
|
|
61
|
+
logMessage('FreePass BidAdapter is using bidder request: ', bidderRequest);
|
|
62
|
+
|
|
63
|
+
const data = converter.toORTB({
|
|
64
|
+
bidderRequest: bidderRequest,
|
|
65
|
+
bidRequests: validBidRequests,
|
|
66
|
+
context: { mediaType: BANNER }
|
|
67
|
+
});
|
|
68
|
+
logMessage('FreePass BidAdapter interpreted ORTB bid request as ', data);
|
|
69
|
+
|
|
70
|
+
// Only freepassId is supported
|
|
71
|
+
let freepassId = (validBidRequests[0].userId && validBidRequests[0].userId.freepassId) || {};
|
|
72
|
+
data.user = prepareUserInfo(data.user, freepassId);
|
|
73
|
+
data.device = prepareDeviceInfo(data.device, freepassId);
|
|
74
|
+
|
|
75
|
+
data.test = validBidRequests[0].test || 0;
|
|
76
|
+
|
|
77
|
+
logMessage('FreePass BidAdapter augmented ORTB bid request user: ', data.user);
|
|
78
|
+
logMessage('FreePass BidAdapter augmented ORTB bid request device: ', data.device);
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
url: BIDDER_SERVICE_URL,
|
|
83
|
+
data,
|
|
84
|
+
options: { withCredentials: false }
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
interpretResponse(serverResponse, bidRequest) {
|
|
89
|
+
logMessage('FreePass BidAdapter is interpreting server response: ', serverResponse);
|
|
90
|
+
logMessage('FreePass BidAdapter is using bid request: ', bidRequest);
|
|
91
|
+
const bids = converter.fromORTB({response: serverResponse.body, request: bidRequest.data}).bids;
|
|
92
|
+
logMessage('FreePass BidAdapter interpreted ORTB bids as ', bids);
|
|
93
|
+
|
|
94
|
+
return bids;
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: FreePass Bidder Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: fp-hbidding@freebit.net
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Connects to FreePass service for bids. Only BANNER is currently supported.
|
|
12
|
+
|
|
13
|
+
This BidAdapter requires the FreePass IdSystem to be configured. Please contact FreePass for proper setup.
|
|
14
|
+
|
|
15
|
+
# Test Parameters
|
|
16
|
+
```javascript
|
|
17
|
+
let adUnits = [
|
|
18
|
+
{
|
|
19
|
+
code: 'ad-banner-1', // ad slot HTML element ID
|
|
20
|
+
mediaTypes: {
|
|
21
|
+
banner: {
|
|
22
|
+
sizes: [[1024, 1024]]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
bids: [{
|
|
26
|
+
bidder: 'freepass'
|
|
27
|
+
}]
|
|
28
|
+
}
|
|
29
|
+
];
|
|
30
|
+
```
|
|
31
|
+
|
|
@@ -9,7 +9,7 @@ Please contact FreePass before using this ID.
|
|
|
9
9
|
```
|
|
10
10
|
Module Name: FreePass Id System
|
|
11
11
|
Module Type: User Id System
|
|
12
|
-
Maintainer:
|
|
12
|
+
Maintainer: fp-hbidding@freebit.net
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Building Prebid with FreePass ID Support
|
|
@@ -44,10 +44,6 @@ export const greenbidsAnalyticsAdapter = Object.assign(adapter({ANALYTICS_SERVER
|
|
|
44
44
|
logError('"options.pbuid" is required.');
|
|
45
45
|
return false;
|
|
46
46
|
}
|
|
47
|
-
analyticsOptions.sampled = true;
|
|
48
|
-
if (typeof config.options.sampling === 'number') {
|
|
49
|
-
analyticsOptions.sampled = Math.random() < parseFloat(config.options.sampling);
|
|
50
|
-
}
|
|
51
47
|
|
|
52
48
|
analyticsOptions.pbuid = config.options.pbuid
|
|
53
49
|
analyticsOptions.server = ANALYTICS_SERVER;
|
|
@@ -149,15 +145,13 @@ export const greenbidsAnalyticsAdapter = Object.assign(adapter({ANALYTICS_SERVER
|
|
|
149
145
|
});
|
|
150
146
|
},
|
|
151
147
|
track({eventType, args}) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
148
|
+
switch (eventType) {
|
|
149
|
+
case BID_TIMEOUT:
|
|
150
|
+
this.handleBidTimeout(args);
|
|
151
|
+
break;
|
|
152
|
+
case AUCTION_END:
|
|
153
|
+
this.handleAuctionEnd(args);
|
|
154
|
+
break;
|
|
161
155
|
}
|
|
162
156
|
},
|
|
163
157
|
getAnalyticsOptions() {
|
|
@@ -26,10 +26,9 @@ const RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js
|
|
|
26
26
|
export const storage = getStorageManager({ bidderCode: BIDDER_CODE });
|
|
27
27
|
|
|
28
28
|
const LOG_ERROR_MESS = {
|
|
29
|
-
|
|
29
|
+
noAdid: 'Bid from response has no adid parameter - ',
|
|
30
30
|
noAdm: 'Bid from response has no adm parameter - ',
|
|
31
31
|
noBid: 'Array of bid objects is empty',
|
|
32
|
-
noPlacementCode: 'Can\'t find in requested bids the bid with auid - ',
|
|
33
32
|
emptyUids: 'Uids should be not empty',
|
|
34
33
|
emptySeatbid: 'Seatbid array from response has empty item',
|
|
35
34
|
emptyResponse: 'Response is empty',
|
|
@@ -507,7 +506,7 @@ function _getBidFromResponse(respItem) {
|
|
|
507
506
|
function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bidderCode) {
|
|
508
507
|
if (!serverBid) return;
|
|
509
508
|
let errorMessage;
|
|
510
|
-
if (!serverBid.
|
|
509
|
+
if (!serverBid.adid) errorMessage = LOG_ERROR_MESS.noAdid + JSON.stringify(serverBid);
|
|
511
510
|
if (!errorMessage && !serverBid.adm && !serverBid.nurl) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);
|
|
512
511
|
else {
|
|
513
512
|
const bidObject = bidRequest.bidsMap ? bidRequest.bidsMap[serverBid.impid] : bidRequest.bidObject;
|
|
@@ -518,7 +517,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
|
|
|
518
517
|
cpm: serverBid.price,
|
|
519
518
|
width: serverBid.w,
|
|
520
519
|
height: serverBid.h,
|
|
521
|
-
creativeId: serverBid.
|
|
520
|
+
creativeId: serverBid.adid,
|
|
522
521
|
currency: 'USD',
|
|
523
522
|
netRevenue: true,
|
|
524
523
|
ttl: TIME_TO_LIVE,
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
import { logError, logInfo } from '../src/utils.js';
|
|
9
9
|
import { ajax } from '../src/ajax.js';
|
|
10
10
|
import { submodule } from '../src/hook.js'
|
|
11
|
-
import {getStorageManager} from '../src/storageManager.js';
|
|
12
|
-
import {MODULE_TYPE_UID} from '../src/activities/modules.js';
|
|
11
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
12
|
+
import { MODULE_TYPE_UID } from '../src/activities/modules.js';
|
|
13
13
|
|
|
14
14
|
const PCID_EXPIRY = 365;
|
|
15
15
|
|
|
@@ -124,9 +124,9 @@ export const intentIqIdSubmodule = {
|
|
|
124
124
|
|
|
125
125
|
// Read Intent IQ 1st party id or generate it if none exists
|
|
126
126
|
let firstPartyData = tryParse(readData(FIRST_PARTY_KEY));
|
|
127
|
-
if (!firstPartyData || !firstPartyData.pcid) {
|
|
127
|
+
if (!firstPartyData || !firstPartyData.pcid || firstPartyData.pcidDate) {
|
|
128
128
|
const firstPartyId = generateGUID();
|
|
129
|
-
firstPartyData = { 'pcid': firstPartyId };
|
|
129
|
+
firstPartyData = { 'pcid': firstPartyId, 'pcidDate': Date.now() };
|
|
130
130
|
storeData(FIRST_PARTY_KEY, JSON.stringify(firstPartyData));
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -141,6 +141,7 @@ export const intentIqIdSubmodule = {
|
|
|
141
141
|
url += firstPartyData.pid ? '&pid=' + encodeURIComponent(firstPartyData.pid) : '';
|
|
142
142
|
url += (partnerData.cttl) ? '&cttl=' + encodeURIComponent(partnerData.cttl) : '';
|
|
143
143
|
url += (partnerData.rrtt) ? '&rrtt=' + encodeURIComponent(partnerData.rrtt) : '';
|
|
144
|
+
url += firstPartyData.pcidDate ? '&iiqpciddate=' + encodeURIComponent(firstPartyData.pcidDate) : '';
|
|
144
145
|
|
|
145
146
|
const resp = function (callback) {
|
|
146
147
|
const callbacks = {
|