@@ -5,6 +5,15 @@ import {
5
5
logError
6
6
} from '../../src/utils.js' ;
7
7
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
+ ] ;
8
17
// Function to get Request
9
18
export const getBannerRequest = ( bidRequests , bidderRequest , ENDPOINT ) => {
10
19
let request = [ ] ;
@@ -34,6 +43,7 @@ export const getBannerRequest = (bidRequests, bidderRequest, ENDPOINT) => {
34
43
if ( bidderRequest ?. uspConsent ) {
35
44
deepSetValue ( req , 'regs.ext.us_privacy' , bidderRequest . uspConsent ) ;
36
45
}
46
+ req . MediaType = getMediaType ( bidReq ) ;
37
47
request . push ( req ) ;
38
48
} ) ;
39
49
// Return the array of request
@@ -48,6 +58,15 @@ export const getBannerRequest = (bidRequests, bidderRequest, ENDPOINT) => {
48
58
}
49
59
// Function to get Response
50
60
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 ) => {
51
70
let responseArray = [ ] ;
52
71
if ( bidResponse ) {
53
72
try {
@@ -61,14 +80,28 @@ export const getBannerResponse = (bidResponse, mediaType) => {
61
80
response . height = bidReq . h ;
62
81
response . ad = bidReq . adm ;
63
82
response . meta = {
64
- advertiserDomains : bidReq . adomain
83
+ advertiserDomains : bidReq . adomain ,
84
+ primaryCatId : bidReq . cat || [ ] ,
85
+ attr : bidReq . attr || [ ]
65
86
} ;
66
87
response . creativeId = bidReq . crid ;
67
88
response . netRevenue = false ;
68
89
response . currency = 'USD' ;
69
90
response . ttl = 300 ;
70
91
response . dealId = bidReq . dealId ;
71
92
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
+ }
72
105
responseArray . push ( response ) ;
73
106
} ) ;
74
107
}
@@ -78,13 +111,18 @@ export const getBannerResponse = (bidResponse, mediaType) => {
78
111
}
79
112
return responseArray ;
80
113
}
81
- // Function to get imp
114
+ // Function to get imp based on Media Type
82
115
const getImpDetails = ( bidReq ) => {
83
116
let imp = { } ;
84
117
if ( bidReq ) {
85
118
imp . id = bidReq . bidId ;
86
119
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
+ }
88
126
}
89
127
return imp ;
90
128
}
@@ -137,3 +175,64 @@ const getUserDetails = (bidReq) => {
137
175
}
138
176
return user ;
139
177
}
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