Skip to content

Commit 21a78f5

Browse files
Merge branch 'master' into adapter
2 parents bc7df1b + 4cc7d25 commit 21a78f5

File tree

1 file changed

+102
-3
lines changed

1 file changed

+102
-3
lines changed

libraries/audUtils/bidderUtils.js

Lines changed: 102 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ import {
55
logError
66
} from '../../src/utils.js';
77

8+
// Declare native assets
9+
const NATIVE_ASSETS = [
10+
{ id: 1, required: 1, title: { len: 100 } }, // Title
11+
{ id: 2, required: 1, img: { type: 3, w: 300, h: 250 } }, // Main image
12+
{ id: 3, required: 0, data: { type: 1, len: 140 } }, // Body
13+
{ id: 4, required: 1, data: { type: 2 } }, // Sponsored by
14+
{ id: 5, required: 1, icon: { w: 50, h: 50 } }, // Icon
15+
{ id: 6, required: 1, data: { type: 12, len: 15 } } // Call to action
16+
];
817
// Function to get Request
918
export const getBannerRequest = (bidRequests, bidderRequest, ENDPOINT) => {
1019
let request = [];
@@ -34,6 +43,7 @@ export const getBannerRequest = (bidRequests, bidderRequest, ENDPOINT) => {
3443
if (bidderRequest?.uspConsent) {
3544
deepSetValue(req, 'regs.ext.us_privacy', bidderRequest.uspConsent);
3645
}
46+
req.MediaType = getMediaType(bidReq);
3747
request.push(req);
3848
});
3949
// Return the array of request
@@ -48,6 +58,15 @@ export const getBannerRequest = (bidRequests, bidderRequest, ENDPOINT) => {
4858
}
4959
// Function to get Response
5060
export const getBannerResponse = (bidResponse, mediaType) => {
61+
return formatResponse(bidResponse, mediaType);
62+
}
63+
// Function to get NATIVE Response
64+
export const getNativeResponse = (bidResponse, bidRequest, mediaType) => {
65+
const assets = JSON.parse(JSON.parse(bidRequest.data)[0].imp[0].native.request).assets;
66+
return formatResponse(bidResponse, mediaType, assets);
67+
}
68+
// Function to format response
69+
const formatResponse = (bidResponse, mediaType, assets) => {
5170
let responseArray = [];
5271
if (bidResponse) {
5372
try {
@@ -61,14 +80,28 @@ export const getBannerResponse = (bidResponse, mediaType) => {
6180
response.height = bidReq.h;
6281
response.ad = bidReq.adm;
6382
response.meta = {
64-
advertiserDomains: bidReq.adomain
83+
advertiserDomains: bidReq.adomain,
84+
primaryCatId: bidReq.cat || [],
85+
attr: bidReq.attr || []
6586
};
6687
response.creativeId = bidReq.crid;
6788
response.netRevenue = false;
6889
response.currency = 'USD';
6990
response.ttl = 300;
7091
response.dealId = bidReq.dealId;
7192
response.mediaType = mediaType;
93+
if (mediaType == 'native') {
94+
let nativeResp = JSON.parse(bidReq.adm).native;
95+
let nativeData = {
96+
clickUrl: nativeResp.link.url,
97+
impressionTrackers: nativeResp.imptrackers
98+
};
99+
nativeResp.assets.forEach(asst => {
100+
let data = getNativeAssestData(asst, assets);
101+
nativeData[data.key] = data.value;
102+
});
103+
response.native = nativeData;
104+
}
72105
responseArray.push(response);
73106
});
74107
}
@@ -78,13 +111,18 @@ export const getBannerResponse = (bidResponse, mediaType) => {
78111
}
79112
return responseArray;
80113
}
81-
// Function to get imp
114+
// Function to get imp based on Media Type
82115
const getImpDetails = (bidReq) => {
83116
let imp = {};
84117
if (bidReq) {
85118
imp.id = bidReq.bidId;
86119
imp.bidfloor = getFloorPrice(bidReq);
87-
imp.banner = getBannerDetails(bidReq);
120+
if (bidReq.mediaTypes.native) {
121+
let assets = { assets: NATIVE_ASSETS };
122+
imp.native = { request: JSON.stringify(assets) };
123+
} else if (bidReq.mediaTypes.banner) {
124+
imp.banner = getBannerDetails(bidReq);
125+
}
88126
}
89127
return imp;
90128
}
@@ -137,3 +175,64 @@ const getUserDetails = (bidReq) => {
137175
}
138176
return user;
139177
}
178+
// Function to get asset data for response
179+
const getNativeAssestData = (params, assets) => {
180+
let response = {};
181+
if (params.title) {
182+
response.key = 'title';
183+
response.value = params.title.text;
184+
}
185+
if (params.data) {
186+
response.key = getAssetData(params.id, assets);
187+
response.value = params.data.value;
188+
}
189+
if (params.img) {
190+
response.key = getAssetImageDataType(params.id, assets);
191+
response.value = {
192+
url: params.img.url,
193+
height: params.img.h,
194+
width: params.img.w
195+
}
196+
}
197+
return response;
198+
}
199+
// Function to get asset data types based on id
200+
const getAssetData = (paramId, asset) => {
201+
let resp = '';
202+
for (let i = 0; i < asset.length; i++) {
203+
if (asset[i].id == paramId) {
204+
switch (asset[i].data.type) {
205+
case 1 : resp = 'sponsored';
206+
break;
207+
case 2 : resp = 'desc';
208+
break;
209+
case 12 : resp = 'cta';
210+
break;
211+
}
212+
}
213+
}
214+
return resp;
215+
}
216+
// Function to get image type based on the id
217+
const getAssetImageDataType = (paramId, asset) => {
218+
let resp = '';
219+
for (let i = 0; i < asset.length; i++) {
220+
if (asset[i].id == paramId) {
221+
switch (asset[i].img.type) {
222+
case 1 : resp = 'icon';
223+
break;
224+
case 3 : resp = 'image';
225+
break;
226+
}
227+
}
228+
}
229+
return resp;
230+
}
231+
// Function to get Media Type
232+
const getMediaType = (bidReq) => {
233+
if (bidReq.mediaTypes.native) {
234+
return 'native';
235+
} else if (bidReq.mediaTypes.banner) {
236+
return 'banner';
237+
}
238+
}

0 commit comments

Comments
 (0)