@@ -3,7 +3,7 @@ import { JSONLikeObject, MultiStatusResponse, PayloadValidationError, RequestCli
33import { AudienceSettings , Settings } from './generated-types'
44import type { Payload } from './syncAudiencesToDSP/generated-types'
55import { MaybeString , AudienceRecord , UserConsent , HashedPIIObject } from './types'
6- import { CONSTANTS , RecordsResponseType , REGEX_EXTERNALUSERID , COUNTRY_CODES } from './utils'
6+ import { FLAG_CONSENT_REQUIRED , CONSTANTS , RecordsResponseType , REGEX_EXTERNALUSERID , COUNTRY_CODES } from './utils'
77import { processHashing } from '../../lib/hashing-utils'
88
99function hasStringValue ( value : MaybeString ) : boolean {
@@ -42,9 +42,10 @@ export async function processPayload(
4242 request : RequestClient ,
4343 settings : Settings ,
4444 payload : Payload [ ] ,
45- audienceSettings : AudienceSettings
45+ audienceSettings : AudienceSettings ,
46+ features ?: Record < string , boolean >
4647) {
47- const payloadRecord = createPayloadToUploadRecords ( payload , audienceSettings )
48+ const payloadRecord = createPayloadToUploadRecords ( payload , audienceSettings , features )
4849 // Regular expression to find a audienceId numeric string and replace the quoted audienceId string with an unquoted number
4950 const payloadString = JSON . stringify ( payloadRecord ) . replace ( / " a u d i e n c e I d " : " ( \d + ) " / , '"audienceId":$1' )
5051
@@ -79,7 +80,8 @@ export async function processPayload(
7980 */
8081export function createPayloadToUploadRecords (
8182 payloads : Payload [ ] ,
82- audienceSettings : AudienceSettings
83+ audienceSettings : AudienceSettings ,
84+ features ?: Record < string , boolean >
8385) {
8486 const records : AudienceRecord [ ] = [ ]
8587 const { audienceId } = payloads [ 0 ]
@@ -88,14 +90,14 @@ export function createPayloadToUploadRecords(
8890 if ( ! REGEX_EXTERNALUSERID . test ( payload . externalUserId ) ) {
8991 return // Skip to the next iteration
9092 }
91- const userConsent = getUserConsent ( payload . consent , audienceSettings . countryCode )
93+ const userConsent = features ?. [ FLAG_CONSENT_REQUIRED ] ? getUserConsent ( payload . consent , audienceSettings . countryCode ) : undefined
9294 const hashedPII = hashedPayload ( payload )
9395 const payloadRecord : AudienceRecord = {
9496 externalUserId : payload . externalUserId ,
9597 countryCode : audienceSettings . countryCode ,
9698 action : payload . event_name == 'Audience Entered' ? CONSTANTS . CREATE : CONSTANTS . DELETE ,
9799 hashedPII : [ hashedPII ] ,
98- userConsent
100+ ... ( userConsent ? { userConsent } : { } )
99101 }
100102 records . push ( payloadRecord )
101103 } )
@@ -115,7 +117,8 @@ export function createPayloadToUploadRecords(
115117function validateAndPreparePayload (
116118 payloads : Payload [ ] ,
117119 multiStatusResponse : MultiStatusResponse ,
118- audienceSettings : AudienceSettings
120+ audienceSettings : AudienceSettings ,
121+ features ?: Record < string , boolean >
119122) {
120123 const validPayloadIndicesBitmap : number [ ] = [ ]
121124 const filteredPayloads : AudienceRecord [ ] = [ ]
@@ -133,7 +136,7 @@ function validateAndPreparePayload(
133136 let userConsent : UserConsent | undefined
134137
135138 try {
136- userConsent = getUserConsent ( payload . consent , audienceSettings . countryCode )
139+ userConsent = features ?. [ FLAG_CONSENT_REQUIRED ] ? getUserConsent ( payload . consent , audienceSettings . countryCode ) : undefined
137140 }
138141 catch ( error ) {
139142 multiStatusResponse . setErrorResponseAtIndex ( originalBatchIndex , {
@@ -151,7 +154,7 @@ function validateAndPreparePayload(
151154 countryCode : audienceSettings . countryCode ,
152155 action : payload . event_name == 'Audience Entered' ? CONSTANTS . CREATE : CONSTANTS . DELETE ,
153156 hashedPII : [ hashedPII ] ,
154- userConsent
157+ ... ( userConsent ? { userConsent } : { } )
155158 }
156159 filteredPayloads . push ( payloadRecord )
157160 validPayloadIndicesBitmap . push ( originalBatchIndex )
@@ -177,13 +180,15 @@ export async function processBatchPayload(
177180 request : RequestClient ,
178181 settings : Settings ,
179182 payloads : Payload [ ] ,
180- audienceSettings : AudienceSettings
183+ audienceSettings : AudienceSettings ,
184+ features ?: Features
181185) {
182186 const multiStatusResponse = new MultiStatusResponse ( )
183187 const { filteredPayloads, validPayloadIndicesBitmap } = validateAndPreparePayload (
184188 payloads ,
185189 multiStatusResponse ,
186- audienceSettings
190+ audienceSettings ,
191+ features
187192 )
188193
189194 if ( ! filteredPayloads . length ) {
0 commit comments