@@ -2,6 +2,7 @@ import { isStr, isNumber, logWarn, logError } from '../src/utils.js';
22import { registerBidder } from '../src/adapters/bidderFactory.js' ;
33import { config } from '../src/config.js' ;
44import { BANNER , VIDEO } from '../src/mediaTypes.js' ;
5+ import { hasPurpose1Consent } from '../src/utils/gdpr.js' ;
56import { ortbConverter } from '../libraries/ortbConverter/converter.js' ;
67
78/**
@@ -73,6 +74,18 @@ function record(eventName, data) {
7374 ) ;
7475}
7576
77+ /**
78+ * Record and log a new error.
79+ *
80+ * @param {string } eventName - The name of the event to record
81+ * @param {Error } err - Error object
82+ * @param {any } data - Event data object
83+ */
84+ function recordAndLogError ( eventName , err , data ) {
85+ record ( eventName , { ...data , error : err } ) ;
86+ logError ( err . message ) ;
87+ }
88+
7689/**
7790 * Validates whether a given account ID is valid.
7891 *
@@ -131,32 +144,50 @@ export const converter = ortbConverter({
131144
132145 // Validate and process impressions - fail fast on structural issues
133146 if ( ! request . imp || ! Array . isArray ( request . imp ) ) {
134- throw new Error ( 'Request must contain a valid impressions array' ) ;
147+ recordAndLogError (
148+ 'ortbConverterRequest/didError' ,
149+ new Error ( 'Request must contain a valid impressions array' )
150+ ) ;
151+ return request ;
135152 }
136153
137154 request . imp . forEach ( ( imp , index ) => {
138155 if ( ! imp ) {
139- throw new Error ( `Impression at index ${ index } is null or undefined` ) ;
156+ recordAndLogError (
157+ 'ortbConverterRequest/didError' ,
158+ new Error ( `Impression at index ${ index } is null or undefined` )
159+ ) ;
160+ return ; // continue to next iteration
140161 }
141162
163+ // If not banner, consider it valid. Move to the next impression
142164 if ( ! imp . banner ) {
143- return ;
165+ return ; // continue to next iteration
144166 }
145167
146168 const doesHWExist = imp . banner . w >= 0 && imp . banner . h >= 0 ;
147169 const doesFormatExist =
148170 Array . isArray ( imp . banner . format ) && imp . banner . format . length > 0 ;
149171
150- if ( ! doesHWExist && doesFormatExist ) {
151- const { w, h } = imp . banner . format [ 0 ] ;
152- if ( typeof w !== 'number' || typeof h !== 'number' ) {
153- throw new Error (
172+ // Skip if dimensions already exist or no format to pull from
173+ if ( doesHWExist || ! doesFormatExist ) {
174+ return ; // continue to next iteration
175+ }
176+
177+ const { w, h } = imp . banner . format [ 0 ] ;
178+
179+ if ( typeof w !== 'number' || typeof h !== 'number' ) {
180+ recordAndLogError (
181+ 'ortbConverterRequest/didError' ,
182+ new Error (
154183 `Invalid banner format dimensions at impression ${ index } : w=${ w } , h=${ h } `
155- ) ;
156- }
157- imp . banner . w = w ;
158- imp . banner . h = h ;
184+ )
185+ ) ;
186+ return ; // continue to next iteration
159187 }
188+
189+ imp . banner . w = w ;
190+ imp . banner . h = h ;
160191 } ) ;
161192
162193 return request ;
@@ -201,8 +232,8 @@ export const spec = {
201232 }
202233 return true ;
203234 } catch ( err ) {
204- record ( 'isBidRequestValid/didError' , { error : err } ) ;
205- logError ( 'Error while validating bid request ', err ) ;
235+ err . message = `Error while validating bid request: ${ err ?. message } ` ;
236+ recordAndLogError ( 'isBidRequestValid/didError ', err ) ;
206237 }
207238 } ,
208239
@@ -230,13 +261,10 @@ export const spec = {
230261 method : 'POST' ,
231262 url : endpoint ,
232263 data : converter . toORTB ( { bidRequests, bidderRequest } ) ,
233- options : {
234- contentType : 'application/json' ,
235- } ,
236264 } ;
237265 } catch ( err ) {
238- record ( 'buildRequests/didError' , { error : err } ) ;
239- logError ( 'Error while building bid request ', err ) ;
266+ err . message = `Error while building bid request: ${ err ?. message } ` ;
267+ recordAndLogError ( 'buildRequests/didError ', err ) ;
240268 }
241269 } ,
242270
@@ -283,8 +311,8 @@ export const spec = {
283311
284312 return interpretedResponse . bids ;
285313 } catch ( err ) {
286- record ( 'interpretResponse/didError' , { error : err } ) ;
287- logError ( 'Error while interpreting bid response ', err ) ;
314+ err . message = `Error while interpreting bid response: ${ err ?. message } ` ;
315+ recordAndLogError ( 'interpretResponse/didError ', err ) ;
288316 }
289317 } ,
290318
@@ -305,17 +333,18 @@ export const spec = {
305333 ) {
306334 record ( 'getUserSyncs' ) ;
307335 try {
308- const userSyncs = serverResponses . flatMap (
309- ( res ) => res ?. body ?. ext ?. userSyncs ?? [ ]
310- ) ;
311- return userSyncs . filter (
312- ( s ) =>
313- ( s . type === 'iframe' && syncOptions . iframeEnabled ) ||
314- ( s . type === 'image' && syncOptions . pixelEnabled )
315- ) ;
336+ if ( hasPurpose1Consent ( gdprConsent ) ) {
337+ return serverResponses
338+ . flatMap ( ( res ) => res ?. body ?. ext ?. userSyncs ?? [ ] )
339+ . filter (
340+ ( s ) =>
341+ ( s . type === 'iframe' && syncOptions . iframeEnabled ) ||
342+ ( s . type === 'image' && syncOptions . pixelEnabled )
343+ ) ;
344+ }
316345 } catch ( err ) {
317- record ( 'getUserSyncs/didError' , { error : err } ) ;
318- logError ( 'Error while getting user syncs ', err ) ;
346+ err . message = `Error while getting user syncs: ${ err ?. message } ` ;
347+ recordAndLogError ( 'getUserSyncs/didError ', err ) ;
319348 }
320349 } ,
321350
0 commit comments