Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Adikteev adapter (PR updated) #3391

Merged
merged 12 commits into from
Mar 24, 2019
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@
}
},
bids: [{
bidder: 'adikteev',
params: {
placementId: 13144370,
stagingEnvironment: true,
bidFloorPrice: 0.1,
}
bidder: 'emoteev',
params: {
adSpaceId: 5084,
}
}]
}];

Expand Down
8 changes: 3 additions & 5 deletions integrationExamples/gpt/pbjs_example_gpt.html
Original file line number Diff line number Diff line change
Expand Up @@ -314,12 +314,10 @@
height: '250',
}
},
{
bidder: 'adikteev',
{
bidder: 'emoteev',
params: {
placementId: 12345,
currency: 'EUR',
bidFloorPrice: 0.1,
adSpaceId: 5084,
}
},
]
Expand Down
94 changes: 0 additions & 94 deletions modules/adikteevBidAdapter.js

This file was deleted.

13 changes: 6 additions & 7 deletions modules/adikteevBidAdapter.md → modules/emokteevBidAdapter.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Overview

```
Module Name: Adikteev Bidder Adapter
Module Name: Emoteev Bidder Adapter
Module Type: Bidder Adapter
Maintainer: adnetwork@adikteev.com
Maintainer: engineering@emoteev.io
```

# Description

Module that connects to Adikteev's demand sources
Module that connects to Emoteev's demand sources

# Test Parameters

Expand All @@ -18,15 +18,14 @@ Module that connects to Adikteev's demand sources
code: 'test-div',
mediaTypes: {
banner: {
sizes: [[750, 200]], // a display size
sizes: [[300, 250]],
}
},
bids: [
{
bidder: 'adikteev',
bidder: 'emoteev',
params: {
placementId: 12345,
bidFloorPrice: 0.1,
adSpaceId: 5084
}
}
]
Expand Down
214 changes: 214 additions & 0 deletions modules/emoteevBidAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
import {registerBidder} from '../src/adapters/bidderFactory';
import {BANNER} from '../src/mediaTypes';
import * as utils from '../src/utils';
import {config} from '../src/config';

export const BIDDER_CODE = 'emoteev';
export const AK_PBJS_VERSION = '1.35.0';

export const EMOTEEV_BASE_URL = 'https://prebid.emoteev.io';
export const EMOTEEV_BASE_URL_STAGING = 'https://prebid-staging.emoteev.io';
export const EMOTEEV_BASE_URL_DEVELOPMENT = 'http://localhost:3000';

export const ENDPOINT_PATH = '/api/prebid/bid';
export const USER_SYNC_IFRAME_URL_PATH = '/api/prebid/sync-iframe';
export const USER_SYNC_IMAGE_URL_PATH = '/api/prebid/sync-image';

export const PRODUCTION = 'production';
export const STAGING = 'staging';
export const DEVELOPMENT = 'development';
export const DEFAULT_ENV = PRODUCTION;

export const conformBidRequest = bidRequest => {
return {
params: bidRequest.params,
crumbs: bidRequest.crumbs,
sizes: bidRequest.sizes,
bidId: bidRequest.bidId,
bidderRequestId: bidRequest.bidderRequestId,
};
};

export const emoteevDebug = (parameterDebug, configDebug) => {
if (parameterDebug && parameterDebug.length && parameterDebug.length > 0) return JSON.parse(parameterDebug);
else if (configDebug) return configDebug;
else return false;
};

export const emoteevEnv = (parameteremoteevEnv, configemoteevEnv) => {
if (utils.contains([PRODUCTION, STAGING, DEVELOPMENT], parameteremoteevEnv)) return parameteremoteevEnv;
else if (utils.contains([PRODUCTION, STAGING, DEVELOPMENT], configemoteevEnv)) return configemoteevEnv;
else return DEFAULT_ENV;
};

export const emoteevOverrides = (parameteremoteevOverrides, configemoteevOverrides) => {
if (parameteremoteevOverrides && parameteremoteevOverrides.length !== 0) {
let parsedParams = null;
try {
parsedParams = JSON.parse(parameteremoteevOverrides);
} catch (error) {
parsedParams = null;
}
if (parsedParams) return parsedParams;
}
if (configemoteevOverrides && Object.keys(configemoteevOverrides).length !== 0) return configemoteevOverrides;
else return {};
};

export const akUrl = (environment) => {
switch (environment) {
case DEVELOPMENT:
return EMOTEEV_BASE_URL_DEVELOPMENT;
case STAGING:
return EMOTEEV_BASE_URL_STAGING;
default:
return EMOTEEV_BASE_URL;
}
};

export const endpointUrl = (parameteremoteevEnv, configemoteevEnv) => akUrl(emoteevEnv(parameteremoteevEnv, configemoteevEnv)).concat(ENDPOINT_PATH);
export const userSyncIframeUrl = (parameteremoteevEnv, configemoteevEnv) => akUrl(emoteevEnv(parameteremoteevEnv, configemoteevEnv)).concat(USER_SYNC_IFRAME_URL_PATH);
export const userSyncImageUrl = (parameteremoteevEnv, configemoteevEnv) => akUrl(emoteevEnv(parameteremoteevEnv, configemoteevEnv)).concat(USER_SYNC_IMAGE_URL_PATH);

export const getViewDimensions = () => {
let w = window;
let prefix = 'inner';

if (window.innerWidth === undefined || window.innerWidth === null) {
w = document.documentElement || document.body;
prefix = 'client';
}

return {
width: w[`${prefix}Width`],
height: w[`${prefix}Height`],
};
};

export const getDeviceDimensions = () => {
return {
width: window.screen ? window.screen.width : '',
height: window.screen ? window.screen.height : '',
};
};

export const getDocumentDimensions = () => {
const de = document.documentElement;
const be = document.body;

const bodyHeight = be ? Math.max(be.offsetHeight, be.scrollHeight) : 0;

const w = Math.max(de.clientWidth, de.offsetWidth, de.scrollWidth);
const h = Math.max(
de.clientHeight,
de.offsetHeight,
de.scrollHeight,
bodyHeight
);

return {
width: isNaN(w) ? '' : w,
height: isNaN(h) ? '' : h,
};
};

export const isWebGLEnabled = () => {
// Create test canvas
let canvas = document.createElement('canvas');

// The gl context
let gl = null;

// Try to get the regular WebGL
try {
gl = canvas.getContext('webgl');
} catch (ex) {
canvas = undefined;
return false;
}

// No regular WebGL found
if (!gl) {
// Try experimental WebGL
try {
gl = canvas.getContext('experimental-webgl');
} catch (ex) {
canvas = undefined;
return false;
}
}

return !!gl;
};

export const getDeviceInfo = (deviceDimensions, viewDimensions, documentDimensions, webGL) => {
return {
browserWidth: viewDimensions.width,
browserHeight: viewDimensions.height,
deviceWidth: deviceDimensions.width,
deviceHeight: deviceDimensions.height,
documentWidth: documentDimensions.width,
documentHeight: documentDimensions.height,
webGL: webGL,
};
};

const validateSizes = sizes => utils.isArray(sizes) && sizes.some(size => utils.isArray(size) && size.length === 2);

export const spec = {
code: BIDDER_CODE,
supportedMediaTypes: [BANNER],

isBidRequestValid: (bid) => {
return !!(
bid &&
bid.params &&
bid.params.adSpaceId &&
bid.bidder === BIDDER_CODE &&
validateSizes(bid.mediaTypes.banner.sizes)
);
},

buildRequests: (validBidRequests, bidderRequest) => {
const payload = Object.assign({},
{
akPbjsVersion: AK_PBJS_VERSION,
bidRequests: validBidRequests.map(conformBidRequest),
currency: config.getConfig('currency'),
debug: emoteevDebug(utils.getParameterByName('emoteevDebug'), config.getConfig('emoteev.debug')),
language: navigator.language,
refererInfo: bidderRequest.refererInfo,
deviceInfo: getDeviceInfo(getDeviceDimensions(), getViewDimensions(), getDocumentDimensions(), isWebGLEnabled()),
userAgent: navigator.userAgent,
},
emoteevOverrides(utils.getParameterByName('emoteevOverrides'), config.getConfig('emoteev.overrides')));

return {
method: 'POST',
url: endpointUrl(utils.getParameterByName('emoteevEnv'), config.getConfig('emoteev.env')),
data: JSON.stringify(payload),
};
},

interpretResponse: (serverResponse) => serverResponse.body,

getUserSyncs: (syncOptions, serverResponses) => {
const parameteremoteevEnv = utils.getParameterByName('emoteev.env');
const configemoteevEnv = config.getConfig('emoteev.env');
const syncs = [];
if (syncOptions.iframeEnabled) {
syncs.push({
type: 'iframe',
url: userSyncIframeUrl(parameteremoteevEnv, configemoteevEnv),
});
}
if (syncOptions.pixelEnabled && serverResponses.length > 0) {
syncs.push({
type: 'image',
url: userSyncImageUrl(parameteremoteevEnv, configemoteevEnv),
});
}
return syncs;
},
};
registerBidder(spec);
Loading