Skip to content

Commit ab7513b

Browse files
committed
cleanup for smart hashing
1 parent 63a977e commit ab7513b

File tree

26 files changed

+145
-315
lines changed

26 files changed

+145
-315
lines changed

packages/destination-actions/src/destinations/facebook-conversions-api/__tests__/user-data.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ describe('FacebookConversionsApi', () => {
137137
}
138138
}
139139

140-
const hashed_data = hash_user_data(test_payload, { 'smart-hashing': true }) as Record<string, string>
140+
const hashed_data = hash_user_data(test_payload) as Record<string, string>
141141

142142
expect(hashed_data.em).toEqual('2d2fb2388f17f86affee71d632978425a3037fa8eed5b3f2baaa458c80d495ed')
143143
expect(hashed_data.ph).toEqual('92b5be0b4bcd88dbe1c5f7de1cc3f479fa8a702bd02b9905a5bc14bf66243c05')

packages/destination-actions/src/destinations/facebook-conversions-api/addToCart/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ const action: ActionDefinition<Settings, Payload> = {
114114
event_source_url: payload.event_source_url,
115115
event_id: payload.event_id,
116116
action_source: payload.action_source,
117-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
117+
user_data: hash_user_data({ user_data: payload.user_data }),
118118
custom_data: {
119119
...payload.custom_data,
120120
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/addToCart2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ const action: ActionDefinition<Settings, Payload> = {
121121
event_source_url: payload.event_source_url,
122122
event_id: payload.event_id,
123123
action_source: payload.action_source,
124-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
124+
user_data: hash_user_data({ user_data: payload.user_data }),
125125
custom_data: {
126126
...payload.custom_data,
127127
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/custom/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ const action: ActionDefinition<Settings, Payload> = {
6868
action_source: payload.action_source,
6969
event_id: payload.event_id,
7070
event_source_url: payload.event_source_url,
71-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
71+
user_data: hash_user_data({ user_data: payload.user_data }),
7272
custom_data: payload.custom_data,
7373
app_data: generate_app_data(payload.app_data_field),
7474
data_processing_options: data_options,

packages/destination-actions/src/destinations/facebook-conversions-api/custom2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ const action: ActionDefinition<Settings, Payload> = {
7575
action_source: payload.action_source,
7676
event_id: payload.event_id,
7777
event_source_url: payload.event_source_url,
78-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
78+
user_data: hash_user_data({ user_data: payload.user_data }),
7979
custom_data: payload.custom_data,
8080
app_data: generate_app_data(payload.app_data_field),
8181
data_processing_options: data_options,

packages/destination-actions/src/destinations/facebook-conversions-api/fb-capi-user-data.ts

+16-19
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { InputField } from '@segment/actions-core/destination-kit/types'
22
import { US_STATE_CODES, COUNTRY_CODES } from './constants'
33
import { Payload } from './addToCart/generated-types'
44
import isEmpty from 'lodash/isEmpty'
5-
import { processHashing } from '../../lib/hashing-utils'
6-
import { Features } from '@segment/actions-core'
5+
import { processHashingV2 } from '../../lib/hashing-utils'
76

87
// Implementation of Facebook user data object
98
// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters
@@ -193,16 +192,14 @@ type UserData = Pick<Payload, 'user_data'>
193192

194193
const isHashedInformation = (information: string): boolean => new RegExp(/[0-9abcdef]{64}/gi).test(information)
195194

196-
const hash = (value: string | string[] | undefined, features: Features): string | string[] | undefined => {
195+
const hash = (value: string | string[] | undefined): string | string[] | undefined => {
197196
if (value === undefined || !value.length) return
198197

199198
if (typeof value == 'string') {
200-
return processHashing(value, 'sha256', 'hex', features || {}, 'actions-facebook-conversions-api')
199+
return processHashingV2(value, 'sha256', 'hex')
201200
}
202201

203-
return value.map((el: string) =>
204-
processHashing(el, 'sha256', 'hex', features || {}, 'actions-facebook-conversions-api')
205-
)
202+
return value.map((el: string) => processHashingV2(el, 'sha256', 'hex'))
206203
}
207204

208205
/**
@@ -276,21 +273,21 @@ export const normalize_user_data = (payload: UserData) => {
276273
}
277274
}
278275

279-
export const hash_user_data = (payload: UserData, features: Features): Object => {
276+
export const hash_user_data = (payload: UserData): Object => {
280277
normalize_user_data(payload)
281278
// Hashing this is recommended but not required
282279
return {
283-
em: hash(payload.user_data?.email, features),
284-
ph: hash(payload.user_data?.phone, features),
285-
ge: hash(payload.user_data?.gender, features),
286-
db: hash(payload.user_data?.dateOfBirth, features),
287-
ln: hash(payload.user_data?.lastName, features),
288-
fn: hash(payload.user_data?.firstName, features),
289-
ct: hash(payload.user_data?.city, features),
290-
st: hash(payload.user_data?.state, features),
291-
zp: hash(payload.user_data?.zip, features),
292-
country: hash(payload.user_data?.country, features),
293-
external_id: hash(payload.user_data?.externalId, features), //to provide support for externalId as string and array both
280+
em: hash(payload.user_data?.email),
281+
ph: hash(payload.user_data?.phone),
282+
ge: hash(payload.user_data?.gender),
283+
db: hash(payload.user_data?.dateOfBirth),
284+
ln: hash(payload.user_data?.lastName),
285+
fn: hash(payload.user_data?.firstName),
286+
ct: hash(payload.user_data?.city),
287+
st: hash(payload.user_data?.state),
288+
zp: hash(payload.user_data?.zip),
289+
country: hash(payload.user_data?.country),
290+
external_id: hash(payload.user_data?.externalId), //to provide support for externalId as string and array both
294291
client_ip_address: payload.user_data?.client_ip_address,
295292
client_user_agent: payload.user_data?.client_user_agent,
296293
fbc: payload.user_data?.fbc,

packages/destination-actions/src/destinations/facebook-conversions-api/initiateCheckout/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ const action: ActionDefinition<Settings, Payload> = {
116116
action_source: payload.action_source,
117117
event_source_url: payload.event_source_url,
118118
event_id: payload.event_id,
119-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
119+
user_data: hash_user_data({ user_data: payload.user_data }),
120120
custom_data: {
121121
...payload.custom_data,
122122
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/initiateCheckout2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ const action: ActionDefinition<Settings, Payload> = {
123123
action_source: payload.action_source,
124124
event_source_url: payload.event_source_url,
125125
event_id: payload.event_id,
126-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
126+
user_data: hash_user_data({ user_data: payload.user_data }),
127127
custom_data: {
128128
...payload.custom_data,
129129
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/pageView/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const action: ActionDefinition<Settings, Payload> = {
6767
action_source: payload.action_source,
6868
event_source_url: payload.event_source_url,
6969
event_id: payload.event_id,
70-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
70+
user_data: hash_user_data({ user_data: payload.user_data }),
7171
app_data: generate_app_data(payload.app_data_field),
7272
data_processing_options: data_options,
7373
data_processing_options_country: country_code,

packages/destination-actions/src/destinations/facebook-conversions-api/pageView2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const action: ActionDefinition<Settings, Payload> = {
7474
action_source: payload.action_source,
7575
event_source_url: payload.event_source_url,
7676
event_id: payload.event_id,
77-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
77+
user_data: hash_user_data({ user_data: payload.user_data }),
7878
app_data: generate_app_data(payload.app_data_field),
7979
data_processing_options: data_options,
8080
data_processing_options_country: country_code,

packages/destination-actions/src/destinations/facebook-conversions-api/purchase/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ const action: ActionDefinition<Settings, Payload> = {
115115
action_source: payload.action_source,
116116
event_source_url: payload.event_source_url,
117117
event_id: payload.event_id,
118-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
118+
user_data: hash_user_data({ user_data: payload.user_data }),
119119
custom_data: {
120120
...payload.custom_data,
121121
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/purchase2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const action: ActionDefinition<Settings, Payload> = {
122122
action_source: payload.action_source,
123123
event_source_url: payload.event_source_url,
124124
event_id: payload.event_id,
125-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
125+
user_data: hash_user_data({ user_data: payload.user_data }),
126126
custom_data: {
127127
...payload.custom_data,
128128
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/search/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ const action: ActionDefinition<Settings, Payload> = {
119119
action_source: payload.action_source,
120120
event_id: payload.event_id,
121121
event_source_url: payload.event_source_url,
122-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
122+
user_data: hash_user_data({ user_data: payload.user_data }),
123123
custom_data: {
124124
...payload.custom_data,
125125
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/search2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ const action: ActionDefinition<Settings, Payload> = {
126126
action_source: payload.action_source,
127127
event_id: payload.event_id,
128128
event_source_url: payload.event_source_url,
129-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
129+
user_data: hash_user_data({ user_data: payload.user_data }),
130130
custom_data: {
131131
...payload.custom_data,
132132
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/viewContent/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ const action: ActionDefinition<Settings, Payload> = {
115115
action_source: payload.action_source,
116116
event_id: payload.event_id,
117117
event_source_url: payload.event_source_url,
118-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
118+
user_data: hash_user_data({ user_data: payload.user_data }),
119119
custom_data: {
120120
...payload.custom_data,
121121
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-conversions-api/viewContent2/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const action: ActionDefinition<Settings, Payload> = {
122122
action_source: payload.action_source,
123123
event_id: payload.event_id,
124124
event_source_url: payload.event_source_url,
125-
user_data: hash_user_data({ user_data: payload.user_data }, features || {}),
125+
user_data: hash_user_data({ user_data: payload.user_data }),
126126
custom_data: {
127127
...payload.custom_data,
128128
currency: payload.currency,

packages/destination-actions/src/destinations/facebook-custom-audiences/fbca-operations.ts

+7-19
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { DynamicFieldItem, DynamicFieldError, RequestClient, Features } from '@segment/actions-core'
22
import { Payload } from './sync/generated-types'
33
import { segmentSchemaKeyToArrayIndex, SCHEMA_PROPERTIES, normalizationFunctions } from './fbca-properties'
4-
import { processHashing } from '../../lib/hashing-utils'
4+
import { processHashingV2 } from '../../lib/hashing-utils'
55
import { StatsContext } from '@segment/actions-core/destination-kit'
66
import { API_VERSION, BASE_URL, CANARY_API_VERSION, FACEBOOK_CUSTOM_AUDIENCE_FLAGON } from './constants'
77

@@ -41,7 +41,7 @@ interface FacebookSyncRequestParams {
4141
}
4242

4343
// exported for unit testing. Also why these are not members of the class
44-
export const generateData = (payloads: Payload[], features: Features | undefined): (string | number)[][] => {
44+
export const generateData = (payloads: Payload[]): (string | number)[][] => {
4545
const data: (string | number)[][] = new Array(payloads.length)
4646

4747
payloads.forEach((payload, index) => {
@@ -50,10 +50,10 @@ export const generateData = (payloads: Payload[], features: Features | undefined
5050
Object.entries(payload).forEach(([key, value]) => {
5151
if (typeof value === 'object') {
5252
Object.entries(value).forEach(([nestedKey, value]) => {
53-
appendToDataRow(nestedKey, value as string | number, row, features)
53+
appendToDataRow(nestedKey, value as string | number, row)
5454
})
5555
} else {
56-
appendToDataRow(key, value as string | number, row, features)
56+
appendToDataRow(key, value as string | number, row)
5757
}
5858
})
5959

@@ -63,12 +63,7 @@ export const generateData = (payloads: Payload[], features: Features | undefined
6363
return data
6464
}
6565

66-
const appendToDataRow = (
67-
key: string,
68-
value: string | number,
69-
row: (string | number)[],
70-
features: Features | undefined
71-
) => {
66+
const appendToDataRow = (key: string, value: string | number, row: (string | number)[]) => {
7267
const index = segmentSchemaKeyToArrayIndex.get(key)
7368

7469
if (index === undefined) {
@@ -81,14 +76,7 @@ const appendToDataRow = (
8176
return
8277
}
8378

84-
row[index] = processHashing(
85-
value,
86-
'sha256',
87-
'hex',
88-
features,
89-
'actions-facebook-custom-audiences',
90-
normalizationFunctions.get(key)
91-
)
79+
row[index] = processHashingV2(value, 'sha256', 'hex', normalizationFunctions.get(key))
9280
}
9381

9482
export const getApiVersion = (features?: Features, statsContext?: StatsContext): string => {
@@ -154,7 +142,7 @@ export default class FacebookClient {
154142
}
155143

156144
syncAudience = async (input: { audienceId: string; payloads: Payload[]; deleteUsers?: boolean }) => {
157-
const data = generateData(input.payloads, this.features)
145+
const data = generateData(input.payloads)
158146

159147
const app_ids: string[] = []
160148
let app_ids_items = 0

packages/destination-actions/src/destinations/google-enhanced-conversions/functions.ts

+8-37
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { fullFormats } from 'ajv-formats/dist/formats'
2525
import { HTTPError } from '@segment/actions-core'
2626
import type { Payload as UserListPayload } from './userList/generated-types'
2727
import { RefreshTokenResponse } from '.'
28-
import { processHashing } from '../../lib/hashing-utils'
28+
import { processHashingV2 } from '../../lib/hashing-utils'
2929
export const API_VERSION = 'v17'
3030
export const CANARY_API_VERSION = 'v17'
3131
export const FLAGON_NAME = 'google-enhanced-canary-version'
@@ -443,12 +443,7 @@ export const formatPhone = (phone: string, countryCode?: string): string => {
443443
return formattedPhone
444444
}
445445

446-
const extractUserIdentifiers = (
447-
payloads: UserListPayload[],
448-
idType: string,
449-
syncMode?: string,
450-
features?: Features
451-
) => {
446+
const extractUserIdentifiers = (payloads: UserListPayload[], idType: string, syncMode?: string) => {
452447
const removeUserIdentifiers = []
453448
const addUserIdentifiers = []
454449
// Map user data to Google Ads API format
@@ -463,47 +458,23 @@ const extractUserIdentifiers = (
463458
const identifiers = []
464459
if (payload.email) {
465460
identifiers.push({
466-
hashedEmail: processHashing(
467-
payload.email,
468-
'sha256',
469-
'hex',
470-
features ?? {},
471-
'actions-google-enhanced-conversions',
472-
commonEmailValidation
473-
)
461+
hashedEmail: processHashingV2(payload.email, 'sha256', 'hex', commonEmailValidation)
474462
})
475463
}
476464
if (payload.phone) {
477465
identifiers.push({
478-
hashedPhoneNumber: processHashing(
479-
payload.phone,
480-
'sha256',
481-
'hex',
482-
features ?? {},
483-
'actions-google-enhanced-conversions',
484-
(value) => formatPhone(value, payload.phone_country_code)
466+
hashedPhoneNumber: processHashingV2(payload.phone, 'sha256', 'hex', (value) =>
467+
formatPhone(value, payload.phone_country_code)
485468
)
486469
})
487470
}
488471
if (payload.first_name || payload.last_name || payload.country_code || payload.postal_code) {
489472
const addressInfo: any = {}
490473
if (payload.first_name) {
491-
addressInfo.hashedFirstName = processHashing(
492-
payload.first_name,
493-
'sha256',
494-
'hex',
495-
features ?? {},
496-
'actions-google-enhanced-conversions'
497-
)
474+
addressInfo.hashedFirstName = processHashingV2(payload.first_name, 'sha256', 'hex')
498475
}
499476
if (payload.last_name) {
500-
addressInfo.hashedLastName = processHashing(
501-
payload.last_name,
502-
'sha256',
503-
'hex',
504-
features ?? {},
505-
'actions-google-enhanced-conversions'
506-
)
477+
addressInfo.hashedLastName = processHashingV2(payload.last_name, 'sha256', 'hex')
507478
}
508479
addressInfo.countryCode = payload.country_code ?? ''
509480
addressInfo.postalCode = payload.postal_code ?? ''
@@ -662,7 +633,7 @@ export const handleUpdate = async (
662633
) => {
663634
const id_type = hookListType ?? audienceSettings.external_id_type
664635
// Format the user data for Google Ads API
665-
const [adduserIdentifiers, removeUserIdentifiers] = extractUserIdentifiers(payloads, id_type, syncMode, features)
636+
const [adduserIdentifiers, removeUserIdentifiers] = extractUserIdentifiers(payloads, id_type, syncMode)
666637

667638
// Create an offline user data job
668639
const resourceName = await createOfflineUserJob(request, payloads[0], settings, hookListId, features, statsContext)

0 commit comments

Comments
 (0)