@@ -4,6 +4,7 @@ import {BANNER, VIDEO} from '../src/mediaTypes';
4
4
import * as utils from '../src/utils' ;
5
5
6
6
const BIDDER_CODE = 'richaudience' ;
7
+ let REFERER = '' ;
7
8
8
9
export const spec = {
9
10
code : BIDDER_CODE ,
@@ -39,22 +40,22 @@ export const spec = {
39
40
bidder : bid . bidder ,
40
41
bidderRequestId : bid . bidderRequestId ,
41
42
tagId : bid . adUnitCode ,
42
- sizes : bid . sizes . map ( size => ( {
43
- w : size [ 0 ] ,
44
- h : size [ 1 ] ,
45
- } ) ) ,
43
+ sizes : raiGetSizes ( bid ) ,
46
44
referer : ( typeof bidderRequest . refererInfo . referer != 'undefined' ? encodeURIComponent ( bidderRequest . refererInfo . referer ) : null ) ,
47
45
numIframes : ( typeof bidderRequest . refererInfo . numIframes != 'undefined' ? bidderRequest . refererInfo . numIframes : null ) ,
48
46
transactionId : bid . transactionId ,
49
47
timeout : config . getConfig ( 'bidderTimeout' ) ,
48
+ user : raiSetEids ( bid )
50
49
} ;
51
50
51
+ REFERER = ( typeof bidderRequest . refererInfo . referer != 'undefined' ? encodeURIComponent ( bidderRequest . refererInfo . referer ) : null )
52
+
53
+ payload . gdpr_consent = '' ;
54
+ payload . gdpr = null ;
55
+
52
56
if ( bidderRequest && bidderRequest . gdprConsent ) {
53
57
payload . gdpr_consent = bidderRequest . gdprConsent . consentString ;
54
- payload . gdpr = bidderRequest . gdprConsent . gdprApplies ; // we're handling the undefined case server side
55
- } else {
56
- payload . gdpr_consent = '' ;
57
- payload . gdpr = null ;
58
+ payload . gdpr = bidderRequest . gdprConsent . gdprApplies ;
58
59
}
59
60
60
61
var payloadString = JSON . stringify ( payload ) ;
@@ -76,34 +77,29 @@ export const spec = {
76
77
*/
77
78
interpretResponse : function ( serverResponse , bidRequest ) {
78
79
const bidResponses = [ ] ;
79
-
80
+ // try catch
80
81
var response = serverResponse . body ;
82
+ if ( response ) {
83
+ var bidResponse = {
84
+ requestId : JSON . parse ( bidRequest . data ) . bidId ,
85
+ cpm : response . cpm ,
86
+ width : response . width ,
87
+ height : response . height ,
88
+ creativeId : response . creative_id ,
89
+ mediaType : response . media_type ,
90
+ netRevenue : response . netRevenue ,
91
+ currency : response . currency ,
92
+ ttl : response . ttl ,
93
+ dealId : response . dealId ,
94
+ } ;
81
95
82
- try {
83
- if ( response ) {
84
- var bidResponse = {
85
- requestId : JSON . parse ( bidRequest . data ) . bidId ,
86
- cpm : response . cpm ,
87
- width : response . width ,
88
- height : response . height ,
89
- creativeId : response . creative_id ,
90
- mediaType : response . media_type ,
91
- netRevenue : response . netRevenue ,
92
- currency : response . currency ,
93
- ttl : response . ttl ,
94
- dealId : response . dealId ,
95
- } ;
96
-
97
- if ( response . media_type === 'video' ) {
98
- bidResponse . vastXml = response . vastXML ;
99
- } else {
100
- bidResponse . ad = response . adm
101
- }
102
-
103
- bidResponses . push ( bidResponse ) ;
96
+ if ( response . media_type === 'video' ) {
97
+ bidResponse . vastXml = response . vastXML ;
98
+ } else {
99
+ bidResponse . ad = response . adm
104
100
}
105
- } catch ( error ) {
106
- utils . logError ( 'Error while parsing Rich Audience response' , error ) ;
101
+
102
+ bidResponses . push ( bidResponse ) ;
107
103
}
108
104
return bidResponses
109
105
} ,
@@ -121,20 +117,60 @@ export const spec = {
121
117
var rand = Math . floor ( Math . random ( ) * 9999999999 ) ;
122
118
var syncUrl = '' ;
123
119
124
- if ( gdprConsent && typeof gdprConsent . consentString === 'string' ) {
125
- syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand + '&pubconsent=' + gdprConsent . consentString + '&euconsent=' + gdprConsent . consentString ;
126
- } else {
127
- syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand ;
128
- }
120
+ gdprConsent && typeof gdprConsent . consentString === 'string' ? syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand + '&pubconsent=' + gdprConsent . consentString + '&euconsent=' + gdprConsent . consentString : syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand ;
129
121
130
122
if ( syncOptions . iframeEnabled ) {
131
123
syncs . push ( {
132
124
type : 'iframe' ,
133
125
url : syncUrl
134
126
} ) ;
127
+ } else if ( syncOptions . pixelEnabled && REFERER != null ) {
128
+ syncs . push ( {
129
+ type : 'image' ,
130
+ url : `https://sync.richaudience.com/bf7c142f4339da0278e83698a02b0854/?euconsent=${ gdprConsent . consentString } &referrer=${ REFERER } `
131
+ } ) ;
135
132
}
136
133
return syncs
137
134
} ,
138
135
} ;
139
136
140
137
registerBidder ( spec ) ;
138
+
139
+ function raiGetSizes ( bid ) {
140
+ let raiNewSizes ;
141
+ if ( bid . mediaTypes && bid . mediaTypes . banner && bid . mediaTypes . banner . sizes ) {
142
+ raiNewSizes = bid . mediaTypes . banner . sizes
143
+ } else {
144
+ raiNewSizes = bid . sizes
145
+ }
146
+ if ( raiNewSizes != null ) {
147
+ return raiNewSizes . map ( size => ( {
148
+ w : size [ 0 ] ,
149
+ h : size [ 1 ]
150
+ } ) ) ;
151
+ }
152
+ }
153
+
154
+ function raiSetEids ( bid ) {
155
+ let eids = [ ] ;
156
+
157
+ if ( bid && bid . userId ) {
158
+ raiSetUserId ( bid , eids , 'id5-sync.com' , utils . deepAccess ( bid , `userId.id5id` ) ) ;
159
+ raiSetUserId ( bid , eids , 'pubcommon' , utils . deepAccess ( bid , `userId.pubcid` ) ) ;
160
+ raiSetUserId ( bid , eids , 'criteo.com' , utils . deepAccess ( bid , `userId.criteoId` ) ) ;
161
+ raiSetUserId ( bid , eids , 'liveramp.com' , utils . deepAccess ( bid , `userId.idl_env` ) ) ;
162
+ raiSetUserId ( bid , eids , 'liveintent.com' , utils . deepAccess ( bid , `userId.lipb.lipbid` ) ) ;
163
+ raiSetUserId ( bid , eids , 'adserver.org' , utils . deepAccess ( bid , `userId.tdid` ) ) ;
164
+ }
165
+
166
+ return eids ;
167
+ }
168
+
169
+ function raiSetUserId ( bid , eids , source , value ) {
170
+ if ( utils . isStr ( value ) ) {
171
+ eids . push ( {
172
+ userId : value ,
173
+ source : source
174
+ } ) ;
175
+ }
176
+ }
0 commit comments