1
1
import { registerBidder } from '../src/adapters/bidderFactory.js' ;
2
2
import { BANNER , VIDEO , NATIVE } from '../src/mediaTypes.js' ;
3
- import { isStr , isEmpty , deepAccess , getUnixTimestampFromNow , convertObjectToArray , getWindowTop , deepClone , getWinDimensions } from '../src/utils.js' ;
3
+ import { isStr , isEmpty , deepAccess , isArray , getUnixTimestampFromNow , convertObjectToArray , getWindowTop , deepClone , getWinDimensions , isPlainObjectWithKeys , _map } from '../src/utils.js' ;
4
4
import { config } from '../src/config.js' ;
5
5
import { getStorageManager } from '../src/storageManager.js' ;
6
6
import { toLegacyResponse , toOrtbNativeRequest } from '../src/native.js' ;
@@ -154,28 +154,66 @@ const storageTool = (function () {
154
154
storage . setDataInLocalStorage ( METADATA_KEY , JSON . stringify ( metaDataForSaving ) ) ;
155
155
} ;
156
156
157
- const getUsi = function ( meta , ortb2 , bidParams ) {
158
- // Fetch user id from parameters.
159
- for ( let i = 0 ; i < bidParams . length ; i ++ ) {
160
- const bidParam = bidParams [ i ] ;
161
- if ( bidParam . userId ) {
162
- return bidParam . userId ;
163
- }
157
+ const getFirstValidValueFromArray = function ( arr , param ) {
158
+ const example = ( arr || [ ] ) . find ( ( b ) => {
159
+ return deepAccess ( b , param ) ;
160
+ } ) ;
161
+ return example ? deepAccess ( example , param ) : undefined ;
162
+ } ;
163
+
164
+ const normaliseLegacyIds = function ( obj ) {
165
+ const result = { } ;
166
+ if ( ! isPlainObjectWithKeys ( obj ) ) {
167
+ return result ;
164
168
}
165
- if ( ortb2 && ortb2 . user && ortb2 . user . id ) {
166
- return ortb2 . user . id
169
+ for ( const [ key , value ] of Object . entries ( obj ) ) {
170
+ if ( isPlainObjectWithKeys ( value ) ) {
171
+ const theId = value [ Object . keys ( value ) [ 0 ] ] ;
172
+ if ( isStr ( theId ) ) {
173
+ result [ key ] = theId ;
174
+ }
175
+ } else if ( isStr ( value ) ) {
176
+ result [ key ] = value ;
177
+ }
167
178
}
168
- return ( meta && meta . usi ) ? meta . usi : false
169
- }
179
+
180
+ return result ;
181
+ } ;
170
182
171
183
return {
172
- refreshStorage : function ( bidderRequest ) {
173
- const ortb2 = bidderRequest . ortb2 || { } ;
184
+ refreshStorage : function ( validBidRequests , bidderRequest ) {
174
185
const bidParams = ( bidderRequest . bids || [ ] ) . map ( ( b ) => {
175
186
return b . params ? b . params : { } ;
176
187
} ) ;
177
188
metaInternal = getMetaDataFromLocalStorage ( bidParams ) . reduce ( ( a , entry ) => ( { ...a , [ entry . key ] : entry . value } ) , { } ) ;
178
- metaInternal . usi = getUsi ( metaInternal , ortb2 , bidParams ) ;
189
+ const bidParamUserId = getFirstValidValueFromArray ( bidParams , 'userId' ) ;
190
+ const ortb2 = bidderRequest . ortb2 || { } ;
191
+
192
+ if ( isStr ( bidParamUserId ) ) {
193
+ metaInternal . usi = bidParamUserId ;
194
+ } else if ( isStr ( ortb2 ?. user ?. id ) ) {
195
+ metaInternal . usi = ortb2 . user . id ;
196
+ } else {
197
+ const unvettedOrtb2Eids = deepAccess ( ortb2 , 'user.ext.eids' ) ;
198
+ const vettedOrtb2Eids = isArray ( unvettedOrtb2Eids ) && unvettedOrtb2Eids . length > 0 ? unvettedOrtb2Eids : false ;
199
+ const unvettedBidRequestEids = getFirstValidValueFromArray ( validBidRequests , 'userIdAsEids' ) || bidderRequest ?. userIdAsEids ;
200
+ const vettedBidRequestEids = isArray ( unvettedBidRequestEids ) && unvettedBidRequestEids . length > 0 ? unvettedBidRequestEids : false ;
201
+ const bidRequestUserId = getFirstValidValueFromArray ( validBidRequests , 'userId' ) || bidderRequest ?. userId ;
202
+
203
+ if ( vettedOrtb2Eids ) {
204
+ metaInternal . eids = vettedOrtb2Eids ;
205
+ } else if ( vettedBidRequestEids ) {
206
+ metaInternal . eids = vettedBidRequestEids ;
207
+ } else if ( isPlainObjectWithKeys ( bidRequestUserId ) ) {
208
+ const normalisedLegacyIds = normaliseLegacyIds ( bidRequestUserId ) ;
209
+ if ( isPlainObjectWithKeys ( normalisedLegacyIds ) ) {
210
+ metaInternal . eids = _map ( normalisedLegacyIds , function ( v , k ) {
211
+ return { source : k , uids : [ { id : v } ] }
212
+ } ) ;
213
+ }
214
+ }
215
+ }
216
+
179
217
if ( ! metaInternal . usi ) {
180
218
delete metaInternal . usi ;
181
219
}
@@ -190,8 +228,8 @@ const storageTool = (function () {
190
228
} ,
191
229
getUrlRelatedData : function ( ) {
192
230
// getting the URL information is theoretically not network-specific
193
- const { usi, voidAuIdsArray } = metaInternal ;
194
- return { usi, voidAuIdsArray } ;
231
+ const { usi, voidAuIdsArray, eids } = metaInternal ;
232
+ return { usi, voidAuIdsArray, eids } ;
195
233
} ,
196
234
getPayloadRelatedData : function ( network ) {
197
235
// getting the payload data should be network-specific
@@ -301,12 +339,13 @@ export const spec = {
301
339
queryParamsAndValues . push ( 'so=' + searchParams . get ( 'script-override' ) ) ;
302
340
}
303
341
304
- storageTool . refreshStorage ( bidderRequest ) ;
342
+ storageTool . refreshStorage ( validBidRequests , bidderRequest ) ;
305
343
306
344
const urlRelatedMetaData = storageTool . getUrlRelatedData ( ) ;
307
345
targetingTool . addSegmentsToUrlData ( validBidRequests , bidderRequest , urlRelatedMetaData ) ;
308
346
if ( urlRelatedMetaData . segments . length > 0 ) queryParamsAndValues . push ( 'segments=' + urlRelatedMetaData . segments . join ( ',' ) ) ;
309
347
if ( urlRelatedMetaData . usi ) queryParamsAndValues . push ( 'userId=' + urlRelatedMetaData . usi ) ;
348
+ if ( isArray ( urlRelatedMetaData . eids ) && urlRelatedMetaData . eids . length > 0 ) queryParamsAndValues . push ( 'eids=' + encodeURIComponent ( JSON . stringify ( urlRelatedMetaData . eids ) ) ) ;
310
349
311
350
const bidderConfig = config . getConfig ( ) ;
312
351
if ( bidderConfig . useCookie === false ) queryParamsAndValues . push ( 'noCookies=true' ) ;
@@ -323,7 +362,7 @@ export const spec = {
323
362
continue ;
324
363
}
325
364
326
- let network = bid . params . network || 'network' ;
365
+ const network = bid . params . network || 'network' ;
327
366
bidRequests [ network ] = bidRequests [ network ] || [ ] ;
328
367
bidRequests [ network ] . push ( bid ) ;
329
368
0 commit comments