Skip to content

Commit

Permalink
Merge branch 'prebid:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
carsten1980 authored Sep 21, 2023
2 parents a65f77b + 32c1bf6 commit 07723bd
Show file tree
Hide file tree
Showing 152 changed files with 2,512 additions and 938 deletions.
2 changes: 1 addition & 1 deletion integrationExamples/gpt/prebidServer_native_example.html
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
s2sConfig: {
accountId: '1',
enabled: true, //default value set to false
bidders: ['appnexus'],
bidders: ['appnexuspsp'],
timeout: 1000, //default value is 1000
adapter: 'prebidServer', //if we have any other s2s adapter, default value is s2s
endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction'
Expand Down
173 changes: 173 additions & 0 deletions integrationExamples/noadserver/native_noadserver.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
<html>

<head>
<script type="text/javascript" src="../../build/dev/prebid.js" async></script>

<script>
var pbjs = pbjs || {};
pbjs.que = pbjs.que || [];

pbjs.que.push(function () {
const adUnits = [{
code: 'native-div',
mediaTypes: {
native: {
adTemplate: document.getElementById('native-template').innerHTML,
title: {
required: true,
len: 800
},
image: {
required: true,
sizes: [989, 742],
},
sponsoredBy: {
required: true
}
}
},
bids: [{
bidder: 'appnexus',
params: {
placementId: 13232354,
allowSmallerSizes: true
}

}]
}];

pbjs.setConfig({
debug: true,
s2sConfig: {
accountId: '1',
enabled: true,
bidders: ['appnexuspsp'],
timeout: 1000,
adapter: 'prebidServer',
endpoint: 'https://ib.adnxs.com/openrtb2/prebid',
}
});

pbjs.requestBids({
adUnits,
bidsBackHandler: function (bidResponses) {
Object.entries(bidResponses).forEach(([slot, {bids}]) => {
bids?.length && renderNative(slot, bids[0]);
});
}
});

function renderNative(divId, bid) {
const slot = document.getElementById(divId);
const content = `
<!DOCTYPE html>
<html>
<body>
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/native-render.js"> <\/script>
<script>
window.pbNativeData = {
pubUrl: '${encodeURI(document.location)}',
adId: '${bid.adId}',
requestAllAssets: true
};
pbNativeTag.renderNativeAd(pbNativeData);
<\/script>
</body>
</html>
`;

const iframe = document.createElement('iframe');
slot.appendChild(iframe);
Object.entries({
frameBorder: 0,
marginWidth: 0,
marginHeight: 0,
srcdoc: content
}).forEach(([prop, val]) => iframe.setAttribute(prop, val));
}
});

</script>

</head>

<body>

<template id="native-template">
<style>
body {
display: inline-block;
}

.container {
display: inline-block;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #333;
background: #fff url(##hb_native_image##) no-repeat center;
background-size: cover;
}


.card {
border: 4px solid #ffd724;
display: inline-block;
padding: 20px;
height: 300px;
width: 320px;
}


h1 a:link, a:active, a:visited, a:hover, a:focus {
text-decoration: none;
color: #fff;
}

h1 {
line-height: 1.3;
color: #fff;
font-size: 26px;
background-color: rgba(0, 0, 0, 0.7);
display: inline;
font-family: Roboto, serif;
font-weight: 100;
}

.attribution {
color: #fff;
display: inline-block;
letter-spacing: 2px;
background-color: #ffd724;
font-size: 12px;
line-height: 1;
padding: 6px 6px 0 6px;
height: 24px;
margin: 5px 0 10px 0;
border-radius: 4px;
}
</style>
<div class="container">
<div class="card">
<div class="title">
<h1>
<a href="##hb_native_linkurl##">##hb_native_title##</a>
</h1>
</div>
<div class="attribution">
##hb_native_brand##
</div>
</div>
</div>
</template>

<h2>Prebid Native</h2>
<div id='native-div'>
</div>

<br>
<br>

</body>

</html>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {_each, deepAccess, getValueString, isArray, isStr, mergeDeep, isNumber} from '../../src/utils.js';
import {_each, deepAccess, isArray, isNumber, isStr, mergeDeep, logWarn} from '../../src/utils.js';
import {getAllOrtbKeywords} from '../keywords/keywords.js';
import {CLIENT_SECTIONS} from '../../src/fpd/oneClient.js';

Expand All @@ -12,6 +12,19 @@ const ORTB_SEG_PATHS = ['user.data'].concat(
CLIENT_SECTIONS.map((prefix) => `${prefix}.content.data`)
);

function getValueString(param, val, defaultValue) {
if (val === undefined || val === null) {
return defaultValue;
}
if (isStr(val)) {
return val;
}
if (isNumber(val)) {
return val.toString();
}
logWarn('Unsuported type for param: ' + param + ' required type: String');
}

/**
* Converts an object of arrays (either strings or numbers) into an array of objects containing key and value properties
* normally read from bidder params
Expand Down
25 changes: 25 additions & 0 deletions libraries/appnexusUtils/anUtils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Converts a string value in camel-case to underscore eg 'placementId' becomes 'placement_id'
* @param {string} value string value to convert
*/
import {deepClone, isPlainObject} from '../../src/utils.js';

export function convertCamelToUnderscore(value) {
return value.replace(/(?:^|\.?)([A-Z])/g, function (x, y) {
return '_' + y.toLowerCase();
}).replace(/^_/, '');
}

/**
* Creates an array of n length and fills each item with the given value
*/
export function fill(value, length) {
let newArray = [];

for (let i = 0; i < length; i++) {
let valueToPush = isPlainObject(value) ? deepClone(value) : value;
newArray.push(valueToPush);
}

return newArray;
}
19 changes: 19 additions & 0 deletions libraries/chunk/chunk.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* http://npm.im/chunk
* Returns an array with *size* chunks from given array
*
* Example:
* ['a', 'b', 'c', 'd', 'e'] chunked by 2 =>
* [['a', 'b'], ['c', 'd'], ['e']]
*/
export function chunk(array, size) {
let newArray = [];

for (let i = 0; i < Math.ceil(array.length / size); i++) {
let start = i * size;
let end = start + size;
newArray.push(array.slice(start, end));
}

return newArray;
}
37 changes: 37 additions & 0 deletions libraries/gptUtils/gptUtils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import {find} from '../../src/polyfill.js';
import {compareCodeAndSlot, isGptPubadsDefined} from '../../src/utils.js';

/**
* Returns filter function to match adUnitCode in slot
* @param {string} adUnitCode AdUnit code
* @return {function} filter function
*/
export function isSlotMatchingAdUnitCode(adUnitCode) {
return (slot) => compareCodeAndSlot(slot, adUnitCode);
}

/**
* @summary Uses the adUnit's code in order to find a matching gpt slot object on the page
*/
export function getGptSlotForAdUnitCode(adUnitCode) {
let matchingSlot;
if (isGptPubadsDefined()) {
// find the first matching gpt slot on the page
matchingSlot = find(window.googletag.pubads().getSlots(), isSlotMatchingAdUnitCode(adUnitCode));
}
return matchingSlot;
}

/**
* @summary Uses the adUnit's code in order to find a matching gptSlot on the page
*/
export function getGptSlotInfoForAdUnitCode(adUnitCode) {
const matchingSlot = getGptSlotForAdUnitCode(adUnitCode);
if (matchingSlot) {
return {
gptSlot: matchingSlot.getAdUnitPath(),
divId: matchingSlot.getSlotElementId()
};
}
return {};
}
26 changes: 26 additions & 0 deletions libraries/htmlEscape/htmlEscape.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* Encode a string for inclusion in HTML.
* See https://pragmaticwebsecurity.com/articles/spasecurity/json-stringify-xss.html and
* https://codeql.github.com/codeql-query-help/javascript/js-bad-code-sanitization/
* @return {string}
*/
export const escapeUnsafeChars = (() => {
const escapes = {
'<': '\\u003C',
'>': '\\u003E',
'/': '\\u002F',
'\\': '\\\\',
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
'\0': '\\0',
'\u2028': '\\u2028',
'\u2029': '\\u2029'
};

return function (str) {
return str.replace(/[<>\b\f\n\r\t\0\u2028\u2029\\]/g, x => escapes[x]);
};
})();
29 changes: 29 additions & 0 deletions libraries/sizeUtils/sizeUtils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* Read an adUnit object and return the sizes used in an [[728, 90]] format (even if they had [728, 90] defined)
* Preference is given to the `adUnit.mediaTypes.banner.sizes` object over the `adUnit.sizes`
* @param {object} adUnit one adUnit object from the normal list of adUnits
* @returns {Array.<number[]>} array of arrays containing numeric sizes
*/
export function getAdUnitSizes(adUnit) {
if (!adUnit) {
return;
}

let sizes = [];
if (adUnit.mediaTypes && adUnit.mediaTypes.banner && Array.isArray(adUnit.mediaTypes.banner.sizes)) {
let bannerSizes = adUnit.mediaTypes.banner.sizes;
if (Array.isArray(bannerSizes[0])) {
sizes = bannerSizes;
} else {
sizes.push(bannerSizes);
}
// TODO - remove this else block when we're ready to deprecate adUnit.sizes for bidders
} else if (Array.isArray(adUnit.sizes)) {
if (Array.isArray(adUnit.sizes[0])) {
sizes = adUnit.sizes;
} else {
sizes.push(adUnit.sizes);
}
}
return sizes;
}
36 changes: 36 additions & 0 deletions libraries/transformParamsUtils/convertTypes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import {isFn} from '../../src/utils.js';

/**
* Try to convert a value to a type.
* If it can't be done, the value will be returned.
*
* @param {string} typeToConvert The target type. e.g. "string", "number", etc.
* @param {*} value The value to be converted into typeToConvert.
*/
function tryConvertType(typeToConvert, value) {
if (typeToConvert === 'string') {
return value && value.toString();
} else if (typeToConvert === 'number') {
return Number(value);
} else {
return value;
}
}

export function convertTypes(types, params) {
Object.keys(types).forEach(key => {
if (params[key]) {
if (isFn(types[key])) {
params[key] = types[key](params[key]);
} else {
params[key] = tryConvertType(types[key], params[key]);
}

// don't send invalid values
if (isNaN(params[key])) {
delete params.key;
}
}
});
return params;
}
7 changes: 7 additions & 0 deletions libraries/urlUtils/urlUtils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export function tryAppendQueryString(existingUrl, key, value) {
if (value) {
return existingUrl + key + '=' + encodeURIComponent(value) + '&';
}

return existingUrl;
}
Loading

0 comments on commit 07723bd

Please sign in to comment.