From c8fa08ad648862661a6a195a1b58c361e08c5d02 Mon Sep 17 00:00:00 2001
From: NeerajKrRai <55957265+NeerajKrRai@users.noreply.github.com>
Date: Wed, 7 Jul 2021 14:01:27 +0100
Subject: [PATCH] Changes to support Prebid 5.0 API Change
Changes for:
Adapter does not seem capable of supporting advertiserDomains #6650
Support video params at the adunit level #6512
Bid adapters that support floors must support the floors module #6465
---
integrationExamples/gpt/TestAvngAdapter.html | 93 ++++
.../gpt/pbjs_video_adUnit_Avng.html | 115 +++++
modules/advangelistsBidAdapter.js | 42 +-
modules/advangelistsBidAdapter.md | 15 +-
modules/advangelistsBidAdapter_bkp.md | 65 +++
modules/new_adkernel.js | 456 ++++++++++++++++++
modules/old.json | 77 +++
.../modules/advangelistsBidAdapter_spec.js | 8 +-
8 files changed, 847 insertions(+), 24 deletions(-)
create mode 100644 integrationExamples/gpt/TestAvngAdapter.html
create mode 100644 integrationExamples/gpt/pbjs_video_adUnit_Avng.html
create mode 100644 modules/advangelistsBidAdapter_bkp.md
create mode 100644 modules/new_adkernel.js
create mode 100644 modules/old.json
diff --git a/integrationExamples/gpt/TestAvngAdapter.html b/integrationExamples/gpt/TestAvngAdapter.html
new file mode 100644
index 00000000000..f3165f8d89f
--- /dev/null
+++ b/integrationExamples/gpt/TestAvngAdapter.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Prebid.js Test
+Div-1
+
+
+
+
+
\ No newline at end of file
diff --git a/integrationExamples/gpt/pbjs_video_adUnit_Avng.html b/integrationExamples/gpt/pbjs_video_adUnit_Avng.html
new file mode 100644
index 00000000000..df3a621e011
--- /dev/null
+++ b/integrationExamples/gpt/pbjs_video_adUnit_Avng.html
@@ -0,0 +1,115 @@
+
+
+
+
+ Prebid.js video adUnit example1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/advangelistsBidAdapter.js b/modules/advangelistsBidAdapter.js
index 746baa9ae35..ef1b9d323d5 100755
--- a/modules/advangelistsBidAdapter.js
+++ b/modules/advangelistsBidAdapter.js
@@ -11,7 +11,7 @@ const BIDDER_CODE = 'advangelists';
export const VIDEO_ENDPOINT = 'https://nep.advangelists.com/xp/get?pubid=';// 0cf8d6d643e13d86a5b6374148a4afac';
export const BANNER_ENDPOINT = 'https://nep.advangelists.com/xp/get?pubid=';// 0cf8d6d643e13d86a5b6374148a4afac';
export const OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js';
-export const VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'skip'];
+export const VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'skip', 'playerSize', 'context'];
export const DEFAULT_MIMES = ['video/mp4', 'application/javascript'];
let pubid = '';
@@ -66,6 +66,7 @@ export const spec = {
height: response.seatbid[0].bid[0].h,
ttl: response.seatbid[0].bid[0].ttl || 60,
creativeId: response.seatbid[0].bid[0].crid,
+ meta: { 'advertiserDomains': response.seatbid[0].bid[0].adomain },
currency: response.cur,
mediaType: VIDEO,
netRevenue: true
@@ -92,6 +93,7 @@ export const spec = {
ttl: response.seatbid[0].bid[0].ttl || 60,
creativeId: response.seatbid[0].bid[0].crid,
currency: response.cur,
+ meta: { 'advertiserDomains': response.seatbid[0].bid[0].adomain },
mediaType: BANNER,
netRevenue: true
}
@@ -108,6 +110,16 @@ function isVideoBid(bid) {
return utils.deepAccess(bid, 'mediaTypes.video');
}
+function getBannerBidFloor(bid) {
+ let floorInfo = utils.isFn(bid.getFloor) ? bid.getFloor({ currency: 'USD', mediaType: 'banner', size: '*' }) : {};
+ return floorInfo.floor || getBannerBidParam(bid, 'bidfloor');
+}
+
+function getVideoBidFloor(bid) {
+ let floorInfo = utils.isFn(bid.getFloor) ? bid.getFloor({ currency: 'USD', mediaType: 'video', size: '*' }) : {};
+ return floorInfo.floor || getVideoBidParam(bid, 'bidfloor');
+}
+
function isVideoBidValid(bid) {
return isVideoBid(bid) && getVideoBidParam(bid, 'pubid') && getVideoBidParam(bid, 'placement');
}
@@ -198,12 +210,19 @@ function getTopWindowReferrer() {
}
function getVideoTargetingParams(bid) {
- return Object.keys(Object(bid.params.video))
- .filter(param => includes(VIDEO_TARGETING, param))
- .reduce((obj, param) => {
- obj[ param ] = bid.params.video[ param ];
- return obj;
- }, {});
+ const result = {};
+ const excludeProps = ['playerSize', 'context', 'w', 'h'];
+ Object.keys(Object(bid.mediaTypes.video))
+ .filter(key => !includes(excludeProps, key))
+ .forEach(key => {
+ result[ key ] = bid.mediaTypes.video[ key ];
+ });
+ Object.keys(Object(bid.params.video))
+ .filter(key => includes(VIDEO_TARGETING, key))
+ .forEach(key => {
+ result[ key ] = bid.params.video[ key ];
+ });
+ return result;
}
function createVideoRequestData(bid, bidderRequest) {
@@ -212,7 +231,7 @@ function createVideoRequestData(bid, bidderRequest) {
let sizes = getVideoSizes(bid);
let firstSize = getFirstSize(sizes);
-
+ let bidfloor = (getVideoBidFloor(bid) == null || typeof getVideoBidFloor(bid) == 'undefined') ? 2 : getVideoBidFloor(bid);
let video = getVideoTargetingParams(bid);
const o = {
'device': {
@@ -239,7 +258,6 @@ function createVideoRequestData(bid, bidderRequest) {
};
o.site['page'] = topLocation.href;
- o.site['domain'] = topLocation.hostname;
o.site['search'] = topLocation.search;
o.site['domain'] = topLocation.hostname;
o.site['ref'] = topReferrer;
@@ -267,7 +285,7 @@ function createVideoRequestData(bid, bidderRequest) {
'displaymanager': '' + BIDDER_CODE,
'displaymanagerver': '' + ADAPTER_VERSION,
'tagId': placement,
- 'bidfloor': 2.0,
+ 'bidfloor': bidfloor,
'bidfloorcur': 'USD',
'secure': secure,
'video': Object.assign({
@@ -300,6 +318,7 @@ function createBannerRequestData(bid, bidderRequest) {
let topReferrer = getTopWindowReferrer();
let sizes = getBannerSizes(bid);
+ let bidfloor = (getBannerBidFloor(bid) == null || typeof getBannerBidFloor(bid) == 'undefined') ? 2 : getBannerBidFloor(bid);
const o = {
'device': {
@@ -327,7 +346,6 @@ function createBannerRequestData(bid, bidderRequest) {
o.site['page'] = topLocation.href;
o.site['domain'] = topLocation.hostname;
o.site['search'] = topLocation.search;
- o.site['domain'] = topLocation.hostname;
o.site['ref'] = topReferrer;
o.site['mobile'] = isMobile() ? 1 : 0;
const secure = topLocation.protocol.indexOf('https') === 0 ? 1 : 0;
@@ -354,7 +372,7 @@ function createBannerRequestData(bid, bidderRequest) {
'displaymanager': '' + BIDDER_CODE,
'displaymanagerver': '' + ADAPTER_VERSION,
'tagId': placement,
- 'bidfloor': 2.0,
+ 'bidfloor': bidfloor,
'bidfloorcur': 'USD',
'secure': secure,
'banner': {
diff --git a/modules/advangelistsBidAdapter.md b/modules/advangelistsBidAdapter.md
index 1765241eaf3..0c36fe0cb04 100755
--- a/modules/advangelistsBidAdapter.md
+++ b/modules/advangelistsBidAdapter.md
@@ -42,7 +42,11 @@ var videoAdUnit = {
mediaTypes: {
video: {
playerSize : [[320, 480]],
- context: 'instream'
+ context: 'instream',
+ skip: 1,
+ mimes : ['video/mp4', 'application/javascript'],
+ playbackmethod : [2,6],
+ maxduration: 30
}
},
bids: [
@@ -50,14 +54,7 @@ var videoAdUnit = {
bidder: 'advangelists',
params: {
pubid: '8537f00948fc37cc03c5f0f88e198a76',
- placement: 1234,
- video: {
- id: 123,
- skip: 1,
- mimes : ['video/mp4', 'application/javascript'],
- playbackmethod : [2,6],
- maxduration: 30
- }
+ placement: 1234
}
}
]
diff --git a/modules/advangelistsBidAdapter_bkp.md b/modules/advangelistsBidAdapter_bkp.md
new file mode 100644
index 00000000000..1765241eaf3
--- /dev/null
+++ b/modules/advangelistsBidAdapter_bkp.md
@@ -0,0 +1,65 @@
+# Overview
+
+```
+Module Name: Advangelists Bidder Adapter
+Module Type: Bidder Adapter
+Maintainer: lokesh@advangelists.com
+```
+
+# Description
+
+Connects to Advangelists exchange for bids.
+
+Advangelists bid adapter supports Banner and Video ads currently.
+
+For more informatio
+
+# Sample Display Ad Unit: For Publishers
+```javascript
+var displayAdUnit = [
+{
+ code: 'display',
+ sizes: [
+ [300, 250],
+ [320, 50]
+ ],
+ bids: [{
+ bidder: 'advangelists',
+ params: {
+ pubid: '0cf8d6d643e13d86a5b6374148a4afac',
+ placement: 1234
+ }
+ }]
+}];
+```
+
+# Sample Video Ad Unit: For Publishers
+```javascript
+
+var videoAdUnit = {
+ code: 'video',
+ sizes: [320,480],
+ mediaTypes: {
+ video: {
+ playerSize : [[320, 480]],
+ context: 'instream'
+ }
+ },
+ bids: [
+ {
+ bidder: 'advangelists',
+ params: {
+ pubid: '8537f00948fc37cc03c5f0f88e198a76',
+ placement: 1234,
+ video: {
+ id: 123,
+ skip: 1,
+ mimes : ['video/mp4', 'application/javascript'],
+ playbackmethod : [2,6],
+ maxduration: 30
+ }
+ }
+ }
+ ]
+ };
+```
\ No newline at end of file
diff --git a/modules/new_adkernel.js b/modules/new_adkernel.js
new file mode 100644
index 00000000000..1bff77f29ce
--- /dev/null
+++ b/modules/new_adkernel.js
@@ -0,0 +1,456 @@
+import * as utils from '../src/utils.js';
+import { config } from '../src/config.js';
+import { registerBidder } from '../src/adapters/bidderFactory.js';
+import { Renderer } from '../src/Renderer.js';
+import { VIDEO, BANNER } from '../src/mediaTypes.js';
+import find from 'core-js-pure/features/array/find.js';
+import includes from 'core-js-pure/features/array/includes.js';
+
+const ADAPTER_VERSION = '1.16';
+const ADAPTER_NAME = 'BFIO_PREBID';
+const OUTSTREAM = 'outstream';
+const CURRENCY = 'USD';
+
+export const VIDEO_ENDPOINT = 'https://reachms.bfmio.com/bid.json?exchange_id=';
+export const BANNER_ENDPOINT = 'https://display.bfmio.com/prebid_display';
+export const OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js';
+
+export const VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'placement', 'skip', 'skipmin', 'skipafter'];
+export const DEFAULT_MIMES = ['video/mp4', 'application/javascript'];
+
+export const SUPPORTED_USER_IDS = [
+ { key: 'tdid', source: 'adserver.org', rtiPartner: 'TDID', queryParam: 'tdid' },
+ { key: 'idl_env', source: 'liveramp.com', rtiPartner: 'idl', queryParam: 'idl' },
+ { key: 'uid2.id', source: 'uidapi.com', rtiPartner: 'UID2', queryParam: 'uid2' }
+];
+
+let appId = '';
+
+export const spec = {
+ code: 'beachfront',
+ supportedMediaTypes: [ VIDEO, BANNER ],
+
+ isBidRequestValid(bid) {
+ return !!(isVideoBidValid(bid) || isBannerBidValid(bid));
+ },
+
+ buildRequests(bids, bidderRequest) {
+ let requests = [];
+ let videoBids = bids.filter(bid => isVideoBidValid(bid));
+ let bannerBids = bids.filter(bid => isBannerBidValid(bid));
+ videoBids.forEach(bid => {
+ appId = getVideoBidParam(bid, 'appId');
+ requests.push({
+ method: 'POST',
+ url: VIDEO_ENDPOINT + appId,
+ data: createVideoRequestData(bid, bidderRequest),
+ bidRequest: bid
+ });
+ });
+ if (bannerBids.length) {
+ appId = getBannerBidParam(bannerBids[0], 'appId');
+ requests.push({
+ method: 'POST',
+ url: BANNER_ENDPOINT,
+ data: createBannerRequestData(bannerBids, bidderRequest),
+ bidRequest: bannerBids
+ });
+ }
+ return requests;
+ },
+
+ interpretResponse(response, { bidRequest }) {
+ response = response.body;
+
+ if (isVideoBid(bidRequest)) {
+ if (!response || !response.bidPrice) {
+ utils.logWarn(`No valid video bids from ${spec.code} bidder`);
+ return [];
+ }
+ let sizes = getVideoSizes(bidRequest);
+ let firstSize = getFirstSize(sizes);
+ let context = utils.deepAccess(bidRequest, 'mediaTypes.video.context');
+ let responseType = getVideoBidParam(bidRequest, 'responseType') || 'both';
+ let responseMeta = Object.assign({ mediaType: VIDEO, advertiserDomains: [] }, response.meta);
+ let bidResponse = {
+ requestId: bidRequest.bidId,
+ bidderCode: spec.code,
+ cpm: response.bidPrice,
+ width: firstSize.w,
+ height: firstSize.h,
+ creativeId: response.crid || response.cmpId,
+ meta: responseMeta,
+ renderer: context === OUTSTREAM ? createRenderer(bidRequest) : null,
+ mediaType: VIDEO,
+ currency: CURRENCY,
+ netRevenue: true,
+ ttl: 300
+ };
+
+ if (responseType === 'nurl' || responseType === 'both') {
+ bidResponse.vastUrl = response.url;
+ }
+
+ if (responseType === 'adm' || responseType === 'both') {
+ bidResponse.vastXml = response.vast;
+ }
+
+ return bidResponse;
+ } else {
+ if (!response || !response.length) {
+ utils.logWarn(`No valid banner bids from ${spec.code} bidder`);
+ return [];
+ }
+ return response
+ .filter(bid => bid.adm)
+ .map((bid) => {
+ let request = find(bidRequest, req => req.adUnitCode === bid.slot);
+ let responseMeta = Object.assign({ mediaType: BANNER, advertiserDomains: [] }, bid.meta);
+ return {
+ requestId: request.bidId,
+ bidderCode: spec.code,
+ ad: bid.adm,
+ creativeId: bid.crid,
+ cpm: bid.price,
+ width: bid.w,
+ height: bid.h,
+ meta: responseMeta,
+ mediaType: BANNER,
+ currency: CURRENCY,
+ netRevenue: true,
+ ttl: 300
+ };
+ });
+ }
+ },
+
+ getUserSyncs(syncOptions, serverResponses = [], gdprConsent = {}, uspConsent = '') {
+ let syncs = [];
+ let { gdprApplies, consentString = '' } = gdprConsent;
+ let bannerResponse = find(serverResponses, (res) => utils.isArray(res.body));
+
+ if (bannerResponse) {
+ if (syncOptions.iframeEnabled) {
+ bannerResponse.body
+ .filter(bid => bid.sync)
+ .forEach(bid => {
+ syncs.push({
+ type: 'iframe',
+ url: bid.sync
+ });
+ });
+ }
+ } else if (syncOptions.iframeEnabled) {
+ syncs.push({
+ type: 'iframe',
+ url: `https://sync.bfmio.com/sync_iframe?ifg=1&id=${appId}&gdpr=${gdprApplies ? 1 : 0}&gc=${consentString}&gce=1&us_privacy=${uspConsent}`
+ });
+ } else if (syncOptions.pixelEnabled) {
+ syncs.push({
+ type: 'image',
+ url: `https://sync.bfmio.com/syncb?pid=144&id=${appId}&gdpr=${gdprApplies ? 1 : 0}&gc=${consentString}&gce=1&us_privacy=${uspConsent}`
+ });
+ }
+
+ return syncs;
+ }
+};
+
+function createRenderer(bidRequest) {
+ const renderer = Renderer.install({
+ id: bidRequest.bidId,
+ url: OUTSTREAM_SRC,
+ loaded: false
+ });
+
+ renderer.setRender(bid => {
+ bid.renderer.push(() => {
+ window.Beachfront.Player(bid.adUnitCode, {
+ adTagUrl: bid.vastUrl,
+ width: bid.width,
+ height: bid.height,
+ expandInView: getPlayerBidParam(bidRequest, 'expandInView', false),
+ collapseOnComplete: getPlayerBidParam(bidRequest, 'collapseOnComplete', true),
+ progressColor: getPlayerBidParam(bidRequest, 'progressColor'),
+ adPosterColor: getPlayerBidParam(bidRequest, 'adPosterColor')
+ });
+ });
+ });
+
+ return renderer;
+}
+
+function getFirstSize(sizes) {
+ return (sizes && sizes.length) ? sizes[0] : { w: undefined, h: undefined };
+}
+
+function parseSizes(sizes) {
+ return utils.parseSizesInput(sizes).map(size => {
+ let [ width, height ] = size.split('x');
+ return {
+ w: parseInt(width, 10) || undefined,
+ h: parseInt(height, 10) || undefined
+ };
+ });
+}
+
+function getVideoSizes(bid) {
+ return parseSizes(utils.deepAccess(bid, 'mediaTypes.video.playerSize') || bid.sizes);
+}
+
+function getBannerSizes(bid) {
+ return parseSizes(utils.deepAccess(bid, 'mediaTypes.banner.sizes') || bid.sizes);
+}
+
+function getOsVersion() {
+ let clientStrings = [
+ { s: 'Android', r: /Android/ },
+ { s: 'iOS', r: /(iPhone|iPad|iPod)/ },
+ { s: 'Mac OS X', r: /Mac OS X/ },
+ { s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
+ { s: 'Linux', r: /(Linux|X11)/ },
+ { s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/ },
+ { s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ },
+ { s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ },
+ { s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ },
+ { s: 'Windows Vista', r: /Windows NT 6.0/ },
+ { s: 'Windows Server 2003', r: /Windows NT 5.2/ },
+ { s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ },
+ { s: 'UNIX', r: /UNIX/ },
+ { s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }
+ ];
+ let cs = find(clientStrings, cs => cs.r.test(navigator.userAgent));
+ return cs ? cs.s : 'unknown';
+}
+
+function isMobile() {
+ return (/(ios|ipod|ipad|iphone|android)/i).test(navigator.userAgent);
+}
+
+function isConnectedTV() {
+ return (/(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i).test(navigator.userAgent);
+}
+
+function getDoNotTrack() {
+ return navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.msDoNoTrack === '1' || navigator.doNotTrack === 'yes';
+}
+
+function isVideoBid(bid) {
+ return utils.deepAccess(bid, 'mediaTypes.video');
+}
+
+function isBannerBid(bid) {
+ return utils.deepAccess(bid, 'mediaTypes.banner') || !isVideoBid(bid);
+}
+
+function getVideoBidParam(bid, key) {
+ return utils.deepAccess(bid, 'params.video.' + key) || utils.deepAccess(bid, 'params.' + key);
+}
+
+function getBannerBidParam(bid, key) {
+ return utils.deepAccess(bid, 'params.banner.' + key) || utils.deepAccess(bid, 'params.' + key);
+}
+
+function getPlayerBidParam(bid, key, defaultValue) {
+ let param = utils.deepAccess(bid, 'params.player.' + key);
+ return param === undefined ? defaultValue : param;
+}
+
+function getBannerBidFloor(bid) {
+ let floorInfo = utils.isFn(bid.getFloor) ? bid.getFloor({ currency: CURRENCY, mediaType: 'banner', size: '*' }) : {};
+ return floorInfo.floor || getBannerBidParam(bid, 'bidfloor');
+}
+
+function getVideoBidFloor(bid) {
+ let floorInfo = utils.isFn(bid.getFloor) ? bid.getFloor({ currency: CURRENCY, mediaType: 'video', size: '*' }) : {};
+ return floorInfo.floor || getVideoBidParam(bid, 'bidfloor');
+}
+
+function isVideoBidValid(bid) {
+ return isVideoBid(bid) && getVideoBidParam(bid, 'appId') && getVideoBidParam(bid, 'bidfloor');
+}
+
+function isBannerBidValid(bid) {
+ return isBannerBid(bid) && getBannerBidParam(bid, 'appId') && getBannerBidParam(bid, 'bidfloor');
+}
+
+function getTopWindowLocation(bidderRequest) {
+ let url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer;
+ return utils.parseUrl(config.getConfig('pageUrl') || url, { decodeSearchAsString: true });
+}
+
+function getTopWindowReferrer() {
+ try {
+ return window.top.document.referrer;
+ } catch (e) {
+ return '';
+ }
+}
+
+function getEids(bid) {
+ return SUPPORTED_USER_IDS
+ .map(getUserId(bid))
+ .filter(x => x);
+}
+
+function getUserId(bid) {
+ return ({ key, source, rtiPartner }) => {
+ let id = utils.deepAccess(bid, `userId.${key}`);
+ return id ? formatEid(id, source, rtiPartner) : null;
+ };
+}
+
+function formatEid(id, source, rtiPartner) {
+ return {
+ source,
+ uids: [{
+ id,
+ ext: { rtiPartner }
+ }]
+ };
+}
+
+function getVideoTargetingParams(bid) {
+ const result = {};
+ const excludeProps = ['playerSize', 'context', 'w', 'h'];
+ Object.keys(Object(bid.mediaTypes.video))
+ .filter(key => !includes(excludeProps, key))
+ .forEach(key => {
+ result[ key ] = bid.mediaTypes.video[ key ];
+ });
+ Object.keys(Object(bid.params.video))
+ .filter(key => includes(VIDEO_TARGETING, key))
+ .forEach(key => {
+ result[ key ] = bid.params.video[ key ];
+ });
+ return result;
+}
+
+function createVideoRequestData(bid, bidderRequest) {
+ let sizes = getVideoSizes(bid);
+ let firstSize = getFirstSize(sizes);
+ let video = getVideoTargetingParams(bid);
+ let appId = getVideoBidParam(bid, 'appId');
+ let bidfloor = getVideoBidFloor(bid);
+ let tagid = getVideoBidParam(bid, 'tagid');
+ let topLocation = getTopWindowLocation(bidderRequest);
+ let eids = getEids(bid);
+ let payload = {
+ isPrebid: true,
+ appId: appId,
+ domain: document.location.hostname,
+ id: utils.getUniqueIdentifierStr(),
+ imp: [{
+ video: Object.assign({
+ w: firstSize.w,
+ h: firstSize.h,
+ mimes: DEFAULT_MIMES
+ }, video),
+ bidfloor: bidfloor,
+ tagid: tagid,
+ secure: topLocation.protocol.indexOf('https') === 0 ? 1 : 0,
+ displaymanager: ADAPTER_NAME,
+ displaymanagerver: ADAPTER_VERSION
+ }],
+ site: {
+ page: topLocation.href,
+ domain: topLocation.hostname
+ },
+ device: {
+ ua: navigator.userAgent,
+ language: navigator.language,
+ devicetype: isMobile() ? 1 : isConnectedTV() ? 3 : 2,
+ dnt: getDoNotTrack() ? 1 : 0,
+ js: 1,
+ geo: {}
+ },
+ regs: {
+ ext: {}
+ },
+ source: {
+ ext: {}
+ },
+ user: {
+ ext: {}
+ },
+ cur: [CURRENCY]
+ };
+
+ if (bidderRequest && bidderRequest.uspConsent) {
+ payload.regs.ext.us_privacy = bidderRequest.uspConsent;
+ }
+
+ if (bidderRequest && bidderRequest.gdprConsent) {
+ let { gdprApplies, consentString } = bidderRequest.gdprConsent;
+ payload.regs.ext.gdpr = gdprApplies ? 1 : 0;
+ payload.user.ext.consent = consentString;
+ }
+
+ if (bid.schain) {
+ payload.source.ext.schain = bid.schain;
+ }
+
+ if (eids.length > 0) {
+ payload.user.ext.eids = eids;
+ }
+
+ let connection = navigator.connection || navigator.webkitConnection;
+ if (connection && connection.effectiveType) {
+ payload.device.connectiontype = connection.effectiveType;
+ }
+
+ return payload;
+}
+
+function createBannerRequestData(bids, bidderRequest) {
+ let topLocation = getTopWindowLocation(bidderRequest);
+ let topReferrer = getTopWindowReferrer();
+ let slots = bids.map(bid => {
+ return {
+ slot: bid.adUnitCode,
+ id: getBannerBidParam(bid, 'appId'),
+ bidfloor: getBannerBidFloor(bid),
+ tagid: getBannerBidParam(bid, 'tagid'),
+ sizes: getBannerSizes(bid)
+ };
+ });
+ let payload = {
+ slots: slots,
+ page: topLocation.href,
+ domain: topLocation.hostname,
+ search: topLocation.search,
+ secure: topLocation.protocol.indexOf('https') === 0 ? 1 : 0,
+ referrer: topReferrer,
+ ua: navigator.userAgent,
+ deviceOs: getOsVersion(),
+ isMobile: isMobile() ? 1 : 0,
+ dnt: getDoNotTrack() ? 1 : 0,
+ adapterVersion: ADAPTER_VERSION,
+ adapterName: ADAPTER_NAME
+ };
+
+ if (bidderRequest && bidderRequest.uspConsent) {
+ payload.usPrivacy = bidderRequest.uspConsent;
+ }
+
+ if (bidderRequest && bidderRequest.gdprConsent) {
+ let { gdprApplies, consentString } = bidderRequest.gdprConsent;
+ payload.gdpr = gdprApplies ? 1 : 0;
+ payload.gdprConsent = consentString;
+ }
+
+ if (bids[0] && bids[0].schain) {
+ payload.schain = bids[0].schain;
+ }
+
+ SUPPORTED_USER_IDS.forEach(({ key, queryParam }) => {
+ let id = utils.deepAccess(bids, `0.userId.${key}`)
+ if (id) {
+ payload[queryParam] = id;
+ }
+ });
+
+ return payload;
+}
+
+registerBidder(spec);
diff --git a/modules/old.json b/modules/old.json
new file mode 100644
index 00000000000..98fa7924437
--- /dev/null
+++ b/modules/old.json
@@ -0,0 +1,77 @@
+Request URL: https://nep.advangelists.com/xp/get?pubid=36b1698d957fc35f63b95c35a7938fe2
+Request Method: POST
+Status Code: 200
+Remote Address: 34.197.167.170:443
+Referrer Policy: strict-origin-when-cross-origin
+access-control-allow-credentials: true
+access-control-allow-origin: http://localhost:9999
+access-control-expose-headers: VAST_XML_ERROR_PIXEL,Access-Control-Allow-Origin,Access-Control-Allow-Credentials,Content-Type
+content-type: application/json;charset=UTF-8
+date: Mon, 28 Jun 2021 11:49:09 GMT
+latency: 298
+server: Apache-Coyote/1.1
+set-cookie: avnguid=av-6389bc98-3971-477d-aa30-93b240d7f6e1; Domain=advangelists.com; Expires=Tue, 28-Jun-2022 11:49:09 GMT
+xp_internal_code: 1000
+:authority: nep.advangelists.com
+:method: POST
+:path: /xp/get?pubid=36b1698d957fc35f63b95c35a7938fe2
+:scheme: https
+accept: */*
+accept-encoding: gzip, deflate, br
+accept-language: en-US,en;q=0.9
+content-length: 830
+content-type: text/plain
+origin: http://localhost:9999
+referer: http://localhost:9999/
+sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
+sec-ch-ua-mobile: ?0
+sec-fetch-dest: empty
+sec-fetch-mode: cors
+sec-fetch-site: cross-site
+user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
+pubid: 36b1698d957fc35f63b95c35a7938fe2
+{device: {langauge: "en", dnt: 0, devicetype: 2, js: 1, os: "Windows 10", h: 864, w: 1536}, at: 2,…}
+at: 2
+cur: ["USD"]
+device: {langauge: "en", dnt: 0, devicetype: 2, js: 1, os: "Windows 10", h: 864, w: 1536}
+devicetype: 2
+dnt: 0
+h: 864
+js: 1
+langauge: "en"
+os: "Windows 10"
+w: 1536
+id: "2eed1fc671b169"
+imp: [{id: "0", displaymanager: "advangelists", displaymanagerver: "1.0", tagId: 10931, bidfloor: 2,…}]
+0: {id: "0", displaymanager: "advangelists", displaymanagerver: "1.0", tagId: 10931, bidfloor: 2,…}
+bidfloor: 2
+bidfloorcur: "USD"
+displaymanager: "advangelists"
+displaymanagerver: "1.0"
+id: "0"
+secure: 0
+tagId: 10931
+video: {id: "5ceda036-1064-452f-84e4-ac02d4bb58e4", pos: 0, w: 320, h: 480,…}
+h: 480
+h: 480
+id: "5ceda036-1064-452f-84e4-ac02d4bb58e4"
+maxduration: 30
+mimes: ["video/mp4", "application/javascript"]
+0: "video/mp4"
+1: "application/javascript"
+playbackmethod: [2, 6]
+pos: 0
+skip: 1
+w: 320
+regs: {ext: {}}
+ext: {}
+site: {,…}
+domain: "pandora.com"
+mobile: 0
+name: "Prebid.js video adUnit example"
+page: "https://www.giftandwrap.co.uk/pandora-jewellery-c90?gclid=Cj0KCQjw_dWGBhDAARIsAMcYuJwonNQrlH2nqYRuKruhdzIgAhXmNUr8HD3EawD9BWilT21-77Wmp_IaAgTfEALw_wcB"
+ref: "http://localhost:9999/integrationExamples/gpt/pbjs_video_adUnit_Avng.html"
+search: ""
+tmax: 3000
+user: {ext: {}}
+ext: {}
\ No newline at end of file
diff --git a/test/spec/modules/advangelistsBidAdapter_spec.js b/test/spec/modules/advangelistsBidAdapter_spec.js
index 2b9615fb572..67c25721871 100755
--- a/test/spec/modules/advangelistsBidAdapter_spec.js
+++ b/test/spec/modules/advangelistsBidAdapter_spec.js
@@ -9,7 +9,7 @@ describe('advangelistsBidAdapter', function () {
beforeEach(function () {
bidRequests = [{'bidder': 'advangelists', 'params': {'pubid': '0cf8d6d643e13d86a5b6374148a4afac', 'placement': 1234}, 'crumbs': {'pubcid': '979fde13-c71e-4ac2-98b7-28c90f99b449'}, 'mediaTypes': {'banner': {'sizes': [[300, 250]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': 'f72931e6-2b0e-4e37-a2bc-1ea912141f81', 'sizes': [[300, 250]], 'bidId': '2aa73f571eaf29', 'bidderRequestId': '1bac84515a7af3', 'auctionId': '5dbc60fa-1aa1-41ce-9092-e6bbd4d478f7', 'src': 'client', 'bidRequestsCount': 1, 'pageurl': 'http://google.com'}];
- bidRequestsVid = [{'bidder': 'advangelists', 'params': {'pubid': '8537f00948fc37cc03c5f0f88e198a76', 'placement': 1234, 'video': {'id': 123, 'skip': 1, 'mimes': ['video/mp4', 'application/javascript'], 'playbackmethod': [2, 6], 'maxduration': 30}}, 'crumbs': {'pubcid': '979fde13-c71e-4ac2-98b7-28c90f99b449'}, 'mediaTypes': {'video': {'playerSize': [[320, 480]], 'context': 'instream'}}, 'adUnitCode': 'video1', 'transactionId': '8b060952-93f7-4863-af44-bb8796b97c42', 'sizes': [], 'bidId': '25c6ab92aa0e81', 'bidderRequestId': '1d420b73a013fc', 'auctionId': '9a69741c-34fb-474c-83e1-cfa003aaee17', 'src': 'client', 'bidRequestsCount': 1, 'pageurl': 'http://google.com'}];
+ bidRequestsVid = [{'bidder': 'advangelists', 'params': {'pubid': '8537f00948fc37cc03c5f0f88e198a76', 'placement': 1234}, 'crumbs': {'pubcid': '979fde13-c71e-4ac2-98b7-28c90f99b449'}, 'mediaTypes': {'video': {'playerSize': [[320, 480]], 'context': 'instream', 'skip': 1, 'mimes': ['video/mp4', 'application/javascript'], 'playbackmethod': [2, 6], 'maxduration': 30}}, 'adUnitCode': 'video1', 'transactionId': '8b060952-93f7-4863-af44-bb8796b97c42', 'sizes': [], 'bidId': '25c6ab92aa0e81', 'bidderRequestId': '1d420b73a013fc', 'auctionId': '9a69741c-34fb-474c-83e1-cfa003aaee17', 'src': 'client', 'bidRequestsCount': 1, 'pageurl': 'http://google.com'}];
});
describe('spec.isBidRequestValid', function () {
@@ -87,7 +87,7 @@ describe('advangelistsBidAdapter', function () {
it('should return valid video bid responses', function () {
let _mediaTypes = VIDEO;
const advangelistsbidreqVid = {'bidRequest': {'mediaTypes': {'video': {'w': 320, 'h': 480}}}};
- const serverResponseVid = {'cur': 'USD', 'id': '25c6ab92aa0e81', 'seatbid': [{'seat': '3', 'bid': [{'crid': '1855', 'h': 480, 'protocol': 2, 'nurl': 'http://nep.advangelists.com/xp/evt?pp=1MO1wiaMhhq7wLRzZZwwwPkJxxKpYEnM5k5MH4qSGm1HR8rp3Nl7vDocvzZzSAvE4pnREL9mQ1kf5PDjk6E8em6DOk7vVrYUH1TYQyqCucd58PFpJNN7h30RXKHHFg3XaLuQ3PKfMuI1qZATBJ6WHcu875y0hqRdiewn0J4JsCYF53M27uwmcV0HnQxARQZZ72mPqrW95U6wgkZljziwKrICM3aBV07TU6YK5R5AyzJRuD6mtrQ2xtHlQ3jXVYKE5bvWFiUQd90t0jOGhPtYBNoOfP7uQ4ZZj4pyucxbr96orHe9PSOn9UpCSWArdx7s8lOfDpwOvbMuyGxynbStDWm38sDgd4bMHnIt762m5VMDNJfiUyX0vWzp05OsufJDVEaWhAM62i40lQZo7mWP4ipoOWLkmlaAzFIMsTcNaHAHiKKqGEOZLkCEhFNM0SLcvgN2HFRULOOIZvusq7TydOKxuXgCS91dLUDxDDDFUK83BFKlMkTxnCzkLbIR1bd9GKcr1TRryOrulyvRWAKAIhEsUzsc5QWFUhmI2dZ1eqnBQJ0c89TaPcnoaP2WipF68UgyiOstf2CBy0M34858tC5PmuQwQYwXscg6zyqDwR0i9MzGH4FkTyU5yeOlPcsA0ht6UcoCdFpHpumDrLUwAaxwGk1Nj8S6YlYYT5wNuTifDGbg22QKXzZBkUARiyVvgPn9nRtXnrd7WmiMYq596rya9RQj7LC0auQW8bHVQLEe49shsZDnAwZTWr4QuYKqgRGZcXteG7RVJe0ryBZezOq11ha9C0Lv0siNVBahOXE35Wzoq4c4BDaGpqvhaKN7pjeWLGlQR04ufWekwxiMWAvjmfgAfexBJ7HfbYNZpq__', 'adid': '61_1855', 'adomain': ['chevrolet.com.ar'], 'price': 2, 'w': 320, 'iurl': 'https://daf37cpxaja7f.cloudfront.net/c61/creative_url_14922301369663_1.png', 'cat': ['IAB2'], 'id': '7f570b40-aca1-4806-8ea8-818ea679c82b_0', 'attr': [], 'impid': '0', 'cid': '61'}]}], 'bidid': '7f570b40-aca1-4806-8ea8-818ea679c82b'}
+ const serverResponseVid = {'cur': 'USD', 'id': '25c6ab92aa0e81', 'seatbid': [{'seat': '3', 'bid': [{'crid': '1855', 'h': 480, 'protocol': 2, 'nurl': 'http://nep.advangelists.com/xp/evt?pp=1MO1wiaMhhq7wLRzZZwwwPkJxxKpYEnM5k5MH4qSGm1HR8rp3Nl7vDocvzZzSAvE4pnREL9mQ1kf5PDjk6E8em6DOk7vVrYUH1TYQyqCucd58PFpJNN7h30RXKHHFg3XaLuQ3PKfMuI1qZATBJ6WHcu875y0hqRdiewn0J4JsCYF53M27uwmcV0HnQxARQZZ72mPqrW95U6wgkZljziwKrICM3aBV07TU6YK5R5AyzJRuD6mtrQ2xtHlQ3jXVYKE5bvWFiUQd90t0jOGhPtYBNoOfP7uQ4ZZj4pyucxbr96orHe9PSOn9UpCSWArdx7s8lOfDpwOvbMuyGxynbStDWm38sDgd4bMHnIt762m5VMDNJfiUyX0vWzp05OsufJDVEaWhAM62i40lQZo7mWP4ipoOWLkmlaAzFIMsTcNaHAHiKKqGEOZLkCEhFNM0SLcvgN2HFRULOOIZvusq7TydOKxuXgCS91dLUDxDDDFUK83BFKlMkTxnCzkLbIR1bd9GKcr1TRryOrulyvRWAKAIhEsUzsc5QWFUhmI2dZ1eqnBQJ0c89TaPcnoaP2WipF68UgyiOstf2CBy0M34858tC5PmuQwQYwXscg6zyqDwR0i9MzGH4FkTyU5yeOlPcsA0ht6UcoCdFpHpumDrLUwAaxwGk1Nj8S6YlYYT5wNuTifDGbg22QKXzZBkUARiyVvgPn9nRtXnrd7WmiMYq596rya9RQj7LC0auQW8bHVQLEe49shsZDnAwZTWr4QuYKqgRGZcXteG7RVJe0ryBZezOq11ha9C0Lv0siNVBahOXE35Wzoq4c4BDaGpqvhaKN7pjeWLGlQR04ufWekwxiMWAvjmfgAfexBJ7HfbYNZpq__', 'adid': '61_1855', 'adomain': ['chevrolet.com'], 'price': 2, 'w': 320, 'iurl': 'https://daf37cpxaja7f.cloudfront.net/c61/creative_url_14922301369663_1.png', 'cat': ['IAB2'], 'id': '7f570b40-aca1-4806-8ea8-818ea679c82b_0', 'attr': [], 'impid': '0', 'cid': '61'}]}], 'bidid': '7f570b40-aca1-4806-8ea8-818ea679c82b'};
const bidResponseVid = spec.interpretResponse({ body: serverResponseVid }, advangelistsbidreqVid);
delete bidResponseVid['vastUrl'];
delete bidResponseVid['ad'];
@@ -99,6 +99,7 @@ describe('advangelistsBidAdapter', function () {
width: serverResponseVid.seatbid[0].bid[0].w,
height: serverResponseVid.seatbid[0].bid[0].h,
mediaType: 'video',
+ meta: { 'advertiserDomains': serverResponseVid.seatbid[0].bid[0].adomain },
currency: 'USD',
netRevenue: true,
ttl: 60
@@ -115,7 +116,7 @@ describe('advangelistsBidAdapter', function () {
};
});
- const serverResponse = {'id': '2aa73f571eaf29', 'seatbid': [{'bid': [{'id': '2c5e8a1a84522d', 'impid': '2c5e8a1a84522d', 'price': 0.81, 'adid': 'abcde-12345', 'nurl': '', 'adm': '', 'adomain': ['advertiserdomain.com'], 'iurl': '', 'cid': 'campaign1', 'crid': 'abcde-12345', 'w': 300, 'h': 250}], 'seat': '19513bcfca8006'}], 'bidid': '19513bcfca8006', 'cur': 'USD', 'w': 300, 'h': 250};
+ const serverResponse = {'id': '2aa73f571eaf29', 'seatbid': [{'bid': [{'id': '2c5e8a1a84522d', 'impid': '2c5e8a1a84522d', 'price': 0.81, 'adid': 'abcde-12345', 'nurl': '', 'adm': '', 'iurl': '', 'cid': 'campaign1', 'crid': 'abcde-12345', 'adomain': ['chevrolet.com'], 'w': 300, 'h': 250}], 'seat': '19513bcfca8006'}], 'bidid': '19513bcfca8006', 'cur': 'USD', 'w': 300, 'h': 250};
const bidResponse = spec.interpretResponse({ body: serverResponse }, advangelistsbidreq);
expect(bidResponse).to.deep.equal({
@@ -127,6 +128,7 @@ describe('advangelistsBidAdapter', function () {
width: serverResponse.seatbid[0].bid[0].w,
height: serverResponse.seatbid[0].bid[0].h,
mediaType: 'banner',
+ meta: { 'advertiserDomains': serverResponse.seatbid[0].bid[0].adomain },
currency: 'USD',
netRevenue: true,
ttl: 60